rio: shorten overlong window labels

This commit is contained in:
cinap_lenrek 2013-08-10 03:54:55 +02:00
parent e71ff9dc18
commit 66531b005f

View file

@ -695,6 +695,32 @@ obscured(Window *w, Rectangle r, int i)
return 0; 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 void
button3menu(void) button3menu(void)
{ {
@ -716,7 +742,7 @@ button3menu(void)
n = nelem(menu3str)-Hidden-1; n = nelem(menu3str)-Hidden-1;
for(i=0; i<n; i++){ for(i=0; i<n; i++){
free(menu3str[i+Hidden]); free(menu3str[i+Hidden]);
menu3str[i+Hidden] = estrdup(hidden[i]->label); menu3str[i+Hidden] = shortlabel(hidden[i]->label);
} }
for(i+=Hidden; menu3str[i]; i++){ for(i+=Hidden; menu3str[i]; i++){
free(menu3str[i]); free(menu3str[i]);