[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Evaluate current line in Python mode?

From: Andreas Röhler
Subject: Re: Evaluate current line in Python mode?
Date: Mon, 30 Aug 2010 12:43:54 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; de; rv: Gecko/20100711 Thunderbird/3.0.6

Am 29.08.2010 10:37, schrieb Thierry Volpiatto:
Andreas Röhler<>  writes:

Am 28.08.2010 21:45, schrieb Michael Hannon:
Greetings.  I use Emacs for, among other things, running Python code and R
code.  In both modes (Python and ESS "Emacs Speaks Statistics") there is a
function bound to the sequence:

      C-c C-n

Both functions advance to the next line of code in the buffer, i.e., skipping
blank lines, comment lines, etc.

In ESS mode the function bound to C-c C-n also (by default) sends the current
line to R for evaluation.  I find this to be very convenient as a way to watch
calculations "evolve".

It's possible to do something similar in Python mode by selecting the
current line and then sending the region (C-c C-r) to Python for evaluation,
but this is a bit cumbersome.

Can anybody suggest a way to graft the ESS-mode behavior onto Python mode?

Try this:

(defun my-python-send-region (&optional beg end)
   (let ((beg (cond (beg beg)
                    (t (line-beginning-position))))
         (end (cond (end end)
                     (copy-marker (region-end)))
                    (t (line-end-position)))))
     (python-send-region beg end)))

Comments welcome

Isn't it simpler:

(defun my-python-send-region (beg end)
   (interactive "r")
   (if (eq beg end)
       (python-send-region (point-at-bol) (point-at-eol))
       (python-send-region beg end)))

"r" complains if no mark is set
Did choose the default getting rid of that constraint

Otherwise, with cond you can write

(cond (beg)

instead of

(cond (beg beg)
       (end end))

Indeed, will change this.




I've appended the high-level descriptions of both functions.  I understand
that the source code is available, and that I'm free to hack away to my
heart's content.  I just don't have the skills at Emacs/Lisp required to do
such a thing in a finite amount of time.

Thanks and best wishes,

-- Mike

      Python mode

C-c C-n runs the command python-next-statement, which is an
interactive compiled Lisp function.

It is bound to C-c C-n.

(python-next-statement&optional COUNT)

Go to start of next statement.
With argument COUNT, do it COUNT times.  Stop at end of buffer.
Return count of statements left to move.


      ESS mode

C-c C-n runs the command ess-eval-line-and-step, which is an
interactive compiled Lisp function in `ess-inf.el'.

It is bound to C-c C-n, C-c C-e C-n,<menu-bar>   <ESS>   <ESS Eval>   <Eval
line&   step>.

(ess-eval-line-and-step&optional SIMPLE-NEXT EVEN-EMPTY INVISIBLY)

Evaluate the current line visibly and step to the "next" line.
"next" = the next line with non-comment code _unless_ SIMPLE-NEXT is non-nil,
possibly via prefix arg.  If 2nd arg EVEN-EMPTY [prefix as well],
also send empty lines.    When the variable `ess-eval-empty' is non-nil
both SIMPLE-NEXT and EVEN-EMPTY are interpreted as true.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]