X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/db4613576d3115aa320f0293d081ce98baa06acd..1048151cc4bec79f7310f4f2ede309889822a6bb:/lisp/emulation/viper-ex.el diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el index 212f0533b8..9c9cd681bf 100644 --- a/lisp/emulation/viper-ex.el +++ b/lisp/emulation/viper-ex.el @@ -1,6 +1,6 @@ ;;; viper-ex.el --- functions implementing the Ex commands for Viper -;; Copyright (C) 1994-1998, 2000-2015 Free Software Foundation, Inc. +;; Copyright (C) 1994-1998, 2000-2016 Free Software Foundation, Inc. ;; Author: Michael Kifer ;; Package: viper @@ -396,7 +396,7 @@ reversed." )) ;; Get an ex-token which is either an address or a command. -;; A token has a type, \(command, address, end-mark\), and a value +;; A token has a type, (command, address, end-mark), and a value (defun viper-get-ex-token () (save-window-excursion (setq viper-ex-work-buf (get-buffer-create viper-ex-work-buf-name)) @@ -455,7 +455,8 @@ reversed." (while (and (not (eolp)) cont) ;;(re-search-forward "[^/]*/") (re-search-forward "[^/]*\\(/\\|\n\\)") - (if (not (looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\/")) + (if (not (looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\/" + (line-beginning-position 0))) (setq cont nil)))) (backward-char 1) (setq ex-token (buffer-substring (point) (mark t))) @@ -468,7 +469,8 @@ reversed." (while (and (not (eolp)) cont) ;;(re-search-forward "[^\\?]*\\?") (re-search-forward "[^\\?]*\\(\\?\\|\n\\)") - (if (not (looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\\\?")) + (if (not (looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\\\?" + (line-beginning-position 0))) (setq cont nil)) (backward-char 1) (if (not (looking-at "\n")) (forward-char 1)))) @@ -489,7 +491,7 @@ reversed." (forward-char 1) (cond ((looking-at "'") (setq ex-token nil)) ((looking-at "[a-z]") (setq ex-token (following-char))) - (t (error "Marks are ' and a-z"))) + (t (error "%s" "Marks are ' and a-z"))) (forward-char 1)) ((looking-at "\n") (setq ex-token-type 'end-mark) @@ -563,14 +565,18 @@ reversed." save-pos (point))) (if (or (= dist 0) - (looking-back "\\([ \t]*['`][ \t]*[a-z]*\\)") + (looking-back "\\([ \t]*['`][ \t]*[a-z]*\\)" + (line-beginning-position)) (looking-back - "^[ \t]*[a-zA-Z!=>&~][ \t]*[/?]*[ \t]+[a-zA-Z!=>&~]+")) + "^[ \t]*[a-zA-Z!=>&~][ \t]*[/?]*[ \t]+[a-zA-Z!=>&~]+" + (line-beginning-position))) ;; Preceding characters are not the ones allowed in an Ex command ;; or we have typed past command name. ;; Note: we didn't do parsing, so there can be surprises. - (if (or (looking-back "[a-zA-Z!=>&~][ \t]*[/?]*[ \t]*") - (looking-back "\\([ \t]*['`][ \t]*[a-z]*\\)") + (if (or (looking-back "[a-zA-Z!=>&~][ \t]*[/?]*[ \t]*" + (line-beginning-position)) + (looking-back "\\([ \t]*['`][ \t]*[a-z]*\\)" + (line-beginning-position)) (looking-at "[^ \t\n\C-m]")) nil (with-output-to-temp-buffer "*Completions*" @@ -747,7 +753,8 @@ reversed." (error "Missing closing delimiter for global regexp") (goto-char (point-max)))) (if (not (looking-back - (format "[^\\\\]\\(\\\\\\\\\\)*\\\\%c" c))) + (format "[^\\\\]\\(\\\\\\\\\\)*\\\\%c" c) + (line-beginning-position 0))) (setq cont nil) ;; we are at an escaped delimiter: unescape it and continue (delete-char -2) @@ -963,7 +970,7 @@ reversed." (while (re-search-forward "%\\|#" nil t) (let ((data (match-data)) (char (buffer-substring (match-beginning 0) (match-end 0)))) - (if (looking-back (concat "\\\\" char)) + (if (looking-back "\\\\." (- (point) 2)) (replace-match char) (store-match-data data) (if (string= char "%") @@ -989,7 +996,7 @@ reversed." (get-buffer-create viper-ex-work-buf-name)) (skip-chars-forward " \t") (if (looking-at "!") - (if (and (not (looking-back "[ \t]")) + (if (and (not (looking-back "[ \t]" (1- (point)))) ;; read doesn't have a corresponding :r! form, so ! is ;; immediately interpreted as a shell command. (not (string= ex-token "read"))) @@ -1066,7 +1073,7 @@ reversed." (cond ((ex-cmd-accepts-multiple-files-p ex-token) (exit-minibuffer)) ;; apparently the argument to an Ex command is ;; supposed to be a shell command - ((looking-back "^[ \t]*!.*") + ((looking-back "^[ \t]*!.*" (line-beginning-position)) (setq ex-cmdfile t) (insert " ")) (t @@ -1243,7 +1250,7 @@ reversed." (kill-region (point) (mark t)))))) -(declare-function viper-change-state-to-vi "viper-cmd" ()) +(declare-function viper-change-state-to-vi "viper-cmd" (&rest _)) ;; Ex edit command ;; In Viper, `e' and `e!' behave identically. In both cases, the user is @@ -1651,7 +1658,7 @@ reversed." (if (and (not (string= ex-file (buffer-file-name))) (buffer-modified-p) (not ex-variant)) - (error "No write since last change \(:rec! overrides\)")) + (error "No write since last change (:rec! overrides)")) (recover-file ex-file)) ;; Tell that `rewind' is obsolete and to use `:next count' instead @@ -1991,7 +1998,7 @@ Please contact your system administrator. " (beginning-of-line) (if opt-c (message "done")))) -(declare-function viper-change-state-to-emacs "viper-cmd" ()) +(declare-function viper-change-state-to-emacs "viper-cmd" (&rest _)) ;; Ex tag command (defun ex-tag () @@ -2183,7 +2190,7 @@ Please contact your system administrator. " (defun ex-compile () "Reads args from the command line, then runs make with the args. If no args are given, then it runs the last compile command. -Type 'mak ' (including the space) to run make with no args." +Type `mak ' (including the space) to run make with no args." (let (args) (with-current-buffer (setq viper-ex-work-buf (get-buffer-create viper-ex-work-buf-name))