]> git.eshelyaron.com Git - emacs.git/commitdiff
(vip-add-hook,vip-remove-hook): new functions.
authorMichael Kifer <kifer@cs.stonybrook.edu>
Thu, 27 Jul 1995 19:40:33 +0000 (19:40 +0000)
committerMichael Kifer <kifer@cs.stonybrook.edu>
Thu, 27 Jul 1995 19:40:33 +0000 (19:40 +0000)
lisp/emulation/viper-util.el

index 31233a6f0daa4e69bc8b7916aa0616ca279106df..6b15ca97eb8ec2f894d0dabfb752041a671d0da1 100644 (file)
                  (error "%S: Invalid op in vip-check-version" op))))
     (cond ((memq op '(= > >=)) nil)
          ((memq op '(< <=)) t))))
+         
+;;;; warn if it is a wrong version of emacs
+;;(if (or (vip-check-version '< 19 29 'emacs)
+;;     (vip-check-version '< 19 12 'xemacs))
+;;    (progn
+;;      (with-output-to-temp-buffer " *vip-info*"
+;;     (switch-to-buffer " *vip-info*")
+;;     (insert
+;;      (format "
+;;
+;;This version of Viper requires 
+;;
+;;\t Emacs 19.29 and higher
+;;\t OR
+;;\t XEmacs 19.12 and higher
+;;
+;;It is unlikely to work under Emacs version %s
+;;that you are using... " emacs-version))
+;;
+;;     (if noninteractive
+;;         ()
+;;       (beep 1)
+;;       (beep 1)
+;;       (insert "\n\nType any key to continue... ")
+;;       (vip-read-event)))
+;;      (kill-buffer " *vip-info*")))
   
 
 (defun vip-get-visible-buffer-window (wind)
          (setq elt (nconc elt (list form)))))
     form
     ))
+
+;; This is here because Emacs changed the way local hooks work.
+;;
+;;Add to the value of HOOK the function FUNCTION.
+;;FUNCTION is not added if already present.
+;;FUNCTION is added (if necessary) at the beginning of the hook list
+;;unless the optional argument APPEND is non-nil, in which case
+;;FUNCTION is added at the end.
+;;
+;;HOOK should be a symbol, and FUNCTION may be any valid function.  If
+;;HOOK is void, it is first set to nil.  If HOOK's value is a single
+;;function, it is changed to a list of functions."
+(defun vip-add-hook (hook function &optional append)
+  (if (not (boundp hook)) (set hook nil))
+  ;; If the hook value is a single function, turn it into a list.
+  (let ((old (symbol-value hook)))
+    (if (or (not (listp old)) (eq (car old) 'lambda))
+       (setq old (list old)))
+    (if (member function old)
+       nil
+      (set hook (if append
+                   (append old (list function)) ; don't nconc
+                 (cons function old))))))
+
+;; This is here because of Emacs's changes in the semantics of add/remove-hooks
+;; and due to the bugs they introduced.
+;;
+;; Remove from the value of HOOK the function FUNCTION.
+;; HOOK should be a symbol, and FUNCTION may be any valid function.  If
+;; FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
+;; list of hooks to run in HOOK, then nothing is done.  See `vip-add-hook'."
+(defun vip-remove-hook (hook function)
+  (if (or (not (boundp hook))          ;unbound symbol, or
+         (null (symbol-value hook))    ;value is nil, or
+         (null function))              ;function is nil, then
+      nil                              ;Do nothing.
+    (let ((hook-value (symbol-value hook)))
+      (if (consp hook-value)
+         ;; don't side-effect the list
+         (setq hook-value (delete function (copy-sequence hook-value)))
+       (if (equal hook-value function)
+           (setq hook-value nil)))
+      (set hook hook-value))))
+
     
     
 ;; like read-event, but in XEmacs also try to convert to char, if possible
          event))
     ))
 
+;; This function lets function-key-map convert key sequences into logical
+;; keys. This does a better job than vip-read-event when it comes to kbd
+;; macros, since it enables certain macros to be shared between X and TTY
+;; modes.
+(defun vip-read-key () 
+  (let ((overriding-local-map vip-overriding-map) 
+        key) 
+    (use-global-map vip-overriding-map) 
+    (setq key (elt (read-key-sequence nil) 0)) 
+    (use-global-map global-map) 
+    key)) 
+
 
 ;; Emacs has a bug in eventp, which causes (eventp nil) to return (nil)
 ;; instead of nil, if '(nil) was previously inadvertantly assigned to