goer@quads.uchicago.edu (Richard L. Goerwitz) (03/10/91)
I received several helpful responses in my search for a decent and full wy50.el file. Here's a "summary" in the form of a wy50.el file which I pieced together. I confess to considerable ignorance about the internals of emacs. -Richard ; ; WY50.EL ; ; This file sets up wy50 function keys and also various editing keys, ; such as Prev/Next PAGE, Home, Line/Char INS, Line/Char DEL, ; Scrn/Line CLR, and Ins/Repl. The editing keys do pretty much what ; their names imply. The function keys are set up pretty logically. ; F1 is help. F2 is switch-to-buffer, F3 other-window, F4 set-mark, ; F5 mark-word, F6 mark-sentence, F7 mark-paragraph, F8 mark-whole- ; buffer. F9 is forward-word, F10 forward-sentence, F11 forward-para- ; graph, F12 end-of-buffer. F13 is isearch-forward-regexp, F14 query- ; replace-regexp. F15 is goto-line. F16 is 80-column-mode. Note ; that shifting the function keys normally gets you a related ; function. For example, F6 is mark-sentence. Shift-F6 is ; kill-sentence. F9 is forward-word. Shift-F6 is backward-word. F13 ; is isearch-forward-regexp, and shift-F13 is isarch-backward-regexp. ; Note that F16/shift-F16 toggle you in and out of 132-column mode. ; The arrow keys work as expected. ; ; I assembled this file rather haphazardly out of several that were ; sent to me, including Lynn Slater's wy50.el file, and one written by ; Ph. Baque. Probably any inelegant code you find here was written by ; me :-). ; ; -Richard Goerwitz (goer@sophist.uchicago.edu) ; ;; ;; This file is part of GNU Emacs. ;; ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY. No author or distributor ;; accepts responsibility to anyone for the consequences of using it ;; or for whether it serves any particular purpose or works at all, ;; unless he says so in writing. Refer to the GNU Emacs General Public ;; License for full details. ;; ;; Everyone is granted permission to copy, modify and redistribute ;; GNU Emacs, but only under the conditions described in the ;; GNU Emacs General Public License. A copy of this license is ;; supposed to have been given to you along with GNU Emacs so you ;; can know your rights and responsibilities. It should be in a ;; file named COPYING. Among other things, the copyright notice ;; and this notice must be preserved on all copies. (defun start-up-emacs-wyse () (global-unset-key "\C-H") (aset global-map 8 'backward-char) ; make ^H work like left arrow (aset esc-map 63 'help-command) ; make ESC-? work like ^H used to (setq-default term-setup-hook 'after-the-beginning) (setq-default kill-emacs-hook 'this-is-the-end) ) (start-up-emacs-wyse) (defvar UP-ARROW "\C-k") (global-set-key UP-ARROW 'previous-line) (defvar DOWN-ARROW "\C-J") (global-set-key DOWN-ARROW 'next-line) ; LFD (defvar RIGHT-ARROW "\C-l") (global-set-key RIGHT-ARROW 'forward-char) (defvar LEFT-ARROW "\C-H") (global-set-key LEFT-ARROW 'backward-char) (defvar PREV-PAGE "\M-K") (global-set-key PREV-PAGE 'scroll-up) (defvar NEXT-PAGE "\M-J") (global-set-key NEXT-PAGE 'scroll-down) (defvar LINE-INS "\M-E") (global-set-key LINE-INS 'open-line) (defvar LINE-DEL "\M-R") (global-set-key LINE-DEL 'kill-line) (defvar CHAR-INS "\M-Q") (global-set-key CHAR-INS 'insert-space) (defvar CHAR-DEL "\M-W") (global-set-key CHAR-DEL 'delete-char) (defvar CLR-LINE "\M-T") (global-set-key CLR-LINE 'kill-line) (defvar CLR-SCRN "\M-Y") (global-set-key CLR-SCRN 'recenter) (defvar INS "\M-q") (global-set-key INS 'overwrite-off) (defvar REPL "\M-r") (global-set-key REPL 'overwrite-on) (defvar HOME "\C-^") (global-set-key HOME 'beginning-of-line) (defun function-key-not-defined () "Used to display a message about a function key not being defined." (interactive) (beep) (message "Function key not defined.")) (defun prev-complex-command () "Select Previous-complex-command" (interactive) (if (zerop (minibuffer-depth)) (repeat-complex-command 1) (previous-complex-command 1))) (defun rerun-prev-command () "Repeat Previous-complex-command." (interactive) (eval (nth 0 command-history))) ;;; user should (setq wy50-esc-bracket nil) in ~/.emacs to preserve ;;; old keybindings (defvar wy50-esc-bracket t "If non-nil (the default) the former binding of esc-[ is replaced and esc-[ becomes the prefix character for wy50 function keys.") (defvar wy50-setup-softkeys t "If non-nil (the default) special control sequences are sent to the wy50 to define the softkeys to emacs-compatable meanings.") (defvar wy50-raw-map (make-sparse-keymap) "*Keymap for ESC-[ encoded wy50 softkeys") (defun wy50-softkey (number &optional shiftedp) "Returns the special unique key associated with the requested shifted or unshifted softkey. For lack of any better binding, the values are taken from the wy50 manual, page 4-8." (let ((index (if shiftedp (+ 16 number) number))) (substring "@ABCDEFGHIJKLMNO`abcdefghijklmno" (1- index) index))) (defun wy50-init-softkeys () "Initiliazes the wy50 softkeys for emacs bindings." (interactive) (let ((i 0) (char)) (setq wy50-esc-bracket t);; must be there or why bother (while (< i 32) (setq char (aref "@ABCDEFGHIJKLMNO`abcdefghijklmno" i)) (send-string-to-terminal (format "z%c[%c" char char)) (setq i (1+ i))))) (if wy50-setup-softkeys (wy50-init-softkeys)) (if wy50-esc-bracket (progn (define-key esc-map "[" wy50-raw-map) ; Install wy50-raw-map (define-key wy50-raw-map (wy50-softkey 1) 'help-for-help) (define-key wy50-raw-map (wy50-softkey 1 t) 'Helper-help) ;; note: control softkey1 also sets the mark by fortunate chance (define-key wy50-raw-map (wy50-softkey 2) 'switch-to-buffer) (define-key wy50-raw-map (wy50-softkey 2 t) 'switch-to-buffer-other-window) (define-key wy50-raw-map (wy50-softkey 3) 'other-window) (define-key wy50-raw-map (wy50-softkey 3 t) 'find-file-other-window) (define-key wy50-raw-map (wy50-softkey 4) 'set-mark-command) (define-key wy50-raw-map (wy50-softkey 4 t) 'exchange-point-and-mark) (define-key wy50-raw-map (wy50-softkey 5) 'mark-word) (define-key wy50-raw-map (wy50-softkey 5 t) 'kill-word) (define-key wy50-raw-map (wy50-softkey 6) 'mark-this-sentence) (define-key wy50-raw-map (wy50-softkey 6 t) 'kill-sentence) (define-key wy50-raw-map (wy50-softkey 7) 'mark-paragraph) (define-key wy50-raw-map (wy50-softkey 7 t) 'kill-paragraph) (define-key wy50-raw-map (wy50-softkey 8) 'mark-whole-buffer) (define-key wy50-raw-map (wy50-softkey 8 t) 'kill-buffer) (define-key wy50-raw-map (wy50-softkey 9) 'forward-word) (define-key wy50-raw-map (wy50-softkey 9 t) 'backward-word) (define-key wy50-raw-map (wy50-softkey 10) 'forward-sentence) (define-key wy50-raw-map (wy50-softkey 10 t) 'backward-sentence) (define-key wy50-raw-map (wy50-softkey 11) 'forward-paragraph) (define-key wy50-raw-map (wy50-softkey 11 t) 'backward-paragraph) (define-key wy50-raw-map (wy50-softkey 12) 'end-of-buffer) (define-key wy50-raw-map (wy50-softkey 12 t) 'beginning-of-buffer) (define-key wy50-raw-map (wy50-softkey 13) 'isearch-forward-regexp) (define-key wy50-raw-map (wy50-softkey 13 t) 'isearch-backward-regexp) (define-key wy50-raw-map (wy50-softkey 14) 'query-replace-regexp) (define-key wy50-raw-map (wy50-softkey 14 t) 'query-replace-regexp) (define-key wy50-raw-map (wy50-softkey 15) 'goto-line) (define-key wy50-raw-map (wy50-softkey 15 t) 'what-line) (define-key wy50-raw-map (wy50-softkey 16) 'set-80-column-mode) (define-key wy50-raw-map (wy50-softkey 16 t) 'set-132-column-mode) )) ;;; Since .emacs gets loaded before this file, a hook is supplied ;;; for you to put your own bindings in. (defvar wy50-softkey-hooks nil "List of forms to evaluate after setting up the wy50 softkeys.") (let ((hooks wy50-softkey-hooks)) (while hooks (eval (car hooks)) (setq hooks (cdr hooks)) )) ;----------------------------------------------------------------------- (defun after-the-beginning () ; (message-inverse) (fundamental-mode)) ; ---------------------------------------------------------------------- (defun this-is-the-end () (send-string-to-terminal "\e*") ;; ; (send-string-to-terminal "\eA30") ;; (send-string-to-terminal "\e`:") ;; passage systematique en 80 colonnes ) ; ---------------------------------------------------------------------- (defun mark-this-sentence () "Put point at beginning of sentence, mark at end." (interactive) (forward-sentence) (set-mark-command nil) (backward-sentence) ) ; ---------------------------------------------------------------------- (defun insert-space () (interactive) "Insert a space. It is useful in OverWrite-mode" (insert-string " ")) ;----------------------------------------------------------------------- (defun overwrite-on () (interactive) "Put Emacs in OverWrite mode, in this mode you replace any character you type. " (overwrite-mode 1)) ; ----------------------- (defun overwrite-off () "Put Emacs in (natural) Insert mode, in this mode you insert any character typed." (interactive) (overwrite-mode -1)) ;------------------------ (defun wyse-width-132 () (send-string-to-terminal "\e`;")) (defun wyse-width-80 () (send-string-to-terminal "\e`:") ) (defun message-normal () (send-string-to-terminal "\eA30")) (defun message-inverse () (send-string-to-terminal "\eA34")) (defun message-souligne () (send-string-to-terminal "\eA38")) ;---------------------------------- (defun set-80-column-mode () (interactive) "Set 80 column mode ..." (label-wyse-erase) ; (message-souligne) (wyse-width-80) (set-screen-width 79) ) ;---------------------------------- (defun set-132-column-mode () (interactive) "Set 132 column mode ..." (label-wyse-erase) ; (message-souligne) (wyse-width-132) (set-screen-width 131) ) ;---------------------------------------- (defun label-wyse-erase () "clear label field" (send-string-to-terminal "\ez0 (send-string-to-terminal "\ez1 (send-string-to-terminal "\ez2 (send-string-to-terminal "\ez3 (send-string-to-terminal "\ez4 (send-string-to-terminal "\ez5 (send-string-to-terminal "\ez6 (send-string-to-terminal "\ez7 (send-string-to-terminal "\ez8 (send-string-to-terminal "\ez9 (send-string-to-terminal "\ez: (send-string-to-terminal "\ez; (send-string-to-terminal "\ez< (send-string-to-terminal "\ez= (send-string-to-terminal "\ez> (send-string-to-terminal "\ez? (send-string-to-terminal "\ezP (send-string-to-terminal "\ezQ (send-string-to-terminal "\ezR (send-string-to-terminal "\ezS (send-string-to-terminal "\ezT (send-string-to-terminal "\ezU (send-string-to-terminal "\ezV (send-string-to-terminal "\ezW (send-string-to-terminal "\ezX (send-string-to-terminal "\ezY (send-string-to-terminal "\ezZ (send-string-to-terminal "\ez[ ; (send-string-to-terminal (concat "\ez" ?\ " (send-string-to-terminal "\ez] ; (send-string-to-terminal (concat "\ez" ?^ " (send-string-to-terminal "\ez_ )