Make the sys.path remove in Python mode customizable (Bug#7454).

* progmodes/python.el (run-python): Doc fix.
(python-keep-current-directory-in-path): New var (Bug#7454).
This commit is contained in:
Chong Yidong 2010-11-21 11:52:05 -05:00
parent 0d6607ab81
commit 1d851570a6
3 changed files with 38 additions and 15 deletions

View file

@ -1426,6 +1426,16 @@ Default ignores all inputs of 0, 1, or 2 non-blank characters."
:type 'regexp
:group 'python)
(defcustom python-remove-cwd-from-path t
"Whether to allow loading of Python modules from the current directory.
If this is non-nil, Emacs removes '' from sys.path when starting
an inferior Python process. This is the default, for security
reasons, as it is easy for the Python process to be started
without the user's realization (e.g. to perform completion)."
:type 'boolean
:group 'python
:version "23.3")
(defun python-input-filter (str)
"`comint-input-filter' function for inferior Python.
Don't save anything for STR matching `inferior-python-filter-regexp'."
@ -1523,20 +1533,24 @@ Don't save anything for STR matching `inferior-python-filter-regexp'."
;;;###autoload
(defun run-python (&optional cmd noshow new)
"Run an inferior Python process, input and output via buffer *Python*.
CMD is the Python command to run. NOSHOW non-nil means don't show the
buffer automatically.
CMD is the Python command to run. NOSHOW non-nil means don't
show the buffer automatically.
Normally, if there is a process already running in `python-buffer',
switch to that buffer. Interactively, a prefix arg allows you to edit
the initial command line (default is `python-command'); `-i' etc. args
will be added to this as appropriate. A new process is started if:
one isn't running attached to `python-buffer', or interactively the
default `python-command', or argument NEW is non-nil. See also the
documentation for `python-buffer'.
Interactively, a prefix arg means to prompt for the initial
Python command line (default is `python-command').
Runs the hook `inferior-python-mode-hook' \(after the
`comint-mode-hook' is run). \(Type \\[describe-mode] in the process
buffer for a list of commands.)"
A new process is started if one isn't running attached to
`python-buffer', or if called from Lisp with non-nil arg NEW.
Otherwise, if a process is already running in `python-buffer',
switch to that buffer.
This command runs the hook `inferior-python-mode-hook' after
running `comint-mode-hook'. Type \\[describe-mode] in the
process buffer for a list of commands.
By default, Emacs inhibits the loading of Python modules from the
current working directory, for security reasons. To disable this
behavior, change `python-remove-cwd-from-path' to nil."
(interactive (if current-prefix-arg
(list (read-string "Run Python: " python-command) nil t)
(list python-command)))
@ -1549,9 +1563,9 @@ buffer for a list of commands.)"
(when (or new (not (comint-check-proc python-buffer)))
(with-current-buffer
(let* ((cmdlist
(append (python-args-to-list cmd)
;; See http://lists.gnu.org/archive/html/emacs-devel/2008-09/msg00215.html
'("-i" "-c" "import sys; sys.path.remove('')")))
(append (python-args-to-list cmd) '("-i")
(if python-remove-cwd-from-path
'("-c" "import sys; sys.path.remove('')"))))
(path (getenv "PYTHONPATH"))
(process-environment ; to import emacs.py
(cons (concat "PYTHONPATH="