diff options
| author | Andrea Corallo | 2020-06-04 10:33:07 +0100 |
|---|---|---|
| committer | Andrea Corallo | 2020-06-04 10:33:07 +0100 |
| commit | f5ea65b43678621cb450d7afbcd46032258d4b20 (patch) | |
| tree | dcc643ae66589a1690c50895a46e8004c981ead0 | |
| parent | e4e6bb7fddaa3a4e82748c106366fe9113dc16d9 (diff) | |
| parent | 4fff6502368e87b3c031589a1a96267243f868b0 (diff) | |
| download | emacs-f5ea65b43678621cb450d7afbcd46032258d4b20.tar.gz emacs-f5ea65b43678621cb450d7afbcd46032258d4b20.zip | |
Merge remote-tracking branch 'savannah/master' into HEAD
| -rw-r--r-- | doc/emacs/buffers.texi | 9 | ||||
| -rw-r--r-- | doc/emacs/maintaining.texi | 11 | ||||
| -rw-r--r-- | doc/misc/cc-mode.texi | 4 | ||||
| -rw-r--r-- | etc/NEWS | 8 | ||||
| -rw-r--r-- | etc/TODO | 1360 | ||||
| -rw-r--r-- | lisp/button.el | 2 | ||||
| -rw-r--r-- | lisp/dnd.el | 3 | ||||
| -rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 7 | ||||
| -rw-r--r-- | lisp/jsonrpc.el | 74 | ||||
| -rw-r--r-- | lisp/language/hebrew.el | 2 | ||||
| -rw-r--r-- | lisp/language/misc-lang.el | 8 | ||||
| -rw-r--r-- | lisp/ldefs-boot.el | 297 | ||||
| -rw-r--r-- | lisp/progmodes/cc-align.el | 22 | ||||
| -rw-r--r-- | lisp/progmodes/cc-mode.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/elisp-mode.el | 7 | ||||
| -rw-r--r-- | lisp/progmodes/etags.el | 4 | ||||
| -rw-r--r-- | lisp/progmodes/project.el | 103 | ||||
| -rw-r--r-- | lisp/progmodes/xref.el | 32 | ||||
| -rw-r--r-- | lisp/tab-bar.el | 7 | ||||
| -rw-r--r-- | src/alloc.c | 57 | ||||
| -rw-r--r-- | src/composite.c | 4 | ||||
| -rw-r--r-- | src/emacs.c | 5 | ||||
| -rw-r--r-- | src/lread.c | 21 | ||||
| -rw-r--r-- | src/pdumper.c | 2 | ||||
| -rw-r--r-- | src/xdisp.c | 7 | ||||
| -rw-r--r-- | src/xfaces.c | 24 | ||||
| -rw-r--r-- | test/src/xfaces-tests.el | 27 |
27 files changed, 1165 insertions, 944 deletions
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi index 6a53942d689..89ed470c055 100644 --- a/doc/emacs/buffers.texi +++ b/doc/emacs/buffers.texi | |||
| @@ -741,7 +741,14 @@ Ido''). Among other things, in Fido mode, @kbd{C-s} and @kbd{C-r} are | |||
| 741 | also used to rotate the completions list, @kbd{C-k} can be used to | 741 | also used to rotate the completions list, @kbd{C-k} can be used to |
| 742 | delete files and kill buffers in-list. Another noteworthy aspect is | 742 | delete files and kill buffers in-list. Another noteworthy aspect is |
| 743 | that @code{flex} is used as the default completion style | 743 | that @code{flex} is used as the default completion style |
| 744 | (@pxref{Completion Styles}). | 744 | (@pxref{Completion Styles}). To change this, add the following to |
| 745 | your initialization file (@pxref{Init File}): | ||
| 746 | |||
| 747 | @example | ||
| 748 | (defun my-icomplete-styles () | ||
| 749 | (setq-local completion-styles '(initials flex))) | ||
| 750 | (add-hook 'icomplete-minibuffer-setup-hook 'my-icomplete-styles) | ||
| 751 | @end example | ||
| 745 | 752 | ||
| 746 | To enable Fido mode, type @kbd{M-x fido-mode}, or customize | 753 | To enable Fido mode, type @kbd{M-x fido-mode}, or customize |
| 747 | the variable @code{fido-mode} to @code{t} (@pxref{Easy | 754 | the variable @code{fido-mode} to @code{t} (@pxref{Easy |
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 22b7639d349..cc7415e7ad5 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi | |||
| @@ -1718,6 +1718,17 @@ continue with @w{@kbd{M-x fileloop-continue @key{RET}}}. | |||
| 1718 | (@pxref{Dired}) listing the files in the current project's root | 1718 | (@pxref{Dired}) listing the files in the current project's root |
| 1719 | directory. | 1719 | directory. |
| 1720 | 1720 | ||
| 1721 | @findex project-vc-dir | ||
| 1722 | The command @code{project-vc-dir} opens a VC Directory buffer | ||
| 1723 | (@pxref{VC Directory Mode}) listing the version control statuses of | ||
| 1724 | the files in a directory tree under the current project's | ||
| 1725 | root directory. | ||
| 1726 | |||
| 1727 | @findex project-shell | ||
| 1728 | The command @code{project-shell} starts a shell session | ||
| 1729 | (@pxref{Shell}) in a new buffer with the current project's root as the | ||
| 1730 | working directory. | ||
| 1731 | |||
| 1721 | @findex project-eshell | 1732 | @findex project-eshell |
| 1722 | The command @code{project-eshell} starts an Eshell session in a new | 1733 | The command @code{project-eshell} starts an Eshell session in a new |
| 1723 | buffer with the current project's root as the working directory. | 1734 | buffer with the current project's root as the working directory. |
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 16eac4828c7..10bbf8ff09f 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi | |||
| @@ -6399,8 +6399,8 @@ function is the same as specifying a list @code{(c-lineup-assignments | |||
| 6399 | @findex lineup-ternary-bodies @r{(c-)} | 6399 | @findex lineup-ternary-bodies @r{(c-)} |
| 6400 | Line up true and false branches of a ternary operator | 6400 | Line up true and false branches of a ternary operator |
| 6401 | (i.e. @code{?:}). More precisely, if the line starts with a colon | 6401 | (i.e. @code{?:}). More precisely, if the line starts with a colon |
| 6402 | which is a part of a said operator it with corresponding question | 6402 | which is a part of a said operator, align it with corresponding |
| 6403 | mark. For example: | 6403 | question mark. For example: |
| 6404 | 6404 | ||
| 6405 | @example | 6405 | @example |
| 6406 | @group | 6406 | @group |
| @@ -411,15 +411,19 @@ information, see the related entry about 'shr-browse-url' above. | |||
| 411 | all commands that prompt for a project directory. | 411 | all commands that prompt for a project directory. |
| 412 | 412 | ||
| 413 | +++ | 413 | +++ |
| 414 | *** New commands 'project-dired' and 'project-eshell'. | 414 | *** New commands 'project-dired', 'project-vc-dir', 'project-shell', 'project-eshell'. |
| 415 | These commands run Dired and Eshell in a project's root directory, | 415 | These commands run Dired/VC-Dir and Shell/Eshell in a project's root directory, |
| 416 | respectively. | 416 | respectively. |
| 417 | 417 | ||
| 418 | *** New command 'project-compile', which runs compilation. | ||
| 419 | |||
| 418 | +++ | 420 | +++ |
| 419 | *** New command 'project-switch-project'. | 421 | *** New command 'project-switch-project'. |
| 420 | This command lets you "switch" to another project and run a project | 422 | This command lets you "switch" to another project and run a project |
| 421 | command chosen from a dispatch menu. | 423 | command chosen from a dispatch menu. |
| 422 | 424 | ||
| 425 | *** New user option 'project-list-file'. | ||
| 426 | |||
| 423 | ** json.el | 427 | ** json.el |
| 424 | 428 | ||
| 425 | --- | 429 | --- |
| @@ -30,14 +30,15 @@ difficult to fix. Bugs with severity "minor" may be simpler, but this | |||
| 30 | is not always true. | 30 | is not always true. |
| 31 | 31 | ||
| 32 | * Speed up Elisp execution | 32 | * Speed up Elisp execution |
| 33 | |||
| 33 | ** Speed up function calls | 34 | ** Speed up function calls |
| 34 | Change src/bytecode.c so that calls from byte-code functions to byte-code | 35 | Change src/bytecode.c so that calls from byte-code functions to byte-code |
| 35 | functions don't go through Ffuncall/funcall_lambda/exec_byte_code but instead | 36 | functions don't go through Ffuncall/funcall_lambda/exec_byte_code but instead |
| 36 | stay within exec_byte_code. | 37 | stay within exec_byte_code. |
| 37 | 38 | ||
| 38 | ** Improve the byte-compiler to recognize immutable (lexical) bindings | 39 | ** Improve the byte-compiler to recognize immutable bindings |
| 39 | and get rid of them if they're used only once and/or they're bound to | 40 | Recognize immutable (lexical) bindings and get rid of them if they're |
| 40 | a constant expression. | 41 | used only once and/or they're bound to a constant expression. |
| 41 | 42 | ||
| 42 | Such things aren't present in hand-written code, but macro expansion and | 43 | Such things aren't present in hand-written code, but macro expansion and |
| 43 | defsubst can often end up generating things like | 44 | defsubst can often end up generating things like |
| @@ -45,7 +46,8 @@ defsubst can often end up generating things like | |||
| 45 | (let ((arg actual)) (body)) but should additionally get optimized further | 46 | (let ((arg actual)) (body)) but should additionally get optimized further |
| 46 | when 'actual' is a constant/copyable expression. | 47 | when 'actual' is a constant/copyable expression. |
| 47 | 48 | ||
| 48 | ** Add an "indirect goto" byte-code and use it for local lambda expressions. | 49 | ** Add an "indirect goto" byte-code |
| 50 | Such a byte-code can be used for local lambda expressions. | ||
| 49 | E.g. when you have code like | 51 | E.g. when you have code like |
| 50 | 52 | ||
| 51 | (let ((foo (lambda (x) bar))) | 53 | (let ((foo (lambda (x) bar))) |
| @@ -56,7 +58,6 @@ E.g. when you have code like | |||
| 56 | turn those 'funcalls' into jumps and their return into indirect jumps back. | 58 | turn those 'funcalls' into jumps and their return into indirect jumps back. |
| 57 | 59 | ||
| 58 | ** Compile efficiently local recursive functions | 60 | ** Compile efficiently local recursive functions |
| 59 | |||
| 60 | Similar to the previous point, we should be able to handle something like | 61 | Similar to the previous point, we should be able to handle something like |
| 61 | 62 | ||
| 62 | (letrec ((loop () (blabla) (if (toto) (loop)))) | 63 | (letrec ((loop () (blabla) (if (toto) (loop)))) |
| @@ -68,153 +69,175 @@ which ideally should generate the same byte-code as | |||
| 68 | 69 | ||
| 69 | * Things that were planned for Emacs-24 | 70 | * Things that were planned for Emacs-24 |
| 70 | 71 | ||
| 71 | ** concurrency: including it as an "experimental" compile-time option | 72 | ** concurrency |
| 72 | sounds good. Of course there might still be big questions around "which form | 73 | Including it as an "experimental" compile-time option sounds good. Of |
| 73 | of concurrency" we'll want. | 74 | course there might still be big questions around "which form of |
| 74 | ** better support for dynamic embedded graphics: I like this idea (my | 75 | concurrency" we'll want. |
| 75 | mpc.el code could use it for the volume widget), though I wonder if the | 76 | |
| 76 | resulting efficiency will be sufficient. | 77 | ** better support for dynamic embedded graphics |
| 77 | ** Spread Semantic. | 78 | I like this idea (my mpc.el code could use it for the volume widget), |
| 78 | ** Improve the "code snippets" support: consolidate skeleton.el, tempo.el, | 79 | though I wonder if the resulting efficiency will be sufficient. |
| 79 | and expand.el (any other?) and then advertise/use/improve it. | 80 | |
| 80 | ** Improve VC: yes, there's a lot of work to be done there :-( | 81 | ** Spread Semantic |
| 81 | 82 | ||
| 82 | ** Random things that cross my mind right now that I'd like to see (some of | 83 | ** Improve the "code snippets" support |
| 83 | them from my local hacks), but it's not obvious at all whether they'll | 84 | Consolidate skeleton.el, tempo.el, and expand.el (any other?) and then |
| 84 | make it. | 85 | advertise/use/improve it. |
| 85 | *** prog-mode could/should provide a better fill-paragraph default | 86 | |
| 86 | that uses syntax-tables to recognize string/comment boundaries. | 87 | ** Improve VC |
| 87 | *** provide more completion-at-point-functions. Make existing | 88 | Yes, there's a lot of work to be done there :-( |
| 88 | in-buffer completion use completion-at-point. | 89 | |
| 89 | *** "functional" function-key-map that would make it easy to add (and | 90 | ** Random things that cross my mind right now that I'd like to see |
| 90 | remove) mappings like "FOO-mouse-4 -> FOO-scroll-down", | 91 | Some of them from my local hacks, but it's not obvious at all whether |
| 91 | "FOO-tab -> ?\FOO-\t", "uppercase -> lowercase", "[fringe KEY...] -> | 92 | they'll make it. |
| 92 | [KEY]", "H-FOO -> M-FOO", "C-x C-y FOO -> H-FOO", ... | 93 | |
| 94 | *** Prog-mode could/should provide a better fill-paragraph default | ||
| 95 | That default should use syntax-tables to recognize string/comment | ||
| 96 | boundaries. | ||
| 97 | |||
| 98 | *** Provide more completion-at-point-functions | ||
| 99 | Make existing in-buffer completion use completion-at-point. | ||
| 100 | |||
| 101 | *** "Functional" function-key-map | ||
| 102 | It would make it easy to add (and remove) mappings like | ||
| 103 | "FOO-mouse-4 -> FOO-scroll-down", "FOO-tab -> ?\FOO-\t", | ||
| 104 | "uppercase -> lowercase", "[fringe KEY...] -> [KEY]", | ||
| 105 | "H-FOO -> M-FOO", "C-x C-y FOO -> H-FOO", ... | ||
| 93 | 106 | ||
| 94 | * Things related to elpa.gnu.org. | 107 | * Things related to elpa.gnu.org. |
| 95 | 108 | ||
| 96 | ** Move idlwave to elpa.gnu.org. | 109 | ** Move idlwave to elpa.gnu.org |
| 97 | Need to sync up the Emacs and external versions. | 110 | Need to sync up the Emacs and external versions. |
| 98 | See <https://lists.gnu.org/r/emacs-devel/2014-07/msg00008.html> | 111 | See <https://lists.gnu.org/r/emacs-devel/2014-07/msg00008.html> |
| 99 | 112 | ||
| 100 | ** Move Org mode to elpa.gnu.org. | 113 | ** Move Org mode to elpa.gnu.org |
| 101 | See <https://lists.gnu.org/r/emacs-devel/2014-08/msg00300.html> | 114 | See <https://lists.gnu.org/r/emacs-devel/2014-08/msg00300.html> |
| 102 | <https://lists.gnu.org/r/emacs-devel/2014-11/msg00257.html> | 115 | <https://lists.gnu.org/r/emacs-devel/2014-11/msg00257.html> |
| 103 | 116 | ||
| 104 | ** Move verilog-mode to elpa.gnu.org. | 117 | ** Move verilog-mode to elpa.gnu.org |
| 105 | See <https://lists.gnu.org/r/emacs-devel/2015-02/msg01180.html> | 118 | See <https://lists.gnu.org/r/emacs-devel/2015-02/msg01180.html> |
| 106 | 119 | ||
| 107 | ** Move vhdl-mode to elpa.gnu.org. | 120 | ** Move vhdl-mode to elpa.gnu.org |
| 108 | See <https://lists.gnu.org/r/emacs-devel/2015-02/msg01180.html> | 121 | See <https://lists.gnu.org/r/emacs-devel/2015-02/msg01180.html> |
| 109 | 122 | ||
| 110 | * Simple tasks. These don't require much Emacs knowledge, they are | 123 | * Simple tasks |
| 111 | suitable for anyone from beginners to experts. | 124 | These don't require much Emacs knowledge, they are suitable for anyone |
| 125 | from beginners to experts. | ||
| 112 | 126 | ||
| 113 | ** Convert modes that use view-mode to be derived from special-mode instead. | 127 | ** Convert modes that use view-mode to be derived from special-mode instead |
| 114 | 128 | ||
| 115 | ** Major modes should have a menu entry. | 129 | ** Major modes should have a menu entry |
| 116 | 130 | ||
| 117 | ** Check if all items on the mode-line have a suitable tooltip for all modes. | 131 | ** Check if all items on the mode-line have a suitable tooltip for all modes |
| 118 | 132 | ||
| 119 | ** edebug and debugger-mode should have a toolbar. | 133 | ** edebug and debugger-mode should have a toolbar |
| 120 | It can use the same icons as gud. | 134 | It can use the same icons as gud. |
| 121 | 135 | ||
| 122 | ** Check what minor modes don't use define-minor-mode and convert them | 136 | ** Check what minor modes don't use define-minor-mode |
| 123 | to use it. | 137 | Convert those to use it. |
| 124 | 138 | ||
| 125 | ** Remove unnecessary autoload cookies from defcustoms. | 139 | ** Remove unnecessary autoload cookies from defcustoms |
| 126 | This needs a bit of care, since often people have become used to | 140 | This needs a bit of care, since often people have become used to |
| 127 | expecting such variables to always be defined, eg when they modify | 141 | expecting such variables to always be defined, eg when they modify |
| 128 | things in their .emacs. | 142 | things in their .emacs. |
| 129 | 143 | ||
| 130 | ** See if other files can use generated-autoload-file (see eg ps-print). | 144 | ** See if other files can use generated-autoload-file (see eg ps-print) |
| 145 | |||
| 146 | ** Write more tests | ||
| 147 | Pick a fixed bug from the database, write a test case to make sure it | ||
| 148 | stays fixed. Or pick your favorite programming major-mode, and write | ||
| 149 | a test for its indentation. Or a version control backend, and write a | ||
| 150 | test for its status parser. Etc. See the 'test' directory for | ||
| 151 | examples. | ||
| 131 | 152 | ||
| 132 | ** Write more tests. Pick a fixed bug from the database, write a test | 153 | * Small but important fixes needed in existing features |
| 133 | case to make sure it stays fixed. Or pick your favorite programming | ||
| 134 | major-mode, and write a test for its indentation. Or a version | ||
| 135 | control backend, and write a test for its status parser. Etc. | ||
| 136 | See the 'test' directory for examples. | ||
| 137 | 154 | ||
| 138 | * Small but important fixes needed in existing features: | 155 | ** A better display of the bar cursor |
| 156 | Distribute a bar cursor of width > 1 evenly between the two glyphs on | ||
| 157 | each side of the bar (what to do at the edges?). | ||
| 139 | 158 | ||
| 140 | ** Distribute a bar cursor of width > 1 evenly between the two glyphs | 159 | ** revert-buffer should eliminate overlays and the mark |
| 141 | on each side of the bar (what to do at the edges?). | 160 | For related problems consult the thread starting with |
| 161 | https://lists.gnu.org/r/emacs-devel/2005-11/msg01346.html | ||
| 142 | 162 | ||
| 143 | ** revert-buffer should eliminate overlays and the mark. | 163 | ** erase-buffer should perhaps disregard read-only properties of text |
| 144 | For related problems consult the thread starting with | ||
| 145 | https://lists.gnu.org/r/emacs-devel/2005-11/msg01346.html | ||
| 146 | 164 | ||
| 147 | ** erase-buffer should perhaps disregard read-only properties of text. | 165 | ** Fix the kill/yank treatment of invisible text |
| 166 | At the moment, invisible text is placed in the kill-ring, so that the | ||
| 167 | contents of the ring may not correspond to the text as displayed to | ||
| 168 | the user. It ought to be possible to omit text which is invisible | ||
| 169 | (due to a text-property, overlay, or selective display) from the | ||
| 170 | kill-ring. | ||
| 148 | 171 | ||
| 149 | ** Fix the kill/yank treatment of invisible text. At the moment, | 172 | ** Change cursor shape when Emacs is idle |
| 150 | invisible text is placed in the kill-ring, so that the contents of | 173 | When Emacs is idle for more than a specified time, change the cursor |
| 151 | the ring may not correspond to the text as displayed to the user. | 174 | shape to indicate the idleness. |
| 152 | It ought to be possible to omit text which is invisible (due to a | ||
| 153 | text-property, overlay, or selective display) from the kill-ring. | ||
| 154 | 175 | ||
| 155 | ** Feature to change cursor shape when Emacs is idle (for more than | 176 | ** Improve buttons in the Custom buffer |
| 156 | a specified time). | 177 | The buttons at the top of a Custom buffer should not omit variables |
| 178 | whose values are currently hidden. | ||
| 157 | 179 | ||
| 158 | ** The buttons at the top of a custom buffer should not omit | 180 | ** Clean up the variables in browse-url |
| 159 | variables whose values are currently hidden. | 181 | Perhaps use a shell command string to specify the browser instead of |
| 182 | the mushrooming set of functions. | ||
| 160 | 183 | ||
| 161 | ** Clean up the variables in browse-url. Perhaps use a shell command string to | 184 | See also ESR's proposal for a BROWSER environment variable |
| 162 | specify the browser instead of the mushrooming set of functions. | 185 | <URL:http://www.catb.org/~esr/BROWSER/browse-url.patch>. |
| 163 | See also ESR's proposal for a BROWSER environment variable | ||
| 164 | <URL:http://www.catb.org/~esr/BROWSER/browse-url.patch>. | ||
| 165 | 186 | ||
| 166 | ** Enhance scroll-bar to handle tall line (similar to line-move). | 187 | ** Enhance scroll-bar to handle tall line (similar to line-move) |
| 167 | 188 | ||
| 168 | ** In Custom buffers, put the option that turns a mode on or off first, | 189 | ** In Custom buffers, put the option that turns a mode on or off first |
| 169 | using a heuristic of some kind? | 190 | This should use a heuristic of some kind? |
| 170 | 191 | ||
| 171 | ** Define recompute-arg and recompute-arg-if for fix_command to use. | 192 | ** Define recompute-arg and recompute-arg-if for fix_command to use |
| 172 | See rms message of 11 Dec 05 in | 193 | See rms message of 11 Dec 05 in |
| 173 | https://lists.gnu.org/r/emacs-pretest-bug/2005-12/msg00165.html, | 194 | https://lists.gnu.org/r/emacs-pretest-bug/2005-12/msg00165.html, |
| 174 | and the rest of that discussion. | 195 | and the rest of that discussion. |
| 175 | 196 | ||
| 176 | ** In Emacs Info, examples of using Customize should be clickable | 197 | ** In Emacs Info, examples of using Customize should be clickable |
| 177 | and they should create Custom buffers. | 198 | They should create Custom buffers when clicked. |
| 178 | 199 | ||
| 179 | ** Add function to redraw the tool bar. | 200 | ** Add function to redraw the tool bar |
| 180 | 201 | ||
| 181 | ** Redesign the load-history data structure so it can cope better | 202 | ** Redesign the load-history data structure |
| 182 | with evaluating definitions of the same function from different files, | 203 | It should cope better with evaluating definitions of the same function |
| 183 | recording which file the latest definition came from. | 204 | from different files, recording which file the latest definition came |
| 205 | from. | ||
| 184 | 206 | ||
| 185 | ** make back_comment use syntax-ppss or equivalent. | 207 | ** Make back_comment use syntax-ppss or equivalent |
| 186 | 208 | ||
| 187 | ** Consider improving src/sysdep.c's search for a fqdn. | 209 | ** Consider improving src/sysdep.c's search for a fqdn |
| 188 | https://lists.gnu.org/r/emacs-devel/2007-04/msg00782.html | 210 | https://lists.gnu.org/r/emacs-devel/2007-04/msg00782.html |
| 189 | 211 | ||
| 190 | ** Find a proper fix for rcirc multiline nick adding. | 212 | ** Find a proper fix for rcirc multiline nick adding |
| 191 | https://lists.gnu.org/r/emacs-devel/2007-04/msg00684.html | 213 | https://lists.gnu.org/r/emacs-devel/2007-04/msg00684.html |
| 192 | 214 | ||
| 193 | ** Check for any included packages that define obsolete bug-reporting commands. | 215 | ** Check for any included packages that define obsolete bug-reporting commands |
| 194 | Change them to use report-emacs-bug. | 216 | Change them to use report-emacs-bug. |
| 195 | *** Related functions: | 217 | |
| 218 | *** Related functions (do all of them need changing?): | ||
| 196 | **** org-submit-bug-report | 219 | **** org-submit-bug-report |
| 197 | **** lm-report-bug | 220 | **** lm-report-bug |
| 198 | **** tramp-bug | 221 | **** tramp-bug |
| 199 | **** c-submit-bug-report | 222 | **** c-submit-bug-report |
| 200 | [Do all of them need changing?] | ||
| 201 | 223 | ||
| 202 | ** Allow fringe indicators to display a tooltip (provide a help-echo property?) | 224 | ** Allow fringe indicators to display a tooltip |
| 225 | Provide a help-echo property? | ||
| 203 | 226 | ||
| 204 | ** Add a defcustom that supplies a function to name numeric backup files, | 227 | ** Add a defcustom that supplies a function to name numeric backup files |
| 205 | like make-backup-file-name-function for non-numeric backup files. | 228 | Like 'make-backup-file-name-function' for non-numeric backup files. |
| 206 | 229 | ||
| 207 | ** 'dired-mode' should specify the semantics of 'buffer-modified-p' for | 230 | ** 'dired-mode' should specify the semantics of 'buffer-modified-p' |
| 208 | dired buffers and DTRT WRT 'auto-revert-mode'. | 231 | Needed for dired buffers and DTRT WRT 'auto-revert-mode'. |
| 209 | 232 | ||
| 210 | ** Check uses of prin1 for error-handling. | 233 | ** Check uses of prin1 for error-handling |
| 211 | https://lists.gnu.org/r/emacs-devel/2008-08/msg00456.html | 234 | https://lists.gnu.org/r/emacs-devel/2008-08/msg00456.html |
| 212 | 235 | ||
| 213 | * Important features: | 236 | * Important features |
| 214 | 237 | ||
| 215 | ** "Emacs as word processor" | 238 | ** "Emacs as word processor" |
| 216 | https://lists.gnu.org/r/emacs-devel/2013-11/msg00515.html | 239 | https://lists.gnu.org/r/emacs-devel/2013-11/msg00515.html |
| 217 | rms writes: | 240 | rms writes: |
| 218 | 25 years ago I hoped we would extend Emacs to do WYSIWYG word | 241 | 25 years ago I hoped we would extend Emacs to do WYSIWYG word |
| 219 | processing. That is why we added text properties and variable | 242 | processing. That is why we added text properties and variable |
| 220 | width fonts. However, more features are still needed to achieve this. | 243 | width fonts. However, more features are still needed to achieve this. |
| @@ -333,13 +356,11 @@ to pass to 'hb_shape_full' the required array of features, as | |||
| 333 | mentioned in the above HarfBuzz discussion. | 356 | mentioned in the above HarfBuzz discussion. |
| 334 | 357 | ||
| 335 | ** Better support for displaying Emoji | 358 | ** Better support for displaying Emoji |
| 336 | |||
| 337 | Emacs is capable of displaying Emoji and some of the Emoji sequences, | 359 | Emacs is capable of displaying Emoji and some of the Emoji sequences, |
| 338 | provided that its fontsets are configured with a suitable font. To | 360 | provided that its fontsets are configured with a suitable font. To |
| 339 | make this easier out of the box, the following should be done: | 361 | make this easier out of the box, the following should be done: |
| 340 | 362 | ||
| 341 | *** Populate composition-function-table with Emoji rules | 363 | *** Populate composition-function-table with Emoji rules |
| 342 | |||
| 343 | The Unicode Character Database (UCD) includes several data files that | 364 | The Unicode Character Database (UCD) includes several data files that |
| 344 | define the valid Emoji sequences. These files should be imported into | 365 | define the valid Emoji sequences. These files should be imported into |
| 345 | the Emacs tree, and should be converted by some script at Emacs build | 366 | the Emacs tree, and should be converted by some script at Emacs build |
| @@ -347,7 +368,6 @@ time to Lisp code that populates composition-function-table with the | |||
| 347 | corresponding composition rules. | 368 | corresponding composition rules. |
| 348 | 369 | ||
| 349 | *** Augment the default fontsets with Emoji-capable fonts | 370 | *** Augment the default fontsets with Emoji-capable fonts |
| 350 | |||
| 351 | The default fontsets set up by fontest.el should include known free | 371 | The default fontsets set up by fontest.el should include known free |
| 352 | fonts that provide good support for displaying Emoji sequences. In | 372 | fonts that provide good support for displaying Emoji sequences. In |
| 353 | addition, the rule that the default face's font is used for symbol and | 373 | addition, the rule that the default face's font is used for symbol and |
| @@ -358,7 +378,6 @@ not have to be tweaked to have Emoji display by default with a capable | |||
| 358 | font. | 378 | font. |
| 359 | 379 | ||
| 360 | *** Consider changing the default display of Variation Selectors | 380 | *** Consider changing the default display of Variation Selectors |
| 361 | |||
| 362 | Emacs by default displays the Variation Selector (VS) codepoints not | 381 | Emacs by default displays the Variation Selector (VS) codepoints not |
| 363 | composed with base characters as hex codes in a box. The Unicode FAQ | 382 | composed with base characters as hex codes in a box. The Unicode FAQ |
| 364 | says that if variation sequences cannot be supported, the VS | 383 | says that if variation sequences cannot be supported, the VS |
| @@ -369,7 +388,6 @@ could display them as a thin 1-pixel space, as we do with format | |||
| 369 | control characters, by using 'thin-space' there. | 388 | control characters, by using 'thin-space' there. |
| 370 | 389 | ||
| 371 | *** Special face for displaying text presentation of Emoji | 390 | *** Special face for displaying text presentation of Emoji |
| 372 | |||
| 373 | Emoji-capable fonts support Emoji sequences with the U+FE0F VARIATION | 391 | Emoji-capable fonts support Emoji sequences with the U+FE0F VARIATION |
| 374 | SELECTOR-16 (VS16) for emoji-style display, but usually don't support | 392 | SELECTOR-16 (VS16) for emoji-style display, but usually don't support |
| 375 | the U+FE0F VARIATION SELECTOR-15 (VS15) for text-style display. There | 393 | the U+FE0F VARIATION SELECTOR-15 (VS15) for text-style display. There |
| @@ -387,6 +405,7 @@ Another relevant resource is the Unicode Technical Standard #51 | |||
| 387 | "Unicode Emoji" (http://www.unicode.org/reports/tr51/). | 405 | "Unicode Emoji" (http://www.unicode.org/reports/tr51/). |
| 388 | 406 | ||
| 389 | ** Extend text-properties and overlays | 407 | ** Extend text-properties and overlays |
| 408 | |||
| 390 | *** Several text-property planes | 409 | *** Several text-property planes |
| 391 | This would get us rid of font-lock-face property (and I'd be happy to | 410 | This would get us rid of font-lock-face property (and I'd be happy to |
| 392 | get rid of char-property-alias-alist as well) since font-lock would | 411 | get rid of char-property-alias-alist as well) since font-lock would |
| @@ -408,7 +427,6 @@ generally can't run Elisp code, whereas we generally can do that when | |||
| 408 | properties are added. | 427 | properties are added. |
| 409 | 428 | ||
| 410 | *** Move overlays to intervals.c | 429 | *** Move overlays to intervals.c |
| 411 | |||
| 412 | Currently overlays are implemented as (two) sorted singly linked lists (one | 430 | Currently overlays are implemented as (two) sorted singly linked lists (one |
| 413 | for overlays_before some position and one for overlay_after that | 431 | for overlays_before some position and one for overlay_after that |
| 414 | position, for some quirky definition of "before" and "after"). | 432 | position, for some quirky definition of "before" and "after"). |
| @@ -450,355 +468,383 @@ One way of doing this is to start with fx's dynamic loading, and use it | |||
| 450 | to implement things like auto-loaded buffer parsers and database | 468 | to implement things like auto-loaded buffer parsers and database |
| 451 | access in cases which need more than Lisp. | 469 | access in cases which need more than Lisp. |
| 452 | 470 | ||
| 453 | ** Fix portable dumping so that you can redump without using -batch. | 471 | ** Fix portable dumping so that you can redump without using -batch |
| 454 | 472 | ||
| 455 | ** Imenu could be extended into a file-structure browsing mechanism | 473 | ** Imenu could be extended into a file-structure browsing mechanism |
| 456 | using code like that of customize-groups. | 474 | This could use code like that of customize-groups. |
| 457 | 475 | ||
| 458 | ** Display something in the margin on lines that have compilation errors. | 476 | ** Display something in the margin on lines that have compilation errors |
| 459 | 477 | ||
| 460 | ** Compilation error navigation bar, parallel to the scroll bar, | 478 | ** Compilation error navigation bar, parallel to the scroll bar |
| 461 | indicating where in the buffer there are compilation errors. | 479 | The bar should indicate where in the buffer there are compilation |
| 462 | Perhaps we could arrange to display these error indications on top | 480 | errors. Perhaps we could arrange to display these error indications |
| 463 | of the scroll bar itself. That depends on to what extent toolkit | 481 | on top of the scroll bar itself. That depends on to what extent |
| 464 | scroll bars are extensible. | 482 | toolkit scroll bars are extensible. |
| 465 | 483 | ||
| 466 | ** Provide user-friendly ways to list all available font families, | 484 | ** Provide user-friendly ways to list all available font families |
| 467 | list fonts, display a font as a sample, etc. [fx is looking at | 485 | Also for listing fonts, displaying a font as a sample, etc. |
| 468 | multilingual font selection for the Unicode branch of Emacs.] | ||
| 469 | 486 | ||
| 470 | ** Provide a convenient way to select a color with the mouse. | 487 | ** Provide a convenient way to select a color with the mouse |
| 471 | 488 | ||
| 472 | ** Rewrite the face code to be simpler, clearer and faster. | 489 | ** Rewrite the face code to be simpler, clearer and faster |
| 473 | 490 | ||
| 474 | ** Program Enriched mode to read and save in RTF. [Is there actually a | 491 | ** Program Enriched mode to read and save in RTF |
| 475 | decent single definition of RTF? Maybe see info at | 492 | Is there actually a decent single definition of RTF? Maybe see info at |
| 476 | http://latex2rtf.sourceforge.net/.] This task seems to be addressed | 493 | http://latex2rtf.sourceforge.net/. |
| 477 | by https://savannah.nongnu.org/projects/emacs-rtf/, which is still in | ||
| 478 | very early stages. | ||
| 479 | 494 | ||
| 480 | Another place to look is the Wikipedia article at | 495 | This task seems to be addressed by |
| 481 | http://en.wikipedia.org/wiki/Rich_Text_Format | 496 | https://savannah.nongnu.org/projects/emacs-rtf/, which is still in |
| 497 | very early stages. | ||
| 482 | 498 | ||
| 483 | It currently points to the latest spec of RTF v1.9.1 at | 499 | Another place to look is the Wikipedia article at |
| 484 | http://www.microsoft.com/en-us/download/details.aspx?id=10725 | 500 | http://en.wikipedia.org/wiki/Rich_Text_Format. It currently points to |
| 501 | the latest spec of RTF v1.9.1 at | ||
| 502 | https://web.archive.org/web/20190708132914/http://www.kleinlercher.at/tools/Windows_Protocols/Word2007RTFSpec9.pdf | ||
| 485 | 503 | ||
| 486 | ** Implement primitive and higher-level functions to allow filling | 504 | ** Better support for variable-pitch faces |
| 487 | properly with variable-pitch faces. | 505 | Implement primitive and higher-level functions to allow filling |
| 506 | properly with variable-pitch faces. | ||
| 488 | 507 | ||
| 489 | ** Implement intelligent search/replace, going beyond query-replace | 508 | ** Implement intelligent search/replace, going beyond query-replace |
| 490 | (see http://groups.csail.mit.edu/uid/projects/clustering/chi04.pdf). | 509 | See http://groups.csail.mit.edu/uid/projects/clustering/chi04.pdf. |
| 510 | |||
| 511 | ** Implement other text formatting properties | ||
| 512 | |||
| 513 | *** Footnotes that can appear either in place or at the end of the page | ||
| 491 | 514 | ||
| 492 | ** Implement other text formatting properties. | 515 | *** text property that says "don't break line in middle of this" |
| 493 | *** Footnotes that can appear either in place or at the end of the page. | 516 | Don't break the line between two characters that have the same value |
| 494 | *** text property that says "don't break line in middle of this". | 517 | of this property. |
| 495 | Don't break the line between two characters that have the | ||
| 496 | same value of this property. | ||
| 497 | *** Discretionary hyphens that are not visible when they are at end of line. | ||
| 498 | 518 | ||
| 499 | ** Internationalize Emacs's messages. | 519 | *** Discretionary hyphens that are not visible when they are at end of line |
| 500 | 520 | ||
| 501 | ** Set up a facility to save backtraces when errors happen during | 521 | ** Internationalize Emacs's messages |
| 502 | specified filters, specified timers, and specified hooks. | ||
| 503 | 522 | ||
| 504 | ** Install mmc@maruska.dyndns.org's no-flicker change. | 523 | ** Set up a facility to save backtraces |
| 524 | Save backtraces when errors happen during specified filters, specified | ||
| 525 | timers, and specified hooks. | ||
| 505 | 526 | ||
| 506 | https://lists.gnu.org/archive/html/emacs-devel/2005-12/msg00699.html | 527 | ** Install mmc@maruska.dyndns.org's no-flicker change |
| 528 | https://lists.gnu.org/archive/html/emacs-devel/2005-12/msg00699.html | ||
| 507 | 529 | ||
| 508 | I don't know if this is still relevant. I can't reach the URLs in | 530 | I don't know if this is still relevant. I can't reach the URLs in |
| 509 | the above message thread and double-buffering may have solved some | 531 | the above message thread and double-buffering may have solved some |
| 510 | of the problems. | 532 | of the problems. |
| 511 | 533 | ||
| 512 | ** Add a "current vertical pixel level" value that goes with point, | 534 | ** Add a "current vertical pixel level" value |
| 513 | so that motion commands can also move through tall images. | 535 | This should go with point, so that motion commands can also move |
| 514 | This value would be to point as window-vscroll is to window-start. | 536 | through tall images. This value would be to point as window-vscroll |
| 537 | is to window-start. | ||
| 515 | 538 | ||
| 516 | ** Address internationalization of symbols names essentially | 539 | ** Address internationalization of symbols names |
| 517 | as documentation, e.g. in command names and Custom. | 540 | Essentially as if they were documentation, e.g. in command names and |
| 541 | Custom. | ||
| 518 | 542 | ||
| 519 | ** Make the Lucid menu widget display multilingual text. [This | 543 | ** Make the Lucid menu widget display multilingual text |
| 520 | probably needs to be done from actual Emacs buffers, either directly | 544 | This probably needs to be done from actual Emacs buffers, either |
| 521 | in the menu or by rendering in an unmapped window and copying the | 545 | directly in the menu or by rendering in an unmapped window and copying |
| 522 | pixels. The current code assumes a specific locale; that isn't good | 546 | the pixels. The current code assumes a specific locale; that isn't |
| 523 | enough even if X can render the arbitrary text] [The gtk | 547 | good enough even if X can render the arbitrary text. The gtk port now |
| 524 | port now displays multilingual text in menus, but only insofar as | 548 | displays multilingual text in menus, but only insofar as Emacs can |
| 525 | Emacs can encode it as utf-8 and gtk can display the result.] | 549 | encode it as utf-8 and gtk can display the result. Maybe making |
| 526 | Maybe making Lucid menus work like Gtk's (i.e. just force utf-8) is good | 550 | Lucid menus work like Gtk's (i.e. just force utf-8) is good enough now |
| 527 | enough now that Emacs can encode most chars into utf-8. | 551 | that Emacs can encode most chars into utf-8. |
| 528 | 552 | ||
| 529 | ** The GNUstep port needs some serious attention, ideally from someone | 553 | ** The GNUstep port needs some serious attention |
| 530 | familiar with GNUstep and Objective C. | 554 | Ideally from someone familiar with GNUstep and Objective C. |
| 531 | 555 | ||
| 532 | * Other features we would like: | 556 | * Other features we would like |
| 533 | 557 | ||
| 534 | ** A more modern printing interface. One that pops up a dialog that lets | 558 | ** A more modern printing interface |
| 535 | you choose printer, page style, etc. | 559 | A UI that pops up a dialog that lets you choose printer, page style, |
| 536 | Integration with the Gtk print dialog is apparently difficult. See eg: | 560 | etc. Integration with the Gtk print dialog is apparently difficult. |
| 537 | https://lists.gnu.org/r/emacs-devel/2009-03/msg00501.html | 561 | See eg: https://lists.gnu.org/r/emacs-devel/2009-03/msg00501.html |
| 538 | https://lists.gnu.org/r/emacs-devel/2009-04/msg00034.html | 562 | https://lists.gnu.org/r/emacs-devel/2009-04/msg00034.html |
| 539 | 563 | ||
| 540 | ** Allow frames(terminals) created by emacsclient to inherit their environment | 564 | ** Allow frames(terminals) created by emacsclient to inherit their environment |
| 541 | from the emacsclient process. | 565 | They should inherit environment from the emacsclient process. |
| 542 | 566 | ||
| 543 | ** Give Tar mode all the features of Archive mode. | 567 | ** Give Tar mode all the features of Archive mode |
| 544 | 568 | ||
| 545 | ** Create a category of errors called 'process-error' | 569 | ** Create a category of errors called 'process-error' |
| 546 | for some or all errors associated with using subprocesses. | 570 | Do this for some or all errors associated with using subprocesses. |
| 547 | 571 | ||
| 548 | ** Maybe reinterpret 'parse-error' as a category of errors | 572 | ** Maybe reinterpret 'parse-error' as a category of errors |
| 549 | and put some other errors under it. | 573 | Put some other errors under it. |
| 550 | 574 | ||
| 551 | ** Make byte-compile warn when a doc string is too wide. | 575 | ** Make byte-compiler warn when a doc string is too wide |
| 552 | 576 | ||
| 553 | ** Make byte-optimization warnings issue accurate line numbers. | 577 | ** Make byte-optimization warnings issue accurate line numbers |
| 554 | 578 | ||
| 555 | ** Record the sxhash of the default value for customized variables | 579 | ** Record the sxhash of the default value for customized variables |
| 556 | and notify the user (maybe by adding a menu item or toolbar button, | 580 | Also, the user (maybe by adding a menu item or toolbar button, as the |
| 557 | as the detection can occur during autoload time) when the default | 581 | detection can occur during autoload time) when the default changes |
| 558 | changes (meaning that new versions of the Lisp source with a changed | 582 | (meaning that new versions of the Lisp source with a changed default |
| 559 | default value got installed) and offer ediff on the respective | 583 | value got installed) and offer ediff on the respective customization |
| 560 | customization buffers. | 584 | buffers. |
| 561 | 585 | ||
| 562 | ** Emacs Lisp mode could put an overlay on the defun for every | 586 | ** Emacs Lisp mode could put an overlay on the defun for advised functions |
| 563 | function that has advice. The overlay could have 'after-text' like | 587 | The overlay could have 'after-text' like " [Function has advice]". It |
| 564 | " [Function has advice]". It might look like (defun foo [Function | 588 | might look like (defun foo [Function has advice] (x y) The overlay |
| 565 | has advice] (x y) The overlay could also be a button that you could | 589 | could also be a button that you could use to view the advice. |
| 566 | use to view the advice. | ||
| 567 | 590 | ||
| 568 | ** Add a function to get the insertion-type of the markers in an overlay. | 591 | ** Add a function to get the insertion-type of the markers in an overlay |
| 569 | 592 | ||
| 570 | ** ange-ftp | 593 | ** ange-ftp |
| 571 | *** understand sftp | ||
| 572 | This is hard to make work because sftp doesn't print status messages. | ||
| 573 | 594 | ||
| 574 | *** Use MLS for ange-ftp-insert-directory if a list of files is specified. | 595 | *** Make ange-ftp understand sftp |
| 596 | This is hard to make work because sftp doesn't print status messages. | ||
| 597 | |||
| 598 | *** Use MLS for ange-ftp-insert-directory if a list of files is specified | ||
| 599 | |||
| 600 | ** Ability to map a key, including all modified-combinations | ||
| 601 | E.g map mouse-4 to wheel-up as well as M-mouse-4 -> M-wheel-up | ||
| 602 | M-C-mouse-4 -> M-C-wheel-up, H-S-C-M-s-double-mouse-4 -> | ||
| 603 | H-S-C-M-s-double-wheel-up, ... | ||
| 604 | |||
| 605 | ** Beefed-up syntax-tables | ||
| 575 | 606 | ||
| 576 | ** Ability to map a key, including all modified-combinations. | 607 | *** Recognize multi-character syntactic entities like 'begin' and 'end' |
| 577 | E.g map mouse-4 to wheel-up as well as M-mouse-4 -> M-wheel-up | ||
| 578 | M-C-mouse-4 -> M-C-wheel-up, H-S-C-M-s-double-mouse-4 -> | ||
| 579 | H-S-C-M-s-double-wheel-up, ... | ||
| 580 | 608 | ||
| 581 | ** Beefed-up syntax-tables. | 609 | *** Nested string-delimiters (for PostScript's (foo(bar)baz) strings) |
| 582 | *** recognize multi-character syntactic entities like 'begin' and 'end'. | ||
| 583 | *** nested string-delimiters (for PostScript's (foo(bar)baz) strings). | ||
| 584 | *** support for infix operators (with precedence). | ||
| 585 | *** support for the $ (paired delimiter) in parse-partial-sexp. | ||
| 586 | *** support for hook-chars whose effect on the parsing-state is specified | ||
| 587 | by elisp code. Thus a char could both close a string and open a comment | ||
| 588 | at the same time and do it in a context-sensitive way. | ||
| 589 | *** ability to add mode-specific data to the partial-parse-state. | ||
| 590 | 610 | ||
| 591 | ** Add a way to convert a keyboard macro to equivalent Lisp code. | 611 | *** Support for infix operators (with precedence) |
| 592 | 612 | ||
| 593 | ** Have a command suggestion help system that recognizes patterns | 613 | *** Support for the $ (paired delimiter) in parse-partial-sexp |
| 594 | of commands which could be replaced with a simpler common command. | ||
| 595 | It should not make more than one suggestion per 10 minutes. | ||
| 596 | 614 | ||
| 597 | ** Add a way to define input methods by computing them (when first used) | 615 | *** Support for hook-chars whose effect is specified by ELisp code |
| 598 | from other input methods. Then redefine C-x 8 to use a | 616 | Hook-chars could have their effect on the parsing-state specified by |
| 599 | user-selected input method, with the default being the union of | 617 | ELisp code. Thus a character could both close a string and open a |
| 600 | latin-1-prefix and latin-1-postfix. | 618 | comment at the same time and do it in a context-sensitive way. |
| 601 | 619 | ||
| 602 | ** Implement a clean way to use different major modes for | 620 | *** Ability to add mode-specific data to the partial-parse-state |
| 603 | different parts of a buffer. This could be useful in editing | ||
| 604 | Bison input files, for instance, or other kinds of text | ||
| 605 | where one language is embedded in another language. See | ||
| 606 | http://www.loveshack.ukfsn.org/emacs/multi-mode.el and also | ||
| 607 | mmm-mode, as reference for approaches taken by others. | ||
| 608 | 621 | ||
| 609 | ** Arrange a way for an input method to return the first character | 622 | ** Add a way to convert a keyboard macro to equivalent Lisp code |
| 610 | immediately, then replace it later. So that C-s a with | ||
| 611 | input method latin-1-postfix would immediately search for an a. | ||
| 612 | 623 | ||
| 613 | ** Give start-process the ability to direct standard-error | 624 | ** Have a command suggestion help system |
| 614 | output to a different filter. | 625 | The idea is to recognize patterns of commands which could be replaced |
| 626 | with a simpler common command. It should not make more than one | ||
| 627 | suggestion per 10 minutes. | ||
| 615 | 628 | ||
| 616 | ** Give desktop.el a feature to switch between different named desktops. | 629 | ** Add a way to define input methods by computing them |
| 630 | When an input method is first used, redefine C-x 8 to use a | ||
| 631 | user-selected input method, with the default being the union of | ||
| 632 | latin-1-prefix and latin-1-postfix. | ||
| 617 | 633 | ||
| 618 | ** Add a cpio mode, more or less like tar mode. | 634 | ** Implement a clean way to use several major modes in a buffer |
| 635 | Different parts of a buffer could use different major modes. This | ||
| 636 | could be useful in editing Bison input files, for instance, or other | ||
| 637 | kinds of text where one language is embedded in another language. See | ||
| 638 | http://www.loveshack.ukfsn.org/emacs/multi-mode.el and also mmm-mode, | ||
| 639 | as reference for approaches taken by others. | ||
| 640 | |||
| 641 | ** A more convenient use of input methods in search | ||
| 642 | Arrange a way for an input method to return the first character | ||
| 643 | immediately, then replace it later. So that C-s a with input method | ||
| 644 | latin-1-postfix would immediately search for an a. | ||
| 645 | |||
| 646 | ** Give start-process the ability to redirect standard-error | ||
| 647 | It should be possible to redirect stderr to a different filter. | ||
| 648 | (Isn't this already possible in Emacs 27?) | ||
| 649 | |||
| 650 | ** Give desktop.el a feature to switch between different named desktops | ||
| 651 | |||
| 652 | ** Add a cpio mode, more or less like tar mode | ||
| 619 | 653 | ||
| 620 | ** Save undo information in special temporary files, and reload it | 654 | ** Save undo information in special temporary files, and reload it |
| 621 | when needed for undoing. This could extend undo capacity. | 655 | Reload the file when needed for undoing. This could extend undo |
| 622 | undo-tree, in ELPA, already does this; its saving code could be | 656 | capacity. undo-tree, in ELPA, already does this; its saving code |
| 623 | integrated without requiring the use of undo-tree. | 657 | could be integrated without requiring the use of undo-tree. |
| 624 | 658 | ||
| 625 | ** Change the Windows NT menu code | 659 | ** Change the Windows NT menu code |
| 626 | so that it handles the deep_p argument and avoids | 660 | Change the code so that it handles the deep_p argument and avoids |
| 627 | regenerating the whole menu bar menu tree except | 661 | regenerating the whole menu-bar menu tree except when the user tries |
| 628 | when the user tries to use the menubar. | 662 | to use the menubar. |
| 663 | |||
| 664 | This requires the RIT to forward the WM_INITMENU message to the main | ||
| 665 | thread, and not return from that message until the main thread has | ||
| 666 | processed the MENU_BAR_ACTIVATE_EVENT and regenerated the whole menu | ||
| 667 | bar. In the mean time, it should process other messages. | ||
| 668 | |||
| 669 | ** Get some major packages installed | ||
| 629 | 670 | ||
| 630 | This requires the RIT to forward the WM_INITMENU message to | 671 | *** W3 (development version needs significant work) |
| 631 | the main thread, and not return from that message until the main | ||
| 632 | thread has processed the MENU_BAR_ACTIVATE_EVENT and regenerated | ||
| 633 | the whole menu bar. In the mean time, it should process other messages. | ||
| 634 | 672 | ||
| 635 | ** Get some major packages installed: W3 (development version needs | 673 | *** PSGML, _possibly_ ECB |
| 636 | significant work), PSGML, _possibly_ ECB. | 674 | https://lists.gnu.org/r/emacs-devel/2007-05/msg01493.html Check the |
| 637 | https://lists.gnu.org/r/emacs-devel/2007-05/msg01493.html | 675 | assignments file for other packages which might go in and have been |
| 638 | Check the assignments file for other packages which might go in and | 676 | missed. |
| 639 | have been missed. | ||
| 640 | 677 | ||
| 641 | ** Make compiler warnings about functions that might be undefined at run time | 678 | ** Make byte-compiler warnings smarter |
| 642 | smarter, so that they know which files are required by the file being | 679 | Byte-compiler warnings about functions that might be undefined at run |
| 643 | compiled and don't warn about functions defined in them. | 680 | time should be smarter, so that they know which files are required by |
| 681 | the file being compiled and don't warn about functions defined in | ||
| 682 | them. | ||
| 644 | 683 | ||
| 645 | ** Split out parts of lisp.h. | 684 | ** Split out parts of lisp.h |
| 646 | |||
| 647 | ** Update the FAQ. | ||
| 648 | |||
| 649 | ** Allow auto-compression-mode to use zlib calls if zlib is available. | ||
| 650 | [It's required for PNG, so may be linked anyhow.] | ||
| 651 | |||
| 652 | ** Improve the GC (generational, incremental). (We may be able to use | ||
| 653 | the Boehm collector.) [See the Boehm-GC branch in CVS for work on this.] | ||
| 654 | |||
| 655 | ** Check what hooks would help Emacspeak -- see the defadvising in W3. | ||
| 656 | |||
| 657 | ** Add definitions for symbol properties, for documentation purposes. | ||
| 658 | |||
| 659 | ** Temporarily remove scroll bars when they are not needed, typically | ||
| 660 | when a buffer can be fully displayed in its window. | ||
| 661 | |||
| 662 | ** Provide an optional feature which computes a scroll bar slider's | ||
| 663 | size and its position from lines instead of characters. | ||
| 664 | |||
| 665 | ** Allow displaying an X window from an external program in a buffer, | ||
| 666 | e.g. to render graphics from Java applets. [gerd and/or wmperry | ||
| 667 | thought this was feasible.] | ||
| 668 | 685 | ||
| 669 | ** Allow images (not just text) in the margin to be mouse-sensitive. | 686 | ** Update the FAQ |
| 670 | (Requires recursing through display properties). Provide some way | ||
| 671 | to simulate mouse-clicks on marginal text without a mouse. | ||
| 672 | 687 | ||
| 673 | ** Extend ps-print to deal with multiple font sizes, images, and extra | 688 | ** Allow auto-compression-mode to use zlib calls if zlib is available |
| 674 | encodings. | 689 | Zlib is required for PNG, so may be linked anyhow. |
| 675 | |||
| 676 | ** Use the XIE X extension, if available, for image display. | ||
| 677 | |||
| 678 | (Obsolete as XIE is now considered obsolete itself.) | ||
| 679 | |||
| 680 | ** Make monochrome images display using the foreground and background | ||
| 681 | colors of the applicable faces. | ||
| 682 | |||
| 683 | ** Make 'format-time-string' preserve text properties like 'format'. | ||
| 684 | |||
| 685 | ** Optionally make the cursor a little thinner at the end of a line | ||
| 686 | or the end of the buffer. | ||
| 687 | |||
| 688 | ** Reorder defcustom's in each package so that the more important | ||
| 689 | options come first in the Customize buffers. This could be done by | ||
| 690 | either rearranging the file (since options are shown in the order | ||
| 691 | they appear in the *.el files), or by adding a few :set-after attributes. | ||
| 692 | |||
| 693 | ** Maybe document the features of libraries missing from the manual (or | ||
| 694 | ancillary manuals, including the Lisp manual in some cases). | ||
| 695 | This is not worth doing for all of these packages and we need not | ||
| 696 | aim for completeness, but some may be worth documenting. | ||
| 697 | |||
| 698 | Here's a list which is probably not complete/correct: align, allout, | ||
| 699 | artist, ansi-color, array, calculator, cdl, cmuscheme, | ||
| 700 | completion, delim-col, dirtrack, double, echistory, elide-head, | ||
| 701 | easymenu, expand, flow-ctrl, format [format-alist], | ||
| 702 | generic/generic-x [various modes], kermit, log-edit, | ||
| 703 | makesum, midnight [other than in Kill Buffer node], | ||
| 704 | mouse-copy [?], mouse-drag, mouse-sel, net-utils, rcompile, | ||
| 705 | snmp-mode [?], soundex [should be interactive?], strokes [start from | ||
| 706 | the web page], talk, thingatpt [interactive functions?], type-break, | ||
| 707 | vcursor, xscheme, zone-mode [?], mlconvert [?], iso-cvt, | ||
| 708 | feedmail [?], uce, gametree, page-ext, refbib, refer, scribe, | ||
| 709 | texinfo, underline, cmacexp, hideif, pcomplete, xml, | ||
| 710 | cvs-status (should be described in PCL-CVS manual); other progmodes, | ||
| 711 | probably in separate manual. | ||
| 712 | |||
| 713 | ** Convert the XPM bitmaps to PPM, replace the PBMs with them and scrap | ||
| 714 | the XPMs so that the color versions work generally. (Requires care | ||
| 715 | with the color used for the transparent regions.) | ||
| 716 | |||
| 717 | ** Convenient access to the 'values' variable. It would be nice to have an | ||
| 718 | interface that would show you the printed reps of the elements of the | ||
| 719 | list in a menu, let you select one of the values, and put it into some | ||
| 720 | other variable, without changing the value of 'values'. | ||
| 721 | |||
| 722 | ** (Controlled by a flag) make open and close syntax match exactly, | ||
| 723 | i.e. '(' doesn't match ']'. | ||
| 724 | |||
| 725 | ** Specify parameter ID-FORMAT in all calls to 'file-attributes' and | ||
| 726 | 'directory-files-and-attributes' where attributes UID or GID are used. | ||
| 727 | Whenever possible, use value 'string. | ||
| 728 | When done, change meaning of default value from 'integer to 'string. | ||
| 729 | If value 'integer is used nowhere, remove the parameter ID-FORMAT from | ||
| 730 | the definition of 'file-attributes' and 'directory-files-and-attributes' | ||
| 731 | and from the calls. | ||
| 732 | 690 | ||
| 733 | ** Make language-info-alist customizable. Currently a user can customize | 691 | ** Improve the GC |
| 734 | only the variable 'current-language-environment'. | 692 | Introduce generational or incremental GC. We may be able to use the |
| 735 | 693 | Boehm collector.) See the Boehm-GC branch in CVS for work on this. | |
| 736 | ** Improve language environment handling so that Emacs can fit | ||
| 737 | better to a users locale. Currently Emacs uses utf-8 language | ||
| 738 | environment for all utf-8 locales, thus a user in ja_JP.UTF-8 locale | ||
| 739 | are also put in utf-8 lang. env. In such a case, it is | ||
| 740 | better to use Japanese lang. env. but prefer utf-8 coding system. | ||
| 741 | 694 | ||
| 742 | ** Enhance locale handling: handle language, territory and charset | 695 | ** Check what hooks would help Emacspeak |
| 743 | orthogonally and de-emphasize language environments. Use the locale | 696 | See the defadvising in W3. |
| 744 | to set up more things, such as fontsets, the default Ispell | 697 | |
| 745 | dictionary, diary format, calendar holidays and display, quoting | 698 | ** Add definitions for symbol properties, for documentation purposes |
| 746 | characters and phrase boundaries, sentence endings, collation for | 699 | |
| 747 | sorting (at least for unicodes), HTTP Accept-language, patterns for | 700 | ** Temporarily remove scroll bars when they are not needed |
| 748 | directory listings and compilation messages, yes-or-no replies, | 701 | Typically when a buffer can be fully displayed in its window. |
| 749 | common menu items when the toolkit supports it ... 'locale-info' | 702 | |
| 750 | needs extending for LC_COLLATE &c. [fx started on this.] | 703 | ** Compute scroll bar's slider by lines |
| 751 | 704 | Provide an optional feature which computes a scroll bar slider's | |
| 752 | ** Eliminate the current restriction on header printing by ps-print. | 705 | size and its position from lines instead of characters. |
| 753 | Currently, a header can contain only single 1-byte charset in | 706 | |
| 754 | addition to ASCII. | 707 | ** Allow displaying an X window from an external program in a buffer |
| 755 | 708 | E.g. to render graphics from Java applets. [gerd and/or wmperry | |
| 756 | ** In ps-print, provide an user friendly interface to specify fonts. | 709 | thought this was feasible.] [Is xwidget that feature?] |
| 757 | 710 | ||
| 758 | ** Enhance word boundary detection for such a script that doesn't use | 711 | ** Allow images (not just text) in the margin to be mouse-sensitive |
| 759 | space at word boundary (e.g. Thai). | 712 | This requires recursing through display properties. Provide some way |
| 760 | 713 | to simulate mouse-clicks on marginal text without a mouse. | |
| 761 | ** Implement interface programs with major Japanese conversion server | 714 | |
| 762 | in lib-src so that they can be used from the input method | 715 | ** Extend ps-print |
| 763 | "japanese". Currently, most Japanese users are using external | 716 | |
| 764 | packages (e.g. tamago, anthy) or an input method via XIM. | 717 | *** It should deal with multiple font sizes, images, and extra encodings |
| 765 | 718 | ||
| 766 | ** Let LEIM handle the Mode_switch key like XIM does (i.e. a toggle like C-\ | 719 | *** Eliminate the current restriction on header printing by ps-print |
| 767 | but which can also be used as a modifier). | 720 | Currently, a header can contain only single 1-byte charset in addition |
| 768 | 721 | to ASCII. | |
| 769 | ** Improve Help buffers: Change the face of previously visited links (like | 722 | |
| 770 | Info, but also with regard to namespace), and give the value of | 723 | *** Provide a user friendly interface to specify fonts |
| 771 | lisp expressions, e.g auto-mode-alist, the right face. | 724 | |
| 772 | 725 | ** Use the XIE X extension, if available, for image display | |
| 773 | ** Possibly make 'list-holidays' eval items in the calendar-holidays variable. | 726 | This is obsolete, as XIE itself is now considered obsolete. |
| 774 | See thread | 727 | |
| 775 | <https://lists.gnu.org/r/emacs-devel/2006-02/msg01034.html>. | 728 | ** Make monochrome images honor the face |
| 776 | [rgm@gnu.org will look at this after 22.1] | 729 | Display those images using the foreground and background colors of the |
| 777 | 730 | applicable faces. | |
| 778 | ** Possibly make cal-dst use the system timezone database directly. | 731 | |
| 779 | See thread | 732 | ** Make 'format-time-string' preserve text properties like 'format' |
| 780 | <https://lists.gnu.org/r/emacs-pretest-bug/2006-11/msg00060.html> | 733 | |
| 781 | 734 | ** Optionally make the cursor a little thinner at EOL and EOB | |
| 782 | ** Possibly add a "close" button to the modeline. | 735 | |
| 783 | The idea is to add an "X" of some kind, that when clicked deletes | 736 | ** Reorder defcustom's in each package by importance |
| 784 | the window associated with that modeline. | 737 | The more important options should come first in the Customize buffers. |
| 785 | https://lists.gnu.org/r/emacs-devel/2007-09/msg02416.html | 738 | This could be done by either rearranging the file (since options are |
| 739 | shown in the order they appear in the *.el files), or by adding a few | ||
| 740 | :set-after attributes. | ||
| 741 | |||
| 742 | ** Maybe document the features of libraries missing from the manual | ||
| 743 | Also in ancillary manuals, including the Lisp manual in some cases. | ||
| 744 | This is not worth doing for all of these packages and we need not aim | ||
| 745 | for completeness, but some may be worth documenting. | ||
| 746 | |||
| 747 | Here's a list which is probably not complete/correct: align, allout, | ||
| 748 | artist, ansi-color, array, calculator, cdl, cmuscheme, completion, | ||
| 749 | delim-col, dirtrack, double, echistory, elide-head, easymenu, expand, | ||
| 750 | flow-ctrl, format [format-alist], generic/generic-x [various modes], | ||
| 751 | kermit, log-edit, makesum, midnight [other than in Kill Buffer node], | ||
| 752 | mouse-copy [?], mouse-drag, mouse-sel, net-utils, rcompile, snmp-mode | ||
| 753 | [?], soundex [should be interactive?], strokes [start from the web | ||
| 754 | page], talk, thingatpt [interactive functions?], type-break, vcursor, | ||
| 755 | xscheme, zone-mode [?], mlconvert [?], iso-cvt, feedmail [?], uce, | ||
| 756 | gametree, page-ext, refbib, refer, scribe, texinfo, underline, | ||
| 757 | cmacexp, hideif, pcomplete, xml, cvs-status (should be described in | ||
| 758 | PCL-CVS manual); other progmodes, probably in separate manual. | ||
| 759 | |||
| 760 | ** Deprecate and remove XPM icons | ||
| 761 | Convert the XPM bitmaps to PPM, replace the PBMs with them and scrap | ||
| 762 | the XPMs so that the color versions work generally. (Requires care | ||
| 763 | with the color used for the transparent regions.) | ||
| 764 | |||
| 765 | ** Convenient access to the 'values' variable | ||
| 766 | It would be nice to have an interface that would show you the printed | ||
| 767 | reps of the elements of the list in a menu, let you select one of the | ||
| 768 | values, and put it into some other variable, without changing the | ||
| 769 | value of 'values'. | ||
| 770 | |||
| 771 | ** Make open and close syntax match exactly | ||
| 772 | Make open and close syntax match exactly, i.e. '(' doesn't match ']'. | ||
| 773 | This should be controlled by a flag. | ||
| 774 | |||
| 775 | ** Use ID-FORMAT in 'file-attributes' and 'directory-files-and-attributes' | ||
| 776 | Specify an explicit parameter ID-FORMAT in all calls to these | ||
| 777 | functions where attributes UID or GID are used. Whenever possible, | ||
| 778 | use 'string'. When done, change meaning of default value from | ||
| 779 | 'integer' to 'string'. If value 'integer' is used nowhere, remove the | ||
| 780 | parameter ID-FORMAT from the definition of 'file-attributes' and | ||
| 781 | 'directory-files-and-attributes' and from the calls. | ||
| 782 | |||
| 783 | ** Make language-info-alist customizable | ||
| 784 | Currently a user can customize only the variable | ||
| 785 | 'current-language-environment'. | ||
| 786 | |||
| 787 | ** Improve language environment handling | ||
| 788 | Allow Emacs to fit better to a user's locale. Currently Emacs uses | ||
| 789 | UTF-8 language environment for all UTF-8 locales, thus a user in | ||
| 790 | ja_JP.UTF-8 locale are also put in UTF-8 language environment. In | ||
| 791 | such a case, it is better to use Japanese language environment, while | ||
| 792 | preferring the utf-8 coding system. | ||
| 793 | |||
| 794 | ** Enhance locale handling | ||
| 795 | Handle language, territory and charset orthogonally, and de-emphasize | ||
| 796 | language environments. Use the locale to set up more things, such as | ||
| 797 | fontsets, the default Ispell dictionary, diary format, calendar | ||
| 798 | holidays and display, quoting characters and phrase boundaries, | ||
| 799 | sentence endings, collation for sorting (at least for unicodes), HTTP | ||
| 800 | Accept-language, patterns for directory listings and compilation | ||
| 801 | messages, yes-or-no replies, common menu items when the toolkit | ||
| 802 | supports it ... 'locale-info' needs extending for LC_COLLATE &c. [fx | ||
| 803 | started on this.] | ||
| 804 | |||
| 805 | ** Enhance word boundary detection | ||
| 806 | This is needed for scripts that don't use space at word boundary | ||
| 807 | (e.g., Thai). | ||
| 808 | |||
| 809 | ** Implement interface programs with major Japanese input methods | ||
| 810 | The idea is to write programs in lib-src for interfacing with Japanese | ||
| 811 | conversion servers so that they can be used from the input method | ||
| 812 | "japanese". Currently, most Japanese users are using external | ||
| 813 | packages (e.g. tamago, anthy) or an input method via XIM. | ||
| 814 | |||
| 815 | ** Let LEIM handle the Mode_switch key like XIM does | ||
| 816 | I.e. a toggle like C-\ but which can also be used as a modifier. | ||
| 817 | |||
| 818 | ** Improve Help buffers | ||
| 819 | Change the face of previously visited links (like Info, but also with | ||
| 820 | regard to namespace), and give the value of lisp expressions, e.g | ||
| 821 | auto-mode-alist, the right face. | ||
| 822 | |||
| 823 | ** Possibly make 'list-holidays' eval items in the calendar-holidays variable | ||
| 824 | See thread <https://lists.gnu.org/r/emacs-devel/2006-02/msg01034.html>. | ||
| 825 | [rgm@gnu.org will look at this after 22.1] | ||
| 826 | |||
| 827 | ** Possibly make cal-dst use the system timezone database directly | ||
| 828 | See thread <https://lists.gnu.org/r/emacs-pretest-bug/2006-11/msg00060.html>. | ||
| 829 | |||
| 830 | ** Possibly add a "close" button to the modeline | ||
| 831 | The idea is to add an "X" of some kind, that when clicked deletes the | ||
| 832 | window associated with that modeline. | ||
| 833 | https://lists.gnu.org/r/emacs-devel/2007-09/msg02416.html | ||
| 786 | 834 | ||
| 787 | * Things to be done for specific packages or features | 835 | * Things to be done for specific packages or features |
| 788 | 836 | ||
| 789 | ** NeXTstep port | 837 | ** NeXTstep port |
| 790 | 838 | ||
| 791 | *** Missing features | 839 | *** Missing features |
| 792 | |||
| 793 | This sections contains features found in other official Emacs ports. | 840 | This sections contains features found in other official Emacs ports. |
| 794 | 841 | ||
| 795 | **** Support for xwidgets | 842 | **** Support for xwidgets |
| 796 | |||
| 797 | Emacs 25 has support for xwidgets, a system to include operating | 843 | Emacs 25 has support for xwidgets, a system to include operating |
| 798 | system components into an Emacs buffer. The components range from | 844 | system components into an Emacs buffer. The components range from |
| 799 | simple buttons to webkit (effectively, a web browser). | 845 | simple buttons to webkit (effectively, a web browser). |
| 800 | 846 | ||
| 801 | Currently, xwidgets works only for the gtk+ framework but it is | 847 | Currently, xwidgets work only for the gtk+ framework but they are |
| 802 | designed to be compatible with multiple Emacs ports. | 848 | designed to be compatible with multiple Emacs ports. |
| 803 | 849 | ||
| 804 | (See the scratch/nsxwidget branch, and the discussion around | 850 | (See the scratch/nsxwidget branch, and the discussion around |
| @@ -806,7 +852,6 @@ Objective-C code and GCC at | |||
| 806 | https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00072.html) | 852 | https://lists.gnu.org/archive/html/emacs-devel/2019-08/msg00072.html) |
| 807 | 853 | ||
| 808 | **** Respect 'frame-inhibit-implied-resize' | 854 | **** Respect 'frame-inhibit-implied-resize' |
| 809 | |||
| 810 | When the variable 'frame-inhibit-implied-resize' is non-nil, frames | 855 | When the variable 'frame-inhibit-implied-resize' is non-nil, frames |
| 811 | should not be resized when operations like changing font or toggling | 856 | should not be resized when operations like changing font or toggling |
| 812 | the tool bar is performed. | 857 | the tool bar is performed. |
| @@ -815,7 +860,6 @@ Unfortunately, the tool bar (and possible other operations) always | |||
| 815 | resize the frame. | 860 | resize the frame. |
| 816 | 861 | ||
| 817 | **** Support 'proced' (implement 'process-attributes') | 862 | **** Support 'proced' (implement 'process-attributes') |
| 818 | |||
| 819 | Unfortunately, a user-level process like Emacs does not have the | 863 | Unfortunately, a user-level process like Emacs does not have the |
| 820 | privileges to get information about other processes under macOS. | 864 | privileges to get information about other processes under macOS. |
| 821 | 865 | ||
| @@ -835,16 +879,13 @@ See this article by Bozhidar Batsov for an overview of Proced: | |||
| 835 | https://emacsredux.com/blog/2013/05/02/manage-processes-with-proced/ | 879 | https://emacsredux.com/blog/2013/05/02/manage-processes-with-proced/ |
| 836 | 880 | ||
| 837 | **** Tooltip properties | 881 | **** Tooltip properties |
| 838 | |||
| 839 | Tooltip properties like the background color and font are hard-wired, | 882 | Tooltip properties like the background color and font are hard-wired, |
| 840 | even though Emacs allows a user to customize such features. | 883 | even though Emacs allows a user to customize such features. |
| 841 | 884 | ||
| 842 | *** New features | 885 | *** New features |
| 843 | |||
| 844 | This section contains features unique to Nextstep and/or macOS. | 886 | This section contains features unique to Nextstep and/or macOS. |
| 845 | 887 | ||
| 846 | **** PressAndHold for writing accented character | 888 | **** PressAndHold for writing accented character |
| 847 | |||
| 848 | On macOS, many application support the press and hold pattern to | 889 | On macOS, many application support the press and hold pattern to |
| 849 | invoke a menu of accented characters. (See example at | 890 | invoke a menu of accented characters. (See example at |
| 850 | https://support.apple.com/en-us/HT201586 .) | 891 | https://support.apple.com/en-us/HT201586 .) |
| @@ -857,7 +898,6 @@ Note: This feature might not be allowed to be implemented until also | |||
| 857 | implemented in Emacs for a free system. | 898 | implemented in Emacs for a free system. |
| 858 | 899 | ||
| 859 | **** Floating scroll bars | 900 | **** Floating scroll bars |
| 860 | |||
| 861 | In modern macOS applications, the scroll bar often floats over the | 901 | In modern macOS applications, the scroll bar often floats over the |
| 862 | content, and is invisible unless actually used. This makes the user | 902 | content, and is invisible unless actually used. This makes the user |
| 863 | interface less cluttered and more area could be used to contain text. | 903 | interface less cluttered and more area could be used to contain text. |
| @@ -871,7 +911,6 @@ Note: This feature might not be allowed to be implemented until also | |||
| 871 | implemented in Emacs for a free system. | 911 | implemented in Emacs for a free system. |
| 872 | 912 | ||
| 873 | *** Features from the "mac" port | 913 | *** Features from the "mac" port |
| 874 | |||
| 875 | This section contains features available in the "mac" Emacs port. | 914 | This section contains features available in the "mac" Emacs port. |
| 876 | 915 | ||
| 877 | As the "mac" port (as of this writing) isn't an official Emacs port, | 916 | As the "mac" port (as of this writing) isn't an official Emacs port, |
| @@ -884,7 +923,6 @@ interface. The Carbon interface has been enhanced, and a number of the | |||
| 884 | features of that interface could be implemented NS. | 923 | features of that interface could be implemented NS. |
| 885 | 924 | ||
| 886 | **** Smooth scrolling -- maybe not a good idea | 925 | **** Smooth scrolling -- maybe not a good idea |
| 887 | |||
| 888 | Today, by default, scrolling with a trackpad makes the text move in | 926 | Today, by default, scrolling with a trackpad makes the text move in |
| 889 | steps of five lines. (Scrolling with SHIFT scrolls one line at a time.) | 927 | steps of five lines. (Scrolling with SHIFT scrolls one line at a time.) |
| 890 | 928 | ||
| @@ -901,7 +939,6 @@ Note: This feature might not be allowed to be implemented until also | |||
| 901 | implemented in Emacs for a free system. | 939 | implemented in Emacs for a free system. |
| 902 | 940 | ||
| 903 | **** Mouse gestures | 941 | **** Mouse gestures |
| 904 | |||
| 905 | The "mac" port defines the gestures 'swipe-left/right/up/down', | 942 | The "mac" port defines the gestures 'swipe-left/right/up/down', |
| 906 | 'magnify-up/down', and 'rotate-left/right'. | 943 | 'magnify-up/down', and 'rotate-left/right'. |
| 907 | 944 | ||
| @@ -915,11 +952,9 @@ implemented in Emacs for a free system. | |||
| 915 | **** Synthesize bold fonts | 952 | **** Synthesize bold fonts |
| 916 | 953 | ||
| 917 | *** Open issues | 954 | *** Open issues |
| 918 | |||
| 919 | This section contains issues where there is an ongoing debate. | 955 | This section contains issues where there is an ongoing debate. |
| 920 | 956 | ||
| 921 | **** Key bindings of CMD and ALT | 957 | **** Key bindings of CMD and ALT |
| 922 | |||
| 923 | Currently in the "ns" port, ALT is bound to Meta and CMD is bound to | 958 | Currently in the "ns" port, ALT is bound to Meta and CMD is bound to |
| 924 | Super -- allowing the user to use typical macOS commands like CMD-A to | 959 | Super -- allowing the user to use typical macOS commands like CMD-A to |
| 925 | mark everything. | 960 | mark everything. |
| @@ -942,7 +977,6 @@ https://lists.gnu.org/r/emacs-devel/2016-01/msg00008.html | |||
| 942 | *** Internal development features | 977 | *** Internal development features |
| 943 | 978 | ||
| 944 | **** Regression test system (or at least a checklist) | 979 | **** Regression test system (or at least a checklist) |
| 945 | |||
| 946 | Today, after each change to the user interface, Emacs must be manually | 980 | Today, after each change to the user interface, Emacs must be manually |
| 947 | tested. Often, small details are overlooked ("Oh, I didn't test | 981 | tested. Often, small details are overlooked ("Oh, I didn't test |
| 948 | toggling the tool-bar in one of the full screen modes, when multiple | 982 | toggling the tool-bar in one of the full screen modes, when multiple |
| @@ -953,18 +987,15 @@ Many features are generic, however, the NS interface provides a number | |||
| 953 | of unique features. | 987 | of unique features. |
| 954 | 988 | ||
| 955 | **** Existing packages | 989 | **** Existing packages |
| 956 | |||
| 957 | Note that there is a generic UI test named frame-test.el, see | 990 | Note that there is a generic UI test named frame-test.el, see |
| 958 | https://debbugs.gnu.org/21415#284 . | 991 | https://debbugs.gnu.org/21415#284 . |
| 959 | The NS interface passes this, with the exception of two toolbar-related errors. | 992 | The NS interface passes this, with the exception of two toolbar-related errors. |
| 960 | 993 | ||
| 961 | **** Anders frame test | 994 | **** Anders frame test |
| 962 | |||
| 963 | Anders Lindgren <andlind@gmail.com> has implemented some (very basic) | 995 | Anders Lindgren <andlind@gmail.com> has implemented some (very basic) |
| 964 | tests for full screen, toolbar, and auto-hiding the menu bar. | 996 | tests for full screen, toolbar, and auto-hiding the menu bar. |
| 965 | 997 | ||
| 966 | **** Make sure all build variants work | 998 | **** Make sure all build variants work |
| 967 | |||
| 968 | Emacs can be build in a number of different ways. For each feature, | 999 | Emacs can be build in a number of different ways. For each feature, |
| 969 | consider if is really is "NS" specific, or if it should be applied to | 1000 | consider if is really is "NS" specific, or if it should be applied to |
| 970 | all build versions. | 1001 | all build versions. |
| @@ -982,7 +1013,6 @@ all build versions. | |||
| 982 | *** Bugs | 1013 | *** Bugs |
| 983 | 1014 | ||
| 984 | **** Toggling the toolbar in fullheight or maximized modes | 1015 | **** Toggling the toolbar in fullheight or maximized modes |
| 985 | |||
| 986 | The toolbar, in the NS interface, is not considered part of the text | 1016 | The toolbar, in the NS interface, is not considered part of the text |
| 987 | area. When it is toggled, the Emacs frame change height accordingly. | 1017 | area. When it is toggled, the Emacs frame change height accordingly. |
| 988 | 1018 | ||
| @@ -997,7 +1027,7 @@ i.e. change the text area. | |||
| 997 | 1027 | ||
| 998 | This is related to the 'frame-inhibit-implied-resize' issue. | 1028 | This is related to the 'frame-inhibit-implied-resize' issue. |
| 999 | 1029 | ||
| 1000 | **** The event loop does not redraw. | 1030 | **** The event loop does not redraw |
| 1001 | A problem is that redraw don't happen during resize, | 1031 | A problem is that redraw don't happen during resize, |
| 1002 | because we can't break out from the NSapp loop during resize. | 1032 | because we can't break out from the NSapp loop during resize. |
| 1003 | There was a special trick to detect mouse press in the lower right | 1033 | There was a special trick to detect mouse press in the lower right |
| @@ -1005,8 +1035,9 @@ corner and track mouse movements, but this did not work well, and was | |||
| 1005 | not scalable to the new Lion "resize on every window edge" behavior. | 1035 | not scalable to the new Lion "resize on every window edge" behavior. |
| 1006 | [As of trunk r109635, 2012-08-15, the event loop no longer polls.] | 1036 | [As of trunk r109635, 2012-08-15, the event loop no longer polls.] |
| 1007 | 1037 | ||
| 1008 | **** (mouse-avoidance-mode 'banish) then minimize Emacs, will pop window back | 1038 | **** mouse-avoidance-mode |
| 1009 | up on top of all others (probably fixed in bug#17439) | 1039 | (mouse-avoidance-mode 'banish) then minimize Emacs, will pop window back |
| 1040 | up on top of all others (probably fixed in bug#17439). | ||
| 1010 | 1041 | ||
| 1011 | **** free_frame_resources, face colors | 1042 | **** free_frame_resources, face colors |
| 1012 | 1043 | ||
| @@ -1052,13 +1083,13 @@ pay attention to the bidi directives embedded in the HTML/XML stream. | |||
| 1052 | 1083 | ||
| 1053 | *** Allow the user to control the direction of the UI | 1084 | *** Allow the user to control the direction of the UI |
| 1054 | 1085 | ||
| 1055 | **** Introduce user option to control direction of mode line. | 1086 | **** Introduce user option to control direction of mode line |
| 1056 | One problem is the header line, which is produced by the same routines | 1087 | One problem is the header line, which is produced by the same routines |
| 1057 | as the mode line. While it makes sense to have the mode-line | 1088 | as the mode line. While it makes sense to have the mode-line |
| 1058 | direction controlled by a single global variable, header lines are | 1089 | direction controlled by a single global variable, header lines are |
| 1059 | buffer-specific, so they need a separate treatment in this regard. | 1090 | buffer-specific, so they need a separate treatment in this regard. |
| 1060 | 1091 | ||
| 1061 | **** User options to control direction of menu bar and tool bar. | 1092 | **** User options to control direction of menu bar and tool bar |
| 1062 | For the tool bar, it's relatively easy: set it.paragraph_embedding | 1093 | For the tool bar, it's relatively easy: set it.paragraph_embedding |
| 1063 | in redisplay_tool_bar according to the user variable, and make | 1094 | in redisplay_tool_bar according to the user variable, and make |
| 1064 | f->desired_tool_bar_string multibyte with STRING_SET_MULTIBYTE. Some | 1095 | f->desired_tool_bar_string multibyte with STRING_SET_MULTIBYTE. Some |
| @@ -1075,7 +1106,7 @@ with toolkit-specific code to display the menu bar right to left. | |||
| 1075 | 1106 | ||
| 1076 | ** Custom | 1107 | ** Custom |
| 1077 | 1108 | ||
| 1078 | *** Extend :set-after to also mean initialize after. | 1109 | *** Extend :set-after to also mean initialize after |
| 1079 | If defcustom A specifies :set-after '(B), then if a user customizes | 1110 | If defcustom A specifies :set-after '(B), then if a user customizes |
| 1080 | both A and B, custom will set A after B. But if the user only customizes | 1111 | both A and B, custom will set A after B. But if the user only customizes |
| 1081 | A, then if B is already defined, it gets left at its original setting. | 1112 | A, then if B is already defined, it gets left at its original setting. |
| @@ -1086,14 +1117,16 @@ such as for mail-host-address and user-mail-address in startup.el. | |||
| 1086 | 1117 | ||
| 1087 | ** ImageMagick support | 1118 | ** ImageMagick support |
| 1088 | 1119 | ||
| 1089 | *** image-type-header-regexps priorities the jpeg loader over the | 1120 | *** Image priority |
| 1121 | 'image-type-header-regexps' prioritizes the jpeg loader over the | ||
| 1090 | ImageMagick one. This is not wrong, but how should a user go about | 1122 | ImageMagick one. This is not wrong, but how should a user go about |
| 1091 | preferring the ImageMagick loader? The user might like zooming etc in jpegs. | 1123 | preferring the ImageMagick loader? The user might like zooming etc in jpegs. |
| 1092 | 1124 | ||
| 1093 | Try (setq image-type-header-regexps nil) for a quick hack to prefer | 1125 | Try (setq image-type-header-regexps nil) for a quick hack to prefer |
| 1094 | ImageMagick over the jpg loader. | 1126 | ImageMagick over the jpg loader. |
| 1095 | 1127 | ||
| 1096 | *** For some reason it's unbearably slow to look at a page in a large | 1128 | *** Slow display |
| 1129 | For some reason it's unbearably slow to look at a page in a large | ||
| 1097 | image bundle using the :index feature. The ImageMagick "display" | 1130 | image bundle using the :index feature. The ImageMagick "display" |
| 1098 | command is also a bit slow, but nowhere near as slow as the Emacs | 1131 | command is also a bit slow, but nowhere near as slow as the Emacs |
| 1099 | code. It seems ImageMagick tries to unpack every page when loading the | 1132 | code. It seems ImageMagick tries to unpack every page when loading the |
| @@ -1102,77 +1135,81 @@ bundle. This feature is not the primary usecase in Emacs though. | |||
| 1102 | ImageMagick 6.6.2-9 introduced a bugfix for single page djvu load. It | 1135 | ImageMagick 6.6.2-9 introduced a bugfix for single page djvu load. It |
| 1103 | is now much faster to use the :index feature, but still not very fast. | 1136 | is now much faster to use the :index feature, but still not very fast. |
| 1104 | 1137 | ||
| 1105 | *** Try to cache the num pages calculation. It can take a while to | 1138 | *** Try to cache the num pages calculation |
| 1106 | calculate the number of pages, and if you need to do it for each page | 1139 | It can take a while to calculate the number of pages, and if you need |
| 1107 | view, page-flipping becomes uselessly slow. | 1140 | to do it for each page view, page-flipping becomes uselessly slow. |
| 1108 | 1141 | ||
| 1109 | *** Integrate with image-dired. | 1142 | *** Integrate with image-dired |
| 1110 | 1143 | ||
| 1111 | *** Integrate with docview. | 1144 | *** Integrate with docview |
| 1112 | 1145 | ||
| 1113 | *** Integrate with image-mode. | 1146 | *** Integrate with image-mode |
| 1114 | Some work has been done, e.g. M-x image-transform-fit-to-height will | 1147 | Some work has been done, e.g. "M-x image-transform-fit-to-height" will |
| 1115 | fit the image to the height of the Emacs window. | 1148 | fit the image to the height of the Emacs window. |
| 1116 | 1149 | ||
| 1117 | *** Look for optimizations for handling images with low depth. | 1150 | *** Look for optimizations for handling images with low depth |
| 1118 | Currently the code seems to default to 24 bit RGB which is costly for | 1151 | Currently the code seems to default to 24 bit RGB which is costly for |
| 1119 | images with lower bit depth. | 1152 | images with lower bit depth. |
| 1120 | 1153 | ||
| 1121 | *** Decide what to do with some uncommitted imagemagick support | 1154 | *** Decide what to do with some uncommitted imagemagick support |
| 1122 | functions for image size etc. | 1155 | Functions for image size etc. |
| 1123 | 1156 | ||
| 1124 | ** nxml mode | 1157 | ** nxml mode |
| 1125 | 1158 | ||
| 1126 | *** High priority | 1159 | *** High priority |
| 1127 | 1160 | ||
| 1128 | **** Command to insert an element template, including all required | 1161 | **** Command to insert an element template |
| 1129 | attributes and child elements. When there's a choice of elements | 1162 | This should include all required attributes and child elements. When |
| 1130 | possible, we could insert a comment, and put an overlay on that | 1163 | there's a choice of elements possible, we could insert a comment, and |
| 1131 | comment that makes it behave like a button with a pop-up menu to | 1164 | put an overlay on that comment that makes it behave like a button with |
| 1132 | select the appropriate choice. | 1165 | a pop-up menu to select the appropriate choice. |
| 1133 | 1166 | ||
| 1134 | **** Command to tag a region. With a schema should complete using legal | 1167 | **** Command to tag a region |
| 1135 | tags, but should work without a schema as well. | 1168 | With a schema should complete using legal tags, but should work |
| 1169 | without a schema as well. | ||
| 1136 | 1170 | ||
| 1137 | **** Provide a way to conveniently rename an element. With a schema should | 1171 | **** Provide a way to conveniently rename an element |
| 1138 | complete using legal tags, but should work without a schema as well. | 1172 | With a schema should complete using legal tags, but should work |
| 1173 | without a schema as well. | ||
| 1139 | 1174 | ||
| 1140 | *** Outlining | 1175 | *** Outlining |
| 1141 | 1176 | ||
| 1142 | **** Implement C-c C-o C-q. | 1177 | **** Implement C-c C-o C-q |
| 1143 | 1178 | ||
| 1144 | **** Install pre/post command hook for moving out of invisible section. | 1179 | **** Install pre/post command hook for moving out of invisible section |
| 1145 | 1180 | ||
| 1146 | **** Put a modify hook on invisible sections that expands them. | 1181 | **** Put a modify hook on invisible sections that expands them |
| 1147 | 1182 | ||
| 1148 | **** Integrate dumb folding somehow. | 1183 | **** Integrate dumb folding somehow |
| 1149 | 1184 | ||
| 1150 | **** An element should be able to be its own heading. | 1185 | **** An element should be able to be its own heading |
| 1151 | 1186 | ||
| 1152 | **** Optimize to avoid complete buffer scan on each command. | 1187 | **** Optimize to avoid complete buffer scan on each command |
| 1153 | 1188 | ||
| 1154 | **** Make it work with HTML-style headings (i.e. level indicated by | 1189 | **** Make it work with HTML-style headings |
| 1155 | name of heading element rather than depth of section nesting). | 1190 | I.e., level indicated by name of heading element rather than depth of |
| 1191 | section nesting. | ||
| 1156 | 1192 | ||
| 1157 | **** Recognize root element as a section provided it has a title, even | 1193 | **** Recognize root element as a section provided it has a title |
| 1158 | if it doesn't match section-element-name-regex. | 1194 | Even if it doesn't match section-element-name-regex. |
| 1159 | 1195 | ||
| 1160 | **** Support for incremental search automatically making hidden text visible. | 1196 | **** Support for incremental search automatically making hidden text visible |
| 1161 | 1197 | ||
| 1162 | **** Allow title to be an attribute. | 1198 | **** Allow title to be an attribute |
| 1163 | 1199 | ||
| 1164 | **** Command that says to recognize the tag at point as a section/heading. | 1200 | **** Command that says to recognize the tag at point as a section/heading |
| 1165 | 1201 | ||
| 1166 | **** Explore better ways to determine when an element is a section | 1202 | **** Explore better ways to determine when an element is a section or a heading |
| 1167 | or a heading. | ||
| 1168 | 1203 | ||
| 1169 | **** rng-next-error needs to either ignore invisible portion or reveal it | 1204 | **** Extend 'rng-next-error' |
| 1205 | 'rng-next-error' needs to either ignore invisible portion or reveal it | ||
| 1170 | (maybe use isearch oriented text properties). | 1206 | (maybe use isearch oriented text properties). |
| 1171 | 1207 | ||
| 1172 | **** Errors within hidden section should be highlighted by underlining the | 1208 | **** Errors within hidden section should be highlighted |
| 1173 | ellipsis. | 1209 | They should be highlighted by underlining the ellipsis. |
| 1174 | 1210 | ||
| 1175 | **** Make indirect buffers work. | 1211 | **** Make indirect buffers work |
| 1212 | [??? Don't they already work?] | ||
| 1176 | 1213 | ||
| 1177 | **** How should nxml-refresh outline recover from non well-formed tags? | 1214 | **** How should nxml-refresh outline recover from non well-formed tags? |
| 1178 | 1215 | ||
| @@ -1181,11 +1218,11 @@ ellipsis. | |||
| 1181 | **** Use overlays instead of text properties for holding outline state? | 1218 | **** Use overlays instead of text properties for holding outline state? |
| 1182 | Necessary for indirect buffers to work? | 1219 | Necessary for indirect buffers to work? |
| 1183 | 1220 | ||
| 1184 | **** Allow an outline to go in the speedbar. | 1221 | **** Allow an outline to go in the speedbar |
| 1185 | 1222 | ||
| 1186 | **** Split up outlining manual section into subsections. | 1223 | **** Split up outlining manual section into subsections |
| 1187 | 1224 | ||
| 1188 | **** More detail in the manual about each outlining command. | 1225 | **** More detail in the manual about each outlining command |
| 1189 | 1226 | ||
| 1190 | **** More menu entries for hiding/showing? | 1227 | **** More menu entries for hiding/showing? |
| 1191 | 1228 | ||
| @@ -1193,390 +1230,428 @@ Necessary for indirect buffers to work? | |||
| 1193 | 1230 | ||
| 1194 | *** Locating schemas | 1231 | *** Locating schemas |
| 1195 | 1232 | ||
| 1196 | **** Should rng-validate-mode give the user an opportunity to specify a | 1233 | **** Should 'rng-validate-mode' allow to specify a schema? |
| 1197 | schema if there is currently none? Or should it at least give a hint | 1234 | Give the user an opportunity to specify a schema if there is currently |
| 1198 | to the user how to specify a non-vacuous schema? | 1235 | none? Or should it at least give a hint to the user how to specify a |
| 1236 | non-vacuous schema? | ||
| 1199 | 1237 | ||
| 1200 | **** Support for adding new schemas to schema-locating files. | 1238 | **** Support for adding new schemas to schema-locating files |
| 1201 | Add documentElement and namespace elements. | 1239 | Add documentElement and namespace elements. |
| 1202 | 1240 | ||
| 1203 | **** C-c C-w should be able to report current type id. | 1241 | **** C-c C-w should be able to report current type id |
| 1204 | 1242 | ||
| 1205 | **** Implement doctypePublicId. | 1243 | **** Implement doctypePublicId |
| 1206 | 1244 | ||
| 1207 | **** Implement typeIdBase. | 1245 | **** Implement typeIdBase |
| 1208 | 1246 | ||
| 1209 | **** Implement typeIdProcessingInstruction. | 1247 | **** Implement typeIdProcessingInstruction |
| 1210 | 1248 | ||
| 1211 | **** Support xml:base. | 1249 | **** Support xml:base |
| 1212 | 1250 | ||
| 1213 | **** Implement group. | 1251 | **** Implement group |
| 1214 | 1252 | ||
| 1215 | **** Find preferred prefix from schema-locating files. Get rid of | 1253 | **** Find preferred prefix from schema-locating files |
| 1216 | rng-preferred-prefix-alist. | 1254 | Get rid of 'rng-preferred-prefix-alist'. |
| 1217 | 1255 | ||
| 1218 | **** Inserting document element with vacuous schema should complete using | 1256 | **** Inserting document element with vacuous schema should complete |
| 1219 | document elements declared in schema locating files, and set schema | 1257 | Completion should use document elements declared in schema locating |
| 1220 | appropriately. | 1258 | files, and set schema appropriately. |
| 1221 | 1259 | ||
| 1222 | **** Add a ruleType attribute to the <include> element? | 1260 | **** Add a ruleType attribute to the <include> element? |
| 1223 | 1261 | ||
| 1224 | **** Allow processing instruction in prolog to contain the compact syntax | 1262 | **** Syntax of schema in prologue |
| 1263 | Allow processing instruction in prologue to contain the compact syntax | ||
| 1225 | schema directly. | 1264 | schema directly. |
| 1226 | 1265 | ||
| 1227 | **** Use RDDL to locate a schema based on the namespace URI. | 1266 | **** Use RDDL to locate a schema based on the namespace URI |
| 1228 | 1267 | ||
| 1229 | **** Should not prompt to add redundant association to schema locating file. | 1268 | **** Should not prompt to add redundant association to schema locating file |
| 1230 | 1269 | ||
| 1231 | **** Command to reload current schema. | 1270 | **** Command to reload current schema |
| 1232 | 1271 | ||
| 1233 | *** Schema-sensitive features | 1272 | *** Schema-sensitive features |
| 1234 | 1273 | ||
| 1235 | **** Should filter dynamic markup possibilities using schema validity, by | 1274 | **** Should filter dynamic markup possibilities using schema validity |
| 1236 | adding hook to nxml-mode. | 1275 | Should do this by adding hook to nxml-mode. |
| 1237 | 1276 | ||
| 1238 | **** Dynamic markup word should (at least optionally) be able to look in | 1277 | **** Dynamic markup word should be able to look in other buffers |
| 1239 | other buffers that are using nxml-mode. | 1278 | It should be able to look in other buffers that are using nxml-mode |
| 1279 | (at least optionally). | ||
| 1240 | 1280 | ||
| 1241 | **** Should clicking on Invalid move to next error if already on an error? | 1281 | **** Should clicking on Invalid move to next error if already on an error? |
| 1242 | 1282 | ||
| 1243 | **** Take advantage of a:documentation. Needs change to schema format. | 1283 | **** Take advantage of a:documentation |
| 1284 | Needs change to schema format. | ||
| 1244 | 1285 | ||
| 1245 | **** Provide feasible validation (as in Jing) toggle. | 1286 | **** Provide feasible validation (as in Jing) toggle |
| 1246 | 1287 | ||
| 1247 | **** Save the validation state as a property on the error overlay to enable | 1288 | **** Save the validation state as a property on the error overlay |
| 1248 | more detailed diagnosis. | 1289 | This would enable more detailed diagnosis. |
| 1249 | 1290 | ||
| 1250 | **** Provide an Error Summary buffer showing all the validation errors. | 1291 | **** Provide an Error Summary buffer showing all the validation errors |
| 1251 | 1292 | ||
| 1252 | **** Pop-up menu. What is useful? Tag a region (should be grayed out if | 1293 | **** Pop-up menu |
| 1253 | the region is not balanced). Suggestions based on error messages. | 1294 | What is useful? Tag a region (should be grayed out if the region is |
| 1295 | not balanced). Suggestions based on error messages. | ||
| 1254 | 1296 | ||
| 1255 | **** Have configurable list of namespace URIs so that we can provide | 1297 | **** Have configurable list of namespace URIs |
| 1256 | namespace URI completion on extension elements or with schema-less documents. | 1298 | So that we can provide namespace URI completion on extension elements |
| 1299 | or with schema-less documents. | ||
| 1257 | 1300 | ||
| 1258 | **** Allow validation to handle XInclude. | 1301 | **** Allow validation to handle XInclude |
| 1259 | 1302 | ||
| 1260 | **** ID/IDREF support. | 1303 | **** ID/IDREF support |
| 1261 | 1304 | ||
| 1262 | *** Completion | 1305 | *** Completion |
| 1263 | 1306 | ||
| 1264 | **** Make it work with icomplete. Only use a function to complete when | 1307 | **** Make it work with icomplete |
| 1265 | some of the possible names have undeclared namespaces. | 1308 | Only use a function to complete when some of the possible names have |
| 1309 | undeclared namespaces. | ||
| 1266 | 1310 | ||
| 1267 | **** How should C-return in mixed text work? | 1311 | **** How should C-return in mixed text work? |
| 1268 | 1312 | ||
| 1269 | **** When there's a vacuous schema, C-return after < will insert the end-tag. | 1313 | **** When there's a vacuous schema, C-return after < will insert the end-tag |
| 1270 | Is this a bug or a feature? | 1314 | Is this a bug or a feature? |
| 1271 | 1315 | ||
| 1272 | **** After completing start-tag, ensure we don't get unhelpful message | 1316 | **** Validation messages after completing start-tag |
| 1273 | from validation | 1317 | After completing start-tag, ensure we don't get unhelpful message from |
| 1318 | validation | ||
| 1274 | 1319 | ||
| 1275 | **** Syntax table for completion. | 1320 | **** Syntax table for completion |
| 1276 | 1321 | ||
| 1277 | **** Should complete start-tag name with a space if namespace attributes | 1322 | **** Should complete start-tag name with a space |
| 1278 | are required. | 1323 | If namespace attributes are required. |
| 1279 | 1324 | ||
| 1280 | **** When completing start-tag name with no prefix and it doesn't match | 1325 | **** Completing start-tag name with no prefix |
| 1326 | When completing start-tag name with no prefix and it doesn't match | ||
| 1281 | should try to infer namespace from local name. | 1327 | should try to infer namespace from local name. |
| 1282 | 1328 | ||
| 1283 | **** Should completion pay attention to characters after point? If so, how? | 1329 | **** Should completion pay attention to characters after point? |
| 1330 | If so, how? | ||
| 1284 | 1331 | ||
| 1285 | **** When completing start-tag name, add required atts if only one required | 1332 | **** Completion of start-tag with only one attribute |
| 1333 | When completing start-tag name, add required atts if only one required | ||
| 1286 | attribute. | 1334 | attribute. |
| 1287 | 1335 | ||
| 1288 | **** When completing attribute name, add attribute value if only one value | 1336 | **** Completion of name of attribute with only one attribute value |
| 1337 | When completing attribute name, add attribute value if only one value | ||
| 1289 | is possible. | 1338 | is possible. |
| 1290 | 1339 | ||
| 1291 | **** After attribute-value completion, insert space after close delimiter | 1340 | **** Completion of attribute values |
| 1341 | After attribute-value completion, insert space after close delimiter | ||
| 1292 | if more attributes are required. | 1342 | if more attributes are required. |
| 1293 | 1343 | ||
| 1294 | **** Complete on enumerated data values in elements. | 1344 | **** Complete on enumerated data values in elements |
| 1295 | 1345 | ||
| 1296 | **** When in context that allows only elements, should get tag | 1346 | **** Tag completion in context that allows only elements |
| 1297 | completion without having to type < first. | 1347 | When in context that allows only elements, should get tag completion |
| 1348 | without having to type < first. | ||
| 1298 | 1349 | ||
| 1299 | **** When immediately after start-tag name, and name is valid and not | 1350 | **** C-return completion immediately after start-tag name |
| 1351 | When immediately after start-tag name, and name is valid and not | ||
| 1300 | prefix of any other name, should C-return complete on attribute names? | 1352 | prefix of any other name, should C-return complete on attribute names? |
| 1301 | 1353 | ||
| 1302 | **** When completing attributes, more consistent to ignore all attributes | 1354 | **** Ignoring all attributes during attribute completion |
| 1355 | When completing attributes, more consistent to ignore all attributes | ||
| 1303 | after point. | 1356 | after point. |
| 1304 | 1357 | ||
| 1305 | **** Inserting attribute value completions needs to be sensitive to what | 1358 | **** Inserting attribute value by completions |
| 1306 | delimiter is used so that it quotes the correct character. | 1359 | Completions inserting attribute value need to be sensitive to what |
| 1360 | delimiter is used so that they quote the correct character. | ||
| 1307 | 1361 | ||
| 1308 | **** Complete on encoding-names in XML decl. | 1362 | **** Complete on encoding-names in XML decl |
| 1309 | 1363 | ||
| 1310 | **** Complete namespace declarations by searching for all namespaces | 1364 | **** Complete namespace declarations |
| 1311 | mentioned in the schema. | 1365 | Can be done by searching for all namespaces mentioned in the schema. |
| 1312 | 1366 | ||
| 1313 | *** Well-formed XML support | 1367 | *** Well-formed XML support |
| 1314 | 1368 | ||
| 1315 | **** Deal better with Mule-UCS | 1369 | **** Deal better with Mule-UCS |
| 1316 | 1370 | ||
| 1317 | **** Deal with UTF-8 BOM when reading. | 1371 | **** Deal with UTF-8 BOM when reading |
| 1372 | [Isn't this already working when visiting XML files?] | ||
| 1318 | 1373 | ||
| 1319 | **** Complete entity names. | 1374 | **** Complete entity names |
| 1320 | 1375 | ||
| 1321 | **** Provide some support for entity names for MathML. | 1376 | **** Provide some support for entity names for MathML |
| 1322 | 1377 | ||
| 1323 | **** Command to repeat the last tag. | 1378 | **** Command to repeat the last tag |
| 1324 | 1379 | ||
| 1325 | **** Support for changing between character references and characters. | 1380 | **** Support for changing between character references and characters |
| 1326 | Need to check that context is one in which character references are | 1381 | Need to check that context is one in which character references are |
| 1327 | allowed. xmltok prolog parsing will need to distinguish parameter | 1382 | allowed. xmltok prolog parsing will need to distinguish parameter |
| 1328 | literals from other kinds of literal. | 1383 | literals from other kinds of literal. |
| 1329 | 1384 | ||
| 1330 | **** Provide a comment command to bind to M-; that works better than the | 1385 | **** Provide a comment command to bind to M-; |
| 1331 | normal one. | 1386 | The command should work better than the normal one. |
| 1332 | 1387 | ||
| 1333 | **** Make indenting in a multi-line comment work. | 1388 | **** Make indenting in a multi-line comment work |
| 1334 | 1389 | ||
| 1335 | **** Structure view. Separate buffer displaying element tree. | 1390 | **** Structure view |
| 1336 | Be able to navigate from structure view to document and vice-versa. | 1391 | Separate buffer displaying element tree. Be able to navigate from |
| 1392 | structure view to document and vice-versa. | ||
| 1337 | 1393 | ||
| 1338 | **** Flash matching >. | 1394 | **** Flash matching > |
| 1339 | 1395 | ||
| 1340 | **** Smart selection command that selects increasingly large syntactically | 1396 | **** Smart selection command |
| 1397 | Provide a command that selects increasingly large syntactically | ||
| 1341 | coherent chunks of XML. If point is in an attribute value, first | 1398 | coherent chunks of XML. If point is in an attribute value, first |
| 1342 | select complete value; then if command is repeated, select value plus | 1399 | select complete value; then if command is repeated, select value plus |
| 1343 | delimiters, then select attribute name as well, then complete | 1400 | delimiters, then select attribute name as well, then complete |
| 1344 | start-tag, then complete element, then enclosing element, etc. | 1401 | start-tag, then complete element, then enclosing element, etc. |
| 1345 | 1402 | ||
| 1346 | **** ispell integration. | 1403 | **** Ispell integration |
| 1347 | 1404 | ||
| 1348 | **** Block-level items in mixed content should be indented, e.g: | 1405 | **** Block-level items in mixed content |
| 1406 | This should be indented, e.g: | ||
| 1349 | <para>This is list: | 1407 | <para>This is list: |
| 1350 | <ul> | 1408 | <ul> |
| 1351 | <li>item</li> | 1409 | <li>item</li> |
| 1352 | 1410 | ||
| 1353 | **** Provide option to indent like this: | 1411 | **** Optionally different indentation style |
| 1412 | Provide an option to indent like this: | ||
| 1354 | <para>This is a paragraph | 1413 | <para>This is a paragraph |
| 1355 | occupying multiple lines.</para> | 1414 | occupying multiple lines.</para> |
| 1356 | 1415 | ||
| 1357 | **** Option to add make a / that closes a start-tag electrically insert a | 1416 | **** Option to make a / that closes a start-tag electrically insert a space |
| 1358 | space for the XHTML guys. | 1417 | Important for the XHTML guys. |
| 1359 | 1418 | ||
| 1360 | **** C-M-q should work. | 1419 | **** C-M-q should work |
| 1361 | 1420 | ||
| 1362 | *** Datatypes | 1421 | *** Datatypes |
| 1363 | 1422 | ||
| 1364 | **** Figure out workaround for CJK characters with regexps. | 1423 | **** Figure out workaround for CJK characters with regexps |
| 1365 | 1424 | ||
| 1366 | **** Does category C contain Cn? | 1425 | **** Does category C contain Cn? |
| 1367 | 1426 | ||
| 1368 | **** Do ENTITY datatype properly. | 1427 | **** Do ENTITY datatype properly |
| 1369 | 1428 | ||
| 1370 | *** XML Parsing Library | 1429 | *** XML Parsing Library |
| 1371 | 1430 | ||
| 1372 | **** Parameter entity parsing option, nil (never), t (always), | 1431 | **** Parameter entity parsing option |
| 1373 | unless-standalone (unless standalone="yes" in XML declaration). | 1432 | Values: nil (never), t (always), unless-standalone (unless |
| 1433 | standalone="yes" in XML declaration). | ||
| 1374 | 1434 | ||
| 1375 | **** When a file is currently being edited, there should be an option to | 1435 | **** Option to parse a buffer |
| 1436 | When a file is currently being edited, there should be an option to | ||
| 1376 | use its buffer instead of the on-disk copy. | 1437 | use its buffer instead of the on-disk copy. |
| 1377 | 1438 | ||
| 1378 | *** Handling all XML features | 1439 | *** Handling all XML features |
| 1379 | 1440 | ||
| 1380 | **** Provide better support for editing external general parsed entities. | 1441 | **** Provide better support for editing external general parsed entities |
| 1381 | Perhaps provide a way to force ignoring undefined entities; maybe turn | 1442 | Perhaps provide a way to force ignoring undefined entities; maybe turn |
| 1382 | this on automatically with <?xml encoding=""?> (with no version | 1443 | this on automatically with <?xml encoding=""?> (with no version |
| 1383 | pseudo-att). | 1444 | pseudo-att). |
| 1384 | 1445 | ||
| 1385 | **** Handle internal general entity declarations containing elements. | 1446 | **** Handle internal general entity declarations containing elements |
| 1386 | 1447 | ||
| 1387 | **** Handle external general entity declarations. | 1448 | **** Handle external general entity declarations |
| 1388 | 1449 | ||
| 1389 | **** Handle default attribute declarations in internal subset. | 1450 | **** Handle default attribute declarations in internal subset |
| 1390 | 1451 | ||
| 1391 | **** Handle parameter entities (including DTD). | 1452 | **** Handle parameter entities (including DTD) |
| 1392 | 1453 | ||
| 1393 | *** RELAX NG | 1454 | *** RELAX NG |
| 1394 | 1455 | ||
| 1395 | **** Do complete schema checking, at least optionally. | 1456 | **** Do complete schema checking, at least optionally |
| 1396 | 1457 | ||
| 1397 | **** Detect include/external loops during schema parse. | 1458 | **** Detect include/external loops during schema parse |
| 1398 | 1459 | ||
| 1399 | **** Coding system detection for schemas. Should use utf-8/utf-16 per the | 1460 | **** Coding system detection for schemas |
| 1400 | spec. But also need to allow encodings other than UTF-8/16 to support | 1461 | Should use utf-8/utf-16 per the spec. But also need to allow |
| 1401 | CJK charsets that Emacs cannot represent in Unicode. | 1462 | encodings other than UTF-8/16 to support CJK charsets that Emacs |
| 1463 | cannot represent in Unicode. | ||
| 1402 | 1464 | ||
| 1403 | *** Catching XML errors | 1465 | *** Catching XML errors |
| 1404 | 1466 | ||
| 1405 | **** Check public identifiers. | 1467 | **** Check public identifiers |
| 1406 | 1468 | ||
| 1407 | **** Check default attribute values. | 1469 | **** Check default attribute values |
| 1408 | 1470 | ||
| 1409 | *** Performance | 1471 | *** Performance |
| 1410 | 1472 | ||
| 1411 | **** Explore whether overlay-recenter can cure overlays performance problems. | 1473 | **** Explore whether overlay-recenter can cure overlays performance problems |
| 1412 | 1474 | ||
| 1413 | **** Cache schemas. Need to have list of files and mtimes. | 1475 | **** Cache schemas. Need to have list of files and mtimes |
| 1414 | 1476 | ||
| 1415 | **** Make it possible to reduce rng-validate-chunk-size significantly, | 1477 | **** Make it possible to reduce rng-validate-chunk-size significantly |
| 1416 | perhaps to 500 bytes, without bad performance impact: don't do | 1478 | Perhaps up to 500 bytes, without bad performance impact: don't do |
| 1417 | redisplay on every chunk; pass continue functions on other uses of | 1479 | redisplay on every chunk; pass continue functions on other uses of |
| 1418 | rng-do-some-validation. | 1480 | rng-do-some-validation. |
| 1419 | 1481 | ||
| 1420 | **** Cache after first tag. | 1482 | **** Cache after first tag |
| 1421 | 1483 | ||
| 1422 | **** Introduce a new name class that is a choice between names (so that | 1484 | **** Introduce a new name class that is a choice between names |
| 1423 | we can use member) | 1485 | So that we can use member. |
| 1424 | 1486 | ||
| 1425 | **** intern-choice should simplify after patterns with same 1st/2nd args | 1487 | **** intern-choice should simplify after patterns with same 1st/2nd args |
| 1426 | 1488 | ||
| 1427 | **** Large numbers of overlays slow things down dramatically. Represent | 1489 | **** Large numbers of overlays slow things down dramatically |
| 1428 | errors using text properties. This implies we cannot incrementally | 1490 | Represent errors using text properties. This implies we cannot |
| 1429 | keep track of the number of errors, in order to determine validity. | 1491 | incrementally keep track of the number of errors, in order to |
| 1430 | Instead, when validation completes, scan for any characters with an | 1492 | determine validity. Instead, when validation completes, scan for any |
| 1431 | error text property; this seems to be fast enough even with large | 1493 | characters with an error text property; this seems to be fast enough |
| 1432 | buffers. Problem with error at end of buffer, where there's no | 1494 | even with large buffers. Problem with error at end of buffer, where |
| 1433 | character; need special variable for this. Need to merge face from | 1495 | there's no character; need special variable for this. Need to merge |
| 1434 | font-lock with the error face: use :inherit attribute with list of two | 1496 | face from font-lock with the error face: use :inherit attribute with |
| 1435 | faces. How do we avoid making rng-valid depend on nxml-mode? | 1497 | list of two faces. How do we avoid making rng-valid depend on |
| 1498 | nxml-mode? | ||
| 1436 | 1499 | ||
| 1437 | *** Error recovery | 1500 | *** Error recovery |
| 1438 | 1501 | ||
| 1439 | **** Don't stop at newline in looking for close of start-tag. | 1502 | **** Don't stop at newline in looking for close of start-tag |
| 1440 | 1503 | ||
| 1441 | **** Use indentation to guide recovery from mismatched end-tags | 1504 | **** Use indentation to guide recovery from mismatched end-tags |
| 1442 | 1505 | ||
| 1443 | **** Don't keep parsing when currently not well-formed but previously | 1506 | **** Smarter parsing in presence of errors |
| 1444 | well-formed | 1507 | Don't keep parsing when currently not well-formed but previously |
| 1508 | well-formed. | ||
| 1445 | 1509 | ||
| 1446 | **** Try to recover from a bad start-tag by popping an open element if | 1510 | **** Recovery from bad start-tag |
| 1511 | Try to recover from a bad start-tag by popping an open element if | ||
| 1447 | there was a mismatched end-tag unaccounted for. | 1512 | there was a mismatched end-tag unaccounted for. |
| 1448 | 1513 | ||
| 1449 | **** Try to recover from a bad start-tag open on the hypothesis that there | 1514 | Try to recover from a bad start-tag open on the hypothesis that there |
| 1450 | was an error in the namespace URI. | 1515 | was an error in the namespace URI. |
| 1451 | 1516 | ||
| 1452 | **** Better recovery from ill-formed XML declarations. | 1517 | **** Better recovery from ill-formed XML declarations |
| 1453 | 1518 | ||
| 1454 | *** Usability improvements | 1519 | *** Usability improvements |
| 1455 | 1520 | ||
| 1456 | **** Should print a "Parsing..." message during long movements. | 1521 | **** Should print a "Parsing..." message during long movements |
| 1457 | 1522 | ||
| 1458 | **** Provide better position for reference to undefined pattern error. | 1523 | **** Provide better position for reference to undefined pattern error |
| 1459 | 1524 | ||
| 1460 | **** Put Well-formed in the mode-line when validating against any-content. | 1525 | **** Put Well-formed in the mode-line when validating against any-content |
| 1461 | 1526 | ||
| 1462 | **** Trim marking of illegal data for leading and trailing whitespace. | 1527 | **** Trim marking of illegal data for leading and trailing whitespace |
| 1463 | 1528 | ||
| 1464 | **** Show Invalid status as soon as we are sure it's invalid, rather than | 1529 | **** Show Invalid status as soon as we are sure it's invalid |
| 1465 | waiting for everything to be completely up to date. | 1530 | That's instead of waiting for everything to be completely up to date. |
| 1466 | 1531 | ||
| 1467 | **** When narrowed, Valid or Invalid status should probably consider only | 1532 | **** Operation when narrowed |
| 1533 | When narrowed, Valid or Invalid status should probably consider only | ||
| 1468 | validity of narrowed region. | 1534 | validity of narrowed region. |
| 1469 | 1535 | ||
| 1470 | *** Bug fixes | 1536 | *** Bug fixes |
| 1471 | 1537 | ||
| 1472 | **** Need to give an error for a document like: <foo/><![CDATA[ ]]> | 1538 | **** Need to give an error for a document like: <foo/><![CDATA[ ]]> |
| 1473 | 1539 | ||
| 1474 | **** Make nxml-forward-balanced-item work better for the prolog. | 1540 | **** Make nxml-forward-balanced-item work better for the prologue |
| 1475 | 1541 | ||
| 1476 | **** Make filling and indenting comments work in the prolog. | 1542 | **** Make filling and indenting comments work in the prologue |
| 1477 | 1543 | ||
| 1478 | **** Should delete RNC Input buffers. | 1544 | **** Should delete RNC Input buffers |
| 1479 | 1545 | ||
| 1480 | **** Figure out what regex use for NCName and use it consistently, | 1546 | **** Figure out what regex use for NCName and use it consistently |
| 1481 | 1547 | ||
| 1482 | **** Should have not-well-formed tokens in ref. | 1548 | **** Should have not-well-formed tokens in ref |
| 1483 | 1549 | ||
| 1484 | **** Require version in XML declaration? Probably not because prevents | 1550 | **** Require version in XML declaration? |
| 1485 | use for external parsed entities. At least forbid standalone without version. | 1551 | Probably not because prevents use for external parsed entities. At |
| 1552 | least forbid standalone without version. | ||
| 1486 | 1553 | ||
| 1487 | **** Reject schema that compiles to rng-not-allowed-ipattern. | 1554 | **** Reject schema that compiles to rng-not-allowed-ipattern |
| 1488 | 1555 | ||
| 1489 | **** Move point backwards on schema parse error so that it's on the right token. | 1556 | **** Move point backwards on schema parse error so that it's on the right token |
| 1490 | 1557 | ||
| 1491 | *** Internal | 1558 | *** Internal |
| 1492 | 1559 | ||
| 1493 | **** Use rng-quote-string consistently. | 1560 | **** Use rng-quote-string consistently |
| 1494 | 1561 | ||
| 1495 | **** Use parsing library for XML to texinfo conversion. | 1562 | **** Use parsing library for XML to texinfo conversion |
| 1496 | 1563 | ||
| 1497 | **** Rename xmltok.el to nxml-token.el. Use nxml-t- prefix instead of | 1564 | **** Rename xmltok.el to nxml-token.el |
| 1498 | xmltok-. Change nxml-t-type to nxml-t-token-type, nxml-t-start to | 1565 | Use nxml-t- prefix instead of xmltok-. Change nxml-t-type to |
| 1499 | nxml-t-token-start. | 1566 | nxml-t-token-type, nxml-t-start to nxml-t-token-start. |
| 1500 | 1567 | ||
| 1501 | **** Can we set fill-prefix to nil and rely on indenting? | 1568 | **** Can we set fill-prefix to nil and rely on indenting? |
| 1502 | 1569 | ||
| 1503 | **** xmltok should make available replacement text of entities containing | 1570 | **** xmltok should make available replacement text of entities with elements |
| 1504 | elements | ||
| 1505 | 1571 | ||
| 1506 | **** In rng-valid, instead of using modification-hooks and | 1572 | **** In rng-valid, use same technique as nxml-mode |
| 1507 | insert-behind-hooks on dependent overlays, use same technique as nxml-mode. | 1573 | That's instead of using modification-hooks and insert-behind-hooks on |
| 1574 | dependent overlays. | ||
| 1508 | 1575 | ||
| 1509 | *** Fontification | 1576 | *** Fontification |
| 1510 | 1577 | ||
| 1511 | **** Allow face to depend on element qname, attribute qname, attribute | 1578 | **** Allow face to depend on element qname, attribute qname, attribute value |
| 1512 | value. Use list with pairs of (R . F), where R specifies regexps and | 1579 | Use list with pairs of (R . F), where R specifies regexps and F |
| 1513 | F specifies faces. How can this list be made to depend on the document type? | 1580 | specifies faces. How can this list be made to depend on the document |
| 1581 | type? | ||
| 1514 | 1582 | ||
| 1515 | *** Other | 1583 | *** Other |
| 1516 | 1584 | ||
| 1517 | **** Support RELAX NG XML syntax (use XML parsing library). | 1585 | **** Support RELAX NG XML syntax (use XML parsing library) |
| 1518 | 1586 | ||
| 1519 | **** Support W3C XML Schema (use XML parsing library). | 1587 | **** Support W3C XML Schema (use XML parsing library) |
| 1520 | 1588 | ||
| 1521 | **** Command to infer schema from current document (like trang). | 1589 | **** Command to infer schema from current document (like trang) |
| 1522 | 1590 | ||
| 1523 | *** Schemas | 1591 | *** Schemas |
| 1524 | 1592 | ||
| 1525 | **** XSLT schema should take advantage of RELAX NG to express cooccurrence | 1593 | **** XSLT schema should take advantage of RELAX NG |
| 1526 | constraints on attributes (e.g. xsl:template). | 1594 | So as to express co-occurrence constraints on attributes |
| 1595 | (e.g. xsl:template). | ||
| 1527 | 1596 | ||
| 1528 | *** Documentation | 1597 | *** Documentation |
| 1529 | 1598 | ||
| 1530 | **** Move material from README to manual. | 1599 | **** Move material from README to manual |
| 1531 | 1600 | ||
| 1532 | **** Document encodings. | 1601 | **** Document encodings |
| 1533 | 1602 | ||
| 1534 | *** Notes | 1603 | *** Notes |
| 1535 | 1604 | ||
| 1536 | **** How can we allow an error to be displayed on a different token from | 1605 | **** Error display |
| 1606 | How can we allow an error to be displayed on a different token from | ||
| 1537 | where it is detected? In particular, for a missing closing ">" we | 1607 | where it is detected? In particular, for a missing closing ">" we |
| 1538 | will need to display it at the beginning of the following token. At the | 1608 | will need to display it at the beginning of the following token. At |
| 1539 | moment, when we parse the following token the error overlay will get cleared. | 1609 | the moment, when we parse the following token the error overlay will |
| 1610 | get cleared. | ||
| 1540 | 1611 | ||
| 1541 | **** How should rng-goto-next-error deal with narrowing? | 1612 | **** How should rng-goto-next-error deal with narrowing? |
| 1542 | 1613 | ||
| 1543 | **** Perhaps should merge errors having same start position even if they | 1614 | **** Perhaps should merge errors |
| 1544 | have different ends. | 1615 | Merge errors having same start position even if they have different |
| 1616 | ends. | ||
| 1545 | 1617 | ||
| 1546 | **** How to handle surrogates? One possibility is to be compatible with | 1618 | **** How to handle surrogates? |
| 1547 | utf8.e: represent as sequence of 4 chars. But utf-16 is incompatible | 1619 | One possibility is to be compatible with utf8.e: represent as sequence |
| 1548 | with this. | 1620 | of 4 chars. But utf-16 is incompatible with this. |
| 1549 | 1621 | ||
| 1550 | **** Should we distinguish well-formedness errors from invalidity errors? | 1622 | **** Should we distinguish well-formedness errors from invalidity errors? |
| 1551 | (I think not: we may want to recover from a bad start-tag by implying | 1623 | (I think not: we may want to recover from a bad start-tag by implying |
| 1552 | an end-tag.) | 1624 | an end-tag.) |
| 1553 | 1625 | ||
| 1554 | **** Seems to be a bug with Emacs, where a mouse movement that causes | 1626 | **** Mouse movement that causes help-echo |
| 1627 | Seems to be a bug with Emacs, where a mouse movement that causes | ||
| 1555 | help-echo text to appear counts as pending input but does not cause | 1628 | help-echo text to appear counts as pending input but does not cause |
| 1556 | idle timer to be restarted. | 1629 | idle timer to be restarted. |
| 1557 | 1630 | ||
| 1558 | **** Use XML to represent this file. | 1631 | **** Use XML to represent this file |
| 1559 | 1632 | ||
| 1560 | **** I had a TODO which said simply "split-string". What did I mean? | 1633 | **** I had a TODO which said simply "split-string" |
| 1634 | What did I mean? | ||
| 1561 | 1635 | ||
| 1562 | **** Investigate performance on large files all on one line. | 1636 | **** Investigate performance on large files all on one line |
| 1563 | 1637 | ||
| 1564 | *** Issues for Emacs versions >= 22 | 1638 | *** Issues for Emacs versions >= 22 |
| 1565 | 1639 | ||
| 1566 | **** Take advantage of UTF-8 CJK support. | 1640 | **** Take advantage of UTF-8 CJK support |
| 1567 | 1641 | ||
| 1568 | **** Supply a next-error-function. | 1642 | **** Supply a next-error-function |
| 1569 | 1643 | ||
| 1570 | **** Investigate this NEWS item "Emacs now tries to set up buffer coding | 1644 | **** Investigate a NEWS item |
| 1571 | systems for HTML/XML files automatically." | 1645 | There's a NEWS item which says "Emacs now tries to set up buffer |
| 1646 | coding systems for HTML/XML files automatically." | ||
| 1572 | 1647 | ||
| 1573 | **** Take advantage of the pointer text property. | 1648 | **** Take advantage of the pointer text property |
| 1574 | 1649 | ||
| 1575 | **** Leverage char-displayable-p. | 1650 | **** Leverage char-displayable-p |
| 1576 | 1651 | ||
| 1577 | ** RefTeX | 1652 | ** RefTeX |
| 1578 | 1653 | ||
| 1579 | *** Provide a wdired-like mode for editing RefTeX TOC buffers. | 1654 | *** Provide a wdired-like mode for editing RefTeX TOC buffers |
| 1580 | As a first step, renaming of sections could be supported. Ultimately, | 1655 | As a first step, renaming of sections could be supported. Ultimately, |
| 1581 | it would be great if it also supported moving sections, e.g., by | 1656 | it would be great if it also supported moving sections, e.g., by |
| 1582 | killing and yanking or providing org-mode like "move section | 1657 | killing and yanking or providing org-mode like "move section |
| @@ -1585,68 +1660,71 @@ presence of multi-file documents. | |||
| 1585 | 1660 | ||
| 1586 | * Internal changes | 1661 | * Internal changes |
| 1587 | 1662 | ||
| 1588 | ** Cleanup all the GC_ mark bit stuff -- there is no longer any distinction | 1663 | ** Cleanup all the GC_ mark bit stuff |
| 1589 | since the mark bit is no longer stored in the Lisp_Object itself. | 1664 | There is no longer any distinction since the mark bit is no longer |
| 1665 | stored in the Lisp_Object itself. | ||
| 1590 | 1666 | ||
| 1591 | ** Refine the 'predicate' arg to read-file-name. | 1667 | ** Refine the 'predicate' arg to read-file-name |
| 1592 | Currently, it mixes up the predicate to apply when doing completion and the | 1668 | Currently, it mixes up the predicate to apply when doing completion |
| 1593 | one to use when terminating the selection. | 1669 | and the one to use when terminating the selection. |
| 1594 | 1670 | ||
| 1595 | ** Merge ibuffer.el and buff-menu.el. | 1671 | ** Merge ibuffer.el and buff-menu.el |
| 1596 | More specifically do what's needed to make ibuffer.el the default, | 1672 | More specifically do what's needed to make ibuffer.el the default, or |
| 1597 | or just an extension of buff-menu.el. | 1673 | just an extension of buff-menu.el. |
| 1598 | 1674 | ||
| 1599 | ** Replace linum.el with nlinum.el | 1675 | ** Replace linum.el with nlinum.el |
| 1600 | https://lists.gnu.org/r/emacs-devel/2013-08/msg00379.html | 1676 | https://lists.gnu.org/r/emacs-devel/2013-08/msg00379.html |
| 1601 | 1677 | ||
| 1602 | (Since Emacs 26 introduced native line numbers, this item is | 1678 | (Since Emacs 26 introduced native line numbers, this item is |
| 1603 | probably obsolete.) | 1679 | probably obsolete.) |
| 1604 | 1680 | ||
| 1605 | ** Merge sendmail.el and messages.el. | 1681 | ** Merge sendmail.el and messages.el |
| 1606 | Probably not a complete merge, but at least arrange for messages.el to be | 1682 | Probably not a complete merge, but at least arrange for messages.el to |
| 1607 | a derived mode of sendmail.el. Or arrange for messages.el to be split | 1683 | be a derived mode of sendmail.el. Or arrange for messages.el to be |
| 1608 | into a small core and "the rest" so that we use less resources as long as | 1684 | split into a small core and "the rest" so that we use less resources |
| 1609 | we stick to the features provided in sendmail.el. | 1685 | as long as we stick to the features provided in sendmail.el. |
| 1610 | 1686 | ||
| 1611 | (Probably obsolete, as Emacs 24 switched to message.el as the | 1687 | (Probably obsolete, as Emacs 24 switched to message.el as the |
| 1612 | default mail composer.) | 1688 | default mail composer.) |
| 1613 | 1689 | ||
| 1614 | ** Replace gmalloc.c with the modified Doug Lea code from the current | 1690 | ** Replace gmalloc.c |
| 1615 | GNU libc so that the special mmapping of buffers can be removed -- | 1691 | Replace it with the modified Doug Lea code from the current GNU libc |
| 1616 | that apparently loses under Solaris, at least. [fx has mostly done | 1692 | so that the special mmapping of buffers can be removed -- that |
| 1617 | this.] | 1693 | apparently loses under Solaris, at least. [fx has mostly done this.] |
| 1618 | 1694 | ||
| 1619 | (Obsolete, since gmalloc.c is nowadays only used on MS-DOS.) | 1695 | (Obsolete, since gmalloc.c is nowadays only used on MS-DOS.) |
| 1620 | 1696 | ||
| 1621 | ** Rewrite make-docfile to be clean and maintainable. | 1697 | ** Rewrite make-docfile to be clean and maintainable |
| 1622 | It might be better to replace it with Lisp, using the byte compiler. | 1698 | It might be better to replace it with Lisp, using the byte compiler. |
| 1623 | https://lists.gnu.org/r/emacs-devel/2012-06/msg00037.html | 1699 | https://lists.gnu.org/r/emacs-devel/2012-06/msg00037.html |
| 1624 | 1700 | ||
| 1625 | ** Add an inferior-comint-minor-mode to capture the common set of operations | 1701 | ** Add an inferior-comint-minor-mode |
| 1626 | offered by major modes that offer an associated inferior | 1702 | The purpose is to have a mode to capture the common set of operations |
| 1627 | comint-derived mode. I.e. basically make cmuscheme.el/inf-lisp.el generic. | 1703 | offered by major modes that offer an associated inferior |
| 1628 | For use by sml-mode, python-mode, tex-mode, scheme-mode, lisp-mode, | 1704 | comint-derived mode. I.e. basically make cmuscheme.el/inf-lisp.el |
| 1629 | haskell-mode, tuareg-mode, ... | 1705 | generic. For use by sml-mode, python-mode, tex-mode, scheme-mode, |
| 1706 | lisp-mode, haskell-mode, tuareg-mode, ... | ||
| 1630 | 1707 | ||
| 1631 | ** Add "link" button class | 1708 | ** Add "link" button class |
| 1632 | Add a standard button-class named "link", and make all other link-like | 1709 | Add a standard button-class named "link", and make all other link-like |
| 1633 | button classes inherit from it. Set the default face of the "link" button | 1710 | button classes inherit from it. Set the default face of the "link" |
| 1634 | class to the standard "link" face. | 1711 | button class to the standard "link" face. |
| 1635 | 1712 | ||
| 1636 | * Wishlist items: | 1713 | * Wishlist items |
| 1637 | 1714 | ||
| 1638 | ** Maybe replace etags.c with a Lisp implementation. | 1715 | ** Maybe replace etags.c with a Lisp implementation. |
| 1639 | https://lists.gnu.org/r/emacs-devel/2012-06/msg00354.html | 1716 | https://lists.gnu.org/r/emacs-devel/2012-06/msg00354.html |
| 1640 | 1717 | ||
| 1641 | ** Maybe replace lib-src/rcs2log with a Lisp implementation. | 1718 | ** Maybe replace lib-src/rcs2log with a Lisp implementation |
| 1642 | It wouldn't have to be a complete replacement, just enough | 1719 | It wouldn't have to be a complete replacement, just enough |
| 1643 | for vc-rcs-update-changelog. | 1720 | for vc-rcs-update-changelog. |
| 1644 | 1721 | ||
| 1645 | * Other known bugs: | 1722 | * Other known bugs |
| 1646 | 1723 | ||
| 1647 | ** 'make-frame' forgets unhandled parameters, at least for X11 frames. | 1724 | ** 'make-frame' forgets unhandled parameters, at least for X11 frames |
| 1648 | 1725 | ||
| 1649 | ** a two-char comment-starter whose two chars are symbol constituents will | 1726 | ** Problem with comment-start |
| 1727 | A two-char comment-starter whose two chars are symbol constituents will | ||
| 1650 | not be noticed if it appears within a word. | 1728 | not be noticed if it appears within a word. |
| 1651 | 1729 | ||
| 1652 | 1730 | ||
diff --git a/lisp/button.el b/lisp/button.el index f969a03cb02..3a6a6de774c 100644 --- a/lisp/button.el +++ b/lisp/button.el | |||
| @@ -349,7 +349,7 @@ Also see `insert-text-button'." | |||
| 349 | (or (plist-member properties 'type) | 349 | (or (plist-member properties 'type) |
| 350 | (plist-member properties :type)))) | 350 | (plist-member properties :type)))) |
| 351 | (when (stringp beg) | 351 | (when (stringp beg) |
| 352 | (setq object (copy-sequence beg) beg 0 end (length object))) | 352 | (setq object beg beg 0 end (length object))) |
| 353 | ;; Disallow setting the `category' property directly. | 353 | ;; Disallow setting the `category' property directly. |
| 354 | (when (plist-get properties 'category) | 354 | (when (plist-get properties 'category) |
| 355 | (error "Button `category' property may not be set directly")) | 355 | (error "Button `category' property may not be set directly")) |
diff --git a/lisp/dnd.el b/lisp/dnd.el index f47f4a2c30e..1d0e26cb013 100644 --- a/lisp/dnd.el +++ b/lisp/dnd.el | |||
| @@ -101,9 +101,6 @@ is what has been dropped. Returns ACTION." | |||
| 101 | (throw 'done t))) | 101 | (throw 'done t))) |
| 102 | nil) | 102 | nil) |
| 103 | (catch 'done | 103 | (catch 'done |
| 104 | ;; Autoloaded but the byte-compiler still complains. | ||
| 105 | (declare-function browse-url-select-handler "browse-url" | ||
| 106 | (url &optional kind)) | ||
| 107 | (let ((browser (browse-url-select-handler url 'internal))) | 104 | (let ((browser (browse-url-select-handler url 'internal))) |
| 108 | (when browser | 105 | (when browser |
| 109 | (setq ret 'private) | 106 | (setq ret 'private) |
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index f33c30e5742..9e39b8f78ac 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el | |||
| @@ -2820,14 +2820,15 @@ If FORM is a lambda or a macro, byte-compile it as a function." | |||
| 2820 | ;; Expand macros. | 2820 | ;; Expand macros. |
| 2821 | (setq fun (byte-compile-preprocess fun)) | 2821 | (setq fun (byte-compile-preprocess fun)) |
| 2822 | (setq fun (byte-compile-top-level fun nil 'eval)) | 2822 | (setq fun (byte-compile-top-level fun nil 'eval)) |
| 2823 | (if macro (push 'macro fun)) | ||
| 2824 | (if (symbolp form) | 2823 | (if (symbolp form) |
| 2825 | ;; byte-compile-top-level returns an *expression* equivalent to the | 2824 | ;; byte-compile-top-level returns an *expression* equivalent to the |
| 2826 | ;; `fun' expression, so we need to evaluate it, tho normally | 2825 | ;; `fun' expression, so we need to evaluate it, tho normally |
| 2827 | ;; this is not needed because the expression is just a constant | 2826 | ;; this is not needed because the expression is just a constant |
| 2828 | ;; byte-code object, which is self-evaluating. | 2827 | ;; byte-code object, which is self-evaluating. |
| 2829 | (fset form (eval fun t)) | 2828 | (setq fun (eval fun t))) |
| 2830 | fun))))))) | 2829 | (if macro (push 'macro fun)) |
| 2830 | (if (symbolp form) (fset form fun)) | ||
| 2831 | fun)))))) | ||
| 2831 | 2832 | ||
| 2832 | (defun byte-compile-sexp (sexp) | 2833 | (defun byte-compile-sexp (sexp) |
| 2833 | "Compile and return SEXP." | 2834 | "Compile and return SEXP." |
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el index 42e7701af18..ff8f250a22e 100644 --- a/lisp/jsonrpc.el +++ b/lisp/jsonrpc.el | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | ;; Author: João Távora <joaotavora@gmail.com> | 5 | ;; Author: João Távora <joaotavora@gmail.com> |
| 6 | ;; Keywords: processes, languages, extensions | 6 | ;; Keywords: processes, languages, extensions |
| 7 | ;; Version: 1.0.11 | 7 | ;; Version: 1.0.12 |
| 8 | ;; Package-Requires: ((emacs "25.2")) | 8 | ;; Package-Requires: ((emacs "25.2")) |
| 9 | 9 | ||
| 10 | ;; This is a GNU ELPA :core package. Avoid functionality that is not | 10 | ;; This is a GNU ELPA :core package. Avoid functionality that is not |
| @@ -364,40 +364,44 @@ connection object, called when the process dies .") | |||
| 364 | (cl-defmethod initialize-instance ((conn jsonrpc-process-connection) slots) | 364 | (cl-defmethod initialize-instance ((conn jsonrpc-process-connection) slots) |
| 365 | (cl-call-next-method) | 365 | (cl-call-next-method) |
| 366 | (cl-destructuring-bind (&key ((:process proc)) name &allow-other-keys) slots | 366 | (cl-destructuring-bind (&key ((:process proc)) name &allow-other-keys) slots |
| 367 | ;; FIXME: notice the undocumented bad coupling in the buffer name. | 367 | ;; FIXME: notice the undocumented bad coupling in the stderr |
| 368 | ;; The client making the process _must_ use a buffer named exactly | 368 | ;; buffer name, it must be named exactly like this we expect when |
| 369 | ;; like this property when calling `make-process'. If there were | 369 | ;; calling `make-process'. If there were a `set-process-stderr' |
| 370 | ;; a `set-process-stderr' like there is `set-process-buffer' we | 370 | ;; like there is `set-process-buffer' we wouldn't need this and |
| 371 | ;; wouldn't need this and could use a pipe with a process filter | 371 | ;; could use a pipe with a process filter instead of |
| 372 | ;; instead of `after-change-functions'. Alternatively, we need a | 372 | ;; `after-change-functions'. Alternatively, we need a new initarg |
| 373 | ;; new initarg (but maybe not a slot). | 373 | ;; (but maybe not a slot). |
| 374 | (with-current-buffer (get-buffer-create (format "*%s stderr*" name)) | 374 | (let ((calling-buffer (current-buffer))) |
| 375 | (let ((inhibit-read-only t) | 375 | (with-current-buffer (get-buffer-create (format "*%s stderr*" name)) |
| 376 | (hidden-name (concat " " (buffer-name)))) | 376 | (let ((inhibit-read-only t) |
| 377 | (erase-buffer) | 377 | (hidden-name (concat " " (buffer-name)))) |
| 378 | (buffer-disable-undo) | 378 | (erase-buffer) |
| 379 | (add-hook | 379 | (buffer-disable-undo) |
| 380 | 'after-change-functions | 380 | (add-hook |
| 381 | (lambda (beg _end _pre-change-len) | 381 | 'after-change-functions |
| 382 | (cl-loop initially (goto-char beg) | 382 | (lambda (beg _end _pre-change-len) |
| 383 | do (forward-line) | 383 | (cl-loop initially (goto-char beg) |
| 384 | when (bolp) | 384 | do (forward-line) |
| 385 | for line = (buffer-substring | 385 | when (bolp) |
| 386 | (line-beginning-position 0) | 386 | for line = (buffer-substring |
| 387 | (line-end-position 0)) | 387 | (line-beginning-position 0) |
| 388 | do (with-current-buffer (jsonrpc-events-buffer conn) | 388 | (line-end-position 0)) |
| 389 | (goto-char (point-max)) | 389 | do (with-current-buffer (jsonrpc-events-buffer conn) |
| 390 | (let ((inhibit-read-only t)) | 390 | (goto-char (point-max)) |
| 391 | (insert (format "[stderr] %s\n" line)))) | 391 | (let ((inhibit-read-only t)) |
| 392 | until (eobp))) | 392 | (insert (format "[stderr] %s\n" line)))) |
| 393 | nil t) | 393 | until (eobp))) |
| 394 | ;; If we are correctly coupled to the client, it should pick up | 394 | nil t) |
| 395 | ;; the current buffer immediately. | 395 | ;; If we are correctly coupled to the client, the process |
| 396 | (setq proc (if (functionp proc) (funcall proc) proc)) | 396 | ;; now created should pick up the current stderr buffer, |
| 397 | (ignore-errors (kill-buffer hidden-name)) | 397 | ;; which we immediately rename |
| 398 | (rename-buffer hidden-name) | 398 | (setq proc (if (functionp proc) |
| 399 | (process-put proc 'jsonrpc-stderr (current-buffer)) | 399 | (with-current-buffer calling-buffer (funcall proc)) |
| 400 | (read-only-mode t))) | 400 | proc)) |
| 401 | (ignore-errors (kill-buffer hidden-name)) | ||
| 402 | (rename-buffer hidden-name) | ||
| 403 | (process-put proc 'jsonrpc-stderr (current-buffer)) | ||
| 404 | (read-only-mode t)))) | ||
| 401 | (setf (jsonrpc--process conn) proc) | 405 | (setf (jsonrpc--process conn) proc) |
| 402 | (set-process-buffer proc (get-buffer-create (format " *%s output*" name))) | 406 | (set-process-buffer proc (get-buffer-create (format " *%s output*" name))) |
| 403 | (set-process-filter proc #'jsonrpc--process-filter) | 407 | (set-process-filter proc #'jsonrpc--process-filter) |
diff --git a/lisp/language/hebrew.el b/lisp/language/hebrew.el index 573541aec16..08b70abfc29 100644 --- a/lisp/language/hebrew.el +++ b/lisp/language/hebrew.el | |||
| @@ -240,7 +240,7 @@ Bidirectional editing is supported."))) | |||
| 240 | 240 | ||
| 241 | (let* ((base "[\u05D0-\u05F2\uFB1D\uFB1F-\uFB28\uFB2A-\uFB4F]") | 241 | (let* ((base "[\u05D0-\u05F2\uFB1D\uFB1F-\uFB28\uFB2A-\uFB4F]") |
| 242 | (combining | 242 | (combining |
| 243 | "[\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\uFB1E]+") | 243 | "[\u034F\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\uFB1E]+") |
| 244 | (pattern1 (concat base combining)) | 244 | (pattern1 (concat base combining)) |
| 245 | (pattern2 (concat base "\u200D" combining))) | 245 | (pattern2 (concat base "\u200D" combining))) |
| 246 | (set-char-table-range | 246 | (set-char-table-range |
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el index e25e63b4c5c..e3a24c41536 100644 --- a/lisp/language/misc-lang.el +++ b/lisp/language/misc-lang.el | |||
| @@ -136,10 +136,10 @@ thin (i.e. 1-dot width) space." | |||
| 136 | (set-char-table-range | 136 | (set-char-table-range |
| 137 | composition-function-table | 137 | composition-function-table |
| 138 | '(#x600 . #x74F) | 138 | '(#x600 . #x74F) |
| 139 | (list (vector "[\u0600-\u074F\u200C\u200D]+" 0 | 139 | (list (vector "[\u200C\u200D][\u0600-\u074F\u200C\u200D]+" |
| 140 | 'arabic-shape-gstring) | 140 | 1 'arabic-shape-gstring) |
| 141 | (vector "[\u200C\u200D][\u0600-\u074F\u200C\u200D]+" 1 | 141 | (vector "[\u0600-\u074F\u200C\u200D]+" |
| 142 | 'arabic-shape-gstring))) | 142 | 0 'arabic-shape-gstring))) |
| 143 | 143 | ||
| 144 | (provide 'misc-lang) | 144 | (provide 'misc-lang) |
| 145 | 145 | ||
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index d49c7523848..d7da5f6c249 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el | |||
| @@ -2452,16 +2452,34 @@ Function to display the current buffer in a WWW browser. | |||
| 2452 | This is used by the `browse-url-at-point', `browse-url-at-mouse', and | 2452 | This is used by the `browse-url-at-point', `browse-url-at-mouse', and |
| 2453 | `browse-url-of-file' commands. | 2453 | `browse-url-of-file' commands. |
| 2454 | 2454 | ||
| 2455 | If the value is not a function it should be a list of pairs | 2455 | Also see `browse-url-secondary-browser-function' and |
| 2456 | \(REGEXP . FUNCTION). In this case the function called will be the one | 2456 | `browse-url-handlers'.") |
| 2457 | associated with the first REGEXP which matches the current URL. The | ||
| 2458 | function is passed the URL and any other args of `browse-url'. The last | ||
| 2459 | regexp should probably be \".\" to specify a default browser. | ||
| 2460 | |||
| 2461 | Also see `browse-url-secondary-browser-function'.") | ||
| 2462 | 2457 | ||
| 2463 | (custom-autoload 'browse-url-browser-function "browse-url" t) | 2458 | (custom-autoload 'browse-url-browser-function "browse-url" t) |
| 2464 | 2459 | ||
| 2460 | (defvar browse-url-default-handlers '(("\\`mailto:" . browse-url--mailto) ("\\`man:" . browse-url--man) (browse-url--non-html-file-url-p . browse-url-emacs)) "\ | ||
| 2461 | Like `browse-url-handlers' but populated by Emacs and packages. | ||
| 2462 | |||
| 2463 | Emacs and external packages capable of browsing certain URLs | ||
| 2464 | should place their entries in this alist rather than | ||
| 2465 | `browse-url-handlers' which is reserved for the user.") | ||
| 2466 | |||
| 2467 | (autoload 'browse-url-select-handler "browse-url" "\ | ||
| 2468 | Return a handler of suitable for browsing URL. | ||
| 2469 | This searches `browse-url-handlers', and | ||
| 2470 | `browse-url-default-handlers' for a matching handler. Return nil | ||
| 2471 | if no handler is found. | ||
| 2472 | |||
| 2473 | If KIND is given, the search is restricted to handlers whose | ||
| 2474 | function symbol has the symbol-property `browse-url-browser-kind' | ||
| 2475 | set to KIND. | ||
| 2476 | |||
| 2477 | Currently, it also consults `browse-url-browser-function' first | ||
| 2478 | if it is set to an alist, although this usage is deprecated since | ||
| 2479 | Emacs 28.1 and will be removed in a future release. | ||
| 2480 | |||
| 2481 | \(fn URL &optional KIND)" nil nil) | ||
| 2482 | |||
| 2465 | (autoload 'browse-url-of-file "browse-url" "\ | 2483 | (autoload 'browse-url-of-file "browse-url" "\ |
| 2466 | Ask a WWW browser to display FILE. | 2484 | Ask a WWW browser to display FILE. |
| 2467 | Display the current buffer's file if FILE is nil or if called | 2485 | Display the current buffer's file if FILE is nil or if called |
| @@ -2491,16 +2509,18 @@ Ask a WWW browser to display the current region. | |||
| 2491 | Ask a WWW browser to load URL. | 2509 | Ask a WWW browser to load URL. |
| 2492 | Prompt for a URL, defaulting to the URL at or before point. | 2510 | Prompt for a URL, defaulting to the URL at or before point. |
| 2493 | Invokes a suitable browser function which does the actual job. | 2511 | Invokes a suitable browser function which does the actual job. |
| 2494 | The variable `browse-url-browser-function' says which browser function to | ||
| 2495 | use. If the URL is a mailto: URL, consult `browse-url-mailto-function' | ||
| 2496 | first, if that exists. | ||
| 2497 | 2512 | ||
| 2498 | The additional ARGS are passed to the browser function. See the doc | 2513 | The variables `browse-url-browser-function', |
| 2499 | strings of the actual functions, starting with `browse-url-browser-function', | 2514 | `browse-url-handlers', and `browse-url-default-handlers' |
| 2500 | for information about the significance of ARGS (most of the functions | 2515 | determine which browser function to use. |
| 2501 | ignore it). | 2516 | |
| 2502 | If ARGS are omitted, the default is to pass `browse-url-new-window-flag' | 2517 | The additional ARGS are passed to the browser function. See the |
| 2503 | as ARGS. | 2518 | doc strings of the actual functions, starting with |
| 2519 | `browse-url-browser-function', for information about the | ||
| 2520 | significance of ARGS (most of the functions ignore it). | ||
| 2521 | |||
| 2522 | If ARGS are omitted, the default is to pass | ||
| 2523 | `browse-url-new-window-flag' as ARGS. | ||
| 2504 | 2524 | ||
| 2505 | \(fn URL &rest ARGS)" t nil) | 2525 | \(fn URL &rest ARGS)" t nil) |
| 2506 | 2526 | ||
| @@ -2512,6 +2532,15 @@ Optional prefix argument ARG non-nil inverts the value of the option | |||
| 2512 | 2532 | ||
| 2513 | \(fn &optional ARG)" t nil) | 2533 | \(fn &optional ARG)" t nil) |
| 2514 | 2534 | ||
| 2535 | (autoload 'browse-url-with-browser-kind "browse-url" "\ | ||
| 2536 | Browse URL with a browser of the given browser KIND. | ||
| 2537 | KIND is either `internal' or `external'. | ||
| 2538 | |||
| 2539 | When called interactively, the default browser kind is the | ||
| 2540 | opposite of the browser kind of `browse-url-browser-function'. | ||
| 2541 | |||
| 2542 | \(fn KIND URL &optional ARG)" t nil) | ||
| 2543 | |||
| 2515 | (autoload 'browse-url-at-mouse "browse-url" "\ | 2544 | (autoload 'browse-url-at-mouse "browse-url" "\ |
| 2516 | Ask a WWW browser to load a URL clicked with the mouse. | 2545 | Ask a WWW browser to load a URL clicked with the mouse. |
| 2517 | The URL is the one around or before the position of the mouse click | 2546 | The URL is the one around or before the position of the mouse click |
| @@ -2699,6 +2728,8 @@ NEW-WINDOW instead of `browse-url-new-window-flag'. | |||
| 2699 | 2728 | ||
| 2700 | \(fn URL &optional NEW-WINDOW)" t nil) | 2729 | \(fn URL &optional NEW-WINDOW)" t nil) |
| 2701 | 2730 | ||
| 2731 | (make-obsolete 'browse-url-conkeror 'nil '"28.1") | ||
| 2732 | |||
| 2702 | (autoload 'browse-url-w3 "browse-url" "\ | 2733 | (autoload 'browse-url-w3 "browse-url" "\ |
| 2703 | Ask the w3 WWW browser to load URL. | 2734 | Ask the w3 WWW browser to load URL. |
| 2704 | Default to the URL around or before point. | 2735 | Default to the URL around or before point. |
| @@ -3674,7 +3705,7 @@ Return the syntactic context of the current line." nil nil) | |||
| 3674 | ;;;### (autoloads nil "cc-fonts" "progmodes/cc-fonts.el" (0 0 0 0)) | 3705 | ;;;### (autoloads nil "cc-fonts" "progmodes/cc-fonts.el" (0 0 0 0)) |
| 3675 | ;;; Generated autoloads from progmodes/cc-fonts.el | 3706 | ;;; Generated autoloads from progmodes/cc-fonts.el |
| 3676 | 3707 | ||
| 3677 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-fonts" '("autodoc-" "c++-font-lock-keywords" "c-" "gtkdoc-font-lock-" "idl-font-lock-keywords" "java" "objc-font-lock-keywords" "pike-font-lock-keywords"))) | 3708 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-fonts" '("autodoc-" "c++-font-lock-keywords" "c-" "doxygen-font-lock-" "gtkdoc-font-lock-" "idl-font-lock-keywords" "java" "objc-font-lock-keywords" "pike-font-lock-keywords"))) |
| 3678 | 3709 | ||
| 3679 | ;;;*** | 3710 | ;;;*** |
| 3680 | 3711 | ||
| @@ -3843,7 +3874,7 @@ should be used. | |||
| 3843 | 3874 | ||
| 3844 | This function attempts to use file contents to determine whether | 3875 | This function attempts to use file contents to determine whether |
| 3845 | the code is C or C++ and based on that chooses whether to enable | 3876 | the code is C or C++ and based on that chooses whether to enable |
| 3846 | `c-mode' or `c++-mode'." nil nil) | 3877 | `c-mode' or `c++-mode'." t nil) |
| 3847 | 3878 | ||
| 3848 | (autoload 'c++-mode "cc-mode" "\ | 3879 | (autoload 'c++-mode "cc-mode" "\ |
| 3849 | Major mode for editing C++ code. | 3880 | Major mode for editing C++ code. |
| @@ -6635,7 +6666,7 @@ Create a new data-debug buffer with NAME. | |||
| 6635 | 6666 | ||
| 6636 | \(fn NAME)" nil nil) | 6667 | \(fn NAME)" nil nil) |
| 6637 | 6668 | ||
| 6638 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "data-debug" '("data-debug-" "dd-propertize"))) | 6669 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "data-debug" '("data-debug-"))) |
| 6639 | 6670 | ||
| 6640 | ;;;*** | 6671 | ;;;*** |
| 6641 | 6672 | ||
| @@ -7258,13 +7289,16 @@ deletes all frames except the selected one (and its minibuffer frame, | |||
| 7258 | if different)." t nil) | 7289 | if different)." t nil) |
| 7259 | 7290 | ||
| 7260 | (autoload 'desktop-save "desktop" "\ | 7291 | (autoload 'desktop-save "desktop" "\ |
| 7261 | Save the desktop in a desktop file. | 7292 | Save the state of Emacs in a desktop file in directory DIRNAME. |
| 7262 | Parameter DIRNAME specifies where to save the desktop file. | 7293 | Optional argument RELEASE non-nil says we're done with this |
| 7263 | Optional parameter RELEASE says whether we're done with this | 7294 | desktop, in which case this function releases the lock of the |
| 7264 | desktop. If ONLY-IF-CHANGED is non-nil, compare the current | 7295 | desktop file in DIRNAME. |
| 7265 | desktop information to that in the desktop file, and if the | 7296 | If ONLY-IF-CHANGED is non-nil, compare the current desktop |
| 7266 | desktop information has not changed since it was last saved then | 7297 | information to that in the desktop file, and if the desktop |
| 7267 | do not rewrite the file. | 7298 | information has not changed since it was last saved, then do |
| 7299 | not rewrite the file. | ||
| 7300 | |||
| 7301 | To restore the desktop, use `desktop-read'. | ||
| 7268 | 7302 | ||
| 7269 | This function can save the desktop in either format version | 7303 | This function can save the desktop in either format version |
| 7270 | 208 (which only Emacs 25.1 and later can read) or version | 7304 | 208 (which only Emacs 25.1 and later can read) or version |
| @@ -7274,14 +7308,20 @@ it was last saved, or version 208 when writing a fresh desktop | |||
| 7274 | file. | 7308 | file. |
| 7275 | 7309 | ||
| 7276 | To upgrade a version 206 file to version 208, call this command | 7310 | To upgrade a version 206 file to version 208, call this command |
| 7277 | explicitly with a bare prefix argument: C-u M-x desktop-save. | 7311 | explicitly with a prefix argument: \\[universal-argument] \\[desktop-save]. |
| 7278 | You are recommended to do this once you have firmly upgraded to | 7312 | If you are upgrading from Emacs 24 or older, we recommed to do |
| 7279 | Emacs 25.1 (or later). To downgrade a version 208 file to version | 7313 | this once you decide you no longer need compatibility with versions |
| 7280 | 206, use a double command prefix: C-u C-u M-x desktop-save. | 7314 | of Emacs before 25.1. |
| 7281 | Confirmation will be requested in either case. In a non-interactive | 7315 | |
| 7282 | call, VERSION can be given as an integer, either 206 or 208, which | 7316 | To downgrade a version 208 file to version 206, use a double prefix |
| 7283 | will be accepted as the format version in which to save the file | 7317 | argument: \\[universal-argument] \\[universal-argument] \\[desktop-save]. |
| 7284 | without further confirmation. | 7318 | |
| 7319 | Emacs will ask for confirmation when you upgrade or downgrade your | ||
| 7320 | desktop file. | ||
| 7321 | |||
| 7322 | In a non-interactive call, VERSION can be given as an integer, either | ||
| 7323 | 206 or 208, to specify the format version in which to save the file, | ||
| 7324 | no questions asked. | ||
| 7285 | 7325 | ||
| 7286 | \(fn DIRNAME &optional RELEASE ONLY-IF-CHANGED VERSION)" t nil) | 7326 | \(fn DIRNAME &optional RELEASE ONLY-IF-CHANGED VERSION)" t nil) |
| 7287 | 7327 | ||
| @@ -7866,6 +7906,7 @@ it if ARG is `toggle'; disable the mode otherwise. | |||
| 7866 | To change the position of the column displayed by default | 7906 | To change the position of the column displayed by default |
| 7867 | customize `display-fill-column-indicator-column'. You can change the | 7907 | customize `display-fill-column-indicator-column'. You can change the |
| 7868 | character for the indicator setting `display-fill-column-indicator-character'. | 7908 | character for the indicator setting `display-fill-column-indicator-character'. |
| 7909 | See Info node `Displaying Boundaries' for details. | ||
| 7869 | 7910 | ||
| 7870 | \(fn &optional ARG)" t nil) | 7911 | \(fn &optional ARG)" t nil) |
| 7871 | 7912 | ||
| @@ -9906,6 +9947,12 @@ It creates an autoload function for CNAME's constructor. | |||
| 9906 | 9947 | ||
| 9907 | ;;;*** | 9948 | ;;;*** |
| 9908 | 9949 | ||
| 9950 | ;;;### (autoloads nil "eldoc" "emacs-lisp/eldoc.el" (0 0 0 0)) | ||
| 9951 | ;;; Generated autoloads from emacs-lisp/eldoc.el | ||
| 9952 | (push (purecopy '(eldoc 1 0 0)) package--builtin-versions) | ||
| 9953 | |||
| 9954 | ;;;*** | ||
| 9955 | |||
| 9909 | ;;;### (autoloads nil "elec-pair" "elec-pair.el" (0 0 0 0)) | 9956 | ;;;### (autoloads nil "elec-pair" "elec-pair.el" (0 0 0 0)) |
| 9910 | ;;; Generated autoloads from elec-pair.el | 9957 | ;;; Generated autoloads from elec-pair.el |
| 9911 | 9958 | ||
| @@ -12470,9 +12517,14 @@ operating on the next file and nil otherwise. | |||
| 12470 | (autoload 'fileloop-initialize-replace "fileloop" "\ | 12517 | (autoload 'fileloop-initialize-replace "fileloop" "\ |
| 12471 | Initialize a new round of query&replace on several files. | 12518 | Initialize a new round of query&replace on several files. |
| 12472 | FROM is a regexp and TO is the replacement to use. | 12519 | FROM is a regexp and TO is the replacement to use. |
| 12473 | FILES describes the file, as in `fileloop-initialize'. | 12520 | FILES describes the files, as in `fileloop-initialize'. |
| 12474 | CASE-FOLD can be t, nil, or `default', the latter one meaning to obey | 12521 | CASE-FOLD can be t, nil, or `default': |
| 12475 | the default setting of `case-fold-search'. | 12522 | if it is nil, matching of FROM is case-sensitive. |
| 12523 | if it is t, matching of FROM is case-insensitive, except | ||
| 12524 | when `search-upper-case' is non-nil and FROM includes | ||
| 12525 | upper-case letters. | ||
| 12526 | if it is `default', the function uses the value of | ||
| 12527 | `case-fold-search' instead. | ||
| 12476 | DELIMITED if non-nil means replace only word-delimited matches. | 12528 | DELIMITED if non-nil means replace only word-delimited matches. |
| 12477 | 12529 | ||
| 12478 | \(fn FROM TO FILES CASE-FOLD &optional DELIMITED)" nil nil) | 12530 | \(fn FROM TO FILES CASE-FOLD &optional DELIMITED)" nil nil) |
| @@ -13058,9 +13110,10 @@ generated it. | |||
| 13058 | 13110 | ||
| 13059 | (autoload 'flymake-make-diagnostic "flymake" "\ | 13111 | (autoload 'flymake-make-diagnostic "flymake" "\ |
| 13060 | Make a Flymake diagnostic for BUFFER's region from BEG to END. | 13112 | Make a Flymake diagnostic for BUFFER's region from BEG to END. |
| 13061 | TYPE is a key to symbol and TEXT is a description of the problem | 13113 | TYPE is a diagnostic symbol and TEXT is string describing the |
| 13062 | detected in this region. DATA is any object that the caller | 13114 | problem detected in this region. DATA is any object that the |
| 13063 | wishes to attach to the created diagnostic for later retrieval. | 13115 | caller wishes to attach to the created diagnostic for later |
| 13116 | retrieval. | ||
| 13064 | 13117 | ||
| 13065 | OVERLAY-PROPERTIES is an alist of properties attached to the | 13118 | OVERLAY-PROPERTIES is an alist of properties attached to the |
| 13066 | created diagnostic, overriding the default properties and any | 13119 | created diagnostic, overriding the default properties and any |
| @@ -13576,7 +13629,7 @@ and choose the directory as the fortune-file. | |||
| 13576 | Minimum set of parameters to filter for live (on-session) framesets. | 13629 | Minimum set of parameters to filter for live (on-session) framesets. |
| 13577 | DO NOT MODIFY. See `frameset-filter-alist' for a full description.") | 13630 | DO NOT MODIFY. See `frameset-filter-alist' for a full description.") |
| 13578 | 13631 | ||
| 13579 | (defvar frameset-persistent-filter-alist (nconc '((background-color . frameset-filter-sanitize-color) (buffer-list . :never) (buffer-predicate . :never) (buried-buffer-list . :never) (client . :never) (delete-before . :never) (font . frameset-filter-font-param) (font-backend . :never) (foreground-color . frameset-filter-sanitize-color) (frameset--text-pixel-height . :save) (frameset--text-pixel-width . :save) (fullscreen . frameset-filter-shelve-param) (GUI:font . frameset-filter-unshelve-param) (GUI:fullscreen . frameset-filter-unshelve-param) (GUI:height . frameset-filter-unshelve-param) (GUI:width . frameset-filter-unshelve-param) (height . frameset-filter-shelve-param) (outer-window-id . :never) (parent-frame . :never) (parent-id . :never) (mouse-wheel-frame . :never) (tty . frameset-filter-tty-to-GUI) (tty-type . frameset-filter-tty-to-GUI) (width . frameset-filter-shelve-param) (window-id . :never) (window-system . :never)) frameset-session-filter-alist) "\ | 13632 | (defvar frameset-persistent-filter-alist (append '((background-color . frameset-filter-sanitize-color) (buffer-list . :never) (buffer-predicate . :never) (buried-buffer-list . :never) (client . :never) (delete-before . :never) (font . frameset-filter-font-param) (font-backend . :never) (foreground-color . frameset-filter-sanitize-color) (frameset--text-pixel-height . :save) (frameset--text-pixel-width . :save) (fullscreen . frameset-filter-shelve-param) (GUI:font . frameset-filter-unshelve-param) (GUI:fullscreen . frameset-filter-unshelve-param) (GUI:height . frameset-filter-unshelve-param) (GUI:width . frameset-filter-unshelve-param) (height . frameset-filter-shelve-param) (outer-window-id . :never) (parent-frame . :never) (parent-id . :never) (mouse-wheel-frame . :never) (tty . frameset-filter-tty-to-GUI) (tty-type . frameset-filter-tty-to-GUI) (width . frameset-filter-shelve-param) (window-id . :never) (window-system . :never)) frameset-session-filter-alist) "\ |
| 13580 | Parameters to filter for persistent framesets. | 13633 | Parameters to filter for persistent framesets. |
| 13581 | DO NOT MODIFY. See `frameset-filter-alist' for a full description.") | 13634 | DO NOT MODIFY. See `frameset-filter-alist' for a full description.") |
| 13582 | 13635 | ||
| @@ -15827,10 +15880,10 @@ Commands: | |||
| 15827 | \(fn)" t nil) | 15880 | \(fn)" t nil) |
| 15828 | 15881 | ||
| 15829 | (autoload 'help-mode-setup "help-mode" "\ | 15882 | (autoload 'help-mode-setup "help-mode" "\ |
| 15830 | Enter Help Mode in the current buffer." nil nil) | 15883 | Enter Help mode in the current buffer." nil nil) |
| 15831 | 15884 | ||
| 15832 | (autoload 'help-mode-finish "help-mode" "\ | 15885 | (autoload 'help-mode-finish "help-mode" "\ |
| 15833 | Finalize Help Mode setup in current buffer." nil nil) | 15886 | Finalize Help mode setup in current buffer." nil nil) |
| 15834 | 15887 | ||
| 15835 | (autoload 'help-setup-xref "help-mode" "\ | 15888 | (autoload 'help-setup-xref "help-mode" "\ |
| 15836 | Invoked from commands using the \"*Help*\" buffer to install some xref info. | 15889 | Invoked from commands using the \"*Help*\" buffer to install some xref info. |
| @@ -16053,7 +16106,10 @@ or add (global-hi-lock-mode 1) to your init file. | |||
| 16053 | In buffers where Font Lock mode is enabled, patterns are | 16106 | In buffers where Font Lock mode is enabled, patterns are |
| 16054 | highlighted using font lock. In buffers where Font Lock mode is | 16107 | highlighted using font lock. In buffers where Font Lock mode is |
| 16055 | disabled, patterns are applied using overlays; in this case, the | 16108 | disabled, patterns are applied using overlays; in this case, the |
| 16056 | highlighting will not be updated as you type. | 16109 | highlighting will not be updated as you type. The Font Lock mode |
| 16110 | is considered \"enabled\" in a buffer if its `major-mode' | ||
| 16111 | causes `font-lock-specified-p' to return non-nil, which means | ||
| 16112 | the major mode specifies support for Font Lock. | ||
| 16057 | 16113 | ||
| 16058 | When Hi Lock mode is enabled, a \"Regexp Highlighting\" submenu | 16114 | When Hi Lock mode is enabled, a \"Regexp Highlighting\" submenu |
| 16059 | is added to the \"Edit\" menu. The commands in the submenu, | 16115 | is added to the \"Edit\" menu. The commands in the submenu, |
| @@ -16166,7 +16222,10 @@ and `search-upper-case' is non-nil, the matching is case-sensitive. | |||
| 16166 | 16222 | ||
| 16167 | Use Font lock mode, if enabled, to highlight REGEXP. Otherwise, | 16223 | Use Font lock mode, if enabled, to highlight REGEXP. Otherwise, |
| 16168 | use overlays for highlighting. If overlays are used, the | 16224 | use overlays for highlighting. If overlays are used, the |
| 16169 | highlighting will not update as you type. | 16225 | highlighting will not update as you type. The Font Lock mode |
| 16226 | is considered \"enabled\" in a buffer if its `major-mode' | ||
| 16227 | causes `font-lock-specified-p' to return non-nil, which means | ||
| 16228 | the major mode specifies support for Font Lock. | ||
| 16170 | 16229 | ||
| 16171 | \(fn REGEXP &optional FACE SUBEXP LIGHTER)" t nil) | 16230 | \(fn REGEXP &optional FACE SUBEXP LIGHTER)" t nil) |
| 16172 | 16231 | ||
| @@ -16183,7 +16242,10 @@ Also set `search-spaces-regexp' to the value of `search-whitespace-regexp'. | |||
| 16183 | 16242 | ||
| 16184 | Use Font lock mode, if enabled, to highlight REGEXP. Otherwise, | 16243 | Use Font lock mode, if enabled, to highlight REGEXP. Otherwise, |
| 16185 | use overlays for highlighting. If overlays are used, the | 16244 | use overlays for highlighting. If overlays are used, the |
| 16186 | highlighting will not update as you type. | 16245 | highlighting will not update as you type. The Font Lock mode |
| 16246 | is considered \"enabled\" in a buffer if its `major-mode' | ||
| 16247 | causes `font-lock-specified-p' to return non-nil, which means | ||
| 16248 | the major mode specifies support for Font Lock. | ||
| 16187 | 16249 | ||
| 16188 | \(fn REGEXP &optional FACE)" t nil) | 16250 | \(fn REGEXP &optional FACE)" t nil) |
| 16189 | 16251 | ||
| @@ -16199,7 +16261,10 @@ If REGEXP contains upper case characters (excluding those preceded by `\\') | |||
| 16199 | and `search-upper-case' is non-nil, the matching is case-sensitive. | 16261 | and `search-upper-case' is non-nil, the matching is case-sensitive. |
| 16200 | 16262 | ||
| 16201 | This uses Font lock mode if it is enabled; otherwise it uses overlays, | 16263 | This uses Font lock mode if it is enabled; otherwise it uses overlays, |
| 16202 | in which case the highlighting will not update as you type." t nil) | 16264 | in which case the highlighting will not update as you type. The Font |
| 16265 | Lock mode is considered \"enabled\" in a buffer if its `major-mode' | ||
| 16266 | causes `font-lock-specified-p' to return non-nil, which means | ||
| 16267 | the major mode specifies support for Font Lock." t nil) | ||
| 16203 | 16268 | ||
| 16204 | (defalias 'unhighlight-regexp 'hi-lock-unface-buffer) | 16269 | (defalias 'unhighlight-regexp 'hi-lock-unface-buffer) |
| 16205 | 16270 | ||
| @@ -18322,6 +18387,7 @@ Moving within a node: | |||
| 18322 | already visible, try to go to the previous menu entry, or up | 18387 | already visible, try to go to the previous menu entry, or up |
| 18323 | if there is none. | 18388 | if there is none. |
| 18324 | \\[beginning-of-buffer] Go to beginning of node. | 18389 | \\[beginning-of-buffer] Go to beginning of node. |
| 18390 | \\[end-of-buffer] Go to end of node. | ||
| 18325 | 18391 | ||
| 18326 | Advanced commands: | 18392 | Advanced commands: |
| 18327 | \\[Info-search] Search through this Info file for specified regexp, | 18393 | \\[Info-search] Search through this Info file for specified regexp, |
| @@ -19097,7 +19163,7 @@ one of the aforementioned options instead of using this mode. | |||
| 19097 | 19163 | ||
| 19098 | ;;;### (autoloads nil "json" "json.el" (0 0 0 0)) | 19164 | ;;;### (autoloads nil "json" "json.el" (0 0 0 0)) |
| 19099 | ;;; Generated autoloads from json.el | 19165 | ;;; Generated autoloads from json.el |
| 19100 | (push (purecopy '(json 1 4)) package--builtin-versions) | 19166 | (push (purecopy '(json 1 5)) package--builtin-versions) |
| 19101 | 19167 | ||
| 19102 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "json" '("json-"))) | 19168 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "json" '("json-"))) |
| 19103 | 19169 | ||
| @@ -19105,7 +19171,7 @@ one of the aforementioned options instead of using this mode. | |||
| 19105 | 19171 | ||
| 19106 | ;;;### (autoloads nil "jsonrpc" "jsonrpc.el" (0 0 0 0)) | 19172 | ;;;### (autoloads nil "jsonrpc" "jsonrpc.el" (0 0 0 0)) |
| 19107 | ;;; Generated autoloads from jsonrpc.el | 19173 | ;;; Generated autoloads from jsonrpc.el |
| 19108 | (push (purecopy '(jsonrpc 1 0 9)) package--builtin-versions) | 19174 | (push (purecopy '(jsonrpc 1 0 11)) package--builtin-versions) |
| 19109 | 19175 | ||
| 19110 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "jsonrpc" '("jrpc-default-request-timeout" "jsonrpc-"))) | 19176 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "jsonrpc" '("jrpc-default-request-timeout" "jsonrpc-"))) |
| 19111 | 19177 | ||
| @@ -20701,49 +20767,6 @@ Major mode for editing MetaPost sources. | |||
| 20701 | 20767 | ||
| 20702 | ;;;*** | 20768 | ;;;*** |
| 20703 | 20769 | ||
| 20704 | ;;;### (autoloads nil "metamail" "mail/metamail.el" (0 0 0 0)) | ||
| 20705 | ;;; Generated autoloads from mail/metamail.el | ||
| 20706 | |||
| 20707 | (autoload 'metamail-interpret-header "metamail" "\ | ||
| 20708 | Interpret a header part of a MIME message in current buffer. | ||
| 20709 | Its body part is not interpreted at all." t nil) | ||
| 20710 | |||
| 20711 | (autoload 'metamail-interpret-body "metamail" "\ | ||
| 20712 | Interpret a body part of a MIME message in current buffer. | ||
| 20713 | Optional argument VIEWMODE specifies the value of the | ||
| 20714 | EMACS_VIEW_MODE environment variable (defaulted to 1). | ||
| 20715 | Optional argument NODISPLAY non-nil means buffer is not | ||
| 20716 | redisplayed as output is inserted. | ||
| 20717 | Its header part is not interpreted at all. | ||
| 20718 | |||
| 20719 | \(fn &optional VIEWMODE NODISPLAY)" t nil) | ||
| 20720 | |||
| 20721 | (autoload 'metamail-buffer "metamail" "\ | ||
| 20722 | Process current buffer through `metamail'. | ||
| 20723 | Optional argument VIEWMODE specifies the value of the | ||
| 20724 | EMACS_VIEW_MODE environment variable (defaulted to 1). | ||
| 20725 | Optional argument BUFFER specifies a buffer to be filled (nil | ||
| 20726 | means current). | ||
| 20727 | Optional argument NODISPLAY non-nil means buffer is not | ||
| 20728 | redisplayed as output is inserted. | ||
| 20729 | |||
| 20730 | \(fn &optional VIEWMODE BUFFER NODISPLAY)" t nil) | ||
| 20731 | |||
| 20732 | (autoload 'metamail-region "metamail" "\ | ||
| 20733 | Process current region through `metamail'. | ||
| 20734 | Optional argument VIEWMODE specifies the value of the | ||
| 20735 | EMACS_VIEW_MODE environment variable (defaulted to 1). | ||
| 20736 | Optional argument BUFFER specifies a buffer to be filled (nil | ||
| 20737 | means current). | ||
| 20738 | Optional argument NODISPLAY non-nil means buffer is not | ||
| 20739 | redisplayed as output is inserted. | ||
| 20740 | |||
| 20741 | \(fn BEG END &optional VIEWMODE BUFFER NODISPLAY)" t nil) | ||
| 20742 | |||
| 20743 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "metamail" '("metamail-"))) | ||
| 20744 | |||
| 20745 | ;;;*** | ||
| 20746 | |||
| 20747 | ;;;### (autoloads nil "mh-acros" "mh-e/mh-acros.el" (0 0 0 0)) | 20770 | ;;;### (autoloads nil "mh-acros" "mh-e/mh-acros.el" (0 0 0 0)) |
| 20748 | ;;; Generated autoloads from mh-e/mh-acros.el | 20771 | ;;; Generated autoloads from mh-e/mh-acros.el |
| 20749 | 20772 | ||
| @@ -26181,13 +26204,12 @@ Open profile FILENAME. | |||
| 26181 | 26204 | ||
| 26182 | ;;;### (autoloads nil "project" "progmodes/project.el" (0 0 0 0)) | 26205 | ;;;### (autoloads nil "project" "progmodes/project.el" (0 0 0 0)) |
| 26183 | ;;; Generated autoloads from progmodes/project.el | 26206 | ;;; Generated autoloads from progmodes/project.el |
| 26207 | (push (purecopy '(project 0 3 0)) package--builtin-versions) | ||
| 26184 | 26208 | ||
| 26185 | (autoload 'project-current "project" "\ | 26209 | (autoload 'project-current "project" "\ |
| 26186 | Return the project instance in DIR or `default-directory'. | 26210 | Return the project instance in DIR or `default-directory'. |
| 26187 | When no project found in DIR, and MAYBE-PROMPT is non-nil, ask | 26211 | When no project found in DIR, and MAYBE-PROMPT is non-nil, ask |
| 26188 | the user for a different directory to look in. If that directory | 26212 | the user for a different project to look in. |
| 26189 | is not a part of a detectable project either, return a | ||
| 26190 | `transient' project instance rooted in it. | ||
| 26191 | 26213 | ||
| 26192 | \(fn &optional MAYBE-PROMPT DIR)" nil nil) | 26214 | \(fn &optional MAYBE-PROMPT DIR)" nil nil) |
| 26193 | 26215 | ||
| @@ -26210,15 +26232,21 @@ pattern to search for. | |||
| 26210 | \(fn REGEXP)" t nil) | 26232 | \(fn REGEXP)" t nil) |
| 26211 | 26233 | ||
| 26212 | (autoload 'project-find-file "project" "\ | 26234 | (autoload 'project-find-file "project" "\ |
| 26213 | Visit a file (with completion) in the current project's roots. | 26235 | Visit a file (with completion) in the current project. |
| 26214 | The completion default is the filename at point, if one is | 26236 | The completion default is the filename at point, if one is |
| 26215 | recognized." t nil) | 26237 | recognized." t nil) |
| 26216 | 26238 | ||
| 26217 | (autoload 'project-or-external-find-file "project" "\ | 26239 | (autoload 'project-or-external-find-file "project" "\ |
| 26218 | Visit a file (with completion) in the current project's roots or external roots. | 26240 | Visit a file (with completion) in the current project or external roots. |
| 26219 | The completion default is the filename at point, if one is | 26241 | The completion default is the filename at point, if one is |
| 26220 | recognized." t nil) | 26242 | recognized." t nil) |
| 26221 | 26243 | ||
| 26244 | (autoload 'project-dired "project" "\ | ||
| 26245 | Open Dired in the current project." t nil) | ||
| 26246 | |||
| 26247 | (autoload 'project-eshell "project" "\ | ||
| 26248 | Open Eshell in the current project." t nil) | ||
| 26249 | |||
| 26222 | (autoload 'project-search "project" "\ | 26250 | (autoload 'project-search "project" "\ |
| 26223 | Search for REGEXP in all the files of the project. | 26251 | Search for REGEXP in all the files of the project. |
| 26224 | Stops when a match is found. | 26252 | Stops when a match is found. |
| @@ -26235,6 +26263,23 @@ loop using the command \\[fileloop-continue]. | |||
| 26235 | 26263 | ||
| 26236 | \(fn FROM TO)" t nil) | 26264 | \(fn FROM TO)" t nil) |
| 26237 | 26265 | ||
| 26266 | (autoload 'project-compile "project" "\ | ||
| 26267 | Run `compile' in the project root." t nil) | ||
| 26268 | |||
| 26269 | (defvar project-switch-commands '(("f" "Find file" project-find-file) ("s" "Find regexp" project-find-regexp) ("d" "Dired" project-dired) ("e" "Eshell" project-eshell)) "\ | ||
| 26270 | Alist mapping keys to project switching menu entries. | ||
| 26271 | Used by `project-switch-project' to construct a dispatch menu of | ||
| 26272 | commands available upon \"switching\" to another project. | ||
| 26273 | |||
| 26274 | Each element looks like (KEY LABEL COMMAND), where COMMAND is the | ||
| 26275 | command to run when KEY is pressed. LABEL is used to distinguish | ||
| 26276 | the choice in the dispatch menu.") | ||
| 26277 | |||
| 26278 | (autoload 'project-switch-project "project" "\ | ||
| 26279 | \"Switch\" to another project by running a chosen command. | ||
| 26280 | The available commands are picked from `project-switch-commands' | ||
| 26281 | and presented in a dispatch menu." t nil) | ||
| 26282 | |||
| 26238 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "project" '("project-"))) | 26283 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "project" '("project-"))) |
| 26239 | 26284 | ||
| 26240 | ;;;*** | 26285 | ;;;*** |
| @@ -26890,7 +26935,7 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'. | |||
| 26890 | ;;;;;; 0 0)) | 26935 | ;;;;;; 0 0)) |
| 26891 | ;;; Generated autoloads from leim/quail/indian.el | 26936 | ;;; Generated autoloads from leim/quail/indian.el |
| 26892 | 26937 | ||
| 26893 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/indian" '("inscript-" "quail-"))) | 26938 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/indian" '("indian-mlm-mozhi-u" "inscript-" "quail-"))) |
| 26894 | 26939 | ||
| 26895 | ;;;*** | 26940 | ;;;*** |
| 26896 | 26941 | ||
| @@ -30138,7 +30183,7 @@ have <h1>Very Major Headlines</h1> through <h6>Very Minor Headlines</h6> | |||
| 30138 | 30183 | ||
| 30139 | <p>Paragraphs only need an opening tag. Line breaks and multiple spaces are | 30184 | <p>Paragraphs only need an opening tag. Line breaks and multiple spaces are |
| 30140 | ignored unless the text is <pre>preformatted.</pre> Text can be marked as | 30185 | ignored unless the text is <pre>preformatted.</pre> Text can be marked as |
| 30141 | <b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-o or | 30186 | <strong>bold</strong>, <em>italic</em> or <u>underlined</u> using the normal M-o or |
| 30142 | Edit/Text Properties/Face commands. | 30187 | Edit/Text Properties/Face commands. |
| 30143 | 30188 | ||
| 30144 | Pages can have <a name=\"SOMENAME\">named points</a> and can link other points | 30189 | Pages can have <a name=\"SOMENAME\">named points</a> and can link other points |
| @@ -36425,6 +36470,13 @@ These are the commands available for use in the file status buffer: | |||
| 36425 | 36470 | ||
| 36426 | \(fn DIR &optional BACKEND)" t nil) | 36471 | \(fn DIR &optional BACKEND)" t nil) |
| 36427 | 36472 | ||
| 36473 | (autoload 'vc-dir-bookmark-jump "vc-dir" "\ | ||
| 36474 | Provides the bookmark-jump behavior for a `vc-dir' buffer. | ||
| 36475 | This implements the `handler' function interface for the record | ||
| 36476 | type returned by `vc-dir-bookmark-make-record'. | ||
| 36477 | |||
| 36478 | \(fn BMK)" nil nil) | ||
| 36479 | |||
| 36428 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-dir" '("vc-"))) | 36480 | (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-dir" '("vc-"))) |
| 36429 | 36481 | ||
| 36430 | ;;;*** | 36482 | ;;;*** |
| @@ -38695,6 +38747,7 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. | |||
| 38695 | 38747 | ||
| 38696 | ;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0)) | 38748 | ;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0)) |
| 38697 | ;;; Generated autoloads from progmodes/xref.el | 38749 | ;;; Generated autoloads from progmodes/xref.el |
| 38750 | (push (purecopy '(xref 1 0 1)) package--builtin-versions) | ||
| 38698 | 38751 | ||
| 38699 | (autoload 'xref-find-backend "xref" nil nil nil) | 38752 | (autoload 'xref-find-backend "xref" nil nil nil) |
| 38700 | 38753 | ||
| @@ -38920,29 +38973,29 @@ Zone out, completely." t nil) | |||
| 38920 | ;;;;;; "electric.el" "emacs-lisp/backquote.el" "emacs-lisp/byte-run.el" | 38973 | ;;;;;; "electric.el" "emacs-lisp/backquote.el" "emacs-lisp/byte-run.el" |
| 38921 | ;;;;;; "emacs-lisp/cl-extra.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-preloaded.el" | 38974 | ;;;;;; "emacs-lisp/cl-extra.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-preloaded.el" |
| 38922 | ;;;;;; "emacs-lisp/cl-seq.el" "emacs-lisp/eieio-compat.el" "emacs-lisp/eieio-custom.el" | 38975 | ;;;;;; "emacs-lisp/cl-seq.el" "emacs-lisp/eieio-compat.el" "emacs-lisp/eieio-custom.el" |
| 38923 | ;;;;;; "emacs-lisp/eieio-opt.el" "emacs-lisp/eldoc.el" "emacs-lisp/float-sup.el" | 38976 | ;;;;;; "emacs-lisp/eieio-opt.el" "emacs-lisp/float-sup.el" "emacs-lisp/lisp-mode.el" |
| 38924 | ;;;;;; "emacs-lisp/lisp-mode.el" "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" | 38977 | ;;;;;; "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" "emacs-lisp/map-ynp.el" |
| 38925 | ;;;;;; "emacs-lisp/map-ynp.el" "emacs-lisp/nadvice.el" "emacs-lisp/syntax.el" | 38978 | ;;;;;; "emacs-lisp/nadvice.el" "emacs-lisp/syntax.el" "emacs-lisp/timer.el" |
| 38926 | ;;;;;; "emacs-lisp/timer.el" "env.el" "epa-hook.el" "erc/erc-autoaway.el" | 38979 | ;;;;;; "env.el" "epa-hook.el" "erc/erc-autoaway.el" "erc/erc-button.el" |
| 38927 | ;;;;;; "erc/erc-button.el" "erc/erc-capab.el" "erc/erc-compat.el" | 38980 | ;;;;;; "erc/erc-capab.el" "erc/erc-compat.el" "erc/erc-dcc.el" "erc/erc-desktop-notifications.el" |
| 38928 | ;;;;;; "erc/erc-dcc.el" "erc/erc-desktop-notifications.el" "erc/erc-ezbounce.el" | 38981 | ;;;;;; "erc/erc-ezbounce.el" "erc/erc-fill.el" "erc/erc-identd.el" |
| 38929 | ;;;;;; "erc/erc-fill.el" "erc/erc-identd.el" "erc/erc-imenu.el" | 38982 | ;;;;;; "erc/erc-imenu.el" "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el" |
| 38930 | ;;;;;; "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el" "erc/erc-match.el" | 38983 | ;;;;;; "erc/erc-match.el" "erc/erc-menu.el" "erc/erc-netsplit.el" |
| 38931 | ;;;;;; "erc/erc-menu.el" "erc/erc-netsplit.el" "erc/erc-notify.el" | 38984 | ;;;;;; "erc/erc-notify.el" "erc/erc-page.el" "erc/erc-pcomplete.el" |
| 38932 | ;;;;;; "erc/erc-page.el" "erc/erc-pcomplete.el" "erc/erc-replace.el" | 38985 | ;;;;;; "erc/erc-replace.el" "erc/erc-ring.el" "erc/erc-services.el" |
| 38933 | ;;;;;; "erc/erc-ring.el" "erc/erc-services.el" "erc/erc-sound.el" | 38986 | ;;;;;; "erc/erc-sound.el" "erc/erc-speedbar.el" "erc/erc-spelling.el" |
| 38934 | ;;;;;; "erc/erc-speedbar.el" "erc/erc-spelling.el" "erc/erc-stamp.el" | 38987 | ;;;;;; "erc/erc-stamp.el" "erc/erc-track.el" "erc/erc-truncate.el" |
| 38935 | ;;;;;; "erc/erc-track.el" "erc/erc-truncate.el" "erc/erc-xdcc.el" | 38988 | ;;;;;; "erc/erc-xdcc.el" "eshell/em-alias.el" "eshell/em-banner.el" |
| 38936 | ;;;;;; "eshell/em-alias.el" "eshell/em-banner.el" "eshell/em-basic.el" | 38989 | ;;;;;; "eshell/em-basic.el" "eshell/em-cmpl.el" "eshell/em-dirs.el" |
| 38937 | ;;;;;; "eshell/em-cmpl.el" "eshell/em-dirs.el" "eshell/em-glob.el" | 38990 | ;;;;;; "eshell/em-glob.el" "eshell/em-hist.el" "eshell/em-ls.el" |
| 38938 | ;;;;;; "eshell/em-hist.el" "eshell/em-ls.el" "eshell/em-pred.el" | 38991 | ;;;;;; "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el" |
| 38939 | ;;;;;; "eshell/em-prompt.el" "eshell/em-rebind.el" "eshell/em-script.el" | 38992 | ;;;;;; "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el" |
| 38940 | ;;;;;; "eshell/em-smart.el" "eshell/em-term.el" "eshell/em-tramp.el" | 38993 | ;;;;;; "eshell/em-tramp.el" "eshell/em-unix.el" "eshell/em-xtra.el" |
| 38941 | ;;;;;; "eshell/em-unix.el" "eshell/em-xtra.el" "facemenu.el" "faces.el" | 38994 | ;;;;;; "facemenu.el" "faces.el" "files.el" "font-core.el" "font-lock.el" |
| 38942 | ;;;;;; "files.el" "font-core.el" "font-lock.el" "format.el" "frame.el" | 38995 | ;;;;;; "format.el" "frame.el" "help.el" "hfy-cmap.el" "ibuf-ext.el" |
| 38943 | ;;;;;; "help.el" "hfy-cmap.el" "ibuf-ext.el" "indent.el" "international/characters.el" | 38996 | ;;;;;; "indent.el" "international/characters.el" "international/charprop.el" |
| 38944 | ;;;;;; "international/charprop.el" "international/charscript.el" | 38997 | ;;;;;; "international/charscript.el" "international/cp51932.el" |
| 38945 | ;;;;;; "international/cp51932.el" "international/eucjp-ms.el" "international/mule-cmds.el" | 38998 | ;;;;;; "international/eucjp-ms.el" "international/mule-cmds.el" |
| 38946 | ;;;;;; "international/mule-conf.el" "international/mule.el" "international/uni-bidi.el" | 38999 | ;;;;;; "international/mule-conf.el" "international/mule.el" "international/uni-bidi.el" |
| 38947 | ;;;;;; "international/uni-brackets.el" "international/uni-category.el" | 39000 | ;;;;;; "international/uni-brackets.el" "international/uni-category.el" |
| 38948 | ;;;;;; "international/uni-combining.el" "international/uni-comment.el" | 39001 | ;;;;;; "international/uni-combining.el" "international/uni-comment.el" |
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el index c49bdc5c518..6172afecbcf 100644 --- a/lisp/progmodes/cc-align.el +++ b/lisp/progmodes/cc-align.el | |||
| @@ -791,32 +791,32 @@ arglist-cont-nonempty." | |||
| 791 | c-basic-offset)) | 791 | c-basic-offset)) |
| 792 | 792 | ||
| 793 | (defun c-lineup-ternary-bodies (langelem) | 793 | (defun c-lineup-ternary-bodies (langelem) |
| 794 | "Line up true and false branches of a ternary operator (i.e. ‘?:’). | 794 | "Line up true and false branches of a ternary operator (i.e. `?:'). |
| 795 | More precisely, if the line starts with a colon which is a part of | 795 | More precisely, if the line starts with a colon which is a part of |
| 796 | a said operator it with corresponding question mark; otherwise return | 796 | a said operator, align it with corresponding question mark; otherwise |
| 797 | nil. For example: | 797 | return nil. For example: |
| 798 | 798 | ||
| 799 | return arg % 2 == 0 ? arg / 2 | 799 | return arg % 2 == 0 ? arg / 2 |
| 800 | : (3 * arg + 1); <- c-lineup-ternary-bodies | 800 | : (3 * arg + 1); <- c-lineup-ternary-bodies |
| 801 | 801 | ||
| 802 | Works with: arglist-cont, arglist-cont-nonempty and statement-cont. | 802 | Works with: arglist-cont, arglist-cont-nonempty and statement-cont." |
| 803 | " | ||
| 804 | (save-excursion | 803 | (save-excursion |
| 805 | (back-to-indentation) | 804 | (back-to-indentation) |
| 806 | (when (and (eq ?: (char-after)) | 805 | (when (and (eq ?: (char-after)) |
| 807 | (not (eq ?: (char-after (1+ (point)))))) | 806 | (not (eq ?: (char-after (1+ (point)))))) |
| 808 | (let ((limit (c-langelem-pos langelem)) (depth 1)) | 807 | (let ((limit (c-langelem-pos langelem)) (depth 1)) |
| 809 | (catch 'done | 808 | (catch 'done |
| 810 | (while (c-syntactic-skip-backward "^?:" limit t) | 809 | (while (and (c-syntactic-skip-backward "^?:" limit t) |
| 811 | (goto-char (1- (point))) | 810 | (not (bobp))) |
| 811 | (backward-char) | ||
| 812 | (cond ((eq (char-after) ??) | 812 | (cond ((eq (char-after) ??) |
| 813 | ;; If we’ve found a question mark, decrease depth. If we’re | 813 | ;; If we've found a question mark, decrease depth. If we've |
| 814 | ;; reached zero, we’ve found the one we were looking for. | 814 | ;; reached zero, we've found the one we were looking for. |
| 815 | (when (zerop (setq depth (1- depth))) | 815 | (when (zerop (setq depth (1- depth))) |
| 816 | (throw 'done (vector (current-column))))) | 816 | (throw 'done (vector (current-column))))) |
| 817 | ((or (eq ?: (char-before)) (eq ?? (char-before))) | 817 | ((or (eq ?: (char-before)) (eq ?? (char-before))) |
| 818 | ;; Step over ‘::’ and ‘?:’ operators. We don’t have to | 818 | ;; Step over `::' and `?:' operators. We don't have to |
| 819 | ;; handle ‘?:’ here but doing so saves an iteration. | 819 | ;; handle `?:' here but doing so saves an iteration. |
| 820 | (if (eq (point) limit) | 820 | (if (eq (point) limit) |
| 821 | (throw 'done nil) | 821 | (throw 'done nil) |
| 822 | (goto-char (1- (point))))) | 822 | (goto-char (1- (point))))) |
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index b3b2374805d..4869f5c596d 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el | |||
| @@ -1621,7 +1621,7 @@ Note that the style variables are always made local to the buffer." | |||
| 1621 | (goto-char (1+ end)) ; After the \ | 1621 | (goto-char (1+ end)) ; After the \ |
| 1622 | ;; Search forward for EOLL | 1622 | ;; Search forward for EOLL |
| 1623 | (setq lim (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" | 1623 | (setq lim (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" |
| 1624 | nil t)) | 1624 | nil t)) |
| 1625 | (goto-char (1+ end)) | 1625 | (goto-char (1+ end)) |
| 1626 | (when (c-search-forward-char-property-with-value-on-char | 1626 | (when (c-search-forward-char-property-with-value-on-char |
| 1627 | 'syntax-table '(15) ?\" lim) | 1627 | 'syntax-table '(15) ?\" lim) |
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index d37eb8c152d..8812c49ba43 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el | |||
| @@ -861,11 +861,12 @@ non-nil result supercedes the xrefs produced by | |||
| 861 | 861 | ||
| 862 | xrefs)) | 862 | xrefs)) |
| 863 | 863 | ||
| 864 | (declare-function project-external-roots "project") | 864 | (declare-function xref-apropos-regexp "xref" (pattern)) |
| 865 | 865 | ||
| 866 | (cl-defmethod xref-backend-apropos ((_backend (eql elisp)) regexp) | 866 | (cl-defmethod xref-backend-apropos ((_backend (eql elisp)) pattern) |
| 867 | (apply #'nconc | 867 | (apply #'nconc |
| 868 | (let (lst) | 868 | (let ((regexp (xref-apropos-regexp pattern)) |
| 869 | lst) | ||
| 869 | (dolist (sym (apropos-internal regexp)) | 870 | (dolist (sym (apropos-internal regexp)) |
| 870 | (push (elisp--xref-find-definitions sym) lst)) | 871 | (push (elisp--xref-find-definitions sym) lst)) |
| 871 | (nreverse lst)))) | 872 | (nreverse lst)))) |
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index 897f105019e..edadbbdafc1 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el | |||
| @@ -2080,8 +2080,8 @@ file name, add `tag-partial-file-name-match-p' to the list value.") | |||
| 2080 | (cl-defmethod xref-backend-definitions ((_backend (eql etags)) symbol) | 2080 | (cl-defmethod xref-backend-definitions ((_backend (eql etags)) symbol) |
| 2081 | (etags--xref-find-definitions symbol)) | 2081 | (etags--xref-find-definitions symbol)) |
| 2082 | 2082 | ||
| 2083 | (cl-defmethod xref-backend-apropos ((_backend (eql etags)) symbol) | 2083 | (cl-defmethod xref-backend-apropos ((_backend (eql etags)) pattern) |
| 2084 | (etags--xref-find-definitions symbol t)) | 2084 | (etags--xref-find-definitions (xref-apropos-regexp pattern) t)) |
| 2085 | 2085 | ||
| 2086 | (defun etags--xref-find-definitions (pattern &optional regexp?) | 2086 | (defun etags--xref-find-definitions (pattern &optional regexp?) |
| 2087 | ;; This emulates the behavior of `find-tag-in-order' but instead of | 2087 | ;; This emulates the behavior of `find-tag-in-order' but instead of |
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 2d0b6c4a21b..c701b801599 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el | |||
| @@ -93,6 +93,11 @@ | |||
| 93 | (require 'cl-generic) | 93 | (require 'cl-generic) |
| 94 | (eval-when-compile (require 'subr-x)) | 94 | (eval-when-compile (require 'subr-x)) |
| 95 | 95 | ||
| 96 | (defgroup project nil | ||
| 97 | "Operations on the current project." | ||
| 98 | :version "28.1" | ||
| 99 | :group 'tools) | ||
| 100 | |||
| 96 | (defvar project-find-functions (list #'project-try-vc) | 101 | (defvar project-find-functions (list #'project-try-vc) |
| 97 | "Special hook to find the project containing a given directory. | 102 | "Special hook to find the project containing a given directory. |
| 98 | Each functions on this hook is called in turn with one | 103 | Each functions on this hook is called in turn with one |
| @@ -236,12 +241,12 @@ to find the list of ignores for each directory." | |||
| 236 | (defgroup project-vc nil | 241 | (defgroup project-vc nil |
| 237 | "Project implementation based on the VC package." | 242 | "Project implementation based on the VC package." |
| 238 | :version "25.1" | 243 | :version "25.1" |
| 239 | :group 'tools) | 244 | :group 'project) |
| 240 | 245 | ||
| 241 | (defcustom project-vc-ignores nil | 246 | (defcustom project-vc-ignores nil |
| 242 | "List of patterns to include in `project-ignores'." | 247 | "List of patterns to include in `project-ignores'." |
| 243 | :type '(repeat string) | 248 | :type '(repeat string) |
| 244 | :safe 'listp) | 249 | :safe #'listp) |
| 245 | 250 | ||
| 246 | (defcustom project-vc-merge-submodules t | 251 | (defcustom project-vc-merge-submodules t |
| 247 | "Non-nil to consider submodules part of the parent project. | 252 | "Non-nil to consider submodules part of the parent project. |
| @@ -249,8 +254,9 @@ to find the list of ignores for each directory." | |||
| 249 | After changing this variable (using Customize or .dir-locals.el) | 254 | After changing this variable (using Customize or .dir-locals.el) |
| 250 | you might have to restart Emacs to see the effect." | 255 | you might have to restart Emacs to see the effect." |
| 251 | :type 'boolean | 256 | :type 'boolean |
| 257 | :version "28.1" | ||
| 252 | :package-version '(project . "0.2.0") | 258 | :package-version '(project . "0.2.0") |
| 253 | :safe 'booleanp) | 259 | :safe #'booleanp) |
| 254 | 260 | ||
| 255 | ;; FIXME: Using the current approach, major modes are supposed to set | 261 | ;; FIXME: Using the current approach, major modes are supposed to set |
| 256 | ;; this variable to a buffer-local value. So we don't have access to | 262 | ;; this variable to a buffer-local value. So we don't have access to |
| @@ -601,6 +607,7 @@ For the arguments list, see `project--read-file-cpd-relative'." | |||
| 601 | (const :tag "Read with completion from absolute names" | 607 | (const :tag "Read with completion from absolute names" |
| 602 | project--read-file-absolute) | 608 | project--read-file-absolute) |
| 603 | (function :tag "Custom function" nil)) | 609 | (function :tag "Custom function" nil)) |
| 610 | :group 'project | ||
| 604 | :version "27.1") | 611 | :version "27.1") |
| 605 | 612 | ||
| 606 | (defun project--read-file-cpd-relative (prompt | 613 | (defun project--read-file-cpd-relative (prompt |
| @@ -672,6 +679,20 @@ PREDICATE, HIST, and DEFAULT have the same meaning as in | |||
| 672 | (dired (project-root (project-current t)))) | 679 | (dired (project-root (project-current t)))) |
| 673 | 680 | ||
| 674 | ;;;###autoload | 681 | ;;;###autoload |
| 682 | (defun project-vc-dir () | ||
| 683 | "Open VC-Dir in the current project." | ||
| 684 | (interactive) | ||
| 685 | (vc-dir (project-root (project-current t)))) | ||
| 686 | |||
| 687 | ;;;###autoload | ||
| 688 | (defun project-shell () | ||
| 689 | "Open Shell in the current project." | ||
| 690 | (interactive) | ||
| 691 | (let ((default-directory (project-root (project-current t)))) | ||
| 692 | ;; Use ‘create-file-buffer’ to uniquify shell buffer names. | ||
| 693 | (shell (create-file-buffer "*shell*")))) | ||
| 694 | |||
| 695 | ;;;###autoload | ||
| 675 | (defun project-eshell () | 696 | (defun project-eshell () |
| 676 | "Open Eshell in the current project." | 697 | "Open Eshell in the current project." |
| 677 | (interactive) | 698 | (interactive) |
| @@ -705,39 +726,50 @@ loop using the command \\[fileloop-continue]." | |||
| 705 | from to (project-files (project-current t)) 'default) | 726 | from to (project-files (project-current t)) 'default) |
| 706 | (fileloop-continue)) | 727 | (fileloop-continue)) |
| 707 | 728 | ||
| 729 | (defvar compilation-read-command) | ||
| 730 | (declare-function compilation-read-command "compile") | ||
| 731 | |||
| 708 | ;;;###autoload | 732 | ;;;###autoload |
| 709 | (defun project-compile () | 733 | (defun project-compile (command &optional comint) |
| 710 | "Run `compile' in the project root." | 734 | "Run `compile' in the project root. |
| 711 | (interactive) | 735 | Arguments the same as in `compile'." |
| 736 | (interactive | ||
| 737 | (list | ||
| 738 | (let ((command (eval compile-command))) | ||
| 739 | (if (or compilation-read-command current-prefix-arg) | ||
| 740 | (compilation-read-command command) | ||
| 741 | command)) | ||
| 742 | (consp current-prefix-arg))) | ||
| 712 | (let* ((pr (project-current t)) | 743 | (let* ((pr (project-current t)) |
| 713 | (default-directory (project-root pr))) | 744 | (default-directory (project-root pr))) |
| 714 | (call-interactively 'compile))) | 745 | (compile command comint))) |
| 715 | 746 | ||
| 716 | 747 | ||
| 717 | ;;; Project list | 748 | ;;; Project list |
| 718 | 749 | ||
| 750 | (defcustom project-list-file (locate-user-emacs-file "project-list") | ||
| 751 | "File to save the list of known projects." | ||
| 752 | :type 'file | ||
| 753 | :version "28.1" | ||
| 754 | :group 'project) | ||
| 755 | |||
| 719 | (defvar project--list 'unset | 756 | (defvar project--list 'unset |
| 720 | "List of known project directories.") | 757 | "List of known project directories.") |
| 721 | 758 | ||
| 722 | (defun project--ensure-file-exists (filename) | ||
| 723 | "Create an empty file FILENAME if it doesn't exist." | ||
| 724 | (unless (file-exists-p filename) | ||
| 725 | (with-temp-buffer | ||
| 726 | (write-file filename)))) | ||
| 727 | |||
| 728 | (defun project--read-project-list () | 759 | (defun project--read-project-list () |
| 729 | "Initialize `project--list' from the project list file." | 760 | "Initialize `project--list' from the project list file." |
| 730 | (let ((filename (locate-user-emacs-file "project-list"))) | 761 | (let ((filename project-list-file)) |
| 731 | (project--ensure-file-exists filename) | 762 | (setq project--list |
| 732 | (with-temp-buffer | 763 | (when (file-exists-p filename) |
| 733 | (insert-file-contents filename) | 764 | (with-temp-buffer |
| 734 | (let ((dirs (split-string (buffer-string) "\n" t)) | 765 | (insert-file-contents filename) |
| 735 | (project-list '())) | 766 | (let ((dirs (split-string (buffer-string) "\n" t)) |
| 736 | (dolist (dir dirs) | 767 | (project-list '())) |
| 737 | (cl-pushnew (file-name-as-directory dir) | 768 | (dolist (dir dirs) |
| 738 | project-list | 769 | (cl-pushnew (file-name-as-directory dir) |
| 739 | :test #'equal)) | 770 | project-list |
| 740 | (setq project--list (reverse project-list)))))) | 771 | :test #'equal)) |
| 772 | (reverse project-list))))))) | ||
| 741 | 773 | ||
| 742 | (defun project--ensure-read-project-list () | 774 | (defun project--ensure-read-project-list () |
| 743 | "Initialize `project--list' if it hasn't already been." | 775 | "Initialize `project--list' if it hasn't already been." |
| @@ -746,28 +778,27 @@ loop using the command \\[fileloop-continue]." | |||
| 746 | 778 | ||
| 747 | (defun project--write-project-list () | 779 | (defun project--write-project-list () |
| 748 | "Persist `project--list' to the project list file." | 780 | "Persist `project--list' to the project list file." |
| 749 | (let ((filename (locate-user-emacs-file "project-list"))) | 781 | (let ((filename project-list-file)) |
| 750 | (with-temp-buffer | 782 | (with-temp-buffer |
| 751 | (insert (string-join project--list "\n")) | 783 | (insert (string-join project--list "\n")) |
| 752 | (write-region nil nil filename nil 'silent)))) | 784 | (write-region nil nil filename nil 'silent)))) |
| 753 | 785 | ||
| 754 | (defun project--add-to-project-list-front (pr) | 786 | (defun project--add-to-project-list-front (pr) |
| 755 | "Add project PR to the front of the project list and save it. | 787 | "Add project PR to the front of the project list. |
| 756 | Return PR." | 788 | Save the result to disk if the project list was changed." |
| 757 | (project--ensure-read-project-list) | 789 | (project--ensure-read-project-list) |
| 758 | (let ((dir (project-root pr))) | 790 | (let* ((dir (project-root pr)) |
| 759 | (setq project--list (delete dir project--list)) | 791 | (do-write (not (equal (car project--list) dir)))) |
| 760 | (push dir project--list)) | 792 | (when do-write |
| 761 | (project--write-project-list) | 793 | (setq project--list (delete dir project--list)) |
| 762 | pr) | 794 | (push dir project--list) |
| 795 | (project--write-project-list)))) | ||
| 763 | 796 | ||
| 764 | (defun project--remove-from-project-list (pr-dir) | 797 | (defun project--remove-from-project-list (pr-dir) |
| 765 | "Remove directory PR-DIR from the project list. | 798 | "Remove directory PR-DIR from the project list. |
| 766 | If the directory was in the list before the removal, save the | 799 | If the directory was in the list before the removal, save the |
| 767 | result to disk." | 800 | result to disk." |
| 768 | (project--ensure-read-project-list) | 801 | (project--ensure-read-project-list) |
| 769 | ;; XXX: This hardcodes that the number of roots = 1. | ||
| 770 | ;; It's fine, though. | ||
| 771 | (when (member pr-dir project--list) | 802 | (when (member pr-dir project--list) |
| 772 | (setq project--list (delete pr-dir project--list)) | 803 | (setq project--list (delete pr-dir project--list)) |
| 773 | (message "Project `%s' not found; removed from list" pr-dir) | 804 | (message "Project `%s' not found; removed from list" pr-dir) |
| @@ -795,8 +826,10 @@ It's also possible to enter an arbitrary directory." | |||
| 795 | ;;;###autoload | 826 | ;;;###autoload |
| 796 | (defvar project-switch-commands | 827 | (defvar project-switch-commands |
| 797 | '(("f" "Find file" project-find-file) | 828 | '(("f" "Find file" project-find-file) |
| 798 | ("s" "Find regexp" project-find-regexp) | 829 | ("r" "Find regexp" project-find-regexp) |
| 799 | ("d" "Dired" project-dired) | 830 | ("d" "Dired" project-dired) |
| 831 | ("v" "VC-Dir" project-vc-dir) | ||
| 832 | ("s" "Shell" project-shell) | ||
| 800 | ("e" "Eshell" project-eshell)) | 833 | ("e" "Eshell" project-eshell)) |
| 801 | "Alist mapping keys to project switching menu entries. | 834 | "Alist mapping keys to project switching menu entries. |
| 802 | Used by `project-switch-project' to construct a dispatch menu of | 835 | Used by `project-switch-project' to construct a dispatch menu of |
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 2477884f1ab..5b5fb4bc47a 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el | |||
| @@ -273,7 +273,11 @@ find a search tool; by default, this uses \"find | grep\" in the | |||
| 273 | (project-external-roots pr))))) | 273 | (project-external-roots pr))))) |
| 274 | 274 | ||
| 275 | (cl-defgeneric xref-backend-apropos (backend pattern) | 275 | (cl-defgeneric xref-backend-apropos (backend pattern) |
| 276 | "Find all symbols that match regexp PATTERN.") | 276 | "Find all symbols that match PATTERN string. |
| 277 | The second argument has the same meaning as in `apropos'. | ||
| 278 | |||
| 279 | If BACKEND is implemented in Lisp, it can use | ||
| 280 | `xref-apropos-regexp' to convert the pattern to regexp.") | ||
| 277 | 281 | ||
| 278 | (cl-defgeneric xref-backend-identifier-at-point (_backend) | 282 | (cl-defgeneric xref-backend-identifier-at-point (_backend) |
| 279 | "Return the relevant identifier at point. | 283 | "Return the relevant identifier at point. |
| @@ -1098,14 +1102,24 @@ The argument has the same meaning as in `apropos'." | |||
| 1098 | "Search for pattern (word list or regexp): " | 1102 | "Search for pattern (word list or regexp): " |
| 1099 | nil 'xref--read-pattern-history))) | 1103 | nil 'xref--read-pattern-history))) |
| 1100 | (require 'apropos) | 1104 | (require 'apropos) |
| 1101 | (xref--find-xrefs pattern 'apropos | 1105 | (let* ((newpat |
| 1102 | (apropos-parse-pattern | 1106 | (if (and (version< emacs-version "28.0.50") |
| 1103 | (if (string-equal (regexp-quote pattern) pattern) | 1107 | (memq (xref-find-backend) '(elisp etags))) |
| 1104 | ;; Split into words | 1108 | ;; Handle backends in older Emacs. |
| 1105 | (or (split-string pattern "[ \t]+" t) | 1109 | (xref-apropos-regexp pattern) |
| 1106 | (user-error "No word list given")) | 1110 | ;; Delegate pattern handling to the backend fully. |
| 1107 | pattern)) | 1111 | ;; The old way didn't work for "external" backends. |
| 1108 | nil)) | 1112 | pattern))) |
| 1113 | (xref--find-xrefs pattern 'apropos newpat nil))) | ||
| 1114 | |||
| 1115 | (defun xref-apropos-regexp (pattern) | ||
| 1116 | "Return an Emacs regexp from PATTERN similar to `apropos'." | ||
| 1117 | (apropos-parse-pattern | ||
| 1118 | (if (string-equal (regexp-quote pattern) pattern) | ||
| 1119 | ;; Split into words | ||
| 1120 | (or (split-string pattern "[ \t]+" t) | ||
| 1121 | (user-error "No word list given")) | ||
| 1122 | pattern))) | ||
| 1109 | 1123 | ||
| 1110 | 1124 | ||
| 1111 | ;;; Key bindings | 1125 | ;;; Key bindings |
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index d24d59cb7e8..76e7f8c33a2 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el | |||
| @@ -1554,9 +1554,10 @@ indirectly called by the latter." | |||
| 1554 | Like \\[switch-to-buffer-other-frame] (which see), but creates a new tab." | 1554 | Like \\[switch-to-buffer-other-frame] (which see), but creates a new tab." |
| 1555 | (interactive | 1555 | (interactive |
| 1556 | (list (read-buffer-to-switch "Switch to buffer in other tab: "))) | 1556 | (list (read-buffer-to-switch "Switch to buffer in other tab: "))) |
| 1557 | (display-buffer buffer-or-name '((display-buffer-in-tab) | 1557 | (display-buffer (window-normalize-buffer-to-switch-to buffer-or-name) |
| 1558 | (inhibit-same-window . nil) | 1558 | '((display-buffer-in-tab) |
| 1559 | (reusable-frames . t)) | 1559 | (inhibit-same-window . nil) |
| 1560 | (reusable-frames . t)) | ||
| 1560 | norecord)) | 1561 | norecord)) |
| 1561 | 1562 | ||
| 1562 | (defun find-file-other-tab (filename &optional wildcards) | 1563 | (defun find-file-other-tab (filename &optional wildcards) |
diff --git a/src/alloc.c b/src/alloc.c index dc92d67f163..281525b20e5 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -67,7 +67,8 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | |||
| 67 | # include <malloc.h> | 67 | # include <malloc.h> |
| 68 | #endif | 68 | #endif |
| 69 | 69 | ||
| 70 | #if defined HAVE_VALGRIND_VALGRIND_H && !defined USE_VALGRIND | 70 | #if (defined ENABLE_CHECKING \ |
| 71 | && defined HAVE_VALGRIND_VALGRIND_H && !defined USE_VALGRIND) | ||
| 71 | # define USE_VALGRIND 1 | 72 | # define USE_VALGRIND 1 |
| 72 | #endif | 73 | #endif |
| 73 | 74 | ||
| @@ -4463,7 +4464,7 @@ live_string_holding (struct mem_node *m, void *p) | |||
| 4463 | 4464 | ||
| 4464 | /* P must point into a Lisp_String structure, and it | 4465 | /* P must point into a Lisp_String structure, and it |
| 4465 | must not be on the free-list. */ | 4466 | must not be on the free-list. */ |
| 4466 | if (0 <= offset && offset < STRING_BLOCK_SIZE * sizeof b->strings[0]) | 4467 | if (0 <= offset && offset < sizeof b->strings) |
| 4467 | { | 4468 | { |
| 4468 | cp = ptr_bounds_copy (cp, b); | 4469 | cp = ptr_bounds_copy (cp, b); |
| 4469 | struct Lisp_String *s = p = cp -= offset % sizeof b->strings[0]; | 4470 | struct Lisp_String *s = p = cp -= offset % sizeof b->strings[0]; |
| @@ -4496,7 +4497,7 @@ live_cons_holding (struct mem_node *m, void *p) | |||
| 4496 | /* P must point into a Lisp_Cons, not be | 4497 | /* P must point into a Lisp_Cons, not be |
| 4497 | one of the unused cells in the current cons block, | 4498 | one of the unused cells in the current cons block, |
| 4498 | and not be on the free-list. */ | 4499 | and not be on the free-list. */ |
| 4499 | if (0 <= offset && offset < CONS_BLOCK_SIZE * sizeof b->conses[0] | 4500 | if (0 <= offset && offset < sizeof b->conses |
| 4500 | && (b != cons_block | 4501 | && (b != cons_block |
| 4501 | || offset / sizeof b->conses[0] < cons_block_index)) | 4502 | || offset / sizeof b->conses[0] < cons_block_index)) |
| 4502 | { | 4503 | { |
| @@ -4532,7 +4533,7 @@ live_symbol_holding (struct mem_node *m, void *p) | |||
| 4532 | /* P must point into the Lisp_Symbol, not be | 4533 | /* P must point into the Lisp_Symbol, not be |
| 4533 | one of the unused cells in the current symbol block, | 4534 | one of the unused cells in the current symbol block, |
| 4534 | and not be on the free-list. */ | 4535 | and not be on the free-list. */ |
| 4535 | if (0 <= offset && offset < SYMBOL_BLOCK_SIZE * sizeof b->symbols[0] | 4536 | if (0 <= offset && offset < sizeof b->symbols |
| 4536 | && (b != symbol_block | 4537 | && (b != symbol_block |
| 4537 | || offset / sizeof b->symbols[0] < symbol_block_index)) | 4538 | || offset / sizeof b->symbols[0] < symbol_block_index)) |
| 4538 | { | 4539 | { |
| @@ -4566,9 +4567,8 @@ live_float_p (struct mem_node *m, void *p) | |||
| 4566 | 4567 | ||
| 4567 | /* P must point to the start of a Lisp_Float and not be | 4568 | /* P must point to the start of a Lisp_Float and not be |
| 4568 | one of the unused cells in the current float block. */ | 4569 | one of the unused cells in the current float block. */ |
| 4569 | return (offset >= 0 | 4570 | return (0 <= offset && offset < sizeof b->floats |
| 4570 | && offset % sizeof b->floats[0] == 0 | 4571 | && offset % sizeof b->floats[0] == 0 |
| 4571 | && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0]) | ||
| 4572 | && (b != float_block | 4572 | && (b != float_block |
| 4573 | || offset / sizeof b->floats[0] < float_block_index)); | 4573 | || offset / sizeof b->floats[0] < float_block_index)); |
| 4574 | } | 4574 | } |
| @@ -4694,35 +4694,6 @@ mark_maybe_objects (Lisp_Object const *array, ptrdiff_t nelts) | |||
| 4694 | mark_maybe_object (*array); | 4694 | mark_maybe_object (*array); |
| 4695 | } | 4695 | } |
| 4696 | 4696 | ||
| 4697 | /* A lower bound on the alignment of Lisp objects that need marking. | ||
| 4698 | Although 1 is safe, higher values speed up mark_maybe_pointer. | ||
| 4699 | If USE_LSB_TAG, this value is typically GCALIGNMENT; otherwise, | ||
| 4700 | it's determined by the natural alignment of Lisp structs. | ||
| 4701 | All vectorlike objects have alignment at least that of union | ||
| 4702 | vectorlike_header and it's unlikely they all have alignment greater, | ||
| 4703 | so use the union as a safe and likely-accurate standin for | ||
| 4704 | vectorlike objects. */ | ||
| 4705 | |||
| 4706 | enum { GC_OBJECT_ALIGNMENT_MINIMUM | ||
| 4707 | = max (GCALIGNMENT, | ||
| 4708 | min (alignof (union vectorlike_header), | ||
| 4709 | min (min (alignof (struct Lisp_Cons), | ||
| 4710 | alignof (struct Lisp_Float)), | ||
| 4711 | min (alignof (struct Lisp_String), | ||
| 4712 | alignof (struct Lisp_Symbol))))) }; | ||
| 4713 | |||
| 4714 | /* Return true if P might point to Lisp data that can be garbage | ||
| 4715 | collected, and false otherwise (i.e., false if it is easy to see | ||
| 4716 | that P cannot point to Lisp data that can be garbage collected). | ||
| 4717 | Symbols are implemented via offsets not pointers, but the offsets | ||
| 4718 | are also multiples of GC_OBJECT_ALIGNMENT_MINIMUM. */ | ||
| 4719 | |||
| 4720 | static bool | ||
| 4721 | maybe_lisp_pointer (void *p) | ||
| 4722 | { | ||
| 4723 | return (uintptr_t) p % GC_OBJECT_ALIGNMENT_MINIMUM == 0; | ||
| 4724 | } | ||
| 4725 | |||
| 4726 | /* If P points to Lisp data, mark that as live if it isn't already | 4697 | /* If P points to Lisp data, mark that as live if it isn't already |
| 4727 | marked. */ | 4698 | marked. */ |
| 4728 | 4699 | ||
| @@ -4731,13 +4702,10 @@ mark_maybe_pointer (void *p) | |||
| 4731 | { | 4702 | { |
| 4732 | struct mem_node *m; | 4703 | struct mem_node *m; |
| 4733 | 4704 | ||
| 4734 | #ifdef USE_VALGRIND | 4705 | #if USE_VALGRIND |
| 4735 | VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p)); | 4706 | VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p)); |
| 4736 | #endif | 4707 | #endif |
| 4737 | 4708 | ||
| 4738 | if (!maybe_lisp_pointer (p)) | ||
| 4739 | return; | ||
| 4740 | |||
| 4741 | if (pdumper_object_p (p)) | 4709 | if (pdumper_object_p (p)) |
| 4742 | { | 4710 | { |
| 4743 | int type = pdumper_find_object_type (p); | 4711 | int type = pdumper_find_object_type (p); |
| @@ -4837,7 +4805,16 @@ mark_memory (void const *start, void const *end) | |||
| 4837 | 4805 | ||
| 4838 | for (pp = start; (void const *) pp < end; pp += GC_POINTER_ALIGNMENT) | 4806 | for (pp = start; (void const *) pp < end; pp += GC_POINTER_ALIGNMENT) |
| 4839 | { | 4807 | { |
| 4840 | mark_maybe_pointer (*(void *const *) pp); | 4808 | char *p = *(char *const *) pp; |
| 4809 | mark_maybe_pointer (p); | ||
| 4810 | |||
| 4811 | /* Unmask any struct Lisp_Symbol pointer that make_lisp_symbol | ||
| 4812 | previously disguised by adding the address of 'lispsym'. | ||
| 4813 | On a host with 32-bit pointers and 64-bit Lisp_Objects, | ||
| 4814 | a Lisp_Object might be split into registers saved into | ||
| 4815 | non-adjacent words and P might be the low-order word's value. */ | ||
| 4816 | p += (intptr_t) lispsym; | ||
| 4817 | mark_maybe_pointer (p); | ||
| 4841 | 4818 | ||
| 4842 | verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0); | 4819 | verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0); |
| 4843 | if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT | 4820 | if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT |
diff --git a/src/composite.c b/src/composite.c index 518502be49f..2c589e4f3a9 100644 --- a/src/composite.c +++ b/src/composite.c | |||
| @@ -1987,7 +1987,9 @@ preceding and/or following characters, this char-table contains | |||
| 1987 | a function to call to compose that character. | 1987 | a function to call to compose that character. |
| 1988 | 1988 | ||
| 1989 | The element at index C in the table, if non-nil, is a list of | 1989 | The element at index C in the table, if non-nil, is a list of |
| 1990 | composition rules of this form: ([PATTERN PREV-CHARS FUNC] ...) | 1990 | composition rules of the form ([PATTERN PREV-CHARS FUNC] ...); |
| 1991 | the rules must be specified in the descending order of PREV-CHARS | ||
| 1992 | values. | ||
| 1991 | 1993 | ||
| 1992 | PATTERN is a regular expression which C and the surrounding | 1994 | PATTERN is a regular expression which C and the surrounding |
| 1993 | characters must match. | 1995 | characters must match. |
diff --git a/src/emacs.c b/src/emacs.c index 8ecf9b4aeba..228ac293370 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -358,7 +358,10 @@ setlocale (int cat, char const *locale) | |||
| 358 | static bool | 358 | static bool |
| 359 | using_utf8 (void) | 359 | using_utf8 (void) |
| 360 | { | 360 | { |
| 361 | #ifdef HAVE_WCHAR_H | 361 | /* We don't want to compile in mbrtowc on WINDOWSNT because that |
| 362 | will prevent Emacs from starting on older Windows systems, while | ||
| 363 | the result is known in advance anyway... */ | ||
| 364 | #if defined HAVE_WCHAR_H && !defined WINDOWSNT | ||
| 362 | wchar_t wc; | 365 | wchar_t wc; |
| 363 | mbstate_t mbs = { 0 }; | 366 | mbstate_t mbs = { 0 }; |
| 364 | return mbrtowc (&wc, "\xc4\x80", 2, &mbs) == 2 && wc == 0x100; | 367 | return mbrtowc (&wc, "\xc4\x80", 2, &mbs) == 2 && wc == 0x100; |
diff --git a/src/lread.c b/src/lread.c index 9f849eda423..026f3b6d98f 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -3030,17 +3030,18 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) | |||
| 3030 | struct Lisp_Vector *vec; | 3030 | struct Lisp_Vector *vec; |
| 3031 | tmp = read_vector (readcharfun, 1); | 3031 | tmp = read_vector (readcharfun, 1); |
| 3032 | vec = XVECTOR (tmp); | 3032 | vec = XVECTOR (tmp); |
| 3033 | if (! (COMPILED_STACK_DEPTH < vec->header.size | 3033 | if (! (COMPILED_STACK_DEPTH < ASIZE (tmp) |
| 3034 | && (FIXNUMP (vec->contents[COMPILED_ARGLIST]) | 3034 | && (FIXNUMP (AREF (tmp, COMPILED_ARGLIST)) |
| 3035 | || CONSP (vec->contents[COMPILED_ARGLIST]) | 3035 | || CONSP (AREF (tmp, COMPILED_ARGLIST)) |
| 3036 | || NILP (vec->contents[COMPILED_ARGLIST])) | 3036 | || NILP (AREF (tmp, COMPILED_ARGLIST))) |
| 3037 | && ((STRINGP (vec->contents[COMPILED_BYTECODE]) | 3037 | && ((STRINGP (AREF (tmp, COMPILED_BYTECODE)) |
| 3038 | && VECTORP (vec->contents[COMPILED_CONSTANTS])) | 3038 | && VECTORP (AREF (tmp, COMPILED_CONSTANTS))) |
| 3039 | || CONSP (vec->contents[COMPILED_BYTECODE])) | 3039 | || CONSP (AREF (tmp, COMPILED_BYTECODE))) |
| 3040 | && FIXNATP (vec->contents[COMPILED_STACK_DEPTH]))) | 3040 | && FIXNATP (AREF (tmp, COMPILED_STACK_DEPTH)))) |
| 3041 | invalid_syntax ("Invalid byte-code object"); | 3041 | invalid_syntax ("Invalid byte-code object"); |
| 3042 | 3042 | ||
| 3043 | if (STRING_MULTIBYTE (AREF (tmp, COMPILED_BYTECODE))) | 3043 | if (STRINGP (AREF (tmp, COMPILED_BYTECODE)) |
| 3044 | && STRING_MULTIBYTE (AREF (tmp, COMPILED_BYTECODE))) | ||
| 3044 | { | 3045 | { |
| 3045 | /* BYTESTR must have been produced by Emacs 20.2 or earlier | 3046 | /* BYTESTR must have been produced by Emacs 20.2 or earlier |
| 3046 | because it produced a raw 8-bit string for byte-code and | 3047 | because it produced a raw 8-bit string for byte-code and |
| @@ -3051,7 +3052,7 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) | |||
| 3051 | Fstring_as_unibyte (AREF (tmp, COMPILED_BYTECODE))); | 3052 | Fstring_as_unibyte (AREF (tmp, COMPILED_BYTECODE))); |
| 3052 | } | 3053 | } |
| 3053 | 3054 | ||
| 3054 | if (COMPILED_DOC_STRING < vec->header.size | 3055 | if (COMPILED_DOC_STRING < ASIZE (tmp) |
| 3055 | && EQ (AREF (tmp, COMPILED_DOC_STRING), make_fixnum (0))) | 3056 | && EQ (AREF (tmp, COMPILED_DOC_STRING), make_fixnum (0))) |
| 3056 | { | 3057 | { |
| 3057 | /* read_list found a docstring like '(#$ . 5521)' and treated it | 3058 | /* read_list found a docstring like '(#$ . 5521)' and treated it |
diff --git a/src/pdumper.c b/src/pdumper.c index 29e3560ee5a..ffe59fbb306 100644 --- a/src/pdumper.c +++ b/src/pdumper.c | |||
| @@ -2256,7 +2256,7 @@ dump_bignum (struct dump_context *ctx, Lisp_Object object) | |||
| 2256 | static dump_off | 2256 | static dump_off |
| 2257 | dump_float (struct dump_context *ctx, const struct Lisp_Float *lfloat) | 2257 | dump_float (struct dump_context *ctx, const struct Lisp_Float *lfloat) |
| 2258 | { | 2258 | { |
| 2259 | #if CHECK_STRUCTS && !defined (HASH_Lisp_Float_50A7B216D9) | 2259 | #if CHECK_STRUCTS && !defined (HASH_Lisp_Float_7E7D284C02) |
| 2260 | # error "Lisp_Float changed. See CHECK_STRUCTS comment in config.h." | 2260 | # error "Lisp_Float changed. See CHECK_STRUCTS comment in config.h." |
| 2261 | #endif | 2261 | #endif |
| 2262 | eassert (ctx->header.cold_start); | 2262 | eassert (ctx->header.cold_start); |
diff --git a/src/xdisp.c b/src/xdisp.c index ea28395cf55..327e8a183b1 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -8692,6 +8692,7 @@ handle_stop_backwards (struct it *it, ptrdiff_t charpos) | |||
| 8692 | ptrdiff_t where_we_are = (bufp ? IT_CHARPOS (*it) : IT_STRING_CHARPOS (*it)); | 8692 | ptrdiff_t where_we_are = (bufp ? IT_CHARPOS (*it) : IT_STRING_CHARPOS (*it)); |
| 8693 | struct display_pos save_current = it->current; | 8693 | struct display_pos save_current = it->current; |
| 8694 | struct text_pos save_position = it->position; | 8694 | struct text_pos save_position = it->position; |
| 8695 | struct composition_it save_cmp_it = it->cmp_it; | ||
| 8695 | struct text_pos pos1; | 8696 | struct text_pos pos1; |
| 8696 | ptrdiff_t next_stop; | 8697 | ptrdiff_t next_stop; |
| 8697 | 8698 | ||
| @@ -8719,6 +8720,7 @@ handle_stop_backwards (struct it *it, ptrdiff_t charpos) | |||
| 8719 | it->bidi_p = true; | 8720 | it->bidi_p = true; |
| 8720 | it->current = save_current; | 8721 | it->current = save_current; |
| 8721 | it->position = save_position; | 8722 | it->position = save_position; |
| 8723 | it->cmp_it = save_cmp_it; | ||
| 8722 | next_stop = it->stop_charpos; | 8724 | next_stop = it->stop_charpos; |
| 8723 | it->stop_charpos = it->prev_stop; | 8725 | it->stop_charpos = it->prev_stop; |
| 8724 | handle_stop (it); | 8726 | handle_stop (it); |
| @@ -11575,7 +11577,9 @@ display_echo_area_1 (ptrdiff_t a1, Lisp_Object a2) | |||
| 11575 | /* Display. */ | 11577 | /* Display. */ |
| 11576 | clear_glyph_matrix (w->desired_matrix); | 11578 | clear_glyph_matrix (w->desired_matrix); |
| 11577 | XSETWINDOW (window, w); | 11579 | XSETWINDOW (window, w); |
| 11580 | void *itdata = bidi_shelve_cache (); | ||
| 11578 | try_window (window, start, 0); | 11581 | try_window (window, start, 0); |
| 11582 | bidi_unshelve_cache (itdata, false); | ||
| 11579 | 11583 | ||
| 11580 | return window_height_changed_p; | 11584 | return window_height_changed_p; |
| 11581 | } | 11585 | } |
| @@ -19748,7 +19752,7 @@ find_last_row_displaying_text (struct glyph_matrix *matrix, struct it *it, | |||
| 19748 | by changes at the start of current_buffer that occurred since W's | 19752 | by changes at the start of current_buffer that occurred since W's |
| 19749 | current matrix was built. Value is null if no such row exists. | 19753 | current matrix was built. Value is null if no such row exists. |
| 19750 | 19754 | ||
| 19751 | BEG_UNCHANGED us the number of characters unchanged at the start of | 19755 | BEG_UNCHANGED is the number of characters unchanged at the start of |
| 19752 | current_buffer. BEG + BEG_UNCHANGED is the buffer position of the | 19756 | current_buffer. BEG + BEG_UNCHANGED is the buffer position of the |
| 19753 | first changed character in current_buffer. Characters at positions < | 19757 | first changed character in current_buffer. Characters at positions < |
| 19754 | BEG + BEG_UNCHANGED are at the same buffer positions as they were | 19758 | BEG + BEG_UNCHANGED are at the same buffer positions as they were |
| @@ -27702,6 +27706,7 @@ fill_gstring_glyph_string (struct glyph_string *s, int face_id, | |||
| 27702 | while (glyph < last | 27706 | while (glyph < last |
| 27703 | && glyph->u.cmp.automatic | 27707 | && glyph->u.cmp.automatic |
| 27704 | && glyph->u.cmp.id == s->cmp_id | 27708 | && glyph->u.cmp.id == s->cmp_id |
| 27709 | && glyph->face_id == face_id | ||
| 27705 | && s->cmp_to == glyph->slice.cmp.from) | 27710 | && s->cmp_to == glyph->slice.cmp.from) |
| 27706 | { | 27711 | { |
| 27707 | s->width += glyph->pixel_width; | 27712 | s->width += glyph->pixel_width; |
diff --git a/src/xfaces.c b/src/xfaces.c index 7d7aff95c11..cf155288bd1 100644 --- a/src/xfaces.c +++ b/src/xfaces.c | |||
| @@ -4356,15 +4356,15 @@ color_distance (Emacs_Color *x, Emacs_Color *y) | |||
| 4356 | 4356 | ||
| 4357 | See <https://www.compuphase.com/cmetric.htm> for more info. */ | 4357 | See <https://www.compuphase.com/cmetric.htm> for more info. */ |
| 4358 | 4358 | ||
| 4359 | long r = (x->red - y->red) >> 8; | 4359 | long long r = x->red - y->red; |
| 4360 | long g = (x->green - y->green) >> 8; | 4360 | long long g = x->green - y->green; |
| 4361 | long b = (x->blue - y->blue) >> 8; | 4361 | long long b = x->blue - y->blue; |
| 4362 | long r_mean = (x->red + y->red) >> 9; | 4362 | long long r_mean = (x->red + y->red) >> 1; |
| 4363 | 4363 | ||
| 4364 | return | 4364 | return (((((2 * 65536 + r_mean) * r * r) >> 16) |
| 4365 | (((512 + r_mean) * r * r) >> 8) | 4365 | + 4 * g * g |
| 4366 | + 4 * g * g | 4366 | + (((2 * 65536 + 65535 - r_mean) * b * b) >> 16)) |
| 4367 | + (((767 - r_mean) * b * b) >> 8); | 4367 | >> 16); |
| 4368 | } | 4368 | } |
| 4369 | 4369 | ||
| 4370 | 4370 | ||
| @@ -4374,7 +4374,9 @@ COLOR1 and COLOR2 may be either strings containing the color name, | |||
| 4374 | or lists of the form (RED GREEN BLUE), each in the range 0 to 65535 inclusive. | 4374 | or lists of the form (RED GREEN BLUE), each in the range 0 to 65535 inclusive. |
| 4375 | If FRAME is unspecified or nil, the current frame is used. | 4375 | If FRAME is unspecified or nil, the current frame is used. |
| 4376 | If METRIC is specified, it should be a function that accepts | 4376 | If METRIC is specified, it should be a function that accepts |
| 4377 | two lists of the form (RED GREEN BLUE) aforementioned. */) | 4377 | two lists of the form (RED GREEN BLUE) aforementioned. |
| 4378 | Despite the name, this is not a true distance metric as it does not satisfy | ||
| 4379 | the triangle inequality. */) | ||
| 4378 | (Lisp_Object color1, Lisp_Object color2, Lisp_Object frame, | 4380 | (Lisp_Object color1, Lisp_Object color2, Lisp_Object frame, |
| 4379 | Lisp_Object metric) | 4381 | Lisp_Object metric) |
| 4380 | { | 4382 | { |
| @@ -4931,7 +4933,7 @@ DEFUN ("face-attributes-as-vector", Fface_attributes_as_vector, | |||
| 4931 | 4933 | ||
| 4932 | /* If the distance (as returned by color_distance) between two colors is | 4934 | /* If the distance (as returned by color_distance) between two colors is |
| 4933 | less than this, then they are considered the same, for determining | 4935 | less than this, then they are considered the same, for determining |
| 4934 | whether a color is supported or not. The range of values is 0-65535. */ | 4936 | whether a color is supported or not. */ |
| 4935 | 4937 | ||
| 4936 | #define TTY_SAME_COLOR_THRESHOLD 10000 | 4938 | #define TTY_SAME_COLOR_THRESHOLD 10000 |
| 4937 | 4939 | ||
diff --git a/test/src/xfaces-tests.el b/test/src/xfaces-tests.el new file mode 100644 index 00000000000..5ed16c9e51d --- /dev/null +++ b/test/src/xfaces-tests.el | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | ;;; xfaces-tests.el --- tests for xfaces.c -*- lexical-binding: t -*- | ||
| 2 | |||
| 3 | ;; Copyright (C) 2020 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; This file is part of GNU Emacs. | ||
| 6 | |||
| 7 | ;; GNU Emacs is free software: you can redistribute it and/or modify | ||
| 8 | ;; it under the terms of the GNU General Public License as published by | ||
| 9 | ;; the Free Software Foundation, either version 3 of the License, or | ||
| 10 | ;; (at your option) any later version. | ||
| 11 | |||
| 12 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 13 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | ;; GNU General Public License for more details. | ||
| 16 | |||
| 17 | ;; You should have received a copy of the GNU General Public License | ||
| 18 | ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. | ||
| 19 | |||
| 20 | (require 'ert) | ||
| 21 | |||
| 22 | (ert-deftest xfaces-color-distance () | ||
| 23 | ;; Check symmetry (bug#41544). | ||
| 24 | (should (equal (color-distance "#222222" "#ffffff") | ||
| 25 | (color-distance "#ffffff" "#222222")))) | ||
| 26 | |||
| 27 | (provide 'xfaces-tests) | ||