emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 088acab: * lisp/emulation/viper(-cmd)?.el: Use lexi


From: Stefan Monnier
Subject: [Emacs-diffs] master 088acab: * lisp/emulation/viper(-cmd)?.el: Use lexical-binding.
Date: Wed, 04 May 2016 15:09:09 +0000

branch: master
commit 088acab3831b45e0e0749705226b8680076df4b6
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * lisp/emulation/viper(-cmd)?.el: Use lexical-binding.
    
    * lisp/emulation/viper-cmd.el: Use lexical-binding.
    (viper-change-state-to-vi, viper-change-state-to-emacs): Allow dummy
    args, for use in advice-add.
    (viper--init-message): Rename from init-message.
    (viper-minibuffer-standard-hook): Adjust accordingly.
    (viper-undo): Remove unused var `modified'.
    (viper-read-string-with-history, viper-set-searchstyle-toggling-macros):
    Don't use dynamic vars as args.
    (viper-submit-report): Clarify use of dynamic vars.
    
    * lisp/emulation/viper.el: Use lexical-binding and nadvice.
    Remove redundant :group keywords.  Group the (if viper-mode) at top-level.
    Use add-function rather than a `(lambda ...).
    (viper--advice-list): New var.
    (viper--advice-add, viper--deactivate-advice-list): New funs.
    (viper-go-away, viper-set-hooks, viper-non-hook-settings): Use them.
    (viper-non-hook-settings): Don't hook into find-file any more.
---
 lisp/emulation/viper-cmd.el |  128 ++++++------
 lisp/emulation/viper.el     |  463 ++++++++++++++++++++-----------------------
 2 files changed, 278 insertions(+), 313 deletions(-)

diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 93cf3b0..da72b97 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -1,4 +1,4 @@
-;;; viper-cmd.el --- Vi command support for Viper
+;;; viper-cmd.el --- Vi command support for Viper  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1997-2016 Free Software Foundation, Inc.
 
@@ -40,13 +40,13 @@
 (defvar quail-mode)
 (defvar quail-current-str)
 (defvar mark-even-if-inactive)
