On Sun, Jan 13, 2008 at 10:40:11PM +0100, Christian Garbs wrote:
> On Sat, Jan 12, 2008 at 06:44:32PM +0100, Marc Andre Tanner wrote:
> 
> > dvtm-0.3 is out
> 
> Great!
> 
> Here are some very low priority wishlist items (I can live fine
> without them, but they might be interesting):
> 
>  * With xtermset -T it is possible to change the title of an xterm.
>    dwm can read the title and display it in the bar.  I use it when I
>    ssh to another machines.  Other programs (links for example) use
>    this feature as well.
>    Would it be possible so catch these title-changes and display them
>    in the client title in dvtm?
>    I guess it is some kind of escape-sequence that would have to be
>    handled by madtty, but I really don't know how it works.

Ok, i think the attached patch applied to current master should do
the trick. At least xtermset and elinks seem to work.

Regards,
Marc

-- 
 Marc Andre Tanner >< http://www.brain-dump.org/ >< GPG key: CF7D56C0
diff --git a/dvtm.c b/dvtm.c
index 6fb9ead..8953193 100644
--- a/dvtm.c
+++ b/dvtm.c
@@ -37,7 +37,7 @@ struct Client {
 	WINDOW *window;
 	madtty_t *term;
 	const char *cmd;
-	const char *title;
+	char title[256];
 	uint8_t order;
 	pid_t pid;
 	int pty;
@@ -429,8 +429,8 @@ draw_border(Client *c){
 	curs_set(0);
 	getyx(c->window, y, x);
 	mvwprintw(c->window, 0, 2, TITLE,
-	          c->title ? c->title : "",
-	          c->title ? SEPARATOR : "",
+	          *c->title ? c->title : "",
+	          *c->title ? SEPARATOR : "",
 		  c->order);
 	wmove(c->window, y, x);
 	curs_set(1);
@@ -523,6 +523,22 @@ killclient(const char *args[]){
 	kill(-sel->pid, SIGKILL);
 }
 
+int
+title_escape_seq_handler(madtty_t *term, char *es){
+	Client *c;
+	unsigned int l;
+	if(es[0] != ']' || (es[1] && (es[1] < '0' || es[1] > '9')) || (es[2] && es[2] != ';'))
+		return MADTTY_HANDLER_NOWAY;
+	if((l = strlen(es)) < 3 || es[l - 1] != '\07')
+		return MADTTY_HANDLER_NOTYET;
+	es[l - 1] = '\0';
+	c = (Client *)madtty_get_data(term);
+	strncpy(c->title, es + 3, sizeof(c->title));
+	draw_border(c);
+	debug("window title: %s\n", c->title);
+	return MADTTY_HANDLER_OK;
+}
+
 void
 create(const char *args[]){
 	const char *pargs[] = { "/bin/sh", "-c", args[0], NULL };
@@ -530,8 +546,11 @@ create(const char *args[]){
 	c->window = newwin(wah, waw, way, wax);
 	c->term = madtty_create(height-2, width-2);
 	c->cmd = args[0];
-	c->title = args[1];
+	if(args[1])
+		strncpy(c->title, args[1], sizeof(c->title));
 	c->pid = madtty_forkpty(c->term, "/bin/sh", pargs, &c->pty);
+	madtty_set_data(c->term, c);
+	madtty_set_handler(c->term, title_escape_seq_handler);
 	c->w = width;
 	c->h = height;
 	c->x = wax;

Reply via email to