From 0d49da68b9cdc70a1f3ced0cae0b480ace5e28fc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabi=C3=A1n=20Ezequiel=20Gallina?= Date: Tue, 31 Jul 2012 20:43:31 -0300 Subject: [PATCH] Shell processes: enhancements to startup and CEDET compatibility. * progmodes/python.el (python-shell-send-setup-max-wait): Delete var. (python-shell-make-comint): accept-process-output at startup. (run-python-internal): Set inferior-python-mode-hook to nil. (python-shell-internal-get-or-create-process): call sit-for. (python-preoutput-result): Add obsolete alias. (python-shell-internal-send-string): Use it. (python-shell-send-setup-code): Remove call to accept-process-output. --- lisp/ChangeLog | 12 +++++++ lisp/progmodes/python.el | 69 ++++++++++++++++++++++++---------------- 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5bee28ab493..b961faf76c1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2012-07-31 Fabián Ezequiel Gallina + + Shell processes: enhancements to startup and CEDET compatibility. + * progmodes/python.el (python-shell-send-setup-max-wait): Delete var. + (python-shell-make-comint): accept-process-output at startup. + (run-python-internal): Set inferior-python-mode-hook to nil. + (python-shell-internal-get-or-create-process): call sit-for. + (python-preoutput-result): Add obsolete alias. + (python-shell-internal-send-string): Use it. + (python-shell-send-setup-code): Remove call to + accept-process-output. + 2012-07-31 Andreas Schwab * buff-menu.el (list-buffers-noselect): Use prefix-numeric-value. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 001c28a00fa..f946509d6e0 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1354,14 +1354,6 @@ Restart the python shell after changing this variable for it to take effect." :group 'python :safe 'booleanp) -(defcustom python-shell-send-setup-max-wait 5 - "Seconds to wait for process output before code setup. -If output is received before the specified time then control is -returned in that moment and not after waiting." - :type 'integer - :group 'python - :safe 'integerp) - (defcustom python-shell-process-environment nil "List of environment variables for Python shell. This variable follows the same rules as `process-environment' @@ -1571,7 +1563,8 @@ non-nil the buffer is shown." (current-buffer (current-buffer))) (with-current-buffer buffer (inferior-python-mode) - (python-util-clone-local-variables current-buffer)))) + (python-util-clone-local-variables current-buffer)) + (accept-process-output (get-buffer-process buffer)))) (and pop (pop-to-buffer proc-buffer-name t)) proc-buffer-name))) @@ -1605,17 +1598,19 @@ process buffer for a list of commands.)" "Run an inferior Internal Python process. Input and output via buffer named after `python-shell-internal-buffer-name' and what -`python-shell-internal-get-process-name' returns. This new kind -of shell is intended to be used for generic communication related -to defined configurations. The main difference with global or -dedicated shells is that these ones are attached to a -configuration, not a buffer. This means that can be used for -example to retrieve the sys.path and other stuff, without messing -with user shells. 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.)" - (let ((python-shell-enable-font-lock nil)) +`python-shell-internal-get-process-name' returns. + +This new kind of shell is intended to be used for generic +communication related to defined configurations, the main +difference with global or dedicated shells is that these ones are +attached to a configuration, not a buffer. This means that can +be used for example to retrieve the sys.path and other stuff, +without messing with user shells. Note that +`python-shell-enable-font-lock' and `inferior-python-mode-hook' +are set to nil for these shells, so setup codes are not sent at +startup." + (let ((python-shell-enable-font-lock nil) + (inferior-python-mode-hook nil)) (set-process-query-on-exit-flag (get-buffer-process (python-shell-make-comint @@ -1658,12 +1653,25 @@ This is really not necessary at all for the code to work but it's there for compatibility with CEDET.") (make-variable-buffer-local 'python-shell-internal-buffer) +(defvar python-shell-internal-last-output nil + "Last output captured by the internal shell. +This is really not necessary at all for the code to work but it's +there for compatibility with CEDET.") +(make-variable-buffer-local 'python-shell-internal-last-output) + (defun python-shell-internal-get-or-create-process () "Get or create an inferior Internal Python process." (let* ((proc-name (python-shell-internal-get-process-name)) (proc-buffer-name (format "*%s*" proc-name))) - (run-python-internal) - (setq python-shell-internal-buffer proc-buffer-name) + (when (not (process-live-p proc-name)) + (run-python-internal) + (setq python-shell-internal-buffer proc-buffer-name) + ;; XXX: Why is this `sit-for' needed? + ;; `python-shell-make-comint' calls `accept-process-output' + ;; already but it is not helping to get proper output on + ;; 'gnu/linux when the internal shell process is not running and + ;; a call to `python-shell-internal-send-string' is issued. + (sit-for 0.1 t)) (get-buffer-process proc-buffer-name))) (define-obsolete-function-alias @@ -1672,6 +1680,9 @@ there for compatibility with CEDET.") (define-obsolete-variable-alias 'python-buffer 'python-shell-internal-buffer "24.2") +(define-obsolete-variable-alias + 'python-preoutput-result 'python-shell-internal-last-output "24.2") + (defun python-shell-send-string (string &optional process msg) "Send STRING to inferior Python PROCESS. When MSG is non-nil messages the first line of STRING." @@ -1723,11 +1734,14 @@ the output." (defun python-shell-internal-send-string (string) "Send STRING to the Internal Python interpreter. Returns the output. See `python-shell-send-string-no-output'." - (python-shell-send-string-no-output - ;; Makes this function compatible with the old - ;; python-send-receive. (At least for CEDET). - (replace-regexp-in-string "_emacs_out +" "" string) - (python-shell-internal-get-or-create-process) nil)) + ;; XXX Remove `python-shell-internal-last-output' once CEDET is + ;; updated to support this new mode. + (setq python-shell-internal-last-output + (python-shell-send-string-no-output + ;; Makes this function compatible with the old + ;; python-send-receive. (At least for CEDET). + (replace-regexp-in-string "_emacs_out +" "" string) + (python-shell-internal-get-or-create-process) nil))) (define-obsolete-function-alias 'python-send-receive 'python-shell-internal-send-string "24.2") @@ -1808,7 +1822,6 @@ This function takes the list of setup code to send from the `python-shell-setup-codes' list." (let ((msg "Sent %s") (process (get-buffer-process (current-buffer)))) - (accept-process-output process python-shell-send-setup-max-wait) (dolist (code python-shell-setup-codes) (when code (message (format msg code)) -- 2.39.2