;;; 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 Free Software Foundation, Inc.
;; Author: Kevin Gallagher <Kevin.Gallagher@boeing.com>
;; Maintainer: Kevin Gallagher <Kevin.Gallagher@boeing.com>
(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
(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)))
(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."
(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))))