Mercurial > emacs
comparison lisp/progmodes/python.el @ 55300:2db456741f80
(python-compilation-line-number): Remove.
(python-compilation-regexp-alist): Don't use it any more.
(python-orig-start, python-input-filter): Remove.
(inferior-python-mode): Don't set up comint-input-filter-functions.
(python-send-region): Use compilation-fake-loc.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sat, 01 May 2004 21:16:07 +0000 |
parents | 780b94f913fe |
children | a828ab1b3079 |
comparison
equal
deleted
inserted
replaced
55299:19ff0d2ea8e8 | 55300:2db456741f80 |
---|---|
968 ;; do the right thing. If you run multiple processes, you can change | 968 ;; do the right thing. If you run multiple processes, you can change |
969 ;; `python-buffer' to another process buffer with \\[set-variable]." | 969 ;; `python-buffer' to another process buffer with \\[set-variable]." |
970 ) | 970 ) |
971 | 971 |
972 (defconst python-compilation-regexp-alist | 972 (defconst python-compilation-regexp-alist |
973 ;; FIXME: maybe this should be moved to compilation-error-regexp-alist-alist. | |
973 `((,(rx (and line-start (1+ (any " \t")) "File \"" | 974 `((,(rx (and line-start (1+ (any " \t")) "File \"" |
974 (group (1+ (not (any "\"<")))) ; avoid `<stdin>' &c | 975 (group (1+ (not (any "\"<")))) ; avoid `<stdin>' &c |
975 "\", line " (group (1+ digit)))) | 976 "\", line " (group (1+ digit)))) |
976 1 python-compilation-line-number)) | 977 1 2)) |
977 "`compilation-error-regexp-alist' for inferior Python.") | 978 "`compilation-error-regexp-alist' for inferior Python.") |
978 | 979 |
979 ;; Fixme: This should inherit some stuff from python-mode, but I'm not | 980 ;; Fixme: This should inherit some stuff from python-mode, but I'm not |
980 ;; sure how much: at least some keybindings, like C-c C-f; syntax?; | 981 ;; sure how much: at least some keybindings, like C-c C-f; syntax?; |
981 ;; font-locking, e.g. for triple-quoted strings? | 982 ;; font-locking, e.g. for triple-quoted strings? |
1000 (set-syntax-table python-mode-syntax-table) | 1001 (set-syntax-table python-mode-syntax-table) |
1001 (setq mode-line-process '(":%s")) | 1002 (setq mode-line-process '(":%s")) |
1002 ;; Fixme: Maybe install some python-mode bindings too. | 1003 ;; Fixme: Maybe install some python-mode bindings too. |
1003 (define-key inferior-python-mode-map "\C-c\C-l" 'python-load-file) | 1004 (define-key inferior-python-mode-map "\C-c\C-l" 'python-load-file) |
1004 (define-key inferior-python-mode-map "\C-c\C-z" 'python-switch-to-python) | 1005 (define-key inferior-python-mode-map "\C-c\C-z" 'python-switch-to-python) |
1005 (add-hook 'comint-input-filter-functions 'python-input-filter nil t) | |
1006 (add-hook 'comint-preoutput-filter-functions #'python-preoutput-filter | 1006 (add-hook 'comint-preoutput-filter-functions #'python-preoutput-filter |
1007 nil t) | 1007 nil t) |
1008 ;; Still required by `comint-redirect-send-command', for instance | 1008 ;; Still required by `comint-redirect-send-command', for instance |
1009 ;; (and we need to match things like `>>> ... >>> '): | 1009 ;; (and we need to match things like `>>> ... >>> '): |
1010 (set (make-local-variable 'comint-prompt-regexp) "^\\([>.]\\{3\\} \\)+") | 1010 (set (make-local-variable 'comint-prompt-regexp) "^\\([>.]\\{3\\} \\)+") |
1015 (defcustom inferior-python-filter-regexp "\\`\\s-*\\S-?\\S-?\\s-*\\'" | 1015 (defcustom inferior-python-filter-regexp "\\`\\s-*\\S-?\\S-?\\s-*\\'" |
1016 "*Input matching this regexp is not saved on the history list. | 1016 "*Input matching this regexp is not saved on the history list. |
1017 Default ignores all inputs of 0, 1, or 2 non-blank characters." | 1017 Default ignores all inputs of 0, 1, or 2 non-blank characters." |
1018 :type 'regexp | 1018 :type 'regexp |
1019 :group 'python) | 1019 :group 'python) |
1020 | |
1021 (defvar python-orig-start nil | |
1022 "Marker to the start of the region passed to the inferior Python. | |
1023 It can also be a filename.") | |
1024 | |
1025 (defun python-input-filter (str) | |
1026 "`comint-input-filter' function for inferior Python. | |
1027 Don't save anything for STR matching `inferior-python-filter-regexp'. | |
1028 Also resets variables for adjusting error messages." | |
1029 (setq python-orig-start nil) | |
1030 (not (string-match inferior-python-filter-regexp str))) | |
1031 | 1020 |
1032 ;; Fixme: Loses with quoted whitespace. | 1021 ;; Fixme: Loses with quoted whitespace. |
1033 (defun python-args-to-list (string) | 1022 (defun python-args-to-list (string) |
1034 (let ((where (string-match "[ \t]" string))) | 1023 (let ((where (string-match "[ \t]" string))) |
1035 (cond ((null where) (list string)) | 1024 (cond ((null where) (list string)) |
1036 ((not (= where 0)) | 1025 ((not (= where 0)) |
1037 (cons (substring string 0 where) | 1026 (cons (substring string 0 where) |
1038 (python-args-to-list (substring string (+ 1 where))))) | 1027 (python-args-to-list (substring string (+ 1 where))))) |
1039 (t (let ((pos (string-match "[^ \t]" string))) | 1028 (t (let ((pos (string-match "[^ \t]" string))) |
1040 (if pos (python-args-to-list (substring string pos)))))))) | 1029 (if pos (python-args-to-list (substring string pos)))))))) |
1041 | |
1042 (defun python-compilation-line-number (file col) | |
1043 "Return error descriptor of error found for FILE, column COL. | |
1044 Used as line-number hook function in `python-compilation-regexp-alist'." | |
1045 (let ((line (string-to-number (match-string 2)))) | |
1046 (cons (point-marker) | |
1047 (if (and (markerp python-orig-start) | |
1048 (marker-buffer python-orig-start)) | |
1049 (let ((start python-orig-start)) | |
1050 (with-current-buffer (marker-buffer python-orig-start) | |
1051 (goto-char start) | |
1052 (forward-line (1- line)) | |
1053 (point-marker))) | |
1054 (list (if (stringp python-orig-start) | |
1055 (list python-orig-start default-directory) | |
1056 file) | |
1057 line col))))) | |
1058 | 1030 |
1059 (defvar python-preoutput-result nil | 1031 (defvar python-preoutput-result nil |
1060 "Data from output line last `_emacs_out' line seen by the preoutput filter.") | 1032 "Data from output line last `_emacs_out' line seen by the preoutput filter.") |
1061 | 1033 |
1062 (defvar python-preoutput-continuation nil | 1034 (defvar python-preoutput-continuation nil |
1176 (/= 0 (current-indentation))) ; need dummy block | 1148 (/= 0 (current-indentation))) ; need dummy block |
1177 (write-region "if True:\n" nil f nil 'nomsg)) | 1149 (write-region "if True:\n" nil f nil 'nomsg)) |
1178 (write-region start end f t 'nomsg) | 1150 (write-region start end f t 'nomsg) |
1179 (when python-buffer | 1151 (when python-buffer |
1180 (with-current-buffer python-buffer | 1152 (with-current-buffer python-buffer |
1181 (set (make-local-variable 'python-orig-start) orig-start) | 1153 (python-send-command command) |
1182 (let ((comint-input-filter-functions | 1154 ;; Tell compile.el to redirect error locations in file `f' to |
1183 ;; Don't reset python-orig-start. | 1155 ;; positions past marker `orig-start'. It has to be done *after* |
1184 (remq 'python-input-filter comint-input-filter-functions))) | 1156 ;; python-send-command's call to compilation-forget-errors. |
1185 (python-send-command command)))))) | 1157 (compilation-fake-loc orig-start f))))) |
1186 | 1158 |
1187 (defun python-send-string (string) | 1159 (defun python-send-string (string) |
1188 "Evaluate STRING in inferior Python process." | 1160 "Evaluate STRING in inferior Python process." |
1189 (interactive "sPython command: ") | 1161 (interactive "sPython command: ") |
1190 (comint-send-string (python-proc) string) | 1162 (comint-send-string (python-proc) string) |