Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.csd.uwm.edu!gem.mps.ohio-state.edu!ginosko!uunet!bu-cs!jbw From: jbw@bucsf.bu.edu (Joe Wells) Newsgroups: gnu.emacs Subject: Re: meta keys and esc prefixing (gnuemacs 18.52) Keywords: meta-shift-key ESC gnuemacs 18.52 Message-ID: <37649@bu-cs.BU.EDU> Date: 7 Sep 89 00:07:21 GMT References: <11826@cit-vax.Caltech.Edu> Sender: daemon@bu-cs.BU.EDU Followup-To: comp.emacs Organization: /usr15/degree/stud/jbw/.organization Lines: 51 In article <11826@cit-vax.Caltech.Edu> mazer@bek-owl.caltech.edu (Jamie Mazer) writes: Now that I've got access to a keyboard with a real meta key (NCD X-term), I've noticed something wierd with gnuemacs 18.52. If I type: "C-S M-V" (C-S bound to forward-i-search)\ The i-search proceeds normally, but instead of M-V terminating the search and moving forward a screen - it gets read as V - in which case the esc terminates and the V gets inserted into the buffer - even though I use the meta key on the keyboard. I noticed this problem previously with non-meta terminals (vt100s), but figured it would be fixed on a "nice" terminal which sends eigth-bit info. Is this a known bug? (Or perhaps feature ;-) Does anyone have a workaround? It would be nice if i-search were smarter about gobbling the esc so quickly. According to the comments in various places in the source code, isearch should handle this correctly. If you can use the lisp debugger, you might want to check what values isearch is getting from read-char. However, I am including fix that handles (on my machine) the general problem of ESC being both the isearch terminator and a prefix for function keys. Apply this fix and isearch will divine whether you typed a single ESC character, or a function key that generates ESC as a prefix. Enjoy! -- Joe Wells jbw%bucsf.bu.edu@bu-it.bu.edu ...!harvard!bu-cs!bucsf!jbw ---------------------------------------------------------------------- *** /usr14/gnu/dist-18.52/lisp/isearch.el Tue Dec 8 18:11:03 1987 --- new-isearch.el Wed Sep 6 19:50:24 1989 *************** *** 117,123 **** ;; Esc means exit search normally. ;; Except, if first thing typed, it means do nonincremental (if (= 0 (length search-string)) ! (nonincremental-search forward regexp)) (throw 'search-done t)) ((= char ?\C-g) ;; ^G means the user tried to quit. --- 117,125 ---- ;; Esc means exit search normally. ;; Except, if first thing typed, it means do nonincremental (if (= 0 (length search-string)) ! (nonincremental-search forward regexp) ! (if (input-pending-p) ! (setq unread-command-char char))) (throw 'search-done t)) ((= char ?\C-g) ;; ^G means the user tried to quit.