mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-03 08:30:09 +00:00
2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
* viper-cmd.el (viper-preserve-cursor-color): new test that avoids rewrawing the screen when changing cursor color. (viper-insert-state-pre-command-sentinel, viper-replace-state-pre-command-sentinel, viper-replace-state-post-command-sentinel): use viper-preserve-cursor-color. Many functions changed to use viper= instead of = when comparing characters. * viper-util.el (viper-memq-char,viper=): new functions for working with characters. (viper-change-cursor-color): fixed buglet. Many functions changed to use viper= instead of = when comparing characters. * viper.el (viper-insert-state-mode-list): added eshell. * ediff-init.el (ediff-before-setup-hook): new hook. Several typos fixed in various docstrings. * ediff-merg.el (ediff-show-clashes-only): docstring typo fixed. * ediff-nult.el (ediff-before-session-group-setup-hooks): new hook. (ediff-show-meta-buffer): run ediff-before-session-group-setup-hooks. * ediff-util.el (ediff-setup): run ediff-before-setup-hook. (ediff-other-buffer): use selected buffers if in Buffer-menu buffer. (ediff-get-selected-buffers): new function. * ediff-vers.el (ediff-vc-internal,ediff-rcs-internal, ediff-vc-merge-internal,ediff-rcs-merge-internal): use save-window-excursion. * ediff-wind.el (ediff-skip-unsuitable-frames): more robust termination check in while loop. * ediff.el (ediff-get-default-file-name): better defaults when in dired buffer. (ediff-files,ediff-merge-files,ediff-files3, ediff-merge-files-with-ancestor): use ediff-get-default-file-name.
This commit is contained in:
parent
4f490d995d
commit
657f9cb8b7
@ -1,3 +1,39 @@
|
||||
2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
|
||||
|
||||
* viper-cmd.el (viper-preserve-cursor-color): new test that avoids
|
||||
rewrawing the screen when changing cursor color.
|
||||
(viper-insert-state-pre-command-sentinel,
|
||||
viper-replace-state-pre-command-sentinel,
|
||||
viper-replace-state-post-command-sentinel): use
|
||||
viper-preserve-cursor-color.
|
||||
Many functions changed to use viper= instead of = when comparing
|
||||
characters.
|
||||
* viper-util.el (viper-memq-char,viper=): new functions for
|
||||
working with characters.
|
||||
(viper-change-cursor-color): fixed buglet.
|
||||
Many functions changed to use viper= instead of = when comparing
|
||||
characters.
|
||||
* viper.el (viper-insert-state-mode-list): added eshell.
|
||||
|
||||
* ediff-init.el (ediff-before-setup-hook): new hook.
|
||||
Several typos fixed in various docstrings.
|
||||
* ediff-merg.el (ediff-show-clashes-only): docstring typo fixed.
|
||||
* ediff-nult.el (ediff-before-session-group-setup-hooks): new
|
||||
hook.
|
||||
(ediff-show-meta-buffer): run ediff-before-session-group-setup-hooks.
|
||||
* ediff-util.el (ediff-setup): run ediff-before-setup-hook.
|
||||
(ediff-other-buffer): use selected buffers if in Buffer-menu buffer.
|
||||
(ediff-get-selected-buffers): new function.
|
||||
* ediff-vers.el (ediff-vc-internal,ediff-rcs-internal,
|
||||
ediff-vc-merge-internal,ediff-rcs-merge-internal): use
|
||||
save-window-excursion.
|
||||
* ediff-wind.el (ediff-skip-unsuitable-frames): more robust
|
||||
termination check in while loop.
|
||||
* ediff.el (ediff-get-default-file-name): better defaults when in
|
||||
dired buffer.
|
||||
(ediff-files,ediff-merge-files,ediff-files3,
|
||||
ediff-merge-files-with-ancestor): use ediff-get-default-file-name.
|
||||
|
||||
2000-10-28 Dave Love <fx@gnu.org>
|
||||
|
||||
* info.el (Info-fontify-node): Add help-echo for menu items.
|
||||
|
@ -376,10 +376,17 @@ that Ediff doesn't know about.")
|
||||
|
||||
;; Hook variables
|
||||
|
||||
(defcustom ediff-before-setup-hook nil
|
||||
"*Hooks to run before Ediff begins to set up windows and buffers.
|
||||
This hook can be used to save the previous window config, which can be restored
|
||||
on ediff-quit or ediff-suspend."
|
||||
:type 'hook
|
||||
:group 'ediff-hook)
|
||||
(defcustom ediff-before-setup-windows-hook nil
|
||||
"*Hooks to run before Ediff sets its window configuration.
|
||||
This can be used to save the previous window config, which can be restored
|
||||
on ediff-quit or ediff-suspend."
|
||||
This hook is called every time when Ediff arranges its windows.
|
||||
This happens each time Ediff detects that the windows were messed up by the
|
||||
user."
|
||||
:type 'hook
|
||||
:group 'ediff-hook)
|
||||
(defcustom ediff-after-setup-windows-hook nil
|
||||
@ -399,7 +406,7 @@ Can be used to move the frame where it is desired."
|
||||
:type 'hook
|
||||
:group 'ediff-hook)
|
||||
(defcustom ediff-startup-hook nil
|
||||
"*Hooks to run in the control buffer after Ediff has been set up."
|
||||
"*Hooks to run in the control buffer after Ediff has been set up and is ready for the job."
|
||||
:type 'hook
|
||||
:group 'ediff-hook)
|
||||
(defcustom ediff-select-hook nil
|
||||
@ -777,14 +784,14 @@ appropriate symbol: `rcs', `pcl-cvs', or `generic-sc' if you so desire."
|
||||
'display-pixel-height
|
||||
'x-display-pixel-height)))))
|
||||
|
||||
;; A-list of current-diff-overlay symbols asssociated with buf types
|
||||
;; A-list of current-diff-overlay symbols associated with buf types
|
||||
(defconst ediff-current-diff-overlay-alist
|
||||
'((A . ediff-current-diff-overlay-A)
|
||||
(B . ediff-current-diff-overlay-B)
|
||||
(C . ediff-current-diff-overlay-C)
|
||||
(Ancestor . ediff-current-diff-overlay-Ancestor)))
|
||||
|
||||
;; A-list of current-diff-face-* symbols asssociated with buf types
|
||||
;; A-list of current-diff-face-* symbols associated with buf types
|
||||
(defconst ediff-current-diff-face-alist
|
||||
'((A . ediff-current-diff-face-A)
|
||||
(B . ediff-current-diff-face-B)
|
||||
|
@ -80,7 +80,7 @@ STRING4
|
||||
(defcustom ediff-show-clashes-only nil
|
||||
"*If t, show only those diff regions where both buffers disagree with the ancestor.
|
||||
This means that regions that have status prefer-A or prefer-B will be
|
||||
skiped over. Nil means show all regions."
|
||||
skipped over. Nil means show all regions."
|
||||
:type 'boolean
|
||||
:group 'ediff-merge
|
||||
)
|
||||
|
@ -187,7 +187,15 @@ This can be toggled with `ediff-toggle-filename-truncation'."
|
||||
"*Hooks run just after the registry control panel is set up."
|
||||
:type 'hook
|
||||
:group 'ediff-mult)
|
||||
(defcustom ediff-session-group-setup-hook nil
|
||||
|
||||
(defcustom ediff-before-session-group-setup-hooks nil
|
||||
"*Hooks to run before Ediff arranges the window for group-level operations.
|
||||
It is used by commands such as ediff-directories.
|
||||
This hook can be used to save the previous window config, which can be restored
|
||||
on ediff-quit, ediff-suspend, or ediff-quit-session-group-hook."
|
||||
:type 'hook
|
||||
:group 'ediff-hook)
|
||||
(defcustom ediff-after-session-group-setup-hook nil
|
||||
"*Hooks run just after a meta-buffer controlling a session group, such as
|
||||
ediff-directories, is run."
|
||||
:type 'hook
|
||||
@ -706,7 +714,7 @@ behavior."
|
||||
|
||||
(if (eq ediff-metajob-name 'ediff-registry)
|
||||
(run-hooks 'ediff-registry-setup-hook)
|
||||
(run-hooks 'ediff-session-group-setup-hook))
|
||||
(run-hooks 'ediff-after-session-group-setup-hook))
|
||||
) ; eval in meta-buffer
|
||||
meta-buffer))
|
||||
|
||||
@ -1719,6 +1727,7 @@ all marked sessions must be active."
|
||||
(defun ediff-show-meta-buffer (&optional meta-buf session-number)
|
||||
"Show the session group buffer."
|
||||
(interactive)
|
||||
(run-hooks 'ediff-before-directory-setup-hooks)
|
||||
(let (wind frame silent)
|
||||
(if meta-buf (setq silent t))
|
||||
|
||||
|
@ -254,6 +254,7 @@ to invocation.")
|
||||
(defun ediff-setup (buffer-A file-A buffer-B file-B buffer-C file-C
|
||||
startup-hooks setup-parameters
|
||||
&optional merge-buffer-file)
|
||||
(run-hooks 'ediff-before-setup-hook)
|
||||
;; ediff-convert-standard-filename puts file names in the form appropriate
|
||||
;; for the OS at hand.
|
||||
(setq file-A (ediff-convert-standard-filename (expand-file-name file-A)))
|
||||
@ -955,7 +956,7 @@ On a dumb terminal, switches between ASCII highlighting and no highlighting."
|
||||
|
||||
(defun ediff-make-or-kill-fine-diffs (arg)
|
||||
"Compute fine diffs. With negative prefix arg, kill fine diffs.
|
||||
In both cases, operates on the currrent difference region."
|
||||
In both cases, operates on the current difference region."
|
||||
(interactive "P")
|
||||
(ediff-barf-if-not-control-buffer)
|
||||
(cond ((eq arg '-)
|
||||
@ -3459,7 +3460,11 @@ Ediff Control Panel to restore highlighting."
|
||||
;; EXCL-BUFF-LIST is an exclusion list.
|
||||
(defun ediff-other-buffer (excl-buff-lst)
|
||||
(or (listp excl-buff-lst) (setq excl-buff-lst (list excl-buff-lst)))
|
||||
(let* ((all-buffers (buffer-list))
|
||||
(let* ((all-buffers (nconc (ediff-get-selected-buffers) (buffer-list)))
|
||||
;; we compute this the second time because we need to do memq on it
|
||||
;; later, and nconc above will break it. Either this or use slow
|
||||
;; append instead of nconc
|
||||
(selected-buffers (ediff-get-selected-buffers))
|
||||
(prefered-buffer (car all-buffers))
|
||||
visible-dired-buffers
|
||||
(excl-buff-name-list
|
||||
@ -3488,33 +3493,34 @@ Ediff Control Panel to restore highlighting."
|
||||
(mapcar
|
||||
(lambda (x)
|
||||
(cond ((member (buffer-name x) excl-buff-name-list) nil)
|
||||
((not (ediff-get-visible-buffer-window x)) nil)
|
||||
((eq x prefered-buffer) x)
|
||||
;; if prev selected buffer is dired, look only at
|
||||
;; dired.
|
||||
((eq use-dired-major-mode 'yes)
|
||||
(if (eq (ediff-with-current-buffer x major-mode)
|
||||
'dired-mode)
|
||||
x nil))
|
||||
((eq (ediff-with-current-buffer x major-mode)
|
||||
'dired-mode)
|
||||
(if (null use-dired-major-mode)
|
||||
;; don't know if we must enforce dired.
|
||||
;; Remember this buffer in case
|
||||
;; dired buffs are the only ones visible.
|
||||
(setq visible-dired-buffers
|
||||
(cons x visible-dired-buffers)))
|
||||
;; skip, if dired is not forced
|
||||
nil)
|
||||
((memq (ediff-with-current-buffer x major-mode)
|
||||
'(rmail-mode
|
||||
vm-mode
|
||||
gnus-article-mode
|
||||
mh-show-mode))
|
||||
x)
|
||||
((string-match "^[ *]" (buffer-name x)) nil)
|
||||
((string= "*scratch*" (buffer-name x)) nil)
|
||||
(t x)))
|
||||
((memq x selected-buffers) x)
|
||||
((not (ediff-get-visible-buffer-window x)) nil)
|
||||
((eq x prefered-buffer) x)
|
||||
;; if prev selected buffer is dired, look only at
|
||||
;; dired.
|
||||
((eq use-dired-major-mode 'yes)
|
||||
(if (eq (ediff-with-current-buffer x major-mode)
|
||||
'dired-mode)
|
||||
x nil))
|
||||
((eq (ediff-with-current-buffer x major-mode)
|
||||
'dired-mode)
|
||||
(if (null use-dired-major-mode)
|
||||
;; don't know if we must enforce dired.
|
||||
;; Remember this buffer in case
|
||||
;; dired buffs are the only ones visible.
|
||||
(setq visible-dired-buffers
|
||||
(cons x visible-dired-buffers)))
|
||||
;; skip, if dired is not forced
|
||||
nil)
|
||||
((memq (ediff-with-current-buffer x major-mode)
|
||||
'(rmail-mode
|
||||
vm-mode
|
||||
gnus-article-mode
|
||||
mh-show-mode))
|
||||
x)
|
||||
((string-match "^[ *]" (buffer-name x)) nil)
|
||||
((string= "*scratch*" (buffer-name x)) nil)
|
||||
(t x)))
|
||||
all-buffers))
|
||||
(clean-significant-buffers (delq nil significant-buffers))
|
||||
less-significant-buffers)
|
||||
@ -3547,6 +3553,23 @@ Ediff Control Panel to restore highlighting."
|
||||
(t "*scratch*"))
|
||||
))
|
||||
|
||||
|
||||
;; If current buffer is a Buffer-menu buffer, then take the selected buffers
|
||||
;; and append the buffer at the cursor to the end.
|
||||
;; This list would be the preferred list.
|
||||
(defun ediff-get-selected-buffers ()
|
||||
(if (eq major-mode 'Buffer-menu-mode)
|
||||
(let ((lis (condition-case nil
|
||||
(list (Buffer-menu-buffer t))
|
||||
(error))
|
||||
))
|
||||
(save-excursion
|
||||
(goto-char (point-max))
|
||||
(while (search-backward "\n>" nil t)
|
||||
(forward-char 1)
|
||||
(setq lis (cons (Buffer-menu-buffer t) lis)))
|
||||
lis))
|
||||
))
|
||||
|
||||
;; Construct a unique buffer name.
|
||||
;; The first one tried is prefixsuffix, then prefix<2>suffix,
|
||||
|
@ -47,20 +47,21 @@
|
||||
;; If the current buffer is named `F', the version is named `F.~REV~'.
|
||||
;; If `F.~REV~' already exists, it is used instead of being re-created.
|
||||
(let (file1 file2 rev1buf rev2buf)
|
||||
(save-excursion
|
||||
(vc-version-other-window rev1)
|
||||
(setq rev1buf (current-buffer)
|
||||
file1 (buffer-file-name)))
|
||||
(save-excursion
|
||||
(or (string= rev2 "") ; use current buffer
|
||||
(vc-version-other-window rev2))
|
||||
(setq rev2buf (current-buffer)
|
||||
file2 (buffer-file-name)))
|
||||
(setq startup-hooks
|
||||
(cons `(lambda ()
|
||||
(delete-file ,file1)
|
||||
(or ,(string= rev2 "") (delete-file ,file2)))
|
||||
startup-hooks))
|
||||
(save-window-excursion
|
||||
(save-excursion
|
||||
(vc-version-other-window rev1)
|
||||
(setq rev1buf (current-buffer)
|
||||
file1 (buffer-file-name)))
|
||||
(save-excursion
|
||||
(or (string= rev2 "") ; use current buffer
|
||||
(vc-version-other-window rev2))
|
||||
(setq rev2buf (current-buffer)
|
||||
file2 (buffer-file-name)))
|
||||
(setq startup-hooks
|
||||
(cons `(lambda ()
|
||||
(delete-file ,file1)
|
||||
(or ,(string= rev2 "") (delete-file ,file2)))
|
||||
startup-hooks)))
|
||||
(ediff-buffers
|
||||
rev1buf rev2buf
|
||||
startup-hooks
|
||||
@ -107,10 +108,12 @@
|
||||
(defun ediff-rcs-internal (rev1 rev2 &optional startup-hooks)
|
||||
;; Run Ediff on versions of the current buffer.
|
||||
;; If REV2 is "" then use current buffer.
|
||||
(let ((rev2buf (if (string= rev2 "")
|
||||
(current-buffer)
|
||||
(rcs-ediff-view-revision rev2)))
|
||||
(rev1buf (rcs-ediff-view-revision rev1)))
|
||||
(let (rev2buf rev1buf)
|
||||
(save-window-excursion
|
||||
(setq rev2buf (if (string= rev2 "")
|
||||
(current-buffer)
|
||||
(rcs-ediff-view-revision rev2))
|
||||
rev1buf (rcs-ediff-view-revision rev1)))
|
||||
|
||||
;; rcs.el doesn't create temp version files, so we don't have to delete
|
||||
;; anything in startup hooks to ediff-buffers
|
||||
@ -149,30 +152,31 @@
|
||||
&optional startup-hooks merge-buffer-file)
|
||||
;; If ANCESTOR-REV non-nil, merge with ancestor
|
||||
(let (buf1 buf2 ancestor-buf)
|
||||
(save-excursion
|
||||
(vc-version-other-window rev1)
|
||||
(setq buf1 (current-buffer)))
|
||||
(save-excursion
|
||||
(or (string= rev2 "")
|
||||
(vc-version-other-window rev2))
|
||||
(setq buf2 (current-buffer)))
|
||||
(if ancestor-rev
|
||||
(save-excursion
|
||||
(if (string= ancestor-rev "")
|
||||
(setq ancestor-rev (vc-workfile-version buffer-file-name)))
|
||||
(vc-version-other-window ancestor-rev)
|
||||
(setq ancestor-buf (current-buffer))))
|
||||
(setq startup-hooks
|
||||
(cons
|
||||
`(lambda ()
|
||||
(delete-file ,(buffer-file-name buf1))
|
||||
(or ,(string= rev2 "")
|
||||
(delete-file ,(buffer-file-name buf2)))
|
||||
(or ,(string= ancestor-rev "")
|
||||
,(not ancestor-rev)
|
||||
(delete-file ,(buffer-file-name ancestor-buf)))
|
||||
)
|
||||
startup-hooks))
|
||||
(save-window-excursion
|
||||
(save-excursion
|
||||
(vc-version-other-window rev1)
|
||||
(setq buf1 (current-buffer)))
|
||||
(save-excursion
|
||||
(or (string= rev2 "")
|
||||
(vc-version-other-window rev2))
|
||||
(setq buf2 (current-buffer)))
|
||||
(if ancestor-rev
|
||||
(save-excursion
|
||||
(if (string= ancestor-rev "")
|
||||
(setq ancestor-rev (vc-workfile-version buffer-file-name)))
|
||||
(vc-version-other-window ancestor-rev)
|
||||
(setq ancestor-buf (current-buffer))))
|
||||
(setq startup-hooks
|
||||
(cons
|
||||
`(lambda ()
|
||||
(delete-file ,(buffer-file-name buf1))
|
||||
(or ,(string= rev2 "")
|
||||
(delete-file ,(buffer-file-name buf2)))
|
||||
(or ,(string= ancestor-rev "")
|
||||
,(not ancestor-rev)
|
||||
(delete-file ,(buffer-file-name ancestor-buf)))
|
||||
)
|
||||
startup-hooks)))
|
||||
(if ancestor-rev
|
||||
(ediff-merge-buffers-with-ancestor
|
||||
buf1 buf2 ancestor-buf
|
||||
@ -186,14 +190,15 @@
|
||||
startup-hooks merge-buffer-file)
|
||||
;; If ANCESTOR-REV non-nil, merge with ancestor
|
||||
(let (buf1 buf2 ancestor-buf)
|
||||
(setq buf1 (rcs-ediff-view-revision rev1)
|
||||
buf2 (if (string= rev2 "")
|
||||
(current-buffer)
|
||||
(rcs-ediff-view-revision rev2))
|
||||
ancestor-buf (if ancestor-rev
|
||||
(if (string= ancestor-rev "")
|
||||
(current-buffer)
|
||||
(rcs-ediff-view-revision ancestor-rev))))
|
||||
(save-window-excursion
|
||||
(setq buf1 (rcs-ediff-view-revision rev1)
|
||||
buf2 (if (string= rev2 "")
|
||||
(current-buffer)
|
||||
(rcs-ediff-view-revision rev2))
|
||||
ancestor-buf (if ancestor-rev
|
||||
(if (string= ancestor-rev "")
|
||||
(current-buffer)
|
||||
(rcs-ediff-view-revision ancestor-rev)))))
|
||||
;; rcs.el doesn't create temp version files, so we don't have to delete
|
||||
;; anything in startup hooks to ediff-buffers
|
||||
(if ancestor-rev
|
||||
|
@ -151,7 +151,6 @@ In this case, Ediff will use those frames to display these buffers."
|
||||
'(vertical-scroll-bars . nil) ; Emacs only
|
||||
'(scrollbar-width . 0) ; XEmacs only
|
||||
'(menu-bar-lines . 0) ; Emacs only
|
||||
'(tool-bar-lines . 0) ; Emacs only
|
||||
;; don't lower and auto-raise
|
||||
'(auto-lower . nil)
|
||||
'(auto-raise . t)
|
||||
@ -831,8 +830,14 @@ into icons, regardless of the window manager."
|
||||
;; create a new splittable frame if none is found
|
||||
(defun ediff-skip-unsuitable-frames (&optional ok-unsplittable)
|
||||
(if (ediff-window-display-p)
|
||||
(let (last-window)
|
||||
(while (and (not (eq (selected-window) last-window))
|
||||
;;(let (last-window)
|
||||
(let (seen-windows)
|
||||
;; (memq ... seen-windows) has quadratic behavior,
|
||||
;; but (eq ... last-window) runs into an emacs bug where next-window
|
||||
;; gets stuck in a loop if the only frame is the minibuffer.
|
||||
;;
|
||||
;;(while (and (not (eq (selected-window) last-window))
|
||||
(while (and (not (memq (selected-window) seen-windows))
|
||||
(or
|
||||
(ediff-frame-has-dedicated-windows (selected-frame))
|
||||
(ediff-frame-iconified-p (selected-frame))
|
||||
@ -846,10 +851,12 @@ into icons, regardless of the window manager."
|
||||
nil
|
||||
(ediff-frame-unsplittable-p (selected-frame)))))
|
||||
;; remember where started
|
||||
(or last-window (setq last-window (selected-window)))
|
||||
;;(or last-window (setq last-window (selected-window)))
|
||||
(setq seen-windows (cons (selected-window) seen-windows))
|
||||
;; try new window
|
||||
(other-window 1 t))
|
||||
(if (eq (selected-window) last-window)
|
||||
;;(if (eq (selected-window) last-window)
|
||||
(if (memq (selected-window) seen-windows)
|
||||
;; fed up, no appropriate frame
|
||||
(progn
|
||||
(select-frame (make-frame '((unsplittable)))))))))
|
||||
|
@ -6,8 +6,8 @@
|
||||
;; Created: February 2, 1994
|
||||
;; Keywords: comparing, merging, patching, version control.
|
||||
|
||||
(defconst ediff-version "2.74" "The current version of Ediff")
|
||||
(defconst ediff-date "October 31, 1999" "Date of last update")
|
||||
(defconst ediff-version "2.75" "The current version of Ediff")
|
||||
(defconst ediff-date "October 29, 2000" "Date of last update")
|
||||
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
@ -163,13 +163,27 @@
|
||||
(toggle-read-only 1)))
|
||||
|
||||
;; Return a plausible default for ediff's first file:
|
||||
;; In dired, return the file name under the point, unless it is a directory
|
||||
;; If the buffer has a file name, return that file name.
|
||||
(defun ediff-get-default-file-name ()
|
||||
;; In dired, return the file number FILENO (or 0) in the list
|
||||
;; (all-selected-files, filename under the cursor), where directories are
|
||||
;; ignored. Otherwise, return DEFAULT file name, if non-nil. Else,
|
||||
;; if the buffer is visiting a file, return that file name.
|
||||
(defun ediff-get-default-file-name (&optional default fileno)
|
||||
(cond ((eq major-mode 'dired-mode)
|
||||
(let ((f (dired-get-filename nil 'no-error)))
|
||||
(if (and (stringp f) (not (file-directory-p f)))
|
||||
f)))
|
||||
(let ((current (dired-get-filename nil 'no-error))
|
||||
(marked (condition-case nil
|
||||
(dired-get-marked-files 'no-dir)
|
||||
(error)))
|
||||
aux-list choices result)
|
||||
(or (integerp fileno) (setq fileno 0))
|
||||
(if (stringp default)
|
||||
(setq aux-list (cons default aux-list)))
|
||||
(if (and (stringp current) (not (file-directory-p current)))
|
||||
(setq aux-list (cons current aux-list)))
|
||||
(setq choices (nconc marked aux-list))
|
||||
(setq result (elt choices fileno))
|
||||
(or result
|
||||
default)))
|
||||
((stringp default) default)
|
||||
((buffer-file-name (current-buffer))
|
||||
(file-name-nondirectory (buffer-file-name (current-buffer))))
|
||||
))
|
||||
@ -199,7 +213,7 @@
|
||||
(file-name-nondirectory f)
|
||||
dir-B))
|
||||
file-name-history))
|
||||
f))
|
||||
(ediff-get-default-file-name f 1)))
|
||||
)))
|
||||
(ediff-files-internal file-A
|
||||
(if (file-directory-p file-B)
|
||||
@ -234,7 +248,7 @@
|
||||
(file-name-nondirectory f)
|
||||
dir-B))
|
||||
file-name-history))
|
||||
f)))
|
||||
(ediff-get-default-file-name f 1))))
|
||||
(ediff-read-file-name "File C to compare"
|
||||
(setq dir-C (if ediff-use-last-dir
|
||||
ediff-last-dir-C
|
||||
@ -246,7 +260,7 @@
|
||||
(file-name-nondirectory ff)
|
||||
dir-C))
|
||||
file-name-history))
|
||||
ff))
|
||||
(ediff-get-default-file-name ff 2)))
|
||||
)))
|
||||
(ediff-files-internal file-A
|
||||
(if (file-directory-p file-B)
|
||||
@ -1009,7 +1023,7 @@ Continue anyway? (y/n) "))
|
||||
(file-name-nondirectory f)
|
||||
dir-B))
|
||||
file-name-history))
|
||||
f))
|
||||
(ediff-get-default-file-name f 1)))
|
||||
)))
|
||||
(setq startup-hooks (cons 'ediff-merge-on-startup startup-hooks))
|
||||
(ediff-files-internal file-A
|
||||
@ -1052,7 +1066,7 @@ Continue anyway? (y/n) "))
|
||||
(file-name-nondirectory f)
|
||||
dir-B))
|
||||
file-name-history))
|
||||
f)))
|
||||
(ediff-get-default-file-name f 1))))
|
||||
(ediff-read-file-name "Ancestor file"
|
||||
(setq dir-ancestor
|
||||
(if ediff-use-last-dir
|
||||
@ -1065,7 +1079,7 @@ Continue anyway? (y/n) "))
|
||||
(file-name-nondirectory ff)
|
||||
dir-ancestor))
|
||||
file-name-history))
|
||||
ff))
|
||||
(ediff-get-default-file-name ff 2)))
|
||||
)))
|
||||
(setq startup-hooks (cons 'ediff-merge-on-startup startup-hooks))
|
||||
(ediff-files-internal file-A
|
||||
|
@ -79,8 +79,11 @@
|
||||
(nm-p (intern (concat snm "-p")))
|
||||
(nms (intern (concat snm "s"))))
|
||||
`(defun ,nm-p (com)
|
||||
(consp (memq (if (and (viper-characterp com) (< com 0))
|
||||
(- com) com) ,nms)))))
|
||||
(consp (viper-memq-char
|
||||
(if (and (viper-characterp com) (< com 0))
|
||||
(- com) com)
|
||||
,nms)
|
||||
))))
|
||||
|
||||
;; Variables for defining VI commands
|
||||
|
||||
@ -191,11 +194,19 @@
|
||||
(viper-move-marker-locally viper-insert-point viper-pre-command-point))
|
||||
)
|
||||
|
||||
(defsubst viper-insert-state-pre-command-sentinel ()
|
||||
(or (memq this-command '(self-insert-command))
|
||||
(defsubst viper-preserve-cursor-color ()
|
||||
(or (memq this-command '(self-insert-command
|
||||
viper-del-backward-char-in-insert
|
||||
viper-del-backward-char-in-replace
|
||||
viper-delete-backward-char
|
||||
viper-join-lines
|
||||
viper-delete-char))
|
||||
(memq (viper-event-key last-command-event)
|
||||
'(up down left right (meta f) (meta b)
|
||||
(control n) (control p) (control f) (control b)))
|
||||
(control n) (control p) (control f) (control b)))))
|
||||
|
||||
(defsubst viper-insert-state-pre-command-sentinel ()
|
||||
(or (viper-preserve-cursor-color)
|
||||
(viper-restore-cursor-color 'after-insert-mode))
|
||||
(if (and (memq this-command '(dabbrev-expand hippie-expand))
|
||||
(markerp viper-insert-point)
|
||||
@ -218,10 +229,7 @@
|
||||
;; to speed up, don't change cursor color before self-insert
|
||||
;; and common move commands
|
||||
(defsubst viper-replace-state-pre-command-sentinel ()
|
||||
(or (memq this-command '(self-insert-command))
|
||||
(memq (viper-event-key last-command-event)
|
||||
'(up down left right (meta f) (meta b)
|
||||
(control n) (control p) (control f) (control b)))
|
||||
(or (viper-preserve-cursor-color)
|
||||
(viper-restore-cursor-color 'after-replace-mode)))
|
||||
|
||||
|
||||
@ -248,10 +256,11 @@
|
||||
;; we set the point outside the replacement region, then the 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
|
||||
;; We optimize for some commands, like self-insert-command,
|
||||
;; viper-delete-backward-char, etc., since they either don't change
|
||||
;; cursor color or, if they terminate replace mode, the color will be changed
|
||||
;; in viper-finish-change
|
||||
(or (memq this-command '(self-insert-command))
|
||||
(or (viper-preserve-cursor-color)
|
||||
(viper-restore-cursor-color 'after-replace-mode))
|
||||
(cond
|
||||
((eq viper-current-state 'replace-state)
|
||||
@ -679,7 +688,7 @@
|
||||
ARG is used as the prefix value for the executed command. If
|
||||
EVENTS is a list of events, which become the beginning of the command."
|
||||
(interactive "P")
|
||||
(if (= last-command-char ?\\)
|
||||
(if (viper= last-command-char ?\\)
|
||||
(message "Switched to EMACS state for the next command..."))
|
||||
(viper-escape-to-state arg events 'emacs-state))
|
||||
|
||||
@ -981,17 +990,17 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
;; Get com part of prefix-argument ARG and modify it.
|
||||
(defun viper-getCom (arg)
|
||||
(let ((com (viper-getcom arg)))
|
||||
(cond ((equal com ?c) ?c)
|
||||
(cond ((viper= com ?c) ?c)
|
||||
;; Previously, ?c was being converted to ?C, but this prevented
|
||||
;; multiline replace regions.
|
||||
;;((equal com ?c) ?C)
|
||||
((equal com ?d) ?D)
|
||||
((equal com ?y) ?Y)
|
||||
;;((viper= com ?c) ?C)
|
||||
((viper= com ?d) ?D)
|
||||
((viper= com ?y) ?Y)
|
||||
(t com))))
|
||||
|
||||
|
||||
;; Compute numeric prefix arg value.
|
||||
;; Invoked by EVENT. COM is the command part obtained so far.
|
||||
;; Invoked by EVENT-CHAR. COM is the command part obtained so far.
|
||||
(defun viper-prefix-arg-value (event-char com)
|
||||
(let ((viper-intermediate-command 'viper-digit-argument)
|
||||
value func)
|
||||
@ -1046,31 +1055,31 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
cmd-info
|
||||
cmd-to-exec-at-end)
|
||||
(while (and cont
|
||||
(memq char
|
||||
(list ?c ?d ?y ?! ?< ?> ?= ?# ?r ?R ?\"
|
||||
viper-buffer-search-char)))
|
||||
(viper-memq-char char
|
||||
(list ?c ?d ?y ?! ?< ?> ?= ?# ?r ?R ?\"
|
||||
viper-buffer-search-char)))
|
||||
(if com
|
||||
;; this means that we already have a command character, so we
|
||||
;; construct a com list and exit while. however, if char is "
|
||||
;; it is an error.
|
||||
(progn
|
||||
;; new com is (CHAR . OLDCOM)
|
||||
(if (memq char '(?# ?\")) (error ""))
|
||||
(if (viper-memq-char char '(?# ?\")) (error ""))
|
||||
(setq com (cons char com))
|
||||
(setq cont nil))
|
||||
;; If com is nil we set com as char, and read more. Again, if char is
|
||||
;; ", we read the name of register and store it in viper-use-register.
|
||||
;; if char is !, =, or #, a complete com is formed so we exit the while
|
||||
;; loop.
|
||||
(cond ((memq char '(?! ?=))
|
||||
(cond ((viper-memq-char char '(?! ?=))
|
||||
(setq com char)
|
||||
(setq char (read-char))
|
||||
(setq cont nil))
|
||||
((= char ?#)
|
||||
((viper= char ?#)
|
||||
;; read a char and encode it as com
|
||||
(setq com (+ 128 (read-char)))
|
||||
(setq char (read-char)))
|
||||
((= char ?\")
|
||||
((viper= char ?\")
|
||||
(let ((reg (read-char)))
|
||||
(if (viper-valid-register reg)
|
||||
(setq viper-use-register reg)
|
||||
@ -1086,7 +1095,7 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
;; we prepare the command that will be executed at the end.
|
||||
(progn
|
||||
(setq cmd-info (cons value com))
|
||||
(while (= char ?U)
|
||||
(while (viper= char ?U)
|
||||
(viper-describe-arg cmd-info)
|
||||
(setq char (read-char)))
|
||||
;; `char' is a movement cmd, a digit arg cmd, or a register cmd---so we
|
||||
@ -1094,18 +1103,18 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
(or (viper-movement-command-p char)
|
||||
(viper-digit-command-p char)
|
||||
(viper-regsuffix-command-p char)
|
||||
(= char ?!) ; bang command
|
||||
(viper= char ?!) ; bang command
|
||||
(error ""))
|
||||
(setq cmd-to-exec-at-end
|
||||
(viper-exec-form-in-vi
|
||||
`(key-binding (char-to-string ,char)))))
|
||||
|
||||
;; as com is non-nil, this means that we have a command to execute
|
||||
(if (memq (car com) '(?r ?R))
|
||||
(if (viper-memq-char (car com) '(?r ?R))
|
||||
;; execute apropriate region command.
|
||||
(let ((char (car com)) (com (cdr com)))
|
||||
(setq prefix-arg (cons value com))
|
||||
(if (= char ?r) (viper-region prefix-arg)
|
||||
(if (viper= char ?r) (viper-region prefix-arg)
|
||||
(viper-Region prefix-arg))
|
||||
;; reset prefix-arg
|
||||
(setq prefix-arg nil))
|
||||
@ -1233,7 +1242,7 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
(exchange-point-and-mark))
|
||||
(if (eq (preceding-char) ?\n)
|
||||
(viper-backward-char-carefully)) ; give back the newline
|
||||
(if (= com ?c)
|
||||
(if (viper= com ?c)
|
||||
(viper-change (mark t) (point))
|
||||
(viper-change-subr (mark t) (point))))
|
||||
|
||||
@ -1255,7 +1264,7 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
(setq viper-use-register nil)))
|
||||
(delete-region (mark t) (point)))
|
||||
(open-line 1)
|
||||
(if (= com ?C)
|
||||
(if (viper= com ?C)
|
||||
(viper-change-state-to-insert)
|
||||
(viper-yank-last-insertion)))
|
||||
|
||||
@ -1364,7 +1373,7 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
(exchange-point-and-mark)
|
||||
(shell-command-on-region
|
||||
(mark t) (point)
|
||||
(if (= com ?!)
|
||||
(if (viper= com ?!)
|
||||
(setq viper-last-shell-com
|
||||
(viper-read-string-with-history
|
||||
"!"
|
||||
@ -1388,7 +1397,7 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
(viper-enlarge-region (mark t) (point))
|
||||
(if (> (mark t) (point)) (exchange-point-and-mark))
|
||||
(indent-rigidly (mark t) (point)
|
||||
(if (= com ?>)
|
||||
(if (viper= com ?>)
|
||||
viper-shift-width
|
||||
(- viper-shift-width))))
|
||||
;; return point to where it was before shift
|
||||
@ -1446,7 +1455,7 @@ as a Meta key and any number of multiple escapes is allowed."
|
||||
(if (viper-dotable-command-p com)
|
||||
(viper-set-destructive-command
|
||||
(list m-com val
|
||||
(if (memq com (list ?c ?C ?!)) (- com) com)
|
||||
(if (viper-memq-char com (list ?c ?C ?!)) (- com) com)
|
||||
reg nil nil)))
|
||||
))
|
||||
|
||||
@ -1536,19 +1545,20 @@ invokes the command before that, etc."
|
||||
;; The hash-command. It is invoked interactively by the key sequence #<char>.
|
||||
;; The chars that can follow `#' are determined by viper-hash-command-p
|
||||
(defun viper-special-prefix-com (char)
|
||||
(cond ((= char ?c)
|
||||
(cond ((viper= char ?c)
|
||||
(downcase-region (min viper-com-point (point))
|
||||
(max viper-com-point (point))))
|
||||
((= char ?C)
|
||||
((viper= char ?C)
|
||||
(upcase-region (min viper-com-point (point))
|
||||
(max viper-com-point (point))))
|
||||
((= char ?g)
|
||||
((viper= char ?g)
|
||||
(push-mark viper-com-point t)
|
||||
(viper-global-execute))
|
||||
((= char ?q)
|
||||
((viper= char ?q)
|
||||
(push-mark viper-com-point t)
|
||||
(viper-quote-region))
|
||||
((= char ?s) (funcall viper-spell-function viper-com-point (point)))
|
||||
((viper= char ?s)
|
||||
(funcall viper-spell-function viper-com-point (point)))
|
||||
(t (error "#%c: %s" char viper-InvalidViCommand))))
|
||||
|
||||
|
||||
@ -1858,7 +1868,7 @@ Undo previous insertion and inserts new."
|
||||
|
||||
;; Thie is a temp hook that uses free variables init-message and initial.
|
||||
;; A dirty feature, but it is the simplest way to have it do the right thing.
|
||||
;; The init-message and initial vars come from the scope set by
|
||||
;; The INIT-MESSAGE and INITIAL vars come from the scope set by
|
||||
;; viper-read-string-with-history
|
||||
(defun viper-minibuffer-standard-hook ()
|
||||
(if (stringp init-message)
|
||||
@ -2054,7 +2064,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(viper-set-destructive-command (list 'viper-append val ?r nil nil nil))
|
||||
(if (not (eolp)) (forward-char))
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-loop val (viper-yank-last-insertion))
|
||||
(viper-change-state-to-insert))))
|
||||
|
||||
@ -2066,7 +2076,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(viper-set-destructive-command (list 'viper-Append val ?r nil nil nil))
|
||||
(end-of-line)
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-loop val (viper-yank-last-insertion))
|
||||
(viper-change-state-to-insert))))
|
||||
|
||||
@ -2078,7 +2088,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(viper-set-destructive-command (list 'viper-Insert val ?r nil nil nil))
|
||||
(back-to-indentation)
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-loop val (viper-yank-last-insertion))
|
||||
(viper-change-state-to-insert))))
|
||||
|
||||
@ -2090,7 +2100,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(viper-set-destructive-command (list 'viper-open-line val ?r nil nil nil))
|
||||
(let ((col (current-indentation)))
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-loop val
|
||||
(end-of-line)
|
||||
(newline 1)
|
||||
@ -2120,7 +2130,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(viper-set-destructive-command (list 'viper-Open-line val ?r nil nil nil))
|
||||
(let ((col (current-indentation)))
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-loop val
|
||||
(beginning-of-line)
|
||||
(open-line 1)
|
||||
@ -2151,7 +2161,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(viper-set-destructive-command
|
||||
(list 'viper-open-line-at-point val ?r nil nil nil))
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-loop val
|
||||
(open-line 1)
|
||||
(viper-yank-last-insertion))
|
||||
@ -2165,7 +2175,7 @@ problems."
|
||||
(com (viper-getcom arg)))
|
||||
(push-mark nil t)
|
||||
(forward-char val)
|
||||
(if (equal com ?r)
|
||||
(if (viper= com ?r)
|
||||
(viper-change-subr (mark t) (point))
|
||||
(viper-change (mark t) (point)))
|
||||
(viper-set-destructive-command (list 'viper-substitute val ?r nil nil nil))
|
||||
@ -2459,11 +2469,12 @@ These keys are ESC, RET, and LineFeed"
|
||||
|
||||
(defun viper-replace-char-subr (com arg)
|
||||
(let (char)
|
||||
(setq char (if (equal com ?r)
|
||||
(setq char (if (viper= com ?r)
|
||||
viper-d-char
|
||||
(read-char)))
|
||||
(let (inhibit-quit) ; preserve consistency of undo-list and iso-accents
|
||||
(if (and viper-automatic-iso-accents (memq char '(?' ?\" ?^ ?~)))
|
||||
(if (and viper-automatic-iso-accents
|
||||
(viper-memq-char char '(?' ?\" ?^ ?~)))
|
||||
;; get European characters
|
||||
(progn
|
||||
(viper-set-iso-accents-mode t)
|
||||
@ -2635,12 +2646,12 @@ On reaching beginning of line, stop and signal error."
|
||||
(let ((prev-char (viper-char-at-pos 'backward))
|
||||
(saved-point (point)))
|
||||
;; skip non-newline separators backward
|
||||
(while (and (not (memq prev-char '(nil \n)))
|
||||
(while (and (not (viper-memq-char prev-char '(nil \n)))
|
||||
(< lim (point))
|
||||
;; must be non-newline separator
|
||||
(if (eq viper-syntax-preference 'strict-vi)
|
||||
(memq prev-char '(?\ ?\t))
|
||||
(memq (char-syntax prev-char) '(?\ ?-))))
|
||||
(viper-memq-char prev-char '(?\ ?\t))
|
||||
(viper-memq-char (char-syntax prev-char) '(?\ ?-))))
|
||||
(viper-backward-char-carefully)
|
||||
(setq prev-char (viper-char-at-pos 'backward)))
|
||||
|
||||
@ -2654,12 +2665,12 @@ On reaching beginning of line, stop and signal error."
|
||||
|
||||
;; skip again, but make sure we don't overshoot the limit
|
||||
(if twice
|
||||
(while (and (not (memq prev-char '(nil \n)))
|
||||
(while (and (not (viper-memq-char prev-char '(nil \n)))
|
||||
(< lim (point))
|
||||
;; must be non-newline separator
|
||||
(if (eq viper-syntax-preference 'strict-vi)
|
||||
(memq prev-char '(?\ ?\t))
|
||||
(memq (char-syntax prev-char) '(?\ ?-))))
|
||||
(viper-memq-char prev-char '(?\ ?\t))
|
||||
(viper-memq-char (char-syntax prev-char) '(?\ ?-))))
|
||||
(viper-backward-char-carefully)
|
||||
(setq prev-char (viper-char-at-pos 'backward))))
|
||||
|
||||
@ -2677,10 +2688,10 @@ On reaching beginning of line, stop and signal error."
|
||||
(if com (viper-move-marker-locally 'viper-com-point (point)))
|
||||
(viper-forward-word-kernel val)
|
||||
(if com (progn
|
||||
(cond ((memq com (list ?c (- ?c)))
|
||||
(cond ((viper-memq-char com (list ?c (- ?c)))
|
||||
(viper-separator-skipback-special 'twice viper-com-point))
|
||||
;; Yank words including the whitespace, but not newline
|
||||
((memq com (list ?y (- ?y)))
|
||||
((viper-memq-char com (list ?y (- ?y)))
|
||||
(viper-separator-skipback-special nil viper-com-point))
|
||||
((viper-dotable-command-p com)
|
||||
(viper-separator-skipback-special nil viper-com-point)))
|
||||
@ -2698,10 +2709,10 @@ On reaching beginning of line, stop and signal error."
|
||||
(viper-skip-nonseparators 'forward)
|
||||
(viper-skip-separators t))
|
||||
(if com (progn
|
||||
(cond ((memq com (list ?c (- ?c)))
|
||||
(cond ((viper-memq-char com (list ?c (- ?c)))
|
||||
(viper-separator-skipback-special 'twice viper-com-point))
|
||||
;; Yank words including the whitespace, but not newline
|
||||
((memq com (list ?y (- ?y)))
|
||||
((viper-memq-char com (list ?y (- ?y)))
|
||||
(viper-separator-skipback-special nil viper-com-point))
|
||||
((viper-dotable-command-p com)
|
||||
(viper-separator-skipback-special nil viper-com-point)))
|
||||
@ -4217,12 +4228,12 @@ and regexp replace."
|
||||
(let ((char (read-char)))
|
||||
(cond ((and (<= ?a char) (<= char ?z))
|
||||
(point-to-register (1+ (- char ?a))))
|
||||
((= char ?<) (viper-mark-beginning-of-buffer))
|
||||
((= char ?>) (viper-mark-end-of-buffer))
|
||||
((= char ?.) (viper-set-mark-if-necessary))
|
||||
((= char ?,) (viper-cycle-through-mark-ring))
|
||||
((= char ?^) (push-mark viper-saved-mark t t))
|
||||
((= char ?D) (mark-defun))
|
||||
((viper= char ?<) (viper-mark-beginning-of-buffer))
|
||||
((viper= char ?>) (viper-mark-end-of-buffer))
|
||||
((viper= char ?.) (viper-set-mark-if-necessary))
|
||||
((viper= char ?,) (viper-cycle-through-mark-ring))
|
||||
((viper= char ?^) (push-mark viper-saved-mark t t))
|
||||
((viper= char ?D) (mark-defun))
|
||||
(t (error ""))
|
||||
)))
|
||||
|
||||
@ -4323,7 +4334,7 @@ One can use `` and '' to temporarily jump 1 step back."
|
||||
(goto-char viper-com-point)
|
||||
(viper-change-state-to-vi)
|
||||
(error "")))))
|
||||
((and (not skip-white) (= char ?`))
|
||||
((and (not skip-white) (viper= char ?`))
|
||||
(if com (viper-move-marker-locally 'viper-com-point (point)))
|
||||
(if (and (viper-same-line (point) viper-last-jump)
|
||||
(= (point) viper-last-jump-ignore))
|
||||
@ -4334,7 +4345,7 @@ One can use `` and '' to temporarily jump 1 step back."
|
||||
(setq viper-last-jump (point-marker)
|
||||
viper-last-jump-ignore 0)
|
||||
(if com (viper-execute-com 'viper-goto-mark nil com)))
|
||||
((and skip-white (= char ?'))
|
||||
((and skip-white (viper= char ?'))
|
||||
(if com (viper-move-marker-locally 'viper-com-point (point)))
|
||||
(if (and (viper-same-line (point) viper-last-jump)
|
||||
(= (point) viper-last-jump-ignore))
|
||||
@ -4437,7 +4448,7 @@ One can use `` and '' to temporarily jump 1 step back."
|
||||
(princ (format "Register %c contains the string:\n" reg))
|
||||
(princ text))
|
||||
))
|
||||
((= ?\] reg)
|
||||
((viper= ?\] reg)
|
||||
(viper-next-heading arg))
|
||||
(t (error
|
||||
viper-InvalidRegister reg)))))
|
||||
@ -4446,9 +4457,9 @@ One can use `` and '' to temporarily jump 1 step back."
|
||||
"Function called by \[, the brac. View textmarkers and call \[\["
|
||||
(interactive "P")
|
||||
(let ((reg (read-char)))
|
||||
(cond ((= ?\[ reg)
|
||||
(cond ((viper= ?\[ reg)
|
||||
(viper-prev-heading arg))
|
||||
((= ?\] reg)
|
||||
((viper= ?\] reg)
|
||||
(viper-heading-end arg))
|
||||
((viper-valid-register reg '(letter))
|
||||
(let* ((val (get-register (1+ (- reg ?a))))
|
||||
|
@ -102,6 +102,25 @@
|
||||
(symbol-function
|
||||
(if viper-xemacs-p 'characterp 'integerp)))
|
||||
|
||||
; CHAR is supposed to be a char or an integer; LIST is a list of chars, nil,
|
||||
; and negative numbers
|
||||
; Check if CHAR is a member by trying to convert into integers, if necessary.
|
||||
; Introduced for compatibility with XEmacs, where integers are not the same as
|
||||
; chars.
|
||||
(defun viper-memq-char (char list)
|
||||
(cond (viper-emacs-p (memq char list))
|
||||
((null char) (memq char list))
|
||||
((characterp char) (memq char list))
|
||||
((integerp char) (memq (int-to-char char) list))
|
||||
(t nil)))
|
||||
|
||||
;; Like =, but accommodates null and also is t for eq-objects
|
||||
(defun viper= (char char1)
|
||||
(cond ((eq char char1) t)
|
||||
((and (viper-characterp char) (viper-characterp char1))
|
||||
(= char char1))
|
||||
(t nil)))
|
||||
|
||||
(defsubst viper-color-display-p ()
|
||||
(if viper-emacs-p
|
||||
(x-display-color-p)
|
||||
@ -124,8 +143,12 @@
|
||||
(if (and (viper-window-display-p) (viper-color-display-p)
|
||||
(stringp new-color) (viper-color-defined-p new-color)
|
||||
(not (string= new-color (viper-get-cursor-color))))
|
||||
(modify-frame-parameters
|
||||
(selected-frame) (list (cons 'cursor-color new-color)))))
|
||||
(if viper-emacs-p
|
||||
(modify-frame-parameters
|
||||
(selected-frame) (list (cons 'cursor-color new-color)))
|
||||
(set-frame-property
|
||||
(selected-frame) 'cursor-color (make-color-instance new-color)))
|
||||
))
|
||||
|
||||
;; By default, saves current frame cursor color in the
|
||||
;; viper-saved-cursor-color-in-replace-mode property of viper-replace-overlay
|
||||
@ -701,7 +724,7 @@
|
||||
(if (not (viper-overlay-p viper-search-overlay))
|
||||
(progn
|
||||
(setq viper-search-overlay
|
||||
(viper-make-overlay beg end (current-buffer)))
|
||||
(viper-make-overlay (point-min) (point-min) (current-buffer)))
|
||||
(viper-overlay-put
|
||||
viper-search-overlay 'priority viper-search-overlay-priority)))
|
||||
(viper-overlay-put viper-search-overlay 'face nil))
|
||||
@ -954,7 +977,7 @@
|
||||
)))
|
||||
(if (viper-characterp basis)
|
||||
(setq basis
|
||||
(if (= basis ?\C-?)
|
||||
(if (viper= basis ?\C-?)
|
||||
(list 'control '\?) ; taking care of an emacs bug
|
||||
(intern (char-to-string basis)))))
|
||||
(if mod
|
||||
@ -1199,23 +1222,24 @@ This option is appropriate if you like Emacs-style words."
|
||||
(looking-at (concat "[" viper-strict-ALPHA-chars addl-chars "]"))
|
||||
(or
|
||||
;; or one of the additional chars being asked to include
|
||||
(memq char (viper-string-to-list addl-chars))
|
||||
(viper-memq-char char (viper-string-to-list addl-chars))
|
||||
(and
|
||||
;; not one of the excluded word chars
|
||||
(not (memq char viper-non-word-characters))
|
||||
;; not one of the excluded word chars (note:
|
||||
;; viper-non-word-characters is a list)
|
||||
(not (viper-memq-char char viper-non-word-characters))
|
||||
;; char of the Viper-word syntax class
|
||||
(memq (char-syntax char)
|
||||
(viper-string-to-list viper-ALPHA-char-class))))))
|
||||
(viper-memq-char (char-syntax char)
|
||||
(viper-string-to-list viper-ALPHA-char-class))))))
|
||||
))
|
||||
|
||||
(defun viper-looking-at-separator ()
|
||||
(let ((char (char-after (point))))
|
||||
(if char
|
||||
(if (eq viper-syntax-preference 'strict-vi)
|
||||
(memq char (viper-string-to-list viper-strict-SEP-chars))
|
||||
(viper-memq-char char (viper-string-to-list viper-strict-SEP-chars))
|
||||
(or (eq char ?\n) ; RET is always a separator in Vi
|
||||
(memq (char-syntax char)
|
||||
(viper-string-to-list viper-SEP-char-class)))))
|
||||
(viper-memq-char (char-syntax char)
|
||||
(viper-string-to-list viper-SEP-char-class)))))
|
||||
))
|
||||
|
||||
(defsubst viper-looking-at-alphasep (&optional addl-chars)
|
||||
@ -1340,7 +1364,8 @@ This option is appropriate if you like Emacs-style words."
|
||||
;; of the excluded characters
|
||||
(if (and (eq syntax-of-char-looked-at ?w)
|
||||
(not negated-syntax))
|
||||
(not (memq char-looked-at viper-non-word-characters))
|
||||
(not (viper-memq-char
|
||||
char-looked-at viper-non-word-characters))
|
||||
t))
|
||||
(funcall skip-syntax-func 1)
|
||||
0)
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
|
||||
|
||||
(defconst viper-version "3.08 of October 31, 1999"
|
||||
(defconst viper-version "3.09 of October 29, 2000"
|
||||
"The current version of Viper")
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
@ -443,7 +443,10 @@ unless it is coming up in a wrong Viper state."
|
||||
:group 'viper-misc)
|
||||
|
||||
(defcustom viper-insert-state-mode-list
|
||||
'(internal-ange-ftp-mode comint-mode shell-mode)
|
||||
'(internal-ange-ftp-mode
|
||||
comint-mode
|
||||
eshell-mode
|
||||
shell-mode)
|
||||
"*A list of major modes that should come up in Vi Insert state."
|
||||
:type '(repeat symbol)
|
||||
:group 'viper-misc)
|
||||
|
@ -14,7 +14,7 @@
|
||||
@synindex fn cp
|
||||
@synindex pg cp
|
||||
|
||||
@dircategory Emacs
|
||||
@dircategory Editors
|
||||
@direntry
|
||||
* Ediff: (ediff). A visual interface for comparing and merging programs.
|
||||
@end direntry
|
||||
@ -55,7 +55,7 @@ paragraph not being relevant to the printed manual).
|
||||
|
||||
@vskip 0pt plus 1filll
|
||||
@noindent
|
||||
Copyright @copyright{} 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
@ -1077,6 +1077,11 @@ The bulk of customization can be done via the following hooks:
|
||||
@vindex ediff-load-hook
|
||||
This hook can be used to change defaults after Ediff is loaded.
|
||||
|
||||
@item ediff-before-setup-hook
|
||||
@vindex ediff-before-setup-hook
|
||||
Hook that is run just before Ediff rearranges windows to its liking.
|
||||
Can be used to save windows configuration.
|
||||
|
||||
@item ediff-keymap-setup-hook
|
||||
@vindex ediff-keymap-setup-hook
|
||||
@vindex ediff-mode-map
|
||||
@ -1092,8 +1097,9 @@ of Ediff.
|
||||
@vindex ediff-before-setup-windows-hook
|
||||
@vindex ediff-after-setup-windows-hook
|
||||
These two hooks are called before and after Ediff sets up its window
|
||||
configuration. Can be used to save the configuration that existed
|
||||
before Ediff starts or for whatever other purposes.
|
||||
configuration. These hooks are run each time Ediff rearranges windows to
|
||||
its liking. This happens whenever it detects that the user changed the
|
||||
windows setup.
|
||||
|
||||
@item ediff-suspend-hook
|
||||
@itemx ediff-quit-hook
|
||||
@ -1186,8 +1192,13 @@ set local variables that alter the look of the display.
|
||||
@vindex ediff-registry-setup-hook
|
||||
Hooks run after setting up the registry for all active Ediff session.
|
||||
@xref{Session Groups}, for details.
|
||||
@item ediff-session-group-setup-hook
|
||||
@vindex ediff-session-group-setup-hook
|
||||
@item ediff-before-session-group-setup-hook
|
||||
@vindex ediff-before-session-group-setup-hook
|
||||
Hooks run before setting up a control panel for a group of related Ediff
|
||||
sessions. Can be used, for example, to save window configuration to restore
|
||||
later.
|
||||
@item ediff-after-session-group-setup-hook
|
||||
@vindex ediff-after-session-group-setup-hook
|
||||
Hooks run after setting up a control panel for a group of related Ediff
|
||||
sessions. @xref{Session Groups}, for details.
|
||||
@item ediff-quit-session-group-hook
|
||||
@ -2009,10 +2020,9 @@ have to tell Ediff which version control package you are using, e.g.,
|
||||
@end example
|
||||
|
||||
Apart from the standard @file{vc.el}, Ediff supports three other interfaces
|
||||
to version control:
|
||||
@file{rcs.el}, @file{pcl-cvs.el}, and @file{generic-sc.el}.
|
||||
The package @file{rcs.el} is written by Sebastian Kremer
|
||||
<sk@@thp.Uni-Koeln.DE> and is available as
|
||||
to version control: @file{rcs.el}, @file{pcl-cvs.el} (recently renamed
|
||||
pcvs.el), and @file{generic-sc.el}. The package @file{rcs.el} is written
|
||||
by Sebastian Kremer <sk@@thp.Uni-Koeln.DE> and is available as
|
||||
@example
|
||||
@file{ftp.cs.buffalo.edu:pub/Emacs/rcs.tar.Z}
|
||||
@file{ftp.uni-koeln.de:/pub/gnu/emacs/rcs.tar.Z}
|
||||
@ -2293,6 +2303,7 @@ Mike Long (mike.long@@analog.com),
|
||||
Martin Maechler (maechler@@stat.math.ethz.ch),
|
||||
Simon Marshall (simon@@gnu.org),
|
||||
Richard Mlynarik (mly@@adoc.xerox.com),
|
||||
Stefan Monnier (monnier@@cs.yale.edu),
|
||||
Chris Murphy (murphycm@@sun.aston.ac.uk),
|
||||
Erik Naggum (erik@@naggum.no),
|
||||
Eyvind Ness (Eyvind.Ness@@hrp.no),
|
||||
@ -2323,6 +2334,7 @@ Jan Vroonhof (vroonhof@@math.ethz.ch),
|
||||
Philippe Waroquiers (philippe.waroquiers@@eurocontrol.be),
|
||||
Klaus Weber (gizmo@@zork.north.de),
|
||||
Ben Wing (ben@@xemacs.org),
|
||||
Tom Wurgler (twurgler@@goodyear.com),
|
||||
Ilya Zakharevich (ilya@@math.ohio-state.edu),
|
||||
Eli Zaretskii (eliz@@is.elta.co.il)
|
||||
@end example
|
||||
|
@ -6,7 +6,7 @@
|
||||
@comment @setfilename viper.info
|
||||
@setfilename ../info/viper
|
||||
|
||||
@dircategory Emacs
|
||||
@dircategory Editors
|
||||
@direntry
|
||||
* VIPER: (viper). The newest Emacs VI-emulation mode.
|
||||
(also, A VI Plan for Emacs Rescue
|
||||
@ -20,7 +20,7 @@
|
||||
@titlepage
|
||||
@title Viper Is a Package for Emacs Rebels
|
||||
@subtitle a Vi emulator for Emacs
|
||||
@subtitle March 1998, Viper Version 3.02 (Polyglot)
|
||||
@subtitle October 2000, Viper Version 3.09
|
||||
|
||||
@author Michael Kifer (Viper)
|
||||
@author Aamod Sane (VIP 4.4)
|
||||
@ -97,7 +97,7 @@ It is recommended that you read the Overview node. The other nodes may
|
||||
be visited as needed.
|
||||
|
||||
Comments and bug reports are welcome.
|
||||
@code{kifer@@cs.emacs.edu} is the current address for Viper bug reports.
|
||||
@code{kifer@@cs.sunysb.edu} is the current address for Viper bug reports.
|
||||
Please use the Ex command @kbd{:submitReport} for this purpose.@refill
|
||||
|
||||
@end ifinfo
|
||||
@ -4419,6 +4419,7 @@ Many contributors on the net pointed out bugs and suggested a number of
|
||||
useful features. Here is a (hopefully) complete list of contributors:
|
||||
|
||||
@example
|
||||
aaronl@@vitelus.com (Aaron Lehmann),
|
||||
ahg@@panix.com (Al Gelders),
|
||||
amade@@diagram.fr (Paul-Bernard Amade),
|
||||
ascott@@fws214.intel.com (Andy Scott),
|
||||
@ -4428,6 +4429,7 @@ dave@@hellgate.utah.edu,
|
||||
dominik@@strw.LeidenUniv.nl (Carsten Dominik),
|
||||
dwallach@@cs.princeton.edu (Dan Wallach),
|
||||
dwight@@toolucky.llnl.gov (Dwight Shih),
|
||||
dxc@@xprt.net (David X. Callaway),
|
||||
edmonds@@edmonds.home.cs.ubc.ca (Brian Edmonds),
|
||||
gviswana@@cs.wisc.edu (Guhan Viswanathan),
|
||||
gvr@@halcyon.com (George V.@: Reilly),
|
||||
|
Loading…
Reference in New Issue
Block a user