lrs@indetech.com (Lynn Slater) (08/31/89)
Below is support for the wyse terminal. I am posting it due to popular
demand. The FSF was assigned all rights to this code as part of the gnu ada
effort.
===============================================================
Lynn Slater -- {sun, ames, pacbell}!indetech!lrs or lrs@indetech.uucp
42075 Lawrence Place, Fremont Ca 94538
Office (415) 438-2048; Home (415) 796-4149; Fax (415) 438-2034
===============================================================
;; Setup wy50 function keys.
;; Copyright (C) 1987 Free Software Foundation, Inc.
;; Author/Integrator: Lynn Slater
;; 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 function-key-not-defined ()
"Used to display a messasge about a function key not being defined."
(interactive)
(beep)
(message "Function key not defined."))
(defun scroll-down-in-place (n)
(interactive "p")
(previous-line n)
(scroll-down n))
(defun scroll-up-in-place (n)
(interactive "p")
(next-line n)
(scroll-up n))
(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)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; On the wy50, the softkeys need to be initialized
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 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) 'set-mark-command)
(define-key wy50-raw-map (wy50-softkey 1 t) 'set-mark-command)
;; note: control softkey1 also sets the mark by fortunate chance
(define-key wy50-raw-map (wy50-softkey 2) 'scroll-down)
(define-key wy50-raw-map (wy50-softkey 2 t) 'scroll-down-in-place)
(define-key wy50-raw-map (wy50-softkey 3) 'scroll-up)
(define-key wy50-raw-map (wy50-softkey 3 t) 'scroll-up-in-place)
(define-key wy50-raw-map (wy50-softkey 4) 'switch-to-buffer)
(define-key wy50-raw-map (wy50-softkey 4 t) 'list-buffers)
(define-key wy50-raw-map (wy50-softkey 5) 'other-window)
(define-key wy50-raw-map (wy50-softkey 5 t) 'other-window)
(define-key wy50-raw-map (wy50-softkey 6) 'split-window-vertically)
(define-key wy50-raw-map (wy50-softkey 6 t) 'split-window-horizontally)
(define-key wy50-raw-map (wy50-softkey 7) 'delete-other-windows)
(define-key wy50-raw-map (wy50-softkey 7 t) 'delete-other-windows)
(define-key wy50-raw-map (wy50-softkey 8) 'scroll-other-window)
(define-key wy50-raw-map (wy50-softkey 8 t) 'scroll-other-window)
(define-key wy50-raw-map (wy50-softkey 9) 'kill-region)
(define-key wy50-raw-map (wy50-softkey 9 t) 'copy-region-as-kill)
(define-key wy50-raw-map (wy50-softkey 10) 'yank)
(define-key wy50-raw-map (wy50-softkey 10 t) 'yank-pop)
(define-key wy50-raw-map (wy50-softkey 11) 'toggle-auto-fill-mode)
(define-key wy50-raw-map (wy50-softkey 11 t) 'toggle-overwrite-mode)
(define-key wy50-raw-map (wy50-softkey 12) 'delete-char)
(define-key wy50-raw-map (wy50-softkey 12 t) 'kill-line)
(define-key wy50-raw-map (wy50-softkey 13) 'backward-char)
(define-key wy50-raw-map (wy50-softkey 13 t) 'beginning-of-line)
(define-key wy50-raw-map (wy50-softkey 14) 'forward-char)
(define-key wy50-raw-map (wy50-softkey 14 t) 'end-of-line)
(define-key wy50-raw-map (wy50-softkey 15) 'previous-line)
(define-key wy50-raw-map (wy50-softkey 15 t) 'scroll-down)
(define-key wy50-raw-map (wy50-softkey 16) 'next-line)
(define-key wy50-raw-map (wy50-softkey 16 t) 'scroll-up)
))
;;; 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))
))
;; to customize your softkeys, include a form like the following in
;; your .emacs file
;; (setq wy50-softkey-hooks
;; '((define-key wy50-raw-map (wy50-softkey 14) 'forward-char)
;; (define-key wy50-raw-map (wy50-softkey 14 t) 'end-of-line)
;; .
;; .
;; .
;; ))