diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index a85b56c3af7..76d692ae9a6 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,9 @@ +2014-07-03 Glenn Morris + + * help.texi (Misc Help): + * trouble.texi (Checklist): "Online" help doesn't mean what it + used to any more. + 2014-06-23 Glenn Morris * Makefile.in (%.texi): Disable implicit rules. diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi index f47600d97ec..10b5fcfb095 100644 --- a/doc/emacs/help.texi +++ b/doc/emacs/help.texi @@ -490,8 +490,7 @@ currently in use. @xref{Coding Systems}. @kindex C-h i @findex info @cindex Info -@cindex manuals, on-line -@cindex on-line manuals +@cindex manuals, included @kbd{C-h i} (@code{info}) runs the Info program, which browses structured documentation files. The entire Emacs manual is available within Info, along with many other manuals for the GNU system. Type diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index f0cbbcc5721..09260a1e5a9 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -847,7 +847,7 @@ conclusion from our observations. @item If the bug is that the Emacs Manual or the Emacs Lisp Reference Manual fails to describe the actual behavior of Emacs, or that the text is -confusing, copy in the text from the online manual which you think is +confusing, copy in the text from the manual which you think is at fault. If the section is small, just the section name is enough. @item diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 13bc65eef4a..1ac7258e85a 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,8 @@ +2014-07-03 Glenn Morris + + * emacs-lisp-intro.texi (Note for Novices, Finding More, Conclusion): + "Online" help doesn't mean what it used to any more. + 2014-06-23 Glenn Morris * Makefile.in (%.texi): Disable implicit rules. diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 6001e3d0084..7ff91758670 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -903,7 +903,7 @@ file, @file{cl.el}, that adds many Common Lisp features to Emacs Lisp.) If you don't know GNU Emacs, you can still read this document profitably. However, I recommend you learn Emacs, if only to learn to move around your computer screen. You can teach yourself how to use -Emacs with the on-line tutorial. To use it, type @kbd{C-h t}. (This +Emacs with the built-in tutorial. To use it, type @kbd{C-h t}. (This means you press and release the @key{CTRL} key and the @kbd{h} at the same time, and then press and release @kbd{t}.) @@ -4657,7 +4657,7 @@ specialized library, such as a law library or an engineering library, rather than a general library. Each library, or file, contains functions that relate to a particular topic or activity, such as @file{abbrev.el} for handling abbreviations and other typing -shortcuts, and @file{help.el} for on-line help. (Sometimes several +shortcuts, and @file{help.el} for help. (Sometimes several libraries provide code for a single activity, as the various @file{rmail@dots{}} files provide code for reading electronic mail.) In @cite{The GNU Emacs Manual}, you will see sentences such as ``The @@ -18685,9 +18685,9 @@ easy-to-read description of Emacs Lisp. It is written not only for experts, but for people who know what you know. (The @cite{Reference Manual} comes with the standard GNU Emacs distribution. Like this introduction, it comes as a Texinfo source file, so you can read it -on-line and as a typeset, printed book.) +on your computer and as a typeset, printed book.) -Go to the other on-line help that is part of GNU Emacs: the on-line +Go to the other built-in help that is part of GNU Emacs: the built-in documentation for all functions and variables, and @code{find-tag}, the program that takes you to sources. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 93372203009..cc372b006ed 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2014-07-03 Glenn Morris + + * help.texi (Help Functions): "Online" help doesn't mean what it + used to any more. + 2014-07-02 Stefan Monnier * keymaps.texi (Key Lookup): Remove mention of indirect entries. diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 9a763b60938..20fb0e651f9 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -508,7 +508,7 @@ non-@code{nil}, the return value is always a vector. @node Help Functions @section Help Functions - Emacs provides a variety of on-line help functions, all accessible to + Emacs provides a variety of built-in help functions, all accessible to the user as subcommands of the prefix @kbd{C-h}. For more information about them, see @ref{Help, , Help, emacs, The GNU Emacs Manual}. Here we describe some program-level interfaces to the same information. diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index d7b030fb1aa..6f448d22ff6 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,10 @@ +2014-07-03 Glenn Morris + + * info.texi, mh-e.texi: "Online help" doesn't mean what it + used to any more. + + * idlwave.texi (Introduction): Comment out dead http screenshot links. + 2014-06-24 Leo Liu * dired-x.texi (Omitting Files in Dired, Omitting Variables): diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi index 87ddcd4a4ee..5c1c8ba350f 100644 --- a/doc/misc/idlwave.texi +++ b/doc/misc/idlwave.texi @@ -239,24 +239,27 @@ Examining variables and expressions with a mouse click. And much, much more... @end itemize +@c Dead links, 2014/06. +@ignore @ifnottex @cindex Screenshots Here are a number of screenshots showing IDLWAVE in action: @itemize @bullet @item -@uref{http://idlwave.org/screenshots/emacs_21_nav.gif,An IDLWAVE buffer} +@uref{http://github.com/jdtsmith/idlwave/screenshots/emacs_21_nav.gif,An IDLWAVE buffer} @item -@uref{http://idlwave.org/screenshots/emacs_21_keys.gif,A keyword being completed} +@uref{http://github.com/jdtsmith/idlwave/screenshots/emacs_21_keys.gif,A keyword being completed} @item -@uref{http://idlwave.org/screenshots/emacs_21_help.gif,Online help text.} +@uref{http://github.com/jdtsmith/idlwave/screenshots/emacs_21_help.gif,Online help text.} @item -@uref{http://idlwave.org/screenshots/emacs_21_ri.gif,Routine information displayed} +@uref{http://github.com/jdtsmith/idlwave/screenshots/emacs_21_ri.gif,Routine information displayed} @item -@uref{http://idlwave.org/screenshots/emacs_21_bp.gif,Debugging code +@uref{http://github.com/jdtsmith/idlwave/screenshots/emacs_21_bp.gif,Debugging code stopped at a breakpoint} @end itemize @end ifnottex +@end ignore IDLWAVE is the distant successor to the @file{idl.el} and @file{idl-shell.el} files written by Chris Chase. The modes and files diff --git a/doc/misc/info.texi b/doc/misc/info.texi index 87e7794c61e..a3a14a35b80 100644 --- a/doc/misc/info.texi +++ b/doc/misc/info.texi @@ -12,7 +12,7 @@ @comment %**end of header @copying -This file describes how to use Info, the on-line, menu-driven GNU +This file describes how to use Info, the menu-driven GNU documentation system. Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc. @@ -51,7 +51,7 @@ modify this GNU manual.'' @node Top @top Info: An Introduction -The GNU Project distributes most of its on-line manuals in the +The GNU Project distributes most of its manuals in the @dfn{Info format}, which you read using an @dfn{Info reader}. You are probably using an Info reader to read this now. @@ -98,7 +98,7 @@ program on a computer, so that you can try Info commands while reading about them. Reading it on paper or with an HTML browser is less effective, since you must take it on faith that the commands described really do what the manual says. By all means go through this manual -now that you have it; but please try going through the on-line version +now that you have it; but please try going through the Info version as well. @cindex Info reader, how to invoke diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi index bad2554e60c..6b64a108af5 100644 --- a/doc/misc/mh-e.texi +++ b/doc/misc/mh-e.texi @@ -227,7 +227,7 @@ have, see @ref{Getting Started}. @kindex C-h t If you don't already use GNU Emacs but want to learn more, you can -read an online tutorial by starting GNU Emacs and typing @kbd{C-h t} +read a built-in tutorial by starting GNU Emacs and typing @kbd{C-h t} (@code{help-with-tutorial}). (To learn about this notation, see @ref{Conventions}.) If you want to take the plunge, consult the @iftex @@ -1066,9 +1066,9 @@ This chapter begins the meat of the manual which goes into more detail about every MH-E command and option. @cindex Emacs, info -@cindex Emacs, online help +@cindex Emacs, built-in help @cindex info -@cindex online help +@cindex built-in help @findex describe-mode @findex mh-help @kindex ? @@ -1083,12 +1083,12 @@ summaries at the beginning of each chapter. In case you have or would like to rebind the keys, the command summaries also list the associated Emacs Lisp function. Furthermore, even if you're stranded on a desert island with a laptop and are without your manuals, you can -get a summary of all these commands with GNU Emacs online help: use +get a summary of all these commands with GNU Emacs built-in help: use @kbd{C-h m} (@code{describe-mode}) for a brief summary of commands, @kbd{?} (@code{mh-help}) for an even briefer summary@footnote{This help appears in a buffer called @file{*MH-E Help*} (@pxref{Miscellaneous}).} (@kbd{C-c ?} in MH-Letter mode), or @kbd{C-h -i} to read this manual via Info. The online help is quite good; try +i} to read this manual via Info. The built-in help is quite good; try running @kbd{C-h C-h}. This brings up a list of available help topics, one of which displays the documentation for a given key (like @kbd{C-h k C-n}). Another useful help feature is to view the manual section @@ -1120,21 +1120,21 @@ exist, @c Yes, some of the stuff in the following sections is redundant, but @c TeX barfs if the @ifs are inside the @footnote. @iftex -@footnote{The @cite{GNU Emacs Lisp Reference Manual} may be available -online in the Info system by typing @kbd{C-h i m Emacs Lisp +@footnote{The @cite{GNU Emacs Lisp Reference Manual} should be available +via the Info system by typing @kbd{C-h i m Emacs Lisp @key{RET}}. It is also available online at @* @uref{http://www.gnu.org/software/emacs/manual/elisp.html}.} @end iftex @ifinfo @footnote{@xref{Top, The GNU Emacs Lisp Reference Manual, , elisp, GNU -Emacs Lisp Reference Manual}, which may be available online in the +Emacs Lisp Reference Manual}, which should be available via the Info system. It is also available online at @uref{http://www.gnu.org/software/emacs/manual/elisp.html}.} @end ifinfo @ifhtml @footnote{The @uref{http://www.gnu.org/software/emacs/manual/elisp.html, -The GNU Emacs Lisp Reference Manual} may also be available online in +The GNU Emacs Lisp Reference Manual} should be available via the Info system by typing @kbd{C-h i m Emacs Lisp @key{RET}}.} @end ifhtml and you can look at the code itself for examples. Look in the Emacs @@ -1142,7 +1142,7 @@ Lisp directory on your system (such as @file{/usr/local/share/emacs/lisp/mh-e}) and find all the @file{mh-*.el} files there. When calling MH-E and other Emacs Lisp functions directly from Emacs Lisp code, you'll need to know the correct arguments. Use -the online help for this. For example, try @kbd{C-h f +the built-in help for this. For example, try @kbd{C-h f mh-execute-commands @key{RET}}. If you write your own functions, please do not prefix your symbols (variables and functions) with @samp{mh-}. This prefix is reserved for the MH-E package. To avoid @@ -6405,7 +6405,7 @@ see the section The Menu Bar} in @cite{The GNU Emacs Manual}. @end ifhtml -The Emacs manual describes how to get online help for a particular +The Emacs manual describes how to get help for a particular menu item. You can also look up a menu item in the index of this manual in two ways: all of the menu items are listed alphabetically, and you can also browse all of the items under the index entry diff --git a/etc/ChangeLog b/etc/ChangeLog index ae44fc45c3c..5dfb205dce4 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,8 @@ +2014-07-03 Glenn Morris + + * refcards/calccard.tex (section{Getting Help}): + Meaning of "on-line" has changed. + 2014-06-28 Glenn Morris * publicsuffix.txt: Update from source. diff --git a/etc/refcards/calccard.tex b/etc/refcards/calccard.tex index 982382ecd89..03bc37d8856 100644 --- a/etc/refcards/calccard.tex +++ b/etc/refcards/calccard.tex @@ -297,7 +297,7 @@ The \kbd{h} prefix key is Calc's analogue of \kbd{C-h} in Emacs. \key{describe key briefly}{h c} \key{describe key fully}{h k} \key{describe function or command}{h f} -\key{read on-line manual}{h i{\rm\enskip or\enskip}\calcprefix i} +\key{read Info manual}{h i{\rm\enskip or\enskip}\calcprefix i} \key{read full Calc summary}{h s{\rm\enskip or\enskip}\calcprefix s} \section{Error Recovery} diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 107f95f352c..3c71395f8b9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,56 @@ +2014-07-03 Juri Linkov + + * desktop.el (desktop-save): Rename arg `auto-save' to + `only-if-changed'. Doc fix. (Bug#17873) + +2014-07-03 Stefan Monnier + + * mouse.el (mouse-yank-primary, mouse-yank-secondary): + Use insert-for-yank (bug#17271). + +2014-07-03 Leo Liu + + * emacs-lisp/pp.el (pp-eval-expression, pp-eval-last-sexp): + Support lexical-binding. + +2014-07-03 Stefan Monnier + + * vc/log-edit.el (log-edit-goto-eoh): New function. + (log-edit--match-first-line): Use it (bug#17861). + +2014-07-03 Glenn Morris + + * vc/log-edit.el (log-edit-hook): Add missing :version. + +2014-07-03 Fabián Ezequiel Gallina + + * progmodes/python.el (python-indent-post-self-insert-function): + Enhancements to electric indentation behavior inside + parens. (Bug#17658) + +2014-07-03 Stefan Monnier + + * ps-def.el (ps-generate-postscript-with-faces1): Don't mess with + buffer-invisibility-spec (bug#17867). + +2014-07-03 Andreas Schwab + + * vc/vc-git.el (vc-git-checkin): When operating on the whole tree + pass "-a". + +2014-07-03 Glenn Morris + + * cus-edit.el (help): + * finder.el (finder-known-keywords): + * help.el (help-for-help-internal): + * vc/ediff-mult.el (ediff-meta-buffer-verbose-message) + (ediff-redraw-registry-buffer): + * vc/ediff-ptch.el (ediff-patch-file-internal): + Doc fixes re "online" help. (Bug#17803) + + * progmodes/idlwave.el (idlwave): Update url-link for custom group. + (idlwave-mode): Doc URL update. + 2014-07-01 Juri Linkov * man.el: Display man pages immediately and use process-filter diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 212e29069eb..b54898a171c 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -324,7 +324,7 @@ :group 'emacs) (defgroup help nil - "Support for on-line help systems." + "Support for Emacs help systems." :group 'emacs) (defgroup multimedia nil diff --git a/lisp/desktop.el b/lisp/desktop.el index 26d288bf9cd..4bb6fba3532 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -942,12 +942,13 @@ Frames with a non-nil `desktop-dont-save' parameter are not saved." :predicate #'desktop--check-dont-save)))) ;;;###autoload -(defun desktop-save (dirname &optional release auto-save) +(defun desktop-save (dirname &optional release only-if-changed) "Save the desktop in a desktop file. Parameter DIRNAME specifies where to save the desktop file. Optional parameter RELEASE says whether we're done with this desktop. -If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, -and don't save the buffer if they are the same." +If ONLY-IF-CHANGED is non-nil, compare the current desktop information +to that in the desktop file, and if the desktop information has not +changed since it was last saved then do not rewrite the file." (interactive (list ;; Or should we just use (car desktop-path)? (let ((default (if (member "." desktop-path) @@ -1020,7 +1021,7 @@ and don't save the buffer if they are the same." (setq default-directory desktop-dirname) ;; When auto-saving, avoid writing if nothing has changed since the last write. - (let* ((beg (and auto-save + (let* ((beg (and only-if-changed (save-excursion (goto-char (point-min)) ;; Don't check the header with changing timestamp diff --git a/lisp/ehelp.el b/lisp/ehelp.el index dd6c6c4cb28..46db552c3f5 100644 --- a/lisp/ehelp.el +++ b/lisp/ehelp.el @@ -25,7 +25,7 @@ ;;; Commentary: ;; This package provides a pre-packaged `Electric Help Mode' for -;; browsing on-line help screens. There is one entry point, +;; browsing Emacs help screens. There is one entry point, ;; `with-electric-help'; all you have to give it is a no-argument ;; function that generates the actual text of the help into the current ;; buffer. diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el index 0e4139e1aeb..dd012fab9da 100644 --- a/lisp/emacs-lisp/pp.el +++ b/lisp/emacs-lisp/pp.el @@ -129,7 +129,7 @@ Also add the value to the front of the list in the variable `values'." (interactive (list (read--expression "Eval: "))) (message "Evaluating...") - (setq values (cons (eval expression) values)) + (setq values (cons (eval expression lexical-binding) values)) (pp-display-expression (car values) "*Pp Eval Output*")) ;;;###autoload @@ -165,7 +165,7 @@ With argument, pretty-print output into current buffer. Ignores leading comment characters." (interactive "P") (if arg - (insert (pp-to-string (eval (pp-last-sexp)))) + (insert (pp-to-string (eval (pp-last-sexp) lexical-binding))) (pp-eval-expression (pp-last-sexp)))) ;;;###autoload diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index 650b8acbb81..d1353bdc8fa 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -107,7 +107,7 @@ ;; ---------------- ;; Bug reports and ideas contributed by many users have helped ;; improve Viper and the various versions of VIP. -;; See the on-line manual for a complete list of contributors. +;; See the manual for a complete list of contributors. ;; ;; ;;; Notes: diff --git a/lisp/finder.el b/lisp/finder.el index 092a2ddd8a4..bb5b441e26d 100644 --- a/lisp/finder.el +++ b/lisp/finder.el @@ -52,7 +52,7 @@ (frames . "Emacs frames and window systems") (games . "games, jokes and amusements") (hardware . "interfacing with system hardware") - (help . "on-line help systems") + (help . "Emacs help systems") (hypermedia . "links between text or other media types") (i18n . "internationalization and character-set support") (internal . "code for Emacs internals, build process, defaults") diff --git a/lisp/help.el b/lisp/help.el index 8ba3d86004b..63a658f391c 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -23,7 +23,7 @@ ;;; Commentary: -;; This code implements GNU Emacs's on-line help system, the one invoked by +;; This code implements GNU Emacs's built-in help system, the one invoked by ;; `M-x help-for-help'. ;;; Code: @@ -198,13 +198,13 @@ d PATTERN Show a list of functions, variables, and other items whose documentation matches the PATTERN (a list of words or a regexp). e Go to the *Messages* buffer which logs echo-area messages. f FUNCTION Display documentation for the given function. -F COMMAND Show the on-line manual's section that describes the command. +F COMMAND Show the Emacs manual's section that describes the command. g Display information about the GNU project. h Display the HELLO file which illustrates various scripts. -i Start the Info documentation reader: read on-line manuals. +i Start the Info documentation reader: read included manuals. I METHOD Describe a specific input method, or RET for current. k KEYS Display the full documentation for the key sequence. -K KEYS Show the on-line manual's section for the command bound to KEYS. +K KEYS Show the Emacs manual's section for the command bound to KEYS. l Show last 300 input keystrokes (lossage). L LANG-ENV Describes a specific language environment, or RET for current. m Display documentation of current minor modes and current major mode, @@ -214,7 +214,7 @@ p TOPIC Find packages matching a given topic keyword. P PACKAGE Describe the given Emacs Lisp package. r Display the Emacs manual in Info mode. s Display contents of current syntax table, plus explanations. -S SYMBOL Show the section for the given symbol in the on-line manual +S SYMBOL Show the section for the given symbol in the Info manual for the programming language used in this buffer. t Start the Emacs learn-by-doing tutorial. v VARIABLE Display the given variable's documentation and value. diff --git a/lisp/mouse.el b/lisp/mouse.el index 7beea8e26e6..d3bcf02f217 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -1079,7 +1079,7 @@ regardless of where you click." (unless primary (error "No selection is available")) (push-mark (point)) - (insert primary))) + (insert-for-yank primary))) (defun mouse-kill-ring-save (click) "Copy the region between point and the mouse click in the kill ring. @@ -1361,7 +1361,7 @@ regardless of where you click." (or mouse-yank-at-point (mouse-set-point click)) (let ((secondary (x-get-selection 'SECONDARY))) (if secondary - (insert secondary) + (insert-for-yank secondary) (error "No secondary selection")))) (defun mouse-kill-secondary () diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index 6431fa4aaf2..c7f018f5f15 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el @@ -71,8 +71,8 @@ ;; For example: ;; (add-to-list 'auto-mode-alist '("\\.f\\'" . f90-mode)) -;; Once you have entered f90-mode, you may get more info by using -;; the command describe-mode (C-h m). For online help use +;; Once you have entered f90-mode, you can get more info by using +;; the command describe-mode (C-h m). For help use ;; C-h f , or ;; C-h v . diff --git a/lisp/progmodes/idlw-complete-structtag.el b/lisp/progmodes/idlw-complete-structtag.el index 39951730ab3..6cb04a03b7e 100644 --- a/lisp/progmodes/idlw-complete-structtag.el +++ b/lisp/progmodes/idlw-complete-structtag.el @@ -49,14 +49,14 @@ ;; ;; New versions of IDLWAVE, documentation, and more information available ;; from: -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;; ;; INSTALLATION ;; ============ ;; Put this file on the emacs load path and load it with the following ;; line in your init file: ;; -;; (add-hook 'idlwave-load-hook +;; (add-hook 'idlwave-load-hook ;; (lambda () (require 'idlw-complete-structtag))) ;; ;; DESCRIPTION diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el index b9c41c9d699..3d42fe231bd 100644 --- a/lisp/progmodes/idlw-help.el +++ b/lisp/progmodes/idlw-help.el @@ -32,7 +32,7 @@ ;; along with new versions of IDLWAVE, documentation, and more ;; information, at: ;; -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index a0683d1c409..876695b0809 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el @@ -40,7 +40,7 @@ ;; ;; New versions of IDLWAVE, documentation, and more information ;; available from: -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;; ;; INSTALLATION: ;; ============= @@ -58,7 +58,7 @@ ;; The newest version of this file can be found on the maintainers ;; web site. ;; -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;; ;; DOCUMENTATION ;; ============= @@ -923,7 +923,7 @@ IDL has currently stepped.") Info documentation for this package is available. Use \\[idlwave-info] to display (complain to your sysadmin if that does not work). For PostScript and HTML versions of the documentation, check IDLWAVE's - homepage at URL `http://idlwave.org'. + homepage at URL `http://github.com/jdtsmith/idlwave'. IDLWAVE has customize support - see the group `idlwave'. 8. Keybindings diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el index 7844890c22a..45672be7d97 100644 --- a/lisp/progmodes/idlw-toolbar.el +++ b/lisp/progmodes/idlw-toolbar.el @@ -29,7 +29,7 @@ ;; New versions of IDLWAVE, documentation, and more information ;; available from: -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;;; Code: diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el index 86a16036e10..e66c9655df1 100644 --- a/lisp/progmodes/idlwave.el +++ b/lisp/progmodes/idlwave.el @@ -44,7 +44,7 @@ ;; ;; New versions of IDLWAVE, documentation, and more information ;; available from: -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;; ;; INSTALLATION ;; ============ @@ -64,7 +64,7 @@ ;; The newest version of this file is available from the maintainer's ;; Webpage: ;; -;; http://idlwave.org +;; http://github.com/jdtsmith/idlwave ;; ;; DOCUMENTATION ;; ============= @@ -179,7 +179,7 @@ "Major mode for editing IDL .pro files." :tag "IDLWAVE" :link '(url-link :tag "Home Page" - "http://idlwave.org") + "http://github.com/jdtsmith/idlwave") :link '(emacs-commentary-link :tag "Commentary in idlw-shell.el" "idlw-shell.el") :link '(emacs-commentary-link :tag "Commentary in idlwave.el" "idlwave.el") @@ -1878,7 +1878,8 @@ The main features of this mode are Info documentation for this package is available. Use \\[idlwave-info] to display (complain to your sysadmin if that does not work). For Postscript, PDF, and HTML versions of the - documentation, check IDLWAVE's homepage at URL `http://idlwave.org'. + documentation, check IDLWAVE's homepage at URL + `http://github.com/jdtsmith/idlwave'. IDLWAVE has customize support - see the group `idlwave'. 10.Keybindings diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index cedc2986eda..f32d4641af0 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -26,8 +26,8 @@ ;; ===== ;; Emacs should enter Pascal mode when you find a Pascal source file. -;; When you have entered Pascal mode, you may get more info by pressing -;; C-h m. You may also get online help describing various functions by: +;; When you have entered Pascal mode, you can get more info by pressing +;; C-h m. You can also get help describing various functions by: ;; C-h f ;; If you want to customize Pascal mode to fit you better, you may add diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 743981b3714..065a182904f 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1096,16 +1096,28 @@ the line will be re-indented automatically if needed." (when (and electric-indent-mode (eq (char-before) last-command-event)) (cond - ((and (not (bolp)) - (memq (char-after) '(?\) ?\] ?\}))) + ;; Electric indent inside parens + ((and + (not (bolp)) + (let ((paren-start (python-syntax-context 'paren))) + ;; Check that point is inside parens. + (when paren-start + (not + ;; Filter the case where input is happening in the same + ;; line where the open paren is. + (= (line-number-at-pos) + (line-number-at-pos paren-start))))) + ;; When content has been added before the closing paren or a + ;; comma has been inserted, it's ok to do the trick. + (or + (memq (char-after) '(?\) ?\] ?\})) + (eq (char-before) ?,))) (save-excursion (goto-char (line-beginning-position)) - ;; If after going to the beginning of line the point - ;; is still inside a paren it's ok to do the trick - (when (python-syntax-context 'paren) - (let ((indentation (python-indent-calculate-indentation))) - (when (< (current-indentation) indentation) - (indent-line-to indentation)))))) + (let ((indentation (python-indent-calculate-indentation))) + (when (< (current-indentation) indentation) + (indent-line-to indentation))))) + ;; Electric colon ((and (eq ?: last-command-event) (memq ?: electric-indent-chars) (not current-prefix-arg) diff --git a/lisp/ps-def.el b/lisp/ps-def.el index 92a2e0b38cd..db0694549e1 100644 --- a/lisp/ps-def.el +++ b/lisp/ps-def.el @@ -325,8 +325,6 @@ ;; Emacs (property-change from) (overlay-change from) - (save-buffer-invisibility-spec buffer-invisibility-spec) - (buffer-invisibility-spec nil) before-string after-string) (while (< from to) (and (< property-change to) ; Don't search for property change diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el index 9837c20b84d..56ff13fbbb6 100644 --- a/lisp/vc/ediff-mult.el +++ b/lisp/vc/ediff-mult.el @@ -140,7 +140,7 @@ Useful commands (type ? to hide them and free up screen): uh/um:\tunmark all sessions marked for hiding/operation n,SPC:\tnext session p,DEL:\tprevious session - E:\tbrowse Ediff on-line manual + E:\tbrowse Ediff manual T:\ttoggle truncation of long file names q:\tquit this session group ") @@ -1464,7 +1464,7 @@ Useful commands: R in any Ediff session: display session registry n,SPC: next session p,DEL: previous session - E: browse Ediff on-line manual + E: browse Ediff manual q: bury registry diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el index d1332351a74..bb6ab1062c1 100644 --- a/lisp/vc/ediff-ptch.el +++ b/lisp/vc/ediff-ptch.el @@ -735,7 +735,7 @@ The second problem might be due to an incompatibility among these settings: ediff-patch-program = %S ediff-patch-options = %S ediff-backup-extension = %S ediff-backup-specs = %S -See Ediff on-line manual for more details on these variables. +See Ediff manual for more details on these variables. In particular, check the documentation for `ediff-backup-specs'. In any of the above cases, Ediff doesn't compare files automatically. diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el index 927a3ba7fb6..5418039143f 100644 --- a/lisp/vc/ediff.el +++ b/lisp/vc/ediff.el @@ -64,7 +64,7 @@ ;; compressed files. Details are given below. ;; Finally, Ediff supports directory-level comparison, merging and patching. -;; See the on-line manual for details. +;; See the Ediff manual for details. ;; This package builds upon the ideas borrowed from emerge.el and several ;; Ediff's functions are adaptations from emerge.el. Much of the functionality diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index e6bd897f4ac..1d75411ec1f 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -132,6 +132,8 @@ This applies when its SETUP argument is non-nil." log-edit-insert-changelog log-edit-show-files) "Hook run at the end of `log-edit'." + ;; Added log-edit-insert-message-template, moved log-edit-show-files. + :version "24.4" :group 'log-edit :type '(hook :options (log-edit-insert-message-template log-edit-insert-cvs-rcstemplate @@ -355,9 +357,15 @@ The first subexpression is the actual text of the field.") (set-match-data (list start (point))) (point)))) +(defun log-edit-goto-eoh () ;FIXME: Almost rfc822-goto-eoh! + (goto-char (point-min)) + (when (re-search-forward + "^\\([^[:alpha:]]\\|[[:alnum:]-]+[^[:alnum:]-:]\\)" nil 'move) + (goto-char (match-beginning 0)))) + (defun log-edit--match-first-line (limit) (let ((start (point))) - (rfc822-goto-eoh) + (log-edit-goto-eoh) (skip-chars-forward "\n") (and (< start (line-end-position)) (< (point) limit) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index c7cae8359bf..9c8ab3ba393 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -674,7 +674,7 @@ It is based on `log-edit-mode', and has Git-specific extensions.") (cl-flet ((boolean-arg-fn (argument) (lambda (value) (when (equal value "yes") (list argument))))) - ;; When operating on the whole tree, better pass nil than ".", since "." + ;; When operating on the whole tree, better pass "-a" than ".", since "." ;; fails when we're committing a merge. (apply 'vc-git-command nil 0 (if only files) (nconc (list "commit" "-m") @@ -684,7 +684,7 @@ It is based on `log-edit-mode', and has Git-specific extensions.") ("Amend" . ,(boolean-arg-fn "--amend")) ("Sign-Off" . ,(boolean-arg-fn "--signoff"))) comment) - (if only (list "--only" "--"))))))) + (if only (list "--only" "--") '("-a"))))))) (defun vc-git-find-revision (file rev buffer) (let* (process-file-side-effects diff --git a/src/ChangeLog b/src/ChangeLog index bb514753bdb..0f9b7431462 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,28 @@ +2014-07-03 Eli Zaretskii + + * dispnew.c (prepare_desired_row): Accept 2 additional arguments: + the window whose glyph row is being prepared and a flag whether it + is for mode/header line. Make sure the glyph row's marginal areas + are in sync with what the window wants. + (Bug#17892) + + * xdisp.c (display_line, display_mode_line): Call + prepare_desired_row with additional arguments, as appropriate. + + * dispextern.h (prepare_desired_row): Adjust prototype. + +2014-07-03 Dmitry Antipov + + * xfaces.c (init_frame_faces): Always realize basic faces (Bug#17889). + * menu.c (Fx_popup_dialog): Set Vmenu_updating_frame to avoid crash + caused by xw_popup_dialog in daemon mode (Bug#17891). + +2014-07-03 Eli Zaretskii + + * frame.c (do_switch_frame): When switching to another TTY frame, + make sure FrameCols and FrameRows are in sync with the new frame's + data. (Bug#17875) + 2014-07-02 Dmitry Antipov Shrink Lisp_Sub_Char_Table by preferring C integers to Lisp_Objects. diff --git a/src/dispextern.h b/src/dispextern.h index 5396aeb6c8e..0e04cc466d3 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3460,7 +3460,7 @@ void increment_matrix_positions (struct glyph_matrix *, void blank_row (struct window *, struct glyph_row *, int); void clear_glyph_matrix_rows (struct glyph_matrix *, int, int); void clear_glyph_row (struct glyph_row *); -void prepare_desired_row (struct glyph_row *); +void prepare_desired_row (struct window *, struct glyph_row *, bool); void update_single_window (struct window *, bool); void do_pending_window_change (bool); void change_frame_size (struct frame *, int, int, bool, bool, bool, bool); diff --git a/src/dispnew.c b/src/dispnew.c index 163780952a6..2d137b4abbd 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -449,7 +449,8 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y + x); if (w == NULL - || row == matrix->rows + dim.height - 1 + || (row == matrix->rows + dim.height - 1 + && WINDOW_WANTS_MODELINE_P (w)) || (row == matrix->rows && matrix->header_line_p)) { row->glyphs[TEXT_AREA] @@ -492,8 +493,9 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y = xnrealloc (row->glyphs[LEFT_MARGIN_AREA], dim.width, sizeof (struct glyph)); - /* The mode line never has marginal areas. */ - if (row == matrix->rows + dim.height - 1 + /* The mode line, if displayed, never has marginal areas. */ + if ((row == matrix->rows + dim.height - 1 + && !(w && WINDOW_WANTS_MODELINE_P (w))) || (row == matrix->rows && matrix->header_line_p)) { row->glyphs[TEXT_AREA] @@ -1049,13 +1051,16 @@ find_glyph_row_slice (struct glyph_matrix *window_matrix, #endif /* 0 */ -/* Prepare ROW for display. Desired rows are cleared lazily, - i.e. they are only marked as to be cleared by setting their +/* Prepare ROW for display in windows W. Desired rows are cleared + lazily, i.e. they are only marked as to be cleared by setting their enabled_p flag to zero. When a row is to be displayed, a prior - call to this function really clears it. */ + call to this function really clears it. In addition, this function + makes sure the marginal areas of ROW are in sync with the window's + display margins. MODE_LINE_P non-zero means we are preparing a + glyph row for header line or mode line. */ void -prepare_desired_row (struct glyph_row *row) +prepare_desired_row (struct window *w, struct glyph_row *row, bool mode_line_p) { if (!row->enabled_p) { @@ -1065,6 +1070,39 @@ prepare_desired_row (struct glyph_row *row) row->enabled_p = true; row->reversed_p = rp; } + if (mode_line_p) + { + /* Mode and header lines, if displayed, never have marginal + areas. If we are called with MODE_LINE_P non-zero, we are + displaying the mode/header line in this window, and so the + marginal areas of this glyph row should be eliminated. This + is needed when the mode/header line is switched on in a + window that has display margins. */ + if (w->left_margin_cols > 0) + row->glyphs[TEXT_AREA] = row->glyphs[LEFT_MARGIN_AREA]; + if (w->right_margin_cols > 0) + row->glyphs[RIGHT_MARGIN_AREA] = row->glyphs[LAST_AREA]; + } + else if (row == MATRIX_MODE_LINE_ROW (w->desired_matrix) + || row == MATRIX_HEADER_LINE_ROW (w->desired_matrix)) + { + /* The real number of glyphs reserved for the margins is + recorded in the glyph matrix, and can be different from + window's left_margin_cols and right_margin_cols; see + margin_glyphs_to_reserve for when that happens. */ + int left = w->desired_matrix->left_margin_glyphs; + int right = w->desired_matrix->right_margin_glyphs; + + /* Make sure the marginal areas of this row are in sync with + what the window wants, when the 1st/last row of the matrix + actually displays text and not header/mode line. */ + if (w->left_margin_cols > 0 + && (left != row->glyphs[TEXT_AREA] - row->glyphs[LEFT_MARGIN_AREA])) + row->glyphs[TEXT_AREA] = row->glyphs[LEFT_MARGIN_AREA] + left; + if (w->right_margin_cols > 0 + && (right != row->glyphs[LAST_AREA] - row->glyphs[RIGHT_MARGIN_AREA])) + row->glyphs[RIGHT_MARGIN_AREA] = row->glyphs[LAST_AREA] - right; + } } diff --git a/src/frame.c b/src/frame.c index c67a233f099..0ccc0f6fcfd 100644 --- a/src/frame.c +++ b/src/frame.c @@ -46,6 +46,7 @@ along with GNU Emacs. If not, see . */ #ifdef HAVE_WINDOW_SYSTEM #include "fontset.h" #endif +#include "cm.h" #ifdef MSDOS #include "msdos.h" #include "dosfns.h" @@ -854,7 +855,9 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor if (FRAME_TERMCAP_P (XFRAME (frame)) || FRAME_MSDOS_P (XFRAME (frame))) { - Lisp_Object top_frame = FRAME_TTY (XFRAME (frame))->top_frame; + struct frame *f = XFRAME (frame); + struct tty_display_info *tty = FRAME_TTY (f); + Lisp_Object top_frame = tty->top_frame; /* Don't mark the frame garbaged and/or obscured if we are switching to the frame that is already the top frame of that @@ -864,9 +867,16 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor if (FRAMEP (top_frame)) /* Mark previously displayed frame as now obscured. */ SET_FRAME_VISIBLE (XFRAME (top_frame), 2); - SET_FRAME_VISIBLE (XFRAME (frame), 1); + SET_FRAME_VISIBLE (f, 1); + /* If the new TTY frame changed dimensions, we need to + resync term.c's idea of the frame size with the new + frame's data. */ + if (FRAME_COLS (f) != FrameCols (tty)) + FrameCols (tty) = FRAME_COLS (f); + if (FRAME_LINES (f) != FrameRows (tty)) + FrameRows (tty) = FRAME_LINES (f); } - FRAME_TTY (XFRAME (frame))->top_frame = frame; + tty->top_frame = frame; } selected_frame = frame; diff --git a/src/menu.c b/src/menu.c index a523cfc6010..e0f226562f8 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1529,6 +1529,11 @@ for instance using the window manager, then this produces a quit and but I don't want to make one now. */ CHECK_WINDOW (window); + /* Note that xw_popup_dialog can call menu code, so + Vmenu_updating_frame should be set (Bug#17891). */ + eassert (f && FRAME_LIVE_P (f)); + XSETFRAME (Vmenu_updating_frame, f); + /* Force a redisplay before showing the dialog. If a frame is created just before showing the dialog, its contents may not have been fully drawn, as this depends on timing of events from the X server. Redisplay diff --git a/src/window.h b/src/window.h index bdc5dddb7e5..b9c2b1f5ba8 100644 --- a/src/window.h +++ b/src/window.h @@ -271,8 +271,10 @@ struct window int left_fringe_width; int right_fringe_width; - /* Width of left and right marginal areas in columns. - A value of 0 means no margin. */ + /* Requested width of left and right marginal areas in columns. A + value of 0 means no margin. The actual values are recorded in + the window's glyph matrix, in the left_margin_glyphs and + right_margin_glyphs members. */ int left_margin_cols; int right_margin_cols; diff --git a/src/xdisp.c b/src/xdisp.c index 31d293143f3..3e76d3df9f9 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -19878,7 +19878,7 @@ display_line (struct it *it) } /* Clear the result glyph row and enable it. */ - prepare_desired_row (row); + prepare_desired_row (it->w, row, false); row->y = it->current_y; row->start = it->start; @@ -21517,7 +21517,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) /* Don't extend on a previously drawn mode-line. This may happen if called from pos_visible_p. */ it.glyph_row->enabled_p = false; - prepare_desired_row (it.glyph_row); + prepare_desired_row (w, it.glyph_row, true); it.glyph_row->mode_line_p = 1; diff --git a/src/xfaces.c b/src/xfaces.c index 4571137a249..ead14f0116d 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -676,19 +676,9 @@ init_frame_faces (struct frame *f) } #endif /* HAVE_WINDOW_SYSTEM */ - /* Realize basic faces. Must have enough information in frame - parameters to realize basic faces at this point. */ -#ifdef HAVE_X_WINDOWS - if (!FRAME_X_P (f) || FRAME_X_WINDOW (f)) -#endif -#ifdef HAVE_NTGUI - if (!FRAME_WINDOW_P (f) || FRAME_W32_WINDOW (f)) -#endif -#ifdef HAVE_NS - if (!FRAME_NS_P (f) || FRAME_NS_WINDOW (f)) -#endif - if (!realize_basic_faces (f)) - emacs_abort (); + /* Realize faces early (Bug#17889). */ + if (!realize_basic_faces (f)) + emacs_abort (); } diff --git a/test/ChangeLog b/test/ChangeLog index 8c28eaf30dc..cf55beb87f0 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2014-07-03 Fabián Ezequiel Gallina + + * automated/python-tests.el (python-tests-self-insert): New function. + (python-triple-quote-pairing): Use it. + (python-util-forward-comment-1): New test. (Bug#17658) + 2014-06-30 Fabián Ezequiel Gallina * automated/subr-x-tests.el: New file. diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index f580e946b8f..a35242fe882 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -86,6 +86,24 @@ STRING, it is skipped so the next STRING occurrence is selected." found-point (and restore-point (goto-char starting-point))))) +(defun python-tests-self-insert (char-or-str) + "Call `self-insert-command' for chars in CHAR-OR-STR." + (let ((chars + (cond + ((characterp char-or-str) + (list char-or-str)) + ((stringp char-or-str) + (string-to-list char-or-str)) + ((not + (cl-remove-if #'characterp char-or-str)) + char-or-str) + (t (error "CHAR-OR-STR must be a char, string, or list of char"))))) + (mapc + (lambda (char) + (let ((last-command-event char)) + (call-interactively 'self-insert-command))) + chars))) + ;;; Tests for your tests, so you can test while you test. @@ -2715,9 +2733,6 @@ def foo(a, b, c): (should (string= (python-util-strip-string "\n \t \n\r ") "")) (should (string= (python-util-strip-string "") ""))) - -;;; Electricity - (ert-deftest python-util-forward-comment-1 () (python-tests-with-temp-buffer (concat @@ -2730,36 +2745,85 @@ def foo(a, b, c): (python-util-forward-comment -1) (should (= (point) (point-min))))) + +;;; Electricity + +(ert-deftest python-parens-electric-indent-1 () + (require 'electric) + (let ((eim electric-indent-mode)) + (unwind-protect + (progn + (python-tests-with-temp-buffer + " +from django.conf.urls import patterns, include, url + +from django.contrib import admin + +from myapp import views + + +urlpatterns = patterns('', + url(r'^$', views.index +) +" + (electric-indent-mode 1) + (python-tests-look-at "views.index") + (end-of-line) + + ;; Inserting commas within the same line should leave + ;; indentation unchanged. + (python-tests-self-insert ",") + (should (= (current-indentation) 4)) + + ;; As well as any other input happening within the same + ;; set of parens. + (python-tests-self-insert " name='index')") + (should (= (current-indentation) 4)) + + ;; But a comma outside it, should trigger indentation. + (python-tests-self-insert ",") + (should (= (current-indentation) 23)) + + ;; Newline indents to the first argument column + (python-tests-self-insert "\n") + (should (= (current-indentation) 23)) + + ;; All this input must not change indentation + (indent-line-to 4) + (python-tests-self-insert "url(r'^/login$', views.login)") + (should (= (current-indentation) 4)) + + ;; But this comma does + (python-tests-self-insert ",") + (should (= (current-indentation) 23)))) + (or eim (electric-indent-mode -1))))) + (ert-deftest python-triple-quote-pairing () (require 'electric) (let ((epm electric-pair-mode)) (unwind-protect (progn (python-tests-with-temp-buffer - "\"\"\n" - (or epm (electric-pair-mode 1)) - (goto-char (1- (point-max))) - (let ((last-command-event ?\")) - (call-interactively 'self-insert-command)) - (should (string= (buffer-string) - "\"\"\"\"\"\"\n")) - (should (= (point) 4))) + "\"\"\n" + (or epm (electric-pair-mode 1)) + (goto-char (1- (point-max))) + (python-tests-self-insert ?\") + (should (string= (buffer-string) + "\"\"\"\"\"\"\n")) + (should (= (point) 4))) (python-tests-with-temp-buffer - "\n" - (let ((last-command-event ?\")) - (dotimes (i 3) - (call-interactively 'self-insert-command))) - (should (string= (buffer-string) - "\"\"\"\"\"\"\n")) - (should (= (point) 4))) + "\n" + (python-tests-self-insert (list ?\" ?\" ?\")) + (should (string= (buffer-string) + "\"\"\"\"\"\"\n")) + (should (= (point) 4))) (python-tests-with-temp-buffer - "\"\n\"\"\n" - (goto-char (1- (point-max))) - (let ((last-command-event ?\")) - (call-interactively 'self-insert-command)) - (should (= (point) (1- (point-max)))) - (should (string= (buffer-string) - "\"\n\"\"\"\n")))) + "\"\n\"\"\n" + (goto-char (1- (point-max))) + (python-tests-self-insert ?\") + (should (= (point) (1- (point-max)))) + (should (string= (buffer-string) + "\"\n\"\"\"\n")))) (or epm (electric-pair-mode -1)))))