diff options
Diffstat (limited to 'lisp/emulation/viper.el')
| -rw-r--r-- | lisp/emulation/viper.el | 158 |
1 files changed, 90 insertions, 68 deletions
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index 9d0ec982d37..6c940d9522c 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -8,7 +8,7 @@ ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. -(defconst viper-version "2.86 of March 14, 1996" +(defconst viper-version "2.90 of June 19, 1996" "The current version of Viper") ;; This file is part of GNU Emacs. @@ -820,8 +820,12 @@ These buffers can be cycled through via :R and :P commands.") (defvar vip-always t "t means, arrange that vi-state will be a default.") -(defvar vip-custom-file-name (cond ((memq system-type '(vax-vms axp-vms)) - "sys$login:.vip") +(defvar vip-ms-style-os-p (memq system-type '(ms-dos windows-nt windows-95)) + "Tells is Emacs is running under an MS-style OS: ms-dos, window-nt, W95.") +(defvar vip-vms-os-p (memq system-type '(vax-vms axp-vms)) + "Tells if Emacs is running under VMS.") + +(defvar vip-custom-file-name (cond (vip-vms-os-p "sys$login:.vip") ((memq system-type '(emx ms-dos)) "/_vip") ((memq system-type '(windows-nt windows-95)) @@ -831,6 +835,7 @@ These buffers can be cycled through via :R and :P commands.") "Viper customisation file. This variable must be set _before_ loading Viper.") + (defvar vip-spell-function 'ispell-region "Spell function used by #s<move> command to spell.") @@ -1257,19 +1262,17 @@ Technically speaking, Viper is a Vi emulation package for GNU Emacs 19 and XEmacs 19. It supports virtually all of Vi and Ex functionality, extending and improving upon much of it. - 1. Viper supports Vi at several levels. Level 1 is the closest to - Vi, level 5 provides the most flexibility to depart from many Vi - conventions. + 1. Viper supports Vi at several levels. Level 1 is the closest to Vi, + level 5 provides the most flexibility to depart from many Vi conventions. You will be asked to specify your user level in a following screen. - If you select user level 1 then the keys ^X, ^C, ^Z, and ^G will - behave as in VI, to smooth transition to Viper for the beginners. - However, to use Emacs productively, you are advised to reach user - level 3 or higher. + If you select user level 1 then the keys ^X, ^C, ^Z, and ^G will behave + as in VI, to smooth transition to Viper for the beginners. However, to + use Emacs productively, you are advised to reach user level 3 or higher. If your user level is 2 or higher, ^X and ^C will invoke Emacs - functions,as usual in Emacs; ^Z will toggle vi/emacs modes, and + functions,as usual in Emacs; ^Z will toggle vi/emacs modes, and ^G will be the usual Emacs's keyboard-quit (something like ^C in VI). 2. Vi exit functions (e.g., :wq, ZZ) work on INDIVIDUAL files -- they @@ -1280,9 +1283,8 @@ and improving upon much of it. 6. Emacs Meta functions are invoked by typing `_' or `\\ ESC'. On a window system, the best way is to use the Meta-key. - 7. Try \\[keyboard-quit] and \\[abort-recursive-edit] repeatedly, - if something funny happens. This would abort the current editing - command. + 7. Try \\[keyboard-quit] and \\[abort-recursive-edit] repeatedly,if + something funny happens. This would abort the current editing command. You can get more information on Viper by: @@ -1298,8 +1300,11 @@ This startup message appears whenever you load Viper, unless you type `y' now." 'vip-inhibit-startup-message "Viper startup message inhibited" vip-custom-file-name t)) - (kill-buffer (current-buffer)))) - (message " ") + ;;(kill-buffer (current-buffer)) + (message + "The last message is in buffer `Viper Startup Message'") + (sit-for 4) + )) (vip-set-expert-level 'dont-change-unless))) (vip-change-state-to-vi)))) @@ -1791,8 +1796,8 @@ behaves as in Emacs, any number of multiple escapes is allowed." (defun vip-prefix-arg-value (event com) (let (value) ;; read while number - (while (and (numberp event) (>= event ?0) (<= event ?9)) - (setq value (+ (* (if (numberp value) value 0) 10) (- event ?0))) + (while (and (vip-characterp event) (>= event ?0) (<= event ?9)) + (setq value (+ (* (if (vip-characterp value) value 0) 10) (- event ?0))) (setq event (vip-read-event-convert-to-char))) (setq prefix-arg value) @@ -1901,11 +1906,11 @@ behaves as in Emacs, any number of multiple escapes is allowed." last-command-char (cond ((null arg) nil) ((consp arg) (car arg)) - ((numberp arg) arg) + ((integerp arg) arg) (t (error vip-InvalidCommandArgument))) (cond ((null arg) nil) ((consp arg) (cdr arg)) - ((numberp arg) nil) + ((integerp arg) nil) (t (error vip-InvalidCommandArgument)))) (quit (setq vip-use-register nil) (signal 'quit nil))) @@ -3559,15 +3564,16 @@ called from vip-repeat, the char last used is used. This behaviour is controlled by the sign of prefix numeric value." (interactive "P") (let ((val (vip-p-val arg)) - (com (vip-getcom arg))) + (com (vip-getcom arg)) + (cmd-representation (nth 5 vip-d-com))) (if (> val 0) ;; this means that the function was called interactively (setq vip-f-char (read-char) vip-f-forward t vip-f-offset nil) ;; vip-repeat --- set vip-F-char from command-keys - (setq vip-F-char (if (stringp (nth 5 vip-d-com)) - (vip-seq-last-elt (nth 5 vip-d-com)) + (setq vip-F-char (if (stringp cmd-representation) + (vip-seq-last-elt cmd-representation) vip-F-char) vip-f-char vip-F-char) (setq val (- val))) @@ -3584,15 +3590,16 @@ controlled by the sign of prefix numeric value." "Go up to char ARG forward on line." (interactive "P") (let ((val (vip-p-val arg)) - (com (vip-getcom arg))) + (com (vip-getcom arg)) + (cmd-representation (nth 5 vip-d-com))) (if (> val 0) ;; this means that the function was called interactively (setq vip-f-char (read-char) vip-f-forward t vip-f-offset t) ;; vip-repeat --- set vip-F-char from command-keys - (setq vip-F-char (if (stringp (nth 5 vip-d-com)) - (vip-seq-last-elt (nth 5 vip-d-com)) + (setq vip-F-char (if (stringp cmd-representation) + (vip-seq-last-elt cmd-representation) vip-F-char) vip-f-char vip-F-char) (setq val (- val))) @@ -3609,15 +3616,16 @@ controlled by the sign of prefix numeric value." "Find char ARG on line backward." (interactive "P") (let ((val (vip-p-val arg)) - (com (vip-getcom arg))) + (com (vip-getcom arg)) + (cmd-representation (nth 5 vip-d-com))) (if (> val 0) ;; this means that the function was called interactively (setq vip-f-char (read-char) vip-f-forward nil vip-f-offset nil) ;; vip-repeat --- set vip-F-char from command-keys - (setq vip-F-char (if (stringp (nth 5 vip-d-com)) - (vip-seq-last-elt (nth 5 vip-d-com)) + (setq vip-F-char (if (stringp cmd-representation) + (vip-seq-last-elt cmd-representation) vip-F-char) vip-f-char vip-F-char) (setq val (- val))) @@ -3634,15 +3642,16 @@ controlled by the sign of prefix numeric value." "Go up to char ARG backward on line." (interactive "P") (let ((val (vip-p-val arg)) - (com (vip-getcom arg))) + (com (vip-getcom arg)) + (cmd-representation (nth 5 vip-d-com))) (if (> val 0) ;; this means that the function was called interactively (setq vip-f-char (read-char) vip-f-forward nil vip-f-offset t) ;; vip-repeat --- set vip-F-char from command-keys - (setq vip-F-char (if (stringp (nth 5 vip-d-com)) - (vip-seq-last-elt (nth 5 vip-d-com)) + (setq vip-F-char (if (stringp cmd-representation) + (vip-seq-last-elt cmd-representation) vip-F-char) vip-f-char vip-F-char) (setq val (- val))) @@ -3776,8 +3785,9 @@ controlled by the sign of prefix numeric value." (defun vip-paren-match (arg) "Go to the matching parenthesis." (interactive "P") - (let ((com (vip-getcom arg))) - (if (numberp arg) + (let ((com (vip-getcom arg)) + anchor-point) + (if (integerp arg) (if (or (> arg 99) (< arg 1)) (error "Prefix must be between 1 and 99") (goto-char @@ -3785,20 +3795,33 @@ controlled by the sign of prefix numeric value." (* (/ (point-max) 100) arg) (/ (* (point-max) arg) 100))) (back-to-indentation)) - (let (lim) + (let (beg-lim end-lim) (if (and (eolp) (not (bolp))) (forward-char -1)) + (if (not (looking-at "[][(){}]")) + (setq anchor-point (point))) (save-excursion + (beginning-of-line) + (setq beg-lim (point)) (end-of-line) - (setq lim (point))) - (if (re-search-forward "[][(){}]" lim t) - (backward-char) - (error "No matching character on line"))) + (setq end-lim (point))) + (cond ((re-search-forward "[][(){}]" end-lim t) + (backward-char) ) + ((re-search-backward "[][(){}]" beg-lim t)) + (t + (error "No matching character on line")))) (cond ((looking-at "[\(\[{]") (if com (vip-move-marker-locally 'vip-com-point (point))) (forward-sexp 1) (if com (vip-execute-com 'vip-paren-match nil com) (backward-char))) + (anchor-point + (if com + (progn + (vip-move-marker-locally 'vip-com-point anchor-point) + (forward-char 1) + (vip-execute-com 'vip-paren-match nil com) + ))) ((looking-at "[])}]") (forward-char) (if com (vip-move-marker-locally 'vip-com-point (point))) @@ -4531,7 +4554,7 @@ cursor move past the beginning of line." (vip-change-state-to-replace t)) (kill-region (vip-replace-start) (vip-replace-end)) - (vip-restore-cursor-color) + (vip-hide-replace-overlay) (vip-change-state-to-insert)) (error ;; make sure that the overlay doesn't stay. ;; go back to the original point @@ -4916,7 +4939,7 @@ sensitive for VI-style look-and-feel." (interactive) - (if (not (numberp vip-expert-level)) (setq vip-expert-level 0)) + (if (not (natnump vip-expert-level)) (setq vip-expert-level 0)) (save-window-excursion (delete-other-windows) @@ -5310,7 +5333,7 @@ Mail anyway (y or n)? ") (setq unread-command-events (append - (cond ((numberp arg) (list (character-to-event arg))) + (cond ((vip-characterp arg) (list (character-to-event arg))) ((eventp arg) (list arg)) ((stringp arg) (mapcar 'character-to-event arg)) ((vectorp arg) (append arg nil)) ; turn into list @@ -5323,7 +5346,7 @@ Mail anyway (y or n)? ") (defun vip-eventify-list-xemacs (lis) (mapcar (function (lambda (elt) - (cond ((numberp elt) (character-to-event elt)) + (cond ((vip-characterp elt) (character-to-event elt)) ((eventp elt) elt) (t (error "vip-eventify-list-xemacs: can't convert to event, %S" @@ -5377,42 +5400,45 @@ Mail anyway (y or n)? ") "Run `vip-change-state-to-vi' on entry." (vip-change-state-to-vi)) - (defvar makefile-mode-hook nil) + (defvar makefile-mode-hook) (add-hook 'makefile-mode-hook 'viper-mode) - (defvar help-mode-hook nil) + (defvar help-mode-hook) (add-hook 'help-mode-hook 'viper-mode) - (defvar awk-mode-hook nil) + (defvar awk-mode-hook) (add-hook 'awk-mode-hook 'viper-mode) - (defvar html-mode-hook nil) + (defvar html-mode-hook) (add-hook 'html-mode-hook 'viper-mode) - (defvar html-helper-mode-hook nil) + (defvar html-helper-mode-hook) (add-hook 'html-helper-mode-hook 'viper-mode) - (defvar emacs-lisp-mode-hook nil) + (defvar emacs-lisp-mode-hook) (add-hook 'emacs-lisp-mode-hook 'viper-mode) - (defvar lisp-mode-hook nil) + (defvar lisp-mode-hook) (add-hook 'lisp-mode-hook 'viper-mode) - (defvar bibtex-mode-hook nil) + (defvar bibtex-mode-hook) (add-hook 'bibtex-mode-hook 'viper-mode) - (defvar cc-mode-hook nil) + (defvar cc-mode-hook) (add-hook 'cc-mode-hook 'viper-mode) - (defvar c-mode-hook nil) + (defvar c-mode-hook) (add-hook 'c-mode-hook 'viper-mode) - (defvar c++-mode-hook nil) + (defvar c++-mode-hook) (add-hook 'c++-mode-hook 'viper-mode) - (defvar lisp-interaction-mode-hook nil) + (defvar lisp-interaction-mode-hook) (add-hook 'lisp-interaction-mode-hook 'viper-mode) + + (defvar fortran-mode-hook) + (add-hook 'fortran-mode-hook 'vip-mode) - (defvar text-mode-hook nil) + (defvar text-mode-hook) (add-hook 'text-mode-hook 'viper-mode) (add-hook 'completion-list-mode-hook 'viper-mode) @@ -5421,7 +5447,7 @@ Mail anyway (y or n)? ") (add-hook 'perl-mode-hook 'viper-mode) (add-hook 'tcl-mode-hook 'viper-mode) - (defvar emerge-startup-hook nil) + (defvar emerge-startup-hook) (add-hook 'emerge-startup-hook 'vip-change-state-to-emacs) ;; Run vip-change-state-to-vi after quitting emerge. (vip-eval-after-load @@ -5455,14 +5481,14 @@ Mail anyway (y or n)? ") (vip-change-state-to-vi))) ;; Emacs shell, ange-ftp, and comint-based modes - (defvar comint-mode-hook nil) + (defvar comint-mode-hook) (add-hook 'comint-mode-hook 'vip-change-state-to-insert) (add-hook 'comint-mode-hook 'vip-comint-mode-hook) ;; Shell scripts - (defvar sh-mode-hook nil) + (defvar sh-mode-hook) (add-hook 'sh-mode-hook 'viper-mode) - (defvar ksh-mode-hook nil) + (defvar ksh-mode-hook) (add-hook 'ksh-mode-hook 'viper-mode) ;; Dired @@ -5471,22 +5497,18 @@ Mail anyway (y or n)? ") (if vip-emacs-p (progn - (defvar view-mode-hook nil - "View hook. Run after view mode.") + (defvar view-mode-hook) (add-hook 'view-mode-hook 'vip-change-state-to-emacs)) (defadvice view-minor-mode (after vip-view-ad activate) "Switch to Emacs state in View mode." (vip-change-state-to-emacs)) - (defvar view-hook nil - "View hook. Run after view mode.") + (defvar view-hook) (add-hook 'view-hook 'vip-change-state-to-emacs)) ;; For VM users. ;; Put summary and other VM buffers in Emacs state. - (defvar vm-mode-hooks nil - "This hook is run after vm is started.") - (defvar vm-summary-mode-hooks nil - "This hook is run after vm switches to summary mode.") + (defvar vm-mode-hooks) + (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) |
