[ESS] keybinding for (ess-eval-paragraph) and more

Martin Maechler maechler at stat.math.ethz.ch
Fri Mar 17 16:01:15 CET 2006


>>>>> "Dan" == Dan Bolser <dmb at mrc-dunn.cam.ac.uk>
>>>>>     on Fri, 17 Mar 2006 13:51:21 +0000 writes:

    Dan> Martin Maechler wrote:
    >>>>>>> "Dan" == Dan Bolser <dmb at mrc-dunn.cam.ac.uk>
    >>>>>>> on Fri, 17 Mar 2006 10:20:55 +0000 writes:
    >> 
    >> 
    Dan> I thought I would post this code in the case that anyone finds it 
    Dan> useful, or can offer some improvements. I use sql-mode all the time, so 
    Dan> I find this function 'missing' from ess...
    >> 
    >> 
    Dan> (defun ess-eval-paragraph ()
    Dan> (interactive)
    Dan> (mark-paragraph)
    Dan> (call-interactively  'ess-eval-region)
    Dan> ;;(with-current-buffer "*R*" (end-of-buffer))
    Dan> ;;(save-excursion (ess-switch-to-end-of-ESS))
    Dan> (end-of-buffer-other-window 0)
    Dan> (forward-paragraph)
    Dan> )
    >> 
    >> Hmm,  ess-inf.el has been containing -- for about 10.5 years it
    >> seems:
    >> 
    >> ---------------------------------------------------------------    
    >> 
    >> ;; This is from	 Mary Lindstrom <lindstro at Biostat.Wisc.Edu>
    >> ;; 31 Aug 1995 14:11:43		To: S-mode at stat.math.ethz.ch
    >> (defun ess-eval-paragraph (vis)
    >> "Send the current paragraph to the inferior ESS process.
    >> Prefix arg VIS toggles visibility of ess-code as for `ess-eval-region'."
    >> (interactive "P")
    >> (ess-force-buffer-current "Process to load into: ")
    >> (save-excursion
    >> (forward-paragraph)
    >> (let ((end (point)))
    >> (backward-paragraph)
    >> (ess-eval-region (point) end vis "Eval paragraph"))))
    >> 
    >> ---------------------------------------------------------------    
    >> 
    >> but it is not (yet) bound to any key inside ESS,

    Dan> Or anywhere in the ESS 'eval' menus.


    >> as you propose here :
    >> 
    Dan> (global-set-key (kbd "C-c C-c") 'ess-eval-paragraph)
    >> 
    >> Since I just see that  C-c C-c  is indeed unbound
    >> in the *.R buffers,  we could adopt your proposed key binding
    >> indeed.
    >> 
    >> What do others think about the proposed keybinding?
    >> 

    Dan> I think its good because 'sql-mode' uses the same binding for the same 
    Dan> function (but writing to an SQL process obviously).


    >> I could envisage an even smarter thing:
    >> 
    >> Bind C-c C-c to  ess-eval-paragraph-or-function
    >> which does not yet exist, but which would
    >> 
    >> - see if we are inside of a function definition;
    >> - if yes, call ess-eval-function
    >> - if  no, call ess-eval-paragraph
    >> 
    >> What do people think about this?

    Dan> I think that would be a good addition, because I have been writing 
    Dan> functions (loops actually) with non optimal layout simply for the 
    Dan> convenience of sending the code in one go with C-c C-c. If there was a 
    Dan> 'block' check, that would be nice also. Personally I like the R process 
    Dan> buffer to  jump to the end after I send a command, else I feel like I am 
    Dan> sending commands 'blind', and I get irritated by the extra key strokes 
    Dan> needed to keep jumping the process buffer to the end. Could this 
    Dan> behavior (as well as the 'paragraph forward' behavior be added to the 
    Dan> config?

    Dan> I find it very convenient to skip through some code with nothing more 
    Dan> than repeated C-c's until I find the section I am developing.

The scrolling of the process buffer is ``unrelated'':
We say in the ESS manual that you should set

   comint-scroll-to-bottom-on-output

We (ESS) cannot really do it for ``political reasons'':
ESS is not the only Emacs package using "comint" the above
settings affects all of them.

In the past I have been advocating our setting (in some
default.el file; you could do this in your ~/.emacs or sitewide
in some site-start.el file :

  (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)
      )

-----------

I'm not sure about the exact effect of the 2nd variable,
    comint-scroll-show-maximum-output

which we *fail* to mention in the ESS manual.
Can anyone check / confirm if its setting to 't' is still as
important as my comment above (``this is the key'') seems to
implicate ?




More information about the ESS-help mailing list