Xterm title format string
Adam Byrtek / alpha
alpha at student.uci.agh.edu.pl
Sun Mar 2 19:09:01 UTC 2003
On Sun, Mar 02, 2003 at 03:42:39PM +0100, Adam Byrtek / alpha wrote:
> I just like to ask you, what other format variables might be useful
> for users (pid, edited/viewed file name...)? I will appreciate any
> suggestions.
Nevermind. I decided to support standard bash PS1 substitutions (but
begginning with '%', not '\', because it is more mc-ish) to make
configuration easier for those familiar with bash PS1.
If you want to test it, try the patch. This command gives you
everything you could have in the title:
MC_XTITLE="%%%$ %u@%h(%H) %w(%W) <%p> mc %V [%t]" mc
Documentation:
%% - percent '%' character
%$ - '#' for root, '$' for normal user
%w - working directory
%W - working directory (last component only)
%p - process id (pid)
%u - username
%h - hostname
%H - hostname.domainname
%t - tty connected to stdin
%V - mc version
The default is "%w - mc"
Regards
--
_.|._ |_ _. : Adam Byrtek /alpha/
(_|||_)| |(_| : email alpha@(irc.pl|debian.org)
| : jabber alpha.pl(at)jabber.org, pgp 0xB25952C0
-------------- next part --------------
Index: main.c
===================================================================
RCS file: /cvs/gnome/mc/src/main.c,v
retrieving revision 1.281
diff -u -r1.281 main.c
--- main.c 27 Feb 2003 05:09:35 -0000 1.281
+++ main.c 2 Mar 2003 19:07:53 -0000
@@ -1839,17 +1839,95 @@
void
update_xterm_title_path (void)
{
+ int i = 0;
unsigned char *p, *s;
+ unsigned char title [BUF_MEDIUM+1];
if (xterm_flag && xterm_title) {
- p = s = g_strdup (strip_home_and_password (cpanel->cwd));
+ /* Use special environment variable to format title */
+ if ((p = getenv ("MC_XTITLE")) == NULL) {
+ p = "%w - mc";
+ }
+
do {
+ if (*p != '%') {
+ title [i++] = *p;
+ continue;
+ }
+ if (!*++p)
+ break;
+
+ /* Substitute '%' special characters
+ * (meaning the same as for bash, but preceded by '%', not '\')
+ */
+ s = NULL;
+ switch (*p) {
+ case '%' : /* %% - percent '%' character */
+ title [i++] = '%';
+ break;
+ case '$' : /* %$ - '#' for root, '$' for normal user */
+ title [i++] = (geteuid()==0 ? '#' : '$');
+ break;
+ case 'w' : /* %w - working directory */
+ s = g_strdup (strip_home_and_password (cpanel->cwd));
+ break;
+ case 'W' : /* %W - working directory (last component only) */
+ s = g_strdup (x_basename (strip_home_and_password (cpanel->cwd)));
+ break;
+ case 'p' : /* %p - process id (pid) */
+ s = g_strdup_printf ("%d", getpid ());
+ break;
+ case 'u' : /* %u - username */
+ s = g_strdup (getpwuid (getuid ()) -> pw_name);
+ break;
+ case 'h' : /* %h - hostname */
+ if (gethostname (title+i, BUF_MEDIUM-i) == 0) {
+ title [BUF_MEDIUM] = '\0';
+ i = strlen (title);
+ }
+ break;
+ case 'H' : /* %H - hostname.domainname */
+ if (gethostname (title+i, BUF_MEDIUM-i) == 0) {
+ title [BUF_MEDIUM] = '\0';
+ i = strlen (title);
+ }
+ if (i < BUF_MEDIUM-1) {
+ title[i++]='.';
+ if (getdomainname (title+i, BUF_MEDIUM-i) == 0) {
+ title [BUF_MEDIUM] = '\0';
+ i = strlen (title);
+ }
+ }
+ break;
+ case 't' : /* %t - tty connected to stdin */
+ s = g_strdup (ttyname (0));
+ break;
+ case 'V' : /* %V - mc version */
+ s = g_strdup (VERSION);
+ break;
+ }
+
+ /* Append substituted string */
+ if (s) {
+ strncpy (title+i, s, BUF_MEDIUM-i);
+ title [BUF_MEDIUM] = '\0';
+ i = strlen (title);
+ g_free (s);
+ }
+ } while (*++p && i<BUF_MEDIUM);
+ title [i] = '\0';
+
+ /* Replace non-printable characters with '?' */
+ s = title;
+ while (*s) {
if (!is_printable (*s))
*s = '?';
- } while (*++s);
- fprintf (stdout, "\33]0;mc - %s\7", p);
+ s++;
+ }
+
+ /* Use xterm escape sequence to set window title */
+ fprintf (stdout, "\33]0;%s\7", title);
fflush (stdout);
- g_free (p);
}
}
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/mc/src/ChangeLog,v
retrieving revision 1.1133
diff -u -u -0 -r1.1133 ChangeLog
--- ChangeLog 27 Feb 2003 04:57:58 -0000 1.1133
+++ ChangeLog 2 Mar 2003 19:08:07 -0000
@@ -0,0 +1,5 @@
+2003-03-02 Adam Byrtek <alpha at debian.org>
+
+ * main.c (update_xterm_title_path): Support for format string
+ in MC_XTITLE environment variable added.
+
More information about the mc-devel
mailing list