2007-10-22 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emulation/tpu-edt.el (tpu-edt-old-global-values): New var.
+ (tpu-edt-off): Use it.
+ (tpu-edt-on): Set it. Make sure the tpu-global-map is not already on
+ the global-map before adding it to global-map.
+
* menu-bar.el (global-buffers-menu-map): New var.
(global-map, menu-bar-update-buffers): Use it.
* msb.el (msb-menu-bar-update-buffers): Use it.
;;; Code:
+(eval-when-compile (require 'cl))
;; we use picture-mode functions
(require 'picture)
(tpu-error (message "Sorry, couldn't copy - %s." (cdr conditions)))))
(kill-buffer "*TPU-Notice*")))
+(defvar tpu-edt-old-global-values nil)
;;;
;;; Start and Stop TPU-edt
(defun tpu-edt-on ()
"Turn on TPU/edt emulation."
(interactive)
+ ;; To clean things up (and avoid cycles in the global map).
+ (tpu-edt-off)
;; First, activate tpu-global-map, while protecting the original keymap.
(set-keymap-parent tpu-global-map global-map)
(setq global-map tpu-global-map)
(tpu-set-mode-line t)
(tpu-advance-direction)
;; set page delimiter, display line truncation, and scrolling like TPU
- (setq-default page-delimiter "\f")
- (setq-default truncate-lines t)
- (setq scroll-step 1)
+ (dolist (varval '((page-delimiter . "\f")
+ (truncate-lines . t)
+ (scroll-step . 1)))
+ (push (cons (car varval) (default-value (car varval)))
+ tpu-edt-old-global-values)
+ (set-default (car varval) (cdr varval)))
(tpu-set-control-keys)
(and window-system (tpu-load-xkeys nil))
(tpu-arrow-history)
(tpu-reset-control-keys nil)
(remove-hook 'post-command-hook 'tpu-search-highlight)
(tpu-set-mode-line nil)
- (setq-default page-delimiter "^\f")
- (setq-default truncate-lines nil)
- (setq scroll-step 0)
+ (while tpu-edt-old-global-values
+ (let ((varval (pop tpu-edt-old-global-values)))
+ (set-default (car varval) (cdr varval))))
;; Remove tpu-global-map from the global map.
(let ((map global-map))
(while map
(if (eq tpu-global-map parent)
(set-keymap-parent map (keymap-parent parent))
(setq map parent)))))
- (ad-disable-regexp "\\`tpu-")
+ (ignore-errors (ad-disable-regexp "\\`tpu-"))
(setq tpu-edt-mode nil))
(provide 'tpu-edt)