Merge from origin/emacs-31

4f1af6fa6e ; * doc/lispref/commands.texi (Interactive Codes): Clarif...
75cd277198 markdown-ts-mode: fix code block and table overlays (bug#...
ae69929472 ; Improve code comment and 'winner-redo' docstring (bug#8...
ca7c8208b7 markdown-ts-mode: Fix computing code block current region...
c3bc049549 Eglot: add 'nu-ts-mode' as a nushell major mode
c0a33a474d Fix c-ts-mode bsd-style indentation of union bodies (bug#...
9d1b0c2d7f Fix markdown-inline incremental parsing issue (bug#81019)
a94a33827b Avoid an unusual error when visiting a directory in Dired
b6e7962700 Fix "diff-apply-buffer applies to the wrong file"
14bf2a707c Fix thinko in 'set-frame-size-and-position' (Bug#81193)
050ca1a40f ; Remove NS port toolbar styling code (bug#80307)
2ac289d096 Correct default native-comp tests
a25cf2b986 Revert "Fix the Android build"
a6f5437110 (comint--intersect-regions): Fix bug#81243
ea09986dae ; * lisp/window.el (display-buffer): Fix doc-string typo.
7b4e12b51c ; * lisp/help.el (temp-buffer-resize-mode): Fix doc-strin...
a8da2d20d0 ; * src/keyboard.c (Finsert_special_event): Fix quotes.
df60bad165 Update to Org 9.8.6
d48977dea8 src/keyboard.c (Finsert_special_event): Don't ignore unkn...
669e93ec5d Eglot: restore compatibility to Emacs 26.3
This commit is contained in:
Eli Zaretskii 2026-06-20 06:26:29 -04:00
commit 2ba2024558
23 changed files with 217 additions and 105 deletions

View file

@ -5145,19 +5145,6 @@ You can find the instructions on how to compile and install libgccjit from
source on this site:
<https://gcc.gnu.org/wiki/JIT>.])])
HAVE_NATIVE_COMP=no
LIBGCCJIT_LIBS=
LIBGCCJIT_CFLAGS=
if test "$canonical" = i686-pc-cygwin; then
if test "${with_cygwin32_native_compilation}" = yes; then
with_native_compilation=yes
elif test "${with_native_compilation}" != no; then
AC_MSG_ERROR([Native compilation is not supported on 32-bit Cygwin.
If you really want to try it anyway, use the configure option
'--with-cygwin32-native-compilation'.])
fi
fi
AC_DEFUN([libgccjit_not_found], [
AC_MSG_WARN([Elisp native compiler can't be enabled as libgccjit was not
found.
@ -5191,6 +5178,19 @@ source on this site:
with_native_compilation=no])
HAVE_NATIVE_COMP=no
LIBGCCJIT_LIBS=
LIBGCCJIT_CFLAGS=
if test "$canonical" = i686-pc-cygwin; then
if test "${with_cygwin32_native_compilation}" = yes; then
with_native_compilation=yes
elif test "${with_native_compilation}" != no; then
AC_MSG_ERROR([Native compilation is not supported on 32-bit Cygwin.
If you really want to try it anyway, use the configure option
'--with-cygwin32-native-compilation'.])
fi
fi
if test "$with_features" = "no" \
&& test "${with_native_compilation}" = "default"; then
with_native_compilation=no
@ -5234,24 +5234,23 @@ if test "${with_native_compilation}" != "no"; then
fi
# Check if libgccjit is available.
native_compilation_requested=${with_native_compilation}
AC_CHECK_LIB([gccjit], [gcc_jit_context_acquire], [],
[if test "${with_native_compilation}" = "default"; then
[if test "${native_compilation_requested}" = "default"; then
libgccjit_not_found
else
libgccjit_not_found_err
fi])
# `libgcc_not_found' may set `with_native_compilation' to `no'.
AS_IF([test "$with_native_compilation" != "no"],
[AC_CHECK_HEADERS([libgccjit.h], [],
[if test "${with_native_compilation}" = "default"; then
AC_CHECK_HEADERS([libgccjit.h], [],
[if test "${native_compilation_requested}" = "default"; then
libgccjit_dev_not_found
else
libgccjit_dev_not_found_err
fi])])
fi])
if test "${with_native_compilation}" != "no"; then
# Check if libgccjit really works.
AC_RUN_IFELSE([libgccjit_smoke_test], [],
[if test "${with_native_compilation}" = "default"; then
[if test "${native_compilation_requested}" = "default"; then
libgccjit_broken
else
libgccjit_broken_err

View file

@ -388,7 +388,16 @@ It is a single, isolated character.
@table @samp
@item *
Signal an error if the current buffer is read-only. Special.
Signal an error if the current buffer is read-only. Special. Note that
many Emacs primitives will signal an error if a command attempts to
modify text of a read-only buffer, even if the command's interactive
spec does not include @samp{*}. So this character is for when you want
to forcibly signal an error even if the command's implementation doesn't
invoke any primitives which modify the buffer. For example, a command
that binds @code{inhibit-read-only} non-@code{nil} (because it affects
more than just read-only buffers), or a command which, depending on the
conditions, might end up not modifying the buffer, but you want it to
signal this error anyway.
@item @@
Select the window mentioned in the first mouse event in the key

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode
\def\orgversionnumber{9.8.5}
\def\orgversionnumber{9.8.6}
\def\versionyear{2026} % latest update
\input emacsver.tex

View file

@ -4234,7 +4234,9 @@ function called, or nil, if no function was called (if BEG = END)."
(eq is-output
(eq (get-text-property (1+ end2) 'field) 'output)))
(setq end2 (field-end end2)))
;; Narrow to the whole field surrounding the region
;; Narrow to the whole field surrounding the region.
;; `syntax-propertize' can't widen so avoid the need to (bug#81243).
(syntax-propertize beg2)
(narrow-to-region beg2 end2))
(setq return-end (list (funcall fun beg1
(marker-position end1)))))

View file

@ -1459,10 +1459,20 @@ The return value is the target column for the file names."
;; (buffer-local), so we can call dired-readin:
(let ((failed t))
(unwind-protect
(progn (dired-readin)
(unless (and dired--ls-error-buffer
(get-buffer "*ls error*"))
(setq failed nil)))
(progn
;; `dired--ls-error-buffer' should only be set in
;; `insert-directory', and if `ls' errors and the buffer
;; displaying the error message pops ups,
;; `dired--ls-error-buffer' is then unset. But if for
;; some reason it gets set before the next Dired
;; buffer-display command is invoked, this can raise an
;; error, so ensure the variable is unset before reading
;; the directory contents into a Dired buffer.
(setq dired--ls-error-buffer nil)
(dired-readin)
(unless (and dired--ls-error-buffer
(get-buffer "*ls error*"))
(setq failed nil)))
;; If either `dired-readin' failed (e.g. if parent directories
;; are inaccessible) or `ls' errored, don't leave the Dired
;; buffer around.

View file

@ -1782,11 +1782,7 @@ resize and move FRAME."
(when negative
(setq gravity 3)
(setq left (- parent-or-display-width (- left)
(+ text-width
(frame-scroll-bar-width frame)
(frame-fringe-width frame)
(* 2 (frame-internal-border-width frame))
outer-minus-text-width))))
text-width outer-minus-text-width)))
(setq negative nil)
(cond
@ -1813,9 +1809,7 @@ resize and move FRAME."
;; This should get us 7 or 9.
(setq gravity (+ gravity 6))
(setq top (- parent-or-display-height (- top)
(+ text-height
(* 2 (frame-internal-border-width frame)))
outer-minus-text-height)))
text-height outer-minus-text-height)))
(set-frame-size-and-position-pixelwise
frame text-width text-height left top gravity)))

View file

@ -2007,7 +2007,7 @@ When this mode is enabled, a window is resized only if it has been
specially created for a temporary buffer. Windows that have shown
another buffer before being reused for displaying a temporary buffer
are not resized (but note that if `even-window-sizes' is non-nil, they
might beresized in some situations anyway). A frame is resized only
might be resized in some situations anyway). A frame is resized only
if `fit-frame-to-buffer' is non-nil.
This mode is used by `help', `apropos' and `completion' buffers,

View file

@ -2976,6 +2976,7 @@ used as a string to be appended to #+begin_example line."
(forward-line 0) (insert ": ") (forward-line 1)))
(t
(goto-char beg)
(unless (bolp) (insert "\n"))
(insert (if results-switches
(format "%s%s\n"
(funcall maybe-cap "#+begin_example")
@ -2984,7 +2985,9 @@ used as a string to be appended to #+begin_example line."
(let ((p (point)))
(if (markerp end) (goto-char end) (forward-char (- end beg)))
(org-escape-code-in-region p (point)))
(insert (funcall maybe-cap "#+end_example\n")))))))))
(unless (bolp) (insert "\n"))
(insert (funcall maybe-cap "#+end_example"))
(unless (eolp) (insert "\n")))))))))
(defun org-babel-update-block-body (new-body)
"Update the body of the current code block to NEW-BODY."

View file

@ -5,13 +5,13 @@
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
(let ((org-release "9.8.5"))
(let ((org-release "9.8.6"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
(let ((org-git-version "release_9.8.5"))
(let ((org-git-version "release_9.8.6"))
org-git-version))
(provide 'org-version)

View file

@ -9,7 +9,7 @@
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "28.2"))
;; Version: 9.8.5
;; Version: 9.8.6
;; This file is part of GNU Emacs.
;;
@ -9551,6 +9551,7 @@ When foo is written as FOO, upcase the #+BEGIN/END as well."
(goto-char region-end)
;; Ignore empty lines at the end of the region.
(skip-chars-backward " \r\t\n")
(unless (eolp) (insert "\n") (forward-line -1))
(end-of-line))
(unless (bolp) (insert "\n"))
(indent-to column)
@ -9877,7 +9878,8 @@ When called through Elisp, arg is also interpreted in the following way:
(org-update-parent-todo-statistics))
(when (bound-and-true-p org-clock-out-when-done)
(org-clock-out-if-current))
(run-hooks 'org-after-todo-state-change-hook)
(save-excursion
(run-hooks 'org-after-todo-state-change-hook))
(when (and arg (not (member org-state org-done-keywords)))
(setq head (org-get-todo-sequence-head org-state)))
(put-text-property (line-beginning-position)
@ -10583,7 +10585,8 @@ enough to shift date past today. Continue? "
(org-timestamp-change n (cdr (assoc what whata)) nil t))
(setq msg
(concat msg type " " org-last-changed-timestamp " ")))))))
(run-hooks 'org-todo-repeat-hook)
(save-excursion
(run-hooks 'org-todo-repeat-hook))
(setq org-log-post-message msg)
(message msg))))

View file

@ -1712,7 +1712,7 @@ Return the new header."
;; exclusively through ini files, return HEADER as-is.
(header (if (or language-ini-only
(not (stringp language-code))
(not (string-match "\\\\usepackage\\[\\(.*\\)\\]{babel}" header)))
(not (string-match "\\\\usepackage\\[\\([^]]*\\)\\]{babel}" header)))
header
(let ((options (save-match-data
(org-split-string (match-string 1 header) ",[ \t]*"))))

View file

@ -501,6 +501,7 @@ MODE can be `c' or `cpp'. STYLE can be `gnu', `k&r', `linux', `bsd'."
((parent-is ,(rx (or "function_definition"
"struct_specifier"
"enum_specifier"
"union_specifier"
"function_declarator"
"template_declaration")))
standalone-parent 0)

View file

@ -317,7 +317,7 @@ automatically)."
((toml-ts-mode conf-toml-mode) . ("tombi" "lsp"))
(nix-mode . ,(eglot-alternatives '("nil" "rnix-lsp" "nixd")))
(nickel-mode . ("nls"))
((nushell-mode nushell-ts-mode) . ("nu" "--lsp"))
((nushell-mode nushell-ts-mode nu-ts-mode) . ("nu" "--lsp"))
(gdscript-mode . ("localhost" 6008))
(fennel-mode . ("fennel-ls"))
(move-mode . ("move-analyzer"))
@ -2117,7 +2117,7 @@ and also used as a hint of the request cancellation mechanism (see
:timeout-fn (wrapfn timeout-fn)
moreargs)))
(when (and hint eglot-advertise-cancellation)
(push id (plist-get inflight hint)))
(push id (cl-getf inflight hint)))
id))
(cl-defun eglot--delete-overlays (&optional (prop 'eglot--overlays))

View file

@ -1600,19 +1600,14 @@ properties `markdown-ts-code-block-language' and
(markdown-ts--code-block-language-mode lang)))
(existing (seq-find (lambda (ov)
(overlay-get ov 'markdown-ts-code-block))
(overlays-at node-start))))
(overlays-in node-start node-end))))
(if existing
(progn
(move-overlay existing node-start node-end)
(overlay-put existing 'face face)
(overlay-put existing 'markdown-ts-code-block-language lang)
(overlay-put existing 'markdown-ts-code-block-mode mode))
(let ((ov (make-overlay node-start node-end nil t nil)))
;; Markers need to be set only once.
(overlay-put ov 'markdown-ts-code-beg-marker (set-marker (make-marker)
node-start))
(overlay-put ov 'markdown-ts-code-end-marker (set-marker (make-marker)
node-end))
(let ((ov (make-overlay node-start node-end nil nil t)))
(overlay-put ov 'markdown-ts-code-block t)
(overlay-put ov 'face face)
(overlay-put ov 'priority '(nil . 10))
@ -1623,7 +1618,8 @@ properties `markdown-ts-code-block-language' and
(defun markdown-ts-at-code-block-p (&optional pos)
"Return non nil if point is in a code block.
If POS is nil, use point."
(get-char-property (or pos (point)) 'markdown-ts-code-block))
(cl-some (lambda (ov) (overlay-get ov 'markdown-ts-code-block))
(overlays-at (or pos (point)))))
(defun markdown-ts-code-block-language-at (&optional pos)
"Return the language symbol of the code block at POS.
@ -1631,14 +1627,18 @@ If POS is nil, use point. Returns nil if POS is not inside a fenced
code block. This works regardless of whether a guest tree-sitter parser
is active, since the language is stored on the code block overlay by the
host parser's fontification."
(get-char-property (or pos (point)) 'markdown-ts-code-block-language))
(cl-some (lambda (ov) (overlay-get ov 'markdown-ts-code-block-language))
(overlays-at (or pos (point)))))
(defun markdown-ts-code-block-mode-at (&optional pos)
"Return the major mode for the code block at POS.
If POS is nil, use point. Returns nil if POS is not inside a fenced
code block or if the language has no recognized mode."
code block, or `markdown-ts-default-code-block-mode' if the language has
no recognized mode."
(setq pos (or pos (point)))
(when (markdown-ts-at-code-block-p pos)
(or (get-char-property (or pos (point)) 'markdown-ts-code-block-mode)
(or (cl-some (lambda (ov) (overlay-get ov 'markdown-ts-code-block-mode))
(overlays-at pos))
markdown-ts-default-code-block-mode)))
(defun markdown-ts--host-ranges-notifier (ranges _parser)
@ -2901,8 +2901,8 @@ node as a non-ts mode."
(mode (alist-get lang markdown-ts--code-block-non-ts-modes))
(tick (buffer-chars-modified-tick))
(block-start (treesit-node-start node))
;; Cannot use markers 'markdown-ts-code-beg-marker
;; 'markdown-ts-code-end-marker they are set after this
;; Cannot rely on anything set in
;; `markdown-ts--fontify-code-block' that runs after this
;; function runs.
(node-start (save-excursion
(goto-char (treesit-node-start node))
@ -3098,6 +3098,8 @@ See `markdown-ts--run-command-in-code-block'.")
(defun markdown-ts--enable-code-block-in-context-mode ()
"Enable `markdown-ts-code-block-in-context-mode' if in a fenced code block."
;; Let treesit catch up with buffer edits.
(sit-for 0)
(markdown-ts-code-block-in-context-mode
(if (markdown-ts-at-code-block-p) 1 -1)))
@ -3198,8 +3200,12 @@ command will run in the context of the `markdown-ts-mode' buffer."
(defun markdown-ts--run-command-in-code-block (block-mode command &rest args)
"Run COMMAND in BLOCK-MODE.
ARGS are captured by `markdown-ts--maybe-run-command-in-code-block'."
(when-let* ((beg (get-char-property (point) 'markdown-ts-code-beg-marker))
(end (get-char-property (point) 'markdown-ts-code-end-marker))
(when-let* ((ov (cl-some
(lambda (ov)
(when (overlay-get ov 'markdown-ts-code-block) ov))
(overlays-at (point))))
(beg (overlay-start ov))
(end (overlay-end ov))
(str (buffer-substring-no-properties beg end)))
;; Use a temp (or work) buffer because treesit currently confuses
;; nodes in an indirect buffer even if the indirect buffer is not
@ -3212,8 +3218,8 @@ ARGS are captured by `markdown-ts--maybe-run-command-in-code-block'."
(region-end (use-region-end))
(adj-point (1+ (- orig-point beg)))
(adj-mark (when orig-mark (1+ (- orig-mark beg))))
(adj-region-beg (when region-beg (1+ (- orig-point region-beg))))
(adj-region-end (when region-end (1+ (- orig-point region-end))))
(adj-region-beg (when region-beg (1+ (- region-beg beg))))
(adj-region-end (when region-end (1+ (- region-end beg))))
(point-delta 0)
(ignore-output
(memq command markdown-ts-code-block-ignore-output-commands))
@ -5491,20 +5497,24 @@ This enables the keymap `markdown-ts-code-block-in-context-mode-map'."
(defun markdown-ts--code-block-in-context-mode-update-ov ()
"Manage `markdown-ts--code-block-in-context-mode-ov'."
(cond (markdown-ts-code-block-in-context-mode
(let ((beg (get-char-property (point) 'markdown-ts-code-beg-marker))
(end (get-char-property (point) 'markdown-ts-code-end-marker)))
(when-let* ((ov (cl-some
(lambda (ov)
(when (overlay-get ov 'markdown-ts-code-block) ov))
(overlays-at (point))))
(beg (overlay-start ov))
(end (overlay-end ov)))
(if markdown-ts--code-block-in-context-mode-ov
(move-overlay markdown-ts--code-block-in-context-mode-ov beg end)
(setq markdown-ts--code-block-in-context-mode-ov
(make-overlay beg end nil t nil)))
(overlay-put markdown-ts--code-block-in-context-mode-ov
'markdown-ts-in-code-block t)
(overlay-put markdown-ts--code-block-in-context-mode-ov
'evaporate t)
(overlay-put markdown-ts--code-block-in-context-mode-ov
'priority '(nil . 20))
(overlay-put markdown-ts--code-block-in-context-mode-ov
'face 'markdown-ts-in-code-block)))
(make-overlay beg end nil nil t))
(overlay-put markdown-ts--code-block-in-context-mode-ov
'markdown-ts-in-code-block t)
(overlay-put markdown-ts--code-block-in-context-mode-ov
'evaporate t)
(overlay-put markdown-ts--code-block-in-context-mode-ov
'priority '(nil . 20))
(overlay-put markdown-ts--code-block-in-context-mode-ov
'face 'markdown-ts-in-code-block))))
(t
(when markdown-ts--code-block-in-context-mode-ov
(delete-overlay markdown-ts--code-block-in-context-mode-ov)))))
@ -5586,22 +5596,21 @@ It is up to this function's callers to call
(end (treesit-node-end table)))
(if markdown-ts--in-table-mode-ov
;; Move the overlay, if needed, and reset the tick if so.
(when (not (eq (overlay-start markdown-ts--in-table-mode-ov)
beg))
(unless (and (eq (overlay-start markdown-ts--in-table-mode-ov) beg)
(eq (overlay-end markdown-ts--in-table-mode-ov) end))
(move-overlay markdown-ts--in-table-mode-ov beg end)
(overlay-put markdown-ts--in-table-mode-ov
'markdown-ts-in-table-tick nil))
(setq markdown-ts--in-table-mode-ov
(make-overlay beg end nil t nil)))
(overlay-put markdown-ts--in-table-mode-ov
'markdown-ts-in-table t)
(overlay-put markdown-ts--in-table-mode-ov
'evaporate t)
(overlay-put markdown-ts--in-table-mode-ov
'priority '(nil . 20))
(overlay-put markdown-ts--in-table-mode-ov
'face 'markdown-ts-in-table)
))
(make-overlay beg end nil t t))
(overlay-put markdown-ts--in-table-mode-ov
'markdown-ts-in-table t)
(overlay-put markdown-ts--in-table-mode-ov
'evaporate t)
(overlay-put markdown-ts--in-table-mode-ov
'priority '(nil . 20))
(overlay-put markdown-ts--in-table-mode-ov
'face 'markdown-ts-in-table))))
(t
(when markdown-ts--in-table-mode-ov
(delete-overlay markdown-ts--in-table-mode-ov)))))

View file

@ -680,6 +680,11 @@ If none are valid, return nil."
;;; Range API supplement
;; See bug#81019.
(defvar treesit--embed-languages-need-full-parse '(markdown-inline)
"Languages that requires a full parse when used as embedded languages.
This variable is not intended for general use.")
(defvar treesit--range-verbose nil
"If non-nil, print verbose debugging info for setting ranges.
Useful when your multi-parser setup doesn't seem to work.")
@ -1094,6 +1099,14 @@ RANGES is a list of (START . END) or just (START . END)."
(when (and (null new-ranges) treesit--range-verbose)
(message "Setting empty ranges to %s\nRanges for embedded parser :%s\nRanges for host parser: %s\nIntersection is empty"
new-ranges-1 embed-parser host-parser))
;; Due to some tree-sitter bug[1], we need to force a full reparse for
;; some languages to get a correct parse tree.
;; [1] https://github.com/tree-sitter/tree-sitter/issues/5636
(when (memq (treesit-parser-language embed-parser)
treesit--embed-languages-need-full-parse)
(treesit-parser-set-included-ranges
embed-parser `((,(point-min) . ,(point-min))))
(treesit-parser-root-node embed-parser))
;; When there's no range for the embedded language, set it's range
;; to a dummy (1 . 1), otherwise it would be set to the whole
;; buffer, which is not what we want.

View file

@ -1176,6 +1176,10 @@ PREFIX is only used internally: don't use it."
(or (ignore-errors (diff-beginning-of-file))
(re-search-forward diff-file-header-re nil t)))
(let ((fs (diff-hunk-file-names old)))
(when (memq diff-buffer-type '(git hg))
(setq fs
(mapcar (lambda (f) (replace-regexp-in-string "\\`[icoawib]/" "" f))
fs)))
(if prefix (setq fs (mapcar (lambda (f) (concat prefix f)) fs)))
(or
;; use any previously used preference
@ -1186,7 +1190,10 @@ PREFIX is only used internally: don't use it."
(if (and newfile (file-exists-p newfile)) (cl-return newfile))))
;; look for each file in turn. If none found, try again but
;; ignoring the first level of directory, ...
(cl-do* ((files fs (delq nil (mapcar #'diff-filename-drop-dir files)))
(cl-do* ((files fs (and (not (and (memq diff-buffer-type '(git hg))
(not old)
(equal null-device (cadr files))))
(delq nil (mapcar #'diff-filename-drop-dir files))))
(file nil nil))
((or (null files)
(setq file (cl-do* ((files files (cdr files))
@ -1212,10 +1219,6 @@ PREFIX is only used internally: don't use it."
(let ((file (or (car fs) ""))
(creation (equal null-device
(car (diff-hunk-file-names (not old))))))
(when (and (memq diff-buffer-type '(git hg))
(string-match "/" file))
;; Strip the dst prefix (like b/) if diff is from Git/Hg.
(setq file (substring file (match-end 0))))
(setq file (expand-file-name file))
(setq file
(read-file-name (format "Use file %s: " file)
@ -1822,7 +1825,7 @@ modified lines of the diff."
(setq-local diff-buffer-type
(if (re-search-forward "^diff --git" nil t)
'git
(if (re-search-forward "^diff -r.*-r" nil t)
(if (re-search-forward "^diff -r " nil t)
'hg
nil))))
(when (eq diff-buffer-type 'git)

View file

@ -8273,7 +8273,7 @@ Action alist entries are:
and `shrink-window-if-larger-than-buffer'.
\\+`window-width' -- The value specifies the desired width of the
window chosen and is either an integer (the total width of
the window specified in frame lines), a floating point
the window specified in frame columns), a floating point
number (the fraction of its total width with respect to the
width of the frame's root window), a cons cell whose car is
`body-columns' and whose cdr is an integer that specifies the

View file

@ -272,8 +272,8 @@ You may want to include buffer names such as *Help*, *Apropos*,
;; Make sure point does not end up in the minibuffer and delete
;; windows displaying dead or boring buffers
;; (cf. `winner-boring-buffers') and `winner-boring-buffers-regexp'.
;; windows displaying dead or boring buffers,
;; cf. `winner-boring-buffers' and `winner-boring-buffers-regexp'.
;; Return nil if all the windows should be deleted. Preserve correct
;; points and marks.
(defun winner-set (conf)
@ -425,7 +425,10 @@ In other words, \"undo\" changes in window configuration."
(defun winner-redo () ; If you change your mind.
"Restore a more recent window configuration saved by Winner mode."
"Cancel the current sequence of `winner-undo' commands.
This restores the window configuration before that sequence. If any
other command has intervened, `winner-redo' is no longer applicable;
but the configuration can then be restored with `winner-undo'."
(interactive)
(cond
((eq last-command 'winner-undo)

View file

@ -12100,7 +12100,11 @@ Only 'input_event' slots KIND and ARG are set. */)
CHECK_CONS (event);
if (NILP (access_keymap
(get_keymap (Vspecial_event_map, 0, 1), event, 0, 0, 1)))
signal_error ("Invalid event kind", XCAR (event));
/* FIXME: Remove this check. Since 'special-event-map' may change
between now and the moment we process the event, this check is
unreliable, and it's redundant anyway since we check below
if EVENT is one of the supported ones. */
signal_error ("Invalid special event kind", XCAR (event));
/* Construct an input event. */
struct input_event ie;
@ -12137,7 +12141,7 @@ Only 'input_event' slots KIND and ARG are set. */)
: EQ (XCAR (event), Qfocus_out) ? FOCUS_OUT_EVENT
: EQ (XCAR (event), Qmove_frame) ? MOVE_FRAME_EVENT
: EQ (XCAR (event), Qsleep_event) ? SLEEP_EVENT
: NO_EVENT);
: (signal_error ("Invalid special event kind", XCAR (event)), NO_EVENT));
ie.frame_or_window = Qnil;
ie.arg = CDR (event);

View file

@ -9827,14 +9827,6 @@ - (instancetype) initWithEmacsFrame: (struct frame *) f
#ifdef NS_IMPL_COCOA
if ([self respondsToSelector:@selector(setTabbingMode:)])
[self setTabbingMode:NSWindowTabbingModeDisallowed];
#endif
/* Always show the toolbar below the window title. This is needed
on Mac OS 11+ where the toolbar style is decided by the system
(which is unpredictable) and the newfangled "compact" toolbar
may be chosen (which is undesirable). */
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 110000
if ([self respondsToSelector:@selector(setToolbarStyle:)])
[self setToolbarStyle: NSWindowToolbarStyleExpanded];
#endif
}

View file

@ -820,5 +820,15 @@ of the value of `dired-auto-toggle-b-switch'."
(let ((dired-auto-toggle-b-switch nil))
(dired-test--filename-with-backslash-n)))
(ert-deftest dired-test-set-dired--ls-error-buffer () ; bug#80499, Message #218
"Test visiting a directory after setting `dired--ls-error-buffer'."
(let ((dir (ert-resource-file (file-name-as-directory "test-dir"))))
(make-directory dir t)
(setq dired--ls-error-buffer (get-buffer-create "*ls error*"))
(find-file dir)
(should (equal list-buffers-directory dir))
(kill-buffer (current-buffer))
(delete-directory dir)))
(provide 'dired-tests)
;;; dired-tests.el ends here

View file

@ -125,3 +125,12 @@ if (true)
else
break;
=-=-=
Name: Union (bug#81255)
=-=
union u
{
int i;
};
=-=-=

View file

@ -744,5 +744,53 @@ plum
(set-buffer-modified-p nil)
(kill-buffer buf-after))))))
(ert-deftest diff-mode-test-setup-buffer-type ()
"Check that `diff-setup-buffer-type' recognizes the diff's origin."
(with-temp-buffer
(insert "diff --git a/foo b/foo\n--- a/foo\n+++ b/foo\n")
(diff-mode)
(should (eq diff-buffer-type 'git)))
(with-temp-buffer
(insert "diff -r 0123456789ab foo\n--- a/foo\n+++ b/foo\n")
(diff-mode)
(should (eq diff-buffer-type 'hg)))
(with-temp-buffer
(insert "--- foo\n+++ foo\n@@ -1 +1 @@\n-a\n+b\n")
(diff-mode)
(should (eq diff-buffer-type nil))))
(ert-deftest diff-mode-test-find-file-name-create ()
"Check `diff-find-file-name' for a Git/Hg file creation.
It should not use existing file without subdirectory."
(ert-with-temp-directory temp-dir
(let ((default-directory temp-dir)
call-dir call-initial call-mustmatch)
;; A decoy with the same basename as the created file, but in a
;; different directory.
(with-temp-file (expand-file-name "created.txt" temp-dir)
(insert "decoy\n"))
(with-temp-buffer
(insert "diff --git a/sub/created.txt b/sub/created.txt
new file mode 100644
index 0000000..3456789
--- /dev/null
+++ b/sub/created.txt
@@ -0,0 +1 @@
+new
")
(diff-mode)
(goto-char (point-min))
(let ((read-file-name-function
(lambda (_p &optional dir _def mustmatch initial _pred)
(setq call-dir dir
call-initial initial
call-mustmatch mustmatch)
"magic")))
(should (equal (diff-find-file-name)
"magic"))
(should (equal call-dir (expand-file-name "sub/" temp-dir)))
(should (equal call-initial "created.txt"))
(should (equal call-mustmatch nil)))))))
(provide 'diff-mode-tests)
;;; diff-mode-tests.el ends here