aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mackenzie2016-03-30 16:53:36 +0000
committerAlan Mackenzie2016-03-30 16:53:36 +0000
commited19f207449c43f7f08285ada87ae7a46c61c8d1 (patch)
treefc495d64b752f276f1e8dc86427098de80789988
parenteabd667a9584fe5bd2422e296d256dceea67debf (diff)
parent7c1802f6ffc2704ba8042c7c1c6faa73dfa210d1 (diff)
downloademacs-ed19f207449c43f7f08285ada87ae7a46c61c8d1.tar.gz
emacs-ed19f207449c43f7f08285ada87ae7a46c61c8d1.zip
Merge branch 'emacs-25' of /home/acm/emacs/emacs.git/emacs-25 into emacs-25
-rw-r--r--ChangeLog.2125
-rw-r--r--admin/release-process4
-rwxr-xr-xbuild-aux/gitlog-to-changelog19
-rwxr-xr-xbuild-aux/gitlog-to-emacslog2
-rw-r--r--configure.ac18
-rw-r--r--doc/emacs/abbrevs.texi9
-rw-r--r--doc/emacs/anti.texi6
-rw-r--r--doc/emacs/display.texi10
-rw-r--r--doc/emacs/emacs.texi1
-rw-r--r--doc/emacs/files.texi2
-rw-r--r--doc/emacs/maintaining.texi18
-rw-r--r--doc/emacs/windows.texi86
-rw-r--r--doc/lispref/abbrevs.texi9
-rw-r--r--doc/lispref/text.texi80
-rw-r--r--doc/man/emacsclient.112
-rw-r--r--doc/misc/eshell.texi4
-rw-r--r--doc/misc/gnus-coding.texi10
-rw-r--r--doc/misc/texinfo.tex133
-rw-r--r--etc/GNUS-NEWS292
-rw-r--r--etc/NEWS984
-rw-r--r--etc/themes/tsdh-light-theme.el7
-rw-r--r--lib/sys_select.in.h19
-rw-r--r--lib/time_rz.c6
-rw-r--r--lisp/Makefile.in8
-rw-r--r--lisp/calendar/todo-mode.el25
-rw-r--r--lisp/comint.el7
-rw-r--r--lisp/dired-x.el7
-rw-r--r--lisp/dired.el17
-rw-r--r--lisp/doc-view.el2
-rw-r--r--lisp/emacs-lisp/cursor-sensor.el2
-rw-r--r--lisp/emacs-lisp/map.el36
-rw-r--r--lisp/emacs-lisp/smie.el5
-rw-r--r--lisp/forms.el2
-rw-r--r--lisp/gnus/mm-decode.el1
-rw-r--r--lisp/gnus/mml-sec.el16
-rw-r--r--lisp/gnus/mml-smime.el4
-rw-r--r--lisp/gnus/mml1991.el5
-rw-r--r--lisp/gnus/mml2015.el5
-rw-r--r--lisp/isearch.el34
-rw-r--r--lisp/loadup.el4
-rw-r--r--lisp/mail/rmail.el2
-rw-r--r--lisp/menu-bar.el2
-rw-r--r--lisp/midnight.el8
-rw-r--r--lisp/minibuffer.el2
-rw-r--r--lisp/net/shr.el22
-rw-r--r--lisp/net/soap-client.el10
-rw-r--r--lisp/net/tramp-sh.el1
-rw-r--r--lisp/progmodes/cc-defs.el2
-rw-r--r--lisp/progmodes/compile.el8
-rw-r--r--lisp/progmodes/elisp-mode.el2
-rw-r--r--lisp/progmodes/idlw-toolbar.el4
-rw-r--r--lisp/progmodes/prog-mode.el68
-rw-r--r--lisp/progmodes/python.el36
-rw-r--r--lisp/progmodes/ruby-mode.el49
-rw-r--r--lisp/progmodes/xref.el11
-rw-r--r--lisp/replace.el36
-rw-r--r--lisp/simple.el36
-rw-r--r--lisp/startup.el14
-rw-r--r--lisp/term.el7
-rw-r--r--lisp/xml.el2
-rw-r--r--lisp/xt-mouse.el129
-rw-r--r--nextstep/README28
-rw-r--r--src/alloc.c2
-rw-r--r--src/bidi.c2
-rw-r--r--src/editfns.c6
-rw-r--r--src/emacsgtkfixed.c3
-rw-r--r--src/emacsgtkfixed.h1
-rw-r--r--src/floatfns.c3
-rw-r--r--src/font.c2
-rw-r--r--src/frame.c2
-rw-r--r--src/ftfont.c7
-rw-r--r--src/gtkutil.c112
-rw-r--r--src/image.c3
-rw-r--r--src/keyboard.c19
-rw-r--r--src/lisp.h3
-rw-r--r--src/nsterm.m172
-rw-r--r--src/term.c7
-rw-r--r--src/w32font.c3
-rw-r--r--src/xdisp.c90
-rw-r--r--src/xfns.c2
-rw-r--r--src/xwidget.c4
-rw-r--r--test/automated/map-tests.el9
-rw-r--r--test/automated/package-test.el2
-rw-r--r--test/automated/ruby-mode-tests.el8
-rw-r--r--test/automated/tramp-tests.el13
-rw-r--r--test/automated/xt-mouse-tests.el110
-rw-r--r--test/indent/ruby.rb47
87 files changed, 1925 insertions, 1222 deletions
diff --git a/ChangeLog.2 b/ChangeLog.2
index 17712693e8a..b2dc6c5dd30 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -9560,8 +9560,8 @@
9560 (xref-backend-identifier-completion-table): 9560 (xref-backend-identifier-completion-table):
9561 New generic functions. 9561 New generic functions.
9562 9562
9563 * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Add 9563 * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
9564 `elisp--xref-backend' to the beginning of 9564 Add `elisp--xref-backend' to the beginning of
9565 `xref-backend-functions', locally. Delete references to 9565 `xref-backend-functions', locally. Delete references to
9566 removed functions and vars. 9566 removed functions and vars.
9567 (elisp-xref-find): Remove. 9567 (elisp-xref-find): Remove.
@@ -9579,7 +9579,8 @@
9579 9579
9580 Support rectangular regions for more commands 9580 Support rectangular regions for more commands
9581 9581
9582 * lisp/simple.el (region-extract-function): Handle the arg value ‘bounds’. 9582 * lisp/simple.el (region-extract-function): Handle the arg
9583 value ‘bounds’.
9583 (region-insert-function): New function. 9584 (region-insert-function): New function.
9584 (shell-command-on-region): Add arg ‘region-noncontiguous-p’. 9585 (shell-command-on-region): Add arg ‘region-noncontiguous-p’.
9585 If non-nil, operate on multiple chunks. 9586 If non-nil, operate on multiple chunks.
@@ -9605,7 +9606,7 @@
9605 If non-nil, operate on multiple chunks. 9606 If non-nil, operate on multiple chunks.
9606 9607
9607 * src/casefiddle.c (Fdowncase_region): Add arg ‘region-noncontiguous-p’. 9608 * src/casefiddle.c (Fdowncase_region): Add arg ‘region-noncontiguous-p’.
9608 If non-nil, operate on multiple chunks. (Bug#19829) 9609 If non-nil, operate on multiple chunks. (Bug#19829)
9609 9610
96102015-11-14 Dmitry Gutov <dgutov@yandex.ru> 96112015-11-14 Dmitry Gutov <dgutov@yandex.ru>
9611 9612
@@ -9837,7 +9838,6 @@
98372015-11-13 Juanma Barranquero <lekktu@gmail.com> 98382015-11-13 Juanma Barranquero <lekktu@gmail.com>
9838 9839
9839 * test/automated/simple-test.el: Add test for bug#20698 (bug#21885) 9840 * test/automated/simple-test.el: Add test for bug#20698 (bug#21885)
9840
9841 (simple-test--transpositions): New macro. 9841 (simple-test--transpositions): New macro.
9842 (simple-transpose-subr): New test. 9842 (simple-transpose-subr): New test.
9843 9843
@@ -9848,7 +9848,6 @@
98482015-11-13 Juanma Barranquero <lekktu@gmail.com> 98482015-11-13 Juanma Barranquero <lekktu@gmail.com>
9849 9849
9850 * src/undo.c: Small fixes for previous change 9850 * src/undo.c: Small fixes for previous change
9851
9852 (run_undoable_change): Mark void argument list. 9851 (run_undoable_change): Mark void argument list.
9853 (record_property_change): Remove unused variable `boundary'. 9852 (record_property_change): Remove unused variable `boundary'.
9854 9853
@@ -9909,7 +9908,7 @@
9909 shr: don't invoke unbound function (Bug#21895) 9908 shr: don't invoke unbound function (Bug#21895)
9910 9909
9911 * lisp/net/shr.el (have-fringes-p): New function. 9910 * lisp/net/shr.el (have-fringes-p): New function.
9912 (shr-insert-document, shr-fill-text): Use it. 9911 (shr-insert-document, shr-fill-text): Use it.
9913 9912
99142015-11-12 Juanma Barranquero <lekktu@gmail.com> 99132015-11-12 Juanma Barranquero <lekktu@gmail.com>
9915 9914
@@ -9966,8 +9965,8 @@
9966 9965
9967 Enable sorting of JSON object keys when encoding 9966 Enable sorting of JSON object keys when encoding
9968 9967
9969 * lisp/json.el (json-encoding-object-sort-predicate): New variable for 9968 * lisp/json.el (json-encoding-object-sort-predicate): New variable
9970 specifying a sorting predicate for JSON objects during encoding. 9969 for specifying a sorting predicate for JSON objects during encoding.
9971 (json--plist-to-alist): New utility function. 9970 (json--plist-to-alist): New utility function.
9972 (json-encode-hash-table): Re-use `json-encode-alist' when object keys 9971 (json-encode-hash-table): Re-use `json-encode-alist' when object keys
9973 are to be sorted. 9972 are to be sorted.
@@ -9977,8 +9976,8 @@
9977 to be sorted. 9976 to be sorted.
9978 (json-pretty-print-buffer-ordered): New command to pretty print the 9977 (json-pretty-print-buffer-ordered): New command to pretty print the
9979 buffer with object keys sorted alphabetically. 9978 buffer with object keys sorted alphabetically.
9980 (json-pretty-print-ordered): New command to pretty print the region with 9979 (json-pretty-print-ordered): New command to pretty print the region
9981 object keys sorted alphabetically. 9980 with object keys sorted alphabetically.
9982 9981
9983 * test/automated/json-tests.el (test-json-plist-to-alist) 9982 * test/automated/json-tests.el (test-json-plist-to-alist)
9984 (test-json-encode-plist, test-json-encode-hash-table) 9983 (test-json-encode-plist, test-json-encode-hash-table)
@@ -9989,7 +9988,7 @@
9989 9988
99902015-11-12 Juanma Barranquero <lekktu@gmail.com> 99892015-11-12 Juanma Barranquero <lekktu@gmail.com>
9991 9990
9992 * test/automated/keymap-tests.el: New test file 9991 * test/automated/keymap-tests.el: New test file.
9993 9992
99942015-11-12 Ken Raeburn <raeburn@raeburn.org> 99932015-11-12 Ken Raeburn <raeburn@raeburn.org>
9995 9994
@@ -10036,9 +10035,9 @@
10036 10035
10037 Use color cache for creating bitmap 10036 Use color cache for creating bitmap
10038 10037
10039 * src/image.c (x_create_bitmap_from_xpm_data) [ALLOC_XPM_COLORS]: Set 10038 * src/image.c (x_create_bitmap_from_xpm_data) [ALLOC_XPM_COLORS]:
10040 attributes to use the caching color allocator. Initialize and free 10039 Set attributes to use the caching color allocator. Initialize and
10041 the cache. 10040 free the cache.
10042 10041
100432015-11-12 Eli Barzilay <eli@barzilay.org> 100422015-11-12 Eli Barzilay <eli@barzilay.org>
10044 10043
@@ -10065,32 +10064,32 @@
10065 10064
10066 * lisp/net/soap-inspect.el: Remove version header. 10065 * lisp/net/soap-inspect.el: Remove version header.
10067 10066
10068 * lisp/net/soap-client.el, lisp/net/soap-inspect.el: Fix first line header 10067 * soap-client.el, soap-inspect.el, jira2.el: Fix first line header
10069 format. 10068 format.
10070 10069
100712015-11-11 Alan Mackenzie <acm@muc.de> 100702015-11-11 Alan Mackenzie <acm@muc.de>
10072 10071
10073 CC Mode: Respect users' settings of open-paren-in-column-0-is-defun-start. 10072 CC Mode: Respect users' settings of open-paren-in-column-0-is-defun-start.
10074 10073
10075 lisp/progmodes/cc-engine.el (c-backward-single-comment, c-backward-comments) 10074 * lisp/progmodes/cc-engine.el (c-backward-single-comment)
10076 (c-invalidate-state-cache-1, c-parse-state-1, c-guess-basic-syntax): 10075 (c-backward-comments, c-invalidate-state-cache-1, c-parse-state-1)
10077 remove bindings of open-paren-in-column-0-is-defun-start to nil. 10076 (c-guess-basic-syntax):
10077 Remove bindings of open-paren-in-column-0-is-defun-start to nil.
10078 (c-get-fallback-scan-pos): "New" function (existed several years ago). 10078 (c-get-fallback-scan-pos): "New" function (existed several years ago).
10079 (c-parse-state-get-strategy): Reintroduce the 'BOD strategy, using 10079 (c-parse-state-get-strategy): Reintroduce the 'BOD strategy, using
10080 c-get-fallback-scan-pos. 10080 c-get-fallback-scan-pos.
10081 (c-parse-state-1): Handle 'BOD strategy. 10081 (c-parse-state-1): Handle 'BOD strategy.
10082 10082
10083 lisp/progmodes/cc-mode.el (c-before-change, c-after-change) 10083 * lisp/progmodes/cc-mode.el (c-before-change, c-after-change)
10084 c-font-lock-fontify-region): remove bindings of 10084 (c-font-lock-fontify-region): Remove bindings of
10085 open-paren-in-column-0-is-defun-start to nil. 10085 open-paren-in-column-0-is-defun-start to nil.
10086 10086
10087 cc-mode.texi (Performance Issues, Limitations and Known Bugs): Fix mix up 10087 * doc/misc/cc-mode.texi (Performance Issues)
10088 between @chapter and @appendix. 10088 (Limitations and Known Bugs): Fix mix up between @chapter and @appendix.
10089 10089
100902015-11-11 Artur Malabarba <bruce.connor.am@gmail.com> 100902015-11-11 Artur Malabarba <bruce.connor.am@gmail.com>
10091 10091
10092 * lisp/obarray.el: Fix shadowed variables 10092 * lisp/obarray.el: Fix shadowed variables.
10093
10094 (obarray-map, obarray-remove, obarray-put, obarray-get): 10093 (obarray-map, obarray-remove, obarray-put, obarray-get):
10095 Change OBARRAY arg to OB to avoid shadowing ‘obarray’. 10094 Change OBARRAY arg to OB to avoid shadowing ‘obarray’.
10096 10095
@@ -10128,8 +10127,8 @@
10128 10127
10129 New file with obarray functions. 10128 New file with obarray functions.
10130 10129
10131 * lisp/obarray.el: basic obarray functions extracted from abbrev.el 10130 * lisp/obarray.el: Basic obarray functions extracted from abbrev.el.
10132 * test/automated/obarray-tests.el: new file 10131 * test/automated/obarray-tests.el: New file.
10133 10132
101342015-11-11 Eli Zaretskii <eliz@gnu.org> 101332015-11-11 Eli Zaretskii <eliz@gnu.org>
10135 10134
@@ -10217,7 +10216,7 @@
10217 10216
10218 * lisp/net/tramp.el (tramp-handle-file-equal-p) 10217 * lisp/net/tramp.el (tramp-handle-file-equal-p)
10219 (tramp-handle-file-in-directory-p): New defuns. Suggested by 10218 (tramp-handle-file-in-directory-p): New defuns. Suggested by
10220 Harvey Chapman <hchapman@3gfp.com> 10219 Harvey Chapman <hchapman@3gfp.com>.
10221 10220
10222 * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist): 10221 * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
10223 * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): 10222 * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
@@ -10244,11 +10243,11 @@
10244 10243
10245 Avoid creating notification objects when possible 10244 Avoid creating notification objects when possible
10246 10245
10247 * src/nsterm.m (windowWillEnterFullScreen, windowWillExitFullScreen:, 10246 * src/nsterm.m (windowWillEnterFullScreen, windowWillExitFullScreen:)
10248 windowDidEnterFullScreen, windowDidExitFullScreen): provide 10247 (windowDidEnterFullScreen, windowDidExitFullScreen): Provide convenience
10249 convenience functions that do not require a notification object. When 10248 functions that do not require a notification object. When needed,
10250 needed, define NSWindowDidEnterFullScreenNotification to allow for 10249 define NSWindowDidEnterFullScreenNotification to allow for compilation
10251 compilation on OS X 10.6.8. 10250 on OS X 10.6.8.
10252 10251
102532015-11-10 Paul Eggert <eggert@cs.ucla.edu> 102522015-11-10 Paul Eggert <eggert@cs.ucla.edu>
10254 10253
@@ -10281,8 +10280,7 @@
102812015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> 102802015-11-10 Artur Malabarba <bruce.connor.am@gmail.com>
10282 10281
10283 * doc/lispref/variables.texi (Directory Local Variables): 10282 * doc/lispref/variables.texi (Directory Local Variables):
10284 10283 Document dir-locals wildcards.
10285 Document dir-locals wildcards
10286 10284
10287 * lisp/files.el (dir-locals-file): Point to Info node. 10285 * lisp/files.el (dir-locals-file): Point to Info node.
10288 10286
@@ -10293,14 +10291,12 @@
10293 10291
102942015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> 102922015-11-10 Artur Malabarba <bruce.connor.am@gmail.com>
10295 10293
10296 * lisp/files.el: Don't allow customization of dir-locals sorting 10294 * lisp/files.el: Don't allow customization of dir-locals sorting.
10297
10298 In retrospect, this is not a good idea for the same reason that 10295 In retrospect, this is not a good idea for the same reason that
10299 `dir-locals-file' is a defconst, because it is important that this 10296 `dir-locals-file' is a defconst, because it is important that this
10300 behaviour be "uniform across different environments and users". 10297 behaviour be "uniform across different environments and users".
10301 Sure, the user can still change the sorting with a hack, but we 10298 Sure, the user can still change the sorting with a hack, but we
10302 shouldn't encourage them to change it. 10299 shouldn't encourage them to change it.
10303
10304 (dir-locals--all-files): Return list in the order returned by 10300 (dir-locals--all-files): Return list in the order returned by
10305 `file-expand-wildcards'. 10301 `file-expand-wildcards'.
10306 (file-expand-wildcards): Document the sorting predicate used. 10302 (file-expand-wildcards): Document the sorting predicate used.
@@ -10308,54 +10304,52 @@
10308 10304
103092015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> 103052015-11-10 Artur Malabarba <bruce.connor.am@gmail.com>
10310 10306
10311 * lisp/files.el (dir-locals-read-from-file): Better handle errors 10307 * lisp/files.el (dir-locals-read-from-file): Better handle errors.
10312 10308
10313 * lisp/isearch.el (search-default-regexp-mode): change default value 10309 * lisp/isearch.el (search-default-regexp-mode): Change default value.
10314 10310
103152015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> 103112015-11-10 Artur Malabarba <bruce.connor.am@gmail.com>
10316 10312
10317 * lisp/files.el (dir-locals-find-file): Don't stop at unreadable files 10313 * lisp/files.el (dir-locals-find-file): Don't stop at unreadable files.
10318
10319 `locate-dominating-file' will now keep looking if the files it finds in 10314 `locate-dominating-file' will now keep looking if the files it finds in
10320 a given directory are unreadable (or not files). 10315 a given directory are unreadable (or not files).
10321 10316
103222015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> 103172015-11-10 Artur Malabarba <bruce.connor.am@gmail.com>
10323 10318
10324 * lisp/files.el (dir-locals-file): Allow wildcards 10319 * lisp/files.el (dir-locals-file): Allow wildcards.
10325
10326 (dir-locals-find-file, dir-locals-collect-variables) 10320 (dir-locals-find-file, dir-locals-collect-variables)
10327 (dir-locals-read-from-file): Update accordingly. 10321 (dir-locals-read-from-file): Update accordingly.
10328 (hack-dir-local-variables): Rename a local variable. 10322 (hack-dir-local-variables): Rename a local variable.
10329 10323
10330 * lisp/files-x.el (modify-dir-local-variable): Update accordingly 10324 * lisp/files-x.el (modify-dir-local-variable): Update accordingly.
10331 10325
10332 * lisp/help-fns.el (describe-variable): Update accordingly 10326 * lisp/help-fns.el (describe-variable): Update accordingly.
10333 10327
10334 * .gitignore: Add .dir-locals?.el 10328 * .gitignore: Add .dir-locals?.el.
10335 10329
103362015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> 103302015-11-10 Artur Malabarba <bruce.connor.am@gmail.com>
10337 10331
10338 * lisp/emacs-lisp/map.el (map-merge-with): New function 10332 * lisp/emacs-lisp/map.el (map-merge-with): New function.
10339 10333
10340 * test/automated/map-tests.el (test-map-merge-with): New test 10334 * test/automated/map-tests.el (test-map-merge-with): New test.
10341 10335
103422015-11-10 Karl Fogel <kfogel@red-bean.com> 103362015-11-10 Karl Fogel <kfogel@red-bean.com>
10343 10337
10344 Fix some recently-perturbed bookmark autoloads 10338 Fix some recently-perturbed bookmark autoloads
10345 10339
10346 * lisp/bookmark.el (bookmark-set-internal): Remove unnecessary autoload. 10340 * lisp/bookmark.el (bookmark-set-internal): Remove unnecessary autoload.
10347 (bookmark-set): Restore autoload. 10341 (bookmark-set): Restore autoload.
10348 (bookmark-set-no-overwrite): Add autoload. 10342 (bookmark-set-no-overwrite): Add autoload.
10349 10343
10350 Thanks to Juanma Barranquero for noticing the autoload problems 10344 Thanks to Juanma Barranquero for noticing the autoload problems
10351 introduced by my recent commit adding/changing the above functions 10345 introduced by my recent commit adding/changing the above functions
10352 (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978). 10346 (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
10353 10347
103542015-11-10 Noah Friedman <friedman@splode.com> 103482015-11-09 Noah Friedman <friedman@splode.com>
10355 10349
10356 (ydump-buffer): Handle case where gap is at the start of buffer. 10350 * etc/emacs-buffer.gdb (ydump-buffer): Handle case where gap is at
10357 I don't recall if older versions of gdb were less strict but you 10351 the start of buffer. I don't recall if older versions of gdb were
10358 cannot dump a 0-length range in gdb 7.9.1. 10352 less strict but you cannot dump a 0-length range in gdb 7.9.1.
10359 10353
103602015-11-10 Dmitry Gutov <dgutov@yandex.ru> 103542015-11-10 Dmitry Gutov <dgutov@yandex.ru>
10361 10355
@@ -10503,13 +10497,13 @@
10503 Offer non-overwrite bookmark setter (Bug#15746) 10497 Offer non-overwrite bookmark setter (Bug#15746)
10504 10498
10505 * lisp/bookmark.el (bookmark-set-internal): New helper function to do 10499 * lisp/bookmark.el (bookmark-set-internal): New helper function to do
10506 what `bookmark-set' used to do, but with more choices for overwrite 10500 what `bookmark-set' used to do, but with more choices for overwrite
10507 vs push, and with minor changes to the interactive prompt format. 10501 vs push, and with minor changes to the interactive prompt format.
10508 (bookmark-set): Rewrite as wrapper around above. 10502 (bookmark-set): Rewrite as wrapper around above.
10509 If overwriting, inform the user of that in the prompt. 10503 If overwriting, inform the user of that in the prompt.
10510 (bookmark-set-no-overwrite): New function, also done as wrapper. 10504 (bookmark-set-no-overwrite): New function, also done as wrapper.
10511 Bind to "M" in `ctl-x-r-map' autoloads. 10505 Bind to "M" in `ctl-x-r-map' autoloads.
10512 (bookmark-map): Similarly bind "M" here. 10506 (bookmark-map): Similarly bind "M" here.
10513 10507
105142015-11-08 Paul Eggert <eggert@cs.ucla.edu> 105082015-11-08 Paul Eggert <eggert@cs.ucla.edu>
10515 10509
@@ -10595,7 +10589,8 @@
10595 unchanged, in which case no clearing is needed (and sh_offset isn't 10589 unchanged, in which case no clearing is needed (and sh_offset isn't
10596 necessarily valid, which can lead to a wild memset). 10590 necessarily valid, which can lead to a wild memset).
10597 10591
10598 * src/unexelf.c (unexec): Properly handle _OBJC_ symbols in bss sections. 10592 * src/unexelf.c (unexec): Properly handle _OBJC_ symbols in
10593 bss sections.
10599 10594
106002015-11-08 Alan Modra <amodra@gmail.com> 105952015-11-08 Alan Modra <amodra@gmail.com>
10601 10596
@@ -10656,8 +10651,8 @@
10656 10651
10657 Remove dirs in vc project roots from the the vc project library roots 10652 Remove dirs in vc project roots from the the vc project library roots
10658 10653
10659 * lisp/progmodes/project.el (project-library-roots): Remove 10654 * lisp/progmodes/project.el (project-library-roots):
10660 directories inside the project roots from the result. 10655 Remove directories inside the project roots from the result.
10661 (http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html) 10656 (http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html)
10662 10657
106632015-11-08 Dmitry Gutov <dgutov@yandex.ru> 106582015-11-08 Dmitry Gutov <dgutov@yandex.ru>
diff --git a/admin/release-process b/admin/release-process
index 2f23dac9b7f..3f75ff52ca4 100644
--- a/admin/release-process
+++ b/admin/release-process
@@ -237,7 +237,7 @@ TUTORIAL.zh
237 237
238** Check the manual. 238** Check the manual.
239 239
240abbrevs.texi 240abbrevs.texi Steve Byrne
241ack.texi 241ack.texi
242anti.texi 242anti.texi
243arevert-xtra.texi 243arevert-xtra.texi
@@ -292,7 +292,7 @@ xresources.texi
292 292
293** Check the Lisp manual. 293** Check the Lisp manual.
294 294
295abbrevs.texi 295abbrevs.texi Steve Byrne
296anti.texi 296anti.texi
297back.texi 297back.texi
298backups.texi 298backups.texi
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index a2513d0efc7..83bafdffa6f 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"'
3 if 0; 3 if 0;
4# Convert git log output to ChangeLog format. 4# Convert git log output to ChangeLog format.
5 5
6my $VERSION = '2016-01-12 23:09'; # UTC 6my $VERSION = '2016-03-22 21:49'; # UTC
7# The definition above must lie within the first 8 lines in order 7# The definition above must lie within the first 8 lines in order
8# for the Emacs time-stamp write hook (at end) to update it. 8# for the Emacs time-stamp write hook (at end) to update it.
9# If you change this file with Emacs, please let the write hook 9# If you change this file with Emacs, please let the write hook
@@ -298,9 +298,7 @@ sub git_dir_option($)
298 { 298 {
299 if ($sha =~ /^$_/) 299 if ($sha =~ /^$_/)
300 { 300 {
301 $skipflag = 1; 301 $skipflag = $_;
302 ## Perhaps only warn if a pattern matches more than once?
303 warn "$ME: warning: skipping $sha due to $_\n";
304 last; 302 last;
305 } 303 }
306 } 304 }
@@ -386,8 +384,17 @@ sub git_dir_option($)
386 } 384 }
387 385
388 # Ignore commits that match the --ignore-matching pattern, if specified. 386 # Ignore commits that match the --ignore-matching pattern, if specified.
389 if (! ($skipflag || (defined $ignore_matching 387 if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/)
390 && @line && $line[0] =~ /$ignore_matching/))) 388 {
389 $skipflag = 1;
390 }
391 elsif ($skipflag)
392 {
393 ## Perhaps only warn if a pattern matches more than once?
394 warn "$ME: warning: skipping $sha due to $skipflag\n";
395 }
396
397 if (! $skipflag)
391 { 398 {
392 if (defined $ignore_line && @line) 399 if (defined $ignore_line && @line)
393 { 400 {
diff --git a/build-aux/gitlog-to-emacslog b/build-aux/gitlog-to-emacslog
index bcc47b1b28d..5c187f5eae0 100755
--- a/build-aux/gitlog-to-emacslog
+++ b/build-aux/gitlog-to-emacslog
@@ -77,7 +77,7 @@ test -d .git || {
77# Maybe we should skip all "Merge branch 'master'" messages. 77# Maybe we should skip all "Merge branch 'master'" messages.
78# See eg the cairo-related ones. 78# See eg the cairo-related ones.
79./build-aux/gitlog-to-changelog \ 79./build-aux/gitlog-to-changelog \
80 --ignore-matching="^; |^Merge branch '(master|emacs-[0-9][0-9])' of git\.(savannah|sv)\.gnu\.org:/srv/git/emacs$|^Merge remote-tracking branch '.*'$" \ 80 --ignore-matching="^; |^Merge branch '[^']*' of git\.(savannah|sv)\.gnu\.org:/srv/git/emacs|^Merge remote-tracking branch '.*'$" \
81 --ignore-line='^; ' --format='%B' \ 81 --ignore-line='^; ' --format='%B' \
82 "$gen_origin..$new_origin" >"ChangeLog.tmp" || exit 82 "$gen_origin..$new_origin" >"ChangeLog.tmp" || exit
83 83
diff --git a/configure.ac b/configure.ac
index 075f6119ead..d31b8df2b04 100644
--- a/configure.ac
+++ b/configure.ac
@@ -877,18 +877,19 @@ AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang],
877 877
878# When compiling with GCC, prefer -isystem to -I when including system 878# When compiling with GCC, prefer -isystem to -I when including system
879# include files, to avoid generating useless diagnostics for the files. 879# include files, to avoid generating useless diagnostics for the files.
880if test "$gl_gcc_warnings" != yes; then 880AS_IF([test "$gl_gcc_warnings" != yes],
881 [
881 isystem='-I' 882 isystem='-I'
882 if test "$emacs_cv_clang" = yes 883 AS_IF([test "$emacs_cv_clang" = yes],
883 then 884 [
884 # Turn off some warnings if supported. 885 # Turn off some warnings if supported.
885 gl_WARN_ADD([-Wno-switch]) 886 gl_WARN_ADD([-Wno-switch])
886 gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare]) 887 gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare])
887 gl_WARN_ADD([-Wno-pointer-sign]) 888 gl_WARN_ADD([-Wno-pointer-sign])
888 gl_WARN_ADD([-Wno-string-plus-int]) 889 gl_WARN_ADD([-Wno-string-plus-int])
889 gl_WARN_ADD([-Wno-unknown-attributes]) 890 gl_WARN_ADD([-Wno-unknown-attributes])
890 fi 891 ])
891else 892 ],[
892 isystem='-isystem ' 893 isystem='-isystem '
893 894
894 # This, $nw, is the list of warnings we disable. 895 # This, $nw, is the list of warnings we disable.
@@ -899,10 +900,9 @@ else
899 # Old toolkits mishandle 'const'. 900 # Old toolkits mishandle 'const'.
900 nw="$nw -Wwrite-strings" 901 nw="$nw -Wwrite-strings"
901 ;; 902 ;;
902 *)
903 gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
904 ;;
905 esac 903 esac
904 AS_IF([test -z "$nw"],
905 [gl_WARN_ADD([-Werror], [WERROR_CFLAGS])])
906 AC_SUBST([WERROR_CFLAGS]) 906 AC_SUBST([WERROR_CFLAGS])
907 907
908 nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings 908 nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
@@ -985,7 +985,7 @@ else
985 985
986 gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) 986 gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
987 AC_SUBST([GNULIB_WARN_CFLAGS]) 987 AC_SUBST([GNULIB_WARN_CFLAGS])
988fi 988 ])
989 989
990edit_cflags=" 990edit_cflags="
991 s,///*,/,g 991 s,///*,/,g
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index e0441a1984d..a1db34cf0ee 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -435,9 +435,9 @@ copies the expansion verbatim including its case pattern.
435controls which characters are considered part of a word, for dynamic expansion 435controls which characters are considered part of a word, for dynamic expansion
436purposes. The regular expression must match just one character, never 436purposes. The regular expression must match just one character, never
437two or more. The same regular expression also determines which 437two or more. The same regular expression also determines which
438characters are part of an expansion. The value @code{nil} has a special 438characters are part of an expansion. The (default) value @code{nil}
439meaning: dynamic abbrevs are made of word characters, but expansions are 439has a special meaning: dynamic abbrevs are made of word characters,
440made of word and symbol characters. 440but expansions are made of word and symbol characters.
441 441
442@vindex dabbrev-abbrev-skip-leading-regexp 442@vindex dabbrev-abbrev-skip-leading-regexp
443 In shell scripts and makefiles, a variable name is sometimes prefixed 443 In shell scripts and makefiles, a variable name is sometimes prefixed
@@ -445,4 +445,5 @@ with @samp{$} and sometimes not. Major modes for this kind of text can
445customize dynamic abbrev expansion to handle optional prefixes by setting 445customize dynamic abbrev expansion to handle optional prefixes by setting
446the variable @code{dabbrev-abbrev-skip-leading-regexp}. Its value 446the variable @code{dabbrev-abbrev-skip-leading-regexp}. Its value
447should be a regular expression that matches the optional prefix that 447should be a regular expression that matches the optional prefix that
448dynamic abbrev expression should ignore. 448dynamic abbrev expression should ignore. The default is @code{nil},
449which means no characters should be skipped.
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index aadc85a293f..68a65a7c0c1 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -75,9 +75,9 @@ benefit, this removes many useless entries at the beginning of the
75@kbd{C-h b} output. The @code{electric-quote-mode} has been deleted, 75@kbd{C-h b} output. The @code{electric-quote-mode} has been deleted,
76so there's only the one true quoting method now---using the 76so there's only the one true quoting method now---using the
77plain-@acronym{ASCII} quote characters. And if that's not enough, the 77plain-@acronym{ASCII} quote characters. And if that's not enough, the
78doc strings and other messages show text quoted `like this' and "like 78doc strings and other messages show text quoted @t{`like this'}
79this" as they were written, instead of arbitrarily replacing them 79as they were written, instead of arbitrarily replacing them
80with Unicode ``curved quote'' characters. The 80with Unicode ``curved quote'' characters @t{‘like this’}. The
81@code{text-quoting-style} variable becomes therefore unneeded and was 81@code{text-quoting-style} variable becomes therefore unneeded and was
82removed. As result, text produced by Emacs can be sent to those 82removed. As result, text produced by Emacs can be sent to those
83venerable teletypes again, yeah! 83venerable teletypes again, yeah!
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index e3b24033a1a..01f899f1c09 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1476,15 +1476,18 @@ elisp, The Emacs Lisp Reference Manual}.
1476 1476
1477@cindex glyphless characters 1477@cindex glyphless characters
1478@cindex characters with no font glyphs 1478@cindex characters with no font glyphs
1479@cindex glyphless-char face
1479 On graphical displays, some characters may have no glyphs in any of 1480 On graphical displays, some characters may have no glyphs in any of
1480the fonts available to Emacs. These @dfn{glyphless characters} are 1481the fonts available to Emacs. These @dfn{glyphless characters} are
1481normally displayed as boxes containing the hexadecimal character code. 1482normally displayed as boxes containing the hexadecimal character code.
1482Similarly, on text terminals, characters that cannot be displayed 1483Similarly, on text terminals, characters that cannot be displayed
1483using the terminal encoding (@pxref{Terminal Coding}) are normally 1484using the terminal encoding (@pxref{Terminal Coding}) are normally
1484displayed as question signs. You can control the display method by 1485displayed as question signs. You can control the display method by
1485customizing the variable @code{glyphless-char-display-control}. 1486customizing the variable @code{glyphless-char-display-control}. You
1486@xref{Glyphless Chars,, Glyphless Character Display, elisp, The Emacs 1487can also customize the @code{glyphless-char} face to make these
1487Lisp Reference Manual}, for details. 1488characters more prominent on display. @xref{Glyphless Chars,,
1489Glyphless Character Display, elisp, The Emacs Lisp Reference Manual},
1490for details.
1488 1491
1489@cindex curly quotes 1492@cindex curly quotes
1490@cindex curved quotes 1493@cindex curved quotes
@@ -1598,7 +1601,6 @@ screen lines. Setting the variable @code{truncate-lines} in any way
1598makes it local to the current buffer; until that time, the default 1601makes it local to the current buffer; until that time, the default
1599value, which is normally @code{nil}, is in effect. 1602value, which is normally @code{nil}, is in effect.
1600 1603
1601@vindex truncate-partial-width-windows
1602 If a split window becomes too narrow, Emacs may automatically enable 1604 If a split window becomes too narrow, Emacs may automatically enable
1603line truncation. @xref{Split Window}, for the variable 1605line truncation. @xref{Split Window}, for the variable
1604@code{truncate-partial-width-windows} which controls this. 1606@code{truncate-partial-width-windows} which controls this.
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index dc99d493241..c23c96f0745 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -519,6 +519,7 @@ Multiple Windows
519* Pop Up Window:: Finding a file or buffer in another window. 519* Pop Up Window:: Finding a file or buffer in another window.
520* Change Window:: Deleting windows and changing their sizes. 520* Change Window:: Deleting windows and changing their sizes.
521* Displaying Buffers:: How Emacs picks a window for displaying a buffer. 521* Displaying Buffers:: How Emacs picks a window for displaying a buffer.
522* Temporary Displays:: Displaying non-editable buffers.
522* Window Convenience:: Convenience functions for window handling. 523* Window Convenience:: Convenience functions for window handling.
523 524
524Displaying a Buffer in a Window 525Displaying a Buffer in a Window
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index c482b90d953..ab20d4a18f9 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -288,7 +288,7 @@ see @ref{Drag and Drop}, and @ref{Misc Dired Features}.
288 288
289 On text-mode terminals and on graphical displays when Emacs was 289 On text-mode terminals and on graphical displays when Emacs was
290built without a GUI toolkit, you can visit files via the menu-bar 290built without a GUI toolkit, you can visit files via the menu-bar
291@samp{File} menu, which has a @samp{New File} item. 291@samp{File} menu, which has a @samp{Visit New File} item.
292 292
293 Each time you visit a file, Emacs automatically scans its contents 293 Each time you visit a file, Emacs automatically scans its contents
294to detect what character encoding and end-of-line convention it uses, 294to detect what character encoding and end-of-line convention it uses,
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 887960e0350..797b53f16e8 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1289,15 +1289,15 @@ whose state is that of the item at point.
1289@findex vc-dir-mark 1289@findex vc-dir-mark
1290@findex vc-dir-mark-all-files 1290@findex vc-dir-mark-all-files
1291 While in the VC Directory buffer, all the files that you mark with 1291 While in the VC Directory buffer, all the files that you mark with
1292@kbd{m} (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark}) are in 1292@kbd{m} (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark-all-files})
1293the current VC fileset. If you mark a directory entry with @kbd{m}, 1293are in the current VC fileset. If you mark a directory entry with
1294all the listed files in that directory tree are in the current VC 1294@kbd{m}, all the listed files in that directory tree are in the
1295fileset. The files and directories that belong to the current VC 1295current VC fileset. The files and directories that belong to the
1296fileset are indicated with a @samp{*} character in the VC Directory 1296current VC fileset are indicated with a @samp{*} character in the VC
1297buffer, next to their VC status. In this way, you can set up a 1297Directory buffer, next to their VC status. In this way, you can set
1298multi-file VC fileset to be acted on by VC commands like @w{@kbd{C-x v 1298up a multi-file VC fileset to be acted on by VC commands like
1299v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x v =}} (@pxref{Old 1299@w{@kbd{C-x v v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x v =}}
1300Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}). 1300(@pxref{Old Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}).
1301 1301
1302 The VC Directory buffer also defines some single-key shortcuts for 1302 The VC Directory buffer also defines some single-key shortcuts for
1303VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l}, 1303VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l},
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi
index f99234b5c1b..702963f75c5 100644
--- a/doc/emacs/windows.texi
+++ b/doc/emacs/windows.texi
@@ -117,10 +117,14 @@ variable @code{truncate-lines} (@pxref{Line Truncation}); it is
117instead controlled by the variable 117instead controlled by the variable
118@code{truncate-partial-width-windows}. If the value of this variable 118@code{truncate-partial-width-windows}. If the value of this variable
119is a positive integer (the default is 50), that specifies the minimum 119is a positive integer (the default is 50), that specifies the minimum
120width for a partial-width window before automatic line truncation 120total width for a partial-width window before automatic line
121occurs; if the value is @code{nil}, automatic line truncation is 121truncation occurs; if the value is @code{nil}, automatic line
122disabled; and for any other non-@code{nil} value, Emacs truncates 122truncation is disabled; and for any other non-@code{nil} value, Emacs
123lines in every partial-width window regardless of its width. 123truncates lines in every partial-width window regardless of its width.
124The total width of a window is in column units as reported by
125@code{window-total-width} (@pxref{Window Sizes,,, elisp, The Emacs
126Lisp Reference Manual}), it includes the fringes, the continuation and
127truncation glyphs, the margins, and the scroll bar.
124 128
125 On text terminals, side-by-side windows are separated by a vertical 129 On text terminals, side-by-side windows are separated by a vertical
126divider which is drawn using the @code{vertical-border} face. 130divider which is drawn using the @code{vertical-border} face.
@@ -206,7 +210,7 @@ Choice}, for how Emacs picks or creates the window to use.
206Select buffer @var{bufname} in another window 210Select buffer @var{bufname} in another window
207(@code{switch-to-buffer-other-window}). 211(@code{switch-to-buffer-other-window}).
208 212
209@findex display-buffer 213@findex display-buffer @r{(command)}
210@item C-x 4 C-o @var{bufname} @key{RET} 214@item C-x 4 C-o @var{bufname} @key{RET}
211@kindex C-x 4 C-o 215@kindex C-x 4 C-o
212Display buffer @var{bufname} in some window, without trying to select 216Display buffer @var{bufname} in some window, without trying to select
@@ -345,7 +349,6 @@ user's attention will be diverted to that buffer. These commands
345usually work by calling @code{switch-to-buffer} internally 349usually work by calling @code{switch-to-buffer} internally
346(@pxref{Select Buffer}). 350(@pxref{Select Buffer}).
347 351
348@findex display-buffer
349 Some commands try to display intelligently, trying not to take 352 Some commands try to display intelligently, trying not to take
350over the selected window, e.g., by splitting off a new window and 353over the selected window, e.g., by splitting off a new window and
351displaying the desired buffer there. Such commands, which include the 354displaying the desired buffer there. Such commands, which include the
@@ -374,11 +377,12 @@ Several of these commands are bound in the @kbd{C-x 5} prefix key.
374 377
375@menu 378@menu
376* Window Choice:: How @code{display-buffer} works. 379* Window Choice:: How @code{display-buffer} works.
380* Temporary Displays:: Displaying non-editable buffers.
377@end menu 381@end menu
378 382
379@node Window Choice 383@node Window Choice
380@subsection How @code{display-buffer} works 384@subsection How @code{display-buffer} works
381@findex display-buffer 385@findex display-buffer, detailed description
382 386
383The @code{display-buffer} command (as well as commands that call it 387The @code{display-buffer} command (as well as commands that call it
384internally) chooses a window to display by following the steps given 388internally) chooses a window to display by following the steps given
@@ -411,15 +415,15 @@ By default, this step is skipped. To enable it, change the variable
411@code{graphic-only} means to do this only on graphical displays. 415@code{graphic-only} means to do this only on graphical displays.
412 416
413@item 417@item
414Otherwise, try to create a new window by splitting the selected 418Otherwise, try to create a new window by splitting a window on the
415window, and display the buffer in that new window. 419selected frame, and display the buffer in that new window.
416 420
417@vindex split-height-threshold 421@vindex split-height-threshold
418@vindex split-width-threshold 422@vindex split-width-threshold
419The split can be either vertical or horizontal, depending on the 423The split can be either vertical or horizontal, depending on the
420variables @code{split-height-threshold} and 424variables @code{split-height-threshold} and
421@code{split-width-threshold}. These variables should have integer 425@code{split-width-threshold}. These variables should have integer
422values. If @code{split-height-threshold} is smaller than the selected 426values. If @code{split-height-threshold} is smaller than the chosen
423window's height, the split puts the new window below. Otherwise, if 427window's height, the split puts the new window below. Otherwise, if
424@code{split-width-threshold} is smaller than the window's width, the 428@code{split-width-threshold} is smaller than the window's width, the
425split puts the new window on the right. If neither condition holds, 429split puts the new window on the right. If neither condition holds,
@@ -427,6 +431,12 @@ Emacs tries to split so that the new window is below---but only if the
427window was not split before (to avoid excessive splitting). 431window was not split before (to avoid excessive splitting).
428 432
429@item 433@item
434Otherwise, display the buffer in a window previously showing it.
435Normally, only windows on the selected frame are considered, but if
436@code{pop-up-frames} is non-@code{nil} the window may be also on another
437frame.
438
439@item
430Otherwise, display the buffer in an existing window on the selected 440Otherwise, display the buffer in an existing window on the selected
431frame. 441frame.
432 442
@@ -435,6 +445,62 @@ If all the above methods fail for whatever reason, create a new frame
435and display the buffer there. 445and display the buffer there.
436@end itemize 446@end itemize
437 447
448A more advanced and flexible way to customize the behavior of
449@code{display-buffer} is by using the option @code{display-buffer-alist}
450mentioned in the next section.
451
452
453@node Temporary Displays
454@subsection Displaying non-editable buffers.
455@cindex pop-up windows
456@cindex temporary windows
457
458Some buffers are shown in windows for perusal rather than for editing.
459Help commands (@pxref{Help}) typically use a buffer called @file{*Help*}
460for that purpose, minibuffer completion (@pxref{Completion}) uses a
461buffer called @file{*Completions*} instead. Such buffers are usually
462displayed only for a short period of time.
463
464 Normally, Emacs chooses the window for such temporary displays via
465@code{display-buffer} as described above. The @file{*Completions*}
466buffer, on the other hand, is normally displayed in a window at the
467bottom of the selected frame, regardless of the number of windows
468already shown on that frame.
469
470 If you prefer Emacs to display a temporary buffer in a different
471fashion, we recommend to customize the variable
472@code{display-buffer-alist} (@pxref{Choosing Window,,Choosing a Window
473for Display, elisp, The Emacs Lisp Reference Manual}). For example,
474to display @file{*Completions*} by splitting a window as described in
475the previous section, use the following form in your initialization
476file (@pxref{Init File}):
477
478@example
479@group
480(customize-set-variable
481 'display-buffer-alist
482 '(("\\*Completions\\*" display-buffer-pop-up-window)))
483@end group
484@end example
485
486@findex temp-buffer-resize-mode
487 The @file{*Completions*} buffer is also special in the sense that
488Emacs usually tries to make its window just as large as necessary to
489display all of its contents. To resize windows showing other
490temporary displays like, for example, the @file{*Help*} buffer
491accordingly, turn on the minor mode (@pxref{Minor Modes})
492@code{temp-buffer-resize-mode} (@pxref{Temporary Displays,,Temporary
493Displays, elisp, The Emacs Lisp Reference Manual}).
494
495@vindex temp-buffer-max-height
496@vindex temp-buffer-max-width
497 The maximum size of windows resized by @code{temp-buffer-resize-mode}
498can be controlled by customizing the options
499@code{temp-buffer-max-height} and @code{temp-buffer-max-width}
500(@pxref{Temporary Displays,,Temporary Displays, elisp, The Emacs Lisp
501Reference Manual}) and cannot exceed the size of the containing frame.
502
503
438@node Window Convenience 504@node Window Convenience
439@section Convenience Features for Window Handling 505@section Convenience Features for Window Handling
440 506
diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index 5f5a395c97a..cdea2a8b3c8 100644
--- a/doc/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -198,7 +198,10 @@ abbrevs in a file automatically, under the control of variables
198described here. 198described here.
199 199
200@defopt abbrev-file-name 200@defopt abbrev-file-name
201This is the default file name for reading and saving abbrevs. 201This is the default file name for reading and saving abbrevs. By
202default, Emacs will look for @file{~/.emacs.d/abbrev_defs}, and, if
203not found, for @file{~/.abbrev_defs}; if neither file exists, Emacs
204will create @file{~/.emacs.d/abbrev_defs}.
202@end defopt 205@end defopt
203 206
204@defun quietly-read-abbrev-file &optional filename 207@defun quietly-read-abbrev-file &optional filename
@@ -216,7 +219,7 @@ A non-@code{nil} value for @code{save-abbrevs} means that Emacs should
216offer to save abbrevs (if any have changed) when files are saved. If 219offer to save abbrevs (if any have changed) when files are saved. If
217the value is @code{silently}, Emacs saves the abbrevs without asking 220the value is @code{silently}, Emacs saves the abbrevs without asking
218the user. @code{abbrev-file-name} specifies the file to save the 221the user. @code{abbrev-file-name} specifies the file to save the
219abbrevs in. 222abbrevs in. The default value is @code{t}.
220@end defopt 223@end defopt
221 224
222@defvar abbrevs-changed 225@defvar abbrevs-changed
@@ -282,7 +285,7 @@ omitted, it defaults to point. @code{name}, if non-@code{nil}, should
282be the name by which this abbrev was found (a string); it is used to 285be the name by which this abbrev was found (a string); it is used to
283figure out whether to adjust the capitalization of the expansion. The 286figure out whether to adjust the capitalization of the expansion. The
284function returns @code{abbrev} if the abbrev was successfully 287function returns @code{abbrev} if the abbrev was successfully
285inserted. 288inserted, otherwise it returns @code{nil}.
286@end defun 289@end defun
287 290
288@deffn Command abbrev-prefix-mark &optional arg 291@deffn Command abbrev-prefix-mark &optional arg
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 4c3a1a01e7d..37492929e74 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -2191,9 +2191,6 @@ This function returns the horizontal position of point, measured in
2191columns, counting from 0 at the left margin. The column position is the 2191columns, counting from 0 at the left margin. The column position is the
2192sum of the widths of all the displayed representations of the characters 2192sum of the widths of all the displayed representations of the characters
2193between the start of the current line and point. 2193between the start of the current line and point.
2194
2195For an example of using @code{current-column}, see the description of
2196@code{count-lines} in @ref{Text Lines}.
2197@end defun 2194@end defun
2198 2195
2199@deffn Command move-to-column column &optional force 2196@deffn Command move-to-column column &optional force
@@ -2365,83 +2362,6 @@ already indented, it calls @code{completion-at-point} to complete the
2365text at point (@pxref{Completion in Buffers}). 2362text at point (@pxref{Completion in Buffers}).
2366@end defopt 2363@end defopt
2367 2364
2368@cindex literate programming
2369@cindex multi-mode indentation
2370 Some major modes need to support embedded regions of text whose
2371syntax belongs to a different major mode. Examples include
2372@dfn{literate programming} source files that combine documentation and
2373snippets of source code, Yacc/Bison programs that include snippets of
2374plain C code, etc. To correctly indent the embedded chunks, the major
2375mode needs to delegate the indentation to another mode's indentation
2376engine (e.g., call @code{c-indent-defun} for C code or
2377@code{python-indent-line} for Python), while providing it with some
2378context to guide the indentation. The following facilities support
2379such multi-mode indentation.
2380
2381@defvar prog-indentation-context
2382This variable, when non-@code{nil}, holds the indentation context for
2383the sub-mode's indentation engine provided by the superior major mode.
2384The value should be a list of the form @code{(@var{first-column}
2385@w{(@var{start} . @var{end})} @code{prev-chunk})}. The members of the
2386list have the following meaning:
2387
2388@table @var
2389@item first-column
2390The column to be used for top-level constructs. This replaces the
2391default value of the top-level column used by the sub-mode, usually
2392zero.
2393@item start
2394@itemx end
2395The region of the code chunk to be indented by the sub-mode. The
2396value of @var{end} can be @code{nil}, which stands for the value of
2397@code{point-max}.
2398@item prev-chunk
2399If this is non-@code{nil}, it should provide the sub-mode's
2400indentation engine with a virtual context of the code chunk. Valid
2401values include:
2402
2403@itemize @minus
2404@item
2405A string whose contents is the text the sub-mode's indentation engine
2406should consider to precede the code chunk. The sub-mode's indentation
2407engine can add text properties to that string, to be reused in
2408repeated calls with the same string, thus using it as a cache. An
2409example where this is useful is code chunks that need to be indented
2410as function bodies, but lack the function's preamble---the string
2411could then include that missing preamble.
2412@item
2413A function. It is expected to be called with the start position of
2414the current chunk, and should return a cons cell
2415@w{@code{(@var{prev-start} . @var{prev-end})}} that specifies the
2416region of the previous code chunk, or @code{nil} if there is no previous
2417chunk. This is useful in literate-programming sources, where code is
2418split into chunks, and correct indentation needs to access previous
2419chunks.
2420@end itemize
2421@end table
2422@end defvar
2423
2424The following convenience functions should be used by major mode's
2425indentation engine in support of invocations as sub-modes of another
2426major mode.
2427
2428@defun prog-first-column
2429Call this function instead of using a literal value (usually, zero) of
2430the column number for indenting top-level program constructs. The
2431function's value is the column number to use for top-level constructs.
2432When no superior mode is in effect, this function returns zero.
2433@end defun
2434
2435@defun prog-widen
2436Call this function instead of @code{widen} to remove any restrictions
2437imposed by the mode's indentation engine and restore the restrictions
2438recorded in @code{prog-indentation-context}. This prevents the
2439indentation engine of a sub-mode from inadvertently operating on text
2440outside of the chunk it was supposed to indent, and preserves the
2441restriction imposed by the superior mode. When no superior mode is in
2442effect, this function just calls @code{widen}.
2443@end defun
2444
2445 2365
2446@node Region Indent 2366@node Region Indent
2447@subsection Indenting an Entire Region 2367@subsection Indenting an Entire Region
diff --git a/doc/man/emacsclient.1 b/doc/man/emacsclient.1
index e62fe930152..010eeba19c1 100644
--- a/doc/man/emacsclient.1
+++ b/doc/man/emacsclient.1
@@ -49,9 +49,19 @@ If you set the variable "server-window" to a window or a frame, "C-x
49#" displays the server buffer in that window or in that frame. 49#" displays the server buffer in that window or in that frame.
50 50
51.SH OPTIONS 51.SH OPTIONS
52The programs follow the usual GNU command line syntax, with long 52Most options follow the usual GNU command line syntax, with long
53options starting with two dashes ("\-"). 53options starting with two dashes ("\-").
54.TP 54.TP
55.BI + line\fR[\fP\fB:\fPcolumn\fR]\fP
56Go to the specified
57.I line
58and
59.IR column .
60A missing
61.I column
62is treated as column 1.
63This option applies only to the next file specified.
64.TP
55.B \-a, \-\-alternate-editor=EDITOR 65.B \-a, \-\-alternate-editor=EDITOR
56if the Emacs server is not running, run the specified editor instead. 66if the Emacs server is not running, run the specified editor instead.
57This can also be specified via the ALTERNATE_EDITOR environment variable. 67This can also be specified via the ALTERNATE_EDITOR environment variable.
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index f90c7d3e8fb..a7a3840aa5f 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -252,7 +252,9 @@ need to use a function that takes some other data type, you will need to
252call it in an Elisp expression (which can also be used with 252call it in an Elisp expression (which can also be used with
253@ref{Expansion, expansions}). As with other shells, you can 253@ref{Expansion, expansions}). As with other shells, you can
254escape special characters and spaces with the backslash (@code{\}) and 254escape special characters and spaces with the backslash (@code{\}) and
255apostrophes (@code{''}) and double quotes (@code{""}). 255apostrophes (@code{''}) and double quotes (@code{""}). This is needed
256especially for file names with special characters like pipe
257(@code{|}), which could be part of remote file names.
256 258
257@node Built-ins 259@node Built-ins
258 260
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
index 3b2c4afe55b..661e705b157 100644
--- a/doc/misc/gnus-coding.texi
+++ b/doc/misc/gnus-coding.texi
@@ -364,11 +364,11 @@ such multiple commits, like whitespace differences, and unify those ;-).
364 364
365@heading @file{GNUS-NEWS} 365@heading @file{GNUS-NEWS}
366 366
367Starting from No Gnus, the @file{GNUS-NEWS} is created from 367The @file{etc/GNUS-NEWS} is created from
368@file{texi/gnus-news.texi}. Don't edit @file{GNUS-NEWS}. Edit 368@file{doc/misc/gnus-news.texi}. Don't edit @file{etc/GNUS-NEWS}.
369@file{texi/gnus-news.texi}, type @command{make GNUS-NEWS} in the 369Edit @file{doc/misc/gnus-news.texi}, type @command{make
370@file{texi} directory and commit @file{GNUS-NEWS} and 370update-gnus-news} in the @file{lisp} directory and commit
371@file{texi/gnus-news.texi}. 371@file{etc/GNUS-NEWS} and @file{doc/misc/gnus-news.texi}.
372 372
373@heading Conventions for version information in defcustoms 373@heading Conventions for version information in defcustoms
374 374
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index d04e2ddd3b3..9437a4d3e31 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
3% Load plain if necessary, i.e., if running under initex. 3% Load plain if necessary, i.e., if running under initex.
4\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi 4\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
5% 5%
6\def\texinfoversion{2016-03-06.18} 6\def\texinfoversion{2016-03-22.15}
7% 7%
8% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 8% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
9% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 9% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -1513,10 +1513,27 @@ output) for that.)}
1513\fi % \ifx\pdfoutput 1513\fi % \ifx\pdfoutput
1514 1514
1515% 1515%
1516% PDF outline support for XeTeX 1516% For XeTeX
1517% 1517%
1518\newif\iftxiuseunicodedestname
1518\ifx\XeTeXrevision\thisisundefined 1519\ifx\XeTeXrevision\thisisundefined
1519\else 1520\else
1521 %
1522 % XeTeX version check
1523 %
1524 \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99995}>-1
1525 % XeTeX 0.99995+ contains xdvipdfmx 20160307+.
1526 % It can handle Unicode destination name for PDF.
1527 \txiuseunicodedestnametrue
1528 \else
1529 % XeTeX < 0.99995 can not handle Unicode destination name for PDF
1530 % because xdvipdfmx 20150315 has UTF-16 convert issue.
1531 % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
1532 \txiuseunicodedestnamefalse
1533 \fi
1534 %
1535 % PDF outline support
1536 %
1520 \pdfmakepagedesttrue \relax 1537 \pdfmakepagedesttrue \relax
1521 % Emulate the primitive of pdfTeX 1538 % Emulate the primitive of pdfTeX
1522 \def\pdfdest name#1 xyz{% 1539 \def\pdfdest name#1 xyz{%
@@ -1525,15 +1542,25 @@ output) for that.)}
1525 \def\pdfmkdest#1{{% 1542 \def\pdfmkdest#1{{%
1526 % We have to set dummies so commands such as @code, and characters 1543 % We have to set dummies so commands such as @code, and characters
1527 % such as \, aren't expanded when present in a section title. 1544 % such as \, aren't expanded when present in a section title.
1528 \indexnofonts % For avoiding UTF-16 convert issue of xdvipdfmx 20150315. 1545 \indexnofonts
1546 \iftxiuseunicodedestname
1547 \def\pdfdestname{#1}% Pass through Unicode characters.
1548 \else
1549 \edef\pdfdestname{#1}% Replace Unicode characters to ASCII.
1550 \fi
1551 \turnoffactive
1529 \makevalueexpandable 1552 \makevalueexpandable
1530 % In the case of XeTeX, xdvipdfmx converts strings to UTF-16. 1553 % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
1531 % Therefore \txiescapepdf is not necessary. 1554 % Therefore \txiescapepdf is not necessary.
1532 \safewhatsit{\pdfdest name{#1} xyz}% 1555 \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
1533 }} 1556 }}
1534 % 1557 %
1535 \def\dopdfoutline#1#2#3#4{% 1558 \def\dopdfoutline#1#2#3#4{%
1536 \edef\pdfoutlinedest{#3}% 1559 \iftxiuseunicodedestname
1560 \def\pdfoutlinedest{#3}% Pass through Unicode characters.
1561 \else
1562 \edef\pdfoutlinedest{#3}% Replace Unicode characters to ASCII.
1563 \fi
1537 \ifx\pdfoutlinedest\empty 1564 \ifx\pdfoutlinedest\empty
1538 \def\pdfoutlinedest{#4}% 1565 \def\pdfoutlinedest{#4}%
1539 \fi 1566 \fi
@@ -1574,7 +1601,7 @@ output) for that.)}
1574 % In the case of XeTeX, xdvipdfmx converts strings to UTF-16. 1601 % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
1575 % Therefore, the encoding and the language may not be considered. 1602 % Therefore, the encoding and the language may not be considered.
1576 % 1603 %
1577 \indexnofonts % For avoiding UTF-16 convert issue of xdvipdfmx 20150315. 1604 \indexnofonts
1578 \setupdatafile 1605 \setupdatafile
1579 % We can have normal brace characters in the PDF outlines, unlike 1606 % We can have normal brace characters in the PDF outlines, unlike
1580 % Texinfo index files. So set that up. 1607 % Texinfo index files. So set that up.
@@ -1596,14 +1623,31 @@ output) for that.)}
1596 % However, due to UTF-16 convert issue of xdvipdfmx 20150315, 1623 % However, due to UTF-16 convert issue of xdvipdfmx 20150315,
1597 % ``\special{pdf:dest ...}'' can not handle non-ASCII strings. 1624 % ``\special{pdf:dest ...}'' can not handle non-ASCII strings.
1598 % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). 1625 % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
1599\fi
1600
1601% 1626%
1602% @image support for XeTeX 1627 % make a live url in pdf output.
1628 \def\pdfurl#1{%
1629 \begingroup
1630 % it seems we really need yet another set of dummies; have not
1631 % tried to figure out what each command should do in the context
1632 % of @url. for now, just make @/ a no-op, that's the only one
1633 % people have actually reported a problem with.
1634 %
1635 \normalturnoffactive
1636 \def\@{@}%
1637 \let\/=\empty
1638 \makevalueexpandable
1639 % do we want to go so far as to use \indexnofonts instead of just
1640 % special-casing \var here?
1641 \def\var##1{##1}%
1642 %
1643 \leavevmode\setcolor{\urlcolor}%
1644 \special{pdf:bann << /Border [0 0 0]
1645 /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
1646 \endgroup}
1647 \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
1603% 1648%
1604\newif\ifxeteximgpdf 1649 %
1605\ifx\XeTeXrevision\thisisundefined 1650 % @image support
1606\else
1607 % 1651 %
1608 % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). 1652 % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
1609 \def\doxeteximage#1#2#3{% 1653 \def\doxeteximage#1#2#3{%
@@ -1615,7 +1659,6 @@ output) for that.)}
1615 % someone has a scalable image, presumably better to use that than a 1659 % someone has a scalable image, presumably better to use that than a
1616 % bitmap. 1660 % bitmap.
1617 \let\xeteximgext=\empty 1661 \let\xeteximgext=\empty
1618 \xeteximgpdffalse
1619 \begingroup 1662 \begingroup
1620 \openin 1 #1.pdf \ifeof 1 1663 \openin 1 #1.pdf \ifeof 1
1621 \openin 1 #1.PDF \ifeof 1 1664 \openin 1 #1.PDF \ifeof 1
@@ -1632,17 +1675,23 @@ output) for that.)}
1632 \fi 1675 \fi
1633 \else \gdef\xeteximgext{png}% 1676 \else \gdef\xeteximgext{png}%
1634 \fi 1677 \fi
1635 \else \gdef\xeteximgext{PDF} \global\xeteximgpdftrue% 1678 \else \gdef\xeteximgext{PDF}%
1636 \fi 1679 \fi
1637 \else \gdef\xeteximgext{pdf} \global\xeteximgpdftrue% 1680 \else \gdef\xeteximgext{pdf}%
1638 \fi 1681 \fi
1639 \closein 1 1682 \closein 1
1640 \endgroup 1683 \endgroup
1641 % 1684 %
1642 \ifxeteximgpdf 1685 \def\xetexpdfext{pdf}%
1686 \ifx\xeteximgext\xetexpdfext
1643 \XeTeXpdffile "#1".\xeteximgext "" 1687 \XeTeXpdffile "#1".\xeteximgext ""
1644 \else 1688 \else
1645 \XeTeXpicfile "#1".\xeteximgext "" 1689 \def\xetexpdfext{PDF}%
1690 \ifx\xeteximgext\xetexpdfext
1691 \XeTeXpdffile "#1".\xeteximgext ""
1692 \else
1693 \XeTeXpicfile "#1".\xeteximgext ""
1694 \fi
1646 \fi 1695 \fi
1647 \ifdim \wd0 >0pt width \xeteximagewidth \fi 1696 \ifdim \wd0 >0pt width \xeteximagewidth \fi
1648 \ifdim \wd2 >0pt height \xeteximageheight \fi \relax 1697 \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
@@ -7804,7 +7853,7 @@ end
7804 % Process the macro body under the current catcode regime. 7853 % Process the macro body under the current catcode regime.
7805 \scantokens{#1\texinfoc}\aftermacro% 7854 \scantokens{#1\texinfoc}\aftermacro%
7806 % 7855 %
7807 % The \c is to remove the \newlinechar added by \scantokens, and 7856 % The \texinfoc is to remove the \newlinechar added by \scantokens, and
7808 % can be noticed by \parsearg. 7857 % can be noticed by \parsearg.
7809 % The \aftermacro allows a \comment at the end of the macro definition 7858 % The \aftermacro allows a \comment at the end of the macro definition
7810 % to duplicate itself past the final \newlinechar added by \scantokens: 7859 % to duplicate itself past the final \newlinechar added by \scantokens:
@@ -7817,15 +7866,7 @@ end
7817 7866
7818% Used for copying and captions 7867% Used for copying and captions
7819\def\scanexp#1{% 7868\def\scanexp#1{%
7820 \bgroup 7869 \expandafter\scanmacro\expandafter{#1}%
7821 % Undo catcode changes of \startcontents and \printindex
7822 % When called from @insertcopying or (short)caption, we need active
7823 % backslash to get it printed correctly.
7824 % FIXME: This may not be needed.
7825 %\catcode`\@=0 \catcode`\\=\active \escapechar=`\@
7826 \edef\temp{\noexpand\scanmacro{#1}}%
7827 \temp
7828 \egroup
7829} 7870}
7830 7871
7831\newcount\paramno % Count of parameters 7872\newcount\paramno % Count of parameters
@@ -9371,7 +9412,7 @@ end
9371 % 9412 %
9372 \ifx\thiscaption\empty \else 9413 \ifx\thiscaption\empty \else
9373 \ifx\floatident\empty \else 9414 \ifx\floatident\empty \else
9374 \appendtomacro\captionline{: }% had ident, so need a colon between 9415 \appendtomacro\captionline{: }% had ident, so need a colon between
9375 \fi 9416 \fi
9376 % 9417 %
9377 % caption text. 9418 % caption text.
@@ -9398,30 +9439,17 @@ end
9398 \requireauxfile 9439 \requireauxfile
9399 \atdummies 9440 \atdummies
9400 % 9441 %
9401 % since we read the caption text in the macro world, where ^^M 9442 \ifx\thisshortcaption\empty
9402 % is turned into a normal character, we have to scan it back, so 9443 \def\gtemp{\thiscaption}%
9403 % we don't write the literal three characters "^^M" into the aux file. 9444 \else
9404 \scanexp{% 9445 \def\gtemp{\thisshortcaption}%
9405 \xdef\noexpand\gtemp{% 9446 \fi
9406 \ifx\thisshortcaption\empty
9407 \thiscaption
9408 \else
9409 \thisshortcaption
9410 \fi
9411 }%
9412 }%
9413 \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident 9447 \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
9414 \ifx\gtemp\empty \else : \gtemp \fi}}% 9448 \ifx\gtemp\empty \else : \gtemp \fi}}%
9415 }% 9449 }%
9416 \fi 9450 \fi
9417 \egroup % end of \vtop 9451 \egroup % end of \vtop
9418 % 9452 %
9419 % place the captured inserts
9420 %
9421 % BEWARE: when the floats start floating, we have to issue warning
9422 % whenever an insert appears inside a float which could possibly
9423 % float. --kasal, 26may04
9424 %
9425 \checkinserts 9453 \checkinserts
9426} 9454}
9427 9455
@@ -10865,6 +10893,10 @@ directory should work if nowhere else does.}
10865 \unicodechardefs 10893 \unicodechardefs
10866} 10894}
10867 10895
10896% Whether the active definitions of non-ASCII characters expand to
10897% non-active tokens with the same character code. This is used to
10898% write characters literally, instead of using active definitions for
10899% printing the correct glyphs.
10868\newif\ifpassthroughchars 10900\newif\ifpassthroughchars
10869\passthroughcharsfalse 10901\passthroughcharsfalse
10870 10902
@@ -10917,13 +10949,6 @@ directory should work if nowhere else does.}
10917 \relax 10949 \relax
10918} 10950}
10919 10951
10920% Whether the active definitions of non-ASCII characters expand to
10921% non-active tokens with the same character code. This is used to
10922% write characters literally, instead of using active definitions for
10923% printing the correct glyphs.
10924\newif\ifpassthroughchars
10925\passthroughcharsfalse
10926
10927% define all the unicode characters we know about, for the sake of @U. 10952% define all the unicode characters we know about, for the sake of @U.
10928\iftxinativeunicodecapable 10953\iftxinativeunicodecapable
10929 \nativeunicodechardefsatu 10954 \nativeunicodechardefsatu
diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS
index 4efb53e69c3..06badc18375 100644
--- a/etc/GNUS-NEWS
+++ b/etc/GNUS-NEWS
@@ -7,40 +7,286 @@ Please send Gnus bug reports to bugs@gnus.org.
7For older news, see Gnus info node "New Features". 7For older news, see Gnus info node "New Features".
8 8
9 9
10* New features 10* Supported Emacs versions The following Emacs versions are supported by No
11Gnus:
11 12
12** nnimap can request and use the Gmail "X-GM-LABELS". 13** Emacs 22 and up
14** XEmacs 21.4
15** XEmacs 21.5
16** SXEmacs
13 17
14** New package `gnus-notifications.el' can send notifications when you 18
15 receive new messages. 19* Installation changes
20
21** Upgrading from previous (stable) version if you have used No Gnus.
22
23If you have tried No Gnus (the unstable Gnus branch leading to this
24release) but went back to a stable version, be careful when upgrading to
25this version. In particular, you will probably want to remove the
26'~/News/marks' directory (perhaps selectively), so that flags are read
27from your '~/.newsrc.eld' instead of from the stale marks file, where
28this release will store flags for nntp. See a later entry for more
29information about nntp marks. Note that downgrading isn't safe in
30general.
31
32** Incompatibility when switching from Emacs 23 to Emacs 22 In Emacs 23,
33Gnus uses Emacs's new internal coding system 'utf-8-emacs' for saving
34articles drafts and '~/.newsrc.eld'. These files may not be read
35correctly in Emacs 22 and below. If you want to use Gnus across
36different Emacs versions, you may set 'mm-auto-save-coding-system' to
37'emacs-mule'.
38
39** Lisp files are now installed in '.../site-lisp/gnus/' by default. It
40defaulted to '.../site-lisp/' formerly. In addition to this, the new
41installer issues a warning if other Gnus installations which will shadow
42the latest one are detected. You can then remove those shadows manually
43or remove them using 'make remove-installed-shadows'.
44
45** The installation directory name is allowed to have spaces and/or tabs.
46
47
48* New packages and libraries within Gnus
49
50** New version of 'nnimap'
51
52'nnimap' has been reimplemented in a mostly-compatible way. See the Gnus
53manual for a description of the new interface. In particular,
54'nnimap-inbox' and the client side split method has changed.
55
56** Gnus includes the Emacs Lisp SASL library.
57
58This provides a clean API to SASL mechanisms from within Emacs. The user
59visible aspects of this, compared to the earlier situation, include
60support for DIGEST-MD5 and NTLM. *Note Emacs SASL: (sasl)Top.
61
62** ManageSieve connections uses the SASL library by default.
63
64The primary change this brings is support for DIGEST-MD5 and NTLM, when
65the server supports it.
66
67** Gnus includes a password cache mechanism in password.el.
68
69It is enabled by default (see 'password-cache'), with a short timeout of
7016 seconds (see 'password-cache-expiry'). If PGG is used as the PGP back
71end, the PGP passphrase is managed by this mechanism. Passwords for
72ManageSieve connections are managed by this mechanism, after querying the
73user about whether to do so.
74
75** Using EasyPG with Gnus When EasyPG, is available, Gnus will use it
76instead of PGG. EasyPG is an Emacs user interface to GNU Privacy Guard.
77 *Note EasyPG Assistant user's manual: (epa)Top. EasyPG is included in
78Emacs 23 and available separately as well.
79
80
81* Changes in group mode
82
83** Symbols like 'gcc-self' now have the same precedence rules in
84'gnus-parameters' as other "real" variables: The last match wins instead
85of the first match.
86
87** Old intermediate incoming mail files ('Incoming*') are deleted after a
88couple of days, not immediately. *Note Mail Source Customization::.
89(New in Gnus 5.10.10 / No Gnus 0.8)
90
91
92* Changes in summary and article mode
93
94** There's now only one variable that determines how HTML is rendered:
95'mm-text-html-renderer'.
96
97** Gnus now supports sticky article buffers. Those are article buffers that
98are not reused when you select another article. *Note Sticky Articles::.
99
100** Gnus can selectively display 'text/html' articles with a WWW browser with
101'K H'. *Note MIME Commands::.
102
103** International host names (IDNA) can now be decoded inside article bodies
104using 'W i' ('gnus-summary-idna-message'). This requires that GNU Libidn
105(<http://www.gnu.org/software/libidn/>) has been installed.
106
107** The non-ASCII group names handling has been much improved. The back ends
108that fully support non-ASCII group names are now 'nntp', 'nnml', and
109'nnrss'. Also the agent, the cache, and the marks features work with
110those back ends. *Note Non-ASCII Group Names::.
111
112** Gnus now displays DNS master files sent as text/dns using dns-mode.
113
114** Gnus supports new limiting commands in the Summary buffer: '/ r'
115('gnus-summary-limit-to-replied') and '/ R'
116('gnus-summary-limit-to-recipient'). *Note Limiting::.
117
118** You can now fetch all ticked articles from the server using 'Y t'
119('gnus-summary-insert-ticked-articles'). *Note Summary Generation
120Commands::.
121
122** Gnus supports a new sort command in the Summary buffer: 'C-c C-s C-t'
123('gnus-summary-sort-by-recipient'). *Note Summary Sorting::.
124
125** S/MIME now features LDAP user certificate searches. You need to
126configure the server in 'smime-ldap-host-list'.
127
128** URLs inside OpenPGP headers are retrieved and imported to your PGP key
129ring when you click on them.
130
131** Picons can be displayed right from the textual address, see
132'gnus-picon-style'. *Note Picons::.
133
134** ANSI SGR control sequences can be transformed using 'W A'.
135
136ANSI sequences are used in some Chinese hierarchies for highlighting
137articles ('gnus-article-treat-ansi-sequences').
16 138
17** If you have the "tnef" program installed, Gnus will display ms-tnef 139** Gnus now MIME decodes articles even when they lack "MIME-Version" header.
18 files, aka "winmail.dat". 140This changes the default of 'gnus-article-loose-mime'.
19 141
20** Archives (like tar and zip files) will be automatically unpacked, 142** 'gnus-decay-scores' can be a regexp matching score files. For example,
21 and the files inside the packages will be displayed as MIME parts. 143set it to '\\.ADAPT\\'' and only adaptive score files will be decayed.
144 *Note Score Decays::.
22 145
23** shr has a new command `z' that cycles through image sizes. 146** Strings prefixing to the 'To' and 'Newsgroup' headers in summary lines
147when using 'gnus-ignored-from-addresses' can be customized with
148'gnus-summary-to-prefix' and 'gnus-summary-newsgroup-prefix'. *Note To
149From Newsgroups::.
24 150
25** `backtab' in the summary buffer now selects the previous link in 151** You can replace MIME parts with external bodies. See
26 the article buffer. 152'gnus-mime-replace-part' and 'gnus-article-replace-part'. *Note MIME
153Commands::, *note Using MIME::.
27 154
28** Using the "X-Message-SMTP-Method" header in Message buffers now 155** The option 'mm-fill-flowed' can be used to disable treatment of
29 allows specifying how messages are to be sent. For example: 156format=flowed messages. Also, flowed text is disabled when sending
157inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text.
158(New in Gnus 5.10.7)
30 159
31 X-Message-SMTP-Method: smtp smtp.fsf.org 587 160** Now the new command 'S W' ('gnus-article-wide-reply-with-original') for a
161wide reply in the article buffer yanks a text that is in the active
162region, if it is set, as well as the 'R'
163('gnus-article-reply-with-original') command. Note that the 'R' command
164in the article buffer no longer accepts a prefix argument, which was used
165to make it do a wide reply. *Note Article Keymap::.
32 166
33** Gnus keeps track of non-existent articles for nnimap groups, so 167** The new command 'C-h b' ('gnus-article-describe-bindings') used in the
34 that sparse IMAP folders now list a correct number of messages in 168article buffer now shows not only the article commands but also the real
35 them. 169summary commands that are accessible from the article buffer.
36 170
37** Gnus will guess the real type of MIME parts of type 171
38 application/octet-stream based on the file suffix. So an 172* Changes in Message mode
39 application/octet-stream with a name of "rms.jpg" will be displayed 173
40 as an image/jpeg type by default, for instance. 174** Gnus now defaults to saving all outgoing messages in per-month nnfolder
175archives.
176
177** Gnus now supports the "hashcash" client puzzle anti-spam mechanism. Use
178'(setq message-generate-hashcash t)' to enable. *Note Hashcash::.
179
180** You can now drag and drop attachments to the Message buffer. See
181'mml-dnd-protocol-alist' and 'mml-dnd-attach-options'. *Note MIME:
182(message)MIME.
183
184** The option 'message-yank-empty-prefix' now controls how empty lines are
185prefixed in cited text. *Note Insertion Variables: (message)Insertion
186Variables.
187
188** Gnus uses narrowing to hide headers in Message buffers. The 'References'
189header is hidden by default. To make all headers visible, use '(setq
190message-hidden-headers nil)'. *Note Message Headers: (message)Message
191Headers.
192
193** You can highlight different levels of citations like in the article
194buffer. See 'gnus-message-highlight-citation'.
195
196** 'auto-fill-mode' is enabled by default in Message mode. See
197'message-fill-column'. *Note Message Headers: (message)Various Message
198Variables.
199
200** You can now store signature files in a special directory named
201'message-signature-directory'.
202
203** The option 'message-citation-line-format' controls the format of the
204"Whomever writes:" line. You need to set
205'message-citation-line-function' to
206'message-insert-formatted-citation-line' as well.
207
208
209* Changes in Browse Server mode
210
211** Gnus' sophisticated subscription methods are now available in Browse
212Server buffers as well using the variable
213'gnus-browse-subscribe-newsgroup-method'.
214
215
216* Changes in back ends
217
218** The nntp back end stores article marks in '~/News/marks'.
219
220The directory can be changed using the (customizable) variable
221'nntp-marks-directory', and marks can be disabled using the (back end)
222variable 'nntp-marks-is-evil'. The advantage of this is that you can
223copy '~/News/marks' (using rsync, scp or whatever) to another Gnus
224installation, and it will realize what articles you have read and marked.
225The data in '~/News/marks' has priority over the same data in
226'~/.newsrc.eld'.
227
228** You can import and export your RSS subscriptions from OPML files. *Note
229RSS::.
230
231** IMAP identity (RFC 2971) is supported.
41 232
42** `nnimap-inbox' can now be a list of mail box names. 233By default, Gnus does not send any information about itself, but you can
43 234customize it using the variable 'nnimap-id'.
235
236** The 'nnrss' back end now supports multilingual text. Non-ASCII group
237names for the 'nnrss' groups are also supported. *Note RSS::.
238
239** Retrieving mail with POP3 is supported over SSL/TLS and with StartTLS.
240
241** The nnml back end allows other compression programs beside 'gzip' for
242compressed message files. *Note Mail Spool::.
243
244** The nnml back end supports group compaction.
245
246This feature, accessible via the functions 'gnus-group-compact-group' ('G
247z' in the group buffer) and 'gnus-server-compact-server' ('z' in the
248server buffer) renumbers all articles in a group, starting from 1 and
249removing gaps. As a consequence, you get a correct total article count
250(until messages are deleted again).
251
252
253* Appearance
254
255** The tool bar has been updated to use GNOME icons. You can also customize
256the tool bars: 'M-x customize-apropos RET -tool-bar$' should get you
257started. (Only for Emacs, not in XEmacs.)
258
259** The tool bar icons are now (de)activated correctly in the group buffer,
260see the variable 'gnus-group-update-tool-bar'. Its default value depends
261on your Emacs version.
262
263** You can change the location of XEmacs's toolbars in Gnus buffers. See
264'gnus-use-toolbar' and 'message-use-toolbar'.
265
266
267* Miscellaneous changes
268
269** Having edited the select-method for the foreign server in the server
270buffer is immediately reflected to the subscription of the groups which
271use the server in question. For instance, if you change
272'nntp-via-address' into 'bar.example.com' from 'foo.example.com', Gnus
273will connect to the news host by way of the intermediate host
274'bar.example.com' from next time.
275
276** The 'all.SCORE' file can be edited from the group buffer using 'W e'.
277
278** You can set 'gnus-mark-copied-or-moved-articles-as-expirable' to a
279non-'nil' value so that articles that have been read may be marked as
280expirable automatically when copying or moving them to a group that has
281auto-expire turned on. The default is 'nil' and copying and moving of
282articles behave as before; i.e., the expirable marks will be unchanged
283except that the marks will be removed when copying or moving articles to
284a group that has not turned auto-expire on. *Note Expiring Mail::.
285
286** NoCeM support has been removed.
287
288** Carpal mode has been removed.
289
44* For older news, see Gnus info node "New Features". 290* For older news, see Gnus info node "New Features".
45 291
46---------------------------------------------------------------------- 292----------------------------------------------------------------------
diff --git a/etc/NEWS b/etc/NEWS
index ffeeaa8aa7e..5599bd9dddd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -12,7 +12,7 @@ See file HISTORY for a list of GNU Emacs versions and release dates.
12See files NEWS.24, NEWS.23, NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18, 12See files NEWS.24, NEWS.23, NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18,
13and NEWS.1-17 for changes in older Emacs versions. 13and NEWS.1-17 for changes in older Emacs versions.
14 14
15You can narrow news to a specific version by calling `view-emacs-news' 15You can narrow news to a specific version by calling 'view-emacs-news'
16with a prefix argument or by typing C-u C-h C-n. 16with a prefix argument or by typing C-u C-h C-n.
17 17
18Temporary note: 18Temporary note:
@@ -94,17 +94,17 @@ to be owned by that group, and the helper program for updating them to
94be installed setgid. The option now defaults to the 'games' group. 94be installed setgid. The option now defaults to the 'games' group.
95 95
96--- 96---
97** The `grep-changelog' script (and its manual page) are no longer included. 97** The 'grep-changelog' script (and its manual page) are no longer included.
98It has no particular connection to Emacs and has not changed in years, 98It has no particular connection to Emacs and has not changed in years,
99so if you want to use it, you can always take a copy from an older Emacs. 99so if you want to use it, you can always take a copy from an older Emacs.
100 100
101--- 101---
102** Emacs 25 comes with a new set of icons. 102** Emacs 25 comes with a new set of icons.
103Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png. 103Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png.
104The old Emacs logo icons are available as `emacs23.png' in the same location. 104The old Emacs logo icons are available as 'emacs23.png' in the same location.
105 105
106--- 106---
107** New make target `check-expensive' to run additional tests. 107** New make target 'check-expensive' to run additional tests.
108This includes all tests which run via "make check", plus additional 108This includes all tests which run via "make check", plus additional
109tests which take more time to perform. 109tests which take more time to perform.
110 110
@@ -113,77 +113,83 @@ tests which take more time to perform.
113 113
114+++ 114+++
115** When Emacs is given a file as a command line argument and 115** When Emacs is given a file as a command line argument and
116`initial-buffer-choice' is non-nil, display both the file and 116'initial-buffer-choice' is non-nil, display both the file and
117`initial-buffer-choice'. When Emacs is given more than one file and 117'initial-buffer-choice'. When Emacs is given more than one file and
118`initial-buffer-choice' is non-nil, show `initial-buffer-choice' 118'initial-buffer-choice' is non-nil, show 'initial-buffer-choice'
119and *Buffer List*. This makes Emacs convenient to use from the 119and *Buffer List*. This makes Emacs convenient to use from the
120command line when `initial-buffer-choice' is non-nil. 120command line when 'initial-buffer-choice' is non-nil.
121 121
122+++ 122+++
123** The value of initial-scratch-message is now treated as a doc string 123** The value of 'initial-scratch-message' is now treated as a doc string
124and can contain escape sequences for command keys, quotes, and the like. 124and can contain escape sequences for command keys, quotes, and the like.
125 125
126---
127** The default height of GUI frames was enlarged.
128This is so there's enough space in the initial window to display the
129optional text about recovering crashes sessions, without losing the
130splash image display.
131
126 132
127* Changes in Emacs 25.1 133* Changes in Emacs 25.1
128 134
129+++ 135+++
130** Xwidgets: a new feature for embedding native widgets inside Emacs buffers. 136** Xwidgets: a new feature for embedding native widgets inside Emacs buffers.
131If you have gtk3 and webkitgtk3 installed, and Emacs was built with 137If you have gtk3 and webkitgtk3 installed, and Emacs was built with
132xwidget support, you can access the embedded webkit browser with `M-x 138xwidget support, you can access the embedded webkit browser with 'M-x
133xwidget-webkit-browse-url'. This opens a new buffer with the embedded 139xwidget-webkit-browse-url'. This opens a new buffer with the embedded
134browser. The buffer will have a new mode, `xwidget-webkit-mode' 140browser. The buffer will have a new mode, 'xwidget-webkit-mode'
135(similar to `image-mode'), which supports the webkit widget. 141(similar to 'image-mode'), which supports the webkit widget.
136 142
137+++ 143+++
138*** New functions for xwidget-webkit mode `xwidget-webkit-insert-string', 144*** New functions for xwidget-webkit mode 'xwidget-webkit-insert-string',
139`xwidget-webkit-adjust-size-dispatch', `xwidget-webkit-back', 145'xwidget-webkit-adjust-size-dispatch', 'xwidget-webkit-back',
140`xwidget-webkit-browse-url', `xwidget-webkit-reload', 146'xwidget-webkit-browse-url', 'xwidget-webkit-reload',
141`xwidget-webkit-current-url', `xwidget-webkit-scroll-backward', 147'xwidget-webkit-current-url', 'xwidget-webkit-scroll-backward',
142`xwidget-webkit-scroll-forward', `xwidget-webkit-scroll-down', 148'xwidget-webkit-scroll-forward', 'xwidget-webkit-scroll-down',
143`xwidget-webkit-scroll-up'. 149'xwidget-webkit-scroll-up'.
144 150
145+++ 151+++
146** Emacs can now load shared/dynamic libraries (modules). 152** Emacs can now load shared/dynamic libraries (modules).
147A dynamic Emacs module is a shared library that provides additional 153A dynamic Emacs module is a shared library that provides additional
148functionality for use in Emacs Lisp programs, just like a package 154functionality for use in Emacs Lisp programs, just like a package
149written in Emacs Lisp would. The functions `load', `require', 155written in Emacs Lisp would. The functions 'load', 'require',
150`load-file', etc. were extended to load such modules, as they do with 156'load-file', etc. were extended to load such modules, as they do with
151Emacs Lisp packages. The new variable `module-file-suffix' holds the 157Emacs Lisp packages. The new variable 'module-file-suffix' holds the
152system-dependent value of the file-name extension (`.so' on Posix 158system-dependent value of the file-name extension ('.so' on Posix
153hosts) of the module files. 159hosts) of the module files.
154 160
155A module should export a C-callable function named 161A module should export a C-callable function named
156`emacs_module_init', which Emacs will call as part of the call to 162'emacs_module_init', which Emacs will call as part of the call to
157`load' or `require' which loads the module. It should also export a 163'load' or 'require' which loads the module. It should also export a
158symbol named `plugin_is_GPL_compatible' to indicate that its code is 164symbol named 'plugin_is_GPL_compatible' to indicate that its code is
159released under the GPL or compatible license; Emacs will refuse to 165released under the GPL or compatible license; Emacs will refuse to
160load modules that don't export such a symbol. 166load modules that don't export such a symbol.
161 167
162If a module needs to call Emacs functions, it should do so through the 168If a module needs to call Emacs functions, it should do so through the
163API defined and documented in the header file `emacs-module.h'. Note 169API defined and documented in the header file 'emacs-module.h'. Note
164that any module that provides Lisp-callable functions will have to use 170that any module that provides Lisp-callable functions will have to use
165Emacs functions such as `fset' and `funcall', in order to register its 171Emacs functions such as 'fset' and 'funcall', in order to register its
166functions with the Emacs Lisp interpreter. 172functions with the Emacs Lisp interpreter.
167 173
168Modules can create `user-ptr' Lisp objects that embed pointers to C 174Modules can create 'user-ptr' Lisp objects that embed pointers to C
169struct's defined by the module. This is useful for keeping around 175structs defined by the module. This is useful for keeping around
170complex data structures created by a module, to be passed back to the 176complex data structures created by a module, to be passed back to the
171module's functions. User-ptr objects can also have associated 177module's functions. User-ptr objects can also have associated
172"finalizers" -- functions to be run when the object is GC'ed; this is 178"finalizers" -- functions to be run when the object is GC'ed; this is
173useful for freeing any resources allocated for the underlying data 179useful for freeing any resources allocated for the underlying data
174structure, such as memory, open file descriptors, etc. A new 180structure, such as memory, open file descriptors, etc. A new
175predicate `user-ptrp' returns non-nil if its argument is a `user-ptr' 181predicate 'user-ptrp' returns non-nil if its argument is a 'user-ptr'
176object. 182object.
177 183
178Loadable modules in Emacs are an experimental feature, and subject to 184Loadable modules in Emacs are an experimental feature, and subject to
179change in future releases. For that reason, their support is disabled 185change in future releases. For that reason, their support is disabled
180by default, and must be enabled by using the `--with-modules' option 186by default, and must be enabled by using the '--with-modules' option
181at configure time. 187at configure time.
182 188
183+++ 189+++
184** Network security (TLS/SSL certificate validity and the like) is 190** Network security (TLS/SSL certificate validity and the like) is
185added via the new Network Security Manager (NSM) and controlled via 191added via the new Network Security Manager (NSM) and controlled via
186the `network-security-level' variable. 192the 'network-security-level' variable.
187 193
188+++ 194+++
189** C-h l now also lists the commands that were run. 195** C-h l now also lists the commands that were run.
@@ -197,46 +203,46 @@ select-enable-primary is ineffective since the system doesn't
197have the equivalent of a primary selection. 203have the equivalent of a primary selection.
198 204
199+++ 205+++
200** New option `switch-to-buffer-in-dedicated-window' allows you to 206** New option 'switch-to-buffer-in-dedicated-window' allows you to
201customize how `switch-to-buffer' proceeds interactively when the 207customize how 'switch-to-buffer' proceeds interactively when the
202selected window is strongly dedicated to its buffer. 208selected window is strongly dedicated to its buffer.
203 209
204+++ 210+++
205** The option `even-window-heights' has been renamed to 211** The option 'even-window-heights' has been renamed to
206`even-window-sizes' and now handles window widths as well. 212'even-window-sizes' and now handles window widths as well.
207 213
208+++ 214+++
209** terpri gets an optional arg ENSURE to conditionally output a newline. 215** terpri gets an optional arg ENSURE to conditionally output a newline.
210 216
211+++ 217+++
212** `insert-register' now leaves point after the inserted text 218** 'insert-register' now leaves point after the inserted text
213when called interactively. A prefix argument toggles this behavior. 219when called interactively. A prefix argument toggles this behavior.
214 220
215+++ 221+++
216** The new variable `term-file-aliases' replaces some files from lisp/term. 222** The new variable 'term-file-aliases' replaces some files from lisp/term.
217The function `tty-run-terminal-initialization' consults this variable 223The function 'tty-run-terminal-initialization' consults this variable
218when deciding what terminal-specific initialization code to run. 224when deciding what terminal-specific initialization code to run.
219 225
220--- 226---
221** New variable `system-configuration-features', listing some of the 227** New variable 'system-configuration-features', listing some of the
222main features that Emacs was compiled with. This is mainly intended 228main features that Emacs was compiled with. This is mainly intended
223for use in Emacs bug reports. 229for use in Emacs bug reports.
224 230
225+++ 231+++
226** A password is now hidden also when typed in batch mode. Another 232** A password is now hidden also when typed in batch mode. Another
227hiding character but the default `.' can be used by let-binding the 233hiding character but the default '.' can be used by let-binding the
228variable `read-hide-char'. 234variable 'read-hide-char'.
229 235
230+++ 236+++
231** The Emacs pseudo-random number generator can be securely seeded. 237** The Emacs pseudo-random number generator can be securely seeded.
232On system where Emacs can access the system entropy or some other 238On system where Emacs can access the system entropy or some other
233cryptographically secure random stream, it now uses that when `random' 239cryptographically secure random stream, it now uses that when 'random'
234is called with its argument `t'. This allows cryptographically strong 240is called with its argument 't'. This allows cryptographically strong
235random values; in particular, the Emacs server now uses this facility 241random values; in particular, the Emacs server now uses this facility
236to produce its authentication key. 242to produce its authentication key.
237 243
238--- 244---
239** New input methods: `tamil-dvorak' and `programmer-dvorak'. 245** New input methods: 'tamil-dvorak' and 'programmer-dvorak'.
240 246
241 247
242* Editing Changes in Emacs 25.1 248* Editing Changes in Emacs 25.1
@@ -249,17 +255,17 @@ to produce its authentication key.
249+++ 255+++
250*** Successive single-char deletions are collapsed in the undo-log just like 256*** Successive single-char deletions are collapsed in the undo-log just like
251successive char insertions. Which commands invoke this behavior is 257successive char insertions. Which commands invoke this behavior is
252controlled by the new `undo-auto-amalgamate' function. See the node 258controlled by the new 'undo-auto-amalgamate' function. See the node
253"Undo" in the ELisp manual for more details. 259"Undo" in the ELisp manual for more details.
254 260
255+++ 261+++
256*** The heuristic used to insert `undo-boundary' after each command 262*** The heuristic used to insert 'undo-boundary' after each command
257has changed, so that if a command causes changes in more than just the 263has changed, so that if a command causes changes in more than just the
258current buffer, Emacs now calls `undo-boundary' in every buffer 264current buffer, Emacs now calls 'undo-boundary' in every buffer
259affected by the command. 265affected by the command.
260 266
261+++ 267+++
262** New command `comment-line' bound to `C-x C-;'. 268** New command 'comment-line' bound to 'C-x C-;'.
263 269
264** New and improved facilities for inserting Unicode characters 270** New and improved facilities for inserting Unicode characters
265 271
@@ -267,12 +273,13 @@ affected by the command.
267*** Unicode names entered via C-x 8 RET now use substring completion by default. 273*** Unicode names entered via C-x 8 RET now use substring completion by default.
268 274
269+++ 275+++
270*** C-x 8 now has shorthands for these chars: ‐ ‑ ‒ – — ― ‘ ’ “ ” † ‡ • ′ ″ 276*** C-x 8 now has shorthands for several chars, such as U+2010
271€ № ← → ↔ − ≈ ≠ ≤ ≥. As before, you can type C-x 8 C-h to list shorthands. 277(HYPHEN), U+2011 (NON-BREAKING HYPHEN), and U+2012 (FIGURE DASH). As
278before, you can type C-x 8 C-h to list shorthands.
272 279
273+++ 280+++
274*** New minor mode electric-quote-mode for quoting ‘like this and “like this 281*** New minor mode electric-quote-mode for using curved quotes as you
275as you type. See also the new variable text-quoting-style. 282type. See also the new variable 'text-quoting-style'.
276 283
277--- 284---
278** New minor mode global-eldoc-mode is enabled by default. 285** New minor mode global-eldoc-mode is enabled by default.
@@ -300,30 +307,30 @@ Bidirectional Parentheses Algorithm (BPA) specified by these Unicode
300standards. 307standards.
301 308
302+++ 309+++
303** You can access `mouse-buffer-menu' (C-down-mouse-1) using C-f10. 310** You can access 'mouse-buffer-menu' (C-down-mouse-1) using C-f10.
304 311
305+++ 312+++
306** New buffer-local `electric-pair-local-mode'. 313** New buffer-local 'electric-pair-local-mode'.
307 314
308+++ 315+++
309** New variable `fast-but-imprecise-scrolling' inhibits 316** New variable 'fast-but-imprecise-scrolling' inhibits
310fontification during full screen scrolling operations, giving less 317fontification during full screen scrolling operations, giving less
311hesitant operation during auto-repeat of C-v, M-v at the cost of 318hesitant operation during auto-repeat of C-v, M-v at the cost of
312possible inaccuracies in the end position. 319possible inaccuracies in the end position.
313 320
314+++ 321+++
315** New documentation command `describe-symbol'. 322** New documentation command 'describe-symbol'.
316Works for functions, variables, faces, etc. It is bound to `C-h o' by 323Works for functions, variables, faces, etc. It is bound to 'C-h o' by
317default. 324default.
318 325
319+++ 326+++
320** New function `custom-prompt-customize-unsaved-options' checks for 327** New function 'custom-prompt-customize-unsaved-options' checks for
321unsaved customizations and prompts user to customize (if found). It 328unsaved customizations and prompts user to customize (if found). It
322is intended for adding to 'kill-emacs-query-functions'. 329is intended for adding to 'kill-emacs-query-functions'.
323 330
324+++ 331+++
325** The old `C-x w' bindings in hi-lock-mode are officially deprecated 332** The old 'C-x w' bindings in hi-lock-mode are officially deprecated
326in favor of the global `M-s h' bindings introduced in Emacs-23.1. 333in favor of the global 'M-s h' bindings introduced in Emacs-23.1.
327They'll disappear soon. 334They'll disappear soon.
328 335
329 336
@@ -332,14 +339,14 @@ They'll disappear soon.
332** Checkdoc 339** Checkdoc
333 340
334+++ 341+++
335*** New command `checkdoc-package-keywords' checks if the 342*** New command 'checkdoc-package-keywords' checks if the
336current package keywords are recognized. Set the new option 343current package keywords are recognized. Set the new option
337`checkdoc-package-keywords-flag' to non-nil to make 344'checkdoc-package-keywords-flag' to non-nil to make
338`checkdoc-current-buffer' call this function automatically. 345'checkdoc-current-buffer' call this function automatically.
339 346
340+++ 347+++
341*** New function `checkdoc-file' checks for style errors. 348*** New function 'checkdoc-file' checks for style errors.
342It's meant for use together with `compile': 349It's meant for use together with 'compile':
343emacs -batch --eval "(checkdoc-file \"subr.el\")" 350emacs -batch --eval "(checkdoc-file \"subr.el\")"
344 351
345** Desktop 352** Desktop
@@ -354,71 +361,59 @@ recommended to do this as soon as you have firmly upgraded to Emacs
354to version 206, you can do this with C-u C-u M-x desktop-save. 361to version 206, you can do this with C-u C-u M-x desktop-save.
355 362
356+++ 363+++
357** New function `bookmark-set-no-overwrite' bound to C-x r M. 364** New function 'bookmark-set-no-overwrite' bound to C-x r M.
358It raises an error if a bookmark of that name already exists, 365It raises an error if a bookmark of that name already exists,
359unlike `bookmark-set' which silently updates an existing bookmark. 366unlike 'bookmark-set' which silently updates an existing bookmark.
360 367
361** Gnus 368** Gnus
362 369
363+++ 370+++
364*** New user options `mm-html-inhibit-images' and `mm-html-blocked-images' 371*** New user options 'mm-html-inhibit-images' and 'mm-html-blocked-images'
365now control how mm-* functions fetch and display images in an HTML 372now control how mm-* functions fetch and display images in an HTML
366message. Gnus still uses `gnus-inhibit-images' and `gnus-blocked-images' 373message. Gnus still uses 'gnus-inhibit-images' and 'gnus-blocked-images'
367for that purpose, i.e., binds mm-html- variables with those gnus- 374for that purpose, i.e., binds mm-html- variables with those gnus-
368variables, but other packages do not have to bind gnus- variables now. 375variables, but other packages do not have to bind gnus- variables now.
369 376
370--- 377---
371*** `mm-inline-text-html-with-images' has been removed. 378*** 'mm-inline-text-html-with-images' has been removed.
372Use `mm-html-inhibit-images' instead. Note that the value is opposite 379Use 'mm-html-inhibit-images' instead. Note that the value is opposite
373in meaning. 380in meaning.
374 381
375** IMAP 382** IMAP
376 383
377--- 384---
378*** `imap-ssl-program' has been removed, and imap.el uses the internal 385*** 'imap-ssl-program' has been removed, and imap.el uses the internal
379GnuTLS encryption functions if possible. 386GnuTLS encryption functions if possible.
380 387
381** JSON 388** JSON
382 389
383--- 390---
384*** `json-pretty-print' and `json-pretty-print-buffer' now maintain 391*** 'json-pretty-print' and 'json-pretty-print-buffer' now maintain
385the ordering of object keys by default. 392the ordering of object keys by default.
386 393
387--- 394---
388*** New commands `json-pretty-print-ordered' and 395*** New commands 'json-pretty-print-ordered' and
389`json-pretty-print-buffer-ordered' pretty prints JSON objects with 396'json-pretty-print-buffer-ordered' pretty prints JSON objects with
390object keys sorted alphabetically. 397object keys sorted alphabetically.
391 398
392+++
393** Prog mode has some support for multi-mode indentation.
394This allows better indentation support in modes that support multiple
395programming languages in the same buffer, like literate programming
396environments or ANTLR programs with embedded Python code.
397
398A major mode can provide indentation context for a sub-mode through
399the `prog-indentation-context' variable. To support this, modes that
400provide indentation should use `prog-widen' instead of `widen' and
401`prog-first-column' instead of a literal zero. See the node
402"Mode-Specific Indent" in the ELisp manual for more details.
403
404** Prettify Symbols mode 399** Prettify Symbols mode
405 400
406+++ 401+++
407*** Prettify Symbols mode supports custom composition predicates. By 402*** Prettify Symbols mode supports custom composition predicates. By
408overriding the default `prettify-symbols-compose-predicate', modes can 403overriding the default 'prettify-symbols-compose-predicate', modes can
409specify in which contexts a symbol may be displayed as some Unicode 404specify in which contexts a symbol may be displayed as some Unicode
410character. `prettify-symbols-default-compose-p' is the default which 405character. 'prettify-symbols-default-compose-p' is the default which
411is suitable for most programming languages such as C or Lisp (but not 406is suitable for most programming languages such as C or Lisp (but not
412(La)TeX). 407(La)TeX).
413 408
414+++ 409+++
415*** Symbols can be unprettified while point is inside them. 410*** Symbols can be unprettified while point is inside them.
416New variable `prettify-symbols-unprettify-at-point' configures this. 411New variable 'prettify-symbols-unprettify-at-point' configures this.
417 412
418** Enhanced xterm support 413** Enhanced xterm support
419 414
420--- 415---
421*** The new variable `xterm-screen-extra-capabilities' for configuring xterm. 416*** The new variable 'xterm-screen-extra-capabilities' for configuring xterm.
422This variable tells Emacs which advanced capabilities are available in 417This variable tells Emacs which advanced capabilities are available in
423the xterm terminal emulator used to display Emacs text-mode frames. 418the xterm terminal emulator used to display Emacs text-mode frames.
424The default is to check each capability, and use it if available. 419The default is to check each capability, and use it if available.
@@ -428,32 +423,32 @@ its NEWS.)
428--- 423---
429*** Killing text now also sets the CLIPBOARD/PRIMARY selection 424*** Killing text now also sets the CLIPBOARD/PRIMARY selection
430in the surrounding GUI (using the OSC-52 escape sequence). This only works 425in the surrounding GUI (using the OSC-52 escape sequence). This only works
431if your xterm supports it and enables the `allowWindowOps' options (disabled 426if your xterm supports it and enables the 'allowWindowOps' options (disabled
432by default at least in Debian, for security reasons). 427by default at least in Debian, for security reasons).
433 428
434Similarly, you can yank the CLIPBOARD/PRIMARY selection (using the OSC-52 429Similarly, you can yank the CLIPBOARD/PRIMARY selection (using the OSC-52
435escape sequence) if your xterm has the feature enabled but for that you 430escape sequence) if your xterm has the feature enabled but for that you
436additionally need to add `getSelection' to `xterm-extra-capabilities'. 431additionally need to add 'getSelection' to 'xterm-extra-capabilities'.
437 432
438+++ 433+++
439*** `xterm-mouse-mode' now supports mouse-tracking (if your xterm supports it). 434*** 'xterm-mouse-mode' now supports mouse-tracking (if your xterm supports it).
440 435
441--- 436---
442** The way to turn on and off `save-place' mode has changed. 437** The way to turn on and off 'save-place' mode has changed.
443It is no longer sufficient to load the saveplace library and set 438It is no longer sufficient to load the saveplace library and set
444`save-place' non-nil. Instead, use the two new minor modes: 439'save-place' non-nil. Instead, use the two new minor modes:
445`save-place-mode' turns on saving last place in every file, and 440'save-place-mode' turns on saving last place in every file, and
446`save-place-local-mode' does that only for the file in whose buffer it 441'save-place-local-mode' does that only for the file in whose buffer it
447is invoked. The `save-place' variable is now an obsolete alias for 442is invoked. The 'save-place' variable is now an obsolete alias for
448`save-place-mode', which replaces it, and `toggle-save-place' is an 443'save-place-mode', which replaces it, and 'toggle-save-place' is an
449obsolete alias for the new `save-place-local-mode' command. 444obsolete alias for the new 'save-place-local-mode' command.
450 445
451** ERC 446** ERC
452 447
453+++ 448+++
454*** ERC can now hide message types by network or channel. 449*** ERC can now hide message types by network or channel.
455`erc-hide-list' will hide all messages of the specified type, while 450'erc-hide-list' will hide all messages of the specified type, while
456`erc-network-hide-list' and `erc-channel-hide-list' will only hide the 451'erc-network-hide-list' and 'erc-channel-hide-list' will only hide the
457specified message types for the respective specified targets. 452specified message types for the respective specified targets.
458 453
459--- 454---
@@ -468,14 +463,14 @@ being made case-sensitive in Emacs 24.2.
468--- 463---
469*** New commands, key binds, and menu items. 464*** New commands, key binds, and menu items.
470 465
471**** `<' and `>' for navigating previous and next tracks in playlist 466**** '<' and '>' for navigating previous and next tracks in playlist
472 467
473**** New play/pause command `mpc-toggle-play' bound to `s' 468**** New play/pause command 'mpc-toggle-play' bound to 's'
474 469
475**** `g' bound to new command `mpc-seek-current' will navigate current 470**** 'g' bound to new command 'mpc-seek-current' will navigate current
476 track. 471 track.
477 472
478**** New commands `mpc-toggle-{consume,repeat,single,shuffle}' for 473**** New commands 'mpc-toggle-{consume,repeat,single,shuffle}' for
479 toggling playback modes. 474 toggling playback modes.
480 475
481--- 476---
@@ -493,7 +488,7 @@ MPD supports the XDG base directory specification since version 0.17.6.
493** Midnight-mode 488** Midnight-mode
494 489
495--- 490---
496*** `midnight-mode' is now a proper minor mode. 491*** 'midnight-mode' is now a proper minor mode.
497 492
498--- 493---
499*** clean-buffer-*-regexps can now specify buffers via predicate functions. 494*** clean-buffer-*-regexps can now specify buffers via predicate functions.
@@ -503,22 +498,22 @@ MPD supports the XDG base directory specification since version 0.17.6.
503+++ 498+++
504*** New "external" package status. 499*** New "external" package status.
505An external package is any installed package that's not built-in and 500An external package is any installed package that's not built-in and
506not from `package-user-dir', which usually means it's from an entry in 501not from 'package-user-dir', which usually means it's from an entry in
507`package-directory-list'. They are treated much like built-in 502'package-directory-list'. They are treated much like built-in
508packages, in that they cannot be deleted through the package menu and 503packages, in that they cannot be deleted through the package menu and
509are not considered for upgrades. 504are not considered for upgrades.
510 505
511The effect is that a user can manually place a specific version of a 506The effect is that a user can manually place a specific version of a
512package inside `package-directory-list' and the package menu will 507package inside 'package-directory-list' and the package menu will
513always respect that. 508always respect that.
514 509
515+++ 510+++
516*** If a package is available on multiple archives and one has higher 511*** If a package is available on multiple archives and one has higher
517priority (as per `package-archive-priorities') only that one is 512priority (as per 'package-archive-priorities') only that one is
518listed. This can be configured with `package-menu-hide-low-priority'. 513listed. This can be configured with 'package-menu-hide-low-priority'.
519 514
520+++ 515+++
521*** `package-menu-toggle-hiding' now toggles the hiding of packages. 516*** 'package-menu-toggle-hiding' now toggles the hiding of packages.
522This includes the above-mentioned low-priority packages, as well as 517This includes the above-mentioned low-priority packages, as well as
523available packages whose version is lower than the currently installed 518available packages whose version is lower than the currently installed
524version (which were previously impossible to display). 519version (which were previously impossible to display).
@@ -536,52 +531,52 @@ ASYNC argument. If it is non-nil, package.el performs the download(s)
536asynchronously. 531asynchronously.
537 532
538--- 533---
539*** New variable `package-menu-async' controls whether the 534*** New variable 'package-menu-async' controls whether the
540package-menu uses asynchronous downloads. 535package-menu uses asynchronous downloads.
541 536
542--- 537---
543*** `package-install-from-buffer' and `package-install-file' work on directories. 538*** 'package-install-from-buffer' and 'package-install-file' work on directories.
544This follows the same rules as installing from a .tar file, except the 539This follows the same rules as installing from a .tar file, except the
545-pkg file is optional. 540-pkg file is optional.
546 541
547--- 542---
548*** Packages which are dependencies of other packages cannot be deleted. 543*** Packages which are dependencies of other packages cannot be deleted.
549The FORCE argument to `package-delete' overrides this. 544The FORCE argument to 'package-delete' overrides this.
550 545
551--- 546---
552*** New custom variable `package-selected-packages' tracks packages 547*** New custom variable 'package-selected-packages' tracks packages
553which were installed by the user (as opposed to installed as 548which were installed by the user (as opposed to installed as
554dependencies). This variable can also be manually customized. 549dependencies). This variable can also be manually customized.
555 550
556--- 551---
557*** New command `package-install-selected-packages' installs all 552*** New command 'package-install-selected-packages' installs all
558packages from `package-selected-packages' which are currently missing. 553packages from 'package-selected-packages' which are currently missing.
559 554
560--- 555---
561*** `package-install' function now takes a DONT-SELECT argument. If 556*** 'package-install' function now takes a DONT-SELECT argument. If
562this function is called interactively or if DONT-SELECT is nil, add the 557this function is called interactively or if DONT-SELECT is nil, add the
563package being installed to `package-selected-packages'. 558package being installed to 'package-selected-packages'.
564 559
565--- 560---
566*** New command `package-autoremove' removes all packages which were 561*** New command 'package-autoremove' removes all packages which were
567installed strictly as dependencies but are no longer needed. 562installed strictly as dependencies but are no longer needed.
568 563
569+++ 564+++
570** Shell 565** Shell
571 566
572When you invoke `shell' interactively, the *shell* buffer will now 567When you invoke 'shell' interactively, the *shell* buffer will now
573display in a new window. However, you can customize this behavior via 568display in a new window. However, you can customize this behavior via
574the `display-buffer-alist' variable. For example, to get 569the 'display-buffer-alist' variable. For example, to get
575the old behavior -- *shell* buffer displays in current window -- use 570the old behavior -- *shell* buffer displays in current window -- use
576(add-to-list 'display-buffer-alist 571(add-to-list 'display-buffer-alist
577 '("^\\*shell\\*$" . (display-buffer-same-window))). 572 '("^\\*shell\\*$" . (display-buffer-same-window))).
578 573
579** EIEIO 574** EIEIO
580+++ 575+++
581*** The `:protection' slot option is not obeyed any more. 576*** The ':protection' slot option is not obeyed any more.
582+++ 577+++
583*** The `newname' argument to constructors is optional&deprecated. 578*** The 'newname' argument to constructors is optional&deprecated.
584If you need your objects to be named, do it by inheriting from `eieio-named'. 579If you need your objects to be named, do it by inheriting from 'eieio-named'.
585+++ 580+++
586*** The <class>-list-p and <class>-child-p functions are declared obsolete. 581*** The <class>-list-p and <class>-child-p functions are declared obsolete.
587+++ 582+++
@@ -592,18 +587,18 @@ If you need your objects to be named, do it by inheriting from `eieio-named'.
592*** defgeneric and defmethod are declared obsolete. 587*** defgeneric and defmethod are declared obsolete.
593Use the equivalent facilities from cl-generic.el instead. 588Use the equivalent facilities from cl-generic.el instead.
594+++ 589+++
595*** `constructor' is now an obsolete alias for `make-instance'. 590*** 'constructor' is now an obsolete alias for 'make-instance'.
596--- `pcase' accepts a new UPattern `eieio'. 591--- 'pcase' accepts a new UPattern 'eieio'.
597 592
598** ido 593** ido
599 594
600+++ 595+++
601*** New command `ido-bury-buffer-at-head' bound to C-S-b 596*** New command 'ido-bury-buffer-at-head' bound to C-S-b
602Bury the buffer at the head of `ido-matches', analogous to how C-k 597Bury the buffer at the head of 'ido-matches', analogous to how C-k
603kills the buffer at head. 598kills the buffer at head.
604 599
605--- 600---
606*** A prefix argument to `ido-restrict-to-matches' will reverse its 601*** A prefix argument to 'ido-restrict-to-matches' will reverse its
607meaning, and the list is restricted to those elements that do not 602meaning, and the list is restricted to those elements that do not
608match the current input. 603match the current input.
609 604
@@ -611,18 +606,18 @@ match the current input.
611 606
612+++ 607+++
613*** You can use <UP> and <DOWN> arrow keys to move through history by lines. 608*** You can use <UP> and <DOWN> arrow keys to move through history by lines.
614The new commands `next-line-or-history-element' and 609The new commands 'next-line-or-history-element' and
615`previous-line-or-history-element', bound to <UP> and <DOWN> in the 610'previous-line-or-history-element', bound to <UP> and <DOWN> in the
616minibuffer, allow by-line movement through minibuffer history, 611minibuffer, allow by-line movement through minibuffer history,
617similarly to an ordinary buffer. Only when point moves over 612similarly to an ordinary buffer. Only when point moves over
618the bottom/top of the minibuffer it goes to the next/previous history 613the bottom/top of the minibuffer it goes to the next/previous history
619element. `M-p' and `M-n' still move directly to previous/next history 614element. 'M-p' and 'M-n' still move directly to previous/next history
620item as before. 615item as before.
621 616
622** Search and Replace 617** Search and Replace
623 618
624+++ 619+++
625*** `isearch' and `query-replace' can now perform character folding in matches. 620*** 'isearch' and 'query-replace' can now perform character folding in matches.
626This is analogous to case folding, but instead of disregarding case 621This is analogous to case folding, but instead of disregarding case
627variants, it disregards wider classes of distinctions between similar 622variants, it disregards wider classes of distinctions between similar
628characters. (Case folding is a special case of character folding.) 623characters. (Case folding is a special case of character folding.)
@@ -630,47 +625,48 @@ This means many characters in the search string will match entire
630groups of characters instead of just themselves. 625groups of characters instead of just themselves.
631 626
632For instance, the ASCII double quote character " will match all 627For instance, the ASCII double quote character " will match all
633variants of double quotes (like “ and ”), and the letter a will match 628variants of double quotes, and the letter 'a' will match all of its
634all of its accented cousins, even those composed of multiple 629accented cousins, even those composed of multiple characters, as well
635characters, as well as many other symbols like ℀, ℁, ⒜, and ⓐ. 630as many other symbols like U+249C (PARENTHESIZED LATIN SMALL LETTER
631A).
636 632
637Character folding is enabled by customizing `search-default-mode' to 633Character folding is enabled by customizing 'search-default-mode' to
638the value `character-fold-to-regexp'. You can also toggle character 634the value 'character-fold-to-regexp'. You can also toggle character
639folding in the middle of a search by typing `M-s ''. 635folding in the middle of a search by typing 'M-s ''.
640 636
641`query-replace' honors character folding if the new variable 637'query-replace' honors character folding if the new variable
642`replace-character-fold' is customized to a non-nil value. 638'replace-character-fold' is customized to a non-nil value.
643 639
644+++ 640+++
645*** New user option `search-default-mode'. 641*** New user option 'search-default-mode'.
646This option specifies the default mode for Isearch. The default 642This option specifies the default mode for Isearch. The default
647value, nil specifies that Isearch does literal searches (however, 643value, nil specifies that Isearch does literal searches (however,
648`case-fold-search' and `isearch-lax-whitespace' may still be applied, 644'case-fold-search' and 'isearch-lax-whitespace' may still be applied,
649as in previous Emacs versions). 645as in previous Emacs versions).
650 646
651+++ 647+++
652*** New function `character-fold-to-regexp' can be used 648*** New function 'character-fold-to-regexp' can be used
653by searching commands to produce a regexp matching anything that 649by searching commands to produce a regexp matching anything that
654character-folds into STRING. 650character-folds into STRING.
655 651
656+++ 652+++
657*** The new M-s M-w key binding uses eww to search the web for the 653*** The new M-s M-w key binding uses eww to search the web for the
658text in the region. The search engine to use for this is specified by 654text in the region. The search engine to use for this is specified by
659the customizable variable `eww-search-prefix'. 655the customizable variable 'eww-search-prefix'.
660 656
661+++ 657+++
662*** Query-replace history is enhanced. 658*** Query-replace history is enhanced.
663When query-replace reads the FROM string from the minibuffer, typing 659When query-replace reads the FROM string from the minibuffer, typing
664`M-p' will now show previous replacements as "FROM SEP TO", where FROM 660'M-p' will now show previous replacements as "FROM SEP TO", where FROM
665and TO are the original text and its replacement, and SEP is an arrow 661and TO are the original text and its replacement, and SEP is an arrow
666string defined by the new variable `query-replace-from-to-separator'. 662string defined by the new variable 'query-replace-from-to-separator'.
667To select a prior replacement, type `M-p' until the desired 663To select a prior replacement, type 'M-p' until the desired
668replacement appears in the minibuffer, and then exit the minibuffer by 664replacement appears in the minibuffer, and then exit the minibuffer by
669typing RET. 665typing RET.
670 666
671** Calc 667** Calc
672+++ 668+++
673*** If `quick-calc' is called with a prefix argument, insert the 669*** If 'quick-calc' is called with a prefix argument, insert the
674result of the calculation into the current buffer. 670result of the calculation into the current buffer.
675 671
676+++ 672+++
@@ -681,18 +677,19 @@ instrumented function.
681** ElDoc 677** ElDoc
682 678
683+++ 679+++
684*** New minor mode `global-eldoc-mode' 680*** New minor mode 'global-eldoc-mode'
685It is turned on by default, and affects `*scratch*' and other buffers 681It is turned on by default, and affects '*scratch*' and other buffers
686whose major mode supports Emacs Lisp. 682whose major mode supports Emacs Lisp.
687 683
688--- 684---
689*** `eldoc-documentation-function' now defaults to `ignore' 685*** 'eldoc-documentation-function' now defaults to 'ignore'
690 686
691--- 687---
692*** `describe-char-eldoc' displays information about character at point, 688*** 'describe-char-eldoc' displays information about character at point,
693and can be used as a default value of `eldoc-documentation-function'. It is 689and can be used as a default value of 'eldoc-documentation-function'. It is
694useful when, for example, one needs to distinguish various spaces (e.g. ] [, 690useful when, for example, one needs to distinguish various spaces - e.g.,
695] [, ] [, etc.) while using mono-spaced font. 691U+00A0 (NO-BREAK SPACE), U+2002 (EN SPACE), and U+2009 (THIN SPACE) - while
692using mono-spaced font.
696 693
697** eww 694** eww
698 695
@@ -700,17 +697,17 @@ useful when, for example, one needs to distinguish various spaces (e.g. ] [,
700*** HTML can now be rendered using variable-width fonts. 697*** HTML can now be rendered using variable-width fonts.
701 698
702+++ 699+++
703*** A new command `F' (`eww-toggle-fonts') can be used to toggle 700*** A new command 'F' ('eww-toggle-fonts') can be used to toggle
704whether to use variable-pitch fonts or not. The user can also 701whether to use variable-pitch fonts or not. The user can also
705customize the `shr-use-fonts' variable. 702customize the 'shr-use-fonts' variable.
706 703
707+++ 704+++
708*** A new command `R' (`eww-readable') will try do identify the main 705*** A new command 'R' ('eww-readable') will try do identify the main
709textual parts of a web page and display only that, leaving menus and 706textual parts of a web page and display only that, leaving menus and
710the like off the page. 707the like off the page.
711 708
712+++ 709+++
713*** A new command `D' (`eww-toggle-paragraph-direction') allows you to 710*** A new command 'D' ('eww-toggle-paragraph-direction') allows you to
714toggle the paragraph direction between left-to-right and right-to-left. 711toggle the paragraph direction between left-to-right and right-to-left.
715 712
716--- 713---
@@ -722,11 +719,11 @@ buffers you want to keep separate.
722pages visited) is now preserved in the desktop file. 719pages visited) is now preserved in the desktop file.
723 720
724+++ 721+++
725*** `eww-after-render-hook' is now called after eww has rendered 722*** 'eww-after-render-hook' is now called after eww has rendered
726the data in the buffer. 723the data in the buffer.
727 724
728--- 725---
729*** The `eww-reload' command now takes a prefix to not reload via 726*** The 'eww-reload' command now takes a prefix to not reload via
730the net, but just use the local copy of the HTML. 727the net, but just use the local copy of the HTML.
731 728
732+++ 729+++
@@ -736,10 +733,10 @@ interact with this DOM. See the Emacs Lisp manual for interface
736details. 733details.
737 734
738+++ 735+++
739*** `mailcap-mime-data' is now consulted when displaying PDF files. 736*** 'mailcap-mime-data' is now consulted when displaying PDF files.
740 737
741+++ 738+++
742*** The new `S' command will list all eww buffers, and allow managing 739*** The new 'S' command will list all eww buffers, and allow managing
743them. 740them.
744 741
745--- 742---
@@ -756,19 +753,19 @@ transformed into multipart/related messages before sending.
756** In Show Paren Mode, a parenthesis can be highlighted when point 753** In Show Paren Mode, a parenthesis can be highlighted when point
757stands inside it, and certain parens can be highlighted when point is 754stands inside it, and certain parens can be highlighted when point is
758at BOL or EOL, or in whitespace there. To enable these, customize, 755at BOL or EOL, or in whitespace there. To enable these, customize,
759respectively, `show-paren-when-point-inside-paren' or 756respectively, 'show-paren-when-point-inside-paren' or
760`show-paren-when-point-in-periphery'. 757'show-paren-when-point-in-periphery'.
761 758
762--- 759---
763** If gpg2 exists on the system, it is now used as the default value 760** If gpg2 exists on the system, it is now used as the default value
764of `epg-gpg-program' (instead of gpg). 761of 'epg-gpg-program' (instead of gpg).
765 762
766** Lisp mode 763** Lisp mode
767 764
768--- 765---
769*** Strings after `:documentation' are highlighted as docstrings. 766*** Strings after ':documentation' are highlighted as docstrings.
770This enhances Lisp mode fontification to handle documentation of the 767This enhances Lisp mode fontification to handle documentation of the
771form `(:documentation "the doc string")' used in Common Lisp code for 768form '(:documentation "the doc string")' used in Common Lisp code for
772CLOS class and slot documentation. 769CLOS class and slot documentation.
773 770
774** Rectangle editing 771** Rectangle editing
@@ -778,91 +775,91 @@ CLOS class and slot documentation.
778 775
779+++ 776+++
780*** C-x C-x in rectangle-mark-mode now cycles through the four corners. 777*** C-x C-x in rectangle-mark-mode now cycles through the four corners.
781*** `string-rectangle' provides on-the-fly preview of the result. 778*** 'string-rectangle' provides on-the-fly preview of the result.
782 779
783+++ 780+++
784** New font-lock functions `font-lock-ensure' and `font-lock-flush'. 781** New font-lock functions 'font-lock-ensure' and 'font-lock-flush'.
785These should be used in preference to `font-lock-fontify-buffer' when 782These should be used in preference to 'font-lock-fontify-buffer' when
786called from Lisp. 783called from Lisp.
787 784
788--- 785---
789** Macro `minibuffer-with-setup-hook' can optionally append a function 786** Macro 'minibuffer-with-setup-hook' can optionally append a function
790to `minibuffer-setup-hook'. 787to 'minibuffer-setup-hook'.
791 788
792If the first argument of the macro is of the form `(:append FUN)', 789If the first argument of the macro is of the form '(:append FUN)',
793then FUN will be appended to `minibuffer-setup-hook', instead of 790then FUN will be appended to 'minibuffer-setup-hook', instead of
794prepending it. 791prepending it.
795 792
796** cl-lib 793** cl-lib
797+++ 794+++
798*** New functions `cl-fresh-line', `cl-digit-char-p', and `cl-parse-integer'. 795*** New functions 'cl-fresh-line', 'cl-digit-char-p', and 'cl-parse-integer'.
799 796
800--- 797---
801*** `pcase' accepts the new UPattern `cl-struct'. 798*** 'pcase' accepts the new UPattern 'cl-struct'.
802 799
803** Calendar and diary 800** Calendar and diary
804 801
805+++ 802+++
806*** The default `diary-file' is now located in .emacs.d. 803*** The default 'diary-file' is now located in .emacs.d.
807 804
808+++ 805+++
809*** New commands to insert diary entries with Chinese dates: 806*** New commands to insert diary entries with Chinese dates:
810`diary-chinese-insert-anniversary-entry' `diary-chinese-insert-entry' 807'diary-chinese-insert-anniversary-entry' 'diary-chinese-insert-entry'
811`diary-chinese-insert-monthly-entry', `diary-chinese-insert-yearly-entry'. 808'diary-chinese-insert-monthly-entry', 'diary-chinese-insert-yearly-entry'.
812 809
813+++ 810+++
814*** The calendar can now list and mark diary entries with Chinese dates. 811*** The calendar can now list and mark diary entries with Chinese dates.
815See `diary-chinese-list-entries' and `diary-chinese-mark-entries'. 812See 'diary-chinese-list-entries' and 'diary-chinese-mark-entries'.
816 813
817--- 814---
818*** The option `calendar-mode-line-format' can now be nil, 815*** The option 'calendar-mode-line-format' can now be nil,
819which means to do nothing special with the mode line in calendars. 816which means to do nothing special with the mode line in calendars.
820 817
821+++ 818+++
822*** New option `calendar-weekend-days'. 819*** New option 'calendar-weekend-days'.
823The option customizes which day headers receive the 820The option customizes which day headers receive the
824`calendar-weekend-header' face. 821'calendar-weekend-header' face.
825 822
826--- 823---
827*** New optional args N and STRING for holiday-greek-orthodox-easter. 824*** New optional args N and STRING for 'holiday-greek-orthodox-easter'.
828 825
829--- 826---
830*** Many items obsolete since at least version 23.1 have been removed. 827*** Many items obsolete since at least version 23.1 have been removed.
831The majority were function/variable/face aliases, too numerous to list here. 828The majority were function/variable/face aliases, too numerous to list here.
832The remainder were: 829The remainder were:
833 830
834**** Functions `calendar-one-frame-setup', `calendar-only-one-frame-setup', 831**** Functions 'calendar-one-frame-setup', 'calendar-only-one-frame-setup',
835`calendar-two-frame-setup', `european-calendar', `american-calendar'. 832'calendar-two-frame-setup', 'european-calendar', 'american-calendar'.
836 833
837**** Hooks `cal-menu-load-hook', `cal-x-load-hook'. 834**** Hooks 'cal-menu-load-hook', 'cal-x-load-hook'.
838 835
839**** Macro `calendar-for-loop'. 836**** Macro 'calendar-for-loop'.
840 837
841**** Variables `european-calendar-style', `diary-face', `hebrew-holidays-{1,4}'. 838**** Variables 'european-calendar-style', 'diary-face', 'hebrew-holidays-{1,4}'.
842 839
843**** The nil and list forms of `diary-display-function'. 840**** The nil and list forms of 'diary-display-function'.
844 841
845+++ 842+++
846** New ERT function `ert-summarize-tests-batch-and-exit'. 843** New ERT function 'ert-summarize-tests-batch-and-exit'.
847If the output of ERT tests in batch mode execution can be saved to a 844If the output of ERT tests in batch mode execution can be saved to a
848log file, then it can be passed as an argument to the above function 845log file, then it can be passed as an argument to the above function
849to produce a neat summary. 846to produce a neat summary.
850 847
851--- 848---
852** New js.el option `js-indent-first-init'. 849** New js.el option 'js-indent-first-init'.
853 850
854** Info 851** Info
855 852
856--- 853---
857** Info mode now displays symbol names in fixed-pitch font. 854** Info mode now displays symbol names in fixed-pitch font.
858If you want to get the old behavior back, customize the `Info-quoted' 855If you want to get the old behavior back, customize the 'Info-quoted'
859face to use the same definitions as the default face. 856face to use the same definitions as the default face.
860 857
861--- 858---
862*** `Info-fontify-maximum-menu-size' can be t for no limit. 859*** 'Info-fontify-maximum-menu-size' can be t for no limit.
863 860
864+++ 861+++
865*** `info-display-manual' can now be given a prefix argument which (any 862*** 'info-display-manual' can now be given a prefix argument which (any
866non-nil value) directs the command to limit the completion 863non-nil value) directs the command to limit the completion
867alternatives to currently visited manuals. 864alternatives to currently visited manuals.
868 865
@@ -872,7 +869,7 @@ alternatives to currently visited manuals.
872** Rmail 869** Rmail
873 870
874+++ 871+++
875*** The Rmail commands `d', `C-d' and `u' take optional repeat counts 872*** The Rmail commands 'd', 'C-d' and 'u' take optional repeat counts
876to delete or undelete multiple messages. 873to delete or undelete multiple messages.
877 874
878+++ 875+++
@@ -880,24 +877,24 @@ to delete or undelete multiple messages.
880libxml2 or if you have the Lynx browser installed. By default, Rmail 877libxml2 or if you have the Lynx browser installed. By default, Rmail
881will display the HTML version of a mail message that has both HTML and 878will display the HTML version of a mail message that has both HTML and
882plain text parts, if display of HTML email is possible; customize the 879plain text parts, if display of HTML email is possible; customize the
883`rmail-mime-prefer-html' option to `nil' if you don't want that. 880'rmail-mime-prefer-html' option to 'nil' if you don't want that.
884 881
885+++ 882+++
886*** In the commands that make summaries by subject, recipients, or senders, 883*** In the commands that make summaries by subject, recipients, or senders,
887you can no longer use commas to separate regular expressions. 884you can no longer use commas to separate regular expressions.
888 885
889+++ 886+++
890** SES now supports local printer functions; see `ses-define-local-printer'. 887** SES now supports local printer functions; see 'ses-define-local-printer'.
891 888
892** Shell-script Mode 889** Shell-script Mode
893--- 890---
894*** In sh-mode you can now use `sh-shell' as a file-local variable to 891*** In sh-mode you can now use 'sh-shell' as a file-local variable to
895specify the type of shell in use (bash, csh, etc). 892specify the type of shell in use (bash, csh, etc).
896 893
897--- 894---
898*** New value `always' for `sh-indent-after-continuation'. 895*** New value 'always' for 'sh-indent-after-continuation'.
899This provides old-style ("dumb") indentation of continued lines. 896This provides old-style ("dumb") indentation of continued lines.
900See the doc string of `sh-indent-after-continuation' for details. 897See the doc string of 'sh-indent-after-continuation' for details.
901 898
902** TLS 899** TLS
903--- 900---
@@ -908,33 +905,33 @@ See the doc string of `sh-indent-after-continuation' for details.
908program is used instead. This program used to be run in --insecure 905program is used instead. This program used to be run in --insecure
909mode by default, but has now changed to be secure instead, and will 906mode by default, but has now changed to be secure instead, and will
910fail if you try to connect to non-verifiable hosts. This is 907fail if you try to connect to non-verifiable hosts. This is
911controlled by the `tls-program' variable. 908controlled by the 'tls-program' variable.
912 909
913** URL 910** URL
914 911
915+++ 912+++
916*** The URL package accepts now the protocols "ssh", "scp" and "rsync". 913*** The URL package accepts now the protocols "ssh", "scp" and "rsync".
917When `url-handler-mode' is enabled, file operations for these 914When 'url-handler-mode' is enabled, file operations for these
918protocols as well as for "telnet" and "ftp" are passed to Tramp. 915protocols as well as for "telnet" and "ftp" are passed to Tramp.
919 916
920+++ 917+++
921*** The URL package allows customizing the `url-user-agent' string. 918*** The URL package allows customizing the 'url-user-agent' string.
922The new `url-user-agent' variable can be customized to be a string or 919The new 'url-user-agent' variable can be customized to be a string or
923a function. 920a function.
924 921
925--- 922---
926*** The new interface variable `url-request-noninteractive' can be used 923*** The new interface variable 'url-request-noninteractive' can be used
927to specify that we're running in a noninteractive context, and that 924to specify that we're running in a noninteractive context, and that
928we should not be queried about things like TLS certificate validity. 925we should not be queried about things like TLS certificate validity.
929 926
930--- 927---
931*** `url-mime-accept-string' can now be used as in "interface" 928*** 'url-mime-accept-string' can now be used as in "interface"
932variable, meaning you can bind it around an `url-retrieve' call. 929variable, meaning you can bind it around an 'url-retrieve' call.
933 930
934--- 931---
935*** If URL is used with a https connection, the first callback argument 932*** If URL is used with a https connection, the first callback argument
936plist will contain a :peer element that has the output of 933plist will contain a :peer element that has the output of
937`gnutls-peer-status' (if Emacs is built with GnuTLS support). 934'gnutls-peer-status' (if Emacs is built with GnuTLS support).
938 935
939** Tramp 936** Tramp
940 937
@@ -948,21 +945,21 @@ busyboxes.
948 945
949+++ 946+++
950*** Method-specific parameters can be overwritten now with variable 947*** Method-specific parameters can be overwritten now with variable
951`tramp-connection-properties'. 948'tramp-connection-properties'.
952 949
953--- 950---
954*** Handler for `file-notify-valid-p' for remote machines that support 951*** Handler for 'file-notify-valid-p' for remote machines that support
955filesystem notifications. 952filesystem notifications.
956 953
957** SQL mode 954** SQL mode
958 955
959--- 956---
960*** New user variable `sql-default-directory' enables remote 957*** New user variable 'sql-default-directory' enables remote
961connections using Tramp. 958connections using Tramp.
962 959
963--- 960---
964*** New command `sql-send-line-and-next'. 961*** New command 'sql-send-line-and-next'.
965This command, bound to `C-c C-n' by default, sends the current line to 962This command, bound to 'C-c C-n' by default, sends the current line to
966the SQL process and advances to the next line, skipping whitespace and 963the SQL process and advances to the next line, skipping whitespace and
967comments. 964comments.
968 965
@@ -972,7 +969,7 @@ comments.
972** VC and related modes 969** VC and related modes
973 970
974+++ 971+++
975*** Basic push support, via `vc-push', bound to `C-x v P'. 972*** Basic push support, via 'vc-push', bound to 'C-x v P'.
976Implemented for Bzr, Git, Hg. As part of this change, the pre-existing 973Implemented for Bzr, Git, Hg. As part of this change, the pre-existing
977(undocumented) command vc-hg-push now behaves slightly differently. 974(undocumented) command vc-hg-push now behaves slightly differently.
978 975
@@ -980,36 +977,36 @@ Implemented for Bzr, Git, Hg. As part of this change, the pre-existing
980*** The new command vc-region-history shows the log+diff of the active region. 977*** The new command vc-region-history shows the log+diff of the active region.
981 978
982+++ 979+++
983*** You can refresh the VC state of a file buffer with `M-x vc-refresh-state'. 980*** You can refresh the VC state of a file buffer with 'M-x vc-refresh-state'.
984This command is useful when you perform version control commands 981This command is useful when you perform version control commands
985outside Emacs (e.g., from the shell prompt), or if you switch the VC 982outside Emacs (e.g., from the shell prompt), or if you switch the VC
986back-end for the buffer's file, or remove it from version control. 983back-end for the buffer's file, or remove it from version control.
987 984
988+++ 985+++
989*** New option `vc-annotate-background-mode' controls whether 986*** New option 'vc-annotate-background-mode' controls whether
990the color range from `vc-annotate-color-map' is applied to the 987the color range from 'vc-annotate-color-map' is applied to the
991background or to the foreground. 988background or to the foreground.
992 989
993+++ 990+++
994*** `compare-windows' now compares text with the most recently selected window 991*** 'compare-windows' now compares text with the most recently selected window
995instead of the next window. If you want the previous behavior of 992instead of the next window. If you want the previous behavior of
996comparing with the next window, customize the new option 993comparing with the next window, customize the new option
997`compare-windows-get-window-function' to the value 994'compare-windows-get-window-function' to the value
998`compare-windows-get-next-window'. 995'compare-windows-get-next-window'.
999 996
1000--- 997---
1001*** Two new faces `compare-windows-removed' and `compare-windows-added' 998*** Two new faces 'compare-windows-removed' and 'compare-windows-added'
1002replace the face `compare-windows', which is now an obsolete alias for 999replace the face 'compare-windows', which is now an obsolete alias for
1003`compare-windows-added'. 1000'compare-windows-added'.
1004 1001
1005--- 1002---
1006*** The VC state indicator in the mode line now has different faces 1003*** The VC state indicator in the mode line now has different faces
1007corresponding to each of the possible states. See the `vc-faces' 1004corresponding to each of the possible states. See the 'vc-faces'
1008customization group. 1005customization group.
1009 1006
1010--- 1007---
1011*** `log-edit-insert-changelog' converts "(tiny change)" to 1008*** 'log-edit-insert-changelog' converts "(tiny change)" to
1012"Copyright-paperwork-exempt: yes". Set `log-edit-rewrite-tiny-change' 1009"Copyright-paperwork-exempt: yes". Set 'log-edit-rewrite-tiny-change'
1013nil to disable this. 1010nil to disable this.
1014 1011
1015--- 1012---
@@ -1032,52 +1029,52 @@ macro argument expansion, interactive macro evaluation and automatic
1032scanning of #define'd symbols. 1029scanning of #define'd symbols.
1033 1030
1034--- 1031---
1035*** New command `hif-evaluate-macro', bound to `C-c @ e', displays the 1032*** New command 'hif-evaluate-macro', bound to 'C-c @ e', displays the
1036result of evaluating a macro. 1033result of evaluating a macro.
1037 1034
1038--- 1035---
1039*** New command `hif-clear-all-ifdef-define', bound to `C-c @ C', clears 1036*** New command 'hif-clear-all-ifdef-define', bound to 'C-c @ C', clears
1040all defined symbols in `hide-ifdef-env'. 1037all defined symbols in 'hide-ifdef-env'.
1041 1038
1042--- 1039---
1043*** New custom variable `hide-ifdef-header-regexp' to define C/C++ header 1040*** New custom variable 'hide-ifdef-header-regexp' to define C/C++ header
1044file name patterns. Defaults to files whose extension is one of `.h', 1041file name patterns. Defaults to files whose extension is one of '.h',
1045`.hh', `.hpp', `.hxx', or `.h++', matched case-insensitively. 1042'.hh', '.hpp', '.hxx', or '.h++', matched case-insensitively.
1046 1043
1047--- 1044---
1048*** New custom variable `hide-ifdef-expand-reinclusion-protection' to prevent 1045*** New custom variable 'hide-ifdef-expand-reinclusion-protection' to prevent
1049reinclusion protected (a.k.a. "idempotent") header files from being hidden. 1046reinclusion protected (a.k.a. "idempotent") header files from being hidden.
1050(This could happen when an idempotent header file is visited again, 1047(This could happen when an idempotent header file is visited again,
1051when its guard symbol is already defined.) Defaults to `t'. 1048when its guard symbol is already defined.) Defaults to 't'.
1052 1049
1053--- 1050---
1054*** New custom variable `hide-ifdef-exclude-define-regexp' to define symbol 1051*** New custom variable 'hide-ifdef-exclude-define-regexp' to define symbol
1055name patterns (e.g. all "FOR_DOXYGEN_ONLY_*") to be ignored when 1052name patterns (e.g. all "FOR_DOXYGEN_ONLY_*") to be ignored when
1056looking for macro definitions. By default, no symbols are ignored. 1053looking for macro definitions. By default, no symbols are ignored.
1057 1054
1058** TeX mode 1055** TeX mode
1059 1056
1060+++ 1057+++
1061*** New custom variable `tex-print-file-extension' to help users who 1058*** New custom variable 'tex-print-file-extension' to help users who
1062use PDF instead of DVI. 1059use PDF instead of DVI.
1063 1060
1064+++ 1061+++
1065*** TeX mode now supports Prettify Symbols mode. When enabling 1062*** TeX mode now supports Prettify Symbols mode. When enabling
1066`prettify-symbols-mode' in a tex-mode buffer, \alpha ... \omega, and 1063'prettify-symbols-mode' in a tex-mode buffer, \alpha ... \omega, and
1067many other math macros are displayed using unicode characters. 1064many other math macros are displayed using unicode characters.
1068 1065
1069+++ 1066+++
1070** New `big-indent' style in `whitespace-mode' highlights deep indentation. 1067** New 'big-indent' style in 'whitespace-mode' highlights deep indentation.
1071By default, 32 consecutive spaces or four consecutive TABs are 1068By default, 32 consecutive spaces or four consecutive TABs are
1072considered to be too deep, but the new variable 1069considered to be too deep, but the new variable
1073`whitespace-big-indent-regexp' can be customized to change that. 1070'whitespace-big-indent-regexp' can be customized to change that.
1074 1071
1075--- 1072---
1076** New options in `tildify-mode'. 1073** New options in 'tildify-mode'.
1077New options `tildify-space-string', `tildify-pattern', and 1074New options 'tildify-space-string', 'tildify-pattern', and
1078`tildify-foreach-region-function' variables make 1075'tildify-foreach-region-function' variables make
1079`tildify-string-alist', `tildify-pattern-alist', and 1076'tildify-string-alist', 'tildify-pattern-alist', and
1080`tildify-ignored-environments-alist' variables (as well as a few 1077'tildify-ignored-environments-alist' variables (as well as a few
1081helper functions) obsolete. 1078helper functions) obsolete.
1082 1079
1083+++ 1080+++
@@ -1090,41 +1087,41 @@ to a definition. It supersedes and obsoletes many Etags commands,
1090while still using the etags.el code that reads the TAGS tables as one 1087while still using the etags.el code that reads the TAGS tables as one
1091of its back-ends. 1088of its back-ends.
1092 1089
1093The command `xref-find-definitions' replaces `find-tag' and provides 1090The command 'xref-find-definitions' replaces 'find-tag' and provides
1094an interface to pick one definition among several. 1091an interface to pick one definition among several.
1095`tags-loop-continue' is now unbound. `xref-pop-marker-stack' replaces 1092'tags-loop-continue' is now unbound. 'xref-pop-marker-stack' replaces
1096`pop-tag-mark', but has a keybinding (`M-,') different from the one 1093'pop-tag-mark', but has a keybinding ('M-,') different from the one
1097`pop-tag-mark' used. 1094'pop-tag-mark' used.
1098 1095
1099`xref-find-definitions-other-window' replaces `find-tag-other-window'. 1096'xref-find-definitions-other-window' replaces 'find-tag-other-window'.
1100`xref-find-definitions-other-frame' replaces `find-tag-other-frame'. 1097'xref-find-definitions-other-frame' replaces 'find-tag-other-frame'.
1101`xref-find-apropos' replaces `find-tag-regexp'. 1098'xref-find-apropos' replaces 'find-tag-regexp'.
1102 1099
1103As a result of this, the following commands are now obsolete: 1100As a result of this, the following commands are now obsolete:
1104`find-tag-other-window', `find-tag-other-frame', `find-tag-regexp', 1101'find-tag-other-window', 'find-tag-other-frame', 'find-tag-regexp',
1105`tags-apropos'. 1102'tags-apropos'.
1106 1103
1107`tags-loop-continue' is not obsolete because it's still useful in 1104'tags-loop-continue' is not obsolete because it's still useful in
1108`tags-search' and `tags-query-replace', for which there are no direct 1105'tags-search' and 'tags-query-replace', for which there are no direct
1109replacements yet. 1106replacements yet.
1110 1107
1111+++ 1108+++
1112*** Variants of `tags-search' and `tags-query-replace' in Dired were also 1109*** Variants of 'tags-search' and 'tags-query-replace' in Dired were also
1113replaced by xref-style commands, see the "Dired" section below. 1110replaced by xref-style commands, see the "Dired" section below.
1114 1111
1115+++ 1112+++
1116*** New variables 1113*** New variables
1117 1114
1118`find-tag-marker-ring-length' is now an obsolete alias for 1115'find-tag-marker-ring-length' is now an obsolete alias for
1119`xref-marker-ring-length'. `find-tag-marker-ring' is now an obsolete 1116'xref-marker-ring-length'. 'find-tag-marker-ring' is now an obsolete
1120alias for a private variable. `xref-push-marker-stack' and 1117alias for a private variable. 'xref-push-marker-stack' and
1121`xref-pop-marker-stack' should be used instead to manipulate the stack 1118'xref-pop-marker-stack' should be used instead to manipulate the stack
1122of searches for definitions. 1119of searches for definitions.
1123 1120
1124--- 1121---
1125*** `xref-find-definitions' and `describe-function' now display 1122*** 'xref-find-definitions' and 'describe-function' now display
1126information about mode local overrides (defined by cedet/mode-local.el 1123information about mode local overrides (defined by cedet/mode-local.el
1127`define-overloadable-function' `define-mode-local-overrides'). 1124'define-overloadable-function' 'define-mode-local-overrides').
1128 1125
1129The framework's Lisp API is still experimental and can change in major, 1126The framework's Lisp API is still experimental and can change in major,
1130backward-incompatible ways. 1127backward-incompatible ways.
@@ -1134,7 +1131,7 @@ backward-incompatible ways.
1134 1131
1135The new package Project provides generic infrastructure for dealing 1132The new package Project provides generic infrastructure for dealing
1136with projects. The main commands included in it are 1133with projects. The main commands included in it are
1137`project-find-file' and `project-find-regexp'. 1134'project-find-file' and 'project-find-regexp'.
1138 1135
1139The Lisp API of this package is still experimental. 1136The Lisp API of this package is still experimental.
1140 1137
@@ -1159,27 +1156,27 @@ rewritten.
1159There have also been customization changes. 1156There have also been customization changes.
1160 1157
1161+++ 1158+++
1162*** New custom variable `eudc-server-hotlist' to allow specifying 1159*** New custom variable 'eudc-server-hotlist' to allow specifying
1163multiple EUDC servers in init file. 1160multiple EUDC servers in init file.
1164 1161
1165+++ 1162+++
1166*** Custom variable `eudc-inline-query-format' defaults to completing 1163*** Custom variable 'eudc-inline-query-format' defaults to completing
1167on email and firstname instead of surname. 1164on email and firstname instead of surname.
1168 1165
1169--- 1166---
1170*** Custom variable `eudc-expansion-overwrites-query' defaults to nil 1167*** Custom variable 'eudc-expansion-overwrites-query' defaults to nil
1171to avoid interfering with the kill ring. 1168to avoid interfering with the kill ring.
1172 1169
1173+++ 1170+++
1174*** Custom variable `eudc-inline-expansion-format' defaults to 1171*** Custom variable 'eudc-inline-expansion-format' defaults to
1175"Firstname Surname <mail-address>". 1172"Firstname Surname <mail-address>".
1176 1173
1177+++ 1174+++
1178*** Custom variable `eudc-options-file' defaults to 1175*** Custom variable 'eudc-options-file' defaults to
1179"~/.emacs.d/eudc-options". 1176"~/.emacs.d/eudc-options".
1180 1177
1181--- 1178---
1182*** New custom variable `ldap-ldapsearch-password-prompt-regexp' to 1179*** New custom variable 'ldap-ldapsearch-password-prompt-regexp' to
1183allow overriding the regular expression that recognizes the ldapsearch 1180allow overriding the regular expression that recognizes the ldapsearch
1184command line's password prompt. 1181command line's password prompt.
1185 1182
@@ -1192,24 +1189,24 @@ EUDC's PH backend (eudcb-ph.el) is obsolete.
1192** Eshell 1189** Eshell
1193 1190
1194+++ 1191+++
1195*** The new built-in command `clear' can scroll window contents out of sight. 1192*** The new built-in command 'clear' can scroll window contents out of sight.
1196If provided with an optional non-nil argument, the scrollback contents will be cleared. 1193If provided with an optional non-nil argument, the scrollback contents will be cleared.
1197 1194
1198+++ 1195+++
1199*** New buffer syntax '#<buffer-name>', which is equivalent to 1196*** New buffer syntax '#<buffer-name>', which is equivalent to
1200'#<buffer buffer-name>'. This shorthand makes interacting with 1197'#<buffer buffer-name>'. This shorthand makes interacting with
1201buffers from eshell more convenient. Custom variable 1198buffers from eshell more convenient. Custom variable
1202`eshell-buffer-shorthand', which has been broken for a while, has been 1199'eshell-buffer-shorthand', which has been broken for a while, has been
1203removed. 1200removed.
1204 1201
1205+++ 1202+++
1206*** By default, eshell "visual" program buffers (created by 1203*** By default, eshell "visual" program buffers (created by
1207`eshell-visual-commands' and similar custom vars) are no longer killed 1204'eshell-visual-commands' and similar custom vars) are no longer killed
1208when their processes die. This fixes issues with short-lived commands 1205when their processes die. This fixes issues with short-lived commands
1209and makes visual programs more useful in general. For example, if 1206and makes visual programs more useful in general. For example, if
1210"git log" is a visual command, it will always show the visual command 1207"git log" is a visual command, it will always show the visual command
1211buffer, even if the "git log" process dies. For the old behavior, 1208buffer, even if the "git log" process dies. For the old behavior,
1212make the new option `eshell-destroy-buffer-when-process-dies' non-nil. 1209make the new option 'eshell-destroy-buffer-when-process-dies' non-nil.
1213 1210
1214** Browse-url 1211** Browse-url
1215 1212
@@ -1223,7 +1220,7 @@ make the new option `eshell-destroy-buffer-when-process-dies' non-nil.
1223*** Support for several ancient browsers is now officially obsolete. 1220*** Support for several ancient browsers is now officially obsolete.
1224 1221
1225+++ 1222+++
1226** tar-mode: new `tar-new-entry' command, allowing for new members to 1223** tar-mode: new 'tar-new-entry' command, allowing for new members to
1227be added to the archive. 1224be added to the archive.
1228 1225
1229** Autorevert 1226** Autorevert
@@ -1233,7 +1230,7 @@ be added to the archive.
1233Emacs is compiled with file notification support. 1230Emacs is compiled with file notification support.
1234 1231
1235--- 1232---
1236*** `auto-revert-use-notify' is set to nil in `global-auto-revert-mode'. 1233*** 'auto-revert-use-notify' is set to nil in 'global-auto-revert-mode'.
1237See <http://debbugs.gnu.org/22814>. 1234See <http://debbugs.gnu.org/22814>.
1238 1235
1239** File Notifications 1236** File Notifications
@@ -1242,46 +1239,46 @@ See <http://debbugs.gnu.org/22814>.
1242*** The kqueue library is integrated for *BSD and Mac OS X machines. 1239*** The kqueue library is integrated for *BSD and Mac OS X machines.
1243 1240
1244+++ 1241+++
1245*** The new event `stopped' signals, that a file notification watch is 1242*** The new event 'stopped' signals, that a file notification watch is
1246not active any longer. 1243not active any longer.
1247 1244
1248+++ 1245+++
1249*** The new function `file-notify-valid-p' checks, whether a file 1246*** The new function 'file-notify-valid-p' checks, whether a file
1250notification descriptor still corresponds to an activate watch. 1247notification descriptor still corresponds to an activate watch.
1251 1248
1252** Dired 1249** Dired
1253 1250
1254+++ 1251+++
1255*** The command `dired-do-compress' bound to `Z' now can compress 1252*** The command 'dired-do-compress' bound to 'Z' now can compress
1256directories and decompress zip files. 1253directories and decompress zip files.
1257 1254
1258+++ 1255+++
1259*** New command `dired-do-compress-to' bound to `c' can be used to 1256*** New command 'dired-do-compress-to' bound to 'c' can be used to
1260compress many marked files into a single named archive. The 1257compress many marked files into a single named archive. The
1261compression command is determined from the new 1258compression command is determined from the new
1262`dired-compress-files-alist' variable. 1259'dired-compress-files-alist' variable.
1263 1260
1264+++ 1261+++
1265*** New user interface for the `A' and `Q' commands. 1262*** New user interface for the 'A' and 'Q' commands.
1266These keys, now bound to `dired-do-find-regexp' and 1263These keys, now bound to 'dired-do-find-regexp' and
1267`dired-do-find-regexp-and-replace', work similarly to `xref-find-apropos' 1264'dired-do-find-regexp-and-replace', work similarly to 'xref-find-apropos'
1268and `xref-query-replace-in-results': they present the matches 1265and 'xref-query-replace-in-results': they present the matches
1269in the `*xref*' buffer and let you move through the matches. No need 1266in the '*xref*' buffer and let you move through the matches. No need
1270to use `tags-loop-continue' to resume the search or replace loop. The 1267to use 'tags-loop-continue' to resume the search or replace loop. The
1271previous commands, `dired-do-search' and 1268previous commands, 'dired-do-search' and
1272`dired-do-query-replace-regexp', are still available, but not bound to 1269'dired-do-query-replace-regexp', are still available, but not bound to
1273keys; rebind `A' and `Q' to invoke them if you want the old behavior 1270keys; rebind 'A' and 'Q' to invoke them if you want the old behavior
1274back. We intend to obsolete the old commands in a future release. 1271back. We intend to obsolete the old commands in a future release.
1275 1272
1276** Tabulated List Mode 1273** Tabulated List Mode
1277 1274
1278+++ 1275+++
1279*** It is now safe for a mode that derives `tabulated-list-mode' to not 1276*** It is now safe for a mode that derives 'tabulated-list-mode' to not
1280call `tabulated-list-init-header', in which case it will have no 1277call 'tabulated-list-init-header', in which case it will have no
1281header. 1278header.
1282 1279
1283+++ 1280+++
1284*** `tabulated-list-print' takes a second optional argument, update, 1281*** 'tabulated-list-print' takes a second optional argument, update,
1285which specifies an alternative printing method which is faster when 1282which specifies an alternative printing method which is faster when
1286few or no entries have changed. 1283few or no entries have changed.
1287 1284
@@ -1307,7 +1304,7 @@ configuration with "gpgconf --reload gpg-agent".
1307 1304
1308+++ 1305+++
1309** cl-generic.el provides CLOS-style multiple-dispatch generic functions. 1306** cl-generic.el provides CLOS-style multiple-dispatch generic functions.
1310The main entry points are `cl-defgeneric' and `cl-defmethod'. See the 1307The main entry points are 'cl-defgeneric' and 'cl-defmethod'. See the
1311node "Generic Functions" in the Emacs Lisp manual for more details. 1308node "Generic Functions" in the Emacs Lisp manual for more details.
1312 1309
1313--- 1310---
@@ -1319,25 +1316,25 @@ SCSS (Sassy CSS) files.
1319let-bind the values stored in an alist. 1316let-bind the values stored in an alist.
1320 1317
1321--- 1318---
1322** `tildify-mode' allows automatic insertion of hard spaces as one 1319** 'tildify-mode' allows automatic insertion of hard spaces as one
1323types the text. Breaking line after a single-character words is 1320types the text. Breaking line after a single-character words is
1324forbidden by Czech and Polish typography (and may be discouraged in 1321forbidden by Czech and Polish typography (and may be discouraged in
1325other languages), so `auto-tildify-mode' makes it easier to create 1322other languages), so 'auto-tildify-mode' makes it easier to create
1326a typographically-correct documents. 1323a typographically-correct documents.
1327 1324
1328--- 1325---
1329** The `seq' library adds sequence manipulation functions and macros 1326** The 'seq' library adds sequence manipulation functions and macros
1330that complement basic functions provided by subr.el. All functions 1327that complement basic functions provided by subr.el. All functions
1331are prefixed with `seq-' and work on lists, strings and vectors. 1328are prefixed with 'seq-' and work on lists, strings and vectors.
1332`pcase' accepts a new Upattern `seq'. 1329'pcase' accepts a new Upattern 'seq'.
1333 1330
1334--- 1331---
1335** The `map' library provides map-manipulation functions that work on 1332** The 'map' library provides map-manipulation functions that work on
1336alists, hash-table and arrays. All functions are prefixed with 1333alists, hash-table and arrays. All functions are prefixed with
1337`map-'. `pcase' accepts a new UPattern `map'. 1334'map-'. 'pcase' accepts a new UPattern 'map'.
1338 1335
1339--- 1336---
1340** The `thunk' library provides functions and macros to control the 1337** The 'thunk' library provides functions and macros to control the
1341evaluation of forms. 1338evaluation of forms.
1342 1339
1343--- 1340---
@@ -1348,76 +1345,77 @@ support for JSX, an XML-like syntax extension to ECMAScript.
1348* Incompatible Lisp Changes in Emacs 25.1 1345* Incompatible Lisp Changes in Emacs 25.1
1349 1346
1350--- 1347---
1351** `setq' and `setf' must now be called with an even number of 1348** 'setq' and 'setf' must now be called with an even number of
1352arguments. The earlier behavior of silently supplying a nil to the 1349arguments. The earlier behavior of silently supplying a nil to the
1353last variable when there was an odd number of arguments has been 1350last variable when there was an odd number of arguments has been
1354eliminated. 1351eliminated.
1355 1352
1356+++ 1353+++
1357** `syntax-begin-function' is declared obsolete. 1354** 'syntax-begin-function' is declared obsolete.
1358Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN 1355Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN
1359slot in font-lock-defaults. 1356slot in font-lock-defaults.
1360 1357
1361+++ 1358+++
1362** The new implementation of Subword mode affects word movement everywhere. 1359** The new implementation of Subword mode affects word movement everywhere.
1363When Subword mode is turned on, `forward-word', `backward-word', and 1360When Subword mode is turned on, 'forward-word', 'backward-word', and
1364everything that uses them will move by sub-words, effectively 1361everything that uses them will move by sub-words, effectively
1365overriding the buffer's syntax table. Lisp programs that shouldn't be 1362overriding the buffer's syntax table. Lisp programs that shouldn't be
1366affected by Subword mode should call the new functions 1363affected by Subword mode should call the new functions
1367`forward-word-strictly' and `backward-word-strictly' instead. 1364'forward-word-strictly' and 'backward-word-strictly' instead.
1368 1365
1369+++ 1366+++
1370** `package-initialize' now sets `package-enable-at-startup' to nil if 1367** 'package-initialize' now sets 'package-enable-at-startup' to nil if
1371called during startup. Users who call this function in their init 1368called during startup. Users who call this function in their init
1372file and still expect it to be run after startup should set 1369file and still expect it to be run after startup should set
1373`package-enable-at-startup' to t after the call to 1370'package-enable-at-startup' to t after the call to
1374`package-initialize'. 1371'package-initialize'.
1375 1372
1376--- 1373---
1377** `:global' minor mode use `setq-default' rather than `setq'. 1374** ':global' minor mode use 'setq-default' rather than 'setq'.
1378This means that you can't use `make-local-variable' and expect them to 1375This means that you can't use 'make-local-variable' and expect them to
1379"magically" become buffer-local. 1376"magically" become buffer-local.
1380 1377
1381+++ 1378+++
1382** `track-mouse' no longer freezes the shape of the mouse pointer. 1379** 'track-mouse' no longer freezes the shape of the mouse pointer.
1383The `track-mouse' form no longer refrains from changing the shape of 1380The 'track-mouse' form no longer refrains from changing the shape of
1384the mouse pointer for the entire time the body of that form is 1381the mouse pointer for the entire time the body of that form is
1385executed. Lisp programs that use `track-mouse' for dragging across 1382executed. Lisp programs that use 'track-mouse' for dragging across
1386large portions of the Emacs display, and want to avoid changes in the 1383large portions of the Emacs display, and want to avoid changes in the
1387pointer shape during dragging, should bind the variable `track-mouse' 1384pointer shape during dragging, should bind the variable 'track-mouse'
1388to the special value `dragging' in the body of the form. 1385to the special value 'dragging' in the body of the form.
1389 1386
1390--- 1387---
1391** The optional `predicate' argument of `lisp-complete-symbol' no longer 1388** The optional 'predicate' argument of 'lisp-complete-symbol' no longer
1392has any effect. (This change was made in Emacs 24.4 but was not 1389has any effect. (This change was made in Emacs 24.4 but was not
1393advertised at the time.) 1390advertised at the time.)
1394 1391
1395+++ 1392+++
1396** `indirect-function' does not signal `void-function' any more. 1393** 'indirect-function' does not signal 'void-function' any more.
1397This is mostly a bug-fix, since this change was missed back in 24.4 when 1394This is mostly a bug-fix, since this change was missed back in 24.4 when
1398symbol-function was changed not to signal `void-function' any more. 1395symbol-function was changed not to signal 'void-function' any more.
1399 1396
1400+++ 1397+++
1401*** As a consequence, the second arg of `indirect-function' is now obsolete. 1398*** As a consequence, the second arg of 'indirect-function' is now obsolete.
1402 1399
1403+++ 1400+++
1404** Comint, term, and compile do not set the EMACS env var any more. 1401** Although comint, term, and compile still set the EMACS variable,
1402this is now considered deprecated and will be removed in a future release.
1405Use the INSIDE_EMACS environment variable instead. 1403Use the INSIDE_EMACS environment variable instead.
1406 1404
1407+++ 1405+++
1408** `save-excursion' does not save&restore the mark any more. 1406** 'save-excursion' does not save&restore the mark any more.
1409Use `save-mark-and-excursion' if you want the old behavior. 1407Use 'save-mark-and-excursion' if you want the old behavior.
1410 1408
1411+++ 1409+++
1412** `read-buffer' and `read-buffer-function' can now be called with a 4th 1410** 'read-buffer' and 'read-buffer-function' can now be called with a 4th
1413argument (`predicate'). 1411argument ('predicate').
1414 1412
1415+++ 1413+++
1416** `completion-table-dynamic' by default stays in the minibuffer. 1414** 'completion-table-dynamic' by default stays in the minibuffer.
1417The minibuffer will be the current buffer when the function is called. 1415The minibuffer will be the current buffer when the function is called.
1418If you want the old behavior of calling the function in the buffer 1416If you want the old behavior of calling the function in the buffer
1419from which the minibuffer was entered, use the new argument 1417from which the minibuffer was entered, use the new argument
1420`switch-buffer' to `completion-table-dynamic'. 1418'switch-buffer' to 'completion-table-dynamic'.
1421 1419
1422--- 1420---
1423** window-configurations no longer record the buffers' marks. 1421** window-configurations no longer record the buffers' marks.
@@ -1430,11 +1428,11 @@ active region handling.
1430** deactivate-mark is now buffer-local. 1428** deactivate-mark is now buffer-local.
1431 1429
1432+++ 1430+++
1433** `cl-the' now asserts that its argument is of the given type. 1431** 'cl-the' now asserts that its argument is of the given type.
1434 1432
1435+++ 1433+++
1436** `process-running-child-p' may now return a numeric process 1434** 'process-running-child-p' may now return a numeric process
1437group ID instead of `t'. 1435group ID instead of 't'.
1438 1436
1439+++ 1437+++
1440** Mouse click events on mode line or header line no longer include 1438** Mouse click events on mode line or header line no longer include
@@ -1453,24 +1451,24 @@ denied" instead of "permission denied". The old behavior was problematic
1453in languages like German where downcasing rules depend on grammar. 1451in languages like German where downcasing rules depend on grammar.
1454 1452
1455+++ 1453+++
1456** New variable text-quoting-style to control how Emacs translates quotes. 1454** New variable 'text-quoting-style' to control how Emacs translates quotes.
1457Set it to curve for curved single quotes ‘like this’, to straight 1455Set it to 'curve' for curved single quotes, to 'straight' for straight
1458for straight apostrophes 'like this', and to grave for grave accent 1456apostrophes, and to 'grave' for grave accent and apostrophe. The
1459and apostrophe `like this'. The default value nil acts like curve 1457default value nil acts like 'curve' if curved single quotes are
1460if curved single quotes are displayable, and like grave otherwise. 1458displayable, and like 'grave' otherwise. The new variable affects
1461The new variable affects display of diagnostics and help, but not of info. 1459display of diagnostics and help, but not of info.
1462 1460
1463+++ 1461+++
1464** substitute-command-keys now replaces quotes. 1462** substitute-command-keys now replaces quotes.
1465That is, it converts documentation strings quoting style as per the 1463That is, it converts documentation strings' quoting style as per the
1466value of text-quoting-style. Doc strings in source code can use 1464value of 'text-quoting-style'. Doc strings in source code can use
1467either curved single quotes or grave accents and apostrophes. As 1465either curved single quotes or grave accents and apostrophes. As
1468before, characters preceded by \= are output as-is. 1466before, characters preceded by \= are output as-is.
1469 1467
1470+++ 1468+++
1471** Message-issuing functions error, message, etc. now convert quotes. 1469** Message-issuing functions 'error', 'message', etc. now convert quotes.
1472They use the new format-message function instead of plain format, 1470They use the new 'format-message' function instead of plain 'format',
1473so that they now follow user preference as per text-quoting-style 1471so that they now follow user preference as per 'text-quoting-style'
1474when processing curved single quotes, grave accents, and apostrophes 1472when processing curved single quotes, grave accents, and apostrophes
1475in their format argument. 1473in their format argument.
1476 1474
@@ -1478,7 +1476,7 @@ in their format argument.
1478** The character classes [:alpha:] and [:alnum:] in regular expressions 1476** The character classes [:alpha:] and [:alnum:] in regular expressions
1479now match multibyte characters using Unicode character properties. 1477now match multibyte characters using Unicode character properties.
1480If you want the old behavior where they matched any character with 1478If you want the old behavior where they matched any character with
1481word syntax, use `\sw' instead. 1479word syntax, use '\sw' instead.
1482 1480
1483+++ 1481+++
1484** The character classes [:graph:] and [:print:] in regular expressions 1482** The character classes [:graph:] and [:print:] in regular expressions
@@ -1489,105 +1487,105 @@ unassigned codepoints are now rejected. If you want the old behavior,
1489use [:multibyte:] instead. 1487use [:multibyte:] instead.
1490 1488
1491+++ 1489+++
1492** The `diff' command uses the unified format now. To restore the old 1490** The 'diff' command uses the unified format now. To restore the old
1493behavior, set `diff-switches' to `-c'. 1491behavior, set 'diff-switches' to '-c'.
1494 1492
1495--- 1493---
1496** `grep-template' and `grep-find-template' values don't include the 1494** 'grep-template' and 'grep-find-template' values don't include the
1497--color argument anymore. It's added at the <C> place holder position 1495--color argument anymore. It's added at the <C> place holder position
1498dynamically. Any third-party code that changes these templates should 1496dynamically. Any third-party code that changes these templates should
1499be updated accordingly. 1497be updated accordingly.
1500 1498
1501+++ 1499+++
1502** (/ N) is now equivalent to (/ 1 N) rather than to (/ N 1). 1500** '(/ N)' is now equivalent to '(/ 1 N)' rather than to '(/ N 1)'.
1503The new behavior is compatible with Common Lisp and with XEmacs. 1501The new behavior is compatible with Common Lisp and with XEmacs.
1504This change does not affect Lisp code intended to be portable to 1502This change does not affect Lisp code intended to be portable to
1505Emacs 24.2 and earlier, which did not support unary /. 1503Emacs 24.2 and earlier, which did not support unary '/'.
1506 1504
1507+++ 1505+++
1508** The `default-directory' value doesn't have to end slash. To make 1506** The 'default-directory' value doesn't have to end slash. To make
1509that happen, `unhandled-file-name-directory' now defaults to calling 1507that happen, 'unhandled-file-name-directory' now defaults to calling
1510`file-name-as-directory'. 1508'file-name-as-directory'.
1511 1509
1512 1510
1513* Lisp Changes in Emacs 25.1 1511* Lisp Changes in Emacs 25.1
1514 1512
1515** pcase 1513** pcase
1516+++ 1514+++
1517*** New UPatterns `quote', `app'. 1515*** New UPatterns 'quote', 'app'.
1518+++ 1516+++
1519*** New UPatterns can be defined with `pcase-defmacro'. 1517*** New UPatterns can be defined with 'pcase-defmacro'.
1520+++ 1518+++
1521*** New vector QPattern. 1519*** New vector QPattern.
1522 1520
1523--- 1521---
1524** syntax-propertize is now automatically called on-demand during forward 1522** syntax-propertize is now automatically called on-demand during forward
1525parsing functions like `forward-sexp'. 1523parsing functions like 'forward-sexp'.
1526 1524
1527+++ 1525+++
1528** New hooks `prefix-command-echo-keystrokes-functions' and 1526** New hooks 'prefix-command-echo-keystrokes-functions' and
1529`prefix-command-preserve-state-hook' allow the definition of prefix 1527'prefix-command-preserve-state-hook' allow the definition of prefix
1530commands other than the predefined `C-u'. 1528commands other than the predefined 'C-u'.
1531 1529
1532+++ 1530+++
1533** New functions `filepos-to-bufferpos' and `bufferpos-to-filepos'. 1531** New functions 'filepos-to-bufferpos' and 'bufferpos-to-filepos'.
1534These allow conversion between buffer positions and the corresponding 1532These allow conversion between buffer positions and the corresponding
1535file byte offsets, given the file's encoding. 1533file byte offsets, given the file's encoding.
1536 1534
1537+++ 1535+++
1538** The default value of `load-read-function' is now `read'. 1536** The default value of 'load-read-function' is now 'read'.
1539Previously, the default value of `nil' implied using `read'. 1537Previously, the default value of 'nil' implied using 'read'.
1540 1538
1541+++ 1539+++
1542** New hook `pre-redisplay-functions'. 1540** New hook 'pre-redisplay-functions'.
1543It is a bit easier to use than `pre-redisplay-function'. 1541It is a bit easier to use than 'pre-redisplay-function'.
1544 1542
1545+++ 1543+++
1546** The second arg of `looking-back' should always be provided explicitly. 1544** The second arg of 'looking-back' should always be provided explicitly.
1547Previously, it was an optional argument, now it's mandatory. 1545Previously, it was an optional argument, now it's mandatory.
1548 1546
1549+++ 1547+++
1550** Text properties `intangible', `point-entered', and `point-left' are obsolete. 1548** Text properties 'intangible', 'point-entered', and 'point-left' are obsolete.
1551Replaced by properties `cursor-intangible' and `cursor-sensor-functions', 1549Replaced by properties 'cursor-intangible' and 'cursor-sensor-functions',
1552implemented by the new `cursor-intangible-mode' and 1550implemented by the new 'cursor-intangible-mode' and
1553`cursor-sensor-mode' minor modes. 1551'cursor-sensor-mode' minor modes.
1554 1552
1555+++ 1553+++
1556** `inhibit-point-motion-hooks' now defaults to `t' and is obsolete. 1554** 'inhibit-point-motion-hooks' now defaults to 't' and is obsolete.
1557Use the new minor modes `cursor-intangible-mode' and 1555Use the new minor modes 'cursor-intangible-mode' and
1558`cursor-sensor-mode' instead. 1556'cursor-sensor-mode' instead.
1559 1557
1560+++ 1558+++
1561** New process type `pipe', which can be used in combination with the 1559** New process type 'pipe', which can be used in combination with the
1562`:stderr' keyword of make-process to handle standard error output 1560':stderr' keyword of make-process to handle standard error output
1563of subprocess. 1561of subprocess.
1564 1562
1565+++ 1563+++
1566** New function `make-process' provides an alternative interface to 1564** New function 'make-process' provides an alternative interface to
1567`start-process'. It allows programs to set process parameters such as 1565'start-process'. It allows programs to set process parameters such as
1568process filter, sentinel, etc., through keyword arguments (similar to 1566process filter, sentinel, etc., through keyword arguments (similar to
1569`make-network-process'). 1567'make-network-process').
1570 1568
1571+++ 1569+++
1572** A new function `directory-files-recursively' returns all matching 1570** A new function 'directory-files-recursively' returns all matching
1573files (recursively) under a directory. 1571files (recursively) under a directory.
1574 1572
1575+++ 1573+++
1576** New variable `inhibit-message', when bound to non-nil, inhibits 1574** New variable 'inhibit-message', when bound to non-nil, inhibits
1577`message' and related functions from displaying messages in the echo 1575'message' and related functions from displaying messages in the echo
1578area. The output is still logged to the *Messages* buffer. 1576area. The output is still logged to the *Messages* buffer.
1579 1577
1580+++ 1578+++
1581** A new text property `inhibit-read-only' can be used in read-only 1579** A new text property 'inhibit-read-only' can be used in read-only
1582buffers to allow certain parts of the text to be writable. 1580buffers to allow certain parts of the text to be writable.
1583 1581
1584+++ 1582+++
1585** A new variable `comment-end-can-be-escaped' is useful in languages 1583** A new variable 'comment-end-can-be-escaped' is useful in languages
1586 such as C and C++ where line comments with escaped newlines are 1584 such as C and C++ where line comments with escaped newlines are
1587 continued to the next line. 1585 continued to the next line.
1588 1586
1589+++ 1587+++
1590** New macro `define-advice'. 1588** New macro 'define-advice'.
1591 1589
1592+++ 1590+++
1593** Emacs Lisp now supports generators. 1591** Emacs Lisp now supports generators.
@@ -1607,7 +1605,7 @@ evaluated (and should return a string) when the closure is built.
1607** define-inline provides a new way to define inlinable functions. 1605** define-inline provides a new way to define inlinable functions.
1608 1606
1609+++ 1607+++
1610** New function `macroexpand-1' to perform a single step of macro expansion. 1608** New function 'macroexpand-1' to perform a single step of macro expansion.
1611 1609
1612+++ 1610+++
1613** Some "x-*" functions were obsoleted and/or renamed: 1611** Some "x-*" functions were obsoleted and/or renamed:
@@ -1619,18 +1617,18 @@ evaluated (and should return a string) when the closure is built.
1619*** x-set-selection is renamed to gui-set-selection 1617*** x-set-selection is renamed to gui-set-selection
1620 1618
1621+++ 1619+++
1622** New function `string-greaterp', which return the opposite result of 1620** New function 'string-greaterp', which return the opposite result of
1623`string-lessp'. 1621'string-lessp'.
1624 1622
1625+++ 1623+++
1626** The new functions `string-collate-lessp' and `string-collate-equalp' 1624** The new functions 'string-collate-lessp' and 'string-collate-equalp'
1627preserve the collation order as defined by the system's locale(1) 1625preserve the collation order as defined by the system's locale(1)
1628environment. For the time being this is implemented for modern POSIX 1626environment. For the time being this is implemented for modern POSIX
1629systems and for MS-Windows, for other systems they fall back to their 1627systems and for MS-Windows, for other systems they fall back to their
1630counterparts `string-lessp' and `string-equal'. 1628counterparts 'string-lessp' and 'string-equal'.
1631 1629
1632--- 1630---
1633*** The ls-lisp package uses `string-collate-lessp' to sort file names. 1631*** The ls-lisp package uses 'string-collate-lessp' to sort file names.
1634The effect is that, on systems that use ls-lisp for Dired, the default 1632The effect is that, on systems that use ls-lisp for Dired, the default
1635sort order of the files in Dired is now different from what it was in 1633sort order of the files in Dired is now different from what it was in
1636previous versions of Emacs. In particular, the file names are sorted 1634previous versions of Emacs. In particular, the file names are sorted
@@ -1638,10 +1636,10 @@ disregarding punctuation, accents, and diacritics, and letter case is
1638ignored. For example, files whose name begin with a period will no 1636ignored. For example, files whose name begin with a period will no
1639longer appear near the beginning of the directory listing. If you 1637longer appear near the beginning of the directory listing. If you
1640want the old, locale-independent sorting, customize the new option 1638want the old, locale-independent sorting, customize the new option
1641`ls-lisp-use-string-collate' to the nil value. 1639'ls-lisp-use-string-collate' to the nil value.
1642 1640
1643+++ 1641+++
1644*** The MS-Windows specific variable `w32-collate-ignore-punctuation', 1642*** The MS-Windows specific variable 'w32-collate-ignore-punctuation',
1645if set to a non-nil value, causes the above 2 functions to ignore 1643if set to a non-nil value, causes the above 2 functions to ignore
1646symbol and punctuation characters when collating strings. This 1644symbol and punctuation characters when collating strings. This
1647emulates the behavior of modern Posix platforms when the locale's 1645emulates the behavior of modern Posix platforms when the locale's
@@ -1649,111 +1647,111 @@ codeset is "UTF-8" (as in "en_US.UTF-8"). This is needed because
1649MS-Windows doesn't support UTF-8 as codeset in its locales. 1647MS-Windows doesn't support UTF-8 as codeset in its locales.
1650 1648
1651+++ 1649+++
1652** New function `alist-get', which is also a valid place (aka lvalue). 1650** New function 'alist-get', which is also a valid place (aka lvalue).
1653 1651
1654+++ 1652+++
1655** New function `funcall-interactively', which works like `funcall' 1653** New function 'funcall-interactively', which works like 'funcall'
1656but makes `called-interactively-p' treat the function as (you guessed it) 1654but makes 'called-interactively-p' treat the function as (you guessed it)
1657called interactively. 1655called interactively.
1658 1656
1659+++ 1657+++
1660** New function `function-put' to use instead of `put' for function properties. 1658** New function 'function-put' to use instead of 'put' for function properties.
1661 1659
1662+++ 1660+++
1663** The new function `bidi-find-overridden-directionality' allows you to 1661** The new function 'bidi-find-overridden-directionality' allows you to
1664find characters whose directionality was, perhaps maliciously, 1662find characters whose directionality was, perhaps maliciously,
1665overridden by directional override control characters. Lisp programs 1663overridden by directional override control characters. Lisp programs
1666can use this to detect potential phishing of URLs and other links that 1664can use this to detect potential phishing of URLs and other links that
1667exploits bidirectional display reordering. 1665exploits bidirectional display reordering.
1668 1666
1669+++ 1667+++
1670** The new function `buffer-substring-with-bidi-context' allows you to 1668** The new function 'buffer-substring-with-bidi-context' allows you to
1671copy a portion of a buffer into a different location while preserving 1669copy a portion of a buffer into a different location while preserving
1672the visual appearance both of the copied text and the text at 1670the visual appearance both of the copied text and the text at
1673destination, even when the copied text includes mixed bidirectional 1671destination, even when the copied text includes mixed bidirectional
1674text and directional control characters. 1672text and directional control characters.
1675 1673
1676+++ 1674+++
1677** New properties that can be specified with `declare': 1675** New properties that can be specified with 'declare':
1678*** (interactive-only INSTEAD), says to use INSTEAD for non-interactive use. 1676*** (interactive-only INSTEAD), says to use INSTEAD for non-interactive use.
1679*** (pure VAL), if VAL is non-nil, indicates the function is pure. 1677*** (pure VAL), if VAL is non-nil, indicates the function is pure.
1680*** (side-effect-free VAL), if VAL is non-nil, indicates the function does not 1678*** (side-effect-free VAL), if VAL is non-nil, indicates the function does not
1681have side effects. 1679have side effects.
1682 1680
1683+++ 1681+++
1684** New macro `with-file-modes', for evaluating expressions with default file 1682** New macro 'with-file-modes', for evaluating expressions with default file
1685permissions set to temporary values (e.g., for creating private files). 1683permissions set to temporary values (e.g., for creating private files).
1686 1684
1687+++ 1685+++
1688** You can access the slots of structures using `cl-struct-slot-value'. 1686** You can access the slots of structures using 'cl-struct-slot-value'.
1689 1687
1690+++ 1688+++
1691** Function `sort' can deal with vectors. 1689** Function 'sort' can deal with vectors.
1692 1690
1693--- 1691---
1694** Function `system-name' now returns an updated value if the current 1692** Function 'system-name' now returns an updated value if the current
1695system's name has changed or if the Emacs process has changed systems, 1693system's name has changed or if the Emacs process has changed systems,
1696and to avoid long waits it no longer consults DNS to canonicalize the 1694and to avoid long waits it no longer consults DNS to canonicalize the
1697name. The variable `system-name' is now obsolete. 1695name. The variable 'system-name' is now obsolete.
1698 1696
1699+++ 1697+++
1700** Function `write-region' no longer outputs "Wrote FILE" in batch mode. 1698** Function 'write-region' no longer outputs "Wrote FILE" in batch mode.
1701 1699
1702--- 1700---
1703** If `pwd' is called with a prefix argument, insert the current default 1701** If 'pwd' is called with a prefix argument, insert the current default
1704directory at point. 1702directory at point.
1705 1703
1706+++ 1704+++
1707** New functions return extended information about fonts and faces. 1705** New functions return extended information about fonts and faces.
1708 1706
1709+++ 1707+++
1710*** The function `font-info' now returns more details about a font. 1708*** The function 'font-info' now returns more details about a font.
1711In particular, it now returns the average width of the font's 1709In particular, it now returns the average width of the font's
1712characters, which can be used for geometry-related calculations. 1710characters, which can be used for geometry-related calculations.
1713 1711
1714+++ 1712+++
1715*** A new function `default-font-width' returns the average width of a 1713*** A new function 'default-font-width' returns the average width of a
1716character in the current buffer's default font. If the default face 1714character in the current buffer's default font. If the default face
1717is remapped (see `face-remapping-alist'), the value for the remapped 1715is remapped (see 'face-remapping-alist'), the value for the remapped
1718face is returned. This function complements the existing function 1716face is returned. This function complements the existing function
1719`default-font-height'. 1717'default-font-height'.
1720 1718
1721+++ 1719+++
1722*** New functions `window-font-height' and `window-font-width' return 1720*** New functions 'window-font-height' and 'window-font-width' return
1723the height and average width of characters in a specified face and 1721the height and average width of characters in a specified face and
1724window. If FACE is remapped (see `face-remapping-alist'), the 1722window. If FACE is remapped (see 'face-remapping-alist'), the
1725function returns the information for the remapped face. 1723function returns the information for the remapped face.
1726 1724
1727+++ 1725+++
1728*** A new function `window-max-chars-per-line' returns the maximal 1726*** A new function 'window-max-chars-per-line' returns the maximal
1729number of characters that can be displayed on one line. If a face 1727number of characters that can be displayed on one line. If a face
1730and/or window are provided, these values are used for the 1728and/or window are provided, these values are used for the
1731calculation. This function is different from `window-body-width' in 1729calculation. This function is different from 'window-body-width' in
1732that it accounts for (i) continuation glyphs, (ii) the size of the 1730that it accounts for (i) continuation glyphs, (ii) the size of the
1733font, and (iii) the specified window. 1731font, and (iii) the specified window.
1734 1732
1735--- 1733---
1736** New utilities in subr-x.el: 1734** New utilities in subr-x.el:
1737*** New macros `if-let' and `when-let' allow defining bindings and to 1735*** New macros 'if-let' and 'when-let' allow defining bindings and to
1738 execute code depending whether all values are true. 1736 execute code depending whether all values are true.
1739*** New macros `thread-first' and `thread-last' allow threading a form 1737*** New macros 'thread-first' and 'thread-last' allow threading a form
1740 as the first or last argument of subsequent forms. 1738 as the first or last argument of subsequent forms.
1741 1739
1742+++ 1740+++
1743** Documentation strings now support quoting with curved single quotes 1741** Documentation strings now support quoting with curved single quotes
1744‘like-this’ in addition to the old style with grave accent and 1742in addition to the old style with grave accent and apostrophe. The
1745apostrophe `like-this'. The new style looks better on today's displays. 1743new style looks better on today's displays. In the new Electric Quote
1746In the new Electric Quote mode, you can enter curved single quotes 1744mode, you can enter curved single quotes into documentation by typing
1747into documentation by typing ` and '. Outside Electric Quote mode, 1745grave accent and apostrophe. Outside Electric Quote mode, you can
1748you can enter them by typing C-x 8 [ and C-x 8 ], or (if your Alt 1746enter them by typing 'C-x 8 [' and 'C-x 8 ]', or (if your Alt key
1749key works) by typing A-[ and A-]. As described above under 1747works) by typing 'A-[' and 'A-]'. As described above under
1750text-quoting-style, the user can specify how to display doc string 1748'text-quoting-style', the user can specify how to display doc string
1751quotes. 1749quotes.
1752 1750
1753+++ 1751+++
1754** New function format-message is like format and also converts 1752** New function 'format-message' is like 'format' and also converts
1755curved single quotes, grave accents and apostrophes as per 1753curved single quotes, grave accents and apostrophes as per
1756text-quoting-style. 1754'text-quoting-style'.
1757 1755
1758+++ 1756+++
1759** show-help-function's arg is converted via substitute-command-keys 1757** show-help-function's arg is converted via substitute-command-keys
@@ -1766,36 +1764,36 @@ quotation marks.
1766 1764
1767*** Time conversion functions now accept an optional ZONE argument 1765*** Time conversion functions now accept an optional ZONE argument
1768that specifies the time zone rules for conversion. ZONE is omitted or 1766that specifies the time zone rules for conversion. ZONE is omitted or
1769nil for Emacs local time, t for Universal Time, wall for system wall 1767nil for Emacs local time, t for Universal Time, 'wall' for system wall
1770clock time, or a string as in set-time-zone-rule for a time zone 1768clock time, or a string as in 'set-time-zone-rule' for a time zone
1771rule. The affected functions are current-time-string, 1769rule. The affected functions are 'current-time-string',
1772current-time-zone, decode-time, and format-time-string. The 1770'current-time-zone', 'decode-time', and 'format-time-string'. The
1773function encode-time, which already accepted a simple time zone rule 1771function 'encode-time', which already accepted a simple time zone rule
1774argument, has been extended to accept all the new forms. 1772argument, has been extended to accept all the new forms.
1775 1773
1776*** Time-related functions now consistently accept numbers 1774*** Time-related functions now consistently accept numbers
1777(representing seconds since the epoch) and nil (representing the 1775(representing seconds since the epoch) and nil (representing the
1778current time) as well as the usual list-of-integer representation. 1776current time) as well as the usual list-of-integer representation.
1779Affected functions include `current-time-string', `current-time-zone', 1777Affected functions include 'current-time-string', 'current-time-zone',
1780`decode-time', `float-time', `format-time-string', `seconds-to-time', 1778'decode-time', 'float-time', 'format-time-string', 'seconds-to-time',
1781`time-add', `time-less-p', `time-subtract', `time-to-day-in-year', 1779'time-add', 'time-less-p', 'time-subtract', 'time-to-day-in-year',
1782`time-to-days', and `time-to-seconds'. 1780'time-to-days', and 'time-to-seconds'.
1783 1781
1784*** The `encode-time-value' and `with-decoded-time-value' macros have 1782*** The 'encode-time-value' and 'with-decoded-time-value' macros have
1785been obsoleted. 1783been obsoleted.
1786 1784
1787*** `calendar-next-time-zone-transition', `time-add', and 1785*** 'calendar-next-time-zone-transition', 'time-add', and
1788`time-subtract' no longer return time values in the obsolete and 1786'time-subtract' no longer return time values in the obsolete and
1789undocumented integer-pair format. Instead, they return a list of two 1787undocumented integer-pair format. Instead, they return a list of two
1790integers. 1788integers.
1791 1789
1792+++ 1790+++
1793** New function `set-binary-mode' allows switching a standard stream 1791** New function 'set-binary-mode' allows switching a standard stream
1794of the Emacs process to binary I/O mode. 1792of the Emacs process to binary I/O mode.
1795 1793
1796+++ 1794+++
1797** The new function `directory-name-p' can be used to check whether a file 1795** The new function 'directory-name-p' can be used to check whether a file
1798name (as returned from, for instance, `file-name-all-completions') is 1796name (as returned from, for instance, 'file-name-all-completions') is
1799a directory file name. It returns non-nil if the last character in 1797a directory file name. It returns non-nil if the last character in
1800the name is a directory separator character (forward slash on GNU and 1798the name is a directory separator character (forward slash on GNU and
1801Unix systems, forward- or backslash on MS-Windows and MS-DOS). 1799Unix systems, forward- or backslash on MS-Windows and MS-DOS).
@@ -1807,22 +1805,22 @@ if the terminal cannot display curved quotes.
1807+++ 1805+++
1808** Standard output and error streams now transliterate characters via 1806** Standard output and error streams now transliterate characters via
1809standard-display-table, and encode output using locale-coding-system. 1807standard-display-table, and encode output using locale-coding-system.
1810To force a specific encoding, bind `coding-system-for-write' to the 1808To force a specific encoding, bind 'coding-system-for-write' to the
1811coding-system of your choice when invoking functions like `prin1' and 1809coding-system of your choice when invoking functions like 'prin1' and
1812`message'. 1810'message'.
1813 1811
1814+++ 1812+++
1815** New var `truncate-string-ellipsis' to choose how to indicate truncation. 1813** New var 'truncate-string-ellipsis' to choose how to indicate truncation.
1816 1814
1817+++ 1815+++
1818** New possible value for `system-type': `nacl'. 1816** New possible value for 'system-type': 'nacl'.
1819This is used by Google's Native Client (NaCl). 1817This is used by Google's Native Client (NaCl).
1820 1818
1821** Miscellaneous name change 1819** Miscellaneous name change
1822 1820
1823--- 1821---
1824For consistency with the usual Emacs spelling, the Lisp variable 1822For consistency with the usual Emacs spelling, the Lisp variable
1825`hfy-optimisations' has been renamed to `hfy-optimizations'. 1823'hfy-optimisations' has been renamed to 'hfy-optimizations'.
1826The old name should still work, as an obsolescent alias. 1824The old name should still work, as an obsolescent alias.
1827 1825
1828** Changes in Frame- and Window- Handling 1826** Changes in Frame- and Window- Handling
@@ -1832,53 +1830,53 @@ The old name should still work, as an obsolescent alias.
1832provide toolkit scroll bars, namely Gtk+, Lucid, Motif and Windows. 1830provide toolkit scroll bars, namely Gtk+, Lucid, Motif and Windows.
1833Horizontal scroll bars are turned off by default. 1831Horizontal scroll bars are turned off by default.
1834 1832
1835**** New function `horizontal-scroll-bars-available-p' telling whether 1833**** New function 'horizontal-scroll-bars-available-p' telling whether
1836 horizontal scroll bars are available on the underlying system. 1834 horizontal scroll bars are available on the underlying system.
1837 1835
1838**** New mode `horizontal-scroll-bar-mode' to toggle horizontal scroll 1836**** New mode 'horizontal-scroll-bar-mode' to toggle horizontal scroll
1839 bars on all existing and future frames. 1837 bars on all existing and future frames.
1840 1838
1841**** New function `toggle-horizontal-scroll-bar' to toggle horizontal 1839**** New function 'toggle-horizontal-scroll-bar' to toggle horizontal
1842 scroll bars on the selected frame. 1840 scroll bars on the selected frame.
1843 1841
1844**** New frame parameters `horizontal-scroll-bars' and 1842**** New frame parameters 'horizontal-scroll-bars' and
1845 `scroll-bar-height' to set horizontal scroll bars and their height 1843 'scroll-bar-height' to set horizontal scroll bars and their height
1846 for individual frames and in `default-frame-alist'. 1844 for individual frames and in 'default-frame-alist'.
1847 1845
1848**** New functions `frame-scroll-bar-height' and 1846**** New functions 'frame-scroll-bar-height' and
1849 `window-scroll-bar-height' return the height of horizontal scroll 1847 'window-scroll-bar-height' return the height of horizontal scroll
1850 bars on a specific frame or window. 1848 bars on a specific frame or window.
1851 1849
1852**** `set-window-scroll-bars' now accepts five parameters where the last 1850**** 'set-window-scroll-bars' now accepts five parameters where the last
1853 two specify height and type of the window's horizontal scroll bar. 1851 two specify height and type of the window's horizontal scroll bar.
1854 1852
1855**** `window-scroll-bars' now returns type and sizes of horizontal scroll 1853**** 'window-scroll-bars' now returns type and sizes of horizontal scroll
1856 bars too. 1854 bars too.
1857 1855
1858**** New buffer-local variables `horizontal-scroll-bar' and 1856**** New buffer-local variables 'horizontal-scroll-bar' and
1859 `scroll-bar-height'. 1857 'scroll-bar-height'.
1860 1858
1861+++ 1859+++
1862*** New functions `frame-geometry' and `frame-edges' give access to a 1860*** New functions 'frame-geometry' and 'frame-edges' give access to a
1863frame's geometry. 1861frame's geometry.
1864 1862
1865+++ 1863+++
1866*** New functions `mouse-absolute-pixel-position' and 1864*** New functions 'mouse-absolute-pixel-position' and
1867`set-mouse-absolute-pixel-position' get/set screen coordinates of the 1865'set-mouse-absolute-pixel-position' get/set screen coordinates of the
1868mouse cursor. 1866mouse cursor.
1869 1867
1870+++ 1868+++
1871*** The function `window-edges' now accepts three additional arguments to 1869*** The function 'window-edges' now accepts three additional arguments to
1872retrieve body, absolute and pixel edges of the window. 1870retrieve body, absolute and pixel edges of the window.
1873 1871
1874+++ 1872+++
1875*** The functions `window-inside-edges', `window-inside-pixel-edges' and 1873*** The functions 'window-inside-edges', 'window-inside-pixel-edges' and
1876`window-inside-absolute-pixel-edges' have been renamed to respectively 1874'window-inside-absolute-pixel-edges' have been renamed to respectively
1877`window-body-edges', `window-body-pixel-edges' and 1875'window-body-edges', 'window-body-pixel-edges' and
1878`window-absolute-body-pixel-edges'. The old names are kept as aliases. 1876'window-absolute-body-pixel-edges'. The old names are kept as aliases.
1879 1877
1880+++ 1878+++
1881*** New function `window-absolute-pixel-position' to get the screen 1879*** New function 'window-absolute-pixel-position' to get the screen
1882coordinates of a visible buffer position. 1880coordinates of a visible buffer position.
1883 1881
1884+++ 1882+++
@@ -1895,26 +1893,36 @@ they display when setting default font, menu bar, fringe width, or
1895scroll bars. In particular, maximized and fullscreen frames are 1893scroll bars. In particular, maximized and fullscreen frames are
1896conceptually never resized if such settings change. For fullheight and 1894conceptually never resized if such settings change. For fullheight and
1897fullwidth frames, the behavior may depend on the toolkit used. 1895fullwidth frames, the behavior may depend on the toolkit used.
1898**** New option `frame-inhibit-implied-resize' if non-nil, means that 1896**** New option 'frame-inhibit-implied-resize' if non-nil, means that
1899 setting default font, menu bar, fringe width, or scroll bars of a 1897 setting default font, menu bar, fringe width, or scroll bars of a
1900 specific frame does not resize that frame in order to preserve the 1898 specific frame does not resize that frame in order to preserve the
1901 number of columns or lines it displays. 1899 number of columns or lines it displays.
1902 1900
1903+++ 1901+++
1904*** New function `window-preserve-size' allows you to preserve the size of 1902*** New function 'window-preserve-size' allows you to preserve the size of
1905a window without "fixing" it. It's supported by `fit-window-to-buffer', 1903a window without "fixing" it. It's supported by 'fit-window-to-buffer',
1906`temp-buffer-resize-mode' and `display-buffer'. 1904'temp-buffer-resize-mode' and 'display-buffer'.
1907 1905
1908+++ 1906+++
1909*** New `display-buffer' action function `display-buffer-use-some-frame'. 1907*** New 'display-buffer' action function 'display-buffer-use-some-frame'.
1910This displays the buffer in an existing frame other than the current 1908This displays the buffer in an existing frame other than the current
1911frame, and allows the caller to specify a frame predicate to exclude 1909frame, and allows the caller to specify a frame predicate to exclude
1912frames. 1910frames.
1913 1911
1914+++ 1912+++
1915*** New minor mode `window-divider-mode' and options 1913*** New minor mode 'window-divider-mode' and options
1916`window-divider-default-places', `window-divider-default-bottom-width' 1914'window-divider-default-places', 'window-divider-default-bottom-width'
1917and `window-divider-default-right-width'. 1915and 'window-divider-default-right-width'.
1916
1917+++
1918*** The window displaying the '*Completions*' buffer with minibuffer
1919completion candidates is now shown at the bottom of the selected
1920frame. The size of that window is always as large as required to
1921display all the candidates, except when limited by the minimum size
1922of the other windows on that frame; those other windows are resized
1923to provide space for the '*Completions*' display. The Emacs manual
1924describes how to customize 'display-buffer-alist' to get back the old
1925behavior, see the node "Temporary Displays" there.
1918 1926
1919--- 1927---
1920** Tearoff menus and detachable toolbars for Gtk+ have been removed. 1928** Tearoff menus and detachable toolbars for Gtk+ have been removed.
@@ -1925,17 +1933,17 @@ Those features have been deprecated in Gtk+ for a long time.
1925+++ 1933+++
1926*** etags no longer qualifies class members by default. 1934*** etags no longer qualifies class members by default.
1927 1935
1928By default, `etags' will not qualify class members for Perl and C-like 1936By default, 'etags' will not qualify class members for Perl and C-like
1929object-oriented languages with their class names and namespaces, and 1937object-oriented languages with their class names and namespaces, and
1930will remove qualifications used explicitly in the code from the tag 1938will remove qualifications used explicitly in the code from the tag
1931names it puts in TAGS files. This is so the etags.el back-end for 1939names it puts in TAGS files. This is so the etags.el back-end for
1932`xref-find-definitions' is more accurate and produces less false 1940'xref-find-definitions' is more accurate and produces less false
1933positives. 1941positives.
1934 1942
1935Use --class-qualify (-Q) if you want the old default behavior of 1943Use --class-qualify (-Q) if you want the old default behavior of
1936qualifying class members in C++, Java, Objective C, and Perl. Note 1944qualifying class members in C++, Java, Objective C, and Perl. Note
1937that using -Q might make some class members become "unknown" to `M-.' 1945that using -Q might make some class members become "unknown" to 'M-.'
1938(`xref-find-definitions'); if so, you can use `C-u M-.' to specify the 1946('xref-find-definitions'); if so, you can use 'C-u M-.' to specify the
1939qualified names by hand. 1947qualified names by hand.
1940 1948
1941+++ 1949+++
@@ -1962,7 +1970,7 @@ whitespace at line beginning.
1962This includes the makefile.w32-in files in various subdirectories, and 1970This includes the makefile.w32-in files in various subdirectories, and
1963the support files. The file nt/configure.bat now just tells the user 1971the support files. The file nt/configure.bat now just tells the user
1964to use the procedure described in nt/INSTALL, by running the Posix 1972to use the procedure described in nt/INSTALL, by running the Posix
1965`configure' script in the top-level directory. 1973'configure' script in the top-level directory.
1966 1974
1967--- 1975---
1968** Building Emacs for MS-Windows requires at least Windows XP 1976** Building Emacs for MS-Windows requires at least Windows XP
@@ -1987,7 +1995,7 @@ Pass '--without-ns' to configure to create an X11 build, the old default.
1987** OS X on PowerPC is no longer supported. 1995** OS X on PowerPC is no longer supported.
1988 1996
1989--- 1997---
1990** New variable `ns-use-fullscreen-animation' controls animation for 1998** New variable 'ns-use-fullscreen-animation' controls animation for
1991non-native NS fullscreen. The default is nil. Set to t to enable 1999non-native NS fullscreen. The default is nil. Set to t to enable
1992animation when entering and leaving fullscreen. For native OSX fullscreen 2000animation when entering and leaving fullscreen. For native OSX fullscreen
1993this has no effect. 2001this has no effect.
@@ -1996,7 +2004,7 @@ this has no effect.
1996** The new function 'w32-application-type' returns the type of an 2004** The new function 'w32-application-type' returns the type of an
1997MS-Windows application given the name of its executable program file. 2005MS-Windows application given the name of its executable program file.
1998 2006
1999** New variable `w32-pipe-buffer-size'. 2007** New variable 'w32-pipe-buffer-size'.
2000It can be used to tune the size of the buffer of pipes created for 2008It can be used to tune the size of the buffer of pipes created for
2001communicating with subprocesses, when the program run by a subprocess 2009communicating with subprocesses, when the program run by a subprocess
2002exhibits unusual buffering behavior. Default is zero, which lets the 2010exhibits unusual buffering behavior. Default is zero, which lets the
@@ -2021,7 +2029,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
2021 2029
2022 2030
2023Local variables: 2031Local variables:
2024coding: utf-8 2032coding: us-ascii
2025mode: outline 2033mode: outline
2026paragraph-separate: "[ ]*$" 2034paragraph-separate: "[ ]*$"
2027end: 2035end:
diff --git a/etc/themes/tsdh-light-theme.el b/etc/themes/tsdh-light-theme.el
index 422b26c8ebf..9d618c5e501 100644
--- a/etc/themes/tsdh-light-theme.el
+++ b/etc/themes/tsdh-light-theme.el
@@ -25,9 +25,8 @@ Used and created by Tassilo Horn.")
25 25
26(custom-theme-set-faces 26(custom-theme-set-faces
27 'tsdh-light 27 'tsdh-light
28 '(Info-quoted ((t (:weight bold)))) 28 '(Info-quoted ((t (:underline "gray40" :weight bold))))
29 '(ace-jump-face-foreground ((t (:foreground "DeepPink" :box nil :weight bold)))) 29 '(aw-leading-char-face ((t (:background "red" :foreground "white" :weight bold))))
30 '(aw-leading-char-face ((t (:inherit ace-jump-face-foreground))))
31 '(default ((t (:background "white" :foreground "black")))) 30 '(default ((t (:background "white" :foreground "black"))))
32 '(diff-added ((t (:inherit diff-changed :background "light green")))) 31 '(diff-added ((t (:inherit diff-changed :background "light green"))))
33 '(diff-changed ((t (:background "light steel blue")))) 32 '(diff-changed ((t (:background "light steel blue"))))
@@ -36,6 +35,8 @@ Used and created by Tassilo Horn.")
36 '(diff-indicator-removed ((t (:inherit diff-indicator-changed)))) 35 '(diff-indicator-removed ((t (:inherit diff-indicator-changed))))
37 '(diff-removed ((t (:inherit diff-changed :background "sandy brown")))) 36 '(diff-removed ((t (:inherit diff-changed :background "sandy brown"))))
38 '(dired-directory ((t (:inherit font-lock-function-name-face :weight bold)))) 37 '(dired-directory ((t (:inherit font-lock-function-name-face :weight bold))))
38 '(font-lock-regexp-grouping-backslash ((t (:inherit bold :foreground "black"))))
39 '(font-lock-regexp-grouping-construct ((t (:inherit bold :foreground "black"))))
39 '(gnus-button ((t (:inherit button)))) 40 '(gnus-button ((t (:inherit button))))
40 '(gnus-header-name ((t (:box (:line-width 1 :style released-button) :weight bold)))) 41 '(gnus-header-name ((t (:box (:line-width 1 :style released-button) :weight bold))))
41 '(gnus-group-mail-1 ((t (:inherit gnus-group-mail-1-empty :weight bold)))) 42 '(gnus-group-mail-1 ((t (:inherit gnus-group-mail-1-empty :weight bold))))
diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h
index f7b260d2ad5..9a2622f9789 100644
--- a/lib/sys_select.in.h
+++ b/lib/sys_select.in.h
@@ -81,8 +81,9 @@
81 of 'struct timeval', and no definition of this type. 81 of 'struct timeval', and no definition of this type.
82 Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select() 82 Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select()
83 in <sys/time.h>. 83 in <sys/time.h>.
84 But avoid namespace pollution on glibc systems. */ 84 But avoid namespace pollution on glibc systems and "unknown type
85# ifndef __GLIBC__ 85 name" problems on Cygwin. */
86# if !(defined __GLIBC__ || defined __CYGWIN__)
86# include <sys/time.h> 87# include <sys/time.h>
87# endif 88# endif
88 89
@@ -100,10 +101,11 @@
100#endif 101#endif
101 102
102/* Get definition of 'sigset_t'. 103/* Get definition of 'sigset_t'.
103 But avoid namespace pollution on glibc systems. 104 But avoid namespace pollution on glibc systems and "unknown type
105 name" problems on Cygwin.
104 Do this after the include_next (for the sake of OpenBSD 5.0) but before 106 Do this after the include_next (for the sake of OpenBSD 5.0) but before
105 the split double-inclusion guard (for the sake of Solaris). */ 107 the split double-inclusion guard (for the sake of Solaris). */
106#if !(defined __GLIBC__ && !defined __UCLIBC__) 108#if !((defined __GLIBC__ || defined __CYGWIN__) && !defined __UCLIBC__)
107# include <signal.h> 109# include <signal.h>
108#endif 110#endif
109 111
@@ -289,12 +291,15 @@ _GL_WARN_ON_USE (pselect, "pselect is not portable - "
289# define select rpl_select 291# define select rpl_select
290# endif 292# endif
291_GL_FUNCDECL_RPL (select, int, 293_GL_FUNCDECL_RPL (select, int,
292 (int, fd_set *, fd_set *, fd_set *, struct timeval *)); 294 (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
295 struct timeval *restrict));
293_GL_CXXALIAS_RPL (select, int, 296_GL_CXXALIAS_RPL (select, int,
294 (int, fd_set *, fd_set *, fd_set *, struct timeval *)); 297 (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
298 struct timeval *restrict));
295# else 299# else
296_GL_CXXALIAS_SYS (select, int, 300_GL_CXXALIAS_SYS (select, int,
297 (int, fd_set *, fd_set *, fd_set *, struct timeval *)); 301 (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
302 struct timeval *restrict));
298# endif 303# endif
299_GL_CXXALIASWARN (select); 304_GL_CXXALIASWARN (select);
300#elif @HAVE_WINSOCK2_H@ 305#elif @HAVE_WINSOCK2_H@
diff --git a/lib/time_rz.c b/lib/time_rz.c
index bc801275b6d..55b764ea8b3 100644
--- a/lib/time_rz.c
+++ b/lib/time_rz.c
@@ -47,8 +47,6 @@ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
47 used. */ 47 used. */
48enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; 48enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) };
49 49
50static char const TZ[] = "TZ";
51
52/* Magic cookie timezone_t value, for local time. It differs from 50/* Magic cookie timezone_t value, for local time. It differs from
53 NULL and from all other timezone_t values. Only the address 51 NULL and from all other timezone_t values. Only the address
54 matters; the pointer is never dereferenced. */ 52 matters; the pointer is never dereferenced. */
@@ -205,7 +203,7 @@ tzfree (timezone_t tz)
205static char * 203static char *
206getenv_TZ (void) 204getenv_TZ (void)
207{ 205{
208 return getenv (TZ); 206 return getenv ("TZ");
209} 207}
210#endif 208#endif
211 209
@@ -213,7 +211,7 @@ getenv_TZ (void)
213static int 211static int
214setenv_TZ (char const *tz) 212setenv_TZ (char const *tz)
215{ 213{
216 return tz ? setenv (TZ, tz, 1) : unsetenv (TZ); 214 return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ");
217} 215}
218#endif 216#endif
219 217
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 24400a94d6a..f33dd011eda 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -194,7 +194,7 @@ update-subdirs:
194 $(srcdir)/../build-aux/update-subdirs $$file; \ 194 $(srcdir)/../build-aux/update-subdirs $$file; \
195 done; 195 done;
196 196
197.PHONY: updates repo-update update-authors 197.PHONY: updates repo-update update-authors update-gnus-news
198 198
199# Some modes of make-dist use this. 199# Some modes of make-dist use this.
200updates: update-subdirs autoloads finder-data custom-deps 200updates: update-subdirs autoloads finder-data custom-deps
@@ -207,12 +207,16 @@ updates: update-subdirs autoloads finder-data custom-deps
207# this directory's autoloads rule. 207# this directory's autoloads rule.
208repo-update: compile finder-data custom-deps 208repo-update: compile finder-data custom-deps
209 209
210# Update the AUTHORS file. 210# Update etc/AUTHORS and etc/GNUS-NEWS.
211 211
212update-authors: 212update-authors:
213 $(emacs) -L "$(top_srcdir)/admin" -l authors \ 213 $(emacs) -L "$(top_srcdir)/admin" -l authors \
214 -f batch-update-authors "$(top_srcdir)/etc/AUTHORS" "$(top_srcdir)" 214 -f batch-update-authors "$(top_srcdir)/etc/AUTHORS" "$(top_srcdir)"
215 215
216update-gnus-news:
217 $(emacs) -L "$(top_srcdir)/doc/misc" -l gnus-news -f batch-gnus-news \
218 "$(top_srcdir)/doc/misc/gnus-news.texi" \
219 "$(top_srcdir)/etc/GNUS-NEWS"
216 220
217ETAGS = ../lib-src/etags 221ETAGS = ../lib-src/etags
218 222
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 94cd08eaa4e..9574c03043e 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1414,7 +1414,12 @@ the archive of the file moved to, creating it if it does not exist."
1414 (setq todo-files (funcall todo-files-function)) 1414 (setq todo-files (funcall todo-files-function))
1415 (todo-reevaluate-filelist-defcustoms)) 1415 (todo-reevaluate-filelist-defcustoms))
1416 (dolist (buf buffers) 1416 (dolist (buf buffers)
1417 ;; Make sure archive file is in Todo Archive mode so that
1418 ;; todo-categories has correct value.
1417 (with-current-buffer (find-file-noselect buf) 1419 (with-current-buffer (find-file-noselect buf)
1420 (when (equal (file-name-extension (buffer-file-name)) "toda")
1421 (unless (derived-mode-p 'todo-archive-mode)
1422 (todo-archive-mode)))
1418 (widen) 1423 (widen)
1419 (goto-char (point-max)) 1424 (goto-char (point-max))
1420 (let* ((beg (re-search-backward 1425 (let* ((beg (re-search-backward
@@ -1466,10 +1471,18 @@ the archive of the file moved to, creating it if it does not exist."
1466 (re-search-backward 1471 (re-search-backward
1467 (concat "^" (regexp-quote todo-category-beg) 1472 (concat "^" (regexp-quote todo-category-beg)
1468 "\\(" (regexp-quote cat) "\\)$") nil t) 1473 "\\(" (regexp-quote cat) "\\)$") nil t)
1469 (replace-match new nil nil nil 1))) 1474 (replace-match new nil nil nil 1))
1470 (setq todo-categories 1475 (setq todo-categories
1471 (append todo-categories (list (cons (or new cat) counts)))) 1476 (append todo-categories (list (cons (or new cat) counts))))
1472 (todo-update-categories-sexp) 1477 (goto-char (point-min))
1478 (if (looking-at "((\"")
1479 ;; Delete existing sexp.
1480 (delete-region (line-beginning-position) (line-end-position))
1481 ;; Otherwise, file is new, so make space for categories sexp.
1482 (insert "\n")
1483 (goto-char (point-min)))
1484 ;; Insert (new or updated) sexp.
1485 (prin1 todo-categories (current-buffer)))
1473 ;; If archive was just created, save it to avoid "File 1486 ;; If archive was just created, save it to avoid "File
1474 ;; <xyz> no longer exists!" message on invoking 1487 ;; <xyz> no longer exists!" message on invoking
1475 ;; `todo-view-archived-items'. 1488 ;; `todo-view-archived-items'.
@@ -1500,9 +1513,7 @@ the archive of the file moved to, creating it if it does not exist."
1500 (setq todo-category-number 1)) 1513 (setq todo-category-number 1))
1501 (todo-category-select))))) 1514 (todo-category-select)))))
1502 (set-window-buffer (selected-window) 1515 (set-window-buffer (selected-window)
1503 (set-buffer (find-file-noselect nfile))) 1516 (set-buffer (find-file-noselect nfile))))))
1504 (todo-category-number (or new cat))
1505 (todo-category-select))))
1506 1517
1507(defun todo-merge-category (&optional file) 1518(defun todo-merge-category (&optional file)
1508 "Merge current category into another existing category. 1519 "Merge current category into another existing category.
diff --git a/lisp/comint.el b/lisp/comint.el
index dcd4a5ae4cf..cb79c175f0e 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -816,6 +816,13 @@ series of processes in the same Comint buffer. The hook
816 (format "COLUMNS=%d" (window-width))) 816 (format "COLUMNS=%d" (window-width)))
817 (list "TERM=emacs" 817 (list "TERM=emacs"
818 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width)))) 818 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
819
820 ;; This hack is for backward compatibility with Bash 4.3 and
821 ;; earlier. It can break common uses of 'configure', so
822 ;; remove it once Bash 4.4 or later is common.
823 (unless (getenv "EMACS")
824 (list "EMACS=t"))
825
819 (list (format "INSIDE_EMACS=%s,comint" emacs-version)) 826 (list (format "INSIDE_EMACS=%s,comint" emacs-version))
820 process-environment)) 827 process-environment))
821 (default-directory 828 (default-directory
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index dccaa9e96ca..088ca81ed8d 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -816,12 +816,11 @@ If in a Dired buffer, reverts it."
816 (interactive) 816 (interactive)
817 (if (file-exists-p dired-local-variables-file) 817 (if (file-exists-p dired-local-variables-file)
818 (error "Old-style dired-local-variables-file `./%s' found; 818 (error "Old-style dired-local-variables-file `./%s' found;
819replace it with a dir-locals-file `./%s.el'" 819replace it with a dir-locals-file `./%s'"
820 dired-local-variables-file 820 dired-local-variables-file
821 dir-locals-file)) 821 dir-locals-file))
822 (if (dir-locals--all-files default-directory) 822 (if (file-exists-p dir-locals-file)
823 (message "File `./%s' already exists." 823 (message "File `./%s' already exists." dir-locals-file)
824 (car (dir-locals--all-files default-directory)))
825 (add-dir-local-variable 'dired-mode 'subdirs nil) 824 (add-dir-local-variable 'dired-mode 'subdirs nil)
826 (add-dir-local-variable 'dired-mode 'dired-omit-mode t) 825 (add-dir-local-variable 'dired-mode 'dired-omit-mode t)
827 ;; Run extra-hooks and revert directory. 826 ;; Run extra-hooks and revert directory.
diff --git a/lisp/dired.el b/lisp/dired.el
index 24b128f2944..5741872cfc8 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2736,9 +2736,18 @@ instead of `dired-actual-switches'."
2736 (save-excursion 2736 (save-excursion
2737 (goto-char (point-min)) 2737 (goto-char (point-min))
2738 (dired-goto-file-1 file file (point-max))) 2738 (dired-goto-file-1 file file (point-max)))
2739 ;; Otherwise, look for it as a relative name. The 2739 ;; Next, look for it as a relative name with leading
2740 ;; hair is to get the result of `dired-goto-subdir' 2740 ;; subdirectories. (This happens in Dired buffers
2741 ;; without calling it if we don't have any subdirs. 2741 ;; created by find-dired, for example.)
2742 (save-excursion
2743 (goto-char (point-min))
2744 (dired-goto-file-1 (file-relative-name file
2745 default-directory)
2746 file (point-max)))
2747 ;; Otherwise, look for it as a relative name, a base
2748 ;; name only. The hair is to get the result of
2749 ;; `dired-goto-subdir' without calling it if we don't
2750 ;; have any subdirs.
2742 (save-excursion 2751 (save-excursion
2743 (when (if (string= dir (expand-file-name default-directory)) 2752 (when (if (string= dir (expand-file-name default-directory))
2744 (goto-char (point-min)) 2753 (goto-char (point-min))
@@ -4428,7 +4437,7 @@ instead.
4428 4437
4429;;;*** 4438;;;***
4430 4439
4431;;;### (autoloads nil "dired-x" "dired-x.el" "8dae922d1549647835460b6cb70af4df") 4440;;;### (autoloads nil "dired-x" "dired-x.el" "f00ad5ec7383d017263855ad8add60a3")
4432;;; Generated autoloads from dired-x.el 4441;;; Generated autoloads from dired-x.el
4433 4442
4434(autoload 'dired-jump "dired-x" "\ 4443(autoload 'dired-jump "dired-x" "\
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 9d912c3f6d9..223565cedb6 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -626,7 +626,7 @@ at the bottom edge of the page moves to the next page."
626 (image-bob) 626 (image-bob)
627 (image-bol 1)) 627 (image-bol 1))
628 (set-window-hscroll (selected-window) hscroll))) 628 (set-window-hscroll (selected-window) hscroll)))
629 (image-next-line 1))) 629 (image-next-line arg)))
630 630
631(defun doc-view-previous-line-or-previous-page (&optional arg) 631(defun doc-view-previous-line-or-previous-page (&optional arg)
632 "Scroll downward by ARG lines if possible, else goto previous page. 632 "Scroll downward by ARG lines if possible, else goto previous page.
diff --git a/lisp/emacs-lisp/cursor-sensor.el b/lisp/emacs-lisp/cursor-sensor.el
index ac063d4896a..f1ab82ecc4a 100644
--- a/lisp/emacs-lisp/cursor-sensor.el
+++ b/lisp/emacs-lisp/cursor-sensor.el
@@ -113,7 +113,7 @@
113 ;; non-sticky on both ends, but that means get-pos-property might 113 ;; non-sticky on both ends, but that means get-pos-property might
114 ;; never see it. 114 ;; never see it.
115 (new (or (get-char-property point 'cursor-sensor-functions) 115 (new (or (get-char-property point 'cursor-sensor-functions)
116 (unless (= point 1) 116 (unless (bobp)
117 (get-char-property (1- point) 'cursor-sensor-functions)))) 117 (get-char-property (1- point) 'cursor-sensor-functions))))
118 (old (window-parameter window 'cursor-sensor--last-state)) 118 (old (window-parameter window 'cursor-sensor--last-state))
119 (oldposmark (car old)) 119 (oldposmark (car old))
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index ec8d3d79d9f..ba15a65f5e1 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -123,33 +123,26 @@ MAP can be a list, hash-table or array."
123 default))) 123 default)))
124 124
125(defmacro map-put (map key value) 125(defmacro map-put (map key value)
126 "Associate KEY with VALUE in MAP and return MAP. 126 "Associate KEY with VALUE in MAP and return VALUE.
127If KEY is already present in MAP, replace the associated value 127If KEY is already present in MAP, replace the associated value
128with VALUE. 128with VALUE.
129 129
130MAP can be a list, hash-table or array." 130MAP can be a list, hash-table or array."
131 (macroexp-let2 nil map map 131 `(setf (map-elt ,map ,key) ,value))
132 `(progn
133 (setf (map-elt ,map ,key) ,value)
134 ,map)))
135 132
136(defmacro map-delete (map key) 133(defun map-delete (map key)
137 "Delete KEY from MAP and return MAP. 134 "Delete KEY from MAP and return MAP.
138No error is signaled if KEY is not a key of MAP. If MAP is an 135No error is signaled if KEY is not a key of MAP. If MAP is an
139array, store nil at the index KEY. 136array, store nil at the index KEY.
140 137
141MAP can be a list, hash-table or array." 138MAP can be a list, hash-table or array."
142 (declare (debug t)) 139 (map--dispatch map
143 (gv-letplace (mgetter msetter) `(gv-delay-error ,map) 140 :list (setf (alist-get key map nil t) nil)
144 (macroexp-let2 nil key key 141 :hash-table (remhash key map)
145 `(if (not (listp ,mgetter)) 142 :array (and (>= key 0)
146 (map--delete ,mgetter ,key) 143 (<= key (seq-length map))
147 ;; The alist case is special, since it can't be handled by the 144 (aset map key nil)))
148 ;; map--delete function. 145 map)
149 (setf (alist-get ,key (gv-synthetic-place ,mgetter ,msetter)
150 nil t)
151 nil)
152 ,mgetter))))
153 146
154(defun map-nested-elt (map keys &optional default) 147(defun map-nested-elt (map keys &optional default)
155 "Traverse MAP using KEYS and return the looked up value or DEFAULT if nil. 148 "Traverse MAP using KEYS and return the looked up value or DEFAULT if nil.
@@ -337,15 +330,6 @@ MAP can be a list, hash-table or array."
337 (cdr pair))) 330 (cdr pair)))
338 map)) 331 map))
339 332
340(defun map--delete (map key)
341 (map--dispatch map
342 :list (error "No place to remove the mapping for %S" key)
343 :hash-table (remhash key map)
344 :array (and (>= key 0)
345 (<= key (seq-length map))
346 (aset map key nil)))
347 map)
348
349(defun map--apply-hash-table (function map) 333(defun map--apply-hash-table (function map)
350 "Private function used to apply FUNCTION over MAP, MAP being a hash-table." 334 "Private function used to apply FUNCTION over MAP, MAP being a hash-table."
351 (let (result) 335 (let (result)
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 495ba7cb859..1d8f0cb8f5d 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -1493,7 +1493,10 @@ should not be computed on the basis of the following token."
1493 (let ((endpos (point))) 1493 (let ((endpos (point)))
1494 (goto-char pos) 1494 (goto-char pos)
1495 (forward-line 1) 1495 (forward-line 1)
1496 (and (equal res (smie-indent-forward-token)) 1496 ;; As seen in bug#22960, pos may be inside
1497 ;; a string, and forward-token may then stumble.
1498 (and (ignore-errors
1499 (equal res (smie-indent-forward-token)))
1497 (eq (point) endpos))))) 1500 (eq (point) endpos)))))
1498 nil 1501 nil
1499 (goto-char pos) 1502 (goto-char pos)
diff --git a/lisp/forms.el b/lisp/forms.el
index c0b48fd3b63..b068352e6eb 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -593,7 +593,7 @@ Commands: Equivalent keys in read-only mode:
593 ;; set-visited-file-name from calling set-auto-mode, which 593 ;; set-visited-file-name from calling set-auto-mode, which
594 ;; might kill all local variables and set forms-file nil, 594 ;; might kill all local variables and set forms-file nil,
595 ;; which will then barf in find-file-noselect below. This can 595 ;; which will then barf in find-file-noselect below. This can
596 ;; hapen when the user sets the default major mode that is 596 ;; happen when the user sets the default major mode that is
597 ;; different from the Fundamental mode. 597 ;; different from the Fundamental mode.
598 (let (change-major-mode-with-file-name) 598 (let (change-major-mode-with-file-name)
599 (set-visited-file-name nil)) 599 (set-visited-file-name nil))
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index f70877dc63a..3ea63c74034 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -30,6 +30,7 @@
30(autoload 'gnus-map-function "gnus-util") 30(autoload 'gnus-map-function "gnus-util")
31(autoload 'gnus-replace-in-string "gnus-util") 31(autoload 'gnus-replace-in-string "gnus-util")
32(autoload 'gnus-read-shell-command "gnus-util") 32(autoload 'gnus-read-shell-command "gnus-util")
33(autoload 'gnus-format-message "gnus-util")
33 34
34(autoload 'mm-inline-partial "mm-partial") 35(autoload 'mm-inline-partial "mm-partial")
35(autoload 'mm-inline-external-body "mm-extern") 36(autoload 'mm-inline-external-body "mm-extern")
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index 3ac3da0127d..254c427299e 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -27,6 +27,8 @@
27 27
28(require 'gnus-util) 28(require 'gnus-util)
29(require 'epg) 29(require 'epg)
30(require 'password-cache)
31(require 'mm-encode)
30 32
31(autoload 'mail-strip-quoted-names "mail-utils") 33(autoload 'mail-strip-quoted-names "mail-utils")
32(autoload 'mml2015-sign "mml2015") 34(autoload 'mml2015-sign "mml2015")
@@ -35,6 +37,7 @@
35(autoload 'mml1991-encrypt "mml1991") 37(autoload 'mml1991-encrypt "mml1991")
36(autoload 'message-fetch-field "message") 38(autoload 'message-fetch-field "message")
37(autoload 'message-goto-body "message") 39(autoload 'message-goto-body "message")
40(autoload 'message-options-get "message")
38(autoload 'mml-insert-tag "mml") 41(autoload 'mml-insert-tag "mml")
39(autoload 'mml-smime-sign "mml-smime") 42(autoload 'mml-smime-sign "mml-smime")
40(autoload 'mml-smime-encrypt "mml-smime") 43(autoload 'mml-smime-encrypt "mml-smime")
@@ -44,6 +47,8 @@
44(autoload 'mml-smime-verify-test "mml-smime") 47(autoload 'mml-smime-verify-test "mml-smime")
45(autoload 'epa--select-keys "epa") 48(autoload 'epa--select-keys "epa")
46 49
50(declare-function message-options-set "message" (symbol value))
51
47(defvar mml-sign-alist 52(defvar mml-sign-alist
48 '(("smime" mml-smime-sign-buffer mml-smime-sign-query) 53 '(("smime" mml-smime-sign-buffer mml-smime-sign-query)
49 ("pgp" mml-pgp-sign-buffer list) 54 ("pgp" mml-pgp-sign-buffer list)
@@ -110,20 +115,15 @@ details."
110 :group 'message 115 :group 'message
111 :type 'boolean) 116 :type 'boolean)
112 117
113(defcustom mml-secure-cache-passphrase 118;; FIXME If it's "NOT recommended", why is it the default?
114 (if (boundp 'password-cache) 119(defcustom mml-secure-cache-passphrase password-cache
115 password-cache
116 t)
117 "If t, cache OpenPGP or S/MIME passphrases inside Emacs. 120 "If t, cache OpenPGP or S/MIME passphrases inside Emacs.
118Passphrase caching in Emacs is NOT recommended. Use gpg-agent instead. 121Passphrase caching in Emacs is NOT recommended. Use gpg-agent instead.
119See Info node `(message) Security'." 122See Info node `(message) Security'."
120 :group 'message 123 :group 'message
121 :type 'boolean) 124 :type 'boolean)
122 125
123(defcustom mml-secure-passphrase-cache-expiry 126(defcustom mml-secure-passphrase-cache-expiry password-cache-expiry
124 (if (boundp 'password-cache-expiry)
125 password-cache-expiry
126 16)
127 "How many seconds the passphrase is cached. 127 "How many seconds the passphrase is cached.
128Whether the passphrase is cached at all is controlled by 128Whether the passphrase is cached at all is controlled by
129`mml-secure-cache-passphrase'." 129`mml-secure-cache-passphrase'."
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index 248e63682c8..502c65b2463 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -356,10 +356,6 @@ Whether the passphrase is cached at all is controlled by
356 356
357(autoload 'mml-compute-boundary "mml") 357(autoload 'mml-compute-boundary "mml")
358 358
359;; We require mm-decode, which requires mm-bodies, which autoloads
360;; message-options-get (!).
361(declare-function message-options-set "message" (symbol value))
362
363(defun mml-smime-epg-sign (cont) 359(defun mml-smime-epg-sign (cont)
364 (let ((inhibit-redisplay t) 360 (let ((inhibit-redisplay t)
365 (boundary (mml-compute-boundary cont))) 361 (boundary (mml-compute-boundary cont)))
diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el
index bb5c940f173..568dc564d91 100644
--- a/lisp/gnus/mml1991.el
+++ b/lisp/gnus/mml1991.el
@@ -25,11 +25,6 @@
25 25
26;;; Code: 26;;; Code:
27 27
28(eval-and-compile
29 (if (locate-library "password-cache")
30 (require 'password-cache)
31 (require 'password)))
32
33(eval-when-compile 28(eval-when-compile
34 (require 'cl) 29 (require 'cl)
35 (require 'mm-util)) 30 (require 'mm-util))
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index e2e99771801..61ca53624d3 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -27,11 +27,6 @@
27 27
28;;; Code: 28;;; Code:
29 29
30(eval-and-compile
31 (if (locate-library "password-cache")
32 (require 'password-cache)
33 (require 'password)))
34
35(eval-when-compile (require 'cl)) 30(eval-when-compile (require 'cl))
36(require 'mm-decode) 31(require 'mm-decode)
37(require 'mm-util) 32(require 'mm-util)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index b8ada2c766a..48354d39d48 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2574,16 +2574,30 @@ the word mode."
2574 (when (eq regexp-function t) 2574 (when (eq regexp-function t)
2575 (setq regexp-function #'word-search-regexp)) 2575 (setq regexp-function #'word-search-regexp))
2576 (let ((description 2576 (let ((description
2577 ;; Don't use a description on the default search mode. 2577 (cond
2578 (cond ((equal regexp-function search-default-mode) "") 2578 ;; 1. Do not use a description on the default search mode,
2579 (regexp-function 2579 ;; but only if the default search mode is non-nil.
2580 (and (symbolp regexp-function) 2580 ((or (and search-default-mode
2581 (or (get regexp-function 'isearch-message-prefix) 2581 (equal search-default-mode regexp-function))
2582 ""))) 2582 ;; Special case where `search-default-mode' is t
2583 (isearch-regexp "regexp ") 2583 ;; (defaults to regexp searches).
2584 ;; We're in literal mode. If the default mode is not 2584 (and (eq search-default-mode t)
2585 ;; literal, then describe it. 2585 (eq search-default-mode isearch-regexp))) "")
2586 ((functionp search-default-mode) "literal ")))) 2586 ;; 2. Use the `isearch-message-prefix' set for
2587 ;; `regexp-function' if available.
2588 (regexp-function
2589 (and (symbolp regexp-function)
2590 (or (get regexp-function 'isearch-message-prefix)
2591 "")))
2592 ;; 3. Else if `isearch-regexp' is non-nil, set description
2593 ;; to "regexp ".
2594 (isearch-regexp "regexp ")
2595 ;; 4. Else if we're in literal mode (and if the default
2596 ;; mode is also not literal), describe it.
2597 ((functionp search-default-mode) "literal ")
2598 ;; 5. And finally, if none of the above is true, set the
2599 ;; description to an empty string.
2600 (t ""))))
2587 (if space-before 2601 (if space-before
2588 ;; Move space from the end to the beginning. 2602 ;; Move space from the end to the beginning.
2589 (replace-regexp-in-string "\\(.*\\) \\'" " \\1" description) 2603 (replace-regexp-in-string "\\(.*\\) \\'" " \\1" description)
diff --git a/lisp/loadup.el b/lisp/loadup.el
index bd47bed3160..21c64a8c3b4 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -117,6 +117,10 @@
117(load "format") 117(load "format")
118(load "bindings") 118(load "bindings")
119(load "window") ; Needed here for `replace-buffer-in-windows'. 119(load "window") ; Needed here for `replace-buffer-in-windows'.
120;; We are now capable of resizing the mini-windows, so give the
121;; variable its advertised default value (it starts as nil, see
122;; xdisp.c).
123(setq resize-mini-windows 'grow-only)
120(setq load-source-file-function 'load-with-code-conversion) 124(setq load-source-file-function 'load-with-code-conversion)
121(load "files") 125(load "files")
122 126
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 70b0f232ce6..10ba5b38031 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -4582,6 +4582,8 @@ Argument MIME is non-nil if this is a mime message."
4582 (list armor-start (- (point-max) after-end) mime 4582 (list armor-start (- (point-max) after-end) mime
4583 armor-end-regexp))) 4583 armor-end-regexp)))
4584 4584
4585(declare-function rmail-mime-entity-truncated "rmailmm" (entity))
4586
4585;; Should this have a key-binding, or be in a menu? 4587;; Should this have a key-binding, or be in a menu?
4586;; There doesn't really seem to be an appropriate menu. 4588;; There doesn't really seem to be an appropriate menu.
4587;; Eg the edit command is not in a menu either. 4589;; Eg the edit command is not in a menu either.
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 0557214fe24..6281d7e5453 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -192,7 +192,7 @@
192 :enable (menu-bar-non-minibuffer-window-p) 192 :enable (menu-bar-non-minibuffer-window-p)
193 :help "Read an existing file into an Emacs buffer")) 193 :help "Read an existing file into an Emacs buffer"))
194 (bindings--define-key menu [new-file] 194 (bindings--define-key menu [new-file]
195 '(menu-item "New File..." find-file 195 '(menu-item "Visit New File..." find-file
196 :enable (menu-bar-non-minibuffer-window-p) 196 :enable (menu-bar-non-minibuffer-window-p)
197 :help "Specify a new file's name, to edit the file")) 197 :help "Specify a new file's name, to edit the file"))
198 198
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 0e68eb923cd..878c5a7f71f 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -53,8 +53,12 @@ the time when it is run.")
53 "Non-nil means run `midnight-hook' at midnight." 53 "Non-nil means run `midnight-hook' at midnight."
54 :global t 54 :global t
55 :initialize #'custom-initialize-default 55 :initialize #'custom-initialize-default
56 (if midnight-mode (timer-activate midnight-timer) 56 ;; Disable first, since the ':initialize' function above already
57 (cancel-timer midnight-timer))) 57 ;; starts the timer when the mode is turned on for the first time,
58 ;; via setting 'midnight-delay', which calls 'midnight-delay-set',
59 ;; which starts the timer.
60 (when (timerp midnight-timer) (cancel-timer midnight-timer))
61 (if midnight-mode (timer-activate midnight-timer)))
58 62
59;;; time conversion 63;;; time conversion
60 64
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index ecac0aeb135..6540059b965 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -1835,7 +1835,7 @@ variables.")
1835 'display-buffer-below-selected)) 1835 'display-buffer-below-selected))
1836 ,(if temp-buffer-resize-mode 1836 ,(if temp-buffer-resize-mode
1837 '(window-height . resize-temp-buffer-window) 1837 '(window-height . resize-temp-buffer-window)
1838 '(window-height . shrink-window-if-larger-than-buffer)) 1838 '(window-height . fit-window-to-buffer))
1839 ,(when temp-buffer-resize-mode 1839 ,(when temp-buffer-resize-mode
1840 '(preserve-size . (nil . t)))) 1840 '(preserve-size . (nil . t))))
1841 nil 1841 nil
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index e9431325333..2c8ff79763f 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -783,8 +783,13 @@ size, and full-buffer size."
783 (url-expand-file-name url (concat (car base) (cadr base)))))) 783 (url-expand-file-name url (concat (car base) (cadr base))))))
784 784
785(defun shr-ensure-newline () 785(defun shr-ensure-newline ()
786 (unless (zerop (current-column)) 786 (unless (bobp)
787 (insert "\n"))) 787 (let ((prefix (get-text-property (line-beginning-position)
788 'shr-prefix-length)))
789 (unless (or (zerop (current-column))
790 (and prefix
791 (= prefix (- (point) (line-beginning-position)))))
792 (insert "\n")))))
788 793
789(defun shr-ensure-paragraph () 794(defun shr-ensure-paragraph ()
790 (unless (bobp) 795 (unless (bobp)
@@ -812,6 +817,10 @@ size, and full-buffer size."
812 (line-end-position)) 817 (line-end-position))
813 (line-end-position))))) 818 (line-end-position)))))
814 (delete-region (match-beginning 0) (match-end 0))) 819 (delete-region (match-beginning 0) (match-end 0)))
820 ;; We have a single blank line.
821 ((and (eolp) (bolp))
822 (insert "\n"))
823 ;; Insert new paragraph.
815 (t 824 (t
816 (insert "\n\n")))))) 825 (insert "\n\n"))))))
817 826
@@ -915,7 +924,8 @@ If EXTERNAL, browse the URL using `shr-external-browser'."
915 (let ((param (match-string 4 data)) 924 (let ((param (match-string 4 data))
916 (payload (url-unhex-string (match-string 5 data)))) 925 (payload (url-unhex-string (match-string 5 data))))
917 (when (string-match "^.*\\(;[ \t]*base64\\)$" param) 926 (when (string-match "^.*\\(;[ \t]*base64\\)$" param)
918 (setq payload (base64-decode-string payload))) 927 (setq payload (ignore-errors
928 (base64-decode-string payload))))
919 payload))) 929 payload)))
920 930
921;; Behind display-graphic-p test. 931;; Behind display-graphic-p test.
@@ -1206,7 +1216,7 @@ ones, in case fg and bg are nil."
1206 (shr-ensure-paragraph)) 1216 (shr-ensure-paragraph))
1207 1217
1208(defun shr-tag-div (dom) 1218(defun shr-tag-div (dom)
1209 (shr-ensure-paragraph) 1219 (shr-ensure-newline)
1210 (shr-generic dom) 1220 (shr-generic dom)
1211 (shr-ensure-newline)) 1221 (shr-ensure-newline))
1212 1222
@@ -1470,6 +1480,10 @@ The preference is a float determined from `shr-prefer-media-type'."
1470 (shr-ensure-paragraph) 1480 (shr-ensure-paragraph)
1471 (let ((shr-list-mode 'ul)) 1481 (let ((shr-list-mode 'ul))
1472 (shr-generic dom)) 1482 (shr-generic dom))
1483 ;; If we end on an empty <li>, then make sure we really end on a new
1484 ;; paragraph.
1485 (unless (bolp)
1486 (insert "\n"))
1473 (shr-ensure-paragraph)) 1487 (shr-ensure-paragraph))
1474 1488
1475(defun shr-tag-ol (dom) 1489(defun shr-tag-ol (dom)
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index 74024644966..12c9f419555 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -538,7 +538,7 @@ This is a specialization of `soap-encode-value' for
538 (base64Binary 538 (base64Binary
539 (unless (stringp value) 539 (unless (stringp value)
540 (error "Not a string value for base64Binary")) 540 (error "Not a string value for base64Binary"))
541 (base64-encode-string (encode-coding-string value 'utf-8))) 541 (base64-encode-string value))
542 542
543 (otherwise 543 (otherwise
544 (error "Don't know how to encode %s for type %s" 544 (error "Don't know how to encode %s for type %s"
@@ -682,7 +682,7 @@ This is a specialization of `soap-decode-type' for
682 decimal byte float double duration) 682 decimal byte float double duration)
683 (string-to-number (car contents))) 683 (string-to-number (car contents)))
684 (boolean (string= (downcase (car contents)) "true")) 684 (boolean (string= (downcase (car contents)) "true"))
685 (base64Binary (decode-coding-string (base64-decode-string (car contents)) 'utf-8)) 685 (base64Binary (base64-decode-string (car contents)))
686 (anyType (soap-decode-any-type node)) 686 (anyType (soap-decode-any-type node))
687 (Array (soap-decode-array node)))))) 687 (Array (soap-decode-array node))))))
688 688
@@ -3096,7 +3096,11 @@ the SOAP request.
3096NOTE: The SOAP service provider should document the available 3096NOTE: The SOAP service provider should document the available
3097operations and their parameters for the service. You can also 3097operations and their parameters for the service. You can also
3098use the `soap-inspect' function to browse the available 3098use the `soap-inspect' function to browse the available
3099operations in a WSDL document." 3099operations in a WSDL document.
3100
3101NOTE: `soap-invoke' base64-decodes xsd:base64Binary return values
3102into unibyte strings; these byte-strings require further
3103interpretation by the caller."
3100 (apply #'soap-invoke-internal nil nil wsdl service operation-name parameters)) 3104 (apply #'soap-invoke-internal nil nil wsdl service operation-name parameters))
3101 3105
3102(defun soap-invoke-async (callback cbargs wsdl service operation-name 3106(defun soap-invoke-async (callback cbargs wsdl service operation-name
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 1f43747c094..9fa46109a5a 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -520,6 +520,7 @@ as given in your `~/.profile'."
520(defcustom tramp-remote-process-environment 520(defcustom tramp-remote-process-environment
521 `("TMOUT=0" "LC_CTYPE=''" 521 `("TMOUT=0" "LC_CTYPE=''"
522 ,(format "TERM=%s" tramp-terminal-type) 522 ,(format "TERM=%s" tramp-terminal-type)
523 "EMACS=t" ;; Deprecated; remove this line once Bash 4.4-or-later is common.
523 ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version) 524 ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version)
524 "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" "PAGER=cat" 525 "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" "PAGER=cat"
525 "autocorrect=" "correct=") 526 "autocorrect=" "correct=")
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 3b9f44e55a0..f458904c87a 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -1407,7 +1407,7 @@ been put there by c-put-char-property. POINT remains unchanged."
1407 (c-state-cache-good-pos c-state-cache-good-pos) 1407 (c-state-cache-good-pos c-state-cache-good-pos)
1408 ;(c-state-nonlit-pos-cache (copy-tree c-state-nonlit-pos-cache)) 1408 ;(c-state-nonlit-pos-cache (copy-tree c-state-nonlit-pos-cache))
1409 ;(c-state-nonlit-pos-cache-limit c-state-nonlit-pos-cache-limit) 1409 ;(c-state-nonlit-pos-cache-limit c-state-nonlit-pos-cache-limit)
1410 ;(c-state-semi-nonlit-pos-cache (copy-treec c-state-semi-nonlit-pos-cache)) 1410 ;(c-state-semi-nonlit-pos-cache (copy-tree c-state-semi-nonlit-pos-cache))
1411 ;(c-state-semi-nonlit-pos-cache-limit c-state-semi-nonlit-pos-cache) 1411 ;(c-state-semi-nonlit-pos-cache-limit c-state-semi-nonlit-pos-cache)
1412 (c-state-brace-pair-desert (copy-tree c-state-brace-pair-desert)) 1412 (c-state-brace-pair-desert (copy-tree c-state-brace-pair-desert))
1413 (c-state-point-min c-state-point-min) 1413 (c-state-point-min c-state-point-min)
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index b7ab408f744..0b15a283090 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1702,6 +1702,14 @@ Returns the compilation buffer created."
1702 (list "TERM=emacs" 1702 (list "TERM=emacs"
1703 (format "TERMCAP=emacs:co#%d:tc=unknown:" 1703 (format "TERMCAP=emacs:co#%d:tc=unknown:"
1704 (window-width)))) 1704 (window-width))))
1705
1706 ;; Set the EMACS variable, but
1707 ;; don't override users' setting of $EMACS.
1708 ;; Remove this hack once Bash 4.4-or-later is common,
1709 ;; since it can break 'configure'.
1710 (unless (getenv "EMACS")
1711 (list "EMACS=t"))
1712
1705 (list (format "INSIDE_EMACS=%s,compile" emacs-version)) 1713 (list (format "INSIDE_EMACS=%s,compile" emacs-version))
1706 (copy-sequence process-environment)))) 1714 (copy-sequence process-environment))))
1707 (set (make-local-variable 'compilation-arguments) 1715 (set (make-local-variable 'compilation-arguments)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 9e175a20e22..fc4501d0cbe 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -575,7 +575,7 @@ It can be quoted, or be inside a quoted form."
575 " " (cadr table-etc))) 575 " " (cadr table-etc)))
576 (cddr table-etc))))))))) 576 (cddr table-etc)))))))))
577 577
578(defun lisp-completion-at-point (_predicate) 578(defun lisp-completion-at-point (&optional _predicate)
579 (declare (obsolete elisp-completion-at-point "25.1")) 579 (declare (obsolete elisp-completion-at-point "25.1"))
580 (elisp-completion-at-point)) 580 (elisp-completion-at-point))
581 581
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index 0e0714e27ed..d857bfd88c3 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -439,7 +439,7 @@ static char * file[] = {
439\" \", 439\" \",
440\" \", 440\" \",
441\" \"};") 441\" \"};")
442 "The Cont icon.") 442 "The Cont icon.")
443 443
444(defvar idlwave-toolbar-to-here-icon 444(defvar idlwave-toolbar-to-here-icon
445 (idlwave-toolbar-make-button 445 (idlwave-toolbar-make-button
@@ -918,7 +918,7 @@ static char * file[] = {
918 (help (aref x 3)) 918 (help (aref x 3))
919 (key (vector 'tool-bar func)) 919 (key (vector 'tool-bar func))
920 (def (list 'menu-item 920 (def (list 'menu-item
921 "a" 921 ""
922 func 922 func
923 :image (symbol-value icon) 923 :image (symbol-value icon)
924 :visible show 924 :visible show
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 718b33932ed..3f25a0c0647 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -49,53 +49,6 @@
49 map) 49 map)
50 "Keymap used for programming modes.") 50 "Keymap used for programming modes.")
51 51
52(defvar prog-indentation-context nil
53 "When non-nil, provides context for indenting embedded code chunks.
54
55There are languages where part of the code is actually written in
56a sub language, e.g., a Yacc/Bison or ANTLR grammar also consists
57of plain C code. This variable enables the major mode of the
58main language to use the indentation engine of the sub-mode for
59lines in code chunks written in the sub-mode's language.
60
61When a major mode of such a main language decides to delegate the
62indentation of a line/region to the indentation engine of the sub
63mode, it should bind this variable to non-nil around the call.
64
65The non-nil value should be a list of the form:
66
67 (FIRST-COLUMN (START . END) PREVIOUS-CHUNKS)
68
69FIRST-COLUMN is the column the indentation engine of the sub-mode
70should use for top-level language constructs inside the code
71chunk (instead of 0).
72
73START and END specify the region of the code chunk. END can be
74nil, which stands for the value of `point-max'. The function
75`prog-widen' uses this to restore restrictions imposed by the
76sub-mode's indentation engine.
77
78PREVIOUS-CHUNKS, if non-nil, provides the indentation engine of
79the sub-mode with the virtual context of the code chunk. Valid
80values are:
81
82 - A string containing text which the indentation engine can
83 consider as standing in front of the code chunk. To cache the
84 string's calculated syntactic information for repeated calls
85 with the same string, the sub-mode can add text-properties to
86 the string.
87
88 A typical use case is for grammars with code chunks which are
89 to be indented like function bodies -- the string would contain
90 the corresponding function preamble.
91
92 - A function, to be called with the start position of the current
93 chunk. It should return either the region of the previous chunk
94 as (PREV-START . PREV-END), or nil if there is no previous chunk.
95
96 A typical use case are literate programming sources -- the
97 function would successively return the previous code chunks.")
98
99(defun prog-indent-sexp (&optional defun) 52(defun prog-indent-sexp (&optional defun)
100 "Indent the expression after point. 53 "Indent the expression after point.
101When interactively called with prefix, indent the enclosing defun 54When interactively called with prefix, indent the enclosing defun
@@ -109,27 +62,6 @@ instead."
109 (end (progn (forward-sexp 1) (point)))) 62 (end (progn (forward-sexp 1) (point))))
110 (indent-region start end nil)))) 63 (indent-region start end nil))))
111 64
112(defun prog-first-column ()
113 "Return the indentation column normally used for top-level constructs."
114 (or (car prog-indentation-context) 0))
115
116(defun prog-widen ()
117 "Remove restrictions (narrowing) from current code chunk or buffer.
118This function should be used instead of `widen' in any function used
119by the indentation engine to make it respect the value of
120`prog-indentation-context'.
121
122This function (like `widen') is useful inside a
123`save-restriction' to make the indentation correctly work when
124narrowing is in effect."
125 (let ((chunk (cadr prog-indentation-context)))
126 (if chunk
127 ;; No call to `widen' is necessary here, as narrow-to-region
128 ;; changes (not just narrows) the existing restrictions
129 (narrow-to-region (car chunk) (or (cdr chunk) (point-max)))
130 (widen))))
131
132
133(defvar-local prettify-symbols-alist nil 65(defvar-local prettify-symbols-alist nil
134 "Alist of symbol prettifications. 66 "Alist of symbol prettifications.
135Each element looks like (SYMBOL . CHARACTER), where the symbol 67Each element looks like (SYMBOL . CHARACTER), where the symbol
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 5aeefe47a54..90097df7ef1 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -283,18 +283,6 @@
283 :version "24.3" 283 :version "24.3"
284 :link '(emacs-commentary-link "python")) 284 :link '(emacs-commentary-link "python"))
285 285
286
287;;; 24.x Compat
288
289
290(unless (fboundp 'prog-widen)
291 (defun prog-widen ()
292 (widen)))
293
294(unless (fboundp 'prog-first-column)
295 (defun prog-first-column ()
296 0))
297
298 286
299;;; Bindings 287;;; Bindings
300 288
@@ -761,7 +749,7 @@ work on `python-indent-calculate-indentation' instead."
761 (interactive) 749 (interactive)
762 (save-excursion 750 (save-excursion
763 (save-restriction 751 (save-restriction
764 (prog-widen) 752 (widen)
765 (goto-char (point-min)) 753 (goto-char (point-min))
766 (let ((block-end)) 754 (let ((block-end))
767 (while (and (not block-end) 755 (while (and (not block-end)
@@ -860,7 +848,7 @@ keyword
860 - Point is on a line starting a dedenter block. 848 - Point is on a line starting a dedenter block.
861 - START is the position where the dedenter block starts." 849 - START is the position where the dedenter block starts."
862 (save-restriction 850 (save-restriction
863 (prog-widen) 851 (widen)
864 (let ((ppss (save-excursion 852 (let ((ppss (save-excursion
865 (beginning-of-line) 853 (beginning-of-line)
866 (syntax-ppss)))) 854 (syntax-ppss))))
@@ -1007,10 +995,10 @@ current context or a list of integers. The latter case is only
1007happening for :at-dedenter-block-start context since the 995happening for :at-dedenter-block-start context since the
1008possibilities can be narrowed to specific indentation points." 996possibilities can be narrowed to specific indentation points."
1009 (save-restriction 997 (save-restriction
1010 (prog-widen) 998 (widen)
1011 (save-excursion 999 (save-excursion
1012 (pcase (python-indent-context) 1000 (pcase (python-indent-context)
1013 (`(:no-indent . ,_) (prog-first-column)) ; usually 0 1001 (`(:no-indent . ,_) 0)
1014 (`(,(or :after-line 1002 (`(,(or :after-line
1015 :after-comment 1003 :after-comment
1016 :inside-string 1004 :inside-string
@@ -1048,7 +1036,7 @@ possibilities can be narrowed to specific indentation points."
1048 (let ((opening-block-start-points 1036 (let ((opening-block-start-points
1049 (python-info-dedenter-opening-block-positions))) 1037 (python-info-dedenter-opening-block-positions)))
1050 (if (not opening-block-start-points) 1038 (if (not opening-block-start-points)
1051 (prog-first-column) ; if not found default to first column 1039 0 ; if not found default to first column
1052 (mapcar (lambda (pos) 1040 (mapcar (lambda (pos)
1053 (save-excursion 1041 (save-excursion
1054 (goto-char pos) 1042 (goto-char pos)
@@ -1066,7 +1054,7 @@ integers. Levels are returned in ascending order, and in the
1066case INDENTATION is a list, this order is enforced." 1054case INDENTATION is a list, this order is enforced."
1067 (if (listp indentation) 1055 (if (listp indentation)
1068 (sort (copy-sequence indentation) #'<) 1056 (sort (copy-sequence indentation) #'<)
1069 (nconc (number-sequence (prog-first-column) (1- indentation) 1057 (nconc (number-sequence 0 (1- indentation)
1070 python-indent-offset) 1058 python-indent-offset)
1071 (list indentation)))) 1059 (list indentation))))
1072 1060
@@ -1091,7 +1079,7 @@ minimum."
1091 (python-indent--previous-level levels (current-indentation)) 1079 (python-indent--previous-level levels (current-indentation))
1092 (if levels 1080 (if levels
1093 (apply #'max levels) 1081 (apply #'max levels)
1094 (prog-first-column))))) 1082 0))))
1095 1083
1096(defun python-indent-line (&optional previous) 1084(defun python-indent-line (&optional previous)
1097 "Internal implementation of `python-indent-line-function'. 1085 "Internal implementation of `python-indent-line-function'.
@@ -4479,7 +4467,7 @@ Optional argument INCLUDE-TYPE indicates to include the type of the defun.
4479This function can be used as the value of `add-log-current-defun-function' 4467This function can be used as the value of `add-log-current-defun-function'
4480since it returns nil if point is not inside a defun." 4468since it returns nil if point is not inside a defun."
4481 (save-restriction 4469 (save-restriction
4482 (prog-widen) 4470 (widen)
4483 (save-excursion 4471 (save-excursion
4484 (end-of-line 1) 4472 (end-of-line 1)
4485 (let ((names) 4473 (let ((names)
@@ -4662,7 +4650,7 @@ likely an invalid python file."
4662 (let ((point (python-info-dedenter-opening-block-position))) 4650 (let ((point (python-info-dedenter-opening-block-position)))
4663 (when point 4651 (when point
4664 (save-restriction 4652 (save-restriction
4665 (prog-widen) 4653 (widen)
4666 (message "Closes %s" (save-excursion 4654 (message "Closes %s" (save-excursion
4667 (goto-char point) 4655 (goto-char point)
4668 (buffer-substring 4656 (buffer-substring
@@ -4683,7 +4671,7 @@ statement."
4683With optional argument LINE-NUMBER, check that line instead." 4671With optional argument LINE-NUMBER, check that line instead."
4684 (save-excursion 4672 (save-excursion
4685 (save-restriction 4673 (save-restriction
4686 (prog-widen) 4674 (widen)
4687 (when line-number 4675 (when line-number
4688 (python-util-goto-line line-number)) 4676 (python-util-goto-line line-number))
4689 (while (and (not (eobp)) 4677 (while (and (not (eobp))
@@ -4699,7 +4687,7 @@ With optional argument LINE-NUMBER, check that line instead."
4699Optional argument LINE-NUMBER forces the line number to check against." 4687Optional argument LINE-NUMBER forces the line number to check against."
4700 (save-excursion 4688 (save-excursion
4701 (save-restriction 4689 (save-restriction
4702 (prog-widen) 4690 (widen)
4703 (when line-number 4691 (when line-number
4704 (python-util-goto-line line-number)) 4692 (python-util-goto-line line-number))
4705 (when (python-info-line-ends-backslash-p) 4693 (when (python-info-line-ends-backslash-p)
@@ -4716,7 +4704,7 @@ When current line is continuation of another return the point
4716where the continued line ends." 4704where the continued line ends."
4717 (save-excursion 4705 (save-excursion
4718 (save-restriction 4706 (save-restriction
4719 (prog-widen) 4707 (widen)
4720 (let* ((context-type (progn 4708 (let* ((context-type (progn
4721 (back-to-indentation) 4709 (back-to-indentation)
4722 (python-syntax-context-type))) 4710 (python-syntax-context-type)))
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 36c1aed529e..972bf99145e 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -368,7 +368,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
368 (exp (exp1) (exp "," exp) (exp "=" exp) 368 (exp (exp1) (exp "," exp) (exp "=" exp)
369 (id " @ " exp)) 369 (id " @ " exp))
370 (exp1 (exp2) (exp2 "?" exp1 ":" exp1)) 370 (exp1 (exp2) (exp2 "?" exp1 ":" exp1))
371 (exp2 (exp3) (exp3 "." exp2)) 371 (exp2 (exp3) (exp3 "." exp3))
372 (exp3 ("def" insts "end") 372 (exp3 ("def" insts "end")
373 ("begin" insts-rescue-insts "end") 373 ("begin" insts-rescue-insts "end")
374 ("do" insts "end") 374 ("do" insts "end")
@@ -388,7 +388,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
388 (cases (exp "then" insts) 388 (cases (exp "then" insts)
389 (cases "when" cases) (insts "else" insts)) 389 (cases "when" cases) (insts "else" insts))
390 (expseq (exp) );;(expseq "," expseq) 390 (expseq (exp) );;(expseq "," expseq)
391 (hashvals (id "=>" exp1) (hashvals "," hashvals)) 391 (hashvals (exp1 "=>" exp1) (hashvals "," hashvals))
392 (insts-rescue-insts (insts) 392 (insts-rescue-insts (insts)
393 (insts-rescue-insts "rescue" insts-rescue-insts) 393 (insts-rescue-insts "rescue" insts-rescue-insts)
394 (insts-rescue-insts "ensure" insts-rescue-insts)) 394 (insts-rescue-insts "ensure" insts-rescue-insts))
@@ -406,17 +406,18 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
406 '((right "=") 406 '((right "=")
407 (right "+=" "-=" "*=" "/=" "%=" "**=" "&=" "|=" "^=" 407 (right "+=" "-=" "*=" "/=" "%=" "**=" "&=" "|=" "^="
408 "<<=" ">>=" "&&=" "||=") 408 "<<=" ">>=" "&&=" "||=")
409 (left ".." "...") 409 (nonassoc ".." "...")
410 (left "+" "-")
411 (left "*" "/" "%" "**")
412 (left "&&" "||") 410 (left "&&" "||")
413 (left "^" "&" "|")
414 (nonassoc "<=>") 411 (nonassoc "<=>")
415 (nonassoc ">" ">=" "<" "<=")
416 (nonassoc "==" "===" "!=") 412 (nonassoc "==" "===" "!=")
417 (nonassoc "=~" "!~") 413 (nonassoc "=~" "!~")
414 (nonassoc ">" ">=" "<" "<=")
415 (left "^" "&" "|")
418 (left "<<" ">>") 416 (left "<<" ">>")
419 (right ".")))))) 417 (left "+" "-")
418 (left "*" "/" "%")
419 (left "**")
420 (assoc "."))))))
420 421
421(defun ruby-smie--bosp () 422(defun ruby-smie--bosp ()
422 (save-excursion (skip-chars-backward " \t") 423 (save-excursion (skip-chars-backward " \t")
@@ -443,7 +444,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
443 (member (save-excursion (ruby-smie--backward-token)) 444 (member (save-excursion (ruby-smie--backward-token))
444 '("iuwu-mod" "and" "or"))) 445 '("iuwu-mod" "and" "or")))
445 (save-excursion 446 (save-excursion
446 (forward-comment 1) 447 (forward-comment (point-max))
447 (looking-at "&?\\.")))))) 448 (looking-at "&?\\."))))))
448 449
449(defun ruby-smie--redundant-do-p (&optional skip) 450(defun ruby-smie--redundant-do-p (&optional skip)
@@ -629,19 +630,13 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
629 ;; because when `.' is inside the line, the 630 ;; because when `.' is inside the line, the
630 ;; additional indentation from it looks out of place. 631 ;; additional indentation from it looks out of place.
631 ((smie-rule-parent-p ".") 632 ((smie-rule-parent-p ".")
632 (let (smie--parent) 633 ;; Traverse up the call chain until the parent is not `.',
633 (save-excursion 634 ;; or `.' at indentation, or at eol.
634 ;; Traverse up the parents until the parent is "." at 635 (while (and (not (ruby-smie--bosp))
635 ;; indentation, or any other token. 636 (equal (nth 2 (smie-backward-sexp ".")) ".")
636 (while (and (let ((parent (smie-indent--parent))) 637 (not (ruby-smie--bosp)))
637 (goto-char (cadr parent)) 638 (forward-char -1))
638 (save-excursion 639 (smie-indent-virtual))
639 (unless (integerp (car parent)) (forward-char -1))
640 (not (ruby-smie--bosp))))
641 (progn
642 (setq smie--parent nil)
643 (smie-rule-parent-p "."))))
644 (smie-rule-parent))))
645 (t (smie-rule-parent)))))) 640 (t (smie-rule-parent))))))
646 (`(:after . ,(or `"(" "[" "{")) 641 (`(:after . ,(or `"(" "[" "{"))
647 ;; FIXME: Shouldn't this be the default behavior of 642 ;; FIXME: Shouldn't this be the default behavior of
@@ -661,7 +656,9 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
661 (`(:before . ".") 656 (`(:before . ".")
662 (if (smie-rule-sibling-p) 657 (if (smie-rule-sibling-p)
663 (and ruby-align-chained-calls 0) 658 (and ruby-align-chained-calls 0)
664 ruby-indent-level)) 659 (smie-backward-sexp ".")
660 (cons 'column (+ (current-column)
661 ruby-indent-level))))
665 (`(:before . ,(or `"else" `"then" `"elsif" `"rescue" `"ensure")) 662 (`(:before . ,(or `"else" `"then" `"elsif" `"rescue" `"ensure"))
666 (smie-rule-parent)) 663 (smie-rule-parent))
667 (`(:before . "when") 664 (`(:before . "when")
@@ -1377,7 +1374,7 @@ delimiter."
1377 (goto-char ruby-indent-point) 1374 (goto-char ruby-indent-point)
1378 (beginning-of-line) 1375 (beginning-of-line)
1379 (skip-syntax-forward " ") 1376 (skip-syntax-forward " ")
1380 (if (looking-at "\\.[^.]") 1377 (if (looking-at "\\.[^.]\\|&\\.")
1381 (+ indent ruby-indent-level) 1378 (+ indent ruby-indent-level)
1382 indent)))) 1379 indent))))
1383 1380
@@ -2176,7 +2173,7 @@ See `font-lock-syntax-table'.")
2176 'font-lock-string-face))) 2173 'font-lock-string-face)))
2177 ;; Perl-ish keywords. 2174 ;; Perl-ish keywords.
2178 "\\_<\\(?:BEGIN\\|END\\)\\_>\\|^__END__$" 2175 "\\_<\\(?:BEGIN\\|END\\)\\_>\\|^__END__$"
2179 ;; Variables. 2176 ;; Singleton objects.
2180 (,(concat ruby-font-lock-keyword-beg-re 2177 (,(concat ruby-font-lock-keyword-beg-re
2181 "\\_<\\(nil\\|true\\|false\\)\\_>") 2178 "\\_<\\(nil\\|true\\|false\\)\\_>")
2182 1 font-lock-constant-face) 2179 1 font-lock-constant-face)
@@ -2184,7 +2181,7 @@ See `font-lock-syntax-table'.")
2184 ("\\_<__\\(?:LINE\\|ENCODING\\|FILE\\)__\\_>" 2181 ("\\_<__\\(?:LINE\\|ENCODING\\|FILE\\)__\\_>"
2185 (0 font-lock-builtin-face)) 2182 (0 font-lock-builtin-face))
2186 ;; Symbols. 2183 ;; Symbols.
2187 ("\\(^\\|[^:]\\)\\(:@?\\(?:\\w\\|_\\)+\\)\\([!?=]\\)?" 2184 ("\\(^\\|[^:]\\)\\(:@\\{0,2\\}\\(?:\\sw\\|\\s_\\)+\\)"
2188 (2 font-lock-constant-face) 2185 (2 font-lock-constant-face)
2189 (3 (unless (and (eq (char-before (match-end 3)) ?=) 2186 (3 (unless (and (eq (char-before (match-end 3)) ?=)
2190 (eq (char-after (match-end 3)) ?>)) 2187 (eq (char-after (match-end 3)) ?>))
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 69e6a154ae5..feed0fb36d9 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -436,6 +436,8 @@ If SELECT is non-nil, select the target window."
436;;; XREF buffer (part of the UI) 436;;; XREF buffer (part of the UI)
437 437
438;; The xref buffer is used to display a set of xrefs. 438;; The xref buffer is used to display a set of xrefs.
439(defconst xref-buffer-name "*xref*"
440 "The name of the buffer to show xrefs.")
439 441
440(defmacro xref--with-dedicated-window (&rest body) 442(defmacro xref--with-dedicated-window (&rest body)
441 `(let* ((xref-w (get-buffer-window xref-buffer-name)) 443 `(let* ((xref-w (get-buffer-window xref-buffer-name))
@@ -470,6 +472,9 @@ If SELECT is non-nil, select the target window."
470 (xref--show-pos-in-buf marker buf select)) 472 (xref--show-pos-in-buf marker buf select))
471 (user-error (message (error-message-string err))))) 473 (user-error (message (error-message-string err)))))
472 474
475(defvar-local xref--window nil
476 "The original window this xref buffer was created from.")
477
473(defun xref-show-location-at-point () 478(defun xref-show-location-at-point ()
474 "Display the source of xref at point in the appropriate window, if any." 479 "Display the source of xref at point in the appropriate window, if any."
475 (interactive) 480 (interactive)
@@ -500,9 +505,6 @@ If SELECT is non-nil, select the target window."
500 (back-to-indentation) 505 (back-to-indentation)
501 (get-text-property (point) 'xref-item))) 506 (get-text-property (point) 'xref-item)))
502 507
503(defvar-local xref--window nil
504 "The original window this xref buffer was created from.")
505
506(defun xref-goto-xref () 508(defun xref-goto-xref ()
507 "Jump to the xref on the current line and select its window." 509 "Jump to the xref on the current line and select its window."
508 (interactive) 510 (interactive)
@@ -624,9 +626,6 @@ references displayed in the current *xref* buffer."
624 (t 626 (t
625 (error "No %s xref" (if backward "previous" "next")))))) 627 (error "No %s xref" (if backward "previous" "next"))))))
626 628
627(defconst xref-buffer-name "*xref*"
628 "The name of the buffer to show xrefs.")
629
630(defvar xref--button-map 629(defvar xref--button-map
631 (let ((map (make-sparse-keymap))) 630 (let ((map (make-sparse-keymap)))
632 (define-key map [(control ?m)] #'xref-goto-xref) 631 (define-key map [(control ?m)] #'xref-goto-xref)
diff --git a/lisp/replace.el b/lisp/replace.el
index 2c3aa9b0885..a2344d9f7e7 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -167,8 +167,6 @@ wants to replace FROM with TO."
167 ;; unavailable while preparing to dump. 167 ;; unavailable while preparing to dump.
168 (custom-reevaluate-setting 'query-replace-from-to-separator) 168 (custom-reevaluate-setting 'query-replace-from-to-separator)
169 (let* ((history-add-new-input nil) 169 (let* ((history-add-new-input nil)
170 (text-property-default-nonsticky
171 (cons '(separator . t) text-property-default-nonsticky))
172 (separator 170 (separator
173 (when query-replace-from-to-separator 171 (when query-replace-from-to-separator
174 (propertize "\0" 172 (propertize "\0"
@@ -193,11 +191,18 @@ wants to replace FROM with TO."
193 ;; a region in order to specify the minibuffer input. 191 ;; a region in order to specify the minibuffer input.
194 ;; That should not clobber the region for the query-replace itself. 192 ;; That should not clobber the region for the query-replace itself.
195 (save-excursion 193 (save-excursion
196 (if regexp-flag 194 ;; The `with-current-buffer' ensures that the binding
197 (read-regexp prompt nil 'query-replace-from-to-history) 195 ;; for `text-property-default-nonsticky' isn't a buffer
198 (read-from-minibuffer 196 ;; local binding in the current buffer, which
199 prompt nil nil nil 'query-replace-from-to-history 197 ;; `read-from-minibuffer' wouldn't see.
200 (car (if regexp-flag regexp-search-ring search-ring)) t)))) 198 (with-current-buffer (window-buffer (minibuffer-window))
199 (let ((text-property-default-nonsticky
200 (cons '(separator . t) text-property-default-nonsticky)))
201 (if regexp-flag
202 (read-regexp prompt nil 'query-replace-from-to-history)
203 (read-from-minibuffer
204 prompt nil nil nil 'query-replace-from-to-history
205 (car (if regexp-flag regexp-search-ring search-ring)) t))))))
201 (to)) 206 (to))
202 (if (and (zerop (length from)) query-replace-defaults) 207 (if (and (zerop (length from)) query-replace-defaults)
203 (cons (caar query-replace-defaults) 208 (cons (caar query-replace-defaults)
@@ -293,7 +298,8 @@ As each match is found, the user must type a character saying
293what to do with it. For directions, type \\[help-command] at that time. 298what to do with it. For directions, type \\[help-command] at that time.
294 299
295In Transient Mark mode, if the mark is active, operate on the contents 300In Transient Mark mode, if the mark is active, operate on the contents
296of the region. Otherwise, operate from point to the end of the buffer. 301of the region. Otherwise, operate from point to the end of the buffer's
302accessible portion.
297 303
298Use \\<minibuffer-local-map>\\[next-history-element] \ 304Use \\<minibuffer-local-map>\\[next-history-element] \
299to pull the last incremental search string to the minibuffer 305to pull the last incremental search string to the minibuffer
@@ -355,7 +361,8 @@ As each match is found, the user must type a character saying
355what to do with it. For directions, type \\[help-command] at that time. 361what to do with it. For directions, type \\[help-command] at that time.
356 362
357In Transient Mark mode, if the mark is active, operate on the contents 363In Transient Mark mode, if the mark is active, operate on the contents
358of the region. Otherwise, operate from point to the end of the buffer. 364of the region. Otherwise, operate from point to the end of the buffer's
365accessible portion.
359 366
360Use \\<minibuffer-local-map>\\[next-history-element] \ 367Use \\<minibuffer-local-map>\\[next-history-element] \
361to pull the last incremental search regexp to the minibuffer 368to pull the last incremental search regexp to the minibuffer
@@ -452,7 +459,8 @@ Use `\\#&' or `\\#N' if you want a number instead of a string.
452In interactive use, `\\#' in itself stands for `replace-count'. 459In interactive use, `\\#' in itself stands for `replace-count'.
453 460
454In Transient Mark mode, if the mark is active, operate on the contents 461In Transient Mark mode, if the mark is active, operate on the contents
455of the region. Otherwise, operate from point to the end of the buffer. 462of the region. Otherwise, operate from point to the end of the buffer's
463accessible portion.
456 464
457Use \\<minibuffer-local-map>\\[next-history-element] \ 465Use \\<minibuffer-local-map>\\[next-history-element] \
458to pull the last incremental search regexp to the minibuffer 466to pull the last incremental search regexp to the minibuffer
@@ -507,7 +515,8 @@ each successive replacement uses the next successive replacement string,
507wrapping around from the last such string to the first. 515wrapping around from the last such string to the first.
508 516
509In Transient Mark mode, if the mark is active, operate on the contents 517In Transient Mark mode, if the mark is active, operate on the contents
510of the region. Otherwise, operate from point to the end of the buffer. 518of the region. Otherwise, operate from point to the end of the buffer's
519accessible portion.
511 520
512Non-interactively, TO-STRINGS may be a list of replacement strings. 521Non-interactively, TO-STRINGS may be a list of replacement strings.
513 522
@@ -573,7 +582,7 @@ replace backward.
573Operates on the region between START and END (if both are nil, from point 582Operates on the region between START and END (if both are nil, from point
574to the end of the buffer). Interactively, if Transient Mark mode is 583to the end of the buffer). Interactively, if Transient Mark mode is
575enabled and the mark is active, operates on the contents of the region; 584enabled and the mark is active, operates on the contents of the region;
576otherwise from point to the end of the buffer. 585otherwise from point to the end of the buffer's accessible portion.
577 586
578Use \\<minibuffer-local-map>\\[next-history-element] \ 587Use \\<minibuffer-local-map>\\[next-history-element] \
579to pull the last incremental search string to the minibuffer 588to pull the last incremental search string to the minibuffer
@@ -620,7 +629,8 @@ regexp in `search-whitespace-regexp'.
620This function is not affected by `replace-character-fold' 629This function is not affected by `replace-character-fold'
621 630
622In Transient Mark mode, if the mark is active, operate on the contents 631In Transient Mark mode, if the mark is active, operate on the contents
623of the region. Otherwise, operate from point to the end of the buffer. 632of the region. Otherwise, operate from point to the end of the buffer's
633accessible portion.
624 634
625Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace 635Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
626only matches surrounded by word boundaries. A negative prefix arg means 636only matches surrounded by word boundaries. A negative prefix arg means
diff --git a/lisp/simple.el b/lisp/simple.el
index 84a1919bc01..2a81ee745cb 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -408,15 +408,19 @@ A non-nil INTERACTIVE argument means to run the `post-self-insert-hook'."
408 (last-command-event ?\n) 408 (last-command-event ?\n)
409 ;; Don't auto-fill if we have a numeric argument. 409 ;; Don't auto-fill if we have a numeric argument.
410 (auto-fill-function (if arg nil auto-fill-function)) 410 (auto-fill-function (if arg nil auto-fill-function))
411 (arg (prefix-numeric-value arg))
411 (postproc 412 (postproc
412 ;; Do the rest in post-self-insert-hook, because we want to do it 413 ;; Do the rest in post-self-insert-hook, because we want to do it
413 ;; *before* other functions on that hook. 414 ;; *before* other functions on that hook.
414 (lambda () 415 (lambda ()
415 (cl-assert (eq ?\n (char-before))) 416 ;; We are not going to insert any newlines if arg is
417 ;; non-positive.
418 (or (and (numberp arg) (<= arg 0))
419 (cl-assert (eq ?\n (char-before))))
416 ;; Mark the newline(s) `hard'. 420 ;; Mark the newline(s) `hard'.
417 (if use-hard-newlines 421 (if use-hard-newlines
418 (set-hard-newline-properties 422 (set-hard-newline-properties
419 (- (point) (prefix-numeric-value arg)) (point))) 423 (- (point) arg) (point)))
420 ;; If the newline leaves the previous line blank, and we 424 ;; If the newline leaves the previous line blank, and we
421 ;; have a left margin, delete that from the blank line. 425 ;; have a left margin, delete that from the blank line.
422 (save-excursion 426 (save-excursion
@@ -433,19 +437,21 @@ A non-nil INTERACTIVE argument means to run the `post-self-insert-hook'."
433 (move-to-left-margin nil t))))) 437 (move-to-left-margin nil t)))))
434 (unwind-protect 438 (unwind-protect
435 (if (not interactive) 439 (if (not interactive)
436 ;; FIXME: For non-interactive uses, many calls actually just want 440 ;; FIXME: For non-interactive uses, many calls actually
437 ;; (insert "\n"), so maybe we should do just that, so as to avoid 441 ;; just want (insert "\n"), so maybe we should do just
438 ;; the risk of filling or running abbrevs unexpectedly. 442 ;; that, so as to avoid the risk of filling or running
439 (let ((post-self-insert-hook (list postproc))) 443 ;; abbrevs unexpectedly.
440 (self-insert-command (prefix-numeric-value arg))) 444 (let ((post-self-insert-hook (list postproc)))
441 (unwind-protect 445 (self-insert-command arg))
442 (progn 446 (unwind-protect
443 (add-hook 'post-self-insert-hook postproc nil t) 447 (progn
444 (self-insert-command (prefix-numeric-value arg))) 448 (add-hook 'post-self-insert-hook postproc nil t)
445 ;; We first used let-binding to protect the hook, but that was naive 449 (self-insert-command arg))
446 ;; since add-hook affects the symbol-default value of the variable, 450 ;; We first used let-binding to protect the hook, but that
447 ;; whereas the let-binding might only protect the buffer-local value. 451 ;; was naive since add-hook affects the symbol-default
448 (remove-hook 'post-self-insert-hook postproc t))) 452 ;; value of the variable, whereas the let-binding might
453 ;; only protect the buffer-local value.
454 (remove-hook 'post-self-insert-hook postproc t)))
449 (cl-assert (not (member postproc post-self-insert-hook))) 455 (cl-assert (not (member postproc post-self-insert-hook)))
450 (cl-assert (not (member postproc (default-value 'post-self-insert-hook)))))) 456 (cl-assert (not (member postproc (default-value 'post-self-insert-hook))))))
451 nil) 457 nil)
diff --git a/lisp/startup.el b/lisp/startup.el
index a411891d1f6..536289c3891 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1890,10 +1890,12 @@ we put it on this frame."
1890 (when frame 1890 (when frame
1891 (let* ((img (create-image (fancy-splash-image-file))) 1891 (let* ((img (create-image (fancy-splash-image-file)))
1892 (image-height (and img (cdr (image-size img nil frame)))) 1892 (image-height (and img (cdr (image-size img nil frame))))
1893 ;; We test frame-height so that, if the frame is split 1893 ;; We test frame-height and not window-height so that,
1894 ;; by displaying a warning, that doesn't cause the normal 1894 ;; if the frame is split by displaying a warning, that
1895 ;; splash screen to be used. 1895 ;; doesn't cause the normal splash screen to be used.
1896 (frame-height (1- (frame-height frame)))) 1896 ;; We subtract 2 from frame-height to account for the
1897 ;; echo area and the mode line.
1898 (frame-height (- (frame-height frame) 2)))
1897 (> frame-height (+ image-height 19))))))) 1899 (> frame-height (+ image-height 19)))))))
1898 1900
1899 1901
@@ -1998,7 +2000,7 @@ To quit a partially entered command, type Control-g.\n")
1998 (insert " How to order printed manuals from the FSF\n") 2000 (insert " How to order printed manuals from the FSF\n")
1999 2001
2000 (insert "\nUseful tasks:\n") 2002 (insert "\nUseful tasks:\n")
2001 (insert-button "New File" 2003 (insert-button "Visit New File"
2002 'action (lambda (_button) (call-interactively 'find-file)) 2004 'action (lambda (_button) (call-interactively 'find-file))
2003 'follow-link t) 2005 'follow-link t)
2004 (insert (substitute-command-keys 2006 (insert (substitute-command-keys
@@ -2075,7 +2077,7 @@ If you have no Meta key, you may instead type ESC followed by the character.)"))
2075 ;; Insert links to useful tasks 2077 ;; Insert links to useful tasks
2076 (insert "\nUseful tasks:\n") 2078 (insert "\nUseful tasks:\n")
2077 2079
2078 (insert-button "New File" 2080 (insert-button "Visit New File"
2079 'action (lambda (_button) (call-interactively 'find-file)) 2081 'action (lambda (_button) (call-interactively 'find-file))
2080 'follow-link t) 2082 'follow-link t)
2081 (insert "\t\t\t") 2083 (insert "\t\t\t")
diff --git a/lisp/term.el b/lisp/term.el
index a2e01ed4a29..6fd3a5e6261 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -1454,6 +1454,13 @@ Using \"emacs\" loses, because bash disables editing if $TERM == emacs.")
1454 (format "TERMINFO=%s" data-directory) 1454 (format "TERMINFO=%s" data-directory)
1455 (format term-termcap-format "TERMCAP=" 1455 (format term-termcap-format "TERMCAP="
1456 term-term-name term-height term-width) 1456 term-term-name term-height term-width)
1457
1458 ;; This is for backwards compatibility with Bash 4.3 and earlier.
1459 ;; Remove this hack once Bash 4.4-or-later is common, because
1460 ;; it breaks './configure' of some packages that expect it to
1461 ;; say where to find EMACS.
1462 (format "EMACS=%s (term:%s)" emacs-version term-protocol-version)
1463
1457 (format "INSIDE_EMACS=%s,term:%s" emacs-version term-protocol-version) 1464 (format "INSIDE_EMACS=%s,term:%s" emacs-version term-protocol-version)
1458 (format "LINES=%d" term-height) 1465 (format "LINES=%d" term-height)
1459 (format "COLUMNS=%d" term-width)) 1466 (format "COLUMNS=%d" term-width))
diff --git a/lisp/xml.el b/lisp/xml.el
index 1802d04dfaf..414300cb402 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -580,7 +580,7 @@ Return one of:
580 ;; However, if we're parsing incrementally, then we need to deal 580 ;; However, if we're parsing incrementally, then we need to deal
581 ;; with stray CDATA. 581 ;; with stray CDATA.
582 (let ((s (xml-parse-string))) 582 (let ((s (xml-parse-string)))
583 (when (string-empty-p s) 583 (when (zerop (length s))
584 ;; We haven't consumed any input! We must throw an error in 584 ;; We haven't consumed any input! We must throw an error in
585 ;; order to prevent looping forever. 585 ;; order to prevent looping forever.
586 (error "XML: (Not Well-Formed) Could not parse: %s" 586 (error "XML: (Not Well-Formed) Could not parse: %s"
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index 5975e60272f..e52095789ba 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -134,23 +134,35 @@ http://invisible-island.net/xterm/ctlseqs/ctlseqs.html)."
134 (fdiff (- f (* 1.0 maxwrap dbig)))) 134 (fdiff (- f (* 1.0 maxwrap dbig))))
135 (+ (truncate fdiff) (* maxwrap dbig)))))) 135 (+ (truncate fdiff) (* maxwrap dbig))))))
136 136
137(defun xterm-mouse--read-utf8-char (&optional prompt seconds) 137(defcustom xterm-mouse-utf-8 nil
138 "Read an utf-8 encoded character from the current terminal. 138 "Non-nil if UTF-8 coordinates should be used to read mouse coordinates.
139This function reads and returns an utf-8 encoded character of 139Set this to non-nil if you are sure that your terminal
140command input. If the user generates an event which is not a 140understands UTF-8 coordinates, but not SGR coordinates."
141character (i.e., a mouse click or function key event), read-char 141 :version "25.1"
142signals an error. 142 :type 'boolean
143 143 :risky t
144The returned event may come directly from the user, or from a 144 :group 'xterm)
145keyboard macro. It is not decoded by the keyboard's input coding 145
146system and always treated with an utf-8 input encoding. 146(defun xterm-mouse--read-coordinate ()
147 147 "Read a mouse coordinate from the current terminal.
148The optional arguments PROMPT and SECONDS work like in 148If `xterm-mouse-utf-8' was non-nil when
149`read-event'." 149`turn-on-xterm-mouse-tracking-on-terminal' was called, reads the
150 (let ((tmp (keyboard-coding-system))) 150coordinate as an UTF-8 code unit sequence; otherwise, reads a
151 (set-keyboard-coding-system 'utf-8) 151single byte."
152 (prog1 (read-event prompt t seconds) 152 (let ((previous-keyboard-coding-system (keyboard-coding-system)))
153 (set-keyboard-coding-system tmp)))) 153 (unwind-protect
154 (progn
155 (set-keyboard-coding-system
156 (if (terminal-parameter nil 'xterm-mouse-utf-8)
157 'utf-8-unix
158 ;; Use Latin-1 instead of no-conversion to avoid flicker
159 ;; due to `set-keyboard-coding-system' changing the meta
160 ;; mode.
161 'latin-1))
162 ;; Wait only a little; we assume that the entire escape sequence
163 ;; has already been sent when this function is called.
164 (read-char nil nil 0.1))
165 (set-keyboard-coding-system previous-keyboard-coding-system))))
154 166
155;; In default mode, each numeric parameter of XTerm's mouse report is 167;; In default mode, each numeric parameter of XTerm's mouse report is
156;; a single char, possibly encoded as utf-8. The actual numeric 168;; a single char, possibly encoded as utf-8. The actual numeric
@@ -170,7 +182,7 @@ The optional arguments PROMPT and SECONDS work like in
170 (<= ?0 c ?9)) 182 (<= ?0 c ?9))
171 (setq n (+ (* 10 n) c (- ?0)))) 183 (setq n (+ (* 10 n) c (- ?0))))
172 (cons n c)) 184 (cons n c))
173 (cons (- (setq c (xterm-mouse--read-utf8-char)) 32) c)))) 185 (cons (- (setq c (xterm-mouse--read-coordinate)) 32) c))))
174 186
175;; XTerm reports mouse events as 187;; XTerm reports mouse events as
176;; <EVENT-CODE> <X> <Y> in default mode, and 188;; <EVENT-CODE> <X> <Y> in default mode, and
@@ -314,6 +326,38 @@ down the SHIFT key while pressing the mouse button."
314 (mapc #'turn-off-xterm-mouse-tracking-on-terminal (terminal-list)) 326 (mapc #'turn-off-xterm-mouse-tracking-on-terminal (terminal-list))
315 (setq mouse-position-function nil))) 327 (setq mouse-position-function nil)))
316 328
329(defun xterm-mouse-tracking-enable-sequence ()
330 "Return a control sequence to enable XTerm mouse tracking.
331The returned control sequence enables basic mouse tracking, mouse
332motion events and finally extended tracking on terminals that
333support it. The following escape sequences are understood by
334modern xterms:
335
336\"\\e[?1000h\" \"Basic mouse mode\": Enables reports for mouse
337 clicks. There is a limit to the maximum row/column
338 position (<= 223), which can be reported in this
339 basic mode.
340
341\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse
342 motion events during dragging operations.
343
344\"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an
345 extension to the basic mouse mode, which uses UTF-8
346 characters to overcome the 223 row/column limit.
347 This extension may conflict with non UTF-8
348 applications or non UTF-8 locales. It is only
349 enabled when the option `xterm-mouse-utf-8' is
350 non-nil.
351
352\"\\e[?1006h\" \"SGR coordinate extension\": Enables a newer
353 alternative extension to the basic mouse mode, which
354 overcomes the 223 row/column limit without the
355 drawbacks of the UTF-8 coordinate extension.
356
357The two extension modes are mutually exclusive, where the last
358given escape sequence takes precedence over the former."
359 (apply #'concat (xterm-mouse--tracking-sequence ?h)))
360
317(defconst xterm-mouse-tracking-enable-sequence 361(defconst xterm-mouse-tracking-enable-sequence
318 "\e[?1000h\e[?1002h\e[?1005h\e[?1006h" 362 "\e[?1000h\e[?1002h\e[?1005h\e[?1006h"
319 "Control sequence to enable xterm mouse tracking. 363 "Control sequence to enable xterm mouse tracking.
@@ -343,10 +387,34 @@ escape sequences are understood by modern xterms:
343The two extension modes are mutually exclusive, where the last 387The two extension modes are mutually exclusive, where the last
344given escape sequence takes precedence over the former.") 388given escape sequence takes precedence over the former.")
345 389
390(make-obsolete-variable
391 'xterm-mouse-tracking-enable-sequence
392 "use the function `xterm-mouse-tracking-enable-sequence' instead."
393 "25.1")
394
395(defun xterm-mouse-tracking-disable-sequence ()
396 "Return a control sequence to disable XTerm mouse tracking.
397The control sequence resets the modes set by
398`xterm-mouse-tracking-enable-sequence'."
399 (apply #'concat (nreverse (xterm-mouse--tracking-sequence ?l))))
400
346(defconst xterm-mouse-tracking-disable-sequence 401(defconst xterm-mouse-tracking-disable-sequence
347 "\e[?1006l\e[?1005l\e[?1002l\e[?1000l" 402 "\e[?1006l\e[?1005l\e[?1002l\e[?1000l"
348 "Reset the modes set by `xterm-mouse-tracking-enable-sequence'.") 403 "Reset the modes set by `xterm-mouse-tracking-enable-sequence'.")
349 404
405(make-obsolete-variable
406 'xterm-mouse-tracking-disable-sequence
407 "use the function `xterm-mouse-tracking-disable-sequence' instead."
408 "25.1")
409
410(defun xterm-mouse--tracking-sequence (suffix)
411 "Return a control sequence to enable or disable mouse tracking.
412SUFFIX is the last character of each escape sequence (?h to
413enable, ?l to disable)."
414 (mapcar
415 (lambda (code) (format "\e[?%d%c" code suffix))
416 `(1000 1002 ,@(when xterm-mouse-utf-8 '(1005)) 1006)))
417
350(defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal) 418(defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal)
351 "Enable xterm mouse tracking on TERMINAL." 419 "Enable xterm mouse tracking on TERMINAL."
352 (when (and xterm-mouse-mode (eq t (terminal-live-p terminal)) 420 (when (and xterm-mouse-mode (eq t (terminal-live-p terminal))
@@ -360,18 +428,19 @@ given escape sequence takes precedence over the former.")
360 (with-selected-frame (car (frames-on-display-list terminal)) 428 (with-selected-frame (car (frames-on-display-list terminal))
361 (define-key input-decode-map "\e[M" 'xterm-mouse-translate) 429 (define-key input-decode-map "\e[M" 'xterm-mouse-translate)
362 (define-key input-decode-map "\e[<" 'xterm-mouse-translate-extended)) 430 (define-key input-decode-map "\e[<" 'xterm-mouse-translate-extended))
363 (condition-case err 431 (let ((enable (xterm-mouse-tracking-enable-sequence))
364 (send-string-to-terminal xterm-mouse-tracking-enable-sequence 432 (disable (xterm-mouse-tracking-disable-sequence)))
365 terminal) 433 (condition-case err
366 ;; FIXME: This should use a dedicated error signal. 434 (send-string-to-terminal enable terminal)
367 (error (if (equal (cadr err) "Terminal is currently suspended") 435 ;; FIXME: This should use a dedicated error signal.
368 nil ;The sequence will be sent upon resume. 436 (error (if (equal (cadr err) "Terminal is currently suspended")
369 (signal (car err) (cdr err))))) 437 nil ; The sequence will be sent upon resume.
370 (push xterm-mouse-tracking-enable-sequence 438 (signal (car err) (cdr err)))))
371 (terminal-parameter nil 'tty-mode-set-strings)) 439 (push enable (terminal-parameter nil 'tty-mode-set-strings))
372 (push xterm-mouse-tracking-disable-sequence 440 (push disable (terminal-parameter nil 'tty-mode-reset-strings))
373 (terminal-parameter nil 'tty-mode-reset-strings)) 441 (set-terminal-parameter terminal 'xterm-mouse-mode t)
374 (set-terminal-parameter terminal 'xterm-mouse-mode t)))) 442 (set-terminal-parameter terminal 'xterm-mouse-utf-8
443 xterm-mouse-utf-8)))))
375 444
376(defun turn-off-xterm-mouse-tracking-on-terminal (terminal) 445(defun turn-off-xterm-mouse-tracking-on-terminal (terminal)
377 "Disable xterm mouse tracking on TERMINAL." 446 "Disable xterm mouse tracking on TERMINAL."
diff --git a/nextstep/README b/nextstep/README
index 026a048e9d4..7a1a0921cd8 100644
--- a/nextstep/README
+++ b/nextstep/README
@@ -1,4 +1,3 @@
1
2 NS -- the Cocoa interface for OS X and compatible systems 1 NS -- the Cocoa interface for OS X and compatible systems
3 --------------------------------------------------------- 2 ---------------------------------------------------------
4 3
@@ -30,7 +29,7 @@ fact that it doesn't have a normal name. Instead, the method name is
30made up of the name of each parameter. An exception to this rule are 29made up of the name of each parameter. An exception to this rule are
31methods without parameters. 30methods without parameters.
32 31
33The following calls a method in the object `anObject'. 32The following calls a method in the object 'anObject'.
34 33
35 [anObject alpha:1 beta:2 gamma:3]; 34 [anObject alpha:1 beta:2 gamma:3];
36 35
@@ -57,7 +56,7 @@ Classes are declared like the following:
57 and avoid language constructs that makes the code hard to maintain. 56 and avoid language constructs that makes the code hard to maintain.
58 57
59* Don't use macros and types intended for the XCode Interface Builder, 58* Don't use macros and types intended for the XCode Interface Builder,
60 like `IBAction'. 59 like 'IBAction'.
61 60
62* The NS interface should work on all version of OS X from 10.6.8 61* The NS interface should work on all version of OS X from 10.6.8
63 (Snow Leopard) to the latest official release. 62 (Snow Leopard) to the latest official release.
@@ -71,8 +70,8 @@ Classes are declared like the following:
71The NS interface features a printf-based trace package that prints the 70The NS interface features a printf-based trace package that prints the
72call tree of selected functions in the Cocoa interface, plus various 71call tree of selected functions in the Cocoa interface, plus various
73extra information. It can be enabled by uncommenting the line 72extra information. It can be enabled by uncommenting the line
74defining `NSTRACE_ENABLED' in "nsterm.h". To enable more output, 73defining 'NSTRACE_ENABLED' in "nsterm.h". To enable more output,
75uncomment the lines defining symbols starting with `NSTRACE_GROUP'. 74uncomment the lines defining symbols starting with 'NSTRACE_GROUP'.
76 75
77 76
78 GNUSTEP AND OTHER COMPATIBLE SYSTEMS 77 GNUSTEP AND OTHER COMPATIBLE SYSTEMS
@@ -103,3 +102,22 @@ The INSTALL file in this directory for compilation instructions.
103 102
104The Nextstep section in the etc/TODO file for a list of ideas for 103The Nextstep section in the etc/TODO file for a list of ideas for
105future development. 104future development.
105
106
107----------------------------------------------------------------------
108Copyright 2008-2016 Free Software Foundation, Inc.
109
110This file is part of GNU Emacs.
111
112GNU Emacs is free software: you can redistribute it and/or modify
113it under the terms of the GNU General Public License as published by
114the Free Software Foundation, either version 3 of the License, or
115(at your option) any later version.
116
117GNU Emacs is distributed in the hope that it will be useful,
118but WITHOUT ANY WARRANTY; without even the implied warranty of
119MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
120GNU General Public License for more details.
121
122You should have received a copy of the GNU General Public License
123along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/alloc.c b/src/alloc.c
index b5be0f6e69c..4c9cbf10724 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3730,7 +3730,6 @@ make_save_ptr_int (void *a, ptrdiff_t b)
3730 return val; 3730 return val;
3731} 3731}
3732 3732
3733#if ! (defined USE_X_TOOLKIT || defined USE_GTK)
3734Lisp_Object 3733Lisp_Object
3735make_save_ptr_ptr (void *a, void *b) 3734make_save_ptr_ptr (void *a, void *b)
3736{ 3735{
@@ -3741,7 +3740,6 @@ make_save_ptr_ptr (void *a, void *b)
3741 p->data[1].pointer = b; 3740 p->data[1].pointer = b;
3742 return val; 3741 return val;
3743} 3742}
3744#endif
3745 3743
3746Lisp_Object 3744Lisp_Object
3747make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c) 3745make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c)
diff --git a/src/bidi.c b/src/bidi.c
index a68ffdb7e6d..c23ff954356 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -532,7 +532,7 @@ bidi_copy_it (struct bidi_it *to, struct bidi_it *from)
532 /* Copy everything from the start through the active part of 532 /* Copy everything from the start through the active part of
533 the level stack. */ 533 the level stack. */
534 memcpy (to, from, 534 memcpy (to, from,
535 (offsetof (struct bidi_it, level_stack[1]) 535 (offsetof (struct bidi_it, level_stack) + sizeof from->level_stack[0]
536 + from->stack_idx * sizeof from->level_stack[0])); 536 + from->stack_idx * sizeof from->level_stack[0]));
537} 537}
538 538
diff --git a/src/editfns.c b/src/editfns.c
index df982234977..2ac0537eddb 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1456,7 +1456,7 @@ time_overflow (void)
1456 error ("Specified time is not representable"); 1456 error ("Specified time is not representable");
1457} 1457}
1458 1458
1459static void 1459static _Noreturn void
1460invalid_time (void) 1460invalid_time (void)
1461{ 1461{
1462 error ("Invalid time specification"); 1462 error ("Invalid time specification");
@@ -1848,7 +1848,9 @@ lisp_time_struct (Lisp_Object specified_time, int *plen)
1848 Lisp_Object high, low, usec, psec; 1848 Lisp_Object high, low, usec, psec;
1849 struct lisp_time t; 1849 struct lisp_time t;
1850 int len = disassemble_lisp_time (specified_time, &high, &low, &usec, &psec); 1850 int len = disassemble_lisp_time (specified_time, &high, &low, &usec, &psec);
1851 int val = len ? decode_time_components (high, low, usec, psec, &t, 0) : 0; 1851 if (!len)
1852 invalid_time ();
1853 int val = decode_time_components (high, low, usec, psec, &t, 0);
1852 check_time_validity (val); 1854 check_time_validity (val);
1853 *plen = len; 1855 *plen = len;
1854 return t; 1856 return t;
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index cebd7b613c7..ca0bbfbb866 100644
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -27,13 +27,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
27#include "emacsgtkfixed.h" 27#include "emacsgtkfixed.h"
28 28
29/* Silence a bogus diagnostic; see GNOME bug 683906. */ 29/* Silence a bogus diagnostic; see GNOME bug 683906. */
30#if 4 < __GNUC__ + (7 <= __GNUC_MINOR__) 30#if 4 < __GNUC__ + (7 <= __GNUC_MINOR__) && ! GLIB_CHECK_VERSION (2, 35, 7)
31# pragma GCC diagnostic push 31# pragma GCC diagnostic push
32# pragma GCC diagnostic ignored "-Wunused-local-typedefs" 32# pragma GCC diagnostic ignored "-Wunused-local-typedefs"
33#endif 33#endif
34 34
35typedef struct _EmacsFixed EmacsFixed; 35typedef struct _EmacsFixed EmacsFixed;
36typedef struct _EmacsFixedPrivate EmacsFixedPrivate;
37typedef struct _EmacsFixedClass EmacsFixedClass; 36typedef struct _EmacsFixedClass EmacsFixedClass;
38 37
39struct _EmacsFixedPrivate 38struct _EmacsFixedPrivate
diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h
index 3d6a76ab570..0d09525e02a 100644
--- a/src/emacsgtkfixed.h
+++ b/src/emacsgtkfixed.h
@@ -30,7 +30,6 @@ G_BEGIN_DECLS
30struct frame; 30struct frame;
31 31
32typedef struct _EmacsFixedPrivate EmacsFixedPrivate; 32typedef struct _EmacsFixedPrivate EmacsFixedPrivate;
33typedef struct _EmacsFixedClass EmacsFixedClass;
34 33
35struct _EmacsFixed 34struct _EmacsFixed
36{ 35{
diff --git a/src/floatfns.c b/src/floatfns.c
index b9af03b3431..c1bd25877e3 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -3,8 +3,7 @@
3Copyright (C) 1988, 1993-1994, 1999, 2001-2016 Free Software Foundation, 3Copyright (C) 1988, 1993-1994, 1999, 2001-2016 Free Software Foundation,
4Inc. 4Inc.
5 5
6Author: Wolfgang Rupprecht (ac 6Author: Wolfgang Rupprecht (according to ack.texi)
7ording to ack.texi)
8 7
9This file is part of GNU Emacs. 8This file is part of GNU Emacs.
10 9
diff --git a/src/font.c b/src/font.c
index 5ab3b3e8399..2519599bc63 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5317,7 +5317,7 @@ syms_of_font (void)
5317 DEFSYM (Qja, "ja"); 5317 DEFSYM (Qja, "ja");
5318 DEFSYM (Qko, "ko"); 5318 DEFSYM (Qko, "ko");
5319 5319
5320 DEFSYM (QCuser_spec, "user-spec"); 5320 DEFSYM (QCuser_spec, ":user-spec");
5321 5321
5322 staticpro (&scratch_font_spec); 5322 staticpro (&scratch_font_spec);
5323 scratch_font_spec = Ffont_spec (0, NULL); 5323 scratch_font_spec = Ffont_spec (0, NULL);
diff --git a/src/frame.c b/src/frame.c
index 7511d5323ca..53ff05965c1 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -4565,7 +4565,7 @@ On Nextstep, this just calls `ns-parse-geometry'. */)
4565 4565
4566 This function does not make the coordinates positive. */ 4566 This function does not make the coordinates positive. */
4567 4567
4568#define DEFAULT_ROWS 35 4568#define DEFAULT_ROWS 36
4569#define DEFAULT_COLS 80 4569#define DEFAULT_COLS 80
4570 4570
4571long 4571long
diff --git a/src/ftfont.c b/src/ftfont.c
index a402245a067..7285aee9bd4 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2596,7 +2596,12 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font,
2596 language information, and select a proper flt for them 2596 language information, and select a proper flt for them
2597 here. */ 2597 here. */
2598 int c1 = LGLYPH_CHAR (LGSTRING_GLYPH (lgstring, 1)); 2598 int c1 = LGLYPH_CHAR (LGSTRING_GLYPH (lgstring, 1));
2599 if (CHAR_HAS_CATEGORY (c1, '^')) 2599 /* For the combining characters in the range U+300..U+36F,
2600 "combining" is the sole FLT provided by the m17n-lib. In
2601 addition, it is the sole FLT that can handle the other
2602 combining characters with non-OTF fonts. */
2603 if ((0x300 <= c1 && c1 <= 0x36F)
2604 || (! otf && CHAR_HAS_CATEGORY (c1, '^')))
2600 flt = mflt_get (msymbol ("combining")); 2605 flt = mflt_get (msymbol ("combining"));
2601 } 2606 }
2602 if (! flt && ! otf) 2607 if (! flt && ! otf)
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 7dca5851f29..e791e6ac317 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -252,35 +252,6 @@ xg_create_default_cursor (Display *dpy)
252 return gdk_cursor_new_for_display (gdpy, GDK_LEFT_PTR); 252 return gdk_cursor_new_for_display (gdpy, GDK_LEFT_PTR);
253} 253}
254 254
255static GdkPixbuf *
256xg_get_pixbuf_from_pixmap (struct frame *f, Pixmap pix)
257{
258 int iunused;
259 GdkPixbuf *tmp_buf;
260 Window wunused;
261 unsigned int width, height, uunused;
262 XImage *xim;
263
264 XGetGeometry (FRAME_X_DISPLAY (f), pix, &wunused, &iunused, &iunused,
265 &width, &height, &uunused, &uunused);
266
267 xim = XGetImage (FRAME_X_DISPLAY (f), pix, 0, 0, width, height,
268 ~0, XYPixmap);
269 if (!xim) return 0;
270
271 tmp_buf = gdk_pixbuf_new_from_data ((guchar *) xim->data,
272 GDK_COLORSPACE_RGB,
273 FALSE,
274 xim->bitmap_unit,
275 width,
276 height,
277 xim->bytes_per_line,
278 NULL,
279 NULL);
280 XDestroyImage (xim);
281 return tmp_buf;
282}
283
284/* Apply GMASK to GPIX and return a GdkPixbuf with an alpha channel. */ 255/* Apply GMASK to GPIX and return a GdkPixbuf with an alpha channel. */
285 256
286static GdkPixbuf * 257static GdkPixbuf *
@@ -288,46 +259,43 @@ xg_get_pixbuf_from_pix_and_mask (struct frame *f,
288 Pixmap pix, 259 Pixmap pix,
289 Pixmap mask) 260 Pixmap mask)
290{ 261{
291 int width, height; 262 GdkPixbuf *icon_buf = 0;
292 GdkPixbuf *icon_buf, *tmp_buf; 263 int iunused;
293 264 Window wunused;
294 tmp_buf = xg_get_pixbuf_from_pixmap (f, pix); 265 unsigned int width, height, depth, uunused;
295 icon_buf = gdk_pixbuf_add_alpha (tmp_buf, FALSE, 0, 0, 0);
296 g_object_unref (G_OBJECT (tmp_buf));
297
298 width = gdk_pixbuf_get_width (icon_buf);
299 height = gdk_pixbuf_get_height (icon_buf);
300 266
301 if (mask) 267 if (FRAME_DISPLAY_INFO (f)->red_bits != 8)
268 return 0;
269 XGetGeometry (FRAME_X_DISPLAY (f), pix, &wunused, &iunused, &iunused,
270 &width, &height, &uunused, &depth);
271 if (depth != 24)
272 return 0;
273 XImage *xim = XGetImage (FRAME_X_DISPLAY (f), pix, 0, 0, width, height,
274 ~0, XYPixmap);
275 if (xim)
302 { 276 {
303 GdkPixbuf *mask_buf = xg_get_pixbuf_from_pixmap (f, mask); 277 XImage *xmm = (! mask ? 0
304 guchar *pixels = gdk_pixbuf_get_pixels (icon_buf); 278 : XGetImage (FRAME_X_DISPLAY (f), mask, 0, 0,
305 guchar *mask_pixels = gdk_pixbuf_get_pixels (mask_buf); 279 width, height, ~0, XYPixmap));
306 int rowstride = gdk_pixbuf_get_rowstride (icon_buf); 280 icon_buf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
307 int mask_rowstride = gdk_pixbuf_get_rowstride (mask_buf); 281 if (icon_buf)
308 int y; 282 {
309 283 guchar *pixels = gdk_pixbuf_get_pixels (icon_buf);
310 for (y = 0; y < height; ++y) 284 int rowjunkwidth = gdk_pixbuf_get_rowstride (icon_buf) - width * 4;
311 { 285 for (int y = 0; y < height; y++, pixels += rowjunkwidth)
312 guchar *iconptr, *maskptr; 286 for (int x = 0; x < width; x++)
313 int x; 287 {
314 288 unsigned long rgb = XGetPixel (xim, x, y);
315 iconptr = pixels + y * rowstride; 289 *pixels++ = (rgb >> 16) & 255;
316 maskptr = mask_pixels + y * mask_rowstride; 290 *pixels++ = (rgb >> 8) & 255;
317 291 *pixels++ = rgb & 255;
318 for (x = 0; x < width; ++x) 292 *pixels++ = xmm && !XGetPixel (xmm, x, y) ? 0 : 255;
319 { 293 }
320 /* In a bitmap, RGB is either 255/255/255 or 0/0/0. Checking 294 }
321 just R is sufficient. */
322 if (maskptr[0] == 0)
323 iconptr[3] = 0; /* 0, 1, 2 is R, G, B. 3 is alpha. */
324
325 iconptr += rowstride/width;
326 maskptr += mask_rowstride/width;
327 }
328 }
329 295
330 g_object_unref (G_OBJECT (mask_buf)); 296 if (xmm)
297 XDestroyImage (xmm);
298 XDestroyImage (xim);
331 } 299 }
332 300
333 return icon_buf; 301 return icon_buf;
@@ -1300,7 +1268,7 @@ xg_create_frame_widgets (struct frame *f)
1300 if (! g_signal_handler_find (G_OBJECT (gs), 1268 if (! g_signal_handler_find (G_OBJECT (gs),
1301 G_SIGNAL_MATCH_FUNC, 1269 G_SIGNAL_MATCH_FUNC,
1302 0, 0, 0, 1270 0, 0, 0,
1303 G_CALLBACK (style_changed_cb), 1271 (gpointer) G_CALLBACK (style_changed_cb),
1304 0)) 1272 0))
1305 { 1273 {
1306 g_signal_connect (G_OBJECT (gs), "notify::gtk-theme-name", 1274 g_signal_connect (G_OBJECT (gs), "notify::gtk-theme-name",
@@ -1832,14 +1800,10 @@ xg_toggle_notify_cb (GObject *gobject, GParamSpec *arg1, gpointer user_data)
1832 1800
1833 if (!!visible != !!toggle_on) 1801 if (!!visible != !!toggle_on)
1834 { 1802 {
1835 g_signal_handlers_block_by_func (G_OBJECT (wtoggle), 1803 gpointer cb = (gpointer) G_CALLBACK (xg_toggle_visibility_cb);
1836 G_CALLBACK (xg_toggle_visibility_cb), 1804 g_signal_handlers_block_by_func (G_OBJECT (wtoggle), cb, gobject);
1837 gobject);
1838 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wtoggle), visible); 1805 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wtoggle), visible);
1839 g_signal_handlers_unblock_by_func 1806 g_signal_handlers_unblock_by_func (G_OBJECT (wtoggle), cb, gobject);
1840 (G_OBJECT (wtoggle),
1841 G_CALLBACK (xg_toggle_visibility_cb),
1842 gobject);
1843 } 1807 }
1844 x_gtk_show_hidden_files = visible; 1808 x_gtk_show_hidden_files = visible;
1845 } 1809 }
diff --git a/src/image.c b/src/image.c
index a44b90b78e7..e8418b840c6 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1830,6 +1830,9 @@ cache_image (struct frame *f, struct image *img)
1830 struct image_cache *c = FRAME_IMAGE_CACHE (f); 1830 struct image_cache *c = FRAME_IMAGE_CACHE (f);
1831 ptrdiff_t i; 1831 ptrdiff_t i;
1832 1832
1833 if (!c)
1834 c = FRAME_IMAGE_CACHE (f) = make_image_cache ();
1835
1833 /* Find a free slot in c->images. */ 1836 /* Find a free slot in c->images. */
1834 for (i = 0; i < c->used; ++i) 1837 for (i = 0; i < c->used; ++i)
1835 if (c->images[i] == NULL) 1838 if (c->images[i] == NULL)
diff --git a/src/keyboard.c b/src/keyboard.c
index 29d6d6778f4..9618e38e575 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -430,10 +430,9 @@ kset_system_key_syms (struct kboard *kb, Lisp_Object val)
430static bool 430static bool
431echo_keystrokes_p (void) 431echo_keystrokes_p (void)
432{ 432{
433 return (!cursor_in_echo_area) 433 return (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0
434 && (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0 434 : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0
435 : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0 435 : false);
436 : false);
437} 436}
438 437
439/* Add C to the echo string, without echoing it immediately. C can be 438/* Add C to the echo string, without echoing it immediately. C can be
@@ -2530,7 +2529,7 @@ read_char (int commandflag, Lisp_Object map,
2530 if (KEYMAPP (map) && INTERACTIVE 2529 if (KEYMAPP (map) && INTERACTIVE
2531 && !NILP (prev_event) && ! EVENT_HAS_PARAMETERS (prev_event) 2530 && !NILP (prev_event) && ! EVENT_HAS_PARAMETERS (prev_event)
2532 /* Don't bring up a menu if we already have another event. */ 2531 /* Don't bring up a menu if we already have another event. */
2533 && NILP (Vunread_command_events) 2532 && !CONSP (Vunread_command_events)
2534 && !detect_input_pending_run_timers (0)) 2533 && !detect_input_pending_run_timers (0))
2535 { 2534 {
2536 c = read_char_minibuf_menu_prompt (commandflag, map); 2535 c = read_char_minibuf_menu_prompt (commandflag, map);
@@ -2661,7 +2660,7 @@ read_char (int commandflag, Lisp_Object map,
2661 && !EQ (XCAR (prev_event), Qmenu_bar) 2660 && !EQ (XCAR (prev_event), Qmenu_bar)
2662 && !EQ (XCAR (prev_event), Qtool_bar) 2661 && !EQ (XCAR (prev_event), Qtool_bar)
2663 /* Don't bring up a menu if we already have another event. */ 2662 /* Don't bring up a menu if we already have another event. */
2664 && NILP (Vunread_command_events)) 2663 && !CONSP (Vunread_command_events))
2665 { 2664 {
2666 c = read_char_x_menu_prompt (map, prev_event, used_mouse_menu); 2665 c = read_char_x_menu_prompt (map, prev_event, used_mouse_menu);
2667 2666
@@ -8902,7 +8901,9 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
8902 if (!echo_keystrokes_p ()) 8901 if (!echo_keystrokes_p ())
8903 current_kboard->immediate_echo = false; 8902 current_kboard->immediate_echo = false;
8904 } 8903 }
8905 else if (echo_keystrokes_p ()) 8904 else if (cursor_in_echo_area /* FIXME: Not sure why we test this here,
8905 maybe we should just drop this test. */
8906 && echo_keystrokes_p ())
8906 /* This doesn't put in a dash if the echo buffer is empty, so 8907 /* This doesn't put in a dash if the echo buffer is empty, so
8907 you don't always see a dash hanging out in the minibuffer. */ 8908 you don't always see a dash hanging out in the minibuffer. */
8908 echo_dash (); 8909 echo_dash ();
@@ -9877,7 +9878,7 @@ clear_input_pending (void)
9877bool 9878bool
9878requeued_events_pending_p (void) 9879requeued_events_pending_p (void)
9879{ 9880{
9880 return (!NILP (Vunread_command_events)); 9881 return (CONSP (Vunread_command_events));
9881} 9882}
9882 9883
9883DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, 9884DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0,
@@ -9888,7 +9889,7 @@ if there is a doubt, the value is t.
9888If CHECK-TIMERS is non-nil, timers that are ready to run will do so. */) 9889If CHECK-TIMERS is non-nil, timers that are ready to run will do so. */)
9889 (Lisp_Object check_timers) 9890 (Lisp_Object check_timers)
9890{ 9891{
9891 if (!NILP (Vunread_command_events) 9892 if (CONSP (Vunread_command_events)
9892 || !NILP (Vunread_post_input_method_events) 9893 || !NILP (Vunread_post_input_method_events)
9893 || !NILP (Vunread_input_method_events)) 9894 || !NILP (Vunread_input_method_events))
9894 return (Qt); 9895 return (Qt);
diff --git a/src/lisp.h b/src/lisp.h
index 27588848c29..6a98adbda9c 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1766,7 +1766,8 @@ CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct)
1766 1766
1767/* Make sure that sub char-table contents slot is where we think it is. */ 1767/* Make sure that sub char-table contents slot is where we think it is. */
1768verify (offsetof (struct Lisp_Sub_Char_Table, contents) 1768verify (offsetof (struct Lisp_Sub_Char_Table, contents)
1769 == offsetof (struct Lisp_Vector, contents[SUB_CHAR_TABLE_OFFSET])); 1769 == (offsetof (struct Lisp_Vector, contents)
1770 + SUB_CHAR_TABLE_OFFSET * sizeof (Lisp_Object)));
1770 1771
1771/*********************************************************************** 1772/***********************************************************************
1772 Symbols 1773 Symbols
diff --git a/src/nsterm.m b/src/nsterm.m
index 38aa4a3a413..4048ac46546 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -646,41 +646,128 @@ ns_release_autorelease_pool (void *pool)
646} 646}
647 647
648 648
649/* True, if the menu bar should be hidden. */
650
651static BOOL 649static BOOL
652ns_menu_bar_should_be_hidden (void) 650ns_menu_bar_should_be_hidden (void)
651/* True, if the menu bar should be hidden. */
653{ 652{
654 return !NILP (ns_auto_hide_menu_bar) 653 return !NILP (ns_auto_hide_menu_bar)
655 && [NSApp respondsToSelector:@selector(setPresentationOptions:)]; 654 && [NSApp respondsToSelector:@selector(setPresentationOptions:)];
656} 655}
657 656
658 657
659static CGFloat 658struct EmacsMargins
660ns_menu_bar_height (NSScreen *screen) 659{
661/* The height of the menu bar, if visible. 660 CGFloat top;
661 CGFloat bottom;
662 CGFloat left;
663 CGFloat right;
664};
662 665
663 Note: Don't use this when fullscreen is enabled -- the screen 666
664 sometimes includes, sometimes excludes the menu bar area. */ 667static struct EmacsMargins
668ns_screen_margins (NSScreen *screen)
669/* The parts of SCREEN used by the operating system. */
665{ 670{
666 CGFloat res; 671 NSTRACE ("ns_screen_margins");
672
673 struct EmacsMargins margins;
667 674
675 NSRect screenFrame = [screen frame];
676 NSRect screenVisibleFrame = [screen visibleFrame];
677
678 /* Sometimes, visibleFrame isn't up-to-date with respect to a hidden
679 menu bar, check this explicitly. */
668 if (ns_menu_bar_should_be_hidden()) 680 if (ns_menu_bar_should_be_hidden())
669 { 681 {
670 res = 0; 682 margins.top = 0;
671 } 683 }
672 else 684 else
673 { 685 {
674 NSRect screenFrame = [screen frame];
675 NSRect screenVisibleFrame = [screen visibleFrame];
676
677 CGFloat frameTop = screenFrame.origin.y + screenFrame.size.height; 686 CGFloat frameTop = screenFrame.origin.y + screenFrame.size.height;
678 CGFloat visibleFrameTop = (screenVisibleFrame.origin.y 687 CGFloat visibleFrameTop = (screenVisibleFrame.origin.y
679 + screenVisibleFrame.size.height); 688 + screenVisibleFrame.size.height);
680 689
681 res = frameTop - visibleFrameTop; 690 margins.top = frameTop - visibleFrameTop;
691 }
692
693 {
694 CGFloat frameRight = screenFrame.origin.x + screenFrame.size.width;
695 CGFloat visibleFrameRight = (screenVisibleFrame.origin.x
696 + screenVisibleFrame.size.width);
697 margins.right = frameRight - visibleFrameRight;
698 }
699
700 margins.bottom = screenVisibleFrame.origin.y - screenFrame.origin.y;
701 margins.left = screenVisibleFrame.origin.x - screenFrame.origin.x;
702
703 NSTRACE_MSG ("left:%g right:%g top:%g bottom:%g",
704 margins.left,
705 margins.right,
706 margins.top,
707 margins.bottom);
708
709 return margins;
710}
711
712
713/* A screen margin between 1 and DOCK_IGNORE_LIMIT (inclusive) is
714 assumed to contain a hidden dock. OS X currently use 4 pixels for
715 this, however, to be future compatible, a larger value is used. */
716#define DOCK_IGNORE_LIMIT 6
717
718static struct EmacsMargins
719ns_screen_margins_ignoring_hidden_dock (NSScreen *screen)
720/* The parts of SCREEN used by the operating system, excluding the parts
721reserved for an hidden dock. */
722{
723 NSTRACE ("ns_screen_margins_ignoring_hidden_dock");
682 724
725 struct EmacsMargins margins = ns_screen_margins(screen);
726
727 /* OS X (currently) reserved 4 pixels along the edge where a hidden
728 dock is located. Unfortunately, it's not possible to find the
729 location and information about if the dock is hidden. Instead,
730 it is assumed that if the margin of an edge is less than
731 DOCK_IGNORE_LIMIT, it contains a hidden dock. */
732 if (margins.left <= DOCK_IGNORE_LIMIT)
733 {
734 margins.left = 0;
683 } 735 }
736 if (margins.right <= DOCK_IGNORE_LIMIT)
737 {
738 margins.right = 0;
739 }
740 if (margins.top <= DOCK_IGNORE_LIMIT)
741 {
742 margins.top = 0;
743 }
744 /* Note: This doesn't occur in current versions of OS X, but
745 included for completeness and future compatibility. */
746 if (margins.bottom <= DOCK_IGNORE_LIMIT)
747 {
748 margins.bottom = 0;
749 }
750
751 NSTRACE_MSG ("left:%g right:%g top:%g bottom:%g",
752 margins.left,
753 margins.right,
754 margins.top,
755 margins.bottom);
756
757 return margins;
758}
759
760
761static CGFloat
762ns_menu_bar_height (NSScreen *screen)
763/* The height of the menu bar, if visible.
764
765 Note: Don't use this when fullscreen is enabled -- the screen
766 sometimes includes, sometimes excludes the menu bar area. */
767{
768 struct EmacsMargins margins = ns_screen_margins(screen);
769
770 CGFloat res = margins.top;
684 771
685 NSTRACE ("ns_menu_bar_height " NSTRACE_FMT_RETURN " %.0f", res); 772 NSTRACE ("ns_menu_bar_height " NSTRACE_FMT_RETURN " %.0f", res);
686 773
@@ -1172,10 +1259,31 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
1172 ========================================================================== */ 1259 ========================================================================== */
1173 1260
1174 1261
1262// This bell implementation shows the visual bell image asynchronously
1263// from the rest of Emacs. This is done by adding a NSView to the
1264// superview of the Emacs window and removing it using a timer.
1265//
1266// Unfortunately, some Emacs operations, like scrolling, is done using
1267// low-level primitives that copy the content of the window, including
1268// the bell image. To some extent, this is handled by removing the
1269// image prior to scrolling and marking that the window is in need for
1270// redisplay.
1271//
1272// To test this code, make sure that there is no artifacts of the bell
1273// image in the following situations. Use a non-empty buffer (like the
1274// tutorial) to ensure that a scroll is performed:
1275//
1276// * Single-window: C-g C-v
1277//
1278// * Side-by-windows: C-x 3 C-g C-v
1279//
1280// * Windows above each other: C-x 2 C-g C-v
1281
1175@interface EmacsBell : NSImageView 1282@interface EmacsBell : NSImageView
1176{ 1283{
1177 // Number of currently active bell:s. 1284 // Number of currently active bell:s.
1178 unsigned int nestCount; 1285 unsigned int nestCount;
1286 NSView * mView;
1179 bool isAttached; 1287 bool isAttached;
1180} 1288}
1181- (void)show:(NSView *)view; 1289- (void)show:(NSView *)view;
@@ -1204,7 +1312,6 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
1204 [self.image unlockFocus]; 1312 [self.image unlockFocus];
1205#else 1313#else
1206 self.image = [NSImage imageNamed:NSImageNameCaution]; 1314 self.image = [NSImage imageNamed:NSImageNameCaution];
1207 [self.image setScalesWhenResized:YES];
1208 [self.image setSize:NSMakeSize(self.image.size.width * 5, 1315 [self.image setSize:NSMakeSize(self.image.size.width * 5,
1209 self.image.size.height * 5)]; 1316 self.image.size.height * 5)];
1210#endif 1317#endif
@@ -1229,6 +1336,7 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
1229 [self setFrameSize:self.image.size]; 1336 [self setFrameSize:self.image.size];
1230 1337
1231 isAttached = true; 1338 isAttached = true;
1339 mView = view;
1232 [[[view window] contentView] addSubview:self 1340 [[[view window] contentView] addSubview:self
1233 positioned:NSWindowAbove 1341 positioned:NSWindowAbove
1234 relativeTo:nil]; 1342 relativeTo:nil];
@@ -1258,9 +1366,12 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
1258 1366
1259-(void)remove 1367-(void)remove
1260{ 1368{
1369 NSTRACE ("[EmacsBell remove]");
1261 if (isAttached) 1370 if (isAttached)
1262 { 1371 {
1372 NSTRACE_MSG ("removeFromSuperview");
1263 [self removeFromSuperview]; 1373 [self removeFromSuperview];
1374 mView.needsDisplay = YES;
1264 isAttached = false; 1375 isAttached = false;
1265 } 1376 }
1266} 1377}
@@ -1310,6 +1421,8 @@ static void hide_bell ()
1310 Ensure the bell is hidden. 1421 Ensure the bell is hidden.
1311 -------------------------------------------------------------------------- */ 1422 -------------------------------------------------------------------------- */
1312{ 1423{
1424 NSTRACE ("hide_bell");
1425
1313 if (bell_view != nil) 1426 if (bell_view != nil)
1314 { 1427 {
1315 [bell_view remove]; 1428 [bell_view remove];
@@ -2392,6 +2505,8 @@ ns_clear_frame_area (struct frame *f, int x, int y, int width, int height)
2392static void 2505static void
2393ns_copy_bits (struct frame *f, NSRect src, NSRect dest) 2506ns_copy_bits (struct frame *f, NSRect src, NSRect dest)
2394{ 2507{
2508 NSTRACE ("ns_copy_bits");
2509
2395 if (FRAME_NS_VIEW (f)) 2510 if (FRAME_NS_VIEW (f))
2396 { 2511 {
2397 hide_bell(); // Ensure the bell image isn't scrolled. 2512 hide_bell(); // Ensure the bell image isn't scrolled.
@@ -7839,9 +7954,10 @@ not_in_argv (NSString *arg)
7839 // the menu-bar. 7954 // the menu-bar.
7840 [super zoom:sender]; 7955 [super zoom:sender];
7841 7956
7842#elsif 0 7957#elif 0
7843 // Native zoom done using the standard zoom animation, plus an 7958 // Native zoom done using the standard zoom animation, plus an
7844 // explicit resize to cover the full screen. 7959 // explicit resize to cover the full screen, except the menu-bar and
7960 // dock, if present.
7845 [super zoom:sender]; 7961 [super zoom:sender];
7846 7962
7847 // After the native zoom, resize the resulting frame to fill the 7963 // After the native zoom, resize the resulting frame to fill the
@@ -7861,6 +7977,9 @@ not_in_argv (NSString *arg)
7861 NSTRACE_FSTYPE ("fullscreenState", fs_state); 7977 NSTRACE_FSTYPE ("fullscreenState", fs_state);
7862 7978
7863 NSRect sr = [screen frame]; 7979 NSRect sr = [screen frame];
7980 struct EmacsMargins margins
7981 = ns_screen_margins_ignoring_hidden_dock(screen);
7982
7864 NSRect wr = [self frame]; 7983 NSRect wr = [self frame];
7865 NSTRACE_RECT ("Rect after zoom", wr); 7984 NSTRACE_RECT ("Rect after zoom", wr);
7866 7985
@@ -7869,15 +7988,15 @@ not_in_argv (NSString *arg)
7869 if (fs_state == FULLSCREEN_MAXIMIZED 7988 if (fs_state == FULLSCREEN_MAXIMIZED
7870 || fs_state == FULLSCREEN_HEIGHT) 7989 || fs_state == FULLSCREEN_HEIGHT)
7871 { 7990 {
7872 newWr.origin.x = 0; 7991 newWr.origin.y = sr.origin.y + margins.bottom;
7873 newWr.size.height = sr.size.height - ns_menu_bar_height(screen); 7992 newWr.size.height = sr.size.height - margins.top - margins.bottom;
7874 } 7993 }
7875 7994
7876 if (fs_state == FULLSCREEN_MAXIMIZED 7995 if (fs_state == FULLSCREEN_MAXIMIZED
7877 || fs_state == FULLSCREEN_WIDTH) 7996 || fs_state == FULLSCREEN_WIDTH)
7878 { 7997 {
7879 newWr.origin.y = 0; 7998 newWr.origin.x = sr.origin.x + margins.left;
7880 newWr.size.width = sr.size.width; 7999 newWr.size.width = sr.size.width - margins.right - margins.left;
7881 } 8000 }
7882 8001
7883 if (newWr.size.width != wr.size.width 8002 if (newWr.size.width != wr.size.width
@@ -7890,13 +8009,20 @@ not_in_argv (NSString *arg)
7890 } 8009 }
7891 } 8010 }
7892#else 8011#else
7893 // Non-native zoom which is done instantaneously. The resulting frame 8012 // Non-native zoom which is done instantaneously. The resulting
7894 // covers the entire screen, except the menu-bar, if present. 8013 // frame covers the entire screen, except the menu-bar and dock, if
8014 // present.
7895 NSScreen * screen = [self screen]; 8015 NSScreen * screen = [self screen];
7896 if (screen != nil) 8016 if (screen != nil)
7897 { 8017 {
7898 NSRect sr = [screen frame]; 8018 NSRect sr = [screen frame];
7899 sr.size.height -= ns_menu_bar_height (screen); 8019 struct EmacsMargins margins
8020 = ns_screen_margins_ignoring_hidden_dock(screen);
8021
8022 sr.size.height -= (margins.top + margins.bottom);
8023 sr.size.width -= (margins.left + margins.right);
8024 sr.origin.x += margins.left;
8025 sr.origin.y += margins.bottom;
7900 8026
7901 sr = [[self delegate] windowWillUseStandardFrame:self 8027 sr = [[self delegate] windowWillUseStandardFrame:self
7902 defaultFrame:sr]; 8028 defaultFrame:sr];
diff --git a/src/term.c b/src/term.c
index 17f36795998..a77e5729b5b 100644
--- a/src/term.c
+++ b/src/term.c
@@ -3402,9 +3402,11 @@ static void
3402tty_pop_down_menu (Lisp_Object arg) 3402tty_pop_down_menu (Lisp_Object arg)
3403{ 3403{
3404 tty_menu *menu = XSAVE_POINTER (arg, 0); 3404 tty_menu *menu = XSAVE_POINTER (arg, 0);
3405 struct buffer *orig_buffer = XSAVE_POINTER (arg, 1);
3405 3406
3406 block_input (); 3407 block_input ();
3407 tty_menu_destroy (menu); 3408 tty_menu_destroy (menu);
3409 set_buffer_internal (orig_buffer);
3408 unblock_input (); 3410 unblock_input ();
3409} 3411}
3410 3412
@@ -3683,7 +3685,10 @@ tty_menu_show (struct frame *f, int x, int y, int menuflags,
3683 3685
3684 pane = selidx = 0; 3686 pane = selidx = 0;
3685 3687
3686 record_unwind_protect (tty_pop_down_menu, make_save_ptr (menu)); 3688 /* We save and restore the current buffer because tty_menu_activate
3689 triggers redisplay, which switches buffers at will. */
3690 record_unwind_protect (tty_pop_down_menu,
3691 make_save_ptr_ptr (menu, current_buffer));
3687 3692
3688 specbind (Qoverriding_terminal_local_map, 3693 specbind (Qoverriding_terminal_local_map,
3689 Fsymbol_value (Qtty_menu_navigation_map)); 3694 Fsymbol_value (Qtty_menu_navigation_map));
diff --git a/src/w32font.c b/src/w32font.c
index a1878adb4bd..018e6572563 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -796,7 +796,8 @@ w32font_list_internal (struct frame *f, Lisp_Object font_spec,
796 && !EQ (spec_charset, Qiso10646_1) 796 && !EQ (spec_charset, Qiso10646_1)
797 && !EQ (spec_charset, Qunicode_bmp) 797 && !EQ (spec_charset, Qunicode_bmp)
798 && !EQ (spec_charset, Qunicode_sip) 798 && !EQ (spec_charset, Qunicode_sip)
799 && !EQ (spec_charset, Qunknown)) 799 && !EQ (spec_charset, Qunknown)
800 && !EQ (spec_charset, Qascii_0))
800 return Qnil; 801 return Qnil;
801 } 802 }
802 803
diff --git a/src/xdisp.c b/src/xdisp.c
index ce992d42531..5be94f0cd07 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7229,18 +7229,21 @@ get_next_display_element (struct it *it)
7229 { 7229 {
7230 ptrdiff_t ignore; 7230 ptrdiff_t ignore;
7231 int next_face_id; 7231 int next_face_id;
7232 bool text_from_string = false;
7233 /* Normally, the next buffer location is stored in
7234 IT->current.pos... */
7232 struct text_pos pos = it->current.pos; 7235 struct text_pos pos = it->current.pos;
7233 7236
7234 /* For a string from a display property, the next 7237 /* ...but for a string from a display property, the
7235 buffer position is stored in the 'position' 7238 next buffer position is stored in the 'position'
7236 member of the iteration stack slot below the 7239 member of the iteration stack slot below the
7237 current one, see handle_single_display_spec. By 7240 current one, see handle_single_display_spec. By
7238 contrast, it->current.pos was not yet updated 7241 contrast, it->current.pos was not yet updated to
7239 to point to that buffer position; that will 7242 point to that buffer position; that will happen
7240 happen in pop_it, after we finish displaying the 7243 in pop_it, after we finish displaying the current
7241 current string. Note that we already checked 7244 string. Note that we already checked above that
7242 above that it->sp is positive, so subtracting one 7245 it->sp is positive, so subtracting one from it is
7243 from it is safe. */ 7246 safe. */
7244 if (it->from_disp_prop_p) 7247 if (it->from_disp_prop_p)
7245 { 7248 {
7246 int stackp = it->sp - 1; 7249 int stackp = it->sp - 1;
@@ -7249,19 +7252,49 @@ get_next_display_element (struct it *it)
7249 while (stackp >= 0 7252 while (stackp >= 0
7250 && STRINGP ((it->stack + stackp)->string)) 7253 && STRINGP ((it->stack + stackp)->string))
7251 stackp--; 7254 stackp--;
7252 eassert (stackp >= 0); 7255 if (stackp < 0)
7253 pos = (it->stack + stackp)->position; 7256 {
7257 /* If no stack slot was found for iterating
7258 a buffer, we are displaying text from a
7259 string, most probably the mode line or
7260 the header line, and that string has a
7261 display string on some of its
7262 characters. */
7263 text_from_string = true;
7264 pos = it->stack[it->sp - 1].position;
7265 }
7266 else
7267 pos = (it->stack + stackp)->position;
7254 } 7268 }
7255 else 7269 else
7256 INC_TEXT_POS (pos, it->multibyte_p); 7270 INC_TEXT_POS (pos, it->multibyte_p);
7257 7271
7258 if (CHARPOS (pos) >= ZV) 7272 if (text_from_string)
7273 {
7274 Lisp_Object base_string = it->stack[it->sp - 1].string;
7275
7276 if (CHARPOS (pos) >= SCHARS (base_string) - 1)
7277 it->end_of_box_run_p = true;
7278 else
7279 {
7280 next_face_id
7281 = face_at_string_position (it->w, base_string,
7282 CHARPOS (pos), 0,
7283 &ignore, face_id, false);
7284 it->end_of_box_run_p
7285 = (FACE_FROM_ID (it->f, next_face_id)->box
7286 == FACE_NO_BOX);
7287 }
7288 }
7289 else if (CHARPOS (pos) >= ZV)
7259 it->end_of_box_run_p = true; 7290 it->end_of_box_run_p = true;
7260 else 7291 else
7261 { 7292 {
7262 next_face_id = face_at_buffer_position 7293 next_face_id =
7263 (it->w, CHARPOS (pos), &ignore, 7294 face_at_buffer_position (it->w, CHARPOS (pos), &ignore,
7264 CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, false, -1); 7295 CHARPOS (pos)
7296 + TEXT_PROP_DISTANCE_LIMIT,
7297 false, -1);
7265 it->end_of_box_run_p 7298 it->end_of_box_run_p
7266 = (FACE_FROM_ID (it->f, next_face_id)->box 7299 = (FACE_FROM_ID (it->f, next_face_id)->box
7267 == FACE_NO_BOX); 7300 == FACE_NO_BOX);
@@ -10524,8 +10557,8 @@ ensure_echo_area_buffers (void)
10524 suitable buffer from echo_buffer[] and clear it. 10557 suitable buffer from echo_buffer[] and clear it.
10525 10558
10526 If WHICH < 0, set echo_area_buffer[1] to echo_area_buffer[0], so 10559 If WHICH < 0, set echo_area_buffer[1] to echo_area_buffer[0], so
10527 that the current message becomes the last displayed one, make 10560 that the current message becomes the last displayed one, choose a
10528 choose a suitable buffer for echo_area_buffer[0], and clear it. 10561 suitable buffer for echo_area_buffer[0], and clear it.
10529 10562
10530 Value is what FN returns. */ 10563 Value is what FN returns. */
10531 10564
@@ -10559,7 +10592,7 @@ with_echo_area_buffer (struct window *w, int which,
10559 echo_area_buffer[this_one] = Qnil; 10592 echo_area_buffer[this_one] = Qnil;
10560 } 10593 }
10561 10594
10562 /* Choose a suitable buffer from echo_buffer[] is we don't 10595 /* Choose a suitable buffer from echo_buffer[] if we don't
10563 have one. */ 10596 have one. */
10564 if (NILP (echo_area_buffer[this_one])) 10597 if (NILP (echo_area_buffer[this_one]))
10565 { 10598 {
@@ -17049,7 +17082,16 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
17049 ignore_mouse_drag_p = true; 17082 ignore_mouse_drag_p = true;
17050#endif 17083#endif
17051 } 17084 }
17085 ptrdiff_t count1 = SPECPDL_INDEX ();
17086 /* x_consider_frame_title calls select-frame, which calls
17087 resize_mini_window, which could resize the mini-window and by
17088 that undo the effect of this redisplay cycle wrt minibuffer
17089 and echo-area display. Binding inhibit-redisplay to t makes
17090 the call to resize_mini_window a no-op, thus avoiding the
17091 adverse side effects. */
17092 specbind (Qinhibit_redisplay, Qt);
17052 x_consider_frame_title (w->frame); 17093 x_consider_frame_title (w->frame);
17094 unbind_to (count1, Qnil);
17053#endif 17095#endif
17054 } 17096 }
17055 17097
@@ -31389,8 +31431,11 @@ Value is a number or a cons (WIDTH-DPI . HEIGHT-DPI). */);
31389 Vtruncate_partial_width_windows, 31431 Vtruncate_partial_width_windows,
31390 doc: /* Non-nil means truncate lines in windows narrower than the frame. 31432 doc: /* Non-nil means truncate lines in windows narrower than the frame.
31391For an integer value, truncate lines in each window narrower than the 31433For an integer value, truncate lines in each window narrower than the
31392full frame width, provided the window width is less than that integer; 31434full frame width, provided the total window width in column units is less
31393otherwise, respect the value of `truncate-lines'. 31435than that integer; otherwise, respect the value of `truncate-lines'.
31436The total width of the window is as returned by `window-total-width', it
31437includes the fringes, the continuation and truncation glyphs, the
31438display margins (if any), and the scroll bar
31394 31439
31395For any other non-nil value, truncate lines in all windows that do 31440For any other non-nil value, truncate lines in all windows that do
31396not span the full frame width. 31441not span the full frame width.
@@ -31598,7 +31643,12 @@ A value of t means resize them to fit the text displayed in them.
31598A value of `grow-only', the default, means let mini-windows grow only; 31643A value of `grow-only', the default, means let mini-windows grow only;
31599they return to their normal size when the minibuffer is closed, or the 31644they return to their normal size when the minibuffer is closed, or the
31600echo area becomes empty. */); 31645echo area becomes empty. */);
31601 Vresize_mini_windows = Qgrow_only; 31646 /* Contrary to the doc string, we initialize this to nil, so that
31647 loading loadup.el won't try to resize windows before loading
31648 window.el, where some functions we need to call for this live.
31649 We assign the 'grow-only' value right after loading window.el
31650 during loadup. */
31651 Vresize_mini_windows = Qnil;
31602 31652
31603 DEFVAR_LISP ("blink-cursor-alist", Vblink_cursor_alist, 31653 DEFVAR_LISP ("blink-cursor-alist", Vblink_cursor_alist,
31604 doc: /* Alist specifying how to blink the cursor off. 31654 doc: /* Alist specifying how to blink the cursor off.
diff --git a/src/xfns.c b/src/xfns.c
index 0a4a09ef285..b22af5c830d 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -273,7 +273,7 @@ x_real_pos_and_offsets (struct frame *f,
273 XFree (tmp_children); 273 XFree (tmp_children);
274#endif 274#endif
275 275
276 if (wm_window == rootw || had_errors) 276 if (had_errors || wm_window == rootw)
277 break; 277 break;
278 278
279 win = wm_window; 279 win = wm_window;
diff --git a/src/xwidget.c b/src/xwidget.c
index d438d879098..c24475f5312 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -767,14 +767,14 @@ VALUE is the amount to scroll, either relatively or absolutely. */)
767 Lisp_Object value) 767 Lisp_Object value)
768{ 768{
769 CHECK_XWIDGET (xwidget); 769 CHECK_XWIDGET (xwidget);
770 CHECK_NATNUM (value); 770 CHECK_NUMBER (value);
771 struct xwidget *xw = XXWIDGET (xwidget); 771 struct xwidget *xw = XXWIDGET (xwidget);
772 GtkAdjustment *adjustment 772 GtkAdjustment *adjustment
773 = ((EQ (Qhorizontal, axis) 773 = ((EQ (Qhorizontal, axis)
774 ? gtk_scrolled_window_get_hadjustment 774 ? gtk_scrolled_window_get_hadjustment
775 : gtk_scrolled_window_get_vadjustment) 775 : gtk_scrolled_window_get_vadjustment)
776 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr))); 776 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr)));
777 double final_value = XFASTINT (value); 777 double final_value = XINT (value);
778 if (EQ (Qt, relative)) 778 if (EQ (Qt, relative))
779 final_value += gtk_adjustment_get_value (adjustment); 779 final_value += gtk_adjustment_get_value (adjustment);
780 gtk_adjustment_set_value (adjustment, final_value); 780 gtk_adjustment_set_value (adjustment, final_value);
diff --git a/test/automated/map-tests.el b/test/automated/map-tests.el
index d145c197a4e..20cb0f6b399 100644
--- a/test/automated/map-tests.el
+++ b/test/automated/map-tests.el
@@ -87,9 +87,16 @@ Evaluate BODY for each created map.
87 (let ((vec [3 4 5])) 87 (let ((vec [3 4 5]))
88 (should-error (setf (map-elt vec 3) 6)))) 88 (should-error (setf (map-elt vec 3) 6))))
89 89
90(ert-deftest test-map-put-alist-new-key ()
91 "Regression test for Bug#23105."
92 (let ((alist '((0 . a))))
93 (map-put alist 2 'b)
94 (should (eq (map-elt alist 2)
95 'b))))
96
90(ert-deftest test-map-put-return-value () 97(ert-deftest test-map-put-return-value ()
91 (let ((ht (make-hash-table))) 98 (let ((ht (make-hash-table)))
92 (should (eq (map-put ht 'a 'hello) ht)))) 99 (should (eq (map-put ht 'a 'hello) 'hello))))
93 100
94(ert-deftest test-map-delete () 101(ert-deftest test-map-delete ()
95 (with-maps-do map 102 (with-maps-do map
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index e10946efa96..55806454741 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -466,7 +466,7 @@ Must called from within a `tar-mode' buffer."
466 (cons (format "HOME=%s" homedir) 466 (cons (format "HOME=%s" homedir)
467 process-environment))) 467 process-environment)))
468 (epg-check-configuration (epg-configuration)) 468 (epg-check-configuration (epg-configuration))
469 t) 469 (epg-find-configuration 'OpenPGP))
470 (delete-directory homedir t))))) 470 (delete-directory homedir t)))))
471 (let* ((keyring (expand-file-name "key.pub" package-test-data-dir)) 471 (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
472 (package-test-data-dir 472 (package-test-data-dir
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
index 4fa7470218a..7e85fb83edd 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -449,6 +449,14 @@ VALUES-PLIST is a list with alternating index and value elements."
449 ;; It's confused by the closing paren in the middle. 449 ;; It's confused by the closing paren in the middle.
450 (ruby-assert-state s 8 nil))) 450 (ruby-assert-state s 8 nil)))
451 451
452(ert-deftest ruby-interpolation-inside-another-interpolation ()
453 :expected-result :failed
454 (let ((s "\"#{[a, b, c].map { |v| \"#{v}\" }.join}\""))
455 (ruby-assert-face s 1 font-lock-string-face)
456 (ruby-assert-face s 2 font-lock-variable-name-face)
457 (ruby-assert-face s 38 font-lock-string-face)
458 (ruby-assert-state s 8 nil)))
459
452(ert-deftest ruby-interpolation-inside-double-quoted-percent-literals () 460(ert-deftest ruby-interpolation-inside-double-quoted-percent-literals ()
453 (ruby-assert-face "%Q{foo #@bar}" 8 font-lock-variable-name-face) 461 (ruby-assert-face "%Q{foo #@bar}" 8 font-lock-variable-name-face)
454 (ruby-assert-face "%W{foo #@bar}" 8 font-lock-variable-name-face) 462 (ruby-assert-face "%W{foo #@bar}" 8 font-lock-variable-name-face)
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
index a29e42e7343..d9563ec9174 100644
--- a/test/automated/tramp-tests.el
+++ b/test/automated/tramp-tests.el
@@ -1785,6 +1785,14 @@ Several special characters do not work properly there."
1785 (file-truename tramp-test-temporary-file-directory) nil 1785 (file-truename tramp-test-temporary-file-directory) nil
1786 (string-match "^HP-UX" (tramp-get-connection-property v "uname" "")))) 1786 (string-match "^HP-UX" (tramp-get-connection-property v "uname" ""))))
1787 1787
1788(defun tramp--test-darwin-p ()
1789 "Check, whether the remote host runs Mac OS X.
1790Several special characters do not work properly there."
1791 ;; We must refill the cache. `file-truename' does it.
1792 (with-parsed-tramp-file-name
1793 (file-truename tramp-test-temporary-file-directory) nil
1794 (string-match "^Darwin" (tramp-get-connection-property v "uname" ""))))
1795
1788(defun tramp--test-check-files (&rest files) 1796(defun tramp--test-check-files (&rest files)
1789 "Run a simple but comprehensive test over every file in FILES." 1797 "Run a simple but comprehensive test over every file in FILES."
1790 ;; We must use `file-truename' for the temporary directory, because 1798 ;; We must use `file-truename' for the temporary directory, because
@@ -2038,9 +2046,10 @@ Use the `ls' command."
2038 (file-name-coding-system 'utf-8)) 2046 (file-name-coding-system 'utf-8))
2039 (tramp--test-check-files 2047 (tramp--test-check-files
2040 (unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ") 2048 (unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ")
2041 (unless (tramp--test-hpux-p) 2049 (unless (or (tramp--test-hpux-p) (tramp--test-darwin-p))
2042 "أصبح بوسعك الآن تنزيل نسخة كاملة من موسوعة ويكيبيديا العربية لتصفحها بلا اتصال بالإنترنت") 2050 "أصبح بوسعك الآن تنزيل نسخة كاملة من موسوعة ويكيبيديا العربية لتصفحها بلا اتصال بالإنترنت")
2043 "银河系漫游指南系列" 2051 (unless (tramp--test-darwin-p)
2052 "银河系漫游指南系列")
2044 "Автостопом по гала́ктике"))) 2053 "Автостопом по гала́ктике")))
2045 2054
2046(ert-deftest tramp-test32-utf8 () 2055(ert-deftest tramp-test32-utf8 ()
diff --git a/test/automated/xt-mouse-tests.el b/test/automated/xt-mouse-tests.el
new file mode 100644
index 00000000000..c7e835c0311
--- /dev/null
+++ b/test/automated/xt-mouse-tests.el
@@ -0,0 +1,110 @@
1;;; xt-mouse-tests.el --- Test suite for xt-mouse. -*- lexical-binding: t; -*-
2
3;; Copyright (C) 2016 Free Software Foundation, Inc.
4
5;; Author: Philipp Stephani <phst@google.com>
6
7;; This file is part of GNU Emacs.
8
9;; GNU Emacs is free software: you can redistribute it and/or modify
10;; it under the terms of the GNU General Public License as published by
11;; the Free Software Foundation, either version 3 of the License, or
12;; (at your option) any later version.
13
14;; GNU Emacs is distributed in the hope that it will be useful,
15;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;; GNU General Public License for more details.
18
19;; You should have received a copy of the GNU General Public License
20;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22;;; Commentary:
23
24;;; Code:
25
26(require 'xt-mouse)
27
28(defmacro with-xterm-mouse-mode (&rest body)
29 "Run BODY with `xterm-mouse-mode' temporarily enabled."
30 (declare (indent 0))
31 ;; Make the frame huge so that the test input events below don't hit
32 ;; the menu bar.
33 `(cl-letf (((frame-width nil) 2000)
34 ((frame-height nil) 2000)
35 ;; Reset XTerm parameters so that the tests don't get
36 ;; confused.
37 ((terminal-parameter nil 'xterm-mouse-x) nil)
38 ((terminal-parameter nil 'xterm-mouse-y) nil)
39 ((terminal-parameter nil 'xterm-mouse-last-down) nil)
40 ((terminal-parameter nil 'xterm-mouse-last-click) nil))
41 (if xterm-mouse-mode
42 (progn ,@body)
43 (unwind-protect
44 (progn
45 ;; `xterm-mouse-mode' doesn't work in the initial
46 ;; terminal. Since we can't create a second terminal in
47 ;; batch mode, fake it temporarily.
48 (cl-letf (((symbol-function 'terminal-name)
49 (lambda (&optional _terminal) "fake-terminal")))
50 (xterm-mouse-mode))
51 ,@body)
52 (xterm-mouse-mode 0)))))
53
54(ert-deftest xt-mouse-tracking-basic ()
55 (should (equal (xterm-mouse-tracking-enable-sequence)
56 "\e[?1000h\e[?1002h\e[?1006h"))
57 (should (equal (xterm-mouse-tracking-disable-sequence)
58 "\e[?1006l\e[?1002l\e[?1000l"))
59 (with-xterm-mouse-mode
60 (should xterm-mouse-mode)
61 (should (terminal-parameter nil 'xterm-mouse-mode))
62 (should-not (terminal-parameter nil 'xterm-mouse-utf-8))
63 (let* ((unread-command-events (append "\e[M%\xD9\x81"
64 "\e[M'\xD9\x81" nil))
65 (key (read-key)))
66 (should (consp key))
67 (cl-destructuring-bind (event-type position . rest) key
68 (should (equal event-type 'S-mouse-2))
69 (should (consp position))
70 (cl-destructuring-bind (_ _ xy . rest) position
71 (should (equal xy '(184 . 95))))))))
72
73(ert-deftest xt-mouse-tracking-utf-8 ()
74 (let ((xterm-mouse-utf-8 t))
75 (should (equal (xterm-mouse-tracking-enable-sequence)
76 "\e[?1000h\e[?1002h\e[?1005h\e[?1006h"))
77 (should (equal (xterm-mouse-tracking-disable-sequence)
78 "\e[?1006l\e[?1005l\e[?1002l\e[?1000l"))
79 (with-xterm-mouse-mode
80 (should xterm-mouse-mode)
81 (should (terminal-parameter nil 'xterm-mouse-mode))
82 (should (terminal-parameter nil 'xterm-mouse-utf-8))
83 ;; The keyboard driver doesn't decode bytes in
84 ;; `unread-command-events'.
85 (let* ((unread-command-events (append "\e[M%\u0640\u0131"
86 "\e[M'\u0640\u0131" nil))
87 (key (read-key)))
88 (should (consp key))
89 (cl-destructuring-bind (event-type position . rest) key
90 (should (equal event-type 'S-mouse-2))
91 (should (consp position))
92 (cl-destructuring-bind (_ _ xy . rest) position
93 (should (equal xy '(1567 . 271)))))))))
94
95(ert-deftest xt-mouse-tracking-sgr ()
96 (with-xterm-mouse-mode
97 (should xterm-mouse-mode)
98 (should (terminal-parameter nil 'xterm-mouse-mode))
99 (should-not (terminal-parameter nil 'xterm-mouse-utf-8))
100 (let* ((unread-command-events (append "\e[<5;1569;273;M"
101 "\e[<5;1569;273;m" nil))
102 (key (read-key)))
103 (should (consp key))
104 (cl-destructuring-bind (event-type position . rest) key
105 (should (equal event-type 'S-mouse-2))
106 (should (consp position))
107 (cl-destructuring-bind (_ _ xy . rest) position
108 (should (equal xy '(1568 . 271))))))))
109
110;;; xt-mouse-tests.el ends here
diff --git a/test/indent/ruby.rb b/test/indent/ruby.rb
index 51923f79373..b038512b114 100644
--- a/test/indent/ruby.rb
+++ b/test/indent/ruby.rb
@@ -222,7 +222,7 @@ foo.
222 bar 222 bar
223 223
224# https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206 224# https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206
225foo 225foo # comment intended to confuse the tokenizer
226 .bar 226 .bar
227 227
228z = { 228z = {
@@ -295,10 +295,31 @@ foo > bar &&
295 tee < qux 295 tee < qux
296 296
297zux do 297zux do
298 foo == bar and 298 foo == bar &&
299 tee == qux 299 tee == qux
300
301 a = 3 and
302 b = 4
300end 303end
301 304
305foo + bar ==
306 tee + qux
307
3081 .. 2 &&
309 3
310
3113 < 4 +
312 5
313
31410 << 4 ^
315 20
316
317100 + 2 >>
318 3
319
3202 ** 10 /
321 2
322
302foo ^ 323foo ^
303 bar 324 bar
304 325
@@ -317,6 +338,11 @@ def bar
317 .baz 338 .baz
318end 339end
319 340
341abc(foo
342 .bar,
343 tee
344 .qux)
345
320# http://stackoverflow.com/questions/17786563/emacs-ruby-mode-if-expressions-indentation 346# http://stackoverflow.com/questions/17786563/emacs-ruby-mode-if-expressions-indentation
321tee = if foo 347tee = if foo
322 bar 348 bar
@@ -400,6 +426,17 @@ zoo
400a.records().map(&:b).zip( 426a.records().map(&:b).zip(
401 foo) 427 foo)
402 428
429foo1 =
430 subject.update(
431 1
432 )
433
434foo2 =
435 subject.
436 update(
437 2
438 )
439
403# FIXME: This is not consistent with the example below it, but this 440# FIXME: This is not consistent with the example below it, but this
404# offset only happens if the colon is at eol, which wouldn't be often. 441# offset only happens if the colon is at eol, which wouldn't be often.
405# Tokenizing `bar:' as `:bar =>' would be better, but it's hard to 442# Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
@@ -410,6 +447,12 @@ foo(bar:
410foo(:bar => 447foo(:bar =>
411 tee) 448 tee)
412 449
450regions = foo(
451 OpenStruct.new(id: 0, name: "foo") => [
452 10
453 ]
454)
455
413{'a' => { 456{'a' => {
414 'b' => 'c', 457 'b' => 'c',
415 'd' => %w(e f) 458 'd' => %w(e f)