From 75e114fa3b0b45a6356ae3fb580e8c928b45c258 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabi=C3=A1n=20Ezequiel=20Gallina?= Date: Tue, 23 Dec 2014 00:45:22 -0300 Subject: [PATCH] Fix line numbers on Python shell. * lisp/progmodes/python.el (python-shell--save-temp-file): Do not append coding cookie. (python-shell-send-string): Generalize for python-shell-send-region. (python--use-fake-loc): Delete var. (python-shell-buffer-substring): Cleanup fake-loc logic. (python-shell-send-region): Remove fake-loc logic, simplify. --- lisp/ChangeLog | 11 +++++++++++ lisp/progmodes/python.el | 40 ++++++++++------------------------------ 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c00d6bcc690..63076576871 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2014-12-23 Fabián Ezequiel Gallina + + Fix line numbers on Python shell. + * progmodes/python.el (python-shell--save-temp-file): Do not + append coding cookie. + (python-shell-send-string): Generalize for + python-shell-send-region. + (python--use-fake-loc): Delete var. + (python-shell-buffer-substring): Cleanup fake-loc logic. + (python-shell-send-region): Remove fake-loc logic, simplify. + 2014-12-22 Fabián Ezequiel Gallina * progmodes/python.el (python-indent-post-self-insert-function): diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 6d3916c07a5..632659c28bb 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2400,9 +2400,12 @@ there for compatibility with CEDET.") (concat (file-remote-p default-directory) "/tmp") temporary-file-directory)) (temp-file-name (make-temp-file "py")) + ;; XXX: Python's built-in compile function accepts utf-8 as + ;; input so there's no need to enforce a coding cookie. In + ;; the future making `coding-system-for-write' match the + ;; current buffer's coding may be a good idea. (coding-system-for-write 'utf-8)) (with-temp-file temp-file-name - (insert "# -*- coding: utf-8 -*-\n") ;Not needed for Python-3. (insert string) (delete-trailing-whitespace)) temp-file-name)) @@ -2412,8 +2415,9 @@ there for compatibility with CEDET.") (interactive "sPython command: ") (let ((process (or process (python-shell-get-or-create-process)))) (if (string-match ".\n+." string) ;Multiline. - (let* ((temp-file-name (python-shell--save-temp-file string))) - (python-shell-send-file temp-file-name process temp-file-name t)) + (let* ((temp-file-name (python-shell--save-temp-file string)) + (file-name (or (buffer-file-name) temp-file-name))) + (python-shell-send-file file-name process temp-file-name t)) (comint-send-string process string) (when (or (not (string-match "\n\\'" string)) (string-match "\n[ \t].*\n?\\'" string)) @@ -2498,12 +2502,6 @@ Returns the output. See `python-shell-send-string-no-output'." (define-obsolete-function-alias 'python-send-string 'python-shell-internal-send-string "24.3") -(defvar python--use-fake-loc nil - "If non-nil, use `compilation-fake-loc' to trace errors back to the buffer. -If nil, regions of text are prepended by the corresponding number of empty -lines and Python is told to output error messages referring to the whole -source file.") - (defun python-shell-buffer-substring (start end &optional nomain) "Send buffer substring from START to END formatted for shell. This is a wrapper over `buffer-substring' that takes care of @@ -2516,8 +2514,7 @@ the python shell: 3. Wraps indented regions under an \"if True:\" block so the interpreter evaluates them correctly." (let ((substring (buffer-substring-no-properties start end)) - (fillstr (unless python--use-fake-loc - (make-string (1- (line-number-at-pos start)) ?\n))) + (fillstr (make-string (1- (line-number-at-pos start)) ?\n)) (toplevel-block-p (save-excursion (goto-char start) (or (zerop (line-number-at-pos start)) @@ -2529,11 +2526,6 @@ the python shell: (if fillstr (insert fillstr)) (insert substring) (goto-char (point-min)) - (unless python--use-fake-loc - ;; python-shell--save-temp-file adds an extra coding line, which would - ;; throw off the line-counts, so let's try to compensate here. - (if (looking-at "[ \t]*[#\n]") - (delete-region (point) (line-beginning-position 2)))) (when (not toplevel-block-p) (insert "if True:") (delete-region (point) (line-end-position))) @@ -2557,26 +2549,14 @@ the python shell: (line-number-at-pos if-name-main-start)) ?\n))))) (buffer-substring-no-properties (point-min) (point-max))))) -(declare-function compilation-fake-loc "compile" - (marker file &optional line col)) - (defun python-shell-send-region (start end &optional nomain) "Send the region delimited by START and END to inferior Python process." (interactive "r") - (let* ((python--use-fake-loc - (or python--use-fake-loc (not buffer-file-name))) - (string (python-shell-buffer-substring start end nomain)) + (let* ((string (python-shell-buffer-substring start end nomain)) (process (python-shell-get-or-create-process)) (_ (string-match "\\`\n*\\(.*\\)" string))) (message "Sent: %s..." (match-string 1 string)) - (let* ((temp-file-name (python-shell--save-temp-file string)) - (file-name (or (buffer-file-name) temp-file-name))) - (python-shell-send-file file-name process temp-file-name t) - (unless python--use-fake-loc - (with-current-buffer (process-buffer process) - (compilation-fake-loc (copy-marker start) temp-file-name - 2)) ;; Not 1, because of the added coding line. - )))) + (python-shell-send-string string process))) (defun python-shell-send-buffer (&optional arg) "Send the entire buffer to inferior Python process. -- 2.39.5