-(defvar init-message)
+(defvar viper--init-message)
 (defvar viper-initial)
 (defvar undo-beg-posn)
 (defvar undo-end-posn)
 
 (eval-and-compile
-  (unless (fboundp 'declare-function) (defmacro declare-function (&rest  r))))
+  (unless (fboundp 'declare-function) (defmacro declare-function (&rest _))))
 ;; end pacifier
 
 
@@ -608,7 +608,7 @@
 
 ;; This also takes care of the annoying incomplete lines in files.
 ;; Also, this fixes `undo' to work vi-style for complex commands.
-(defun viper-change-state-to-vi ()
+(defun viper-change-state-to-vi (&rest _)
   "Change Viper state to Vi."
   (interactive)
   (if (and viper-first-time (not (viper-is-in-minibuffer)))
@@ -694,7 +694,7 @@
   )
 
 
-(defun viper-change-state-to-emacs ()
+(defun viper-change-state-to-emacs (&rest _)
   "Change Viper state to Emacs."
   (interactive)
   (or (viper-overlay-p viper-replace-overlay)
@@ -1294,7 +1294,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
 ;; define functions to be executed
 
 ;; invoked by the `C' command
-(defun viper-exec-change (m-com com)
+(defun viper-exec-change (m-com _com)
   (or (and (markerp viper-com-point) (marker-position viper-com-point))
       (set-marker viper-com-point (point) (current-buffer)))
   ;; handle C cmd at the eol and at eob.
@@ -1316,7 +1316,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
     (viper-change (mark t) (point))))
 
 ;; this is invoked by viper-substitute-line
-(defun viper-exec-Change (m-com com)
+(defun viper-exec-Change (_m-com _com)
   (save-excursion
     (set-mark viper-com-point)
     (viper-enlarge-region (mark t) (point))
@@ -1338,7 +1338,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
     (viper-change-state-to-insert)
     ))
 
-(defun viper-exec-delete (m-com com)
+(defun viper-exec-delete (_m-com _com)
   (or (and (markerp viper-com-point) (marker-position viper-com-point))
       (set-marker viper-com-point (point) (current-buffer)))
   (let (chars-deleted)
@@ -1364,7 +1364,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
     (if viper-ex-style-motion
        (if (and (eolp) (not (bolp))) (backward-char 1)))))
 
-(defun viper-exec-Delete (m-com com)
+(defun viper-exec-Delete (m-com _com)
   (save-excursion
     (set-mark viper-com-point)
     (viper-enlarge-region (mark t) (point))
@@ -1391,7 +1391,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
     (back-to-indentation)))
 
 ;; save region
-(defun viper-exec-yank (m-com com)
+(defun viper-exec-yank (_m-com _com)
   (or (and (markerp viper-com-point) (marker-position viper-com-point))
       (set-marker viper-com-point (point) (current-buffer)))
   (let (chars-saved)
@@ -1415,7 +1415,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
     (goto-char viper-com-point)))
 
 ;; save lines
-(defun viper-exec-Yank (m-com com)
+(defun viper-exec-Yank (_m-com _com)
   (save-excursion
     (set-mark viper-com-point)
     (viper-enlarge-region (mark t) (point))
@@ -1440,7 +1440,7 @@ as a Meta key and any number of multiple escapes are 
allowed."
   (viper-deactivate-mark)
   (goto-char viper-com-point))
 
-(defun viper-exec-bang (m-com com)
+(defun viper-exec-bang (_m-com com)
   (save-excursion
     (set-mark viper-com-point)
     (viper-enlarge-region (mark t) (point))
@@ -1458,14 +1458,14 @@ as a Meta key and any number of multiple escapes are 
allowed."
        viper-last-shell-com)
      t t)))
 
-(defun viper-exec-equals (m-com com)
+(defun viper-exec-equals (_m-com _com)
   (save-excursion
     (set-mark viper-com-point)
     (viper-enlarge-region (mark t) (point))
     (if (> (mark t) (point)) (exchange-point-and-mark))
     (indent-region (mark t) (point) nil)))
 
-(defun viper-exec-shift (m-com com)
+(defun viper-exec-shift (_m-com com)
   (save-excursion
     (set-mark viper-com-point)
     (viper-enlarge-region (mark t) (point))
@@ -1479,10 +1479,10 @@ as a Meta key and any number of multiple escapes are 
allowed."
 
 ;; this is needed because some commands fake com by setting it to ?r, which
 ;; denotes repeated insert command.
-(defsubst viper-exec-dummy (m-com com)
+(defsubst viper-exec-dummy (_m-com _com)
   nil)
 
-(defun viper-exec-buffer-search (m-com com)
+(defun viper-exec-buffer-search (_m-com _com)
   (setq viper-s-string
        (regexp-quote (buffer-substring (point) viper-com-point)))
   (setq viper-s-forward t)
@@ -1648,7 +1648,7 @@ invokes the command before that, etc."
 (add-hook 'after-change-functions 'viper-undo-sentinel)
 
 ;; Hook used in viper-undo
-(defun viper-after-change-undo-hook (beg end len)
+(defun viper-after-change-undo-hook (beg end _len)
   (if (and (boundp 'undo-in-progress) undo-in-progress)
       (setq undo-beg-posn beg
            undo-end-posn (or end beg))
@@ -1662,8 +1662,7 @@ invokes the command before that, etc."
   "Undo previous change."
   (interactive)
   (message "undo!")
-  (let ((modified (buffer-modified-p))
-        (before-undo-pt (point-marker))
+  (let ((before-undo-pt (point-marker))
        undo-beg-posn undo-end-posn)
 
     ;; the viper-after-change-undo-hook removes itself after the 1st invocation
@@ -1903,6 +1902,7 @@ Undo previous insertion and inserts new."
           "Quote string: "
           nil
           'viper-quote-region-history
+           ;; FIXME: Use comment-region.
           (cond ((string-match "tex.*-mode" (symbol-name major-mode)) "%%")
                 ((string-match "java.*-mode" (symbol-name major-mode)) "//")
                 ((string-match "perl.*-mode" (symbol-name major-mode)) "#")
@@ -1984,13 +1984,13 @@ Undo previous insertion and inserts new."
     (funcall hook)
     ))
 
-;; This is a temp hook that uses free variables init-message and viper-initial.
+;; This is a temp hook that uses free variables viper--init-message and 
viper-initial.
 ;; A dirty feature, but it is the simplest way to have it do the right thing.
-;; The INIT-MESSAGE and VIPER-INITIAL vars come from the scope set by
+;; The VIPER--INIT-MESSAGE and VIPER-INITIAL vars come from the scope set by
 ;; viper-read-string-with-history
 (defun viper-minibuffer-standard-hook ()
-  (if (stringp init-message)
-      (viper-tmp-insert-at-eob init-message))
+  (if (stringp viper--init-message)
+      (viper-tmp-insert-at-eob viper--init-message))
   (when (stringp viper-initial)
     ;; don't wait if we have unread events or in kbd macro
     (or unread-command-events
@@ -2054,7 +2054,7 @@ To turn this feature off, set this variable to nil."
               (viper-minibuffer-real-start) (point-max)))
        found key cmd suff)
     (goto-char (point-max))
-    (if (and viper-smart-suffix-list (string-match "\\.$" file))
+    (if (and viper-smart-suffix-list (string-match "\\.\\'" file))
        (progn
          (while (and (not found) (< count len))
            (setq suff (nth count viper-smart-suffix-list)
@@ -2098,10 +2098,10 @@ problems."
 
 ;;; Reading string with history
 
-(defun viper-read-string-with-history (prompt &optional viper-initial
+(defun viper-read-string-with-history (prompt &optional initial
                                              history-var default keymap
                                              init-message)
-  ;; Read string, prompting with PROMPT and inserting the VIPER-INITIAL
+  ;; Read string, prompting with PROMPT and inserting the INITIAL
   ;; value.  Uses HISTORY-VAR.  DEFAULT is the default value to accept if the
   ;; input is an empty string.
   ;; Default value is displayed until the user types something in the
@@ -2109,14 +2109,16 @@ problems."
   ;; KEYMAP is used, if given, instead of minibuffer-local-map.
   ;; INIT-MESSAGE is the message temporarily displayed after entering the
   ;; minibuffer.
-  (let ((minibuffer-setup-hook
+  (let ((viper-initial initial)
+        (viper--init-message init-message)
+        (minibuffer-setup-hook
         ;; stolen from add-hook
         (let ((old
                (if (boundp 'minibuffer-setup-hook)
                    minibuffer-setup-hook
                  nil)))
           (cons
-           'viper-minibuffer-standard-hook
+           #'viper-minibuffer-standard-hook
            (if (or (not (listp old)) (eq (car old) 'lambda))
                (list old) old))))
        (val "")
@@ -2124,14 +2126,14 @@ problems."
        temp-msg)
 
     (setq keymap (or keymap minibuffer-local-map)
-         viper-initial (or viper-initial "")
+         initial (or initial "")
          temp-msg (if default
                       (format "(default %s) " default)
                     ""))
 
     (setq viper-incomplete-ex-cmd nil)
     (setq val (read-from-minibuffer prompt
-                                   (concat temp-msg viper-initial val padding)
+                                   (concat temp-msg initial val padding)
                                    keymap nil history-var))
     (setq minibuffer-setup-hook nil
          padding (viper-array-to-string (this-command-keys))
@@ -2832,7 +2834,7 @@ On reaching beginning of line, stop and signal error."
               (viper-looking-at-alphasep))))))
 
 
-(defun viper-end-of-word (arg &optional careful)
+(defun viper-end-of-word (arg &optional _careful)
   "Move point to end of current word."
   (interactive "P")
   (viper-leave-region-active)
@@ -3668,17 +3670,14 @@ the Emacs binding of `/'."
           (setq msg "Search style remains unchanged")))
     (princ msg t)))
 
-(defun viper-set-searchstyle-toggling-macros (unset &optional major-mode)
+(defun viper-set-searchstyle-toggling-macros (unset &optional mode)
   "Set the macros for toggling the search style in Viper's vi-state.
 The macro that toggles case sensitivity is bound to `//', and the one that
 toggles regexp search is bound to `///'.
 With a prefix argument, this function unsets the macros.
-If MAJOR-MODE is set, set the macros only in that major mode."
+If MODE is set, set the macros only in that major mode."
   (interactive "P")
-  (let (scope)
-    (if (and major-mode (symbolp major-mode))
-       (setq scope major-mode)
-      (setq scope 't))
+  (let ((scope (if (and mode (symbolp mode)) mode t)))
     (or noninteractive
        (if (not unset)
            (progn
@@ -4871,33 +4870,36 @@ Please, specify your level now: "))
 
 ;;; Bug Report
 
+(defvar reporter-prompt-for-summary-p)
+
 (defun viper-submit-report ()
   "Submit bug report on Viper."
   (interactive)
+  (defvar viper-device-type)
+  (defvar viper-color-display-p)
+  (defvar viper-frame-parameters)
+  (defvar viper-minibuffer-emacs-face)
+  (defvar viper-minibuffer-vi-face)
+  (defvar viper-minibuffer-insert-face)
   (let ((reporter-prompt-for-summary-p t)
        (viper-device-type (viper-device-type))
-       color-display-p frame-parameters
-       minibuffer-emacs-face minibuffer-vi-face minibuffer-insert-face
-       varlist salutation window-config)
-
-    ;; If mode info is needed, add variable to `let' and then set it below,
-    ;; like we did with color-display-p.
-    (setq color-display-p (if (viper-window-display-p)
+       (viper-color-display-p (if (viper-window-display-p)
                              (viper-color-display-p)
-                           'non-x)
-         minibuffer-vi-face (if (viper-has-face-support-p)
-                                (viper-get-face viper-minibuffer-vi-face)
-                              'non-x)
-         minibuffer-insert-face (if (viper-has-face-support-p)
-                                    (viper-get-face
-                                     viper-minibuffer-insert-face)
-                                  'non-x)
-         minibuffer-emacs-face (if (viper-has-face-support-p)
-                                   (viper-get-face
-                                    viper-minibuffer-emacs-face)
-                                 'non-x)
-         frame-parameters (if (fboundp 'frame-parameters)
-                              (frame-parameters (selected-frame))))
+                              'non-x))
+        (viper-frame-parameters (if (fboundp 'frame-parameters)
+                                    (frame-parameters (selected-frame))))
+       (viper-minibuffer-emacs-face (if (viper-has-face-support-p)
+                                         (viper-get-face
+                                          viper-minibuffer-emacs-face)
+                                       'non-x))
+        (viper-minibuffer-vi-face (if (viper-has-face-support-p)
+                                      (viper-get-face viper-minibuffer-vi-face)
+                                    'non-x))
+        (viper-minibuffer-insert-face (if (viper-has-face-support-p)
+                                          (viper-get-face
+                                           viper-minibuffer-insert-face)
+                                        'non-x))
+       varlist salutation window-config)
 
     (setq varlist (list 'viper-vi-minibuffer-minor-mode
                        'viper-insert-minibuffer-minor-mode
@@ -4942,11 +4944,11 @@ Please, specify your level now: "))
                        'viper-expert-level
                        'major-mode
                        'viper-device-type
-                       'color-display-p
-                       'frame-parameters
-                       'minibuffer-vi-face
-                       'minibuffer-insert-face
-                       'minibuffer-emacs-face
+                       'viper-color-display-p
+                       'viper-frame-parameters
+                       'viper-minibuffer-vi-face
+                       'viper-minibuffer-insert-face
+                       'viper-minibuffer-emacs-face
                        ))
          (setq salutation "
 Congratulations! You may have unearthed a bug in Viper!
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index b24f1c4..a0bba9a 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -1,4 +1,4 @@
-;;; viper.el --- A full-featured Vi emulator for Emacs and XEmacs,
+;;; viper.el --- A full-featured Vi emulator for Emacs and XEmacs,  
-*-lexical-binding:t -*-
 ;;              a VI Plan for Emacs Rescue,
 ;;              and a venomous VI PERil.
 ;;              Viper Is also a Package for Emacs Rebels.
@@ -126,9 +126,9 @@
 ;; As an immediate solution, you can hit C-z to bring about the right mode.
 ;; An interim solution is to add an appropriate hook to the mode like this:
 ;;
-;;     (add-hook 'your-favorite-mode 'viper-mode)
+;;     (add-hook 'your-favorite-mode #'viper-mode)
 ;; or
-;;     (add-hook 'your-favorite-mode 'viper-change-state-to-emacs)
+;;     (add-hook 'your-favorite-mode #'viper-change-state-to-emacs)
 ;;
 ;; whichever applies.  The right thing to do, however, is to complain to the
 ;; author of the respective package. (Sometimes they also neglect to equip
@@ -308,7 +308,6 @@
 (defvar viper-major-mode-modifier-list)
 ;; end pacifier
 
-(require 'advice)
 (require 'viper-init)
 (require 'viper-keym)
 
@@ -337,8 +336,7 @@ This is different from `viper-mode' variable in that 
`viper-mode' determines
 whether to use Viper in the first place, while `viper-always', if nil, lets
 user decide when to invoke Viper in a major mode."
   :type 'boolean
-  :tag "Always Invoke Viper"
-  :group 'viper-misc)
+  :tag "Always Invoke Viper")
 
 ;; Non-viper variables that need to be saved in case the user decides to
 ;; de-viperize emacs.
@@ -354,8 +352,7 @@ Must be set in your init file before Viper is loaded.
 DO NOT set this variable interactively, unless you are using the customization
 widget."
   :type '(choice (const nil) (const t) (const ask))
-  :tag "Set Viper Mode on Loading"
-  :group 'viper-misc)
+  :tag "Set Viper Mode on Loading")
 
 (defcustom viper-vi-state-mode-list
   '(fundamental-mode
@@ -401,8 +398,7 @@ widget."
     mh-show-mode
     )
   "Major modes that require Vi command state."
-  :type '(repeat symbol)
-  :group 'viper-misc)
+  :type '(repeat symbol))
 
 (defcustom viper-emacs-state-mode-list
   '(Custom-mode
@@ -440,8 +436,7 @@ Normally, Viper would bring buffers up in Emacs state, 
unless the corresponding
 major mode has been placed on `viper-vi-state-mode-list' or
 `viper-insert-state-mode-list'.  So, don't place a new mode on this list,
 unless it is coming up in a wrong Viper state."
-  :type '(repeat symbol)
-  :group 'viper-misc)
+  :type '(repeat symbol))
 
 (defcustom viper-insert-state-mode-list
   '(internal-ange-ftp-mode
@@ -452,18 +447,17 @@ unless it is coming up in a wrong Viper state."
     eshell-mode
     shell-mode)
   "A list of major modes that should come up in Vi Insert state."
-  :type '(repeat symbol)
-  :group 'viper-misc)
+  :type '(repeat symbol))
 
 
 ;; used to set viper-major-mode-modifier-list in defcustom
 (defun viper-apply-major-mode-modifiers (&optional symbol value)
   (if symbol
       (set symbol value))
-  (mapcar (lambda (triple)
-           (viper-modify-major-mode
-            (nth 0 triple) (nth 1 triple) (eval (nth 2 triple))))
-         viper-major-mode-modifier-list))
+  (mapc (lambda (triple)
+          (viper-modify-major-mode
+           (nth 0 triple) (nth 1 triple) (symbol-value (nth 2 triple))))
+        viper-major-mode-modifier-list))
 
 ;; We change standard bindings in some major modes, making them slightly
 ;; different than in "normal" vi/insert/emacs states
@@ -504,10 +498,7 @@ existing triple."
                        (const vi-state)
                        (const insert-state))
                symbol))
-  :set 'viper-apply-major-mode-modifiers
-  :group 'viper-misc)
-
-
+  :set #'viper-apply-major-mode-modifiers)
 
 
 
@@ -632,17 +623,17 @@ This startup message appears whenever you load Viper, 
unless you type `y' now."
 ;; remove viper hooks from SYMBOL
 (defun viper-remove-hooks (symbol)
   (cond ((not (boundp symbol)) nil)
-       ((not (listp (eval symbol))) nil)
+       ((not (listp (symbol-value symbol))) nil)
        ((string-match "-hook" (symbol-name symbol))
-        (remove-hook symbol 'viper-mode)
-        (remove-hook symbol 'viper-change-state-to-emacs)
-        (remove-hook symbol 'viper-change-state-to-insert)
-        (remove-hook symbol 'viper-change-state-to-vi)
-        (remove-hook symbol 'viper-minibuffer-post-command-hook)
-        (remove-hook symbol 'viper-minibuffer-setup-sentinel)
-        (remove-hook symbol 'viper-major-mode-change-sentinel)
-        (remove-hook symbol 'set-viper-state-in-major-mode)
-        (remove-hook symbol 'viper-post-command-sentinel)
+        (remove-hook symbol #'viper-mode)
+        (remove-hook symbol #'viper-change-state-to-emacs)
+        (remove-hook symbol #'viper-change-state-to-insert)
+        (remove-hook symbol #'viper-change-state-to-vi)
+        (remove-hook symbol #'viper-minibuffer-post-command-hook)
+        (remove-hook symbol #'viper-minibuffer-setup-sentinel)
+        (remove-hook symbol #'viper-major-mode-change-sentinel)
+        (remove-hook symbol #'set-viper-state-in-major-mode)
+        (remove-hook symbol #'viper-post-command-sentinel)
         )))
 
 ;; Remove local value in all existing buffers
@@ -652,6 +643,15 @@ This startup message appears whenever you load Viper, 
unless you type `y' now."
     (with-current-buffer buf
       (kill-local-variable symbol))))
 
+(defvar viper--advice-list nil)
+
+(defun viper--advice-add (function where advice)
+  (advice-add function where advice)
+  (push (list function advice) viper--advice-list))
+
+(defun viper--deactivate-advice-list ()
+  (mapc #'advice-remove viper--advice-list)
+  (setq viper--advice-list nil))
 
 (defun viper-go-away ()
   "De-Viperize Emacs.
@@ -697,7 +697,7 @@ It also can't undo some Viper settings."
 
 
   ;; deactivate all advices done by Viper.
-  (ad-deactivate-regexp "viper-")
+  (viper--deactivate-advice-list)
 
   (setq viper-mode nil)
 
@@ -769,10 +769,10 @@ It also can't undo some Viper settings."
                )
 
   ;; remove all hooks set by viper
-  (mapatoms 'viper-remove-hooks)
-  (remove-hook 'comint-mode-hook 'viper-comint-mode-hook)
-  (remove-hook 'erc-mode-hook 'viper-comint-mode-hook)
-  (remove-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
+  (mapatoms #'viper-remove-hooks)
+  (remove-hook 'comint-mode-hook #'viper-comint-mode-hook)
+  (remove-hook 'erc-mode-hook #'viper-comint-mode-hook)
+  (remove-hook 'change-major-mode-hook #'viper-major-mode-change-sentinel)
 
   ;; unbind Viper mouse bindings
   (viper-unbind-mouse-search-key)
@@ -781,7 +781,7 @@ It also can't undo some Viper settings."
   ;; This advice is undone earlier, when all advices matching "viper-" are
   ;; deactivated.
   (if (featurep 'xemacs)
-      (remove-hook 'mouse-leave-frame-hook 'viper-remember-current-frame))
+      (remove-hook 'mouse-leave-frame-hook #'viper-remember-current-frame))
   ) ; end viper-go-away
 
 
@@ -813,7 +813,7 @@ It also can't undo some Viper settings."
   ;; clear the list of bufs that changed major mode
   (setq viper-new-major-mode-buffer-list nil)
   ;; change the global value of hook
-  (remove-hook 'viper-post-command-hooks 'set-viper-state-in-major-mode))
+  (remove-hook 'viper-post-command-hooks #'set-viper-state-in-major-mode))
 
 ;; sets up post-command-hook to turn viper-mode, if the current mode is
 ;; fundamental
@@ -823,7 +823,7 @@ It also can't undo some Viper settings."
        (setq viper-new-major-mode-buffer-list
              (cons (current-buffer) viper-new-major-mode-buffer-list))))
   ;; change the global value of hook
-  (add-hook 'viper-post-command-hooks 'set-viper-state-in-major-mode t))
+  (add-hook 'viper-post-command-hooks #'set-viper-state-in-major-mode t))
 
 
 ;;; Handling of tty's ESC event
@@ -869,8 +869,8 @@ Two differences:
 
 (defun viper-setup-ESC-to-escape (enable)
   (if enable
-      (add-hook 'tty-setup-hook 'viper-catch-tty-ESC)
-    (remove-hook 'tty-setup-hook 'viper-catch-tty-ESC))
+      (add-hook 'tty-setup-hook #'viper-catch-tty-ESC)
+    (remove-hook 'tty-setup-hook #'viper-catch-tty-ESC))
   (let ((seen ()))
     (dolist (frame (frame-list))
       (let ((terminal (frame-terminal frame)))
@@ -887,21 +887,21 @@ Two differences:
   ;; in Fundamental Mode and Vi state.
   ;; When viper-mode is executed in such a case, it will set the major mode
   ;; back to fundamental-mode.
-  (if (eq (default-value 'major-mode) 'fundamental-mode)
+  (if (eq (default-value 'major-mode) #'fundamental-mode)
       ;; FIXME: We should use after-change-major-mode-hook instead!
-      (setq-default major-mode 'viper-mode))
+      (setq-default major-mode #'viper-mode))
 
   (viper-setup-ESC-to-escape t)
 
-  (add-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
-  (add-hook 'find-file-hooks 'set-viper-state-in-major-mode)
+  (add-hook 'change-major-mode-hook #'viper-major-mode-change-sentinel)
+  (add-hook 'find-file-hooks #'set-viper-state-in-major-mode)
 
   ;; keep this because many modes we don't know about use this hook
   (defvar text-mode-hook)
-  (add-hook 'text-mode-hook 'viper-mode)
+  (add-hook 'text-mode-hook #'viper-mode)
 
   (defvar emerge-startup-hook)
-  (add-hook 'emerge-startup-hook 'viper-change-state-to-emacs)
+  (add-hook 'emerge-startup-hook #'viper-change-state-to-emacs)
 
   ;; if viper is started from .emacs, it might be impossible to get certain
   ;; info about the display and windows until emacs initialization is complete
@@ -916,28 +916,15 @@ Two differences:
               ))
 
   ;; Tell vc-diff to put *vc* in Vi mode
-  (eval-after-load
-      "vc"
-    '(defadvice vc-diff (after viper-vc-ad activate)
-       "Force Vi state in VC diff buffer."
-       (viper-change-state-to-vi)))
-
-  (eval-after-load
-   "emerge"
-   '(defadvice emerge-quit (after viper-emerge-advice activate)
-      "Run `viper-change-state-to-vi' after quitting emerge."
-      (viper-change-state-to-vi)))
+  (viper--advice-add 'vc-diff :after #'viper-change-state-to-vi)
+  (viper--advice-add 'emerge-quit :after #'viper-change-state-to-vi)
 
   ;; passwd.el sets up its own buffer, which turns up in Vi mode,
   ;; thus overriding the local map.  We don't need Vi mode here.
-  (eval-after-load
-   "passwd"
-   '(defadvice read-passwd-1 (before viper-passwd-ad activate)
-      "Switch to Emacs state while reading password."
-      (viper-change-state-to-emacs)))
-
-  (defadvice self-insert-command (around viper-self-insert-ad activate)
-    "Ignore all self-inserting keys in the vi-state."
+  (viper--advice-add 'read-passwd-1 :before #'viper-change-state-to-emacs)
+
+  (viper--advice-add 'self-insert-command :around
+   (lambda (orig-fun &rest args)
     ;; FIXME: Use remapping?
     (if (and (eq viper-current-state 'vi-state)
             ;; Do not use called-interactively-p here. XEmacs does not have it
@@ -945,16 +932,16 @@ Two differences:
             ;; (called-interactively-p 'interactive))
             (interactive-p))
        (beep 1)
-      ad-do-it
-      ))
+      (apply orig-fun args))))
 
-  (defadvice set-cursor-color (after viper-set-cursor-color-ad activate)
+  (viper--advice-add 'set-cursor-color :after
+   (lambda (color-name)
     "Change cursor color in VI state."
     (modify-frame-parameters
-       (selected-frame)
-       (list (cons 'viper-vi-state-cursor-color (ad-get-arg 0))))
-    (setq viper-vi-state-cursor-color (ad-get-arg 0))
-    )
+     (selected-frame)
+     (list (cons 'viper-vi-state-cursor-color color-name)))
+    (setq viper-vi-state-cursor-color color-name)))
+
 
   (when (and (fboundp 'add-to-ordered-list) (boundp 
'emulation-mode-map-alists))
     ;; needs to be as early as possible
@@ -965,8 +952,8 @@ Two differences:
     )
 
   ;; Emacs shell, ange-ftp, and comint-based modes
-  (add-hook 'comint-mode-hook 'viper-comint-mode-hook) ; comint
-  (add-hook 'erc-mode-hook 'viper-comint-mode-hook) ; ERC
+  (add-hook 'comint-mode-hook #'viper-comint-mode-hook) ; comint
+  (add-hook 'erc-mode-hook #'viper-comint-mode-hook) ; ERC
 
   (add-hook 'eshell-mode-hook
            (lambda () (setq viper-auto-indent nil)))
@@ -984,22 +971,14 @@ Two differences:
 
   ;; For RMAIL users.
   ;; Put buf in Emacs state after edit.
-  (eval-after-load
-   "rmailedit"
-   '(defadvice rmail-cease-edit (after viper-rmail-advice activate)
-      "Switch to Emacs state when done editing message."
-      (viper-change-state-to-emacs)))
-
-  ;; ISO accents
-  ;; Need to do it after loading iso-acc, or else this loading will wipe out
-  ;; the advice.
-  (eval-after-load
-   "iso-acc"
-   '(defadvice iso-accents-mode (around viper-iso-accents-advice activate)
+  (viper--advice-add 'rmail-cease-edit :after #'viper-change-state-to-emacs)
+
+  ;; ISO accents.
+  (viper--advice-add 'iso-accents-mode :after
+    (lambda (arg &rest _)
       "Set viper-automatic-iso-accents to iso-accents-mode."
-      (let ((arg (ad-get-arg 0)))
-       ad-do-it
-       (setq viper-automatic-iso-accents
+      (defvar iso-accents-mode)
+      (setq viper-automatic-iso-accents
              (if (eq viper-current-state 'vi-state)
                  (if arg
                      ;; if iso-accents-mode was called with positive arg, turn
@@ -1015,35 +994,31 @@ Two differences:
        (if (memq viper-current-state '(vi-state insert-state replace-state))
            (message "Viper ISO accents mode: %s"
                     (if viper-automatic-iso-accents "on" "off")))
-       )))
+       ))
 
   ;; International input methods
-  (if (featurep 'emacs)
-      (eval-after-load "mule-cmds"
-       '(progn
-          (defadvice deactivate-input-method (after viper-mule-advice activate)
-            "Set viper-special-input-method to disable intl. input methods."
-            (viper-deactivate-input-method-action))
-          (defadvice activate-input-method (after viper-mule-advice activate)
-            "Set viper-special-input-method to enable intl. input methods."
-            (viper-activate-input-method-action))
-          ))
+  (if nil ;; (featurep 'emacs) ;;The hooks should now work!
+      (progn
+        (viper--advice-add 'deactivate-input-method :after
+                    #'viper-deactivate-input-method-action)
+        (viper--advice-add 'activate-input-method :after
+                    #'viper-activate-input-method-action))
     ;; XEmacs Although these hooks exist in Emacs, they don't seem to be always
     ;; called on input-method activation/deactivation, so we the above advise
     ;; functions instead.
     (eval-after-load "mule-cmds"
       '(progn
         (add-hook 'input-method-activate-hook
-                  'viper-activate-input-method-action t)
+                  #'viper-activate-input-method-action t)
         (add-hook 'input-method-deactivate-hook
-                  'viper-deactivate-input-method-action t)))
+                  #'viper-deactivate-input-method-action t)))
     )
-  (eval-after-load "mule-cmds"
-    '(defadvice toggle-input-method (around viper-mule-advice activate)
+  (viper--advice-add 'toggle-input-method :around
+     (lambda (orig-fun &rest args)
        "Adjust input-method toggling in vi-state."
        (if (and viper-special-input-method (eq viper-current-state 'vi-state))
-          (viper-deactivate-input-method)
-        ad-do-it)))
+           (viper-deactivate-input-method)
+         (apply orig-fun args))))
 
   ) ; viper-set-hooks
 
@@ -1075,11 +1050,11 @@ Two differences:
        "Force to read key via `viper-read-key-sequence'."
        (interactive (list (viper-read-key-sequence "Describe key: "))))
     ;; Emacs
-    (defadvice describe-key (before viper-describe-key-ad protect activate)
+    (viper--advice-add 'describe-key :before
+     (lambda (&rest _)
       "Force to read key via `viper-read-key-sequence'."
-      (interactive (let (key)
-                    (setq key (viper-read-key-sequence
-                               "Describe key (or click or menu item): "))
+      (interactive (let ((key (viper-read-key-sequence
+                              "Describe key (or click or menu item): ")))
                     (list key
                           (prefix-numeric-value current-prefix-arg)
                           ;; If KEY is a down-event, read also the
@@ -1098,7 +1073,9 @@ Two differences:
                                    (and (> (length key) 1)
                                         (eventp (aref key 1))
                                         (memq 'down (event-modifiers (aref key 
1)))))
-                               (read-event))))))
+                               (read-event)))))
+      nil))
+
     ) ; (if (featurep 'xemacs)
 
   (if (featurep 'xemacs)
@@ -1108,12 +1085,11 @@ Two differences:
        "Force to read key via `viper-read-key-sequence'."
        (interactive (list (viper-read-key-sequence "Describe key briefly: "))))
     ;; Emacs
-    (defadvice describe-key-briefly
-      (before viper-describe-key-briefly-ad protect activate)
+    (viper--advice-add 'describe-key-briefly :before
+     (lambda (&rest _)
       "Force to read key via `viper-read-key-sequence'."
-      (interactive (let (key)
-                    (setq key (viper-read-key-sequence
-                               "Describe key (or click or menu item): "))
+      (interactive (let ((key (viper-read-key-sequence
+                              "Describe key (or click or menu item): ")))
                     ;; If KEY is a down-event, read and discard the
                     ;; corresponding up-event.
                     (and (vectorp key)
@@ -1124,84 +1100,85 @@ Two differences:
                     (list key
                           (if current-prefix-arg
                               (prefix-numeric-value current-prefix-arg))
-                          1))))
+                          1)))
+      nil))
     ) ; (if (featurep 'xemacs)
 
-  (defadvice find-file (before viper-add-suffix-advice activate)
-    "Use `read-file-name' for reading arguments."
-    (interactive (cons (read-file-name "Find file: " nil default-directory)
-                      ;; XEmacs: if Mule & prefix arg, ask for coding system
-                      (cond ((and (featurep 'xemacs) (featurep 'mule))
-                             (list
-                              (and current-prefix-arg
-                                   (read-coding-system "Coding-system: "))))
-                            ;; Emacs: do wildcards
-                            ((and (featurep 'emacs) (boundp 
'find-file-wildcards))
-                                  (list find-file-wildcards))))
-                ))
-
-  (defadvice find-file-other-window (before viper-add-suffix-advice activate)
-    "Use `read-file-name' for reading arguments."
-    (interactive (cons (read-file-name "Find file in other window: "
-                                      nil default-directory)
-                      ;; XEmacs: if Mule & prefix arg, ask for coding system
-                      (cond ((and (featurep 'xemacs) (featurep 'mule))
-                             (list
-                              (and current-prefix-arg
-                                   (read-coding-system "Coding-system: "))))
-                            ;; Emacs: do wildcards
-                            ((and (featurep 'emacs) (boundp 
'find-file-wildcards))
-                             (list find-file-wildcards))))
-                ))
-
-
-  (defadvice find-file-other-frame (before viper-add-suffix-advice activate)
-    "Use `read-file-name' for reading arguments."
-    (interactive (cons (read-file-name "Find file in other frame: "
-                                      nil default-directory)
-                      ;; XEmacs: if Mule & prefix arg, ask for coding system
-                      (cond ((and (featurep 'xemacs) (featurep 'mule))
-                             (list
-                              (and current-prefix-arg
-                                   (read-coding-system "Coding-system: "))))
-                            ;; Emacs: do wildcards
-                            ((and (featurep 'emacs) (boundp 
'find-file-wildcards))
-                             (list find-file-wildcards))))
-                ))
-
-
-  (defadvice read-file-name (around viper-suffix-advice activate)
+  ;; FIXME: The default already uses read-file-name, so it looks like this
+  ;; advice is not needed any more.
+  ;; (defadvice find-file (before viper-add-suffix-advice activate)
+  ;;   "Use `read-file-name' for reading arguments."
+  ;;   (interactive (cons (read-file-name "Find file: " nil default-directory)
+  ;;                  ;; XEmacs: if Mule & prefix arg, ask for coding system
+  ;;                  (cond ((and (featurep 'xemacs) (featurep 'mule))
+  ;;                         (list
+  ;;                          (and current-prefix-arg
+  ;;                               (read-coding-system "Coding-system: "))))
+  ;;                        ;; Emacs: do wildcards
+  ;;                        ((and (featurep 'emacs) (boundp 
'find-file-wildcards))
+  ;;                              (list find-file-wildcards))))
+  ;;            ))
+  ;; (defadvice find-file-other-window (before viper-add-suffix-advice 
activate)
+  ;;   "Use `read-file-name' for reading arguments."
+  ;;   (interactive (cons (read-file-name "Find file in other window: "
+  ;;                                  nil default-directory)
+  ;;                  ;; XEmacs: if Mule & prefix arg, ask for coding system
+  ;;                  (cond ((and (featurep 'xemacs) (featurep 'mule))
+  ;;                         (list
+  ;;                          (and current-prefix-arg
+  ;;                               (read-coding-system "Coding-system: "))))
+  ;;                        ;; Emacs: do wildcards
+  ;;                        ((and (featurep 'emacs) (boundp 
'find-file-wildcards))
+  ;;                         (list find-file-wildcards))))
+  ;;            ))
+  ;; (defadvice find-file-other-frame (before viper-add-suffix-advice activate)
+  ;;   "Use `read-file-name' for reading arguments."
+  ;;   (interactive (cons (read-file-name "Find file in other frame: "
+  ;;                                  nil default-directory)
+  ;;                  ;; XEmacs: if Mule & prefix arg, ask for coding system
+  ;;                  (cond ((and (featurep 'xemacs) (featurep 'mule))
+  ;;                         (list
+  ;;                          (and current-prefix-arg
+  ;;                               (read-coding-system "Coding-system: "))))
+  ;;                        ;; Emacs: do wildcards
+  ;;                        ((and (featurep 'emacs) (boundp 
'find-file-wildcards))
+  ;;                         (list find-file-wildcards))))
+  ;;            ))
+
+
+  (viper--advice-add 'read-file-name :around
+   (lambda (orig-fun &rest args)
     "Tell `exit-minibuffer' to run `viper-file-add-suffix' as a hook."
     (let ((viper-minibuffer-exit-hook
           (append viper-minibuffer-exit-hook
                   '(viper-minibuffer-trim-tail viper-file-add-suffix))))
-      ad-do-it))
+      (apply orig-fun args))))
 
-  (defadvice start-kbd-macro (after viper-kbd-advice activate)
+  (viper--advice-add 'start-kbd-macro :after
+   (lambda (&rest _)
     "Remove Viper's intercepting bindings for C-x ).
-  This may be needed if the previous `:map' command terminated abnormally."
+This may be needed if the previous `:map' command terminated abnormally."
     (define-key viper-vi-intercept-map "\C-x)" nil)
     (define-key viper-insert-intercept-map "\C-x)" nil)
-    (define-key viper-emacs-intercept-map "\C-x)" nil))
+    (define-key viper-emacs-intercept-map "\C-x)" nil)))
 
-  (defadvice add-minor-mode (after
-                            viper-advice-add-minor-mode
-                            (toggle name &optional keymap after toggle-fun)
-                            activate)
+  (viper--advice-add 'add-minor-mode :after
+   (lambda (&rest _)
     "Run viper-normalize-minor-mode-map-alist after adding a minor mode."
     (viper-normalize-minor-mode-map-alist)
     (unless
        (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
-      (setq-default minor-mode-map-alist minor-mode-map-alist)))
+      (setq-default minor-mode-map-alist minor-mode-map-alist))))
 
   ;; catch frame switching event
   (if (viper-window-display-p)
       (if (featurep 'xemacs)
-            (add-hook 'mouse-leave-frame-hook
-                      'viper-remember-current-frame)
-          (defadvice handle-switch-frame (before viper-frame-advice activate)
-            "Remember the selected frame before the switch-frame event."
-            (viper-remember-current-frame (selected-frame)))) )
+         (add-hook 'mouse-leave-frame-hook
+                   #'viper-remember-current-frame)
+       (viper--advice-add 'handle-switch-frame :before
+        (lambda (&rest _)
+         "Remember the selected frame before the switch-frame event."
+         (viper-remember-current-frame (selected-frame))))))
 
   ) ; end viper-non-hook-settings
 
@@ -1318,97 +1295,83 @@ These two lines must come in the order given."))
                (cons 'viper-re-search (list viper-re-search)))))
 
 
-(if viper-mode
-    (progn
-      (viper-set-minibuffer-style)
-      (if viper-buffer-search-char
-         (viper-buffer-search-enable))
-      (viper-update-syntax-classes 'set-default)
-      ))
-
 
-;;; Familiarize Viper with some minor modes that have their own keymaps
-(if viper-mode
-    (progn
-      (viper-harness-minor-mode "compile")
-      (viper-harness-minor-mode "outline")
-      (viper-harness-minor-mode "allout")
-      (viper-harness-minor-mode "xref")
-      (viper-harness-minor-mode "lmenu")
-      (viper-harness-minor-mode "vc")
-      (viper-harness-minor-mode "ltx-math") ; LaTeX-math-mode in AUC-TeX, which
-      (viper-harness-minor-mode "latex")    ; sits in one of these two files
-      (viper-harness-minor-mode "cyrillic")
-      (viper-harness-minor-mode "russian")
-      (viper-harness-minor-mode "view-less")
-      (viper-harness-minor-mode "view")
-      (viper-harness-minor-mode "reftex")
-      (viper-harness-minor-mode "flyspell")
-      ))
-
-
 ;; Intercept maps could go in viper-keym.el
 ;; We keep them here in case someone redefines them in viper-custom-file-name
 
-(define-key viper-vi-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
-(define-key viper-insert-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
+(define-key viper-vi-intercept-map viper-ESC-key #'viper-intercept-ESC-key)
+(define-key viper-insert-intercept-map viper-ESC-key #'viper-intercept-ESC-key)
 
 ;; This is taken care of by viper-insert-global-user-map.
-;;(define-key viper-replace-map viper-ESC-key 'viper-intercept-ESC-key)
+;;(define-key viper-replace-map viper-ESC-key #'viper-intercept-ESC-key)
 
 
 ;; The default viper-toggle-key is \C-z; for the novice, it suspends or
 ;; iconifies Emacs
 (define-key viper-vi-intercept-map viper-toggle-key 'viper-toggle-key-action)
 (define-key
-  viper-emacs-intercept-map viper-toggle-key 'viper-change-state-to-vi)
+  viper-emacs-intercept-map viper-toggle-key #'viper-change-state-to-vi)
 
-;;; Removed to avoid bad interaction with cua-mode.
-;;; Escape from Emacs and Insert modes to Vi for one command
+;; Removed to avoid bad interaction with cua-mode.
+;; Escape from Emacs and Insert modes to Vi for one command
 ;;(define-key viper-emacs-intercept-map "\C-c\\" 'viper-escape-to-vi)
 ;;(define-key viper-insert-intercept-map "\C-c\\" 'viper-escape-to-vi)
 
-(if viper-mode
-    (setq-default viper-emacs-intercept-minor-mode t
-                 viper-emacs-local-user-minor-mode t
-                 viper-emacs-global-user-minor-mode t
-                 viper-emacs-kbd-minor-mode t
-                 viper-emacs-state-modifier-minor-mode t))
-(if (and viper-mode (eq viper-current-state 'emacs-state))
-    (setq viper-emacs-intercept-minor-mode t
-         viper-emacs-local-user-minor-mode t
-         viper-emacs-global-user-minor-mode t
-         viper-emacs-kbd-minor-mode t
-         viper-emacs-state-modifier-minor-mode t))
-
-
-(if (and viper-mode
-        (or viper-always
-            (and (< viper-expert-level 5) (> viper-expert-level 0))))
-    (viper-set-hooks))
-
-;; Let all minor modes take effect after loading.
-;; This may not be enough, so we also set default minor-mode-alist.
-;; Without setting the default, new buffers that come up in emacs mode have
-;; minor-mode-map-alist = nil, unless we call viper-change-state-*
-(if (and viper-mode (eq viper-current-state 'emacs-state))
-    (progn
-      (viper-change-state-to-emacs)
-      (unless
-         (and (fboundp 'add-to-ordered-list)
-              (boundp 'emulation-mode-map-alists))
-       (setq-default minor-mode-map-alist minor-mode-map-alist))
-      ))
+(when viper-mode
+  (viper-set-minibuffer-style)
+  (if viper-buffer-search-char
+      (viper-buffer-search-enable))
+  (viper-update-syntax-classes 'set-default)
+
+  ;; Familiarize Viper with some minor modes that have their own keymaps
+  (viper-harness-minor-mode "compile")
+  (viper-harness-minor-mode "outline")
+  (viper-harness-minor-mode "allout")
+  (viper-harness-minor-mode "xref")
+  (viper-harness-minor-mode "lmenu")
+  (viper-harness-minor-mode "vc")
+  (viper-harness-minor-mode "ltx-math") ; LaTeX-math-mode in AUC-TeX, which
+  (viper-harness-minor-mode "latex")    ; sits in one of these two files
+  (viper-harness-minor-mode "cyrillic")
+  (viper-harness-minor-mode "russian")
+  (viper-harness-minor-mode "view-less")
+  (viper-harness-minor-mode "view")
+  (viper-harness-minor-mode "reftex")
+  (viper-harness-minor-mode "flyspell")
+
+  (setq-default viper-emacs-intercept-minor-mode t
+                viper-emacs-local-user-minor-mode t
+                viper-emacs-global-user-minor-mode t
+                viper-emacs-kbd-minor-mode t
+                viper-emacs-state-modifier-minor-mode t)
+  (if (eq viper-current-state 'emacs-state)
+      (setq viper-emacs-intercept-minor-mode t
+            viper-emacs-local-user-minor-mode t
+            viper-emacs-global-user-minor-mode t
+            viper-emacs-kbd-minor-mode t
+            viper-emacs-state-modifier-minor-mode t))
+
+
+  (if (or viper-always
+          (and (< viper-expert-level 5) (> viper-expert-level 0)))
+      (viper-set-hooks))
+
+  ;; Let all minor modes take effect after loading.
+  ;; This may not be enough, so we also set default minor-mode-alist.
+  ;; Without setting the default, new buffers that come up in emacs mode have
+  ;; minor-mode-map-alist = nil, unless we call viper-change-state-*
+  (when (eq viper-current-state 'emacs-state)
+    (viper-change-state-to-emacs)
+    (unless
+        (and (fboundp 'add-to-ordered-list)
+             (boundp 'emulation-mode-map-alists))
+      (setq-default minor-mode-map-alist minor-mode-map-alist))
+    )
 
-(if (and viper-mode (this-major-mode-requires-vi-state major-mode))
-    (viper-mode))
+  (if (this-major-mode-requires-vi-state major-mode)
+      (viper-mode))
 
-(if viper-mode
-    (setq initial-major-mode
-         `(lambda ()
-            (funcall (quote ,initial-major-mode))
-            (set-viper-state-in-major-mode))
-         ))
+  (add-function :after initial-major-mode #'set-viper-state-in-major-mode))
 
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]