Commits

Anonymous committed 3b37e50

* viper-cmd.el (viper-insert-isearch-string): new function.
(viper-if-string): redefine C-s in the minibuffer to insert the last
incremental search string.

* Changes from the Emacs trunk: last-command-char replaced by
last-command-event, 2009 added in copyright notices.

* viper.el: date change.

* viper-cmd.el (viper-envelop-ESC-key):
viper-translate-all-ESC-keysequences is now a function.

* viper-init (viper-translate-all-ESC-keysequences): make this variable
into a function.

* viper.texi (viper-translate-all-ESC-keysequences): description removed.

Comments (0)

Files changed (10)

+2009-08-15  Michael Kifer  <kifer@cs.stonybrook.edu>
+	
+	* viper-cmd.el (viper-insert-isearch-string): new function.
+	(viper-if-string): redefine C-s in the minibuffer to insert the last
+	incremental search string.
+	
+	* Changes from the Emacs trunk: last-command-char replaced by
+	last-command-event, 2009 added in copyright notices.
+	
+	* viper.el: date change.
+	
+	* viper-cmd.el (viper-envelop-ESC-key):
+	viper-translate-all-ESC-keysequences is now a function.
+	
+	* viper-init (viper-translate-all-ESC-keysequences): make this variable
+	into a function.
+	
+	* viper.texi (viper-translate-all-ESC-keysequences): description removed.
+	
 2008-11-23  Norbert Koch  <viteno@xemacs.org>
 
 	* Makefile (VERSION): XEmacs package 1.65 released.
 ;;; viper-cmd.el --- Vi command support for Viper
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 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 (viper= last-command-char ?\\)
+  (if (viper= last-command-event ?\\)
       (message "Switched to EMACS state for the next command..."))
   (viper-escape-to-state arg events 'emacs-state))
 
 		    last-command-char (event-to-character last-command-event))
 	    ;; Emacs represents them as sequences (str or vec)
 	    (setq last-command-event
-		  (viper-copy-event (viper-seq-last-elt key))
-		  last-command-char last-command-event))
+		  (viper-copy-event (viper-seq-last-elt key))))
 
 	  (if (commandp com)
 	      ;; pretend that current state is the state we excaped to
 ;; bindings.  By letting Viper know which files these modes are in, it will
 ;; arrange to reorganize minor-mode-map-alist so that things will work right.
 (defun viper-harness-minor-mode (load-file)
-  "Familiarize Viper with a minor mode defined in LOAD_FILE.
+  "Familiarize Viper with a minor mode defined in LOAD-FILE.
 Minor modes that have their own keymaps may overshadow Viper keymaps.
 This function is designed to make Viper aware of the packages that define
 such minor modes.
 	;; then execute it with funcall and clear prefix-arg in order to not
 	;; confuse subsequent commands
 	(progn
-	  ;; last-command-char is the char we want emacs to think was typed
+	  ;; last-command-event is the char we want emacs to think was typed
 	  ;; last.  If com is not nil, the viper-digit-argument command was
 	  ;; called from within viper-prefix-arg command, such as `d', `w',
 	  ;; etc., i.e., the user typed, say, d2.  In this case, `com' would be
 	  ;; viper-escape-to-vi (which is indicated by the fact that the
 	  ;; current state is not vi-state), then `event-char' represents the
 	  ;; vi command to be executed (e.g., `d', `w', etc).  Again,
-	  ;; last-command-char must make emacs believe that this is the command
+	  ;; last-command-event must make emacs believe that this is the command
 	  ;; we typed.
 	  (cond ((eq event-char 'return) (setq event-char ?\C-m))
 		((eq event-char 'delete) (setq event-char ?\C-?))
 		((eq event-char 'backspace) (setq event-char ?\C-h))
 		((eq event-char 'space) (setq event-char ?\ )))
-	  (setq last-command-char (or com event-char))
+	  (setq last-command-event (or com event-char))
 	  (setq func (viper-exec-form-in-vi
 		      `(key-binding (char-to-string ,event-char))))
 	  (funcall func prefix-arg)
     
     (if cmd-to-exec-at-end
 	(progn
-	  (setq last-command-char char)
 	  (setq last-command-event
 		(viper-copy-event
 		 (if (featurep 'xemacs) (character-to-event char) char)))
   (interactive "P")
   (viper-leave-region-active)
   (viper-prefix-arg-value
-   last-command-char (if (consp arg) (cdr arg) nil)))
+   last-command-event (if (consp arg) (cdr arg) nil)))
 
 (defun viper-command-argument (arg)
   "Accept a motion command as an argument."
   (let ((viper-intermediate-command 'viper-command-argument))
     (condition-case nil
 	(viper-prefix-arg-com
-	 last-command-char
+	 last-command-event
 	 (cond ((null arg) nil)
 	       ((consp arg) (car arg))
 	       ((integerp arg) arg)
   "Exit minibuffer Viper way."
   (interactive)
   (let (command)
-    (setq command (local-key-binding (char-to-string last-command-char)))
+    (setq command (local-key-binding (char-to-string last-command-event)))
     (run-hooks 'viper-minibuffer-exit-hook)
     (if command
 	(command-execute command)
   (let (com)
     (if (eq this-command 'viper-intercept-ESC-key)
 	(setq com 'viper-exit-insert-state)
-      (viper-set-unread-command-events last-input-char)
+      (viper-set-unread-command-events last-input-event)
       (setq com (key-binding (viper-read-key-sequence nil))))
 
     (condition-case conds
   (if (or (< (point) (viper-replace-start))
 	  (> (point) (viper-replace-end)))
       (let (viper-replace-minor-mode com)
-	(viper-set-unread-command-events last-input-char)
+	(viper-set-unread-command-events last-input-event)
 	(setq com (key-binding (read-key-sequence nil)))
 	(condition-case conds
 	    (command-execute com)
 
 ;; searching
 
+(defun viper-insert-isearch-string ()
+  "Insert `isearch' last search string."
+  (interactive)
+  (when isearch-string (insert isearch-string)))
+
 (defun viper-if-string (prompt)
   (if (memq viper-intermediate-command
 	    '(viper-command-argument viper-digit-argument viper-repeat))
       (setq viper-this-command-keys (this-command-keys)))
-  (let ((s (viper-read-string-with-history
+  (let* ((keymap (let ((keymap (copy-keymap minibuffer-local-map)))
+                   (define-key keymap [(control ?s)] 'viper-insert-isearch-string)
+                   keymap))
+         (s (viper-read-string-with-history
 	    prompt
 	    nil ; no initial
 	    'viper-search-history
-	    (car viper-search-history))))
+             (car viper-search-history)
+             keymap)))
     (if (not (string= s ""))
 	(setq viper-s-string s))))
 
 ;;; viper-ex.el --- functions implementing the Ex commands for Viper
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 ;;; viper-init.el --- some common definitions for Viper
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 ;;; viper-keym.el --- Viper keymaps
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 (provide 'viper-keym)
 
 
-;;; Local Variables:
-;;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
-;;; End:
+;; Local Variables:
+;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
+;; End:
 
 
 ;; arch-tag: 43af4b2f-0bea-400b-889e-221ebc00acb1
 ;;; viper-macs.el --- functions implementing keyboard macros for Viper
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 ;;; viper-mous.el --- mouse support for Viper
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 
 
 
-;;; Local Variables:
-;;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
-;;; End:
+;; Local Variables:
+;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
+;; End:
 
 
 ;; arch-tag: e56b2390-06c4-4dd1-96f5-c7876e2d8c2f
 ;;; viper-util.el --- Utilities used by viper.el
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
 
 
 
-;;; Local Variables:
-;;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
-;;; End:
+;; Local Variables:
+;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
+;; End:
 
 ;; arch-tag: 7f023fd5-dd9e-4378-a397-9c179553b0e3
 ;;; viper-util.el ends here
 ;;		 Viper Is also a Package for Emacs Rebels.
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-;;   2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Keywords: emulations
 ;; filed in the Emacs bug reporting system against this file, a copy
 ;; of the bug report be sent to the maintainer's email address.
 
-(defconst viper-version "3.14 of November 22, 2008"
+(defconst viper-version "3.14.1 of August 15, 2009"
   "The current version of Viper")
 
 ;; This file is part of GNU Emacs.
 ;;    convoluted.  Instead of viper-command-argument, keymaps should bind the
 ;;    actual commands.  E.g., "dw" should be bound to a generic command
 ;;    viper-delete that will delete things based on the value of
-;;    last-command-char.  This would greatly simplify the logic and the code.
+;;    last-command-event.  This would greatly simplify the logic and the code.
 ;;
 ;; 2. Somebody should venture to write a customization package a la
 ;;    options.el that would allow the user to change values of variables
 
 @copying
 Copyright @copyright{} 1995, 1996, 1997, 2001, 2002, 2003, 2004,
-2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
+under the terms of the GNU Free Documentation License, Version 1.3 or
 any later version published by the Free Software Foundation; with no
 Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
 and with the Back-Cover Texts as in (a) below.  A copy of the license
 @insertcopying
 @end titlepage
 
+@contents
+
 @ifnottex
 @node Top, Overview,, (DIR)
 
 @code{kifer@@cs.stonybrook.edu} is the current address for Viper bug reports.
 Please use the Ex command @kbd{:submitReport} for this purpose.@refill
 
+@insertcopying
 @end ifnottex
 
 @menu
 * Concept Index::               Vi, Ex and Emacs concepts
 
 * Acknowledgments::
+* GNU Free Documentation License:: The license for this documentation.
+
 @end menu
 @iftex
 @unnumbered Introduction
 associated with the buffer is write protected.  The mode line will also
 show the buffer name and current major and minor modes (see below).
 A special buffer called @dfn{Minibuffer} is displayed as the last line
-in a Minibuffer window.  The Minibuffer window is used for command input
-output.  Viper uses Minibuffer window for @kbd{/} and @kbd{:}
+in a minibuffer window.  The minibuffer window is used for command input
+output.  Viper uses minibuffer window for @kbd{/} and @kbd{:}
 commands.@refill
 
 @cindex mode
 easy to override valuable data in another file.  Reconstructing the full
 command, @kbd{:w!@: foo}, from the history is still not that hard, since Viper
 has a separate history for file names.  By typing @kbd{: M-p}, you will get
-@kbd{:w!} in the Minibuffer.  Then, repeated @kbd{M-p} will get you through
+@kbd{:w!} in the minibuffer.  Then, repeated @kbd{M-p} will get you through
 the file history, inserting one file name after another.
 
 In contrast to @kbd{:w!@: foo}, if the command were @kbd{:r foo}, the entire
 @refill
 @end table
 @noindent
-As Vi, Viper's destructive commands can be re-executed by typing `@kbd{.}'.
+As in Vi, Viper's destructive commands can be re-executed by typing `@kbd{.}'.
 However, in addition, Viper keeps track of the history of such commands.  This
 history can be perused by typing @kbd{C-c M-p} and @kbd{C-c M-n}.
 Having found the appropriate command, it can be then executed by typing
 
 @cindex Minibuffer
 
-The Minibuffer is where commands are entered in.  Editing can be done
+The minibuffer is where commands are entered in.  Editing can be done
 by commands from Insert state, namely:
 
 @table @kbd
 These keys are bound to functions that peruse minibuffer history.  The
 precise history to be perused depends on the context.  It may be the history
 of search strings, Ex commands, file names, etc.
+@item C-s
+If the minibuffer is entered via the Viper search commands @kbd{/} or
+@kbd{?}, then this key inserts the last search string used by the
+Emacs incremental search command
+(which is bound to @kbd{C-s} everywhere except in this case).
 @end table
 
-Most of the Emacs keys are functional in the Minibuffer.  While in the
-Minibuffer, Viper tries to make editing resemble Vi's behavior when the
+Most of the Emacs keys are functional in the minibuffer.  While in the
+minibuffer, Viper tries to make editing resemble Vi's behavior when the
 latter is waiting for the user to type an Ex command.  In particular, you
-can use the regular Vi commands to edit the Minibuffer.  You can switch
+can use the regular Vi commands to edit the minibuffer.  You can switch
 between the Vi state and Insert state at will, and even use the replace mode.
-Initially, the Minibuffer comes up in Insert state.
-
-Some users prefer plain Emacs bindings in the Minibuffer.  To this end, set
+Initially, the minibuffer comes up in Insert state.
+
+Some users prefer plain Emacs bindings in the minibuffer.  To this end, set
 @code{viper-vi-style-in-minibuffer} to @code{nil} in @file{.viper}.
 @xref{Customization}, to learn how to do this.
 
-When the Minibuffer changes Viper states, you will notice that the appearance
-of the text there changes as well.  This is useful because the Minibuffer
+When the minibuffer changes Viper states, you will notice that the appearance
+of the text there changes as well.  This is useful because the minibuffer
 has no mode line to tell which Vi state it is in.
-The appearance of the text in the Minibuffer can be changed.
+The appearance of the text in the minibuffer can be changed.
 @xref{Viper Specials}, for more details.
 
 @node Multiple Files in Viper,Unimplemented Features,The Minibuffer,Overview
 file name in any
 @kbd{:e}, @kbd{:r}, @kbd{:w}, etc., command (in Emacs, each buffer has a
 current directory).
-This directory is inserted in the Minibuffer once you type space after
+This directory is inserted in the minibuffer once you type space after
 @kbd{:e, r}, etc.  Viper also supports completion of file names and Ex
 commands (@key{TAB}), and it keeps track of
 command and file history (@kbd{M-p}, @kbd{M-n}).
 useful for fixing those small typos that screw up searches and @kbd{:s},
 and for eliminating routine associated with repeated typing of file names
 or pieces of text that need to be inserted frequently.
-At the @kbd{:} or @kbd{/} prompts in the Minibuffer, you can do the following:
+At the @kbd{:} or @kbd{/} prompts in the minibuffer, you can do the following:
 
 @table @kbd
 @item M-p and M-n
 @cindex query replace
 
 Viper also provides a query replace function that prompts through the
-Minibuffer.  It is invoked by the @kbd{Q} key in Vi state.
+minibuffer.  It is invoked by the @kbd{Q} key in Vi state.
 
 @cindex mouse search
 
 @kindex @kbd{V}
 @kindex @kbd{C-v}
 These keys are used to visit files.  @kbd{v} will switch to a buffer
-visiting file whose name can be entered in the Minibuffer.  @kbd{V} is
+visiting file whose name can be entered in the minibuffer.  @kbd{V} is
 similar, but will use a window different from the current window.
 @kbd{C-v} is like @kbd{V}, except that a new frame (X window) will be used
 instead of a new Emacs window.
 @item M-p and M-n
 @kindex @kbd{M-p}
 @kindex @kbd{M-n}
-In the Minibuffer, these commands navigate through the minibuffer
+In the minibuffer, these commands navigate through the minibuffer
 histories, such as the history of search strings, Ex commands, etc.
 
+@item C-s
+@kindex @kbd{C-s}
+If the minibuffer is entered via a Viper search commands @kbd{/} or @kbd{?},
+then typing this key inserts the last search string used by the
+Emacs incremental search command (that is bound to @kbd{C-s} everywhere
+except in this case).
+
 @item C-c M-p and C-c M-n
 @kindex @kbd{C-c M-p}
 @kindex @kbd{C-c M-n}
 otherwise, @kbd{C-h} is bound as usual in Vi.
 @item viper-vi-style-in-minibuffer t
 If not @code{nil}, Viper provides a high degree of compatibility with Vi
-insert mode when you type text in the Minibuffer; if @code{nil}, typing in
-the Minibuffer feels like plain Emacs.
+insert mode when you type text in the minibuffer; if @code{nil}, typing in
+the minibuffer feels like plain Emacs.
 @item viper-no-multiple-ESC t
 If you set this to @code{nil}, you can use @key{ESC} as Meta in Vi state.
 Normally, this is not necessary, since graphical displays have separate
 @kbd{f31}.
 
 One should not bind the above functions to @kbd{M-p} or @kbd{M-n}, since
-this will interfere with the Minibuffer histories and, possibly, other
+this will interfere with the minibuffer histories and, possibly, other
 major modes.
 
 @item viper-command-ring-size  14
 @code{viper-next-destructive-command} or hit any digit (1 to 9) then @kbd{f31}.
 
 One should not bind the above functions to @kbd{M-p} or @kbd{M-n}, since
-this will interfere with the Minibuffer histories and, possibly, other
+this will interfere with the minibuffer histories and, possibly, other
 major modes.
 
 @item viper-minibuffer-vi-face  'viper-minibuffer-vi-face
 in Viper's @emph{Highlighting} customization subgroup.
 
 Note that only the text you type in is affected by the above faces.
-Prompts and Minibuffer messages are not affected.
+Prompts and minibuffer messages are not affected.
 
 Purists who do not like adornments in the minibuffer can always zap them by
 putting
 detect such loops.  In practice, this is not really a limitation but,
 rather, a feature.
 
-We should also note that Vi macros are disabled in the Minibuffer, which
+We should also note that Vi macros are disabled in the minibuffer, which
 helps keep some potential troubles away.
 
 The rate at which the user must type keys in order for them to be
 Successive typing of @kbd{C-c M-p} causes Viper to search the history in
 the direction
 of older commands, while hitting @kbd{C-c M-n} does so in reverse
-order.  Each command in the history is displayed in the Minibuffer.  The
+order.  Each command in the history is displayed in the minibuffer.  The
 displayed command can
 then be executed by typing `@kbd{.}'.
 
 
 Minibuffer can be edited similarly to Insert state, and you can switch
 between Insert/Replace/Vi states at will.
-Some users prefer plain Emacs feel in the Minibuffer.  To this end, set
+Some users prefer plain Emacs feel in the minibuffer.  To this end, set
 @var{viper-vi-style-in-minibuffer} to @code{nil}.
 
 @cindex Insert state
 found there (e.g., @samp{~} is not expanded to the result of the previous
 substitution).
 
+After typing @kbd{/} or @kbd{?} all the usual Emacs minibuffer commands, such as
+@kbd{M-p} and @kbd{M-n} are available. In addition, typing @kbd{C-s} will
+insert the last search string used by the Emacs incremental search command
+(which is bound to @kbd{C-s} everywhere except in this case).
+
 @item <count>  ?<string>
 To the <count>th previous occurrence of <string>.
 @item <count>  g<move>
 Read the file <name> into the buffer after the line <address>.
 @item v, V, C-v
 Edit a file in current or another window, or in another frame.  File name
-is typed in Minibuffer.  File completion and history are supported.
+is typed in minibuffer.  File completion and history are supported.
 @end table
 @kindex @kbd{v}
 @kindex @kbd{V}
 zapman@@cc.gatech.edu (Jason Zapman II),
 @end example
 
+@node GNU Free Documentation License,,, Top
+@appendix GNU Free Documentation License
+@comment @include doclicense.texi
 
 @node Key Index,Function Index,,Top
 @comment  node-name,  next,  previous,  up
 
 @printindex cp
 
-@setchapternewpage odd
-@contents
 @bye
 
 @ignore