Hello!
This is what my status_cmd patch does.  It adds a new variable status_cmd.
This is a name of the program that gets called when status line is changed.
The program gets two arguments: old status and new status.

I also attach my script that I use for this. This script parses
the status line and changes the xterm status according
to whether there are new messages and other parameters.

And I do 
set status_format="%v: %r %f [%?b?%b mailboxes ,?%M/%m]  %?p?[post=%p]? 
%?n?[N=%n]?%?t?[*=%t]? <%s>"
set status_cmd="statuscmd"

Hope this helps,
MST

Quoting r. Thomas Dickey ([EMAIL PROTECTED]) "Re: xterm titlebars and 
status_format or folder-hook":
> On Wed, Feb 21, 2001 at 05:15:54PM -0500, Rich Lafferty wrote:
> > Hi --
> > 
> > I'd like to tell Mutt to echo the appropriate escape codes to change
> > xterm's title bar to the name of the current mailbox. I tried
> > adding them to folder_hook, but the literals "^[" and "^G" get
> > displayed; I couldn't figure out how to tell a folder-hook to cant
> > the magic.
> > 
> > Has anyone solved this problem?
> 
> you probably cannot, using folder-hook in that way since the message is written
> via the screen library rather than printing directly.  perhaps make the folder
> hook invoke an external process such as xtermset (I don't know offhand if mutt
> can do that - the 'exec' command looked promising, but only does internal
> functions).
> 
> -- 
> Thomas E. Dickey <[EMAIL PROTECTED]>
> http://dickey.his.com
> ftp://dickey.his.com

-- 
This message content is not part of Intel's views or affairs
Michael S. Tsirkin
    >   Four things are to be strengthened: Torah,and good deeds,
    >   prayer and one's good manners (Berachoth)
Use vfork instead of fork to speed process creation up
diff -u mutt-1.2-rr/curs_main.c mutt-1.2/curs_main.c
--- mutt-1.2-rr/curs_main.c     Thu May 11 19:07:11 2000
+++ mutt-1.2/curs_main.c        Thu May 11 19:09:25 2000
@@ -382,7 +382,7 @@
  */
 int mutt_index_menu (void)
 {
-  char buf[LONG_STRING], helpstr[SHORT_STRING];
+  char buf[LONG_STRING], helpstr[SHORT_STRING],status_buf[LONG_STRING]="";
   int op = OP_NULL;
   int done = 0;                /* controls when to exit the "event" loop */
   int i = 0, j;
@@ -518,7 +518,22 @@
 
       if (menu->redraw & REDRAW_STATUS) 
       {
+       static pid_t child=0;
        menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
+       /* If StatusCmd is set, and status line changed,
+        * call the appropriate command */
+       /* only do this if the previous child exited. */
+       if (child) {
+         if (waitpid(child, 0, WNOHANG)) child=0;
+       }
+       if (!child && StatusCmd && *StatusCmd && strncmp(buf,status_buf,sizeof (buf))) 
+{
+           strncpy(status_buf,buf,sizeof (buf));
+           child=vfork();
+           if (!child) {
+             execlp(StatusCmd,StatusCmd,status_buf,buf,0);
+             exit(1);
+           }
+       }
        CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2);
        SETCOLOR (MT_COLOR_STATUS);
        printw ("%-*.*s", COLS, COLS, buf);
diff -u mutt-1.2-rr/globals.h mutt-1.2/globals.h
--- mutt-1.2-rr/globals.h       Thu May 11 19:07:13 2000
+++ mutt-1.2/globals.h  Thu May 11 19:09:25 2000
@@ -91,6 +91,7 @@
 WHERE char *Spoolfile;
 WHERE char *StChars;
 WHERE char *Status;
+WHERE char *StatusCmd;
 WHERE char *Tempdir;
 WHERE char *Tochars;
 WHERE char *Username;
diff -u mutt-1.2-rr/init.h mutt-1.2/init.h
--- mutt-1.2-rr/init.h  Thu May 11 19:07:15 2000
+++ mutt-1.2/init.h     Thu May 11 19:16:12 2000
@@ -1888,6 +1888,20 @@
   { "status_chars",    DT_STR,  R_BOTH, UL &StChars, UL "-*%A" },
   /*
   ** .pp
+  ** Specifies the command to be executed each time the status line
+  ** changes.
+  ** The new status line is passed as the first parameter,
+  ** the old one as the second parameter.
+  ** This is useful e.g. to change the xterm window icon title according to the
+  ** status of the mailbox.
+  ** The command can parse the status and do more complicated things, for
+  ** example, bring up a popu menu whenever a new mail arrives, sound a
+  ** bell etc etc.
+  */
+  { "status_cmd",      DT_PATH, R_NONE, UL &StatusCmd, 0 },
+
+  /*
+  ** .pp
   ** Controls the characters used by the "%r" indicator in
   ** ``$$status_format''. The first character is used when the mailbox is
   ** unchanged. The second is used when the mailbox has been changed, and
#!/usr/intel/bin/perl 
if (($ENV{TERM} eq "vt100") or ( not defined ($ENV{XMUTT} ) ) ) {
    exit(1);
}

#open (TTY, "/dev/tty");
$title=$ARGV[0];
$new=0;
@array=split(' ',$title);
if ($title =~ /N=([0-9]+)/o) {
    $new=$1;
}
$boxes=0;
if ($title =~ /([0-9]+) mailboxes/o) {
    $boxes=$1;
}
$line="";
if ($new or $boxes) {
    $line="NEW ".$new."/".$boxes." ";
} 

$array[3] =~ s#.*Mail/##;

$line.="MUTT ".$array[3];
#print TTY  "]2;$line";
print "]2;$line";

Reply via email to