# HG changeset patch # User Katsumi Yamaoka # Date 1282689930 0 # Node ID 336e4a38a76d3c4e1f9fee9e8b386d543606bb83 # Parent cb10025e02fe1d1e7ddeb7000e484c246e5bb2ac# Parent 77c4a65b90119712602bd8415ebf6ee0ed8281c3 Merge from mainline. diff -r cb10025e02fe -r 336e4a38a76d doc/lispref/ChangeLog --- a/doc/lispref/ChangeLog Mon Aug 23 22:45:50 2010 +0000 +++ b/doc/lispref/ChangeLog Tue Aug 24 22:45:30 2010 +0000 @@ -1,3 +1,9 @@ +2010-08-24 Markus Triska + + * processes.texi (Filter Functions): Use `buffer-live-p' instead + of `buffer-name' in the main text as well as in the example + (Bug#3098). + 2010-08-22 Chong Yidong * nonascii.texi (Text Representations): diff -r cb10025e02fe -r 336e4a38a76d doc/lispref/processes.texi --- a/doc/lispref/processes.texi Mon Aug 23 22:45:50 2010 +0000 +++ b/doc/lispref/processes.texi Tue Aug 24 22:45:30 2010 +0000 @@ -1273,22 +1273,24 @@ filter. Such filter functions need to use @code{set-buffer} in order to be sure to insert in that buffer. To avoid setting the current buffer semipermanently, these filter functions must save and restore the -current buffer. They should also update the process marker, and in some -cases update the value of point. Here is how to do these things: +current buffer. They should also check whether the buffer is still +alive, update the process marker, and in some cases update the value +of point. Here is how to do these things: @smallexample @group (defun ordinary-insertion-filter (proc string) - (with-current-buffer (process-buffer proc) - (let ((moving (= (point) (process-mark proc)))) + (when (buffer-live-p (process-buffer proc)) + (with-current-buffer (process-buffer proc) + (let ((moving (= (point) (process-mark proc)))) @end group @group - (save-excursion - ;; @r{Insert the text, advancing the process marker.} - (goto-char (process-mark proc)) - (insert string) - (set-marker (process-mark proc) (point))) - (if moving (goto-char (process-mark proc)))))) + (save-excursion + ;; r{Insert the text, advancing the process marker.} + (goto-char (process-mark proc)) + (insert string) + (set-marker (process-mark proc) (point))) + (if moving (goto-char (process-mark proc))))))) @end group @end smallexample @@ -1315,12 +1317,6 @@ match data. Now Emacs does this automatically for filter functions; they never need to do it explicitly. @xref{Match Data}. - A filter function that writes the output into the buffer of the -process should check whether the buffer is still alive. If it tries to -insert into a dead buffer, it will get an error. The expression -@code{(buffer-name (process-buffer @var{process}))} returns @code{nil} -if the buffer is dead. - The output to the function may come in chunks of any size. A program that produces the same output twice in a row may send it as one batch of 200 characters one time, and five batches of 40 characters the next. If diff -r cb10025e02fe -r 336e4a38a76d lisp/ChangeLog --- a/lisp/ChangeLog Mon Aug 23 22:45:50 2010 +0000 +++ b/lisp/ChangeLog Tue Aug 24 22:45:30 2010 +0000 @@ -1,3 +1,40 @@ +2010-08-24 Chong Yidong + + * emacs-lisp/package.el (list-packages): Alias for + package-list-packages. + +2010-08-24 Kevin Ryde + + * textmodes/flyspell.el (flyspell-check-tex-math-command): Doc fix + (Bug#5651). + + * progmodes/ruby-mode.el (ruby): Add defgroup. + +2010-08-24 Chong Yidong + + * progmodes/python.el: Add Ipython support (Bug#5390). + (python-shell-prompt-alist) + (python-shell-continuation-prompt-alist): New options. + (python--set-prompt-regexp): New function. + (inferior-python-mode, run-python, python-shell): Require + ansi-color. Use python--set-prompt-regexp to set the comint + prompt based on the Python interpreter. + (python--prompt-regexp): New var. + (python-check-comint-prompt) + (python-comint-output-filter-function): Use it. + (run-python): Use a pipe (Bug#5694). + +2010-08-24 Fabian Ezequiel Gallina (tiny change) + + * progmodes/python.el (python-send-region): Send a different + Python command if Ipython is in use. + (python-check-version): Use a Python command to find the version. + +2010-08-24 Chong Yidong + + * mouse.el (mouse-yank-primary): Avoid setting primary when + deactivating the mark (Bug#6872). + 2010-08-23 Michael Albinus * net/dbus.el: Accept UNIX domain sockets as bus address. diff -r cb10025e02fe -r 336e4a38a76d lisp/emacs-lisp/package.el --- a/lisp/emacs-lisp/package.el Mon Aug 23 22:45:50 2010 +0000 +++ b/lisp/emacs-lisp/package.el Tue Aug 24 22:45:30 2010 +0000 @@ -1557,6 +1557,9 @@ (package-refresh-contents) (package--list-packages)) +;;;###autoload +(defalias 'list-packages 'package-list-packages) + (defun package-list-packages-no-fetch () "Display a list of packages. Does not fetch the updated list of packages before displaying. diff -r cb10025e02fe -r 336e4a38a76d lisp/mouse.el --- a/lisp/mouse.el Mon Aug 23 22:45:50 2010 +0000 +++ b/lisp/mouse.el Tue Aug 24 22:45:30 2010 +0000 @@ -1268,10 +1268,11 @@ (interactive "e") ;; Give temporary modes such as isearch a chance to turn off. (run-hooks 'mouse-leave-buffer-hook) + ;; Without this, confusing things happen upon e.g. inserting into + ;; the middle of an active region. (when select-active-regions - ;; Without this, confusing things happen upon e.g. inserting into - ;; the middle of an active region. - (deactivate-mark)) + (let (select-active-regions) + (deactivate-mark))) (or mouse-yank-at-point (mouse-set-point click)) (let ((primary (cond diff -r cb10025e02fe -r 336e4a38a76d lisp/progmodes/python.el --- a/lisp/progmodes/python.el Mon Aug 23 22:45:50 2010 +0000 +++ b/lisp/progmodes/python.el Tue Aug 24 22:45:30 2010 +0000 @@ -579,6 +579,33 @@ "Queue of Python temp files awaiting execution. Currently-active file is at the head of the list.") +(defcustom python-shell-prompt-alist + '(("ipython" . "^In \\[[0-9]+\\]: *") + (t . "^>>> ")) + "Alist of Python input prompts. +Each element has the form (PROGRAM . REGEXP), where PROGRAM is +the value of `python-python-command' for the python process and +REGEXP is a regular expression matching the Python prompt. +PROGRAM can also be t, which specifies the default when no other +element matches `python-python-command'." + :type 'string + :group 'python + :version "24.1") + +(defcustom python-shell-continuation-prompt-alist + '(("ipython" . "^ [.][.][.]+: *") + (t . "^[.][.][.] ")) + "Alist of Python continued-line prompts. +Each element has the form (PROGRAM . REGEXP), where PROGRAM is +the value of `python-python-command' for the python process and +REGEXP is a regular expression matching the Python prompt for +continued lines. +PROGRAM can also be t, which specifies the default when no other +element matches `python-python-command'." + :type 'string + :group 'python + :version "24.1") + (defvar python-pdbtrack-is-tracking-p nil) (defconst python-pdbtrack-stack-entry-regexp @@ -1311,13 +1338,9 @@ ;;;; Inferior mode stuff (following cmuscheme). -;; Fixme: Make sure we can work with IPython. - (defcustom python-python-command "python" "Shell command to run Python interpreter. -Any arguments can't contain whitespace. -Note that IPython may not work properly; it must at least be used -with the `-cl' flag, i.e. use `ipython -cl'." +Any arguments can't contain whitespace." :group 'python :type 'string) @@ -1395,6 +1418,23 @@ ;; Autoloaded. (declare-function compilation-shell-minor-mode "compile" (&optional arg)) +(defvar python--prompt-regexp nil) + +(defun python--set-prompt-regexp () + (let ((prompt (cdr-safe (or (assoc python-python-command + python-shell-prompt-alist) + (assq t python-shell-prompt-alist)))) + (cprompt (cdr-safe (or (assoc python-python-command + python-shell-continuation-prompt-alist) + (assq t python-shell-continuation-prompt-alist))))) + (set (make-local-variable 'comint-prompt-regexp) + (concat "\\(" + (mapconcat 'identity + (delq nil (list prompt cprompt "^([Pp]db) ")) + "\\|") + "\\)")) + (set (make-local-variable 'python--prompt-regexp) prompt))) + ;; Fixme: This should inherit some stuff from `python-mode', but I'm ;; not sure how much: at least some keybindings, like C-c C-f; ;; syntax?; font-locking, e.g. for triple-quoted strings? @@ -1417,14 +1457,12 @@ \\{inferior-python-mode-map}" :group 'python + (require 'ansi-color) ; for ipython (setq mode-line-process '(":%s")) (set (make-local-variable 'comint-input-filter) 'python-input-filter) (add-hook 'comint-preoutput-filter-functions #'python-preoutput-filter nil t) - ;; Still required by `comint-redirect-send-command', for instance - ;; (and we need to match things like `>>> ... >>> '): - (set (make-local-variable 'comint-prompt-regexp) - (rx line-start (1+ (and (or (repeat 3 (any ">.")) "(Pdb)") " ")))) + (python--set-prompt-regexp) (set (make-local-variable 'compilation-error-regexp-alist) python-compilation-regexp-alist) (compilation-shell-minor-mode 1)) @@ -1521,12 +1559,12 @@ cmd))) (unless (shell-command-to-string cmd) (error "Can't run Python command `%s'" cmd)) - (let* ((res (shell-command-to-string (concat cmd " --version")))) - (string-match "Python \\([0-9]\\)\\.\\([0-9]\\)" res) - (unless (and (equal "2" (match-string 1 res)) - (match-beginning 2) - (>= (string-to-number (match-string 2 res)) 2)) - (error "Only Python versions >= 2.2 and < 3.0 supported"))) + (let* ((res (shell-command-to-string + (concat cmd + " -c \"from sys import version_info;\ +print version_info >= (2, 2) and version_info < (3, 0)\"")))) + (unless (string-match "True" res) + (error "Only Python versions >= 2.2 and < 3.0 are supported"))) (setq python-version-checked t))) ;;;###autoload @@ -1549,6 +1587,7 @@ (interactive (if current-prefix-arg (list (read-string "Run Python: " python-command) nil t) (list python-command))) + (require 'ansi-color) ; for ipython (unless cmd (setq cmd python-command)) (python-check-version cmd) (setq python-command cmd) @@ -1566,8 +1605,10 @@ (if path (concat path path-separator)) data-directory) process-environment)) - ;; Suppress use of pager for help output: - (process-connection-type nil)) + ;; If we use a pipe, unicode characters are not printed + ;; correctly (Bug#5794) and IPython does not work at + ;; all (Bug#5390). + (process-connection-type t)) (apply 'make-comint-in-buffer "Python" (generate-new-buffer "*Python*") (car cmdlist) nil (cdr cmdlist))) @@ -1623,7 +1664,12 @@ ;; non-ASCII. (interactive "r") (let* ((f (make-temp-file "py")) - (command (format "emacs.eexecfile(%S)" f)) + (command + ;; IPython puts the FakeModule module into __main__ so + ;; emacs.eexecfile becomes useless. + (if (string-match "^ipython" python-command) + (format "execfile %S" f) + (format "emacs.eexecfile(%S)" f))) (orig-start (copy-marker start))) (when (save-excursion (goto-char start) @@ -1823,7 +1869,9 @@ information etc. If PROC is non-nil, check the buffer for that process." (with-current-buffer (process-buffer (or proc (python-proc))) (save-excursion - (save-match-data (re-search-backward ">>> \\=" nil t))))) + (save-match-data + (re-search-backward (concat python--prompt-regexp " *\\=") + nil t))))) ;; Fixme: Is there anything reasonable we can do with random methods? ;; (Currently only works with functions.) @@ -2539,9 +2587,7 @@ "Watch output for Python prompt and exec next file waiting in queue. This function is appropriate for `comint-output-filter-functions'." ;; TBD: this should probably use split-string - (when (and (or (string-equal string ">>> ") - (and (>= (length string) 5) - (string-equal (substring string -5) "\n>>> "))) + (when (and (string-match python--prompt-regexp string) python-file-queue) (condition-case nil (delete-file (car python-file-queue)) @@ -2753,6 +2799,7 @@ (funcall (process-filter proc) proc msg)) (set-buffer curbuf)) (process-send-string proc cmd))) + ;;;###autoload (defun python-shell (&optional argprompt) "Start an interactive Python interpreter in another window. @@ -2792,6 +2839,7 @@ non-Python process buffers using the default (Emacs-supplied) process filter." (interactive "P") + (require 'ansi-color) ; For ipython ;; Set the default shell if not already set (when (null python-which-shell) (python-toggle-shells python-default-interpreter)) @@ -2808,10 +2856,9 @@ )))) (switch-to-buffer-other-window (apply 'make-comint python-which-bufname python-which-shell nil args)) - (make-local-variable 'comint-prompt-regexp) (set-process-sentinel (get-buffer-process (current-buffer)) 'python-sentinel) - (setq comint-prompt-regexp "^>>> \\|^[.][.][.] \\|^(pdb) ") + (python--set-prompt-regexp) (add-hook 'comint-output-filter-functions 'python-comint-output-filter-function nil t) ;; pdbtrack diff -r cb10025e02fe -r 336e4a38a76d lisp/progmodes/ruby-mode.el --- a/lisp/progmodes/ruby-mode.el Mon Aug 23 22:45:50 2010 +0000 +++ b/lisp/progmodes/ruby-mode.el Tue Aug 24 22:45:30 2010 +0000 @@ -43,6 +43,11 @@ (eval-when-compile (require 'cl)) +(defgroup ruby nil + "Major mode for editing Ruby code." + :prefix "ruby-" + :group 'languages) + (defconst ruby-keyword-end-re (if (string-match "\\_>" "ruby") "\\_>" diff -r cb10025e02fe -r 336e4a38a76d lisp/textmodes/flyspell.el --- a/lisp/textmodes/flyspell.el Mon Aug 23 22:45:50 2010 +0000 +++ b/lisp/textmodes/flyspell.el Tue Aug 24 22:45:30 2010 +0000 @@ -199,9 +199,9 @@ (defcustom flyspell-check-tex-math-command nil "Non-nil means check even inside TeX math environment. -TeX math environments are discovered by the TEXMATHP that implemented -inside the texmathp.el Emacs package. That package may be found at: -http://strw.leidenuniv.nl/~dominik/Tools" +TeX math environments are discovered by `texmathp', implemented +inside AUCTeX package. That package may be found at +URL `http://www.gnu.org/software/auctex/'" :group 'flyspell :type 'boolean) diff -r cb10025e02fe -r 336e4a38a76d src/ChangeLog --- a/src/ChangeLog Mon Aug 23 22:45:50 2010 +0000 +++ b/src/ChangeLog Tue Aug 24 22:45:30 2010 +0000 @@ -1,3 +1,8 @@ +2010-08-24 Chong Yidong + + * keyboard.c (command_loop_1): Don't clobber primary selection + during handle-switch-frame (Bug#6872). + 2010-08-23 Michael Albinus * dbusbind.c: Accept UNIX domain sockets as bus address. diff -r cb10025e02fe -r 336e4a38a76d src/keyboard.c --- a/src/keyboard.c Mon Aug 23 22:45:50 2010 +0000 +++ b/src/keyboard.c Tue Aug 24 22:45:30 2010 +0000 @@ -368,7 +368,7 @@ Used by the `select-active-regions' feature. */ Lisp_Object Vsaved_region_selection; -Lisp_Object Qx_set_selection, QPRIMARY; +Lisp_Object Qx_set_selection, QPRIMARY, Qhandle_switch_frame; Lisp_Object Qself_insert_command; Lisp_Object Qforward_char; @@ -1799,10 +1799,11 @@ { /* Even if not deactivating the mark, set PRIMARY if `select-active-regions' is non-nil. */ - if (EQ (Vselect_active_regions, Qonly) - ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly) - : (!NILP (Vselect_active_regions) - && !NILP (Vtransient_mark_mode))) + if ((EQ (Vselect_active_regions, Qonly) + ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly) + : (!NILP (Vselect_active_regions) + && !NILP (Vtransient_mark_mode))) + && !EQ (Vthis_command, Qhandle_switch_frame)) { int beg = XINT (Fmarker_position (current_buffer->mark)); int end = XINT (make_number (PT)); @@ -11702,6 +11703,8 @@ staticpro (&Qx_set_selection); QPRIMARY = intern_c_string ("PRIMARY"); staticpro (&QPRIMARY); + Qhandle_switch_frame = intern_c_string ("handle-switch-frame"); + staticpro (&Qhandle_switch_frame); Qinput_method_exit_on_first_char = intern_c_string ("input-method-exit-on-first-char"); staticpro (&Qinput_method_exit_on_first_char);