[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
EMACS=t causes problems
From: |
Dan Grayson |
Subject: |
EMACS=t causes problems |
Date: |
Tue, 11 Nov 2003 06:45:09 -0600 (CST) |
Bash 2.05b turns off line editing provided by readline/history if it
detects the environment variable "EMACS" has the value "t". That
variable is set in a shell running in an emacs shell buffer. The
problem is that it is inherited by every process started there. If I
start xterm from such a shell buffer, than command line editing is
mysteriously broken.
The correct test is to see whether the environment variable "TERM" has
the value "emacs" -- and that test is already there, and so the extra
test causes only problems.
The change occurred between 2.05a and 2.05b, which only this
explanation in CWRU/changelog:
+ 7/1
+ ---
+ shell.c
+ - turn off line editing if $EMACS is set to `t'
Amazingly, a fix for this bug was offered in 1991, and was presumably
applied!
From: Eirik Fuller (eirik@THEORY.TN.CORNELL.EDU)
Subject: no_line_editing in emacs shell buffer
This is the only article in this thread
View: Original Format
Newsgroups: gnu.bash.bug
Date: 1991-05-05 19:46:00 PST
There must be at least one other person in the world who sometimes
forgets that the correct spelling of "xterm" is "EMACS= xterm" while
in an emacs shell buffer (right Bill? :-). For that matter, there
might even be someone else who has used bash in M-x terminal-emulator.
I was a little disappointed to find that this hadn't been fixed
already; do I remember wrong that this has been reported before?
EMACS=t is not a good test for whether line editing should be enabled.
*** shell.c~ Fri May 3 14:06:17 1991
--- shell.c Sun May 5 22:26:12 1991
***************
*** 431,439 ****
--- 431,445 ----
if (interactive)
{
+ #ifdef SILLY
char *emacs = (char *)getenv ("EMACS");
if (emacs && (strcmp (emacs, "t") == 0))
no_line_editing = 1;
+ #else
+ char *term = (char *)getenv ("TERM");
+ if (term && (strcmp (term, "emacs") == 0))
+ no_line_editing = 1;
+ #endif
}
top_level_arg_index = arg_index;
The fix today is slightly different:
-----------------------------------------------------------------------------
diff -ur
/capybara/encap/capybara/share/capybara/packages/bash/TMP/tmp/./bash-2.05b/shell.c
./bash-2.05b/shell.c
---
/capybara/encap/capybara/share/capybara/packages/bash/TMP/tmp/./bash-2.05b/shell.c
2002-07-01 10:27:11.000000000 -0500
+++ ./bash-2.05b/shell.c 2003-11-11 06:15:00.000000000 -0600
@@ -522,7 +522,6 @@
term = getenv ("EMACS");
running_under_emacs = term ? ((strmatch ("*term*", term, 0) == 0) ? 2 :
1)
: 0;
- no_line_editing |= term && term[0] == 't' && term[1] == '\0';
}
top_level_arg_index = arg_index;
-----------------------------------------------------------------------------
- EMACS=t causes problems,
Dan Grayson <=