* lisp/ibuf-ext.el (ibuffer-diff-with-file): Link to diff-command in
docstring. Make Diff buffer read-only from outset and inhibit as
needed to avoid surprises. Check whether diff-command
supports --label. Leave point at BOB and clean up any excess
newline inserted by ibuffer-diff-buffer-with-file-1. Prefer
pop-to-buffer-same-window over switch-to-buffer.
(ibuffer-diff-buffer-with-file-1): Add docstring. Remove unused
unwind-protect and copypasta from diff-no-select (bug#62599). Use
diff-file-local-copy, string-join, and redisplay in place of
analogues. Condition --label use on availability, and label buffers
consistently with diff-no-select. Leave empty line between runs.
Let diff-sentinel delete temporary files. Leave point at EOB for
next run.
João Távora [Fri, 7 Apr 2023 21:47:15 +0000 (22:47 +0100)]
Eglot: version strings must start with numbers (bug#62718)
Even though Eglot is a :core ELPA package and as such is on a
different release cycle than Emacs proper, the version strings used in
'defcustom' and 'make-obsolete' must still follow the numeric format.
João Távora [Fri, 7 Apr 2023 18:45:28 +0000 (19:45 +0100)]
Eglot: require optional text-property-search.el
Originally reported in
https://github.com/joaotavora/eglot/discussions/1201.
Also check for text-property-search-forward before using it, so we
won't break on Emacs 26.3. At this point, better start relying on
compat.el, I guess.
* lisp/progmodes/eglot.el (eglot--format-markup): Check for
text-property-search-forward.
João Távora [Fri, 7 Apr 2023 18:40:27 +0000 (19:40 +0100)]
Eglot: be careful about gfm-view-mode read-only buffers
Although in most situations this doesn't error, it's only because of
the very wide binding of inhibit-read-only in jsonrpc--process-filter.
That binding will soon be narrowed, so better not rely on it.
Originally reported in
https://github.com/joaotavora/eglot/discussions/1202.
* lisp/progmodes/eglot.el (eglot--format-markup): Inhibit
read-only before touching buffer potentially in gfm-view-mode.
Remove useless unwind-protect forms, or make them useful as intended
* lisp/imenu.el (imenu--generic-function):
* lisp/mail/yenc.el (yenc-decode-region):
* lisp/textmodes/table.el (table-recognize-region):
* test/lisp/dired-tests.el (dired-test-directory-files):
* test/lisp/hl-line-tests.el (hl-line-tests-sticky):
Fix unwind-protect bracketing mistakes that caused the unwind code to
be misplaced.
* lisp/strokes.el (strokes-read-stroke): Fix a bracketing mistake that
misplaced the unwind code, and another one that misplaced the
else-clause of an `if` form.
* test/lisp/gnus/mml-sec-tests.el (mml-secure-test-fixture): Fix a
bracketing mistake that misplaced the unwind code, and remove
superfluous condition-case.
* lisp/mwheel.el (mouse-wheel-global-text-scale):
* lisp/speedbar.el (speedbar-stealthy-updates)
(speedbar-fetch-dynamic-etags):
* lisp/emacs-lisp/edebug.el (edebug--recursive-edit):
* lisp/emacs-lisp/package.el (package--read-pkg-desc):
* lisp/cedet/semantic.el (semantic-refresh-tags-safe):
* lisp/emulation/viper-cmd.el (viper-escape-to-state):
* lisp/emulation/viper-cmd.el (viper-file-add-suffix):
* lisp/gnus/mail-source.el (mail-source-movemail):
* lisp/mail/feedmail.el (feedmail-send-it-immediately)
(feedmail-deduce-address-list):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/smtpmail.el (smtpmail-deduce-address-list):
* lisp/mh-e/mh-print.el (mh-ps-print-range):
* lisp/textmodes/reftex-index.el (reftex-index-this-phrase):
* test/lisp/emacs-lisp/ert-tests.el (ert-test-run-tests-batch):
(ert-test-run-tests-batch-expensive):
Remove unwind-protect forms that are apparently useless, some since a
prior edit that removed their purpose, some since their first
appearance.
* test/lisp/subr-tests.el (subr-test--frames-2):
Insert dummy unwind form in backtrace test code.
João Távora [Fri, 7 Apr 2023 13:55:01 +0000 (14:55 +0100)]
Eglot: no more tests based on Pylsp (bug#62694)
The functionality under test in eglot.el is exactly the same, but use
the clangd server only, as that is used in more tests, and it is much
easier to check if it misbehaves or not.
Tests pass with clangd version 15.
* test/lisp/progmodes/eglot-tests.el (python): Don't require it.
(eglot--call-with-fixture): Simplify.
(eglot--wait-for-clangd): New helper.
(eglot-test-basic-completions)
(eglot-test-non-unique-completions, eglot-test-basic-xref)
(eglot-test-snippet-completions)
(eglot-test-snippet-completions-with-company)
(eglot-test-eldoc-after-completions, eglot-test-multiline-eldoc):
Use clangd, not pylsp.
(eglot-test-formatting): Renamed from
eglot-test-python-autopep-formatting.
(eglot-test-python-yapf-formatting): Remove.
João Távora [Fri, 7 Apr 2023 11:54:39 +0000 (12:54 +0100)]
Eglot: rework eglot-imenu
Most newer servers return a vector of 'DocumentSymbol' as a response
to 'textDocument/documentSymbol'. It's not worth trying to dumb this
down to imenu format of 'SymbolInformation' vectors.
This lays groundwork for the forthcoming "breadcrumb" feature of
bug#58431.
* lisp/progmodes/eglot.el
(eglot--imenu-SymbolInformation, eglot--imenu-DocumentSymbol): New
helpers.
(eglot-imenu): Rework.
Eli Zaretskii [Thu, 6 Apr 2023 18:38:20 +0000 (14:38 -0400)]
Merge from origin/emacs-29
305246d9726 Add emoji-zoom-reset 470d269ec1f Make emoji-zoom-{increase,decrease} set text properties c... 63d4a86f8d1 Fix transforming sliced images 5e1953a8f85 ; * etc/NEWS: Minor copyedits of entry for 'keymap-*' fun... 6b9f9df9454 ; Improve documentation of 'declare-function' 81d1f46d0fe ; Avoid compiler warning in eglot.el. 38cdfcb2128 ; Fix description of new 'keymap-*' functions 257090b8728 Adapt EMBA scripts. 90c07d3fdd2 Another terminology fix in ELisp reference manual a832bc7090c Correct terminology in Elisp Reference Manual db308233cb3 Comment out GNUSTEP jobs on EMBA (again) 8c1b1022439 ; * lisp/image.el (put-image): Doc fix. eda88c63adf ; * doc/emacs/trouble.texi (Checklist): Minor grammar fix. 728bc09cf3c Fix regexp string escaping mistake in vhdl-mode.el (bug#6... 479626dbac9 Update to Org 9.6.3-2-gf2949d 5a1c9aace70 ; Add a bit more docstring to tsx-ts-mode (bug#62429) 86cf9fd932c Eglot: don't watch directories that don't exist 82d0b6c64ea ; * lisp/subr.el (use-dialog-box-p): Fix last change. 3619663f982 Preserve peer information for web page in eww-readable cb8d6ab648f * lisp/subr.el (use-dialog-box-p): Fix conditions for GUI... fb2c4409207 ; * lisp/progmodes/c-ts-mode.el (c++-ts-mode): Add some n...
Eli Zaretskii [Thu, 6 Apr 2023 18:38:04 +0000 (14:38 -0400)]
; Merge from origin/emacs-29
The following commits were skipped:
46209b2453b ; Fix last change 21a4ee209c1 Fix new Eshell tests on MS-Windows e2ebf3995d0 ; Auto-commit of loaddefs files. 6419d78fa6f Fix using background commands in 'eshell-command'
Robert Pluim [Wed, 5 Apr 2023 13:19:13 +0000 (15:19 +0200)]
Make emoji-zoom-{increase,decrease} set text properties correctly
* lisp/international/emoji.el (emoji-zoom-increase): Ensure that we're
increasing the :height of the anonymous face at point, rather than
having two :height properties, which appeared to work by
accident, and don't error at eob. (Bug#62675)
Liu Hui [Tue, 4 Apr 2023 01:13:32 +0000 (09:13 +0800)]
Restore positions reliably for abbreviated file names in saveplace.el
* lisp/saveplace.el (save-place-abbreviate-file-names): Add setter
function for rewriting `save-place-alist'. Update docstring.
(save-place-to-alist): Save Abbreviated dired-filename.
(save-place-load-alist-from-file): Move this function above
`save-place-abbreviate-file-names' since it is used in the :set
function.
(save-place-find-file-hook):
(save-place-dired-hook): Use abbreviated file name when
`save-place-abbreviate-file-names' is non-nil.
(Bug#62413)
* lisp/progmodes/elixir-ts-mode.el
(elixir-ts--syntax-propertize-query): New variable.
(elixir-ts--syntax-propertize): New helper.
(elixir-ts-mode): Set syntax-propertize-function. (Bug#62536)
Alan Mackenzie [Thu, 6 Apr 2023 09:14:56 +0000 (09:14 +0000)]
CC Mode: Miscellaneous coding fixes in c-forward-type
This fixes bug #62339.
* lisp/progmodes/cc-engine.el (c-forward-type): In the implicit int handling,
respect the setting of the parameter stop-at-end. In the case "normal
identifier", insert a missing (c-forward-syntactic-ws); this fixes the bug.
Here, correct the wrong return value `prefix' to t.
Alan Mackenzie [Wed, 5 Apr 2023 13:02:12 +0000 (13:02 +0000)]
CC Mode: Fix fontification problems shown by test file templates-20.cc
Also fix one problem evident in test file decls-10.cc.
* lisp/progmodes/cc-engine.el (c-brace-stack-at): Bind
c-record-type-identifiers to nil to prevent called functions recording
identifiers spuriously.
(c-forward-<>-arglist-recur): Revert the ill-advised optimization from autumn
2022 which attempted to avoid re-marking c-type text properties inside angle
bracket arglists.
(c-forward-decl-or-cast-1): Accept the semicolon at the end of "t8 * id;" as
sufficient evidence to fontify as a declaration (not a multiplication).
* lisp/progmodes/cc-fonts.el (c-font-lock-c++-using): No longer fontify the
last component of foo::bar with c-reference-face-name.
Eli Zaretskii [Wed, 5 Apr 2023 09:31:01 +0000 (12:31 +0300)]
; Improve documentation of 'declare-function'
* doc/lispref/functions.texi (Declaring Functions):
* lisp/subr.el (declare-function): Document explicitly that
ARGLIST argument, if provided, should include the parentheses.
Eli Zaretskii [Wed, 5 Apr 2023 08:31:15 +0000 (11:31 +0300)]
; Fix description of new 'keymap-*' functions
* doc/lispref/keymaps.texi (Prefix Keys): Fix example (bug#62673).
(Functions for Key Lookup): Clarify the possible values of KEYMAP
argument of 'keymap-lookup'.
(Active Keymaps): Fix typo in function name; add cross-reference.
Yuan Fu [Sat, 1 Apr 2023 23:22:50 +0000 (16:22 -0700)]
Modify chevron icons and add some more
* etc/images/symbols/chevron_left_16.svg:
* etc/images/symbols/chevron_right_16.svg: Make them shorter so that
they appear roughly the same size as up and down chevrons.
* etc/images/symbols/cross_circle_fill_16.svg:
* etc/images/symbols/heart_16.svg:
* etc/images/symbols/heart_fill_16.svg:
* etc/images/symbols/heart_half_16.svg:
* etc/images/symbols/minus_circle_fill_16.svg:
* etc/images/symbols/plus_circle_fill_16.svg: New icons.
João Távora [Sun, 2 Apr 2023 22:31:10 +0000 (23:31 +0100)]
Eglot: load built-in GNU ELPA dependencies explicitly
Because of outstanding bug#62576, it's way to easy for users to get
confused by the M-x package-install process for Eglot.
Whenever an Eglot release depends on a new version of a GNU ELPA :core
package which is _also_ provided built-in, M-x package-install will
install that dependency, but will not always load it on top of the
built-in one.
The solution is to not use "require" for now. This may potentially
lead to double "loads", but that should in principle be idempotent.
João Távora [Wed, 29 Mar 2023 18:30:04 +0000 (19:30 +0100)]
Eglot: improve caching in eglot-completion-at-point
When answering the :textDocument/completion request, LSP servers
provide a :isIncomplete flag in the response, which allows Eglot to
know if "further typing should result in recomputing [the completions]
list.
If :isIncomplete is false (i.e. the full set was returned), Eglot
caches the response in a global variable eglot--capf-cache that
persists for the duration of the "completion session", taken to be the
interval between two calls to completion-in-region-mode.
If the cache has been set, and Eglot detects that "further typing" has
happened, it is safe to use the cache instead of making a request to
the server.
Thus eglot--capf-cache-flush, added to completion-in-region-mode-hook,
is used to flush this cache. Since the popular Company completion
package doesn't use completion-in-region-mode, eglot--capf-cache-flush
is also added to its company-after-completion-hook.
* lisp/progmodes/eglot.el (eglot--managed-mode): Set
'completion-in-region-mode-hook and company-after-completion-hook.
(eglot--capf-cache): New variable.
(eglot--capf-cache-flush): New function.
(eglot-completion-at-point): Rework.
João Távora [Wed, 29 Mar 2023 21:48:54 +0000 (22:48 +0100)]
Eglot: remove hacky advice of jsonrpc-request
The vast majority of Eglot sync requests to the server need to inform
the server of any pending changes to the buffer beforehand, so that
the server has up-to-date information to do its job.
But doing so at the expense of ugly advice of jsonrpc-request is ill
advised. Introduce eglot--request helper instead and use that.
Use this opportunity to conduct a review of Eglot sync requests and
come to the conclusion that all need to send any changes beforehand.
Nevertheless, an IMMEDIATE kwarg to eglot--request was added to
bypassing this.
* lisp/progmodes/eglot.el
(eglot--request): New helper.
(eglot-shutdown)
(eglot-execute-command)
(eglot-workspace-configuration)
(eglot--signal-textDocument/willSave)
(eglot--workspace-symbols)
(eglot--lsp-xrefs-for-method)
(xref-backend-apropos)
(eglot-format)
(eglot-completion-at-point)
(eglot-imenu)
(eglot-rename)
(eglot-code-actions): Use eglot--request.
Jim Porter [Fri, 31 Mar 2023 02:38:30 +0000 (19:38 -0700)]
Use the 'interactive' spec to set arguments for 'eshell-command'
* lisp/eshell/eshell.el (eshell-read-command): New function...
(eshell-command): ... use it. Additionally, require the COMMAND
argument, and rename ARG to TO-CURRENT-BUFFER.
Jim Porter [Fri, 31 Mar 2023 02:31:30 +0000 (19:31 -0700)]
Fix using background commands in 'eshell-command'
This regressed due to the patch for bug#53715, which changed how
Eshell pipelines return the processes in the pipeline (bug#62556).
* lisp/eshell/esh-cmd.el (eshell-parse-command): When creating
background commands, wrap the process(es) in a cons cell whose CAR is
':eshell-background'. This lets us use fewer heuristics...
(eshell-eval-command): ... here. Additionally, keep the result and
the incomplete delimiter separate.
* lisp/eshell/eshell.el (eshell-command): Check ':eshell-background'
and use a more-robust method for setting the output target.
* test/lisp/eshell/eshell-tests.el (eshell-test/eshell-command/simple)
(eshell-test/eshell-command/pipeline)
(eshell-test/eshell-command/background)
(eshell-test/eshell-command/background-pipeline): New tests.
Stefan Monnier [Sun, 2 Apr 2023 21:54:02 +0000 (17:54 -0400)]
lisp/simple.el (inhibit-auto-fill): New var
* lisp/simple.el (inhibit-auto-fill): New var.
(internal-auto-fill): Obey it.
(newline): Use it instead of binding `auto-fill-function`, so
as to avoid messing up the state if something wants to enable/disable
`auto-fill-mode` during the course of the let binding (bug#62419).
Stefan Monnier [Sun, 2 Apr 2023 21:45:58 +0000 (17:45 -0400)]
src/eval.c: Fix bug#62419
Yup, almost 40 years after ELisp first combined them, buffer-local
and let bindings still don't work quite right :-(
The "automatically buffer-local if set" semantics should follow the
principle that it becomes buffer-local iff the var's current binding
refers to the top-level/global/non-let binding.
Jim Porter [Sat, 1 Apr 2023 04:32:44 +0000 (21:32 -0700)]
; Add tests for synchronous processes in Eshell
Normally, Eshell only uses synchronous processes on MS-DOS, so this is
hard to test. To get around this, let the tests explicitly request
synchronous processes.
* lisp/eshell/esh-proc.el (eshell-supports-asynchronous-processes):
New variable...
(eshell-gather-process-output): ... use it, and remove some incorrect
code updating Eshell's internal markers (the async code path doesn't
do this, so neither should the sync path).
* lisp/eshell/esh-cmd.el (eshell-execute-pipeline): Use
'eshell-supports-asynchronous-processes'.
* test/lisp/eshell/esh-proc-tests.el
(esh-proc-test/emacs-command): New function.
(esh-proc-test/emacs-echo, esh-proc-test/emacs-upcase): New variables.
(esh-proc-test/synchronous-proc/simple/interactive)
(esh-proc-test/synchronous-proc/simple/command-result)
(esh-proc-test/synchronous-proc/pipeline/interactive)
(esh-proc-test/synchronous-proc/pipeline/command-result): New tests.
Eshel Yaron [Fri, 31 Mar 2023 14:54:12 +0000 (17:54 +0300)]
Preserve peer information for web page in eww-readable
The :peer property in eww-data affects the face of the page title
in 'header-line-format' as set by 'eww-update-header-line-format'.
Preserving this property in eww-readable avoids having the header
line's appearance change when this command is called.
* lisp/net/eww.el (eww-readable): Preserve eww-data's :peer
property. (Bug#62574)
Jim Porter [Sun, 19 Mar 2023 02:18:28 +0000 (19:18 -0700)]
Avoid shadowing variables in some Eshell command forms
* lisp/eshell/esh-cmd.el (eshell-rewrite-for-command): Make
'for-items' an uninterned symbol.
(eshell-as-subcommand): Correct docstring.
(eshell-do-command-to-value): Mark obsolete.
(eshell-command-to-value): Move binding of 'value' outside of the
macro's result, and remove call to 'eshell-do-command-to-value'.
Jim Porter [Sat, 1 Apr 2023 17:28:02 +0000 (10:28 -0700)]
; Make sure 'eshell-command' tests don't prompt the user
* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/background)
(eshell-test/eshell-command/background-pipeline): Wait for the process
to finish.
Eli Zaretskii [Sat, 1 Apr 2023 06:24:38 +0000 (09:24 +0300)]
Fix new Eshell tests on MS-Windows
* test/lisp/eshell/eshell-tests.el (eshell-test/eshell-command/background)
(eshell-test/eshell-command/background-pipeline): Allow for ".exe"
in the program's name. This fixes these tests on MS-Windows.
Andrew G Cohen [Thu, 9 Mar 2023 08:05:31 +0000 (16:05 +0800)]
Reset 'gnus-current-window-configuration' on edit-form exit.
* lisp/gnus/gnus.el: New variable gnus-prev-cwc.
* lisp/gnus/gnus-art.el (gnus-article-edit-mode):
New local variable gnus-prev-cwc.
(gnus-article-edit-article): Store original
gnus-current-window-configuration as gnus-prev-cwc.
(gnus-article-edit-done, gnus-article-edit-exit): Restore
gnus-current-window-configuration from gnus-prev-cwc.
* lisp/gnus/gnus-eform.el (gnus-edit-form-mode):
New local variable gnus-prev-cwc.
(gnus-edit-form): Store original
gnus-current-window-configuration as gnus-prev-cwc.
(gnus-edit-form-done, gnus-edit-form-exit): Restore
gnus-current-window-configuration from gnus-prev-cwc.
Andrew G Cohen [Sun, 13 Mar 2022 23:59:25 +0000 (07:59 +0800)]
Use completion when mark limiting in gnus summary buffers
* lisp/gnus/gnus-sum.el (gnus-summary-limit-to-marks)
(gnus-summary-limit-exclude-marks): Use completing-read to complete on
marks in the current summary buffer.
Andrew G Cohen [Sun, 13 Mar 2022 23:47:39 +0000 (07:47 +0800)]
Track article while moving between gnus groups
* lisp/gnus/gnus-sum.el (gnus-current-move-article): New variable to
track article while moving.
(gnus-summary-move-article): Set gnus-current-move-article when
moving/copying/crossposting or respooling.
Use memcpy for loading unaligned words on platforms where this can be
done efficiently. This guards against problems arising from future
compiler autovectorisation improvements that might cause instructions
that require aligned addresses to be emitted, and should also work
with an address sanitiser enabled.
* src/fns.c (HAVE_FAST_UNALIGNED_ACCESS): Only define when optimising.
(load_unaligned_size_t): New.
(Fstring_lessp): Use load_unaligned_size_t.
* src/lisp.h (UNALIGNED_LOAD_SIZE): Remove now unused macro.
Bob Rogers [Fri, 31 Mar 2023 07:57:32 +0000 (09:57 +0200)]
Allow old input to include continuation lines in shell-mode
* lisp/shell.el (shell-get-old-input-include-continuation-lines): New
defcustom (default nil).
(shell-get-old-input): New function. Like
'comint-get-old-input-default' but include all continuation lines if
'shell-get-old-input-include-continuation-lines' is non-nil.
(shell-mode): Install shell-get-old-input. (Bug#61069)