Commit 11f21560 authored by Barry Warsaw's avatar Barry Warsaw

(python-mode): Set which interpreter (CPython or JPython) to use the

first time a py buffer is visited during the Emacs session.  This
ensures that py-which-shells is initialized and also guarantees that
the mode lines reflect the correct shell.  First bug found by GvR,
second one has long bugged :) me.

(py-toggle-shells): Programmatically, arg can also take the symbols
`cpython' or `jpython', which makes it easy to call with the value of
py-default-interpreter.

(py-shell): Don't need to initialize py-which-* variables since these
will guarantee to be initialized by python-mode when the first py
buffer is visited.

(py-default-interpreter): Update docstring.
parent 2ab455a8
...@@ -122,7 +122,7 @@ When the value is `jpython', the variables `py-jpython-command' and ...@@ -122,7 +122,7 @@ When the value is `jpython', the variables `py-jpython-command' and
and arguments to use. and arguments to use.
Note that this variable is consulted only the first time that a Python Note that this variable is consulted only the first time that a Python
interpreter shell is started during an Emacs session. After that, use mode buffer is visited during an Emacs session. After that, use
\\[py-toggle-shells] to change the interpreter shell." \\[py-toggle-shells] to change the interpreter shell."
:type '(choice (const :tag "Python (a.k.a. CPython)" cpython) :type '(choice (const :tag "Python (a.k.a. CPython)" cpython)
(const :tag "JPython" jpython)) (const :tag "JPython" jpython))
...@@ -989,7 +989,11 @@ py-beep-if-tab-change\t\tring the bell if `tab-width' is changed" ...@@ -989,7 +989,11 @@ py-beep-if-tab-change\t\tring the bell if `tab-width' is changed"
;; have explicitly turned it off. ;; have explicitly turned it off.
(if (/= tab-width py-indent-offset) (if (/= tab-width py-indent-offset)
(setq indent-tabs-mode nil)) (setq indent-tabs-mode nil))
))) ))
;; Set the default shell if not already set
(when (null py-which-shell)
(py-toggle-shells py-default-interpreter))
)
;; electric characters ;; electric characters
...@@ -1122,18 +1126,26 @@ If an exception occurred return t, otherwise return nil. BUF must exist." ...@@ -1122,18 +1126,26 @@ If an exception occurred return t, otherwise return nil. BUF must exist."
(defun py-toggle-shells (arg) (defun py-toggle-shells (arg)
"Toggles between the CPython and JPython shells. "Toggles between the CPython and JPython shells.
With positive argument ARG (interactively \\[universal-argument]), With positive argument ARG (interactively \\[universal-argument]),
uses the CPython shell, with negative ARG uses the JPython shell, and uses the CPython shell, with negative ARG uses the JPython shell, and
with a zero argument, toggles the shell." with a zero argument, toggles the shell.
Programmatically, ARG can also be one of the symbols `cpython' or
`jpython', equivalent to positive arg and negative arg respectively."
(interactive "P") (interactive "P")
;; default is to toggle ;; default is to toggle
(if (null arg) (if (null arg)
(setq arg 0)) (setq arg 0))
;; toggle if zero ;; preprocess arg
(if (= arg 0) (cond
((equal arg 0)
;; toggle
(if (string-equal py-which-bufname "Python") (if (string-equal py-which-bufname "Python")
(setq arg -1) (setq arg -1)
(setq arg 1))) (setq arg 1)))
((equal arg 'cpython) (setq arg 1))
((equal arg 'jpython) (setq arg -1)))
(let (msg) (let (msg)
(cond (cond
((< 0 arg) ((< 0 arg)
...@@ -1192,15 +1204,6 @@ interaction between undo and process filters; the same problem exists in ...@@ -1192,15 +1204,6 @@ interaction between undo and process filters; the same problem exists in
non-Python process buffers using the default (Emacs-supplied) process non-Python process buffers using the default (Emacs-supplied) process
filter." filter."
(interactive "P") (interactive "P")
(if (null py-which-shell)
(cond ((eq py-default-interpreter 'cpython)
(setq py-which-shell py-python-command
py-which-args py-python-command-args))
((eq py-default-interpreter 'jpython)
(setq py-which-shell py-jpython-command
py-which-args py-jpython-command-args))
(t (error "Illegal value for `py-default-interpreter': %s"
py-default-interpreter))))
(let ((args py-which-args)) (let ((args py-which-args))
(when (and argprompt (when (and argprompt
(interactive-p) (interactive-p)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment