[ESS] History Expansion

Martin Maechler maechler at stat.math.ethz.ch
Tue Jun 22 09:46:50 CEST 2010


>>>>> "VJ" == Vinu Jacob <vinjacob at gmail.com>
>>>>>     on Tue, 22 Jun 2010 09:13:30 +0300 writes:

    VJ> Hello,
    VJ> I can't seem to get history expansion working with '!'
    VJ> or '^', as mentioned in the manual. 

which manual?   I don't think this ever worked (in R at least).

    VJ> Even '!!' does not give me the previous command, it waits for further commands with a '+'. This is on osx 10.6 with emacs 23.2.1 (Vincent Goulet's package)
    VJ> What could be wrong?
nothing.

It's the Emacs-lisp function
     comint-previous-matching-input-from-input
which you want to call.
It's also on the "In/Out" Emacs menu, there labelled
"Previous Matching Current Input".

I (and many others I think, see below on *how*) have bound this
command to  "[up]" i.e. the up-arrow key, in addition to its traditional
binding  C-c M-r.   When I work inside *R* (not so often, I
prefer *.R and the "Eval-.." aka "send .. to R" commands) 
I use the up-key all the time for this feature

Type
	C-h w   comint-previous-matching-input-from-input 

(when you are inside the *R* / *S+* buffer)
to show you to which keys it is bound.

Ok, here's the code to activate the up / down keys in that way

  (eval-after-load
   "comint"
   '(progn
      (setq comint-scroll-to-bottom-on-output 'others) ; not current
      ;;=default: (setq comint-scroll-to-bottom-on-input nil)
      (setq comint-scroll-show-maximum-output t) ;;; this is the key
      (define-key comint-mode-map [up]
        'comint-previous-matching-input-from-input)
      (define-key comint-mode-map [down]
        'comint-next-matching-input-from-input)

      (define-key comint-mode-map "\C-a" 'comint-bol)
      )
   )

The reason why we cannot do this in ESS already, is that it
influences all "Comint" based modes, e.g. also *shell* (M-x shell),
not just the ESS based ones.

Martin Maechler, ETH Zurich



More information about the ESS-help mailing list