summaryrefslogtreecommitdiff
path: root/sys/src/cmd/rio/rio.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-08-10 03:54:55 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-08-10 03:54:55 +0200
commit66531b005f61368f6f8edcd7641b3894ff8d4c29 (patch)
tree9282a90fdf8c762fc1341d69bd7f7754d8704935 /sys/src/cmd/rio/rio.c
parente71ff9dc18c0e4d0cd63f0c168e64205af4ccb5a (diff)
rio: shorten overlong window labels
Diffstat (limited to 'sys/src/cmd/rio/rio.c')
-rw-r--r--sys/src/cmd/rio/rio.c28
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]);