aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-07-16 21:14:38 +0000
committergotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-07-16 21:14:38 +0000
commit4bf91632557e438fb7cd5e93e1511a749aafcebd (patch)
treec58d7ac581ad815ca30f144d105e4bf6d5191c30
parentf20bf2dd0b3a48191cec442df982185280b764b9 (diff)
downloaddzen-4bf91632557e438fb7cd5e93e1511a749aafcebd.tar.gz
dzen-4bf91632557e438fb7cd5e93e1511a749aafcebd.zip
clean up
readded text longer than line markers git-svn-id: http://dzen.googlecode.com/svn/trunk@125 f2baff5b-bf2c-0410-a398-912abdc3d8b2
-rw-r--r--README12
-rw-r--r--action.c7
-rw-r--r--draw.c114
-rw-r--r--dzen.h2
-rw-r--r--main.c2
5 files changed, 73 insertions, 64 deletions
diff --git a/README b/README
index 62dadc1..9cf1430 100644
--- a/README
+++ b/README
@@ -374,7 +374,8 @@ of lines to the slave window as defined by the parameter to '-l'.
This feature allows to dynamically (at runtime) set foreground and
background colors for dzen's input (colored text) working in all
-modes (title only, slave window and menu mode).
+modes (title only, slave window and menu mode). You can specify the
+colors by using their symbolic names or '#rrggbb' values.
The input must be in the following format:
@@ -382,17 +383,26 @@ The input must be in the following format:
^fg(red)I'm red text ^fg(blue)I am blue
+ Escaped version, if you view this file with dzen:
+ ^^fg(red)I'm red text ^^fg(blue)I am blue
+
* Setting foreground and/or background colors:
^bg(#ffaaaa)The ^fg(yellow)text to ^bg(blue)^fg(orange)colorize
+ Escaped version, if you view this file with dzen:
+ ^^bg(#ffaaaa)The ^^fg(yellow)text to ^^bg(blue)^fg(orange)colorize
+
* If you need to print '^^' characters double them in order to escape them
from being interpreted
^fg(grey70)Some text containing ^^ characters
+ Escaped version, if you view this file with dzen:
+ ^^fg(grey70)Some text containing ^^^^ characters
+
Examples:
diff --git a/action.c b/action.c
index a83944f..ea66889 100644
--- a/action.c
+++ b/action.c
@@ -202,12 +202,14 @@ void
fill_ev_table(char *input) {
char *str1, *str2, *str3, *str4,
*token, *subtoken, *kommatoken, *dptoken;
- char *saveptr1, *saveptr2, *saveptr3, *saveptr4;
+ char *saveptr1=NULL,
+ *saveptr2=NULL,
+ *saveptr3=NULL,
+ *saveptr4=NULL;
int j, i=0, k=0;
long eid=0;
handlerf *ah=0;
- saveptr1 = NULL; /* wtf, gcc? wtf? */
for (j = 1, str1 = input; ; j++, str1 = NULL) {
token = strtok_r(str1, ";", &saveptr1);
if (token == NULL)
@@ -267,7 +269,6 @@ a_exit(char * opt[]) {
int
a_collapse(char * opt[]){
- int i;
(void)opt;
if(!dzen.slave_win.ishmenu
&& dzen.slave_win.max_lines
diff --git a/draw.c b/draw.c
index a32f860..48820b5 100644
--- a/draw.c
+++ b/draw.c
@@ -29,9 +29,6 @@ textnw(const char *text, unsigned int len) {
void
drawtext(const char *text, int reverse, int line, int align) {
- int x=0, y=0, w, h;
- static char buf[1024];
- unsigned int len, olen;
XRectangle r = { dzen.x, dzen.y, dzen.w, dzen.h};
@@ -46,28 +43,6 @@ drawtext(const char *text, int reverse, int line, int align) {
XSetForeground(dzen.dpy, dzen.rgc, dzen.norm[ColBG]);
}
-
- w = 0;
- olen = len = strlen(text);
- /*
- if(len >= sizeof buf)
- len = sizeof buf - 1;
- memcpy(buf, text, len);
- buf[len] = 0;
- h = dzen.font.ascent + dzen.font.descent;
-
- while(len && (w = textnw(buf, len)) > dzen.w - h)
- buf[--len] = 0;
- if(len < olen) {
- if(len > 1)
- buf[len - 1] = '.';
- if(len > 2)
- buf[len - 2] = '.';
- if(len > 3)
- buf[len - 3] = '.';
- }
- */
-
if(dzen.font.set)
parse_line(text, line, align, reverse);
else
@@ -144,7 +119,7 @@ get_tokval(const char* line, char **retdata) {
int
get_token(const char *line, int * t, char **tval) {
- int off=0, next_pos;
+ int off=0, next_pos=0;
char *tokval = NULL;
if(*(line+1) == '^')
@@ -176,16 +151,14 @@ get_token(const char *line, int * t, char **tval) {
void
parse_line(const char *line, int lnr, int align, int reverse) {
- int i, next_pos=0, j=0, px=0, py=0, xorig, h;
- char lbuf[1024];
- int cnr=0, oc, he=0;
+ int i, next_pos=0, j=0, px=0, py=0, xorig, h, tw, ow;
+ char lbuf[MAX_LINE_LEN];
int t=-1;
char *tval=NULL;
Drawable pm;
- GC tgc;
+ XRectangle r = { dzen.x, dzen.y, dzen.w, dzen.h};
- tgc = XCreateGC(dzen.dpy, RootWindow(dzen.dpy, DefaultScreen(dzen.dpy)), 0, 0);
h = dzen.font.ascent + dzen.font.descent;
xorig = 0; py = dzen.font.ascent + (dzen.line_height - h) / 2;;
@@ -199,30 +172,28 @@ parse_line(const char *line, int lnr, int align, int reverse) {
}
if(!reverse) {
- XSetBackground(dzen.dpy, tgc, dzen.norm[ColBG]);
- XSetForeground(dzen.dpy, tgc, dzen.norm[ColBG]);
+ XSetBackground(dzen.dpy, dzen.tgc, dzen.norm[ColBG]);
+ XSetForeground(dzen.dpy, dzen.tgc, dzen.norm[ColBG]);
}
else {
- XSetBackground(dzen.dpy, tgc, dzen.norm[ColFG]);
- XSetForeground(dzen.dpy, tgc, dzen.norm[ColFG]);
+ XSetBackground(dzen.dpy, dzen.tgc, dzen.norm[ColFG]);
+ XSetForeground(dzen.dpy, dzen.tgc, dzen.norm[ColFG]);
}
- XRectangle r = { dzen.x, dzen.y, dzen.w, dzen.h};
- XFillRectangles(dzen.dpy, pm, tgc, &r, 1);
+ XFillRectangles(dzen.dpy, pm, dzen.tgc, &r, 1);
if(!reverse) {
- XSetForeground(dzen.dpy, tgc, dzen.norm[ColFG]);
+ XSetForeground(dzen.dpy, dzen.tgc, dzen.norm[ColFG]);
}
else {
- XSetForeground(dzen.dpy, tgc, dzen.norm[ColBG]);
+ XSetForeground(dzen.dpy, dzen.tgc, dzen.norm[ColBG]);
}
if( (lnr + dzen.slave_win.first_line_vis) >= dzen.slave_win.tcnt) {
XmbDrawImageString(dzen.dpy, pm, dzen.font.set,
- tgc, px, py, " ", strlen(" "));
+ dzen.tgc, px, py, "", 0);
XCopyArea(dzen.dpy, pm, dzen.slave_win.drawable[lnr], dzen.gc,
0, 0, px, dzen.line_height, xorig, 0);
XFreePixmap(dzen.dpy, pm);
- XFreeGC(dzen.dpy, tgc);
return;
}
@@ -234,19 +205,35 @@ parse_line(const char *line, int lnr, int align, int reverse) {
switch(t) {
case fg:
reverse ?
- XSetBackground(dzen.dpy, tgc, getcolor(tval)) :
- XSetForeground(dzen.dpy, tgc, getcolor(tval));
+ XSetBackground(dzen.dpy, dzen.tgc, getcolor(tval)) :
+ XSetForeground(dzen.dpy, dzen.tgc, getcolor(tval));
break;
case bg:
reverse ?
- XSetForeground(dzen.dpy, tgc, getcolor(tval)) :
- XSetBackground(dzen.dpy, tgc, getcolor(tval));
+ XSetForeground(dzen.dpy, dzen.tgc, getcolor(tval)) :
+ XSetBackground(dzen.dpy, dzen.tgc, getcolor(tval));
break;
}
}
+ ow = j;
+ tw = textnw(lbuf, strlen(lbuf));
+ while( (tw + px) > (dzen.w - h)) {
+ lbuf[--j] = '\0';
+ tw = textnw(lbuf, strlen(lbuf));
+ }
+ if(j < ow) {
+ if(j > 1)
+ lbuf[j - 1] = '.';
+ if(j > 2)
+ lbuf[j - 2] = '.';
+ if(j > 3)
+ lbuf[j - 3] = '.';
+ }
+
+
XmbDrawImageString(dzen.dpy, pm, dzen.font.set,
- tgc, px, py, lbuf, strlen(lbuf));
- px += textnw(lbuf, strlen(lbuf));
+ dzen.tgc, px, py, lbuf, tw);
+ px += tw;
j=0; t=-1; tval=NULL;
/* get values */
@@ -269,19 +256,34 @@ parse_line(const char *line, int lnr, int align, int reverse) {
switch(t) {
case fg:
reverse ?
- XSetBackground(dzen.dpy, tgc, getcolor(tval)) :
- XSetForeground(dzen.dpy, tgc, getcolor(tval));
+ XSetBackground(dzen.dpy, dzen.tgc, getcolor(tval)) :
+ XSetForeground(dzen.dpy, dzen.tgc, getcolor(tval));
break;
case bg:
reverse ?
- XSetForeground(dzen.dpy, tgc, getcolor(tval)) :
- XSetBackground(dzen.dpy, tgc, getcolor(tval));
+ XSetForeground(dzen.dpy, dzen.tgc, getcolor(tval)) :
+ XSetBackground(dzen.dpy, dzen.tgc, getcolor(tval));
break;
}
}
+ ow = j;
+ tw = textnw(lbuf, strlen(lbuf));
+ while( (tw + px) > (dzen.w - h)) {
+ lbuf[--j] = '\0';
+ tw = textnw(lbuf, strlen(lbuf));
+ }
+ if(j < ow) {
+ if(j > 1)
+ lbuf[j - 1] = '.';
+ if(j > 2)
+ lbuf[j - 2] = '.';
+ if(j > 3)
+ lbuf[j - 3] = '.';
+ }
+
XmbDrawImageString(dzen.dpy, pm, dzen.font.set,
- tgc, px, py, lbuf, strlen(lbuf));
- px += textnw(lbuf, strlen(lbuf));
+ dzen.tgc, px, py, lbuf, tw);
+ px += tw;
if(align == ALIGNLEFT)
xorig = h/2;
@@ -305,13 +307,10 @@ parse_line(const char *line, int lnr, int align, int reverse) {
0, 0, px, dzen.line_height, xorig, 0);
}
XFreePixmap(dzen.dpy, pm);
- XFreeGC(dzen.dpy, tgc);
}
void
drawheader(const char * text) {
- const char *ctext;
- unsigned long colfg, colbg;
dzen.x = 0;
dzen.y = 0;
dzen.w = dzen.title_win.width;
@@ -331,9 +330,6 @@ drawheader(const char * text) {
void
drawbody(char * text) {
- const char *ctext;
- unsigned long colfg, colbg;
-
if(dzen.slave_win.tcnt == dzen.slave_win.tsize)
free_buffer();
if(dzen.slave_win.tcnt < dzen.slave_win.tsize) {
diff --git a/dzen.h b/dzen.h
index 1408045..3ea113a 100644
--- a/dzen.h
+++ b/dzen.h
@@ -100,7 +100,7 @@ struct DZEN {
unsigned int depth;
Visual *visual;
- GC gc, rgc;
+ GC gc, rgc, tgc;
Fnt font;
Bool ispersistent;
diff --git a/main.c b/main.c
index 765d728..c209d24 100644
--- a/main.c
+++ b/main.c
@@ -433,6 +433,8 @@ x_create_windows(void) {
dzen.rgc = XCreateGC(dzen.dpy, root, 0, 0);
XSetForeground(dzen.dpy, dzen.rgc, dzen.norm[ColBG]);
XSetBackground(dzen.dpy, dzen.rgc, dzen.norm[ColFG]);
+ dzen.tgc = XCreateGC(dzen.dpy, root, 0, 0);
+
}
static void