Xterm title [PATCH included]
Adam Byrtek 'alpha'
alpha at student.uci.agh.edu.pl
Sun Dec 29 13:12:06 UTC 2002
On Fri, Dec 27, 2002 at 03:54:05PM +0100, Thomas Zajic wrote:
> I really like mc's new feature to set the Xterm title to mc's current
> directory. Still, I've got one minor cosmetical request concerning this
> feature: would it be possible to save the original Xterm title when mc
> starts, and restore it when mc quits?
I guess attached patch could be helpful for you.
I've tested this feature on:
- xterm, rxvt (no problems)
- aterm (stores initial window title, not the current one)
BTW it doesn't restore title when one turns 'xterm window title' off.
When somebody turns this off - it means he has a purpose.
I'm sending this patch to mc BTS, maybe Pavel will consider including
it to 4.6.0 when he returns.
HTH
Regards
--
_.|._ |_ _. : Adam Byrtek, alpha@(irc.pl|debian.org)
(_|||_)| |(_| : gg 1802819, pgp 0xB25952C0
| : jid alpha.pl(at)jabber.org
-------------- next part --------------
Index: src/main.c
===================================================================
RCS file: /cvs/gnome/mc/src/main.c,v
retrieving revision 1.272
diff -u -r1.272 main.c
--- src/main.c 27 Dec 2002 23:23:34 -0000 1.272
+++ src/main.c 29 Dec 2002 13:02:17 -0000
@@ -2403,11 +2403,45 @@
}
#endif /* NATIVE_WIN32 */
+/* Remember old xterm widow title. Tested on xterm, rxvt (works well)
+ * and aterm (stores inital title, not the current one). */
+unsigned char *
+store_xterm_title (void)
+{
+ static unsigned char title[255];
+ int c, i = 0;
+
+ printf ("\e[21t");
+ fflush (stdout);
+
+ nodelay (stdscr, TRUE);
+ while (i < 255 && (c=getch()) != -1) {
+ title[i++] = c;
+ }
+ nodelay (stdscr, FALSE);
+
+ /* strip leading \e[l and trailing \e] */
+ if (i < 5)
+ return NULL;
+ title[i-2] = '\0';
+ return title+3;
+}
+
+void
+restore_xterm_title (unsigned char *title)
+{
+ if (title != NULL) {
+ printf("\e]0;%s\a", title);
+ fflush(stdout);
+ }
+}
+
int
main (int argc, char *argv[])
{
/* if on, it displays the information that files have been moved to ~/.mc */
int show_change_notice = 0;
+ unsigned char *old_xterm_title = NULL;
/* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
setlocale (LC_ALL, "");
@@ -2510,9 +2544,16 @@
#endif /* HAVE_SUBSHELL_SUPPORT */
prompt = (geteuid () == 0) ? "# " : "$ ";
+ /* Must be done be after slang_init, init_curses, init_xterm_support */
+ if (xterm_flag)
+ old_xterm_title = store_xterm_title();
+
/* Program main loop */
do_nc ();
+ if (xterm_flag && xterm_title)
+ restore_xterm_title(old_xterm_title);
+
/* Save the tree store */
tree_store_save ();
Index: src/ChangeLog
===================================================================
RCS file: /cvs/gnome/mc/src/ChangeLog,v
retrieving revision 1.1088
diff -u -0 -r1.1088 ChangeLog
--- src/ChangeLog 27 Dec 2002 17:52:24 -0000 1.1088
+++ src/ChangeLog 29 Dec 2002 13:03:09 -0000
@@ -0,0 +1,6 @@
+2002-12-29 Adam Byrtek <alpha at debian.org>
+
+ * main.c (store_xterm_title, restore_xterm_title): New
+ functions. Xterm window title stored at startup, restored at
+ clean exit (only if xterm_title is set).
+
More information about the mc-devel
mailing list