# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: lib/misc/bash-xterm.patch # Copyright (C) 2008 The OpenSDE Project # Copyright (C) 2004 - 2006 The T2 SDE Project # Copyright (C) 1998 - 2003 Clifford Wolf # # More information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # --- SDE-COPYRIGHT-NOTE-END --- Little hack for bash: Adding 'xterm' option which causes bash to print the PS1 prompt and the command bash is executing now in the title bar. I'm not sure if my changes in execute_cmd.c will cause any troubles when used with redirects and complex command blocks. Written by Clifford , 2001-04-08 diff -ruN bash-2.04-orig/builtins/builtins.c bash-2.04/builtins/builtins.c --- bash-2.04-orig/builtins/builtins.c Sun Apr 8 11:19:48 2001 +++ bash-2.04/builtins/builtins.c Sun Apr 8 11:29:59 2001 @@ -765,6 +765,7 @@ #if defined (READLINE) " vi use a vi-style line editing interface", #endif /* READLINE */ + " xterm create xterm title escape codes", " xtrace same as -x", " -p Turned on whenever the real and effective user ids do not match.", " Disables processing of the $ENV file and importing of shell", diff -ruN bash-2.04-orig/builtins/set.def bash-2.04/builtins/set.def --- bash-2.04-orig/builtins/set.def Thu Aug 5 13:44:25 1999 +++ bash-2.04/builtins/set.def Sun Apr 8 11:36:59 2001 @@ -49,7 +49,7 @@ # include "../bashhist.h" #endif -extern int interactive; +extern int interactive, xterm_mode; extern int noclobber, posixly_correct, ignoreeof, eof_encountered_limit; #if defined (READLINE) extern int rl_editing_mode, no_line_editing; @@ -104,6 +104,7 @@ #if defined (READLINE) vi use a vi-style line editing interface #endif /* READLINE */ + xterm create xterm title escape codes xtrace same as -x -p Turned on whenever the real and effective user ids do not match. Disables processing of the $ENV file and importing of shell @@ -195,6 +196,7 @@ { "emacs", (int *)NULL, set_edit_mode, get_edit_mode }, { "vi", (int *)NULL, set_edit_mode, get_edit_mode }, #endif + { "xterm", &xterm_mode, (Function *)NULL, (Function *)NULL }, { (char *)NULL, (int *)NULL } }; diff -ruN bash-2.04-orig/execute_cmd.c bash-2.04/execute_cmd.c --- bash-2.04-orig/execute_cmd.c Tue Jan 25 17:29:11 2000 +++ bash-2.04/execute_cmd.c Sun Apr 8 12:49:23 2001 @@ -98,7 +98,7 @@ # include "bashhist.h" #endif -extern int posixly_correct; +extern int posixly_correct, xterm_mode; extern int executing, breaking, continuing, loop_level; extern int interactive, interactive_shell, login_shell, expand_aliases; extern int parse_and_execute_level, running_trap, trap_line_number; @@ -2367,6 +2367,16 @@ /* Remember what this command line looks like at invocation. */ command_string_index = 0; print_simple_command (simple_command); + + /* Create xterm title */ + if (xterm_mode) + { + char *txt = get_string_value ("PS1"); + txt = txt ? decode_prompt_string (txt) : NULL; + fprintf(stderr, "\033]0;%s%s\007", txt ? txt : "bash: ", + the_printed_command); + FREE(txt); fflush(stderr); + } first_word_quoted = simple_command->words ? (simple_command->words->word->flags & W_QUOTED): 0; diff -ruN bash-2.04-orig/flags.c bash-2.04/flags.c --- bash-2.04-orig/flags.c Thu Aug 5 13:20:28 1999 +++ bash-2.04/flags.c Sun Apr 8 11:35:24 2001 @@ -147,6 +147,11 @@ int brace_expansion = 1; #endif +/* Non-zero means that the shell prints xterm escape codes for creating + a new title text before printing the promt and before exetucing a + command. */ +int xterm_mode = 0; + /* **************************************************************** */ /* */ /* The Flags ALIST. */ diff -ruN bash-2.04-orig/parse.y bash-2.04/parse.y --- bash-2.04-orig/parse.y Tue Feb 22 19:12:03 2000 +++ bash-2.04/parse.y Sun Apr 8 12:32:08 2001 @@ -99,6 +99,7 @@ #if defined (BUFFERED_INPUT) extern int bash_input_fd_changed; #endif +extern int xterm_mode; extern int errno; /* **************************************************************** */ @@ -153,6 +154,7 @@ /* The decoded prompt string. Used if READLINE is not defined or if editing is turned off. Analogous to current_readline_prompt. */ static char *current_decoded_prompt; +static char *current_decoded_ps1_prompt; /* The number of lines read from input while creating the current command. */ int current_command_line_count; @@ -975,6 +977,10 @@ interrupt_immediately++; } + if (xterm_mode) fprintf(stderr, "\033]0;%s\007", + current_decoded_ps1_prompt ? + current_decoded_ps1_prompt : "bash"); + current_readline_line = readline (current_readline_prompt ? current_readline_prompt : ""); @@ -3421,6 +3427,10 @@ ps1_prompt = get_string_value ("PS1"); ps2_prompt = get_string_value ("PS2"); + FREE (current_decoded_ps1_prompt); + current_decoded_ps1_prompt = ps1_prompt ? + decode_prompt_string (ps1_prompt) : (char *)NULL; + if (!prompt_string_pointer) prompt_string_pointer = &ps1_prompt; @@ -3468,6 +3478,8 @@ static void print_prompt () { + if (xterm_mode) fprintf(stderr, "\033]0;%s\007", + current_decoded_ps1_prompt ? current_decoded_ps1_prompt : "bash"); fprintf (stderr, "%s", current_decoded_prompt); fflush (stderr); }