Mercurial > emacs
diff lisp/emulation/viper.el @ 38514:10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
of Scott Bronson.
(ex-cmd-assoc,ex-compile,ex-cmd-one-letr): New functions.
(viper-check-sub,viper-get-ex-command,viper-execute-ex-command):
Deleted functions.
(viper-get-ex-com-subr,viper-ex,ex-mark): Changed to use the new
ex-token-list.
(viper-get-ex-address-subr): convert registers to char data type.
* viper-util.el (viper-int-to-char,viper-char-equal): new
functions.
(viper-memq-char): use viper-int-to-char.
(viper-file-checked-in-p): use vc-locking-user, if vc doesn't have
vc-locking-state.
(viper-read-key): use viper-read-key-sequence.
* viper.el (viper-major-mode-modifier-list): added
inferior-emacs-lisp-mode.
(this-major-mode-requires-vi-state): new function that uses simple
heuristics to decide if vi state is appropriate.
(set-viper-state-in-major-mode): use this-major-mode-requires-vi-state.
(viper-non-hook-settings): don't advise read-key-sequence.
(viper-read-key-sequence): new function that replaces the
previously used advice to read-key-sequence.
* viper-cmd.el (viper-test-com-defun,viper-exec-change,
viper-exec-Change,viper-execute-com,viper-insert,viper-append,
viper-Append,viper-Insert,viper-open-line,viper-Open-line,
viper-open-line-at-point,viper-substitute,viper-overwrite,
viper-replace-char-subr,viper-forward-word,viper-forward-Word):
got rid of the negative character hack.
(viper-escape-to-state,viper-replace-state-exit-cmd):
use viper-read-key-sequence.
(viper-envelop-ESC-key): no need for ad-get-orig-definition.
(viper-minibuffer-standard-hook,viper-read-string-with-history):
don't override existing minibuffer-setup-hook.
(viper-mark-point,viper-goto-mark-subr,viper-brac-function):
convert registers to char data type.
(viper-autoindent): use viper-indent-line.
* viper-keym.el: use viper-exec-key-in-emacs.
* viper.texi: Added credits, new commands, like :make.
* ediff-util.el: Copyright years.
(ediff-choose-syntax-table): New function.
(ediff-setup): Use ediff-choose-syntax-table.
(ediff-file-checked-out-p,ediff-file-checked-in-p): check if
vc-state is available.
(ediff-make-temp-file): use ediff-coding-system-for-write.
* ediff-init.el (ediff-with-syntax-table): New macro, uses
with-syntax-table.
(ediff-coding-system-for-read): from ediff-diff.el
(ediff-coding-system-for-write): new variable.
(ediff-highest-priority): fixed the bug having to do with disappearing
overlays.
(ediff-file-remote-p): use file-remote-p, if available.
(ediff-listable-file): new function.
(ediff-file-attributes): use ediff-listable-file.
* ediff-mult.el (ediff-meta-insert-file-info1): use
ediff-listable-file.
* ediff-ptch.el (ediff-prompt-for-patch-file): use
ediff-coding-system-for-read.
(ediff-patch-file-internal): use ediff-coding-system-for-write.
* ediff-diff.el (ediff-coding-system-for-read): moved to ediff-init.el.
(ediff-match-diff3-line,ediff-get-diff3-group): improved pattern.
* ediff.el: Date of last update, copyright years.
* ediff-wind (ediff-setup-control-frame): Nill->nil.
* ediff.texi: added clarifications, acknowledgements.
author | Michael Kifer <kifer@cs.stonybrook.edu> |
---|---|
date | Sat, 21 Jul 2001 05:28:24 +0000 |
parents | 7a94f1c588c4 |
children | 8dccf2552307 |
line wrap: on
line diff
--- a/lisp/emulation/viper.el Fri Jul 20 22:46:18 2001 +0000 +++ b/lisp/emulation/viper.el Sat Jul 21 05:28:24 2001 +0000 @@ -1,4 +1,4 @@ -;;; viper.el --- a full-featured Vi emulator for GNU Emacs and XEmacs, +;;; viper.el --- A full-featured Vi emulator for GNU Emacs and XEmacs, ;; a VI Plan for Emacs Rescue, ;; and a venomous VI PERil. ;; Viper Is also a Package for Emacs Rebels. @@ -8,7 +8,7 @@ ;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01 Free Software Foundation, Inc. -(defconst viper-version "3.10 of March 3, 2001" +(defconst viper-version "3.11 of July 18, 2001" "The current version of Viper") ;; This file is part of GNU Emacs. @@ -401,6 +401,7 @@ completion-list-mode diff-mode + idl-mode perl-mode cperl-mode @@ -446,6 +447,7 @@ (defcustom viper-insert-state-mode-list '(internal-ange-ftp-mode comint-mode + inferior-emacs-lisp-mode eshell-mode shell-mode) "*A list of major modes that should come up in Vi Insert state." @@ -462,11 +464,14 @@ (nth 0 triple) (nth 1 triple) (eval (nth 2 triple)))) viper-major-mode-modifier-list)) +;; We change standard bindings in some major mode, making them slightly +;; different than in "normal" vi/insert/emacs states (defcustom viper-major-mode-modifier-list '((help-mode emacs-state viper-slash-and-colon-map) (comint-mode insert-state viper-comint-mode-modifier-map) (comint-mode vi-state viper-comint-mode-modifier-map) (shell-mode insert-state viper-comint-mode-modifier-map) + (inferior-emacs-lisp-mode insert-state viper-comint-mode-modifier-map) (shell-mode vi-state viper-comint-mode-modifier-map) (ange-ftp-shell-mode insert-state viper-comint-mode-modifier-map) (ange-ftp-shell-mode vi-state viper-comint-mode-modifier-map) @@ -595,11 +600,23 @@ (if viper-xemacs-p (make-variable-buffer-local 'bar-cursor)) + (if (eq major-mode 'viper-mode) + (setq major-mode 'fundamental-mode)) (or (memq major-mode viper-emacs-state-mode-list) ; don't switch to Vi (memq major-mode viper-insert-state-mode-list) ; don't switch (viper-change-state-to-vi))))) + +;; Apply a little heuristic to invoke vi state on major-modes +;; that are not listed in viper-vi-state-mode-list +(defun this-major-mode-requires-vi-state (mode) + (cond ((memq mode viper-vi-state-mode-list) t) + ((memq mode viper-emacs-state-mode-list) nil) + ((memq mode viper-insert-state-mode-list) nil) + (t (and (eq (key-binding "a") 'self-insert-command) + (eq (key-binding " ") 'self-insert-command))))) + ;; This hook designed to enable Vi-style editing in comint-based modes." (defun viper-comint-mode-hook () @@ -760,7 +777,7 @@ (lambda (buf) (if (viper-buffer-live-p buf) (with-current-buffer buf - (cond ((and (memq major-mode viper-vi-state-mode-list) + (cond ((and (this-major-mode-requires-vi-state major-mode) (eq viper-current-state 'emacs-state)) (viper-mode)) ((memq major-mode viper-emacs-state-mode-list) @@ -798,6 +815,8 @@ ;; However, this has the effect that if the user didn't specify the ;; default mode, new buffers that fall back on the default will come up ;; 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-major-mode 'fundamental-mode) (setq default-major-mode 'viper-mode)) @@ -956,36 +975,16 @@ (setq global-mode-string (append '("" viper-mode-string) (cdr global-mode-string)))) - (defadvice read-key-sequence (around viper-read-keyseq-ad activate) - "Harness to work for Viper. This advice is harmless---don't worry!" - (let (inhibit-quit event keyseq) - (setq keyseq ad-do-it) - (setq event (if viper-xemacs-p - (elt keyseq 0) ; XEmacs returns vector of events - (elt (listify-key-sequence keyseq) 0))) - (if (viper-ESC-event-p event) - (let (unread-command-events) - (viper-set-unread-command-events keyseq) - (if (viper-fast-keysequence-p) - (let ((viper-vi-global-user-minor-mode nil) - (viper-vi-local-user-minor-mode nil) - (viper-replace-minor-mode nil) ; actually unnecessary - (viper-insert-global-user-minor-mode nil) - (viper-insert-local-user-minor-mode nil)) - (setq keyseq ad-do-it)) - (setq keyseq ad-do-it)))) - keyseq)) - (defadvice describe-key (before viper-read-keyseq-ad protect activate) - "Force to read key via `read-key-sequence'." + "Force to read key via `viper-read-key-sequence'." (interactive (list (viper-events-to-keys - (read-key-sequence "Describe key: "))))) + (viper-read-key-sequence "Describe key: "))))) (defadvice describe-key-briefly (before viper-read-keyseq-ad protect activate) - "Force to read key via `read-key-sequence'." + "Force to read key via `viper-read-key-sequence'." (interactive (list (viper-events-to-keys - (read-key-sequence "Describe key briefly: "))))) + (viper-read-key-sequence "Describe key briefly: "))))) (defadvice find-file (before viper-add-suffix-advice activate) @@ -1056,6 +1055,27 @@ ) ; end viper-non-hook-settings +;; Viperized read-key-sequence +(defun viper-read-key-sequence (prompt &optional continue-echo) + (let (inhibit-quit event keyseq) + (setq keyseq (read-key-sequence prompt continue-echo)) + (setq event (if viper-xemacs-p + (elt keyseq 0) ; XEmacs returns vector of events + (elt (listify-key-sequence keyseq) 0))) + (if (viper-ESC-event-p event) + (let (unread-command-events) + (viper-set-unread-command-events keyseq) + (if (viper-fast-keysequence-p) + (let ((viper-vi-global-user-minor-mode nil) + (viper-vi-local-user-minor-mode nil) + (viper-replace-minor-mode nil) ; actually unnecessary + (viper-insert-global-user-minor-mode nil) + (viper-insert-local-user-minor-mode nil)) + (setq keyseq (read-key-sequence prompt continue-echo))) + (setq keyseq (read-key-sequence prompt continue-echo))))) + keyseq)) + + ;; Ask only if this-command/last-command are nil, i.e., when loading (cond ((and (eq viper-mode 'ask) (null this-command) (null last-command)) @@ -1259,7 +1279,7 @@ (setq-default minor-mode-map-alist minor-mode-map-alist) )) -(if (and viper-mode (memq major-mode viper-vi-state-mode-list)) +(if (and viper-mode (this-major-mode-requires-vi-state major-mode)) (viper-mode)) (if viper-mode