;;; edt.el --- enhanced EDT keypad mode emulation for GNU Emacs 19
;; Copyright (C) 1986, 1992, 1993, 1994, 1995, 2000, 2001, 2002, 2003,
-;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; Author: Kevin Gallagher <Kevin.Gallagher@boeing.com>
;; Maintainer: Kevin Gallagher <Kevin.Gallagher@boeing.com>
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 3, or (at your
-;; option) any later version.
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
-;; GNU Emacs is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
\f
;;
;; (add-hook term-setup-hook 'edt-emulation-on)
-;; IMPORTANT: Be sure to read the file, edt-user.doc, located in the
-;; Emacs "etc" directory. It contains very helpful user information.
+;; IMPORTANT: Be sure to read the Info node `edt' for more details.
+;; It contains very helpful user information.
;; The EDT emulation consists of the following files:
;;
-;; edt-user.doc - User Instructions and Sample Customization File
+;; edt.texi - User manual
+;; edt-user.el - Sample Customization File
;; edt.el - EDT Emulation Functions and Default Configuration
;; edt-lk201.el - Built-in support for DEC LK-201 Keyboards
;; edt-vt100.el - Built-in support for DEC VT-100 (and above) terminals
;; the Emacs function `query-replace'. The binding of
;; `query-replace' has been moved to GOLD-/. If you prefer to
;; restore `query-replace' to GOLD-Enter, then use an EDT user
-;; customization file, edt-user.el, to do this. See edt-user.doc
-;; for details.
+;; customization file, edt-user.el, to do this.
+;; See Info node `edt' for more details.
;; 3. EDT Emulation now also works in XEmacs, including the
;; highlighting of selected text.
(defconst edt-window-system (if (featurep 'emacs) window-system (console-type))
"Indicates window system \(in GNU Emacs\) or console type \(in XEmacs\).")
-(defconst edt-xserver (if (eq edt-window-system 'x)
- (if (featurep 'xemacs)
- ;; The Cygwin window manager has a `/' in its
- ;; name, which breaks the generated file name of
- ;; the custom key map file. Replace `/' with a
- ;; `-' to work around that.
- (replace-in-string (x-server-vendor) "[ /]" "-")
- (subst-char-in-string ?/ ?- (subst-char-in-string ? ?- (x-server-vendor))))
- nil)
+(declare-function x-server-vendor "xfns.c" (&optional terminal))
+
+(defconst edt-xserver (when (eq edt-window-system 'x)
+ ;; The Cygwin window manager has a `/' in its
+ ;; name, which breaks the generated file name of
+ ;; the custom key map file. Replace `/' with a
+ ;; `-' to work around that.
+ (if (featurep 'xemacs)
+ (replace-in-string (x-server-vendor) "[ /]" "-")
+ (replace-regexp-in-string "[ /]" "-"
+ (x-server-vendor))))
"Indicates X server vendor name, if applicable.")
(defvar edt-keys-file nil
(defvar edt-last-copied-word nil
"Last word that the user copied.")
-(defvar zmacs-region-stays)
\f
;;;;
;;;; EDT Emulation Commands
(interactive "p")
(edt-check-prefix num)
(let ((beg (edt-current-line)))
- (forward-line num)
+ ;; We're deliberately using next-line instead of forward-line.
+ (with-no-warnings (next-line num))
(edt-bottom-check beg num))
(if (featurep 'xemacs) (setq zmacs-region-stays t)))
(interactive "p")
(edt-check-prefix num)
(let ((beg (edt-current-line)))
- (forward-line (- num))
+ ;; We're deliberately using previous-line instead of forward-line.
+ (with-no-warnings (previous-line num))
(edt-top-check beg num))
(if (featurep 'xemacs) (setq zmacs-region-stays t)))
(/ (1- (+ (* (string-to-number bottom) 100) (window-height)))
(window-height)))))
;; report scroll margin settings if running interactively
- (and (interactive-p)
+ (and (called-interactively-p 'interactive)
(message "Scroll margins set. Top = %s%%, Bottom = %s%%"
edt-top-scroll-margin edt-bottom-scroll-margin)))
(setq edt-term "pc")
(if (or (not edt-window-system) (eq edt-window-system 'tty))
(setq edt-term (getenv "TERM"))))
- ;; Look for for terminal configuration file for this terminal type.
+ ;; Look for a terminal configuration file for this terminal type.
;; Otherwise, load the user's custom configuration file.
(if (or (not edt-window-system) (memq edt-window-system '(pc tty)))
(progn
(fset 'edt-emulation-on (symbol-function 'edt-select-user-global-map)))
(progn
(fset 'edt-emulation-on (symbol-function 'edt-select-default-global-map))
- (edt-select-default-global-map))))
+ (edt-select-default-global-map)))
+ ;; We need to share `global-buffers-menu-map' with the saved global
+ ;; keymap, because `menu-bar-update-buffers' directly changes it.
+ (define-key (current-global-map) [menu-bar buffer]
+ (cons "Buffers" global-buffers-menu-map)))
(defun edt-user-emulation-setup ()
"Setup user custom emulation of DEC's EDT editor."
(define-prefix-command 'edt-user-gold-map)
(fset 'edt-user-gold-map (copy-keymap 'edt-default-gold-map))
;; This is a function that the user can define for custom bindings.
- ;; See etc/edt-user.doc.
+ ;; See Info node `edt' for more details, and sample edt-user.el file.
(if (fboundp 'edt-setup-user-bindings)
(edt-setup-user-bindings))
(edt-select-user-global-map))
(defun edt-electric-helpify (fun)
(let ((name "*Help*"))
(if (save-window-excursion
- (let* ((p (symbol-function 'print-help-return-message))
+ (let* ((p (symbol-function 'help-print-return-message))
(b (get-buffer name))
(m (buffer-modified-p b)))
(and b (not (get-buffer-window b))
(progn
(message "%s..." (capitalize (symbol-name fun)))
(and b
- (save-excursion
- (set-buffer b)
+ (with-current-buffer b
(set-buffer-modified-p t)))
- (fset 'print-help-return-message 'ignore)
+ (fset 'help-print-return-message 'ignore)
(call-interactively fun)
(and (get-buffer name)
(get-buffer-window (get-buffer name))
(or (not b)
(not (eq b (get-buffer name)))
(not (buffer-modified-p b)))))
- (fset 'print-help-return-message p)
+ (fset 'help-print-return-message p)
(and b (buffer-name b)
- (save-excursion
- (set-buffer b)
+ (with-current-buffer b
(set-buffer-modified-p m))))))
(with-electric-help 'delete-other-windows name t))))
(provide 'edt)
-;;; arch-tag: 18d1c54f-6900-4078-8bbc-7c2292f48941
+;; arch-tag: 18d1c54f-6900-4078-8bbc-7c2292f48941
;;; edt.el ends here