aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/python.el
diff options
context:
space:
mode:
authorFabián Ezequiel Gallina2012-05-17 00:03:03 -0300
committerFabián Ezequiel Gallina2012-05-17 00:03:03 -0300
commitd439cda5982b3c56b6817870f075bcc8860f7785 (patch)
treee5faf165ceb5cf9a80e58f10a5768b59398eaf36 /lisp/progmodes/python.el
parent57808175eb11ac0cdcdeb9a545c7707da433c827 (diff)
downloademacs-d439cda5982b3c56b6817870f075bcc8860f7785.tar.gz
emacs-d439cda5982b3c56b6817870f075bcc8860f7785.zip
Enhanced python-shell-send-file function
python-shell-send-file function now can be called interactively and will do the right thing. Also the python code that sent the file was improved so the shell considers the correct path when evaluating the file. Removed the inferior-python-mode-current-temp-file variable, after this update inferior-python-mode-current-file is enough.
Diffstat (limited to 'lisp/progmodes/python.el')
-rw-r--r--lisp/progmodes/python.el39
1 files changed, 23 insertions, 16 deletions
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index a243f6cbe25..317ef2e1282 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -956,10 +956,6 @@ OUTPUT is a string with the contents of the buffer."
956 "Current file from which a region was sent.") 956 "Current file from which a region was sent.")
957(make-variable-buffer-local 'inferior-python-mode-current-file) 957(make-variable-buffer-local 'inferior-python-mode-current-file)
958 958
959(defvar inferior-python-mode-current-temp-file nil
960 "Current temp file sent to process.")
961(make-variable-buffer-local 'inferior-python-mode-current-file)
962
963(define-derived-mode inferior-python-mode comint-mode "Inferior Python" 959(define-derived-mode inferior-python-mode comint-mode "Inferior Python"
964 "Major mode for Python inferior process." 960 "Major mode for Python inferior process."
965 (set-syntax-table python-mode-syntax-table) 961 (set-syntax-table python-mode-syntax-table)
@@ -1077,10 +1073,7 @@ commands.)"
1077 (message (format "Sent: %s..." 1073 (message (format "Sent: %s..."
1078 (buffer-substring (point-min) 1074 (buffer-substring (point-min)
1079 (line-end-position))))) 1075 (line-end-position)))))
1080 (with-current-buffer (process-buffer process) 1076 (python-shell-send-file current-file process temp-file)))
1081 (setq inferior-python-mode-current-file current-file)
1082 (setq inferior-python-mode-current-temp-file temp-file))
1083 (python-shell-send-file temp-file process)))
1084 1077
1085(defun python-shell-send-buffer () 1078(defun python-shell-send-buffer ()
1086 "Send the entire buffer to inferior Python process." 1079 "Send the entire buffer to inferior Python process."
@@ -1103,15 +1096,26 @@ When argument ARG is non-nil sends the innermost defun."
1103 (or (python-end-of-defun-function) 1096 (or (python-end-of-defun-function)
1104 (progn (end-of-line) (point-marker))))))) 1097 (progn (end-of-line) (point-marker)))))))
1105 1098
1106(defun python-shell-send-file (file-name &optional process) 1099(defun python-shell-send-file (file-name &optional process temp-file-name)
1107 "Send FILE-NAME to inferior Python PROCESS." 1100 "Send FILE-NAME to inferior Python PROCESS.
1101If TEMP-FILE-NAME is passed then that file is used for processing
1102instead, while internally the shell will continue to use
1103FILE-NAME."
1108 (interactive "fFile to send: ") 1104 (interactive "fFile to send: ")
1109 (let ((process (or process (python-shell-get-or-create-process))) 1105 (let ((process (or process (python-shell-get-or-create-process)))
1110 (full-file-name (expand-file-name file-name))) 1106 (file-name (convert-standard-filename (expand-file-name file-name)))
1107 (temp-file-name (when temp-file-name
1108 (convert-standard-filename
1109 (expand-file-name temp-file-name)))))
1110 (find-file-noselect file-name)
1111 (with-current-buffer (process-buffer process)
1112 (setq inferior-python-mode-current-file file-name))
1111 (python-shell-send-string 1113 (python-shell-send-string
1112 (format 1114 (format
1113 "__pyfile = open('%s'); exec(compile(__pyfile.read(), '%s', 'exec')); __pyfile.close()" 1115 (concat "__pyfile = open('''%s''');"
1114 full-file-name full-file-name) 1116 "exec(compile(__pyfile.read(), '''%s''', 'exec'));"
1117 "__pyfile.close()")
1118 (or temp-file-name file-name) file-name)
1115 process))) 1119 process)))
1116 1120
1117(defun python-shell-clear-latest-output () 1121(defun python-shell-clear-latest-output ()
@@ -1289,8 +1293,7 @@ Returns a cons with the form:
1289 (or 1293 (or
1290 (assq (current-buffer) python-pdbtrack-tracking-buffers) 1294 (assq (current-buffer) python-pdbtrack-tracking-buffers)
1291 (let* ((file (with-current-buffer (current-buffer) 1295 (let* ((file (with-current-buffer (current-buffer)
1292 (or inferior-python-mode-current-file 1296 inferior-python-mode-current-file))
1293 inferior-python-mode-current-temp-file)))
1294 (tracking-buffers 1297 (tracking-buffers
1295 `(,(current-buffer) . 1298 `(,(current-buffer) .
1296 ,(or (get-file-buffer file) 1299 ,(or (get-file-buffer file)
@@ -1316,7 +1319,7 @@ Argument OUTPUT is a string with the output from the comint process."
1316 (string-match 1319 (string-match
1317 (format python-pdbtrack-stacktrace-info-regexp 1320 (format python-pdbtrack-stacktrace-info-regexp
1318 (regexp-quote 1321 (regexp-quote
1319 inferior-python-mode-current-temp-file)) 1322 inferior-python-mode-current-file))
1320 full-output) 1323 full-output)
1321 (string-to-number (or (match-string-no-properties 1 full-output) "")))) 1324 (string-to-number (or (match-string-no-properties 1 full-output) ""))))
1322 (tracked-buffer-window (get-buffer-window (cdr tracking-buffers))) 1325 (tracked-buffer-window (get-buffer-window (cdr tracking-buffers)))
@@ -1577,6 +1580,10 @@ It is specially designed to be added to the
1577 (message (format "Eldoc setup code sent."))))) 1580 (message (format "Eldoc setup code sent.")))))
1578 1581
1579(defun python-eldoc--get-doc-at-point (&optional force-input force-process) 1582(defun python-eldoc--get-doc-at-point (&optional force-input force-process)
1583 "Internal implementation to get documentation at point.
1584If not FORCE-INPUT is passed then what `current-word' returns
1585will be used. If not FORCE-PROCESS is passed what
1586`python-shell-get-process' returns is used."
1580 (let ((process (or force-process (python-shell-get-process)))) 1587 (let ((process (or force-process (python-shell-get-process))))
1581 (if (not process) 1588 (if (not process)
1582 "Eldoc needs an inferior Python process running." 1589 "Eldoc needs an inferior Python process running."