From 66531b005f61368f6f8edcd7641b3894ff8d4c29 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 10 Aug 2013 03:54:55 +0200 Subject: rio: shorten overlong window labels --- sys/src/cmd/rio/rio.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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; ilabel); + menu3str[i+Hidden] = shortlabel(hidden[i]->label); } for(i+=Hidden; menu3str[i]; i++){ free(menu3str[i]); -- cgit v1.2.3