zeeff@b-tech.ann-arbor.mi.us (Jon Zeeff) (11/02/88)
A while back I asked for a way to get a meta key (alt key) on my terminal (the console on a '386 system) to work as a emacs meta key. In the hope that others will benefit from the authors time (thanks), I'm listing the responses I got. The suggestion from Anton Rang seemed to work fine for me. Note that this is particularily relevant to Microport Unix emacs users - the alt key causes another key to send ESC N key. --------------------------------------------------------------------- From: matt@oddjob.uchicago.edu (Matt Crawford) Copying the ESC keymap to ESC N is fine only until some key is rebound. How about instead binding ESC-N to the following function? (defun sorta-meta () "Act like a META key" (interactive) (setq prefix-arg current-prefix-arg this-command last-command unread-command-char ?\e)) Caution: untested. ------------------------------------------------------------------------ From: umix!esl.esl.com!lrs (Lynn Slater) (defun eat-extra-n () "Replaces the command input with Esc" (interactive) (setq unread-command-char 27)) (global-set-key "\en" 'eat-extra-n) ---------------------------------------------------------------- From: Paul Dworkin <umix!media-lab.media.mit.edu!paul> Try putting the following "magic" into your .emacs file. The following is a quick hack with similar results: (define-key esc-map "n" 'ESC-prefix) This makes ESC N become ESC. The only problem with it is that you can't invoke whatever function was on ESC N. --------------------------------------------------------------------- From: Anton Rang <umix!cpsin3.cps.msu.edu!rang> I suspect you'd be able to do something like: (global-set-key "\eN" 'ESC-prefix) [This worked well for me] ------------------------------------------------------------------ From: Mark D. Baushke <umix!silvlis.com!mdb> ;---------- make ESC N <key-sequence> behave like ESC <key-sequence> ---------- ;; Note the following should probably be done inside a ;; lisp/term/<terminal>.el file rather than in your .emacs file. ;; Some versions of copy-keymap don't recurse to all levels. (defun deep-copy-keymap (keymap) "Return a deep copy of KEYMAP. That is, all levels are copied, not just the top level." (if (not (keymapp keymap)) keymap (cond ((listp keymap) (let ((new-keymap (copy-alist keymap))) (setq keymap (cdr new-keymap)) (while keymap (let ((binding (car keymap))) (if (keymapp (cdr binding)) (setcdr binding (deep-copy-keymap (cdr binding)))) ) (setq keymap (cdr keymap)) ) new-keymap )) ((vectorp keymap) (let ((i 0) (n (length keymap)) (new-keymap (copy-sequence keymap))) (while (< i n) (if (keymapp (aref keymap i)) (aset new-keymap i (deep-copy-keymap (aref keymap i)))) (setq i (1+ i))) new-keymap ))))) ;; Create a copy of the esc-map which can be bound to the N key. (setq esc-n-map (deep-copy-keymap esc-map)) ;; Install the key map. (define-key esc-map "N" esc-n-map) ;;!; Alternative to last two lisp statements above would be given the ;;!; name of the terminal type which has the ESC N problem is is ;;!; "footype" then: ;;!; ;;!; (if (string= (getenv "TERM") "footype") ;;!; (progn ;;!; ;; Create a copy of the esc-map which can be bound to the N key. ;;!; (setq esc-n-map (deep-copy-keymap esc-map)) ;;!; ;;!; ;; Install the key map. ;;!; (define-key esc-map "N" esc-n-map))) ------------------------------------------------------------------------------ From: umix!bigtex.cactus.org!james (James Van Artsdalen) You can do certain mappings: (setq term-file-prefix nil) ;; Map AT386/Microport function key escape sequences ;; into the standard slots in function-keymap. (require 'keypad) (defvar SS3-map nil "SS3-map maps the keypad on the AT keyboard.") (if (not SS3-map) (progn (setq SS3-map (lookup-key global-map "\eO")) (if (not (keymapp SS3-map)) (setq SS3-map (make-keymap))) ;; <ESC>O commands (setup-terminal-keymap SS3-map '(("K" . ?N) ; page down ("C" . ?P) ; page up ("A" . ?\^a) ; home (beginning of line) ("N" . ?.) ; delete character ("I" . ?\^b) ; end (end of line) ("P" . ??) ; help - F1 ("e" . backward-word) ("o" . forward-word) ("c" . beginning-of-buffer) ("k" . end-of-buffer) ("M" . overwrite-mode) ("T" . ?\^c))) ; isearch - F5 (define-key global-map "\eO" SS3-map))) (define-key SS3-map "\C-K" 'end-of-buffer) (define-key SS3-map "\C-C" 'beginning-of-buffer) ;; (define-key SS3-map "\C-E" 'backward-word) ;; (define-key SS3-map "\C-O" 'forward-word) (defvar SS2-map nil "SS2-map maps the function keys on the AT keyboard.") (if (not SS2-map) (progn (setq SS2-map (lookup-key global-map "\eN")) (if (not (keymapp SS2-map)) (setq SS2-map (make-keymap))) ;; <ESC>N commands (setup-terminal-keymap SS2-map '(("u" . advertised-undo) ; undo ("b" . list-buffers) ("g" . goto-line) ("w" . write-file) ("s" . save-buffer) ("1" . digit-argument) ("2" . digit-argument) ("3" . digit-argument) ("4" . digit-argument) ("5" . digit-argument) ("6" . digit-argument) ("7" . digit-argument) ("8" . digit-argument) ("9" . digit-argument) ("0" . digit-argument) ("i" . overwrite-mode) ("x" . save-buffers-kill-emacs))) (define-key global-map "\eN" SS2-map))) ;;; ;;; install ispell ;;; ;;; (autoload 'ispell-word "ispell" "Check spelling of word at or before point" t) (autoload 'ispell-complete-word "ispell" "Complete word at or before point" t) (autoload 'ispell-region "ispell" "Check spelling of every word in the region" t) (autoload 'ispell-buffer "ispell" "Check spelling of every word in the buffer" t) ;;; (autoload 'ispell-word "ispell" ;;; "Check the spelling of word in buffer." t) ;;; (global-set-key "\e$" 'ispell-word) ;;; (autoload 'ispell-region "ispell" ;;; "Check the spelling of region." t) ;;; (autoload 'ispell-buffer "ispell" ;;; "Check the spelling of buffer." t) -- Jon Zeeff Ann Arbor, MI umix!b-tech!zeeff zeeff@b-tech.ann-arbor.mi.us