diff options
| author | Alan Mackenzie | 2016-03-30 16:53:36 +0000 |
|---|---|---|
| committer | Alan Mackenzie | 2016-03-30 16:53:36 +0000 |
| commit | ed19f207449c43f7f08285ada87ae7a46c61c8d1 (patch) | |
| tree | fc495d64b752f276f1e8dc86427098de80789988 | |
| parent | eabd667a9584fe5bd2422e296d256dceea67debf (diff) | |
| parent | 7c1802f6ffc2704ba8042c7c1c6faa73dfa210d1 (diff) | |
| download | emacs-ed19f207449c43f7f08285ada87ae7a46c61c8d1.tar.gz emacs-ed19f207449c43f7f08285ada87ae7a46c61c8d1.zip | |
Merge branch 'emacs-25' of /home/acm/emacs/emacs.git/emacs-25 into emacs-25
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 | ||
| 9610 | 2015-11-14 Dmitry Gutov <dgutov@yandex.ru> | 9611 | 2015-11-14 Dmitry Gutov <dgutov@yandex.ru> |
| 9611 | 9612 | ||
| @@ -9837,7 +9838,6 @@ | |||
| 9837 | 2015-11-13 Juanma Barranquero <lekktu@gmail.com> | 9838 | 2015-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 @@ | |||
| 9848 | 2015-11-13 Juanma Barranquero <lekktu@gmail.com> | 9848 | 2015-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 | ||
| 9914 | 2015-11-12 Juanma Barranquero <lekktu@gmail.com> | 9913 | 2015-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 | ||
| 9990 | 2015-11-12 Juanma Barranquero <lekktu@gmail.com> | 9989 | 2015-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 | ||
| 9994 | 2015-11-12 Ken Raeburn <raeburn@raeburn.org> | 9993 | 2015-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 | ||
| 10043 | 2015-11-12 Eli Barzilay <eli@barzilay.org> | 10042 | 2015-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 | ||
| 10071 | 2015-11-11 Alan Mackenzie <acm@muc.de> | 10070 | 2015-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 | ||
| 10090 | 2015-11-11 Artur Malabarba <bruce.connor.am@gmail.com> | 10090 | 2015-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 | ||
| 10134 | 2015-11-11 Eli Zaretskii <eliz@gnu.org> | 10133 | 2015-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 | ||
| 10253 | 2015-11-10 Paul Eggert <eggert@cs.ucla.edu> | 10252 | 2015-11-10 Paul Eggert <eggert@cs.ucla.edu> |
| 10254 | 10253 | ||
| @@ -10281,8 +10280,7 @@ | |||
| 10281 | 2015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> | 10280 | 2015-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 | ||
| 10294 | 2015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> | 10292 | 2015-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 | ||
| 10309 | 2015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> | 10305 | 2015-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 | ||
| 10315 | 2015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> | 10311 | 2015-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 | ||
| 10322 | 2015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> | 10317 | 2015-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 | ||
| 10336 | 2015-11-10 Artur Malabarba <bruce.connor.am@gmail.com> | 10330 | 2015-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 | ||
| 10342 | 2015-11-10 Karl Fogel <kfogel@red-bean.com> | 10336 | 2015-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 | ||
| 10354 | 2015-11-10 Noah Friedman <friedman@splode.com> | 10348 | 2015-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 | ||
| 10360 | 2015-11-10 Dmitry Gutov <dgutov@yandex.ru> | 10354 | 2015-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 | ||
| 10514 | 2015-11-08 Paul Eggert <eggert@cs.ucla.edu> | 10508 | 2015-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 | ||
| 10600 | 2015-11-08 Alan Modra <amodra@gmail.com> | 10595 | 2015-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 | ||
| 10663 | 2015-11-08 Dmitry Gutov <dgutov@yandex.ru> | 10658 | 2015-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 | ||
| 240 | abbrevs.texi | 240 | abbrevs.texi Steve Byrne |
| 241 | ack.texi | 241 | ack.texi |
| 242 | anti.texi | 242 | anti.texi |
| 243 | arevert-xtra.texi | 243 | arevert-xtra.texi |
| @@ -292,7 +292,7 @@ xresources.texi | |||
| 292 | 292 | ||
| 293 | ** Check the Lisp manual. | 293 | ** Check the Lisp manual. |
| 294 | 294 | ||
| 295 | abbrevs.texi | 295 | abbrevs.texi Steve Byrne |
| 296 | anti.texi | 296 | anti.texi |
| 297 | back.texi | 297 | back.texi |
| 298 | backups.texi | 298 | backups.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 | ||
| 6 | my $VERSION = '2016-01-12 23:09'; # UTC | 6 | my $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. |
| 880 | if test "$gl_gcc_warnings" != yes; then | 880 | AS_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 | ]) |
| 891 | else | 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]) |
| 988 | fi | 988 | ]) |
| 989 | 989 | ||
| 990 | edit_cflags=" | 990 | edit_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. | |||
| 435 | controls which characters are considered part of a word, for dynamic expansion | 435 | controls which characters are considered part of a word, for dynamic expansion |
| 436 | purposes. The regular expression must match just one character, never | 436 | purposes. The regular expression must match just one character, never |
| 437 | two or more. The same regular expression also determines which | 437 | two or more. The same regular expression also determines which |
| 438 | characters are part of an expansion. The value @code{nil} has a special | 438 | characters are part of an expansion. The (default) value @code{nil} |
| 439 | meaning: dynamic abbrevs are made of word characters, but expansions are | 439 | has a special meaning: dynamic abbrevs are made of word characters, |
| 440 | made of word and symbol characters. | 440 | but 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 | |||
| 445 | customize dynamic abbrev expansion to handle optional prefixes by setting | 445 | customize dynamic abbrev expansion to handle optional prefixes by setting |
| 446 | the variable @code{dabbrev-abbrev-skip-leading-regexp}. Its value | 446 | the variable @code{dabbrev-abbrev-skip-leading-regexp}. Its value |
| 447 | should be a regular expression that matches the optional prefix that | 447 | should be a regular expression that matches the optional prefix that |
| 448 | dynamic abbrev expression should ignore. | 448 | dynamic abbrev expression should ignore. The default is @code{nil}, |
| 449 | which 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, |
| 76 | so there's only the one true quoting method now---using the | 76 | so there's only the one true quoting method now---using the |
| 77 | plain-@acronym{ASCII} quote characters. And if that's not enough, the | 77 | plain-@acronym{ASCII} quote characters. And if that's not enough, the |
| 78 | doc strings and other messages show text quoted `like this' and "like | 78 | doc strings and other messages show text quoted @t{`like this'} |
| 79 | this" as they were written, instead of arbitrarily replacing them | 79 | as they were written, instead of arbitrarily replacing them |
| 80 | with Unicode ``curved quote'' characters. The | 80 | with 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 |
| 82 | removed. As result, text produced by Emacs can be sent to those | 82 | removed. As result, text produced by Emacs can be sent to those |
| 83 | venerable teletypes again, yeah! | 83 | venerable 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 |
| 1480 | the fonts available to Emacs. These @dfn{glyphless characters} are | 1481 | the fonts available to Emacs. These @dfn{glyphless characters} are |
| 1481 | normally displayed as boxes containing the hexadecimal character code. | 1482 | normally displayed as boxes containing the hexadecimal character code. |
| 1482 | Similarly, on text terminals, characters that cannot be displayed | 1483 | Similarly, on text terminals, characters that cannot be displayed |
| 1483 | using the terminal encoding (@pxref{Terminal Coding}) are normally | 1484 | using the terminal encoding (@pxref{Terminal Coding}) are normally |
| 1484 | displayed as question signs. You can control the display method by | 1485 | displayed as question signs. You can control the display method by |
| 1485 | customizing the variable @code{glyphless-char-display-control}. | 1486 | customizing the variable @code{glyphless-char-display-control}. You |
| 1486 | @xref{Glyphless Chars,, Glyphless Character Display, elisp, The Emacs | 1487 | can also customize the @code{glyphless-char} face to make these |
| 1487 | Lisp Reference Manual}, for details. | 1488 | characters more prominent on display. @xref{Glyphless Chars,, |
| 1489 | Glyphless Character Display, elisp, The Emacs Lisp Reference Manual}, | ||
| 1490 | for 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 | |||
| 1598 | makes it local to the current buffer; until that time, the default | 1601 | makes it local to the current buffer; until that time, the default |
| 1599 | value, which is normally @code{nil}, is in effect. | 1602 | value, 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 |
| 1603 | line truncation. @xref{Split Window}, for the variable | 1605 | line 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 | ||
| 524 | Displaying a Buffer in a Window | 525 | Displaying 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 |
| 290 | built without a GUI toolkit, you can visit files via the menu-bar | 290 | built 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 |
| 294 | to detect what character encoding and end-of-line convention it uses, | 294 | to 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}) |
| 1293 | the current VC fileset. If you mark a directory entry with @kbd{m}, | 1293 | are in the current VC fileset. If you mark a directory entry with |
| 1294 | all 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 |
| 1295 | fileset. The files and directories that belong to the current VC | 1295 | current VC fileset. The files and directories that belong to the |
| 1296 | fileset are indicated with a @samp{*} character in the VC Directory | 1296 | current VC fileset are indicated with a @samp{*} character in the VC |
| 1297 | buffer, next to their VC status. In this way, you can set up a | 1297 | Directory buffer, next to their VC status. In this way, you can set |
| 1298 | multi-file VC fileset to be acted on by VC commands like @w{@kbd{C-x v | 1298 | up a multi-file VC fileset to be acted on by VC commands like |
| 1299 | v}} (@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 =}} |
| 1300 | Revisions}), 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 |
| 1303 | VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l}, | 1303 | VC 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 | |||
| 117 | instead controlled by the variable | 117 | instead 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 |
| 119 | is a positive integer (the default is 50), that specifies the minimum | 119 | is a positive integer (the default is 50), that specifies the minimum |
| 120 | width for a partial-width window before automatic line truncation | 120 | total width for a partial-width window before automatic line |
| 121 | occurs; if the value is @code{nil}, automatic line truncation is | 121 | truncation occurs; if the value is @code{nil}, automatic line |
| 122 | disabled; and for any other non-@code{nil} value, Emacs truncates | 122 | truncation is disabled; and for any other non-@code{nil} value, Emacs |
| 123 | lines in every partial-width window regardless of its width. | 123 | truncates lines in every partial-width window regardless of its width. |
| 124 | The total width of a window is in column units as reported by | ||
| 125 | @code{window-total-width} (@pxref{Window Sizes,,, elisp, The Emacs | ||
| 126 | Lisp Reference Manual}), it includes the fringes, the continuation and | ||
| 127 | truncation 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 |
| 126 | divider which is drawn using the @code{vertical-border} face. | 130 | divider which is drawn using the @code{vertical-border} face. |
| @@ -206,7 +210,7 @@ Choice}, for how Emacs picks or creates the window to use. | |||
| 206 | Select buffer @var{bufname} in another window | 210 | Select 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 |
| 212 | Display buffer @var{bufname} in some window, without trying to select | 216 | Display 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 | |||
| 345 | usually work by calling @code{switch-to-buffer} internally | 349 | usually 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 |
| 350 | over the selected window, e.g., by splitting off a new window and | 353 | over the selected window, e.g., by splitting off a new window and |
| 351 | displaying the desired buffer there. Such commands, which include the | 354 | displaying 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 | ||
| 383 | The @code{display-buffer} command (as well as commands that call it | 387 | The @code{display-buffer} command (as well as commands that call it |
| 384 | internally) chooses a window to display by following the steps given | 388 | internally) 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 |
| 414 | Otherwise, try to create a new window by splitting the selected | 418 | Otherwise, try to create a new window by splitting a window on the |
| 415 | window, and display the buffer in that new window. | 419 | selected 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 |
| 419 | The split can be either vertical or horizontal, depending on the | 423 | The split can be either vertical or horizontal, depending on the |
| 420 | variables @code{split-height-threshold} and | 424 | variables @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 |
| 422 | values. If @code{split-height-threshold} is smaller than the selected | 426 | values. If @code{split-height-threshold} is smaller than the chosen |
| 423 | window's height, the split puts the new window below. Otherwise, if | 427 | window'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 |
| 425 | split puts the new window on the right. If neither condition holds, | 429 | split 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 | |||
| 427 | window was not split before (to avoid excessive splitting). | 431 | window was not split before (to avoid excessive splitting). |
| 428 | 432 | ||
| 429 | @item | 433 | @item |
| 434 | Otherwise, display the buffer in a window previously showing it. | ||
| 435 | Normally, 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 | ||
| 437 | frame. | ||
| 438 | |||
| 439 | @item | ||
| 430 | Otherwise, display the buffer in an existing window on the selected | 440 | Otherwise, display the buffer in an existing window on the selected |
| 431 | frame. | 441 | frame. |
| 432 | 442 | ||
| @@ -435,6 +445,62 @@ If all the above methods fail for whatever reason, create a new frame | |||
| 435 | and display the buffer there. | 445 | and display the buffer there. |
| 436 | @end itemize | 446 | @end itemize |
| 437 | 447 | ||
| 448 | A more advanced and flexible way to customize the behavior of | ||
| 449 | @code{display-buffer} is by using the option @code{display-buffer-alist} | ||
| 450 | mentioned 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 | |||
| 458 | Some buffers are shown in windows for perusal rather than for editing. | ||
| 459 | Help commands (@pxref{Help}) typically use a buffer called @file{*Help*} | ||
| 460 | for that purpose, minibuffer completion (@pxref{Completion}) uses a | ||
| 461 | buffer called @file{*Completions*} instead. Such buffers are usually | ||
| 462 | displayed 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*} | ||
| 466 | buffer, on the other hand, is normally displayed in a window at the | ||
| 467 | bottom of the selected frame, regardless of the number of windows | ||
| 468 | already shown on that frame. | ||
| 469 | |||
| 470 | If you prefer Emacs to display a temporary buffer in a different | ||
| 471 | fashion, we recommend to customize the variable | ||
| 472 | @code{display-buffer-alist} (@pxref{Choosing Window,,Choosing a Window | ||
| 473 | for Display, elisp, The Emacs Lisp Reference Manual}). For example, | ||
| 474 | to display @file{*Completions*} by splitting a window as described in | ||
| 475 | the previous section, use the following form in your initialization | ||
| 476 | file (@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 | ||
| 488 | Emacs usually tries to make its window just as large as necessary to | ||
| 489 | display all of its contents. To resize windows showing other | ||
| 490 | temporary displays like, for example, the @file{*Help*} buffer | ||
| 491 | accordingly, turn on the minor mode (@pxref{Minor Modes}) | ||
| 492 | @code{temp-buffer-resize-mode} (@pxref{Temporary Displays,,Temporary | ||
| 493 | Displays, 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} | ||
| 498 | can 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 | ||
| 501 | Reference 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 | |||
| 198 | described here. | 198 | described here. |
| 199 | 199 | ||
| 200 | @defopt abbrev-file-name | 200 | @defopt abbrev-file-name |
| 201 | This is the default file name for reading and saving abbrevs. | 201 | This is the default file name for reading and saving abbrevs. By |
| 202 | default, Emacs will look for @file{~/.emacs.d/abbrev_defs}, and, if | ||
| 203 | not found, for @file{~/.abbrev_defs}; if neither file exists, Emacs | ||
| 204 | will 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 | |||
| 216 | offer to save abbrevs (if any have changed) when files are saved. If | 219 | offer to save abbrevs (if any have changed) when files are saved. If |
| 217 | the value is @code{silently}, Emacs saves the abbrevs without asking | 220 | the value is @code{silently}, Emacs saves the abbrevs without asking |
| 218 | the user. @code{abbrev-file-name} specifies the file to save the | 221 | the user. @code{abbrev-file-name} specifies the file to save the |
| 219 | abbrevs in. | 222 | abbrevs 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 | |||
| 282 | be the name by which this abbrev was found (a string); it is used to | 285 | be the name by which this abbrev was found (a string); it is used to |
| 283 | figure out whether to adjust the capitalization of the expansion. The | 286 | figure out whether to adjust the capitalization of the expansion. The |
| 284 | function returns @code{abbrev} if the abbrev was successfully | 287 | function returns @code{abbrev} if the abbrev was successfully |
| 285 | inserted. | 288 | inserted, 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 | |||
| 2191 | columns, counting from 0 at the left margin. The column position is the | 2191 | columns, counting from 0 at the left margin. The column position is the |
| 2192 | sum of the widths of all the displayed representations of the characters | 2192 | sum of the widths of all the displayed representations of the characters |
| 2193 | between the start of the current line and point. | 2193 | between the start of the current line and point. |
| 2194 | |||
| 2195 | For 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 | |||
| 2365 | text at point (@pxref{Completion in Buffers}). | 2362 | text 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 | ||
| 2371 | syntax belongs to a different major mode. Examples include | ||
| 2372 | @dfn{literate programming} source files that combine documentation and | ||
| 2373 | snippets of source code, Yacc/Bison programs that include snippets of | ||
| 2374 | plain C code, etc. To correctly indent the embedded chunks, the major | ||
| 2375 | mode needs to delegate the indentation to another mode's indentation | ||
| 2376 | engine (e.g., call @code{c-indent-defun} for C code or | ||
| 2377 | @code{python-indent-line} for Python), while providing it with some | ||
| 2378 | context to guide the indentation. The following facilities support | ||
| 2379 | such multi-mode indentation. | ||
| 2380 | |||
| 2381 | @defvar prog-indentation-context | ||
| 2382 | This variable, when non-@code{nil}, holds the indentation context for | ||
| 2383 | the sub-mode's indentation engine provided by the superior major mode. | ||
| 2384 | The 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 | ||
| 2386 | list have the following meaning: | ||
| 2387 | |||
| 2388 | @table @var | ||
| 2389 | @item first-column | ||
| 2390 | The column to be used for top-level constructs. This replaces the | ||
| 2391 | default value of the top-level column used by the sub-mode, usually | ||
| 2392 | zero. | ||
| 2393 | @item start | ||
| 2394 | @itemx end | ||
| 2395 | The region of the code chunk to be indented by the sub-mode. The | ||
| 2396 | value of @var{end} can be @code{nil}, which stands for the value of | ||
| 2397 | @code{point-max}. | ||
| 2398 | @item prev-chunk | ||
| 2399 | If this is non-@code{nil}, it should provide the sub-mode's | ||
| 2400 | indentation engine with a virtual context of the code chunk. Valid | ||
| 2401 | values include: | ||
| 2402 | |||
| 2403 | @itemize @minus | ||
| 2404 | @item | ||
| 2405 | A string whose contents is the text the sub-mode's indentation engine | ||
| 2406 | should consider to precede the code chunk. The sub-mode's indentation | ||
| 2407 | engine can add text properties to that string, to be reused in | ||
| 2408 | repeated calls with the same string, thus using it as a cache. An | ||
| 2409 | example where this is useful is code chunks that need to be indented | ||
| 2410 | as function bodies, but lack the function's preamble---the string | ||
| 2411 | could then include that missing preamble. | ||
| 2412 | @item | ||
| 2413 | A function. It is expected to be called with the start position of | ||
| 2414 | the current chunk, and should return a cons cell | ||
| 2415 | @w{@code{(@var{prev-start} . @var{prev-end})}} that specifies the | ||
| 2416 | region of the previous code chunk, or @code{nil} if there is no previous | ||
| 2417 | chunk. This is useful in literate-programming sources, where code is | ||
| 2418 | split into chunks, and correct indentation needs to access previous | ||
| 2419 | chunks. | ||
| 2420 | @end itemize | ||
| 2421 | @end table | ||
| 2422 | @end defvar | ||
| 2423 | |||
| 2424 | The following convenience functions should be used by major mode's | ||
| 2425 | indentation engine in support of invocations as sub-modes of another | ||
| 2426 | major mode. | ||
| 2427 | |||
| 2428 | @defun prog-first-column | ||
| 2429 | Call this function instead of using a literal value (usually, zero) of | ||
| 2430 | the column number for indenting top-level program constructs. The | ||
| 2431 | function's value is the column number to use for top-level constructs. | ||
| 2432 | When no superior mode is in effect, this function returns zero. | ||
| 2433 | @end defun | ||
| 2434 | |||
| 2435 | @defun prog-widen | ||
| 2436 | Call this function instead of @code{widen} to remove any restrictions | ||
| 2437 | imposed by the mode's indentation engine and restore the restrictions | ||
| 2438 | recorded in @code{prog-indentation-context}. This prevents the | ||
| 2439 | indentation engine of a sub-mode from inadvertently operating on text | ||
| 2440 | outside of the chunk it was supposed to indent, and preserves the | ||
| 2441 | restriction imposed by the superior mode. When no superior mode is in | ||
| 2442 | effect, 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 |
| 52 | The programs follow the usual GNU command line syntax, with long | 52 | Most options follow the usual GNU command line syntax, with long |
| 53 | options starting with two dashes ("\-"). | 53 | options starting with two dashes ("\-"). |
| 54 | .TP | 54 | .TP |
| 55 | .BI + line\fR[\fP\fB:\fPcolumn\fR]\fP | ||
| 56 | Go to the specified | ||
| 57 | .I line | ||
| 58 | and | ||
| 59 | .IR column . | ||
| 60 | A missing | ||
| 61 | .I column | ||
| 62 | is treated as column 1. | ||
| 63 | This option applies only to the next file specified. | ||
| 64 | .TP | ||
| 55 | .B \-a, \-\-alternate-editor=EDITOR | 65 | .B \-a, \-\-alternate-editor=EDITOR |
| 56 | if the Emacs server is not running, run the specified editor instead. | 66 | if the Emacs server is not running, run the specified editor instead. |
| 57 | This can also be specified via the ALTERNATE_EDITOR environment variable. | 67 | This 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 | |||
| 252 | call it in an Elisp expression (which can also be used with | 252 | call 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 |
| 254 | escape special characters and spaces with the backslash (@code{\}) and | 254 | escape special characters and spaces with the backslash (@code{\}) and |
| 255 | apostrophes (@code{''}) and double quotes (@code{""}). | 255 | apostrophes (@code{''}) and double quotes (@code{""}). This is needed |
| 256 | especially 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 | ||
| 367 | Starting from No Gnus, the @file{GNUS-NEWS} is created from | 367 | The @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 | 369 | Edit @file{doc/misc/gnus-news.texi}, type @command{make |
| 370 | @file{texi} directory and commit @file{GNUS-NEWS} and | 370 | update-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. | |||
| 7 | For older news, see Gnus info node "New Features". | 7 | For 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 |
| 11 | Gnus: | ||
| 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 | |||
| 23 | If you have tried No Gnus (the unstable Gnus branch leading to this | ||
| 24 | release) but went back to a stable version, be careful when upgrading to | ||
| 25 | this version. In particular, you will probably want to remove the | ||
| 26 | '~/News/marks' directory (perhaps selectively), so that flags are read | ||
| 27 | from your '~/.newsrc.eld' instead of from the stale marks file, where | ||
| 28 | this release will store flags for nntp. See a later entry for more | ||
| 29 | information about nntp marks. Note that downgrading isn't safe in | ||
| 30 | general. | ||
| 31 | |||
| 32 | ** Incompatibility when switching from Emacs 23 to Emacs 22 In Emacs 23, | ||
| 33 | Gnus uses Emacs's new internal coding system 'utf-8-emacs' for saving | ||
| 34 | articles drafts and '~/.newsrc.eld'. These files may not be read | ||
| 35 | correctly in Emacs 22 and below. If you want to use Gnus across | ||
| 36 | different 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 | ||
| 40 | defaulted to '.../site-lisp/' formerly. In addition to this, the new | ||
| 41 | installer issues a warning if other Gnus installations which will shadow | ||
| 42 | the latest one are detected. You can then remove those shadows manually | ||
| 43 | or 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 | ||
| 53 | manual 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 | |||
| 58 | This provides a clean API to SASL mechanisms from within Emacs. The user | ||
| 59 | visible aspects of this, compared to the earlier situation, include | ||
| 60 | support for DIGEST-MD5 and NTLM. *Note Emacs SASL: (sasl)Top. | ||
| 61 | |||
| 62 | ** ManageSieve connections uses the SASL library by default. | ||
| 63 | |||
| 64 | The primary change this brings is support for DIGEST-MD5 and NTLM, when | ||
| 65 | the server supports it. | ||
| 66 | |||
| 67 | ** Gnus includes a password cache mechanism in password.el. | ||
| 68 | |||
| 69 | It is enabled by default (see 'password-cache'), with a short timeout of | ||
| 70 | 16 seconds (see 'password-cache-expiry'). If PGG is used as the PGP back | ||
| 71 | end, the PGP passphrase is managed by this mechanism. Passwords for | ||
| 72 | ManageSieve connections are managed by this mechanism, after querying the | ||
| 73 | user about whether to do so. | ||
| 74 | |||
| 75 | ** Using EasyPG with Gnus When EasyPG, is available, Gnus will use it | ||
| 76 | instead 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 | ||
| 78 | Emacs 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 | ||
| 85 | of the first match. | ||
| 86 | |||
| 87 | ** Old intermediate incoming mail files ('Incoming*') are deleted after a | ||
| 88 | couple 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 | ||
| 98 | are 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 | ||
| 104 | using '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 | ||
| 108 | that fully support non-ASCII group names are now 'nntp', 'nnml', and | ||
| 109 | 'nnrss'. Also the agent, the cache, and the marks features work with | ||
| 110 | those 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 | ||
| 120 | Commands::. | ||
| 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 | ||
| 126 | configure the server in 'smime-ldap-host-list'. | ||
| 127 | |||
| 128 | ** URLs inside OpenPGP headers are retrieved and imported to your PGP key | ||
| 129 | ring 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 | |||
| 136 | ANSI sequences are used in some Chinese hierarchies for highlighting | ||
| 137 | articles ('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". | 140 | This 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. | 143 | set 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 |
| 147 | when using 'gnus-ignored-from-addresses' can be customized with | ||
| 148 | 'gnus-summary-to-prefix' and 'gnus-summary-newsgroup-prefix'. *Note To | ||
| 149 | From 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 |
| 153 | Commands::, *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: | 156 | format=flowed messages. Also, flowed text is disabled when sending |
| 157 | inline 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 |
| 161 | wide reply in the article buffer yanks a text that is in the active | ||
| 162 | region, if it is set, as well as the 'R' | ||
| 163 | ('gnus-article-reply-with-original') command. Note that the 'R' command | ||
| 164 | in the article buffer no longer accepts a prefix argument, which was used | ||
| 165 | to 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 | 168 | article buffer now shows not only the article commands but also the real |
| 35 | them. | 169 | summary 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 |
| 175 | archives. | ||
| 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 | ||
| 185 | prefixed in cited text. *Note Insertion Variables: (message)Insertion | ||
| 186 | Variables. | ||
| 187 | |||
| 188 | ** Gnus uses narrowing to hide headers in Message buffers. The 'References' | ||
| 189 | header is hidden by default. To make all headers visible, use '(setq | ||
| 190 | message-hidden-headers nil)'. *Note Message Headers: (message)Message | ||
| 191 | Headers. | ||
| 192 | |||
| 193 | ** You can highlight different levels of citations like in the article | ||
| 194 | buffer. 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 | ||
| 198 | Variables. | ||
| 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 | ||
| 212 | Server 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 | |||
| 220 | The directory can be changed using the (customizable) variable | ||
| 221 | 'nntp-marks-directory', and marks can be disabled using the (back end) | ||
| 222 | variable 'nntp-marks-is-evil'. The advantage of this is that you can | ||
| 223 | copy '~/News/marks' (using rsync, scp or whatever) to another Gnus | ||
| 224 | installation, and it will realize what articles you have read and marked. | ||
| 225 | The 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 | ||
| 229 | RSS::. | ||
| 230 | |||
| 231 | ** IMAP identity (RFC 2971) is supported. | ||
| 41 | 232 | ||
| 42 | ** `nnimap-inbox' can now be a list of mail box names. | 233 | By default, Gnus does not send any information about itself, but you can |
| 43 | 234 | customize it using the variable 'nnimap-id'. | |
| 235 | |||
| 236 | ** The 'nnrss' back end now supports multilingual text. Non-ASCII group | ||
| 237 | names 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 | ||
| 242 | compressed message files. *Note Mail Spool::. | ||
| 243 | |||
| 244 | ** The nnml back end supports group compaction. | ||
| 245 | |||
| 246 | This feature, accessible via the functions 'gnus-group-compact-group' ('G | ||
| 247 | z' in the group buffer) and 'gnus-server-compact-server' ('z' in the | ||
| 248 | server buffer) renumbers all articles in a group, starting from 1 and | ||
| 249 | removing 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 | ||
| 256 | the tool bars: 'M-x customize-apropos RET -tool-bar$' should get you | ||
| 257 | started. (Only for Emacs, not in XEmacs.) | ||
| 258 | |||
| 259 | ** The tool bar icons are now (de)activated correctly in the group buffer, | ||
| 260 | see the variable 'gnus-group-update-tool-bar'. Its default value depends | ||
| 261 | on 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 | ||
| 270 | buffer is immediately reflected to the subscription of the groups which | ||
| 271 | use the server in question. For instance, if you change | ||
| 272 | 'nntp-via-address' into 'bar.example.com' from 'foo.example.com', Gnus | ||
| 273 | will 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 | ||
| 279 | non-'nil' value so that articles that have been read may be marked as | ||
| 280 | expirable automatically when copying or moving them to a group that has | ||
| 281 | auto-expire turned on. The default is 'nil' and copying and moving of | ||
| 282 | articles behave as before; i.e., the expirable marks will be unchanged | ||
| 283 | except that the marks will be removed when copying or moving articles to | ||
| 284 | a 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 | ---------------------------------------------------------------------- |
| @@ -12,7 +12,7 @@ See file HISTORY for a list of GNU Emacs versions and release dates. | |||
| 12 | See files NEWS.24, NEWS.23, NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18, | 12 | See files NEWS.24, NEWS.23, NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18, |
| 13 | and NEWS.1-17 for changes in older Emacs versions. | 13 | and NEWS.1-17 for changes in older Emacs versions. |
| 14 | 14 | ||
| 15 | You can narrow news to a specific version by calling `view-emacs-news' | 15 | You can narrow news to a specific version by calling 'view-emacs-news' |
| 16 | with a prefix argument or by typing C-u C-h C-n. | 16 | with a prefix argument or by typing C-u C-h C-n. |
| 17 | 17 | ||
| 18 | Temporary note: | 18 | Temporary note: |
| @@ -94,17 +94,17 @@ to be owned by that group, and the helper program for updating them to | |||
| 94 | be installed setgid. The option now defaults to the 'games' group. | 94 | be 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. |
| 98 | It has no particular connection to Emacs and has not changed in years, | 98 | It has no particular connection to Emacs and has not changed in years, |
| 99 | so if you want to use it, you can always take a copy from an older Emacs. | 99 | so 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. |
| 103 | Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png. | 103 | Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png. |
| 104 | The old Emacs logo icons are available as `emacs23.png' in the same location. | 104 | The 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. |
| 108 | This includes all tests which run via "make check", plus additional | 108 | This includes all tests which run via "make check", plus additional |
| 109 | tests which take more time to perform. | 109 | tests 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' |
| 119 | and *Buffer List*. This makes Emacs convenient to use from the | 119 | and *Buffer List*. This makes Emacs convenient to use from the |
| 120 | command line when `initial-buffer-choice' is non-nil. | 120 | command 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 |
| 124 | and can contain escape sequences for command keys, quotes, and the like. | 124 | and can contain escape sequences for command keys, quotes, and the like. |
| 125 | 125 | ||
| 126 | --- | ||
| 127 | ** The default height of GUI frames was enlarged. | ||
| 128 | This is so there's enough space in the initial window to display the | ||
| 129 | optional text about recovering crashes sessions, without losing the | ||
| 130 | splash 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. |
| 131 | If you have gtk3 and webkitgtk3 installed, and Emacs was built with | 137 | If you have gtk3 and webkitgtk3 installed, and Emacs was built with |
| 132 | xwidget support, you can access the embedded webkit browser with `M-x | 138 | xwidget support, you can access the embedded webkit browser with 'M-x |
| 133 | xwidget-webkit-browse-url'. This opens a new buffer with the embedded | 139 | xwidget-webkit-browse-url'. This opens a new buffer with the embedded |
| 134 | browser. The buffer will have a new mode, `xwidget-webkit-mode' | 140 | browser. 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). |
| 147 | A dynamic Emacs module is a shared library that provides additional | 153 | A dynamic Emacs module is a shared library that provides additional |
| 148 | functionality for use in Emacs Lisp programs, just like a package | 154 | functionality for use in Emacs Lisp programs, just like a package |
| 149 | written in Emacs Lisp would. The functions `load', `require', | 155 | written 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 |
| 151 | Emacs Lisp packages. The new variable `module-file-suffix' holds the | 157 | Emacs Lisp packages. The new variable 'module-file-suffix' holds the |
| 152 | system-dependent value of the file-name extension (`.so' on Posix | 158 | system-dependent value of the file-name extension ('.so' on Posix |
| 153 | hosts) of the module files. | 159 | hosts) of the module files. |
| 154 | 160 | ||
| 155 | A module should export a C-callable function named | 161 | A 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 |
| 158 | symbol named `plugin_is_GPL_compatible' to indicate that its code is | 164 | symbol named 'plugin_is_GPL_compatible' to indicate that its code is |
| 159 | released under the GPL or compatible license; Emacs will refuse to | 165 | released under the GPL or compatible license; Emacs will refuse to |
| 160 | load modules that don't export such a symbol. | 166 | load modules that don't export such a symbol. |
| 161 | 167 | ||
| 162 | If a module needs to call Emacs functions, it should do so through the | 168 | If a module needs to call Emacs functions, it should do so through the |
| 163 | API defined and documented in the header file `emacs-module.h'. Note | 169 | API defined and documented in the header file 'emacs-module.h'. Note |
| 164 | that any module that provides Lisp-callable functions will have to use | 170 | that any module that provides Lisp-callable functions will have to use |
| 165 | Emacs functions such as `fset' and `funcall', in order to register its | 171 | Emacs functions such as 'fset' and 'funcall', in order to register its |
| 166 | functions with the Emacs Lisp interpreter. | 172 | functions with the Emacs Lisp interpreter. |
| 167 | 173 | ||
| 168 | Modules can create `user-ptr' Lisp objects that embed pointers to C | 174 | Modules can create 'user-ptr' Lisp objects that embed pointers to C |
| 169 | struct's defined by the module. This is useful for keeping around | 175 | structs defined by the module. This is useful for keeping around |
| 170 | complex data structures created by a module, to be passed back to the | 176 | complex data structures created by a module, to be passed back to the |
| 171 | module's functions. User-ptr objects can also have associated | 177 | module'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 |
| 173 | useful for freeing any resources allocated for the underlying data | 179 | useful for freeing any resources allocated for the underlying data |
| 174 | structure, such as memory, open file descriptors, etc. A new | 180 | structure, such as memory, open file descriptors, etc. A new |
| 175 | predicate `user-ptrp' returns non-nil if its argument is a `user-ptr' | 181 | predicate 'user-ptrp' returns non-nil if its argument is a 'user-ptr' |
| 176 | object. | 182 | object. |
| 177 | 183 | ||
| 178 | Loadable modules in Emacs are an experimental feature, and subject to | 184 | Loadable modules in Emacs are an experimental feature, and subject to |
| 179 | change in future releases. For that reason, their support is disabled | 185 | change in future releases. For that reason, their support is disabled |
| 180 | by default, and must be enabled by using the `--with-modules' option | 186 | by default, and must be enabled by using the '--with-modules' option |
| 181 | at configure time. | 187 | at 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 |
| 185 | added via the new Network Security Manager (NSM) and controlled via | 191 | added via the new Network Security Manager (NSM) and controlled via |
| 186 | the `network-security-level' variable. | 192 | the '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 | |||
| 197 | have the equivalent of a primary selection. | 203 | have 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 |
| 201 | customize how `switch-to-buffer' proceeds interactively when the | 207 | customize how 'switch-to-buffer' proceeds interactively when the |
| 202 | selected window is strongly dedicated to its buffer. | 208 | selected 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 |
| 213 | when called interactively. A prefix argument toggles this behavior. | 219 | when 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. |
| 217 | The function `tty-run-terminal-initialization' consults this variable | 223 | The function 'tty-run-terminal-initialization' consults this variable |
| 218 | when deciding what terminal-specific initialization code to run. | 224 | when 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 |
| 222 | main features that Emacs was compiled with. This is mainly intended | 228 | main features that Emacs was compiled with. This is mainly intended |
| 223 | for use in Emacs bug reports. | 229 | for 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 |
| 227 | hiding character but the default `.' can be used by let-binding the | 233 | hiding character but the default '.' can be used by let-binding the |
| 228 | variable `read-hide-char'. | 234 | variable '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. |
| 232 | On system where Emacs can access the system entropy or some other | 238 | On system where Emacs can access the system entropy or some other |
| 233 | cryptographically secure random stream, it now uses that when `random' | 239 | cryptographically secure random stream, it now uses that when 'random' |
| 234 | is called with its argument `t'. This allows cryptographically strong | 240 | is called with its argument 't'. This allows cryptographically strong |
| 235 | random values; in particular, the Emacs server now uses this facility | 241 | random values; in particular, the Emacs server now uses this facility |
| 236 | to produce its authentication key. | 242 | to 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 |
| 251 | successive char insertions. Which commands invoke this behavior is | 257 | successive char insertions. Which commands invoke this behavior is |
| 252 | controlled by the new `undo-auto-amalgamate' function. See the node | 258 | controlled 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 |
| 257 | has changed, so that if a command causes changes in more than just the | 263 | has changed, so that if a command causes changes in more than just the |
| 258 | current buffer, Emacs now calls `undo-boundary' in every buffer | 264 | current buffer, Emacs now calls 'undo-boundary' in every buffer |
| 259 | affected by the command. | 265 | affected 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 |
| 278 | before, 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 |
| 275 | as you type. See also the new variable ‘text-quoting-style’. | 282 | type. 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 | |||
| 300 | standards. | 307 | standards. |
| 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 |
| 310 | fontification during full screen scrolling operations, giving less | 317 | fontification during full screen scrolling operations, giving less |
| 311 | hesitant operation during auto-repeat of C-v, M-v at the cost of | 318 | hesitant operation during auto-repeat of C-v, M-v at the cost of |
| 312 | possible inaccuracies in the end position. | 319 | possible inaccuracies in the end position. |
| 313 | 320 | ||
| 314 | +++ | 321 | +++ |
| 315 | ** New documentation command `describe-symbol'. | 322 | ** New documentation command 'describe-symbol'. |
| 316 | Works for functions, variables, faces, etc. It is bound to `C-h o' by | 323 | Works for functions, variables, faces, etc. It is bound to 'C-h o' by |
| 317 | default. | 324 | default. |
| 318 | 325 | ||
| 319 | +++ | 326 | +++ |
| 320 | ** New function `custom-prompt-customize-unsaved-options' checks for | 327 | ** New function 'custom-prompt-customize-unsaved-options' checks for |
| 321 | unsaved customizations and prompts user to customize (if found). It | 328 | unsaved customizations and prompts user to customize (if found). It |
| 322 | is intended for adding to 'kill-emacs-query-functions'. | 329 | is 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 |
| 326 | in favor of the global `M-s h' bindings introduced in Emacs-23.1. | 333 | in favor of the global 'M-s h' bindings introduced in Emacs-23.1. |
| 327 | They'll disappear soon. | 334 | They'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 |
| 336 | current package keywords are recognized. Set the new option | 343 | current 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. |
| 342 | It's meant for use together with `compile': | 349 | It's meant for use together with 'compile': |
| 343 | emacs -batch --eval "(checkdoc-file \"subr.el\")" | 350 | emacs -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 | |||
| 354 | to version 206, you can do this with C-u C-u M-x desktop-save. | 361 | to 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. |
| 358 | It raises an error if a bookmark of that name already exists, | 365 | It raises an error if a bookmark of that name already exists, |
| 359 | unlike `bookmark-set' which silently updates an existing bookmark. | 366 | unlike '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' |
| 365 | now control how mm-* functions fetch and display images in an HTML | 372 | now control how mm-* functions fetch and display images in an HTML |
| 366 | message. Gnus still uses `gnus-inhibit-images' and `gnus-blocked-images' | 373 | message. Gnus still uses 'gnus-inhibit-images' and 'gnus-blocked-images' |
| 367 | for that purpose, i.e., binds mm-html- variables with those gnus- | 374 | for that purpose, i.e., binds mm-html- variables with those gnus- |
| 368 | variables, but other packages do not have to bind gnus- variables now. | 375 | variables, 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. |
| 372 | Use `mm-html-inhibit-images' instead. Note that the value is opposite | 379 | Use 'mm-html-inhibit-images' instead. Note that the value is opposite |
| 373 | in meaning. | 380 | in 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 |
| 379 | GnuTLS encryption functions if possible. | 386 | GnuTLS 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 |
| 385 | the ordering of object keys by default. | 392 | the 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 |
| 390 | object keys sorted alphabetically. | 397 | object keys sorted alphabetically. |
| 391 | 398 | ||
| 392 | +++ | ||
| 393 | ** Prog mode has some support for multi-mode indentation. | ||
| 394 | This allows better indentation support in modes that support multiple | ||
| 395 | programming languages in the same buffer, like literate programming | ||
| 396 | environments or ANTLR programs with embedded Python code. | ||
| 397 | |||
| 398 | A major mode can provide indentation context for a sub-mode through | ||
| 399 | the `prog-indentation-context' variable. To support this, modes that | ||
| 400 | provide 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 |
| 408 | overriding the default `prettify-symbols-compose-predicate', modes can | 403 | overriding the default 'prettify-symbols-compose-predicate', modes can |
| 409 | specify in which contexts a symbol may be displayed as some Unicode | 404 | specify in which contexts a symbol may be displayed as some Unicode |
| 410 | character. `prettify-symbols-default-compose-p' is the default which | 405 | character. 'prettify-symbols-default-compose-p' is the default which |
| 411 | is suitable for most programming languages such as C or Lisp (but not | 406 | is 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. |
| 416 | New variable `prettify-symbols-unprettify-at-point' configures this. | 411 | New 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. |
| 422 | This variable tells Emacs which advanced capabilities are available in | 417 | This variable tells Emacs which advanced capabilities are available in |
| 423 | the xterm terminal emulator used to display Emacs text-mode frames. | 418 | the xterm terminal emulator used to display Emacs text-mode frames. |
| 424 | The default is to check each capability, and use it if available. | 419 | The 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 |
| 430 | in the surrounding GUI (using the OSC-52 escape sequence). This only works | 425 | in the surrounding GUI (using the OSC-52 escape sequence). This only works |
| 431 | if your xterm supports it and enables the `allowWindowOps' options (disabled | 426 | if your xterm supports it and enables the 'allowWindowOps' options (disabled |
| 432 | by default at least in Debian, for security reasons). | 427 | by default at least in Debian, for security reasons). |
| 433 | 428 | ||
| 434 | Similarly, you can yank the CLIPBOARD/PRIMARY selection (using the OSC-52 | 429 | Similarly, you can yank the CLIPBOARD/PRIMARY selection (using the OSC-52 |
| 435 | escape sequence) if your xterm has the feature enabled but for that you | 430 | escape sequence) if your xterm has the feature enabled but for that you |
| 436 | additionally need to add `getSelection' to `xterm-extra-capabilities'. | 431 | additionally 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. |
| 443 | It is no longer sufficient to load the saveplace library and set | 438 | It 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 |
| 447 | is invoked. The `save-place' variable is now an obsolete alias for | 442 | is 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 |
| 449 | obsolete alias for the new `save-place-local-mode' command. | 444 | obsolete 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 |
| 457 | specified message types for the respective specified targets. | 452 | specified 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. |
| 505 | An external package is any installed package that's not built-in and | 500 | An external package is any installed package that's not built-in and |
| 506 | not from `package-user-dir', which usually means it's from an entry in | 501 | not 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 |
| 508 | packages, in that they cannot be deleted through the package menu and | 503 | packages, in that they cannot be deleted through the package menu and |
| 509 | are not considered for upgrades. | 504 | are not considered for upgrades. |
| 510 | 505 | ||
| 511 | The effect is that a user can manually place a specific version of a | 506 | The effect is that a user can manually place a specific version of a |
| 512 | package inside `package-directory-list' and the package menu will | 507 | package inside 'package-directory-list' and the package menu will |
| 513 | always respect that. | 508 | always 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 |
| 517 | priority (as per `package-archive-priorities') only that one is | 512 | priority (as per 'package-archive-priorities') only that one is |
| 518 | listed. This can be configured with `package-menu-hide-low-priority'. | 513 | listed. 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. |
| 522 | This includes the above-mentioned low-priority packages, as well as | 517 | This includes the above-mentioned low-priority packages, as well as |
| 523 | available packages whose version is lower than the currently installed | 518 | available packages whose version is lower than the currently installed |
| 524 | version (which were previously impossible to display). | 519 | version (which were previously impossible to display). |
| @@ -536,52 +531,52 @@ ASYNC argument. If it is non-nil, package.el performs the download(s) | |||
| 536 | asynchronously. | 531 | asynchronously. |
| 537 | 532 | ||
| 538 | --- | 533 | --- |
| 539 | *** New variable `package-menu-async' controls whether the | 534 | *** New variable 'package-menu-async' controls whether the |
| 540 | package-menu uses asynchronous downloads. | 535 | package-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. |
| 544 | This follows the same rules as installing from a .tar file, except the | 539 | This 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. |
| 549 | The FORCE argument to `package-delete' overrides this. | 544 | The 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 |
| 553 | which were installed by the user (as opposed to installed as | 548 | which were installed by the user (as opposed to installed as |
| 554 | dependencies). This variable can also be manually customized. | 549 | dependencies). 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 |
| 558 | packages from `package-selected-packages' which are currently missing. | 553 | packages 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 |
| 562 | this function is called interactively or if DONT-SELECT is nil, add the | 557 | this function is called interactively or if DONT-SELECT is nil, add the |
| 563 | package being installed to `package-selected-packages'. | 558 | package 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 |
| 567 | installed strictly as dependencies but are no longer needed. | 562 | installed strictly as dependencies but are no longer needed. |
| 568 | 563 | ||
| 569 | +++ | 564 | +++ |
| 570 | ** Shell | 565 | ** Shell |
| 571 | 566 | ||
| 572 | When you invoke `shell' interactively, the *shell* buffer will now | 567 | When you invoke 'shell' interactively, the *shell* buffer will now |
| 573 | display in a new window. However, you can customize this behavior via | 568 | display in a new window. However, you can customize this behavior via |
| 574 | the `display-buffer-alist' variable. For example, to get | 569 | the 'display-buffer-alist' variable. For example, to get |
| 575 | the old behavior -- *shell* buffer displays in current window -- use | 570 | the 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. |
| 584 | If you need your objects to be named, do it by inheriting from `eieio-named'. | 579 | If 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. |
| 593 | Use the equivalent facilities from cl-generic.el instead. | 588 | Use 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 |
| 602 | Bury the buffer at the head of `ido-matches', analogous to how C-k | 597 | Bury the buffer at the head of 'ido-matches', analogous to how C-k |
| 603 | kills the buffer at head. | 598 | kills 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 |
| 607 | meaning, and the list is restricted to those elements that do not | 602 | meaning, and the list is restricted to those elements that do not |
| 608 | match the current input. | 603 | match 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. |
| 614 | The new commands `next-line-or-history-element' and | 609 | The 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 |
| 616 | minibuffer, allow by-line movement through minibuffer history, | 611 | minibuffer, allow by-line movement through minibuffer history, |
| 617 | similarly to an ordinary buffer. Only when point moves over | 612 | similarly to an ordinary buffer. Only when point moves over |
| 618 | the bottom/top of the minibuffer it goes to the next/previous history | 613 | the bottom/top of the minibuffer it goes to the next/previous history |
| 619 | element. `M-p' and `M-n' still move directly to previous/next history | 614 | element. 'M-p' and 'M-n' still move directly to previous/next history |
| 620 | item as before. | 615 | item 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. |
| 626 | This is analogous to case folding, but instead of disregarding case | 621 | This is analogous to case folding, but instead of disregarding case |
| 627 | variants, it disregards wider classes of distinctions between similar | 622 | variants, it disregards wider classes of distinctions between similar |
| 628 | characters. (Case folding is a special case of character folding.) | 623 | characters. (Case folding is a special case of character folding.) |
| @@ -630,47 +625,48 @@ This means many characters in the search string will match entire | |||
| 630 | groups of characters instead of just themselves. | 625 | groups of characters instead of just themselves. |
| 631 | 626 | ||
| 632 | For instance, the ASCII double quote character " will match all | 627 | For instance, the ASCII double quote character " will match all |
| 633 | variants of double quotes (like “ and ”), and the letter a will match | 628 | variants of double quotes, and the letter 'a' will match all of its |
| 634 | all of its accented cousins, even those composed of multiple | 629 | accented cousins, even those composed of multiple characters, as well |
| 635 | characters, as well as many other symbols like ℀, ℁, ⒜, and ⓐ. | 630 | as many other symbols like U+249C (PARENTHESIZED LATIN SMALL LETTER |
| 631 | A). | ||
| 636 | 632 | ||
| 637 | Character folding is enabled by customizing `search-default-mode' to | 633 | Character folding is enabled by customizing 'search-default-mode' to |
| 638 | the value `character-fold-to-regexp'. You can also toggle character | 634 | the value 'character-fold-to-regexp'. You can also toggle character |
| 639 | folding in the middle of a search by typing `M-s ''. | 635 | folding 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'. |
| 646 | This option specifies the default mode for Isearch. The default | 642 | This option specifies the default mode for Isearch. The default |
| 647 | value, nil specifies that Isearch does literal searches (however, | 643 | value, 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, |
| 649 | as in previous Emacs versions). | 645 | as 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 |
| 653 | by searching commands to produce a regexp matching anything that | 649 | by searching commands to produce a regexp matching anything that |
| 654 | character-folds into STRING. | 650 | character-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 |
| 658 | text in the region. The search engine to use for this is specified by | 654 | text in the region. The search engine to use for this is specified by |
| 659 | the customizable variable `eww-search-prefix'. | 655 | the customizable variable 'eww-search-prefix'. |
| 660 | 656 | ||
| 661 | +++ | 657 | +++ |
| 662 | *** Query-replace history is enhanced. | 658 | *** Query-replace history is enhanced. |
| 663 | When query-replace reads the FROM string from the minibuffer, typing | 659 | When 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 |
| 665 | and TO are the original text and its replacement, and SEP is an arrow | 661 | and TO are the original text and its replacement, and SEP is an arrow |
| 666 | string defined by the new variable `query-replace-from-to-separator'. | 662 | string defined by the new variable 'query-replace-from-to-separator'. |
| 667 | To select a prior replacement, type `M-p' until the desired | 663 | To select a prior replacement, type 'M-p' until the desired |
| 668 | replacement appears in the minibuffer, and then exit the minibuffer by | 664 | replacement appears in the minibuffer, and then exit the minibuffer by |
| 669 | typing RET. | 665 | typing 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 |
| 674 | result of the calculation into the current buffer. | 670 | result 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' |
| 685 | It is turned on by default, and affects `*scratch*' and other buffers | 681 | It is turned on by default, and affects '*scratch*' and other buffers |
| 686 | whose major mode supports Emacs Lisp. | 682 | whose 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, |
| 693 | and can be used as a default value of `eldoc-documentation-function'. It is | 689 | and can be used as a default value of 'eldoc-documentation-function'. It is |
| 694 | useful when, for example, one needs to distinguish various spaces (e.g. ] [, | 690 | useful when, for example, one needs to distinguish various spaces - e.g., |
| 695 | ] [, ] [, etc.) while using mono-spaced font. | 691 | U+00A0 (NO-BREAK SPACE), U+2002 (EN SPACE), and U+2009 (THIN SPACE) - while |
| 692 | using 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 |
| 704 | whether to use variable-pitch fonts or not. The user can also | 701 | whether to use variable-pitch fonts or not. The user can also |
| 705 | customize the `shr-use-fonts' variable. | 702 | customize 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 |
| 709 | textual parts of a web page and display only that, leaving menus and | 706 | textual parts of a web page and display only that, leaving menus and |
| 710 | the like off the page. | 707 | the 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 |
| 714 | toggle the paragraph direction between left-to-right and right-to-left. | 711 | toggle 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. | |||
| 722 | pages visited) is now preserved in the desktop file. | 719 | pages 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 |
| 726 | the data in the buffer. | 723 | the 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 |
| 730 | the net, but just use the local copy of the HTML. | 727 | the 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 | |||
| 736 | details. | 733 | details. |
| 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 |
| 743 | them. | 740 | them. |
| 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 |
| 757 | stands inside it, and certain parens can be highlighted when point is | 754 | stands inside it, and certain parens can be highlighted when point is |
| 758 | at BOL or EOL, or in whitespace there. To enable these, customize, | 755 | at BOL or EOL, or in whitespace there. To enable these, customize, |
| 759 | respectively, `show-paren-when-point-inside-paren' or | 756 | respectively, '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 |
| 764 | of `epg-gpg-program' (instead of gpg). | 761 | of '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. |
| 770 | This enhances Lisp mode fontification to handle documentation of the | 767 | This enhances Lisp mode fontification to handle documentation of the |
| 771 | form `(:documentation "the doc string")' used in Common Lisp code for | 768 | form '(:documentation "the doc string")' used in Common Lisp code for |
| 772 | CLOS class and slot documentation. | 769 | CLOS 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'. |
| 785 | These should be used in preference to `font-lock-fontify-buffer' when | 782 | These should be used in preference to 'font-lock-fontify-buffer' when |
| 786 | called from Lisp. | 783 | called 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 |
| 790 | to `minibuffer-setup-hook'. | 787 | to 'minibuffer-setup-hook'. |
| 791 | 788 | ||
| 792 | If the first argument of the macro is of the form `(:append FUN)', | 789 | If the first argument of the macro is of the form '(:append FUN)', |
| 793 | then FUN will be appended to `minibuffer-setup-hook', instead of | 790 | then FUN will be appended to 'minibuffer-setup-hook', instead of |
| 794 | prepending it. | 791 | prepending 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. |
| 815 | See `diary-chinese-list-entries' and `diary-chinese-mark-entries'. | 812 | See '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, |
| 819 | which means to do nothing special with the mode line in calendars. | 816 | which 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'. |
| 823 | The option customizes which day headers receive the | 820 | The 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. |
| 831 | The majority were function/variable/face aliases, too numerous to list here. | 828 | The majority were function/variable/face aliases, too numerous to list here. |
| 832 | The remainder were: | 829 | The 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'. |
| 847 | If the output of ERT tests in batch mode execution can be saved to a | 844 | If the output of ERT tests in batch mode execution can be saved to a |
| 848 | log file, then it can be passed as an argument to the above function | 845 | log file, then it can be passed as an argument to the above function |
| 849 | to produce a neat summary. | 846 | to 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. |
| 858 | If you want to get the old behavior back, customize the `Info-quoted' | 855 | If you want to get the old behavior back, customize the 'Info-quoted' |
| 859 | face to use the same definitions as the default face. | 856 | face 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 |
| 866 | non-nil value) directs the command to limit the completion | 863 | non-nil value) directs the command to limit the completion |
| 867 | alternatives to currently visited manuals. | 864 | alternatives 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 |
| 876 | to delete or undelete multiple messages. | 873 | to delete or undelete multiple messages. |
| 877 | 874 | ||
| 878 | +++ | 875 | +++ |
| @@ -880,24 +877,24 @@ to delete or undelete multiple messages. | |||
| 880 | libxml2 or if you have the Lynx browser installed. By default, Rmail | 877 | libxml2 or if you have the Lynx browser installed. By default, Rmail |
| 881 | will display the HTML version of a mail message that has both HTML and | 878 | will display the HTML version of a mail message that has both HTML and |
| 882 | plain text parts, if display of HTML email is possible; customize the | 879 | plain 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, |
| 887 | you can no longer use commas to separate regular expressions. | 884 | you 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 |
| 895 | specify the type of shell in use (bash, csh, etc). | 892 | specify 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'. |
| 899 | This provides old-style ("dumb") indentation of continued lines. | 896 | This provides old-style ("dumb") indentation of continued lines. |
| 900 | See the doc string of `sh-indent-after-continuation' for details. | 897 | See 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. | |||
| 908 | program is used instead. This program used to be run in --insecure | 905 | program is used instead. This program used to be run in --insecure |
| 909 | mode by default, but has now changed to be secure instead, and will | 906 | mode by default, but has now changed to be secure instead, and will |
| 910 | fail if you try to connect to non-verifiable hosts. This is | 907 | fail if you try to connect to non-verifiable hosts. This is |
| 911 | controlled by the `tls-program' variable. | 908 | controlled 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". |
| 917 | When `url-handler-mode' is enabled, file operations for these | 914 | When 'url-handler-mode' is enabled, file operations for these |
| 918 | protocols as well as for "telnet" and "ftp" are passed to Tramp. | 915 | protocols 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. |
| 922 | The new `url-user-agent' variable can be customized to be a string or | 919 | The new 'url-user-agent' variable can be customized to be a string or |
| 923 | a function. | 920 | a 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 |
| 927 | to specify that we're running in a noninteractive context, and that | 924 | to specify that we're running in a noninteractive context, and that |
| 928 | we should not be queried about things like TLS certificate validity. | 925 | we 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" |
| 932 | variable, meaning you can bind it around an `url-retrieve' call. | 929 | variable, 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 |
| 936 | plist will contain a :peer element that has the output of | 933 | plist 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 |
| 955 | filesystem notifications. | 952 | filesystem 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 |
| 961 | connections using Tramp. | 958 | connections using Tramp. |
| 962 | 959 | ||
| 963 | --- | 960 | --- |
| 964 | *** New command `sql-send-line-and-next'. | 961 | *** New command 'sql-send-line-and-next'. |
| 965 | This command, bound to `C-c C-n' by default, sends the current line to | 962 | This command, bound to 'C-c C-n' by default, sends the current line to |
| 966 | the SQL process and advances to the next line, skipping whitespace and | 963 | the SQL process and advances to the next line, skipping whitespace and |
| 967 | comments. | 964 | comments. |
| 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'. |
| 976 | Implemented for Bzr, Git, Hg. As part of this change, the pre-existing | 973 | Implemented 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'. |
| 984 | This command is useful when you perform version control commands | 981 | This command is useful when you perform version control commands |
| 985 | outside Emacs (e.g., from the shell prompt), or if you switch the VC | 982 | outside Emacs (e.g., from the shell prompt), or if you switch the VC |
| 986 | back-end for the buffer's file, or remove it from version control. | 983 | back-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 |
| 990 | the color range from `vc-annotate-color-map' is applied to the | 987 | the color range from 'vc-annotate-color-map' is applied to the |
| 991 | background or to the foreground. | 988 | background 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 |
| 995 | instead of the next window. If you want the previous behavior of | 992 | instead of the next window. If you want the previous behavior of |
| 996 | comparing with the next window, customize the new option | 993 | comparing 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' |
| 1002 | replace the face `compare-windows', which is now an obsolete alias for | 999 | replace 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 |
| 1007 | corresponding to each of the possible states. See the `vc-faces' | 1004 | corresponding to each of the possible states. See the 'vc-faces' |
| 1008 | customization group. | 1005 | customization 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' |
| 1013 | nil to disable this. | 1010 | nil to disable this. |
| 1014 | 1011 | ||
| 1015 | --- | 1012 | --- |
| @@ -1032,52 +1029,52 @@ macro argument expansion, interactive macro evaluation and automatic | |||
| 1032 | scanning of #define'd symbols. | 1029 | scanning 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 |
| 1036 | result of evaluating a macro. | 1033 | result 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 |
| 1040 | all defined symbols in `hide-ifdef-env'. | 1037 | all 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 |
| 1044 | file name patterns. Defaults to files whose extension is one of `.h', | 1041 | file 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 |
| 1049 | reinclusion protected (a.k.a. "idempotent") header files from being hidden. | 1046 | reinclusion 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, |
| 1051 | when its guard symbol is already defined.) Defaults to `t'. | 1048 | when 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 |
| 1055 | name patterns (e.g. all "FOR_DOXYGEN_ONLY_*") to be ignored when | 1052 | name patterns (e.g. all "FOR_DOXYGEN_ONLY_*") to be ignored when |
| 1056 | looking for macro definitions. By default, no symbols are ignored. | 1053 | looking 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 |
| 1062 | use PDF instead of DVI. | 1059 | use 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 |
| 1067 | many other math macros are displayed using unicode characters. | 1064 | many 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. |
| 1071 | By default, 32 consecutive spaces or four consecutive TABs are | 1068 | By default, 32 consecutive spaces or four consecutive TABs are |
| 1072 | considered to be too deep, but the new variable | 1069 | considered 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'. |
| 1077 | New options `tildify-space-string', `tildify-pattern', and | 1074 | New 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 |
| 1081 | helper functions) obsolete. | 1078 | helper functions) obsolete. |
| 1082 | 1079 | ||
| 1083 | +++ | 1080 | +++ |
| @@ -1090,41 +1087,41 @@ to a definition. It supersedes and obsoletes many Etags commands, | |||
| 1090 | while still using the etags.el code that reads the TAGS tables as one | 1087 | while still using the etags.el code that reads the TAGS tables as one |
| 1091 | of its back-ends. | 1088 | of its back-ends. |
| 1092 | 1089 | ||
| 1093 | The command `xref-find-definitions' replaces `find-tag' and provides | 1090 | The command 'xref-find-definitions' replaces 'find-tag' and provides |
| 1094 | an interface to pick one definition among several. | 1091 | an 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 | ||
| 1103 | As a result of this, the following commands are now obsolete: | 1100 | As 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 |
| 1109 | replacements yet. | 1106 | replacements 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 |
| 1113 | replaced by xref-style commands, see the "Dired" section below. | 1110 | replaced 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 |
| 1120 | alias for a private variable. `xref-push-marker-stack' and | 1117 | alias 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 |
| 1122 | of searches for definitions. | 1119 | of 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 |
| 1126 | information about mode local overrides (defined by cedet/mode-local.el | 1123 | information 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 | ||
| 1129 | The framework's Lisp API is still experimental and can change in major, | 1126 | The framework's Lisp API is still experimental and can change in major, |
| 1130 | backward-incompatible ways. | 1127 | backward-incompatible ways. |
| @@ -1134,7 +1131,7 @@ backward-incompatible ways. | |||
| 1134 | 1131 | ||
| 1135 | The new package Project provides generic infrastructure for dealing | 1132 | The new package Project provides generic infrastructure for dealing |
| 1136 | with projects. The main commands included in it are | 1133 | with 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 | ||
| 1139 | The Lisp API of this package is still experimental. | 1136 | The Lisp API of this package is still experimental. |
| 1140 | 1137 | ||
| @@ -1159,27 +1156,27 @@ rewritten. | |||
| 1159 | There have also been customization changes. | 1156 | There 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 |
| 1163 | multiple EUDC servers in init file. | 1160 | multiple 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 |
| 1167 | on email and firstname instead of surname. | 1164 | on 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 |
| 1171 | to avoid interfering with the kill ring. | 1168 | to 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 |
| 1183 | allow overriding the regular expression that recognizes the ldapsearch | 1180 | allow overriding the regular expression that recognizes the ldapsearch |
| 1184 | command line's password prompt. | 1181 | command 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. |
| 1196 | If provided with an optional non-nil argument, the scrollback contents will be cleared. | 1193 | If 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 |
| 1201 | buffers from eshell more convenient. Custom variable | 1198 | buffers 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 |
| 1203 | removed. | 1200 | removed. |
| 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 |
| 1208 | when their processes die. This fixes issues with short-lived commands | 1205 | when their processes die. This fixes issues with short-lived commands |
| 1209 | and makes visual programs more useful in general. For example, if | 1206 | and 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 |
| 1211 | buffer, even if the "git log" process dies. For the old behavior, | 1208 | buffer, even if the "git log" process dies. For the old behavior, |
| 1212 | make the new option `eshell-destroy-buffer-when-process-dies' non-nil. | 1209 | make 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 |
| 1227 | be added to the archive. | 1224 | be added to the archive. |
| 1228 | 1225 | ||
| 1229 | ** Autorevert | 1226 | ** Autorevert |
| @@ -1233,7 +1230,7 @@ be added to the archive. | |||
| 1233 | Emacs is compiled with file notification support. | 1230 | Emacs 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'. |
| 1237 | See <http://debbugs.gnu.org/22814>. | 1234 | See <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 |
| 1246 | not active any longer. | 1243 | not 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 |
| 1250 | notification descriptor still corresponds to an activate watch. | 1247 | notification 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 |
| 1256 | directories and decompress zip files. | 1253 | directories 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 |
| 1260 | compress many marked files into a single named archive. The | 1257 | compress many marked files into a single named archive. The |
| 1261 | compression command is determined from the new | 1258 | compression 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. |
| 1266 | These keys, now bound to `dired-do-find-regexp' and | 1263 | These 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' |
| 1268 | and `xref-query-replace-in-results': they present the matches | 1265 | and 'xref-query-replace-in-results': they present the matches |
| 1269 | in the `*xref*' buffer and let you move through the matches. No need | 1266 | in the '*xref*' buffer and let you move through the matches. No need |
| 1270 | to use `tags-loop-continue' to resume the search or replace loop. The | 1267 | to use 'tags-loop-continue' to resume the search or replace loop. The |
| 1271 | previous commands, `dired-do-search' and | 1268 | previous 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 |
| 1273 | keys; rebind `A' and `Q' to invoke them if you want the old behavior | 1270 | keys; rebind 'A' and 'Q' to invoke them if you want the old behavior |
| 1274 | back. We intend to obsolete the old commands in a future release. | 1271 | back. 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 |
| 1280 | call `tabulated-list-init-header', in which case it will have no | 1277 | call 'tabulated-list-init-header', in which case it will have no |
| 1281 | header. | 1278 | header. |
| 1282 | 1279 | ||
| 1283 | +++ | 1280 | +++ |
| 1284 | *** `tabulated-list-print' takes a second optional argument, update, | 1281 | *** 'tabulated-list-print' takes a second optional argument, update, |
| 1285 | which specifies an alternative printing method which is faster when | 1282 | which specifies an alternative printing method which is faster when |
| 1286 | few or no entries have changed. | 1283 | few 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. |
| 1310 | The main entry points are `cl-defgeneric' and `cl-defmethod'. See the | 1307 | The main entry points are 'cl-defgeneric' and 'cl-defmethod'. See the |
| 1311 | node "Generic Functions" in the Emacs Lisp manual for more details. | 1308 | node "Generic Functions" in the Emacs Lisp manual for more details. |
| 1312 | 1309 | ||
| 1313 | --- | 1310 | --- |
| @@ -1319,25 +1316,25 @@ SCSS (Sassy CSS) files. | |||
| 1319 | let-bind the values stored in an alist. | 1316 | let-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 |
| 1323 | types the text. Breaking line after a single-character words is | 1320 | types the text. Breaking line after a single-character words is |
| 1324 | forbidden by Czech and Polish typography (and may be discouraged in | 1321 | forbidden by Czech and Polish typography (and may be discouraged in |
| 1325 | other languages), so `auto-tildify-mode' makes it easier to create | 1322 | other languages), so 'auto-tildify-mode' makes it easier to create |
| 1326 | a typographically-correct documents. | 1323 | a 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 |
| 1330 | that complement basic functions provided by subr.el. All functions | 1327 | that complement basic functions provided by subr.el. All functions |
| 1331 | are prefixed with `seq-' and work on lists, strings and vectors. | 1328 | are 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 |
| 1336 | alists, hash-table and arrays. All functions are prefixed with | 1333 | alists, 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 |
| 1341 | evaluation of forms. | 1338 | evaluation 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 |
| 1352 | arguments. The earlier behavior of silently supplying a nil to the | 1349 | arguments. The earlier behavior of silently supplying a nil to the |
| 1353 | last variable when there was an odd number of arguments has been | 1350 | last variable when there was an odd number of arguments has been |
| 1354 | eliminated. | 1351 | eliminated. |
| 1355 | 1352 | ||
| 1356 | +++ | 1353 | +++ |
| 1357 | ** `syntax-begin-function' is declared obsolete. | 1354 | ** 'syntax-begin-function' is declared obsolete. |
| 1358 | Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN | 1355 | Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN |
| 1359 | slot in font-lock-defaults. | 1356 | slot 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. |
| 1363 | When Subword mode is turned on, `forward-word', `backward-word', and | 1360 | When Subword mode is turned on, 'forward-word', 'backward-word', and |
| 1364 | everything that uses them will move by sub-words, effectively | 1361 | everything that uses them will move by sub-words, effectively |
| 1365 | overriding the buffer's syntax table. Lisp programs that shouldn't be | 1362 | overriding the buffer's syntax table. Lisp programs that shouldn't be |
| 1366 | affected by Subword mode should call the new functions | 1363 | affected 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 |
| 1371 | called during startup. Users who call this function in their init | 1368 | called during startup. Users who call this function in their init |
| 1372 | file and still expect it to be run after startup should set | 1369 | file 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'. |
| 1378 | This means that you can't use `make-local-variable' and expect them to | 1375 | This 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. |
| 1383 | The `track-mouse' form no longer refrains from changing the shape of | 1380 | The 'track-mouse' form no longer refrains from changing the shape of |
| 1384 | the mouse pointer for the entire time the body of that form is | 1381 | the mouse pointer for the entire time the body of that form is |
| 1385 | executed. Lisp programs that use `track-mouse' for dragging across | 1382 | executed. Lisp programs that use 'track-mouse' for dragging across |
| 1386 | large portions of the Emacs display, and want to avoid changes in the | 1383 | large portions of the Emacs display, and want to avoid changes in the |
| 1387 | pointer shape during dragging, should bind the variable `track-mouse' | 1384 | pointer shape during dragging, should bind the variable 'track-mouse' |
| 1388 | to the special value `dragging' in the body of the form. | 1385 | to 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 |
| 1392 | has any effect. (This change was made in Emacs 24.4 but was not | 1389 | has any effect. (This change was made in Emacs 24.4 but was not |
| 1393 | advertised at the time.) | 1390 | advertised 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. |
| 1397 | This is mostly a bug-fix, since this change was missed back in 24.4 when | 1394 | This is mostly a bug-fix, since this change was missed back in 24.4 when |
| 1398 | symbol-function was changed not to signal `void-function' any more. | 1395 | symbol-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, |
| 1402 | this is now considered deprecated and will be removed in a future release. | ||
| 1405 | Use the INSIDE_EMACS environment variable instead. | 1403 | Use 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. |
| 1409 | Use `save-mark-and-excursion' if you want the old behavior. | 1407 | Use '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 |
| 1413 | argument (`predicate'). | 1411 | argument ('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. |
| 1417 | The minibuffer will be the current buffer when the function is called. | 1415 | The minibuffer will be the current buffer when the function is called. |
| 1418 | If you want the old behavior of calling the function in the buffer | 1416 | If you want the old behavior of calling the function in the buffer |
| 1419 | from which the minibuffer was entered, use the new argument | 1417 | from 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 |
| 1437 | group ID instead of `t'. | 1435 | group 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 | |||
| 1453 | in languages like German where downcasing rules depend on grammar. | 1451 | in 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. |
| 1457 | Set it to ‘curve’ for curved single quotes ‘like this’, to ‘straight’ | 1455 | Set it to 'curve' for curved single quotes, to 'straight' for straight |
| 1458 | for straight apostrophes 'like this', and to ‘grave’ for grave accent | 1456 | apostrophes, and to 'grave' for grave accent and apostrophe. The |
| 1459 | and apostrophe `like this'. The default value nil acts like ‘curve’ | 1457 | default value nil acts like 'curve' if curved single quotes are |
| 1460 | if curved single quotes are displayable, and like ‘grave’ otherwise. | 1458 | displayable, and like 'grave' otherwise. The new variable affects |
| 1461 | The new variable affects display of diagnostics and help, but not of info. | 1459 | display 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. |
| 1465 | That is, it converts documentation strings’ quoting style as per the | 1463 | That is, it converts documentation strings' quoting style as per the |
| 1466 | value of ‘text-quoting-style’. Doc strings in source code can use | 1464 | value of 'text-quoting-style'. Doc strings in source code can use |
| 1467 | either curved single quotes or grave accents and apostrophes. As | 1465 | either curved single quotes or grave accents and apostrophes. As |
| 1468 | before, characters preceded by \= are output as-is. | 1466 | before, 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. |
| 1472 | They use the new ‘format-message’ function instead of plain ‘format’, | 1470 | They use the new 'format-message' function instead of plain 'format', |
| 1473 | so that they now follow user preference as per ‘text-quoting-style’ | 1471 | so that they now follow user preference as per 'text-quoting-style' |
| 1474 | when processing curved single quotes, grave accents, and apostrophes | 1472 | when processing curved single quotes, grave accents, and apostrophes |
| 1475 | in their format argument. | 1473 | in 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 |
| 1479 | now match multibyte characters using Unicode character properties. | 1477 | now match multibyte characters using Unicode character properties. |
| 1480 | If you want the old behavior where they matched any character with | 1478 | If you want the old behavior where they matched any character with |
| 1481 | word syntax, use `\sw' instead. | 1479 | word 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, | |||
| 1489 | use [:multibyte:] instead. | 1487 | use [: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 |
| 1493 | behavior, set `diff-switches' to `-c'. | 1491 | behavior, 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 |
| 1498 | dynamically. Any third-party code that changes these templates should | 1496 | dynamically. Any third-party code that changes these templates should |
| 1499 | be updated accordingly. | 1497 | be 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)'. |
| 1503 | The new behavior is compatible with Common Lisp and with XEmacs. | 1501 | The new behavior is compatible with Common Lisp and with XEmacs. |
| 1504 | This change does not affect Lisp code intended to be portable to | 1502 | This change does not affect Lisp code intended to be portable to |
| 1505 | Emacs 24.2 and earlier, which did not support unary ‘/’. | 1503 | Emacs 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 |
| 1509 | that happen, `unhandled-file-name-directory' now defaults to calling | 1507 | that 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 |
| 1525 | parsing functions like `forward-sexp'. | 1523 | parsing 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 |
| 1530 | commands other than the predefined `C-u'. | 1528 | commands 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'. |
| 1534 | These allow conversion between buffer positions and the corresponding | 1532 | These allow conversion between buffer positions and the corresponding |
| 1535 | file byte offsets, given the file's encoding. | 1533 | file 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'. |
| 1539 | Previously, the default value of `nil' implied using `read'. | 1537 | Previously, the default value of 'nil' implied using 'read'. |
| 1540 | 1538 | ||
| 1541 | +++ | 1539 | +++ |
| 1542 | ** New hook `pre-redisplay-functions'. | 1540 | ** New hook 'pre-redisplay-functions'. |
| 1543 | It is a bit easier to use than `pre-redisplay-function'. | 1541 | It 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. |
| 1547 | Previously, it was an optional argument, now it's mandatory. | 1545 | Previously, 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. |
| 1551 | Replaced by properties `cursor-intangible' and `cursor-sensor-functions', | 1549 | Replaced by properties 'cursor-intangible' and 'cursor-sensor-functions', |
| 1552 | implemented by the new `cursor-intangible-mode' and | 1550 | implemented 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. |
| 1557 | Use the new minor modes `cursor-intangible-mode' and | 1555 | Use 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 |
| 1563 | of subprocess. | 1561 | of 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 |
| 1568 | process filter, sentinel, etc., through keyword arguments (similar to | 1566 | process 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 |
| 1573 | files (recursively) under a directory. | 1571 | files (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 |
| 1578 | area. The output is still logged to the *Messages* buffer. | 1576 | area. 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 |
| 1582 | buffers to allow certain parts of the text to be writable. | 1580 | buffers 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' |
| 1627 | preserve the collation order as defined by the system's locale(1) | 1625 | preserve the collation order as defined by the system's locale(1) |
| 1628 | environment. For the time being this is implemented for modern POSIX | 1626 | environment. For the time being this is implemented for modern POSIX |
| 1629 | systems and for MS-Windows, for other systems they fall back to their | 1627 | systems and for MS-Windows, for other systems they fall back to their |
| 1630 | counterparts `string-lessp' and `string-equal'. | 1628 | counterparts '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. |
| 1634 | The effect is that, on systems that use ls-lisp for Dired, the default | 1632 | The effect is that, on systems that use ls-lisp for Dired, the default |
| 1635 | sort order of the files in Dired is now different from what it was in | 1633 | sort order of the files in Dired is now different from what it was in |
| 1636 | previous versions of Emacs. In particular, the file names are sorted | 1634 | previous versions of Emacs. In particular, the file names are sorted |
| @@ -1638,10 +1636,10 @@ disregarding punctuation, accents, and diacritics, and letter case is | |||
| 1638 | ignored. For example, files whose name begin with a period will no | 1636 | ignored. For example, files whose name begin with a period will no |
| 1639 | longer appear near the beginning of the directory listing. If you | 1637 | longer appear near the beginning of the directory listing. If you |
| 1640 | want the old, locale-independent sorting, customize the new option | 1638 | want 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', |
| 1645 | if set to a non-nil value, causes the above 2 functions to ignore | 1643 | if set to a non-nil value, causes the above 2 functions to ignore |
| 1646 | symbol and punctuation characters when collating strings. This | 1644 | symbol and punctuation characters when collating strings. This |
| 1647 | emulates the behavior of modern Posix platforms when the locale's | 1645 | emulates 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 | |||
| 1649 | MS-Windows doesn't support UTF-8 as codeset in its locales. | 1647 | MS-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' |
| 1656 | but makes `called-interactively-p' treat the function as (you guessed it) | 1654 | but makes 'called-interactively-p' treat the function as (you guessed it) |
| 1657 | called interactively. | 1655 | called 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 |
| 1664 | find characters whose directionality was, perhaps maliciously, | 1662 | find characters whose directionality was, perhaps maliciously, |
| 1665 | overridden by directional override control characters. Lisp programs | 1663 | overridden by directional override control characters. Lisp programs |
| 1666 | can use this to detect potential phishing of URLs and other links that | 1664 | can use this to detect potential phishing of URLs and other links that |
| 1667 | exploits bidirectional display reordering. | 1665 | exploits 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 |
| 1671 | copy a portion of a buffer into a different location while preserving | 1669 | copy a portion of a buffer into a different location while preserving |
| 1672 | the visual appearance both of the copied text and the text at | 1670 | the visual appearance both of the copied text and the text at |
| 1673 | destination, even when the copied text includes mixed bidirectional | 1671 | destination, even when the copied text includes mixed bidirectional |
| 1674 | text and directional control characters. | 1672 | text 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 |
| 1681 | have side effects. | 1679 | have 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 |
| 1685 | permissions set to temporary values (e.g., for creating private files). | 1683 | permissions 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 |
| 1695 | system's name has changed or if the Emacs process has changed systems, | 1693 | system's name has changed or if the Emacs process has changed systems, |
| 1696 | and to avoid long waits it no longer consults DNS to canonicalize the | 1694 | and to avoid long waits it no longer consults DNS to canonicalize the |
| 1697 | name. The variable `system-name' is now obsolete. | 1695 | name. 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 |
| 1704 | directory at point. | 1702 | directory 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. |
| 1711 | In particular, it now returns the average width of the font's | 1709 | In particular, it now returns the average width of the font's |
| 1712 | characters, which can be used for geometry-related calculations. | 1710 | characters, 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 |
| 1716 | character in the current buffer's default font. If the default face | 1714 | character in the current buffer's default font. If the default face |
| 1717 | is remapped (see `face-remapping-alist'), the value for the remapped | 1715 | is remapped (see 'face-remapping-alist'), the value for the remapped |
| 1718 | face is returned. This function complements the existing function | 1716 | face 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 |
| 1723 | the height and average width of characters in a specified face and | 1721 | the height and average width of characters in a specified face and |
| 1724 | window. If FACE is remapped (see `face-remapping-alist'), the | 1722 | window. If FACE is remapped (see 'face-remapping-alist'), the |
| 1725 | function returns the information for the remapped face. | 1723 | function 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 |
| 1729 | number of characters that can be displayed on one line. If a face | 1727 | number of characters that can be displayed on one line. If a face |
| 1730 | and/or window are provided, these values are used for the | 1728 | and/or window are provided, these values are used for the |
| 1731 | calculation. This function is different from `window-body-width' in | 1729 | calculation. This function is different from 'window-body-width' in |
| 1732 | that it accounts for (i) continuation glyphs, (ii) the size of the | 1730 | that it accounts for (i) continuation glyphs, (ii) the size of the |
| 1733 | font, and (iii) the specified window. | 1731 | font, 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 | 1742 | in addition to the old style with grave accent and apostrophe. The |
| 1745 | apostrophe `like-this'. The new style looks better on today's displays. | 1743 | new style looks better on today's displays. In the new Electric Quote |
| 1746 | In the new Electric Quote mode, you can enter curved single quotes | 1744 | mode, you can enter curved single quotes into documentation by typing |
| 1747 | into documentation by typing ` and '. Outside Electric Quote mode, | 1745 | grave accent and apostrophe. Outside Electric Quote mode, you can |
| 1748 | you can enter them by typing ‘C-x 8 [’ and ‘C-x 8 ]’, or (if your Alt | 1746 | enter them by typing 'C-x 8 [' and 'C-x 8 ]', or (if your Alt key |
| 1749 | key works) by typing ‘A-[’ and ‘A-]’. As described above under | 1747 | works) by typing 'A-[' and 'A-]'. As described above under |
| 1750 | ‘text-quoting-style’, the user can specify how to display doc string | 1748 | 'text-quoting-style', the user can specify how to display doc string |
| 1751 | quotes. | 1749 | quotes. |
| 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 |
| 1755 | curved single quotes, grave accents and apostrophes as per | 1753 | curved single quotes, grave accents and apostrophes as per |
| 1756 | ‘text-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 |
| 1768 | that specifies the time zone rules for conversion. ZONE is omitted or | 1766 | that specifies the time zone rules for conversion. ZONE is omitted or |
| 1769 | nil for Emacs local time, t for Universal Time, ‘wall’ for system wall | 1767 | nil for Emacs local time, t for Universal Time, 'wall' for system wall |
| 1770 | clock time, or a string as in ‘set-time-zone-rule’ for a time zone | 1768 | clock time, or a string as in 'set-time-zone-rule' for a time zone |
| 1771 | rule. The affected functions are ‘current-time-string’, | 1769 | rule. The affected functions are 'current-time-string', |
| 1772 | ‘current-time-zone’, ‘decode-time’, and ‘format-time-string’. The | 1770 | 'current-time-zone', 'decode-time', and 'format-time-string'. The |
| 1773 | function ‘encode-time’, which already accepted a simple time zone rule | 1771 | function 'encode-time', which already accepted a simple time zone rule |
| 1774 | argument, has been extended to accept all the new forms. | 1772 | argument, 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 |
| 1778 | current time) as well as the usual list-of-integer representation. | 1776 | current time) as well as the usual list-of-integer representation. |
| 1779 | Affected functions include `current-time-string', `current-time-zone', | 1777 | Affected 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 |
| 1785 | been obsoleted. | 1783 | been 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 |
| 1789 | undocumented integer-pair format. Instead, they return a list of two | 1787 | undocumented integer-pair format. Instead, they return a list of two |
| 1790 | integers. | 1788 | integers. |
| 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 |
| 1794 | of the Emacs process to binary I/O mode. | 1792 | of 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 |
| 1798 | name (as returned from, for instance, `file-name-all-completions') is | 1796 | name (as returned from, for instance, 'file-name-all-completions') is |
| 1799 | a directory file name. It returns non-nil if the last character in | 1797 | a directory file name. It returns non-nil if the last character in |
| 1800 | the name is a directory separator character (forward slash on GNU and | 1798 | the name is a directory separator character (forward slash on GNU and |
| 1801 | Unix systems, forward- or backslash on MS-Windows and MS-DOS). | 1799 | Unix 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 |
| 1809 | standard-display-table, and encode output using locale-coding-system. | 1807 | standard-display-table, and encode output using locale-coding-system. |
| 1810 | To force a specific encoding, bind `coding-system-for-write' to the | 1808 | To force a specific encoding, bind 'coding-system-for-write' to the |
| 1811 | coding-system of your choice when invoking functions like `prin1' and | 1809 | coding-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'. |
| 1819 | This is used by Google's Native Client (NaCl). | 1817 | This is used by Google's Native Client (NaCl). |
| 1820 | 1818 | ||
| 1821 | ** Miscellaneous name change | 1819 | ** Miscellaneous name change |
| 1822 | 1820 | ||
| 1823 | --- | 1821 | --- |
| 1824 | For consistency with the usual Emacs spelling, the Lisp variable | 1822 | For 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'. |
| 1826 | The old name should still work, as an obsolescent alias. | 1824 | The 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. | |||
| 1832 | provide toolkit scroll bars, namely Gtk+, Lucid, Motif and Windows. | 1830 | provide toolkit scroll bars, namely Gtk+, Lucid, Motif and Windows. |
| 1833 | Horizontal scroll bars are turned off by default. | 1831 | Horizontal 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 |
| 1863 | frame's geometry. | 1861 | frame'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 |
| 1868 | mouse cursor. | 1866 | mouse 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 |
| 1872 | retrieve body, absolute and pixel edges of the window. | 1870 | retrieve 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 |
| 1882 | coordinates of a visible buffer position. | 1880 | coordinates of a visible buffer position. |
| 1883 | 1881 | ||
| 1884 | +++ | 1882 | +++ |
| @@ -1895,26 +1893,36 @@ they display when setting default font, menu bar, fringe width, or | |||
| 1895 | scroll bars. In particular, maximized and fullscreen frames are | 1893 | scroll bars. In particular, maximized and fullscreen frames are |
| 1896 | conceptually never resized if such settings change. For fullheight and | 1894 | conceptually never resized if such settings change. For fullheight and |
| 1897 | fullwidth frames, the behavior may depend on the toolkit used. | 1895 | fullwidth 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 |
| 1905 | a window without "fixing" it. It's supported by `fit-window-to-buffer', | 1903 | a 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'. |
| 1910 | This displays the buffer in an existing frame other than the current | 1908 | This displays the buffer in an existing frame other than the current |
| 1911 | frame, and allows the caller to specify a frame predicate to exclude | 1909 | frame, and allows the caller to specify a frame predicate to exclude |
| 1912 | frames. | 1910 | frames. |
| 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' |
| 1917 | and `window-divider-default-right-width'. | 1915 | and 'window-divider-default-right-width'. |
| 1916 | |||
| 1917 | +++ | ||
| 1918 | *** The window displaying the '*Completions*' buffer with minibuffer | ||
| 1919 | completion candidates is now shown at the bottom of the selected | ||
| 1920 | frame. The size of that window is always as large as required to | ||
| 1921 | display all the candidates, except when limited by the minimum size | ||
| 1922 | of the other windows on that frame; those other windows are resized | ||
| 1923 | to provide space for the '*Completions*' display. The Emacs manual | ||
| 1924 | describes how to customize 'display-buffer-alist' to get back the old | ||
| 1925 | behavior, 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 | ||
| 1928 | By default, `etags' will not qualify class members for Perl and C-like | 1936 | By default, 'etags' will not qualify class members for Perl and C-like |
| 1929 | object-oriented languages with their class names and namespaces, and | 1937 | object-oriented languages with their class names and namespaces, and |
| 1930 | will remove qualifications used explicitly in the code from the tag | 1938 | will remove qualifications used explicitly in the code from the tag |
| 1931 | names it puts in TAGS files. This is so the etags.el back-end for | 1939 | names 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 |
| 1933 | positives. | 1941 | positives. |
| 1934 | 1942 | ||
| 1935 | Use --class-qualify (-Q) if you want the old default behavior of | 1943 | Use --class-qualify (-Q) if you want the old default behavior of |
| 1936 | qualifying class members in C++, Java, Objective C, and Perl. Note | 1944 | qualifying class members in C++, Java, Objective C, and Perl. Note |
| 1937 | that using -Q might make some class members become "unknown" to `M-.' | 1945 | that 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 |
| 1939 | qualified names by hand. | 1947 | qualified names by hand. |
| 1940 | 1948 | ||
| 1941 | +++ | 1949 | +++ |
| @@ -1962,7 +1970,7 @@ whitespace at line beginning. | |||
| 1962 | This includes the makefile.w32-in files in various subdirectories, and | 1970 | This includes the makefile.w32-in files in various subdirectories, and |
| 1963 | the support files. The file nt/configure.bat now just tells the user | 1971 | the support files. The file nt/configure.bat now just tells the user |
| 1964 | to use the procedure described in nt/INSTALL, by running the Posix | 1972 | to 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 |
| 1991 | non-native NS fullscreen. The default is nil. Set to t to enable | 1999 | non-native NS fullscreen. The default is nil. Set to t to enable |
| 1992 | animation when entering and leaving fullscreen. For native OSX fullscreen | 2000 | animation when entering and leaving fullscreen. For native OSX fullscreen |
| 1993 | this has no effect. | 2001 | this 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 |
| 1997 | MS-Windows application given the name of its executable program file. | 2005 | MS-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'. |
| 2000 | It can be used to tune the size of the buffer of pipes created for | 2008 | It can be used to tune the size of the buffer of pipes created for |
| 2001 | communicating with subprocesses, when the program run by a subprocess | 2009 | communicating with subprocesses, when the program run by a subprocess |
| 2002 | exhibits unusual buffering behavior. Default is zero, which lets the | 2010 | exhibits 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 | ||
| 2023 | Local variables: | 2031 | Local variables: |
| 2024 | coding: utf-8 | 2032 | coding: us-ascii |
| 2025 | mode: outline | 2033 | mode: outline |
| 2026 | paragraph-separate: "[ ]*$" | 2034 | paragraph-separate: "[ ]*$" |
| 2027 | end: | 2035 | end: |
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. */ |
| 48 | enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; | 48 | enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; |
| 49 | 49 | ||
| 50 | static 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) | |||
| 205 | static char * | 203 | static char * |
| 206 | getenv_TZ (void) | 204 | getenv_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) | |||
| 213 | static int | 211 | static int |
| 214 | setenv_TZ (char const *tz) | 212 | setenv_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. |
| 200 | updates: update-subdirs autoloads finder-data custom-deps | 200 | updates: 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. |
| 208 | repo-update: compile finder-data custom-deps | 208 | repo-update: compile finder-data custom-deps |
| 209 | 209 | ||
| 210 | # Update the AUTHORS file. | 210 | # Update etc/AUTHORS and etc/GNUS-NEWS. |
| 211 | 211 | ||
| 212 | update-authors: | 212 | update-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 | ||
| 216 | update-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 | ||
| 217 | ETAGS = ../lib-src/etags | 221 | ETAGS = ../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; |
| 819 | replace it with a dir-locals-file `./%s.el'" | 819 | replace 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. |
| 127 | If KEY is already present in MAP, replace the associated value | 127 | If KEY is already present in MAP, replace the associated value |
| 128 | with VALUE. | 128 | with VALUE. |
| 129 | 129 | ||
| 130 | MAP can be a list, hash-table or array." | 130 | MAP 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. |
| 138 | No error is signaled if KEY is not a key of MAP. If MAP is an | 135 | No error is signaled if KEY is not a key of MAP. If MAP is an |
| 139 | array, store nil at the index KEY. | 136 | array, store nil at the index KEY. |
| 140 | 137 | ||
| 141 | MAP can be a list, hash-table or array." | 138 | MAP 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. |
| 118 | Passphrase caching in Emacs is NOT recommended. Use gpg-agent instead. | 121 | Passphrase caching in Emacs is NOT recommended. Use gpg-agent instead. |
| 119 | See Info node `(message) Security'." | 122 | See 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. |
| 128 | Whether the passphrase is cached at all is controlled by | 128 | Whether 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. | |||
| 3096 | NOTE: The SOAP service provider should document the available | 3096 | NOTE: The SOAP service provider should document the available |
| 3097 | operations and their parameters for the service. You can also | 3097 | operations and their parameters for the service. You can also |
| 3098 | use the `soap-inspect' function to browse the available | 3098 | use the `soap-inspect' function to browse the available |
| 3099 | operations in a WSDL document." | 3099 | operations in a WSDL document. |
| 3100 | |||
| 3101 | NOTE: `soap-invoke' base64-decodes xsd:base64Binary return values | ||
| 3102 | into unibyte strings; these byte-strings require further | ||
| 3103 | interpretation 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 | |||
| 55 | There are languages where part of the code is actually written in | ||
| 56 | a sub language, e.g., a Yacc/Bison or ANTLR grammar also consists | ||
| 57 | of plain C code. This variable enables the major mode of the | ||
| 58 | main language to use the indentation engine of the sub-mode for | ||
| 59 | lines in code chunks written in the sub-mode's language. | ||
| 60 | |||
| 61 | When a major mode of such a main language decides to delegate the | ||
| 62 | indentation of a line/region to the indentation engine of the sub | ||
| 63 | mode, it should bind this variable to non-nil around the call. | ||
| 64 | |||
| 65 | The non-nil value should be a list of the form: | ||
| 66 | |||
| 67 | (FIRST-COLUMN (START . END) PREVIOUS-CHUNKS) | ||
| 68 | |||
| 69 | FIRST-COLUMN is the column the indentation engine of the sub-mode | ||
| 70 | should use for top-level language constructs inside the code | ||
| 71 | chunk (instead of 0). | ||
| 72 | |||
| 73 | START and END specify the region of the code chunk. END can be | ||
| 74 | nil, which stands for the value of `point-max'. The function | ||
| 75 | `prog-widen' uses this to restore restrictions imposed by the | ||
| 76 | sub-mode's indentation engine. | ||
| 77 | |||
| 78 | PREVIOUS-CHUNKS, if non-nil, provides the indentation engine of | ||
| 79 | the sub-mode with the virtual context of the code chunk. Valid | ||
| 80 | values 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. |
| 101 | When interactively called with prefix, indent the enclosing defun | 54 | When 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. | ||
| 118 | This function should be used instead of `widen' in any function used | ||
| 119 | by the indentation engine to make it respect the value of | ||
| 120 | `prog-indentation-context'. | ||
| 121 | |||
| 122 | This function (like `widen') is useful inside a | ||
| 123 | `save-restriction' to make the indentation correctly work when | ||
| 124 | narrowing 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. |
| 135 | Each element looks like (SYMBOL . CHARACTER), where the symbol | 67 | Each 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 | |||
| 1007 | happening for :at-dedenter-block-start context since the | 995 | happening for :at-dedenter-block-start context since the |
| 1008 | possibilities can be narrowed to specific indentation points." | 996 | possibilities 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 | |||
| 1066 | case INDENTATION is a list, this order is enforced." | 1054 | case 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. | |||
| 4479 | This function can be used as the value of `add-log-current-defun-function' | 4467 | This function can be used as the value of `add-log-current-defun-function' |
| 4480 | since it returns nil if point is not inside a defun." | 4468 | since 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." | |||
| 4683 | With optional argument LINE-NUMBER, check that line instead." | 4671 | With 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." | |||
| 4699 | Optional argument LINE-NUMBER forces the line number to check against." | 4687 | Optional 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 | |||
| 4716 | where the continued line ends." | 4704 | where 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 | |||
| 293 | what to do with it. For directions, type \\[help-command] at that time. | 298 | what to do with it. For directions, type \\[help-command] at that time. |
| 294 | 299 | ||
| 295 | In Transient Mark mode, if the mark is active, operate on the contents | 300 | In Transient Mark mode, if the mark is active, operate on the contents |
| 296 | of the region. Otherwise, operate from point to the end of the buffer. | 301 | of the region. Otherwise, operate from point to the end of the buffer's |
| 302 | accessible portion. | ||
| 297 | 303 | ||
| 298 | Use \\<minibuffer-local-map>\\[next-history-element] \ | 304 | Use \\<minibuffer-local-map>\\[next-history-element] \ |
| 299 | to pull the last incremental search string to the minibuffer | 305 | to 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 | |||
| 355 | what to do with it. For directions, type \\[help-command] at that time. | 361 | what to do with it. For directions, type \\[help-command] at that time. |
| 356 | 362 | ||
| 357 | In Transient Mark mode, if the mark is active, operate on the contents | 363 | In Transient Mark mode, if the mark is active, operate on the contents |
| 358 | of the region. Otherwise, operate from point to the end of the buffer. | 364 | of the region. Otherwise, operate from point to the end of the buffer's |
| 365 | accessible portion. | ||
| 359 | 366 | ||
| 360 | Use \\<minibuffer-local-map>\\[next-history-element] \ | 367 | Use \\<minibuffer-local-map>\\[next-history-element] \ |
| 361 | to pull the last incremental search regexp to the minibuffer | 368 | to 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. | |||
| 452 | In interactive use, `\\#' in itself stands for `replace-count'. | 459 | In interactive use, `\\#' in itself stands for `replace-count'. |
| 453 | 460 | ||
| 454 | In Transient Mark mode, if the mark is active, operate on the contents | 461 | In Transient Mark mode, if the mark is active, operate on the contents |
| 455 | of the region. Otherwise, operate from point to the end of the buffer. | 462 | of the region. Otherwise, operate from point to the end of the buffer's |
| 463 | accessible portion. | ||
| 456 | 464 | ||
| 457 | Use \\<minibuffer-local-map>\\[next-history-element] \ | 465 | Use \\<minibuffer-local-map>\\[next-history-element] \ |
| 458 | to pull the last incremental search regexp to the minibuffer | 466 | to pull the last incremental search regexp to the minibuffer |
| @@ -507,7 +515,8 @@ each successive replacement uses the next successive replacement string, | |||
| 507 | wrapping around from the last such string to the first. | 515 | wrapping around from the last such string to the first. |
| 508 | 516 | ||
| 509 | In Transient Mark mode, if the mark is active, operate on the contents | 517 | In Transient Mark mode, if the mark is active, operate on the contents |
| 510 | of the region. Otherwise, operate from point to the end of the buffer. | 518 | of the region. Otherwise, operate from point to the end of the buffer's |
| 519 | accessible portion. | ||
| 511 | 520 | ||
| 512 | Non-interactively, TO-STRINGS may be a list of replacement strings. | 521 | Non-interactively, TO-STRINGS may be a list of replacement strings. |
| 513 | 522 | ||
| @@ -573,7 +582,7 @@ replace backward. | |||
| 573 | Operates on the region between START and END (if both are nil, from point | 582 | Operates on the region between START and END (if both are nil, from point |
| 574 | to the end of the buffer). Interactively, if Transient Mark mode is | 583 | to the end of the buffer). Interactively, if Transient Mark mode is |
| 575 | enabled and the mark is active, operates on the contents of the region; | 584 | enabled and the mark is active, operates on the contents of the region; |
| 576 | otherwise from point to the end of the buffer. | 585 | otherwise from point to the end of the buffer's accessible portion. |
| 577 | 586 | ||
| 578 | Use \\<minibuffer-local-map>\\[next-history-element] \ | 587 | Use \\<minibuffer-local-map>\\[next-history-element] \ |
| 579 | to pull the last incremental search string to the minibuffer | 588 | to pull the last incremental search string to the minibuffer |
| @@ -620,7 +629,8 @@ regexp in `search-whitespace-regexp'. | |||
| 620 | This function is not affected by `replace-character-fold' | 629 | This function is not affected by `replace-character-fold' |
| 621 | 630 | ||
| 622 | In Transient Mark mode, if the mark is active, operate on the contents | 631 | In Transient Mark mode, if the mark is active, operate on the contents |
| 623 | of the region. Otherwise, operate from point to the end of the buffer. | 632 | of the region. Otherwise, operate from point to the end of the buffer's |
| 633 | accessible portion. | ||
| 624 | 634 | ||
| 625 | Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace | 635 | Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace |
| 626 | only matches surrounded by word boundaries. A negative prefix arg means | 636 | only 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. |
| 139 | This function reads and returns an utf-8 encoded character of | 139 | Set this to non-nil if you are sure that your terminal |
| 140 | command input. If the user generates an event which is not a | 140 | understands UTF-8 coordinates, but not SGR coordinates." |
| 141 | character (i.e., a mouse click or function key event), read-char | 141 | :version "25.1" |
| 142 | signals an error. | 142 | :type 'boolean |
| 143 | 143 | :risky t | |
| 144 | The returned event may come directly from the user, or from a | 144 | :group 'xterm) |
| 145 | keyboard macro. It is not decoded by the keyboard's input coding | 145 | |
| 146 | system 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. | |
| 148 | The optional arguments PROMPT and SECONDS work like in | 148 | If `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))) | 150 | coordinate as an UTF-8 code unit sequence; otherwise, reads a |
| 151 | (set-keyboard-coding-system 'utf-8) | 151 | single 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. | ||
| 331 | The returned control sequence enables basic mouse tracking, mouse | ||
| 332 | motion events and finally extended tracking on terminals that | ||
| 333 | support it. The following escape sequences are understood by | ||
| 334 | modern 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 | |||
| 357 | The two extension modes are mutually exclusive, where the last | ||
| 358 | given 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: | |||
| 343 | The two extension modes are mutually exclusive, where the last | 387 | The two extension modes are mutually exclusive, where the last |
| 344 | given escape sequence takes precedence over the former.") | 388 | given 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. | ||
| 397 | The 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. | ||
| 412 | SUFFIX is the last character of each escape sequence (?h to | ||
| 413 | enable, ?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 | |||
| 30 | made up of the name of each parameter. An exception to this rule are | 29 | made up of the name of each parameter. An exception to this rule are |
| 31 | methods without parameters. | 30 | methods without parameters. |
| 32 | 31 | ||
| 33 | The following calls a method in the object `anObject'. | 32 | The 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: | |||
| 71 | The NS interface features a printf-based trace package that prints the | 70 | The NS interface features a printf-based trace package that prints the |
| 72 | call tree of selected functions in the Cocoa interface, plus various | 71 | call tree of selected functions in the Cocoa interface, plus various |
| 73 | extra information. It can be enabled by uncommenting the line | 72 | extra information. It can be enabled by uncommenting the line |
| 74 | defining `NSTRACE_ENABLED' in "nsterm.h". To enable more output, | 73 | defining 'NSTRACE_ENABLED' in "nsterm.h". To enable more output, |
| 75 | uncomment the lines defining symbols starting with `NSTRACE_GROUP'. | 74 | uncomment 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 | ||
| 104 | The Nextstep section in the etc/TODO file for a list of ideas for | 103 | The Nextstep section in the etc/TODO file for a list of ideas for |
| 105 | future development. | 104 | future development. |
| 105 | |||
| 106 | |||
| 107 | ---------------------------------------------------------------------- | ||
| 108 | Copyright 2008-2016 Free Software Foundation, Inc. | ||
| 109 | |||
| 110 | This file is part of GNU Emacs. | ||
| 111 | |||
| 112 | GNU Emacs is free software: you can redistribute it and/or modify | ||
| 113 | it under the terms of the GNU General Public License as published by | ||
| 114 | the Free Software Foundation, either version 3 of the License, or | ||
| 115 | (at your option) any later version. | ||
| 116 | |||
| 117 | GNU Emacs is distributed in the hope that it will be useful, | ||
| 118 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 119 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 120 | GNU General Public License for more details. | ||
| 121 | |||
| 122 | You should have received a copy of the GNU General Public License | ||
| 123 | along 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) | ||
| 3734 | Lisp_Object | 3733 | Lisp_Object |
| 3735 | make_save_ptr_ptr (void *a, void *b) | 3734 | make_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 | ||
| 3746 | Lisp_Object | 3744 | Lisp_Object |
| 3747 | make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c) | 3745 | make_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 | ||
| 1459 | static void | 1459 | static _Noreturn void |
| 1460 | invalid_time (void) | 1460 | invalid_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 | ||
| 35 | typedef struct _EmacsFixed EmacsFixed; | 35 | typedef struct _EmacsFixed EmacsFixed; |
| 36 | typedef struct _EmacsFixedPrivate EmacsFixedPrivate; | ||
| 37 | typedef struct _EmacsFixedClass EmacsFixedClass; | 36 | typedef struct _EmacsFixedClass EmacsFixedClass; |
| 38 | 37 | ||
| 39 | struct _EmacsFixedPrivate | 38 | struct _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 | |||
| 30 | struct frame; | 30 | struct frame; |
| 31 | 31 | ||
| 32 | typedef struct _EmacsFixedPrivate EmacsFixedPrivate; | 32 | typedef struct _EmacsFixedPrivate EmacsFixedPrivate; |
| 33 | typedef struct _EmacsFixedClass EmacsFixedClass; | ||
| 34 | 33 | ||
| 35 | struct _EmacsFixed | 34 | struct _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 @@ | |||
| 3 | Copyright (C) 1988, 1993-1994, 1999, 2001-2016 Free Software Foundation, | 3 | Copyright (C) 1988, 1993-1994, 1999, 2001-2016 Free Software Foundation, |
| 4 | Inc. | 4 | Inc. |
| 5 | 5 | ||
| 6 | Author: Wolfgang Rupprecht (ac | 6 | Author: Wolfgang Rupprecht (according to ack.texi) |
| 7 | ording to ack.texi) | ||
| 8 | 7 | ||
| 9 | This file is part of GNU Emacs. | 8 | This 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 | ||
| 4571 | long | 4571 | long |
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 | ||
| 255 | static GdkPixbuf * | ||
| 256 | xg_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 | ||
| 286 | static GdkPixbuf * | 257 | static 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) | |||
| 430 | static bool | 430 | static bool |
| 431 | echo_keystrokes_p (void) | 431 | echo_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) | |||
| 9877 | bool | 9878 | bool |
| 9878 | requeued_events_pending_p (void) | 9879 | requeued_events_pending_p (void) |
| 9879 | { | 9880 | { |
| 9880 | return (!NILP (Vunread_command_events)); | 9881 | return (CONSP (Vunread_command_events)); |
| 9881 | } | 9882 | } |
| 9882 | 9883 | ||
| 9883 | DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, | 9884 | DEFUN ("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. | |||
| 9888 | If CHECK-TIMERS is non-nil, timers that are ready to run will do so. */) | 9889 | If 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. */ |
| 1768 | verify (offsetof (struct Lisp_Sub_Char_Table, contents) | 1768 | verify (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 | |||
| 651 | static BOOL | 649 | static BOOL |
| 652 | ns_menu_bar_should_be_hidden (void) | 650 | ns_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 | ||
| 659 | static CGFloat | 658 | struct EmacsMargins |
| 660 | ns_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. */ | 667 | static struct EmacsMargins |
| 668 | ns_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 | |||
| 718 | static struct EmacsMargins | ||
| 719 | ns_screen_margins_ignoring_hidden_dock (NSScreen *screen) | ||
| 720 | /* The parts of SCREEN used by the operating system, excluding the parts | ||
| 721 | reserved 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 | |||
| 761 | static CGFloat | ||
| 762 | ns_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) | |||
| 2392 | static void | 2505 | static void |
| 2393 | ns_copy_bits (struct frame *f, NSRect src, NSRect dest) | 2506 | ns_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 | |||
| 3402 | tty_pop_down_menu (Lisp_Object arg) | 3402 | tty_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. |
| 31391 | For an integer value, truncate lines in each window narrower than the | 31433 | For an integer value, truncate lines in each window narrower than the |
| 31392 | full frame width, provided the window width is less than that integer; | 31434 | full frame width, provided the total window width in column units is less |
| 31393 | otherwise, respect the value of `truncate-lines'. | 31435 | than that integer; otherwise, respect the value of `truncate-lines'. |
| 31436 | The total width of the window is as returned by `window-total-width', it | ||
| 31437 | includes the fringes, the continuation and truncation glyphs, the | ||
| 31438 | display margins (if any), and the scroll bar | ||
| 31394 | 31439 | ||
| 31395 | For any other non-nil value, truncate lines in all windows that do | 31440 | For any other non-nil value, truncate lines in all windows that do |
| 31396 | not span the full frame width. | 31441 | not span the full frame width. |
| @@ -31598,7 +31643,12 @@ A value of t means resize them to fit the text displayed in them. | |||
| 31598 | A value of `grow-only', the default, means let mini-windows grow only; | 31643 | A value of `grow-only', the default, means let mini-windows grow only; |
| 31599 | they return to their normal size when the minibuffer is closed, or the | 31644 | they return to their normal size when the minibuffer is closed, or the |
| 31600 | echo area becomes empty. */); | 31645 | echo 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. | ||
| 1790 | Several 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 |
| 225 | foo | 225 | foo # comment intended to confuse the tokenizer |
| 226 | .bar | 226 | .bar |
| 227 | 227 | ||
| 228 | z = { | 228 | z = { |
| @@ -295,10 +295,31 @@ foo > bar && | |||
| 295 | tee < qux | 295 | tee < qux |
| 296 | 296 | ||
| 297 | zux do | 297 | zux do |
| 298 | foo == bar and | 298 | foo == bar && |
| 299 | tee == qux | 299 | tee == qux |
| 300 | |||
| 301 | a = 3 and | ||
| 302 | b = 4 | ||
| 300 | end | 303 | end |
| 301 | 304 | ||
| 305 | foo + bar == | ||
| 306 | tee + qux | ||
| 307 | |||
| 308 | 1 .. 2 && | ||
| 309 | 3 | ||
| 310 | |||
| 311 | 3 < 4 + | ||
| 312 | 5 | ||
| 313 | |||
| 314 | 10 << 4 ^ | ||
| 315 | 20 | ||
| 316 | |||
| 317 | 100 + 2 >> | ||
| 318 | 3 | ||
| 319 | |||
| 320 | 2 ** 10 / | ||
| 321 | 2 | ||
| 322 | |||
| 302 | foo ^ | 323 | foo ^ |
| 303 | bar | 324 | bar |
| 304 | 325 | ||
| @@ -317,6 +338,11 @@ def bar | |||
| 317 | .baz | 338 | .baz |
| 318 | end | 339 | end |
| 319 | 340 | ||
| 341 | abc(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 |
| 321 | tee = if foo | 347 | tee = if foo |
| 322 | bar | 348 | bar |
| @@ -400,6 +426,17 @@ zoo | |||
| 400 | a.records().map(&:b).zip( | 426 | a.records().map(&:b).zip( |
| 401 | foo) | 427 | foo) |
| 402 | 428 | ||
| 429 | foo1 = | ||
| 430 | subject.update( | ||
| 431 | 1 | ||
| 432 | ) | ||
| 433 | |||
| 434 | foo2 = | ||
| 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: | |||
| 410 | foo(:bar => | 447 | foo(:bar => |
| 411 | tee) | 448 | tee) |
| 412 | 449 | ||
| 450 | regions = 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) |