From 7eb605c752b669ea2aa89040f512f91ce4a3de63 Mon Sep 17 00:00:00 2001 From: Michael Kifer Date: Mon, 23 Oct 2006 19:20:15 +0000 Subject: [PATCH] 2006-10-23 Michael Kifer * viper-cmd.el (viper-prefix-arg-com): define gg as G0 * viper-ex.el (ex-read): quote file argument. * ediff-diff.el (ediff-same-file-contents): expand file names. * ediff-mult.el (ediff-append-custom-diff): quote shell file arguments. --- ChangeLog | 10 +++ lisp/ediff-diff.el | 4 +- lisp/ediff-mult.el | 14 ++-- lisp/ediff.el | 2 +- lisp/emulation/viper-cmd.el | 125 +++++++++++++++++++----------------- lisp/emulation/viper-ex.el | 5 +- lisp/emulation/viper.el | 2 +- man/viper.texi | 2 +- 8 files changed, 93 insertions(+), 71 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6253dcdd92..41296efb112 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2006-10-23 Michael Kifer + + * viper-cmd.el (viper-prefix-arg-com): define gg as G0 + + * viper-ex.el (ex-read): quote file argument. + + * ediff-diff.el (ediff-same-file-contents): expand file names. + + * ediff-mult.el (ediff-append-custom-diff): quote shell file arguments. + 2006-10-23 Andreas Schwab * configure.in: Make sure x_default_search_path is always set even diff --git a/lisp/ediff-diff.el b/lisp/ediff-diff.el index e3675064010..d2dff294d2e 100644 --- a/lisp/ediff-diff.el +++ b/lisp/ediff-diff.el @@ -1450,7 +1450,9 @@ arguments to `skip-chars-forward'." (condition-case nil (let ((res (apply 'call-process ediff-cmp-program nil nil nil - (append ediff-cmp-options (list f1 f2))))) + (append ediff-cmp-options (list (expand-file-name f1) + (expand-file-name f2)))) + )) (and (numberp res) (eq res 0))) (error (format "Cannot execute program %S." ediff-cmp-program))) )) diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el index b33ad7c1859..2ee573a4cb9 100644 --- a/lisp/ediff-mult.el +++ b/lisp/ediff-mult.el @@ -1637,11 +1637,15 @@ Useful commands: (set-buffer (setq tmp-buf (get-buffer-create ediff-tmp-buffer))) (erase-buffer) (shell-command - (format "%s %s %s %s" - ediff-custom-diff-program ediff-custom-diff-options - (ediff-get-session-objA-name session) - (ediff-get-session-objB-name session)) - t)) + (format + "%s %s %s %s" + (shell-quote-argument ediff-custom-diff-program) + ediff-custom-diff-options + (shell-quote-argument (ediff-get-session-objA-name session)) + (shell-quote-argument (ediff-get-session-objB-name session)) + ) + t) + ) (save-excursion (set-buffer meta-diff-buff) (goto-char (point-max)) diff --git a/lisp/ediff.el b/lisp/ediff.el index 6b37d4c1847..14e1461a8a7 100644 --- a/lisp/ediff.el +++ b/lisp/ediff.el @@ -8,7 +8,7 @@ ;; Keywords: comparing, merging, patching, tools, unix (defconst ediff-version "2.81.1" "The current version of Ediff") -(defconst ediff-date "September 18, 2006" "Date of last update") +(defconst ediff-date "October 23, 2006" "Date of last update") ;; This file is part of GNU Emacs. diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el index 61d99e6c78d..ac3ef55d6e4 100644 --- a/lisp/emulation/viper-cmd.el +++ b/lisp/emulation/viper-cmd.el @@ -408,7 +408,6 @@ ) - (defun viper-adjust-keys-for (state) "Make necessary adjustments to keymaps before entering STATE." (cond ((memq state '(insert-state replace-state)) @@ -1263,65 +1262,69 @@ as a Meta key and any number of multiple escapes is allowed." (setq com char) (setq char (read-char)))))) - (if (atom com) - ;; `com' is a single char, so we construct the command argument - ;; and if `char' is `?', we describe the arg; otherwise - ;; we prepare the command that will be executed at the end. - (progn - (setq cmd-info (cons value com)) - (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 - ;; execute it at the very end - (or (viper-movement-command-p char) - (viper-digit-command-p char) - (viper-regsuffix-command-p char) - (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 (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 (viper= char ?r) - (viper-region prefix-arg) - (viper-Region prefix-arg)) - ;; reset prefix-arg - (setq prefix-arg nil)) - ;; otherwise, reset prefix arg and call appropriate command - (setq value (if (null value) 1 value)) - (setq prefix-arg nil) - (cond - ;; If we change ?C to ?c here, then cc will enter replacement mode - ;; rather than deleting lines. However, it will affect 1 less line than - ;; normal. We decided to not use replacement mode here and follow Vi, - ;; since replacement mode on n full lines can be achieved with nC. - ((equal com '(?c . ?c)) (viper-line (cons value ?C))) - ((equal com '(?d . ?d)) (viper-line (cons value ?D))) - ((equal com '(?d . ?y)) (viper-yank-defun)) - ((equal com '(?y . ?y)) (viper-line (cons value ?Y))) - ((equal com '(?< . ?<)) (viper-line (cons value ?<))) - ((equal com '(?> . ?>)) (viper-line (cons value ?>))) - ((equal com '(?! . ?!)) (viper-line (cons value ?!))) - ((equal com '(?= . ?=)) (viper-line (cons value ?=))) - (t (error ""))))) - - (if cmd-to-exec-at-end - (progn - (setq last-command-char char) - (setq last-command-event - (viper-copy-event - (if viper-xemacs-p (character-to-event char) char))) - (condition-case nil - (funcall cmd-to-exec-at-end cmd-info) - (error - (error ""))))) - )) + (if (atom com) + ;; `com' is a single char, so we construct the command argument + ;; and if `char' is `?', we describe the arg; otherwise + ;; we prepare the command that will be executed at the end. + (progn + (setq cmd-info (cons value com)) + (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 execute it at the very end + (or (viper-movement-command-p char) + (viper-digit-command-p char) + (viper-regsuffix-command-p char) + (viper= char ?!) ; bang command + (viper= char ?g) ; the gg command (like G0) + (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 (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 (viper= char ?r) + (viper-region prefix-arg) + (viper-Region prefix-arg)) + ;; reset prefix-arg + (setq prefix-arg nil)) + ;; otherwise, reset prefix arg and call appropriate command + (setq value (if (null value) 1 value)) + (setq prefix-arg nil) + (cond + ;; If we change ?C to ?c here, then cc will enter replacement mode + ;; rather than deleting lines. However, it will affect 1 less line + ;; than normal. We decided to not use replacement mode here and + ;; follow Vi, since replacement mode on n full lines can be achieved + ;; with nC. + ((equal com '(?c . ?c)) (viper-line (cons value ?C))) + ((equal com '(?d . ?d)) (viper-line (cons value ?D))) + ((equal com '(?d . ?y)) (viper-yank-defun)) + ((equal com '(?y . ?y)) (viper-line (cons value ?Y))) + ((equal com '(?< . ?<)) (viper-line (cons value ?<))) + ((equal com '(?> . ?>)) (viper-line (cons value ?>))) + ((equal com '(?! . ?!)) (viper-line (cons value ?!))) + ((equal com '(?= . ?=)) (viper-line (cons value ?=))) + ;; gg acts as G0 + ((equal (car com) ?g) (viper-goto-line 0)) + (t (error ""))))) + + (if cmd-to-exec-at-end + (progn + (setq last-command-char char) + (setq last-command-event + (viper-copy-event + (if viper-xemacs-p (character-to-event char) char))) + (condition-case nil + (funcall cmd-to-exec-at-end cmd-info) + (error + (error ""))))) + )) (defun viper-describe-arg (arg) (let (val com) @@ -1733,6 +1736,7 @@ invokes the command before that, etc." (max viper-com-point (point)))) ((viper= char ?g) (push-mark viper-com-point t) + ;; execute the last emacs kbd macro on each line of the region (viper-global-execute)) ((viper= char ?q) (push-mark viper-com-point t) @@ -3996,6 +4000,7 @@ Null string will repeat previous search." (defun viper-buffer-search-enable (&optional c) (cond (c (setq viper-buffer-search-char c)) ((null viper-buffer-search-char) + ;; ?g acts as a default value for viper-buffer-search-char (setq viper-buffer-search-char ?g))) (define-key viper-vi-basic-map (cond ((viper-characterp viper-buffer-search-char) diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el index f9f08034582..9f69c685948 100644 --- a/lisp/emulation/viper-ex.el +++ b/lisp/emulation/viper-ex.el @@ -1624,8 +1624,9 @@ reversed." (progn (setq command ;; replace # and % with the previous/current file - (ex-expand-filsyms (concat ex-file ex-cmdfile-args) - (current-buffer))) + (ex-expand-filsyms + (concat (shell-quote-argument ex-file) ex-cmdfile-args) + (current-buffer))) (shell-command command t)) (insert-file-contents ex-file))) (ex-fixup-history viper-last-ex-prompt ex-file ex-cmdfile-args)) diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index ea70ad609ad..82c070d5264 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -9,7 +9,7 @@ ;; Author: Michael Kifer ;; Keywords: emulations -(defconst viper-version "3.13 of September 18, 2006" +(defconst viper-version "3.13.1 of October 23, 2006" "The current version of Viper") ;; This file is part of GNU Emacs. diff --git a/man/viper.texi b/man/viper.texi index aadb8f9aed7..eb77bb71e1d 100644 --- a/man/viper.texi +++ b/man/viper.texi @@ -178,7 +178,7 @@ in some cases, especially in the Vi Insert state. John Hawkins has provided a set of customizations, which enables additional Emacs bindings under Viper. These customizations can be included in your @file{~/.viper} file and are found at the following URL: -@file{http://www.eecs.umich.edu/~jshawkin/viper-sample}. +@file{http://traeki.freeshell.org/files/viper-sample}. @menu * Emacs Preliminaries:: Basic concepts in Emacs. -- 2.39.2