diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-08-10 03:54:55 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-08-10 03:54:55 +0200 |
commit | 66531b005f61368f6f8edcd7641b3894ff8d4c29 (patch) | |
tree | 9282a90fdf8c762fc1341d69bd7f7754d8704935 /sys/src/cmd/rio/rio.c | |
parent | e71ff9dc18c0e4d0cd63f0c168e64205af4ccb5a (diff) |
rio: shorten overlong window labels
Diffstat (limited to 'sys/src/cmd/rio/rio.c')
-rw-r--r-- | sys/src/cmd/rio/rio.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/sys/src/cmd/rio/rio.c b/sys/src/cmd/rio/rio.c index 8dbbf47be..2fd16d621 100644 --- a/sys/src/cmd/rio/rio.c +++ b/sys/src/cmd/rio/rio.c @@ -695,6 +695,32 @@ obscured(Window *w, Rectangle r, int i) return 0; } +static char* +shortlabel(char *s) +{ + enum { NBUF=60 }; + static char buf[NBUF*UTFmax]; + int i, k, l; + Rune r; + + l = utflen(s); + if(l < NBUF-2) + return estrdup(s); + k = i = 0; + while(i < NBUF/2){ + k += chartorune(&r, s+k); + i++; + } + strncpy(buf, s, k); + strcpy(buf+k, "..."); + while((l-i) >= NBUF/2-4){ + k += chartorune(&r, s+k); + i++; + } + strcat(buf, s+k); + return estrdup(buf); +} + void button3menu(void) { @@ -716,7 +742,7 @@ button3menu(void) n = nelem(menu3str)-Hidden-1; for(i=0; i<n; i++){ free(menu3str[i+Hidden]); - menu3str[i+Hidden] = estrdup(hidden[i]->label); + menu3str[i+Hidden] = shortlabel(hidden[i]->label); } for(i+=Hidden; menu3str[i]; i++){ free(menu3str[i]); |