]> git.eshelyaron.com Git - emacs.git/commitdiff
new version
authorMichael Kifer <kifer@cs.stonybrook.edu>
Fri, 25 Jul 1997 01:42:53 +0000 (01:42 +0000)
committerMichael Kifer <kifer@cs.stonybrook.edu>
Fri, 25 Jul 1997 01:42:53 +0000 (01:42 +0000)
lisp/emulation/viper-cmd.el
lisp/emulation/viper.el

index d93b8f9b34db2279ea83ed8ccfe699e5b956aed8..ca27e8604151c4ef7d0af8eb4183c42f685f9f41 100644 (file)
@@ -959,7 +959,8 @@ as a Meta key and any number of multiple escapes is allowed."
 ;; Vi operator as prefix argument."
 (defun vip-prefix-arg-com (char value com)
   (let ((cont t)
-       cmd-info mv-or-digit-cmd)
+       cmd-info 
+       cmd-to-exec-at-end)
     (while (and cont
                (memq char
                      (list ?c ?d ?y ?! ?< ?> ?= ?# ?r ?R ?\"
@@ -1009,8 +1010,9 @@ as a Meta key and any number of multiple escapes is allowed."
        (or (vip-movement-command-p char)
            (vip-digit-command-p char)
            (vip-regsuffix-command-p char)
+           (= char ?!) ; bang command
            (error ""))
-       (setq mv-or-digit-cmd
+       (setq cmd-to-exec-at-end
              (vip-exec-form-in-vi 
               (` (key-binding (char-to-string (, char)))))))
     
@@ -1036,14 +1038,14 @@ as a Meta key and any number of multiple escapes is allowed."
            ((equal com '(?= . ?=)) (vip-line (cons value ?=)))
            (t (error "")))))
   
-  (if mv-or-digit-cmd
+  (if cmd-to-exec-at-end
       (progn
        (setq last-command-char char)
        (setq last-command-event 
              (vip-copy-event
               (if vip-xemacs-p (character-to-event char) char)))
        (condition-case nil
-           (funcall mv-or-digit-cmd cmd-info)
+           (funcall cmd-to-exec-at-end cmd-info)
          (error
           (error "")))))
   ))
@@ -1242,6 +1244,7 @@ as a Meta key and any number of multiple escapes is allowed."
   (save-excursion
     (set-mark vip-com-point)
     (vip-enlarge-region (mark t) (point))
+    (exchange-point-and-mark)
     (shell-command-on-region
      (mark t) (point)
      (if (= com ?!)
index d3b369c93cf643f26de47fa772aed8d39c3c6b08..20b46fea8695f3e1bb3c3da3bfb307f6ce62edb3 100644 (file)
@@ -8,7 +8,7 @@
 
 ;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
 
-(defconst viper-version "2.95 of July 9, 1997"
+(defconst viper-version "2.95 of July 23, 1997"
   "The current version of Viper")
 
 ;; This file is part of GNU Emacs.
@@ -363,6 +363,15 @@ DO NOT set this variable interactively."
   :tag "Set Viper Mode on Loading"
   :group 'viper)
 
+(defcustom viper-non-vi-major-modes nil
+  "*A list of major modes that should never come up in vi command mode.
+Viper automatically augments this list with some obvious modes, such as
+`dired-mode', `tar-mode', etc. So, don't put modes on this list, unless 
+it comes up in a wrong Viper state."
+  :type 'list
+  :group 'viper)
+
+
 \f
 ;; The following are provided for compatibility with older VIP's
 
@@ -454,7 +463,9 @@ This startup message appears whenever you load Viper, unless you type `y' now."
                    (sit-for 4)
                    ))
              (viper-set-expert-level 'dont-change-unless)))
-       (vip-change-state-to-vi))))
+
+       (or (memq major-mode viper-non-vi-major-modes) ; don't switch to Vi
+           (vip-change-state-to-vi)))))
    
 \f
 ;; This hook designed to enable Vi-style editing in comint-based modes."
@@ -744,10 +755,14 @@ remains buffer-local."
   (vip-modify-major-mode 'dired-mode 'emacs-state vip-dired-modifier-map)
   (vip-set-emacs-state-searchstyle-macros nil 'dired-mode)
   (add-hook 'dired-mode-hook 'vip-change-state-to-emacs)
+  (setq viper-non-vi-major-modes
+       (append '(dired-mode efs-mode internal-ange-ftp-mode)
+               viper-non-vi-major-modes))
 
   ;; Tar
   (vip-modify-major-mode 'tar-mode 'emacs-state vip-slash-and-colon-map)
   (vip-set-emacs-state-searchstyle-macros nil 'tar-mode)
+  (setq viper-non-vi-major-modes (cons 'tar-mode viper-non-vi-major-modes))
 
   ;; MH-E
   (vip-modify-major-mode 'mh-folder-mode 'emacs-state vip-slash-and-colon-map)
@@ -755,6 +770,8 @@ remains buffer-local."
   ;; changing state to emacs is needed so the preceding will take hold
   (add-hook 'mh-folder-mode-hook 'vip-change-state-to-emacs)
   (add-hook 'mh-show-mode-hook 'viper-mode)
+  (setq viper-non-vi-major-modes
+       (cons 'mh-folder-mode viper-non-vi-major-modes))
 
   ;; Gnus
   (vip-modify-major-mode 'gnus-group-mode 'emacs-state vip-slash-and-colon-map)
@@ -766,6 +783,9 @@ remains buffer-local."
   (add-hook 'gnus-group-mode-hook 'vip-change-state-to-emacs)
   (add-hook 'gnus-summary-mode-hook 'vip-change-state-to-emacs)
   (add-hook 'gnus-article-mode-hook 'viper-mode)
+  (setq viper-non-vi-major-modes
+       (append '(gnus-group-mode gnus-summary-mode)
+               viper-non-vi-major-modes))
 
   ;; Info
   (vip-modify-major-mode 'Info-mode 'emacs-state vip-slash-and-colon-map)
@@ -774,6 +794,7 @@ remains buffer-local."
   (defadvice Info-mode (after vip-Info-ad activate)
     "Switch to emacs mode."
     (vip-change-state-to-emacs))
+  (setq viper-non-vi-major-modes (cons 'Info-mode viper-non-vi-major-modes))
 
   ;; Buffer menu
   (vip-modify-major-mode 
@@ -783,12 +804,15 @@ remains buffer-local."
   (defadvice Buffer-menu-mode (after vip-Buffer-menu-ad activate)
     "Switch to emacs mode."
     (vip-change-state-to-emacs))
+  (setq viper-non-vi-major-modes
+       (cons 'Buffer-menu-mode viper-non-vi-major-modes))
 
   ;; View mode
   (defvar view-mode-hook)
   (defvar view-hook)
   (add-hook 'view-hook 'vip-change-state-to-emacs)
   (add-hook 'view-mode-hook 'vip-change-state-to-emacs)
+  (setq viper-non-vi-major-modes (cons 'view-mode viper-non-vi-major-modes))
   
   ;; For VM users.
   ;; Put summary and other VM buffers in Emacs state.
@@ -796,6 +820,8 @@ remains buffer-local."
   (defvar vm-summary-mode-hooks)
   (add-hook 'vm-mode-hooks   'vip-change-state-to-emacs)
   (add-hook 'vm-summary-mode-hooks   'vip-change-state-to-emacs)
+  (setq viper-non-vi-major-modes
+       (append '(vm-mode vm-summary-mode) viper-non-vi-major-modes))
   
   ;; For RMAIL users.
   ;; Put buf in Emacs state after edit.