mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-23 07:19:15 +00:00
(vip-info-file-name): variable removed.
(vip-envelop-ESC-key,vip-start-replace,vip-finish-R-mode,vip-start-R-mode, vip-insert-state-pre-command-sentinel,vip-R-state-post-command-sentinel, vip-replace-char): functions modified.
This commit is contained in:
parent
c8787b81ef
commit
27571f905d
@ -3,10 +3,12 @@
|
||||
;; and a venomous VI PERil.
|
||||
;; Viper Is also a Package for Emacs Rebels.
|
||||
;;
|
||||
;; Version: 2.76
|
||||
;; Keywords: emulations
|
||||
;; Author: Michael Kifer <kifer@cs.sunysb.edu>
|
||||
|
||||
(defconst viper-version "2.80 of July 7, 1995"
|
||||
"The current version of Viper")
|
||||
|
||||
;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
@ -25,9 +27,6 @@
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to
|
||||
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
(defconst viper-version "2.76 of June 9, 1995"
|
||||
"The current version of Viper")
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Viper is a full-featured Vi emulator for Emacs 19. It emulates and
|
||||
@ -102,28 +101,8 @@
|
||||
;;; Acknowledgements:
|
||||
;; -----------------
|
||||
;; Bug reports and ideas contributed by the following users
|
||||
;; have helped improve Viper and the various versions of VIP:
|
||||
;;
|
||||
;; jjm@hplb.hpl.hp.com (Jean-Jacques Moreau), jl@cse.ogi.edu (John
|
||||
;; Launchbury), rxga@ulysses.att.com, jamesm@bga.com (D.J. Miller II),
|
||||
;; ascott@fws214.intel.com (Andy Scott), toma@convex.convex.com,
|
||||
;; gvr@cs.brown.edu, dave@hellgate.utah.edu, cook@biostat.wisc.edu
|
||||
;; (Tom Cook), lindstro@biostat.wisc.edu (Mary Lindstrom),
|
||||
;; edmonds@edmonds.home.cs.ubc.ca (Brian Edmonds), mveiga@dit.upm.es
|
||||
;; (Marcelino Veiga Tuimil), dwight@toolucky.llnl.gov (Dwight Shih),
|
||||
;; phil_brooks@MENTORG.COM (Phil Brooks), kin@isi.com (Kin Cho),
|
||||
;; ahg@panix.com (Al Gelders), dwallach@cs.princeton.edu (Dan Wallach),
|
||||
;; hpz@ibmhpz.aug.ipp-garching.mpg.de (Hans-Peter Zehrfeld),
|
||||
;; simonb@prl.philips.co.uk (Simon Blanchard), Mark.Bordas@East.Sun.COM
|
||||
;; (Mark Bordas), gviswana@cs.wisc.edu (Guhan Viswanathan),
|
||||
;; meyering@comco.com (Jim Meyering), pfister@cs.sunysb.edu (Hanspeter
|
||||
;; Pfister)
|
||||
;;
|
||||
;; Special thanks to Marcelino Veiga Tuimil <mveiga@dit.upm.es> for
|
||||
;; suggesting a way of intercepting ESC sequences on dumb terminals. Due to
|
||||
;; this, Viper can now handle arrow keys, F-keys, etc., in Xterm windows
|
||||
;; and on dumb terminals. This also made it possible to implement Vi-style
|
||||
;; timeout macros.
|
||||
;; have helped improve Viper and the various versions of VIP.
|
||||
;; See the on-line manual for a complete list of contributors.
|
||||
;;
|
||||
;;
|
||||
;;; Notes:
|
||||
@ -468,7 +447,8 @@ it better fits your working style.")
|
||||
|
||||
;; Replace mode and changing text
|
||||
|
||||
;; Viper's own after/before change functions, which get add-hook'ed to Emacs'
|
||||
;; Viper's own after/before change functions, which get vip-add-hook'ed to
|
||||
;; Emacs's
|
||||
(vip-deflocalvar vip-after-change-functions nil "")
|
||||
(vip-deflocalvar vip-before-change-functions nil "")
|
||||
(vip-deflocalvar vip-post-command-hooks nil "")
|
||||
@ -832,9 +812,6 @@ These buffers can be cycled through via :R and :P commands.")
|
||||
"Viper customisation file.
|
||||
This variable must be set _before_ loading Viper.")
|
||||
|
||||
(defvar vip-info-file-name "viper"
|
||||
"The name prefix for Viper Info files.")
|
||||
|
||||
(defvar vip-spell-function 'ispell-region
|
||||
"Spell function used by #s<move> command to spell.")
|
||||
|
||||
@ -967,9 +944,9 @@ shell-mode, this is undesirable and must be set to nil. See vip-set-hooks.")
|
||||
(remove-hook 'pre-command-hook 'vip-pre-command-sentinel)
|
||||
(add-hook 'pre-command-hook 'vip-pre-command-sentinel t)
|
||||
;; These hooks will be added back if switching to insert/replace mode
|
||||
(remove-hook 'vip-post-command-hooks
|
||||
(vip-remove-hook 'vip-post-command-hooks
|
||||
'vip-insert-state-post-command-sentinel)
|
||||
(remove-hook 'vip-pre-command-hooks
|
||||
(vip-remove-hook 'vip-pre-command-hooks
|
||||
'vip-insert-state-pre-command-sentinel)
|
||||
(cond ((eq new-state 'vi-state)
|
||||
(cond ((member vip-current-state '(insert-state replace-state))
|
||||
@ -1010,15 +987,14 @@ shell-mode, this is undesirable and must be set to nil. See vip-set-hooks.")
|
||||
(if (memq vip-current-state '(emacs-state vi-state))
|
||||
(vip-move-marker-locally 'vip-insert-point (point)))
|
||||
(vip-move-marker-locally 'vip-last-posn-while-in-insert-state (point))
|
||||
(add-hook 'vip-post-command-hooks
|
||||
(vip-add-hook 'vip-post-command-hooks
|
||||
'vip-insert-state-post-command-sentinel t)
|
||||
(add-hook 'vip-pre-command-hooks
|
||||
'vip-insert-state-pre-command-sentinel t)
|
||||
)
|
||||
(vip-add-hook 'vip-pre-command-hooks
|
||||
'vip-insert-state-pre-command-sentinel t))
|
||||
) ; outermost cond
|
||||
|
||||
;; Nothing needs to be done to switch to emacs mode! Just set some
|
||||
;; variables, which is done in vip-change-state-to-emacs!
|
||||
;; variables, which is already done in vip-change-state-to-emacs!
|
||||
|
||||
(setq vip-current-state new-state)
|
||||
(vip-normalize-minor-mode-map-alist)
|
||||
@ -1064,7 +1040,7 @@ shell-mode, this is undesirable and must be set to nil. See vip-set-hooks.")
|
||||
;; Normalizes minor-mode-map-alist by putting Viper keymaps first.
|
||||
;; This ensures that Viper bindings are in effect, regardless of which minor
|
||||
;; modes were turned on by the user or by other packages.
|
||||
(defun vip-normalize-minor-mode-map-alist ()
|
||||
(defun vip-normalize-minor-mode-map-alist ()
|
||||
(setq minor-mode-map-alist
|
||||
(vip-append-filter-alist
|
||||
(list
|
||||
@ -1313,7 +1289,10 @@ This startup message appears whenever you load Viper, unless you type `y' now."
|
||||
(if (and auto-fill-function (> (current-column) fill-column))
|
||||
(funcall auto-fill-function))
|
||||
;; don't leave whitespace lines around
|
||||
(if (and (memq last-command '(vip-autoindent vip-open-line vip-Open-line))
|
||||
(if (and (memq last-command
|
||||
'(vip-autoindent
|
||||
vip-open-line vip-Open-line
|
||||
vip-replace-state-exit-cmd))
|
||||
(vip-over-whitespace-line))
|
||||
(indent-to-left-margin))
|
||||
(vip-add-newline-at-eob-if-necessary)
|
||||
@ -1527,27 +1506,14 @@ behaves as in Emacs, any number of multiple escapes is allowed."
|
||||
(progn
|
||||
(if (vip-fast-keysequence-p)
|
||||
(progn
|
||||
(let ((vip-vi-intercept-minor-mode nil)
|
||||
(vip-insert-intercept-minor-mode nil)
|
||||
(vip-emacs-intercept-minor-mode nil)
|
||||
(vip-vi-state-modifier-minor-mode nil)
|
||||
(vip-vi-global-user-minor-mode nil)
|
||||
(vip-vi-local-user-minor-mode nil)
|
||||
(vip-replace-minor-mode nil) ; actually unnecessary
|
||||
(vip-insert-state-modifier-minor-mode nil)
|
||||
(vip-insert-global-user-minor-mode nil)
|
||||
(vip-insert-local-user-minor-mode nil)
|
||||
(vip-emacs-state-modifier-minor-mode nil)
|
||||
(vip-emacs-global-user-minor-mode nil)
|
||||
(vip-emacs-local-user-minor-mode nil)
|
||||
)
|
||||
(let (minor-mode-map-alist)
|
||||
(vip-set-unread-command-events event)
|
||||
(setq keyseq
|
||||
(funcall
|
||||
(ad-get-orig-definition 'read-key-sequence) nil))
|
||||
) ; let
|
||||
;; If keyseq translates into something that still has ESC
|
||||
;; in the beginning, separate ESC from the rest of the seq.
|
||||
;; at the beginning, separate ESC from the rest of the seq.
|
||||
;; In XEmacs we check for events that are keypress meta-key
|
||||
;; and convert them into [escape key]
|
||||
;;
|
||||
@ -1561,7 +1527,7 @@ behaves as in Emacs, any number of multiple escapes is allowed."
|
||||
;; which would translate the escape-sequence generated by
|
||||
;; f11 in an xterm window into the symbolic key f11.
|
||||
;;
|
||||
;; If first-key is not an ESC event, we make it into the
|
||||
;; If `first-key' is not an ESC event, we make it into the
|
||||
;; last-command-event in order to pretend that this key was
|
||||
;; pressed. This is needed to allow arrow keys to be bound to
|
||||
;; macros. Otherwise, vip-exec-mapped-kbd-macro will think that
|
||||
@ -2400,7 +2366,7 @@ Undo previous insertion and inserts new."
|
||||
|
||||
;; Make sure the minibufer overlay is kept up-to-date. In XEmacs also
|
||||
;; guards against the possibility of detaching this overlay.
|
||||
(add-hook 'vip-post-command-hooks 'vip-move-minibuffer-overlay)
|
||||
(vip-add-hook 'vip-post-command-hooks 'vip-move-minibuffer-overlay)
|
||||
))
|
||||
|
||||
;; Interpret last event in the local map
|
||||
@ -2706,15 +2672,17 @@ Undo previous insertion and inserts new."
|
||||
vip-sitting-in-replace t
|
||||
vip-replace-chars-to-delete 0
|
||||
vip-replace-chars-deleted 0)
|
||||
(add-hook 'vip-after-change-functions 'vip-replace-mode-spy-after t)
|
||||
(add-hook 'vip-before-change-functions 'vip-replace-mode-spy-before t)
|
||||
(vip-add-hook 'vip-after-change-functions 'vip-replace-mode-spy-after t)
|
||||
(vip-add-hook 'vip-before-change-functions 'vip-replace-mode-spy-before t)
|
||||
;; this will get added repeatedly, but no harm
|
||||
(add-hook 'after-change-functions 'vip-after-change-sentinel t)
|
||||
(add-hook 'before-change-functions 'vip-before-change-sentinel t)
|
||||
(vip-move-marker-locally 'vip-last-posn-in-replace-region
|
||||
(vip-replace-start))
|
||||
(add-hook 'vip-post-command-hooks 'vip-replace-state-post-command-sentinel t)
|
||||
(add-hook 'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel t)
|
||||
(vip-add-hook
|
||||
'vip-post-command-hooks 'vip-replace-state-post-command-sentinel t)
|
||||
(vip-add-hook
|
||||
'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel t)
|
||||
)
|
||||
|
||||
;; Runs vip-after-change-functions inside after-change-functions
|
||||
@ -2731,15 +2699,15 @@ Undo previous insertion and inserts new."
|
||||
(funcall (car list) beg end)
|
||||
(setq list (cdr list)))))
|
||||
|
||||
(defun vip-post-command-sentinel ()
|
||||
(defsubst vip-post-command-sentinel ()
|
||||
(run-hooks 'vip-post-command-hooks))
|
||||
|
||||
(defun vip-pre-command-sentinel ()
|
||||
(defsubst vip-pre-command-sentinel ()
|
||||
(run-hooks 'vip-pre-command-hooks))
|
||||
|
||||
;; Needed so that Viper will be able to figure the last inserted
|
||||
;; chunk of text with reasonable accuracy.
|
||||
(defun vip-insert-state-post-command-sentinel ()
|
||||
(defsubst vip-insert-state-post-command-sentinel ()
|
||||
(if (and (memq vip-current-state '(insert-state replace-state))
|
||||
vip-insert-point
|
||||
(>= (point) vip-insert-point))
|
||||
@ -2750,13 +2718,13 @@ Undo previous insertion and inserts new."
|
||||
(move-marker vip-insert-point vip-pre-command-point))
|
||||
)
|
||||
|
||||
(defun vip-insert-state-pre-command-sentinel ()
|
||||
(defsubst vip-insert-state-pre-command-sentinel ()
|
||||
(if (and (eq this-command 'dabbrev-expand)
|
||||
(markerp vip-insert-point)
|
||||
(marker-position vip-insert-point))
|
||||
(setq vip-pre-command-point (marker-position vip-insert-point))))
|
||||
|
||||
(defun vip-R-state-post-command-sentinel ()
|
||||
(defsubst vip-R-state-post-command-sentinel ()
|
||||
;; Restoring cursor color is needed despite
|
||||
;; vip-replace-state-pre-command-sentinel: When you jump to another buffer in
|
||||
;; another frame, the pre-command hook won't change cursor color to default
|
||||
@ -2771,7 +2739,7 @@ Undo previous insertion and inserts new."
|
||||
|
||||
;; to speed up, don't change cursor color before self-insert
|
||||
;; and common move commands
|
||||
(defun vip-replace-state-pre-command-sentinel ()
|
||||
(defsubst vip-replace-state-pre-command-sentinel ()
|
||||
(or (memq this-command '(self-insert-command))
|
||||
(memq (vip-event-key last-command-event)
|
||||
'(up down left right (meta f) (meta b)
|
||||
@ -2784,8 +2752,13 @@ Undo previous insertion and inserts new."
|
||||
;; in another frame, the pre-command hook won't change cursor color to
|
||||
;; default in that other frame. So, if the second frame cursor was red and
|
||||
;; we set the point outside the replacement region, then the cursor color
|
||||
;; will remain red. Restoring the default, below, prevents this.
|
||||
(vip-restore-cursor-color)
|
||||
;; will remain red. Restoring the default, below, fixes this problem.
|
||||
;;
|
||||
;; We optimize for self-insert-command's here, since they either don't change
|
||||
;; cursor color or, if they terminate replace mode, the color will be changed
|
||||
;; in vip-finish-change
|
||||
(or (memq this-command '(self-insert-command))
|
||||
(vip-restore-cursor-color))
|
||||
(cond
|
||||
((eq vip-current-state 'replace-state)
|
||||
;; delete characters to compensate for inserted chars.
|
||||
@ -2896,11 +2869,12 @@ Undo previous insertion and inserts new."
|
||||
;; Delete stuff between posn and the end of vip-replace-overlay-marker, if
|
||||
;; posn is within the overlay.
|
||||
(defun vip-finish-change (posn)
|
||||
(remove-hook 'vip-after-change-functions 'vip-replace-mode-spy-after)
|
||||
(remove-hook 'vip-before-change-functions 'vip-replace-mode-spy-before)
|
||||
(remove-hook 'vip-post-command-hooks
|
||||
'vip-replace-state-post-command-sentinel)
|
||||
(remove-hook 'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel)
|
||||
(vip-remove-hook 'vip-after-change-functions 'vip-replace-mode-spy-after)
|
||||
(vip-remove-hook 'vip-before-change-functions 'vip-replace-mode-spy-before)
|
||||
(vip-remove-hook 'vip-post-command-hooks
|
||||
'vip-replace-state-post-command-sentinel)
|
||||
(vip-remove-hook
|
||||
'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel)
|
||||
(vip-restore-cursor-color)
|
||||
(setq vip-sitting-in-replace nil) ; just in case we'll need to know it
|
||||
(save-excursion
|
||||
@ -2928,15 +2902,18 @@ Undo previous insertion and inserts new."
|
||||
(setq kill-ring-yank-pointer kill-ring))
|
||||
|
||||
(defun vip-finish-R-mode ()
|
||||
(remove-hook 'vip-post-command-hooks 'vip-R-state-post-command-sentinel)
|
||||
(remove-hook 'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel)
|
||||
(vip-remove-hook 'vip-post-command-hooks 'vip-R-state-post-command-sentinel)
|
||||
(vip-remove-hook
|
||||
'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel)
|
||||
(vip-downgrade-to-insert))
|
||||
|
||||
(defun vip-start-R-mode ()
|
||||
;; Leave arg as 1, not t: XEmacs insists that it must be a pos number
|
||||
(overwrite-mode 1)
|
||||
(add-hook 'vip-post-command-hooks 'vip-R-state-post-command-sentinel t)
|
||||
(add-hook 'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel t)
|
||||
(vip-add-hook
|
||||
'vip-post-command-hooks 'vip-R-state-post-command-sentinel t)
|
||||
(vip-add-hook
|
||||
'vip-pre-command-hooks 'vip-replace-state-pre-command-sentinel t)
|
||||
)
|
||||
|
||||
|
||||
@ -3028,7 +3005,7 @@ These keys are ESC, RET, and LineFeed"
|
||||
(defun vip-replace-char (arg)
|
||||
"Replace the following ARG chars by the character read."
|
||||
(interactive "P")
|
||||
(if (and (eolp) (bolp)) (error "I see no character to replace here"))
|
||||
(if (and (eolp) (bolp)) (error "No character to replace here"))
|
||||
(let ((val (vip-p-val arg))
|
||||
(com (vip-getcom arg)))
|
||||
(vip-replace-char-subr (if (equal com ?r) vip-d-char (read-char)) val)
|
||||
@ -4665,7 +4642,7 @@ One can use `` and '' to temporarily jump 1 step back."
|
||||
(text-marker (get-register reg)))
|
||||
(if com (vip-move-marker-locally 'vip-com-point (point)))
|
||||
(if (not (vip-valid-marker text-marker))
|
||||
(error (format vip-EmptyTextmarker char)))
|
||||
(error (format vip-EmptyTextmarker char)))
|
||||
(if (and (vip-same-line (point) vip-last-jump)
|
||||
(= (point) vip-last-jump-ignore))
|
||||
(push-mark vip-last-jump t)
|
||||
@ -4754,7 +4731,10 @@ One can use `` and '' to temporarily jump 1 step back."
|
||||
(setq vip-current-indent col)
|
||||
(setq vip-preserve-indent nil))
|
||||
;; don't leave whitespace lines around
|
||||
(if (memq last-command '(vip-autoindent vip-open-line vip-Open-line))
|
||||
(if (memq last-command
|
||||
'(vip-autoindent
|
||||
vip-open-line vip-Open-line
|
||||
vip-replace-state-exit-cmd))
|
||||
(indent-to-left-margin))
|
||||
(newline 1)
|
||||
(if vip-auto-indent
|
||||
@ -5269,10 +5249,22 @@ Mail anyway (y or n)? ")
|
||||
((eventp arg) (list arg))
|
||||
((stringp arg) (mapcar 'character-to-event arg))
|
||||
((vectorp arg) (append arg nil)) ; turn into list
|
||||
((listp arg) arg)
|
||||
((listp arg) (vip-eventify-list-xemacs arg))
|
||||
(t (error
|
||||
"vip-set-unread-command-events: Invalid argument, %S" arg)))
|
||||
unread-command-events))))
|
||||
|
||||
;; list is assumed to be a list of events of characters
|
||||
(defun vip-eventify-list-xemacs (lis)
|
||||
(mapcar
|
||||
(function (lambda (elt)
|
||||
(cond ((numberp elt) (character-to-event elt))
|
||||
((eventp elt) elt)
|
||||
(t (error
|
||||
"vip-eventify-list-xemacs: can't convert to event, %S"
|
||||
elt)))))
|
||||
lis))
|
||||
|
||||
|
||||
|
||||
;;; Bring in the rest of the files
|
||||
@ -5370,7 +5362,7 @@ Mail anyway (y or n)? ")
|
||||
(vip-change-state-to-vi)))
|
||||
|
||||
;; passwd.el sets up its own buffer, which turns up in Vi mode,
|
||||
;; overriding the local map. Noone needs Vi mode here.
|
||||
;; thus overriding the local map. We don't need Vi mode here.
|
||||
(vip-eval-after-load
|
||||
"passwd"
|
||||
'(defadvice read-passwd-1 (before vip-passwd-ad activate)
|
||||
|
Loading…
Reference in New Issue
Block a user