commit 009236502ef960c18e0e0070fdbc4fe6e4adc969 (HEAD, refs/remotes/origin/master) Author: Michael Albinus Date: Tue Aug 1 20:25:34 2023 +0200 Mark Tramp test :unstable * test/lisp/net/tramp-tests.el (tramp-test47-read-password): Mark it :unstable. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index ee9c09df9d8..d97785ee481 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -7848,7 +7848,7 @@ tramp-test46-dired-compress-dir (ert-deftest tramp-test47-read-password () "Check Tramp password handling." - :tags '(:expensive-test) + :tags '(:expensive-test :unstable) (skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-mock-p)) ;; Not all read commands understand argument "-s" or "-p". commit d83ceba705e3f4917b063680aec7522c620f4c65 Author: Michael Albinus Date: Tue Aug 1 20:24:44 2023 +0200 Add more `tramp-suppress-trace' properties in Tramp * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist): Use `tramp-archive-handle-file-symlink-p'. (tramp-archive-handle-file-symlink-p): New defun. * lisp/net/tramp-cache.el (tramp-loaddefs): Don't require. (tramp-get-hash-table, tramp-cache-print) (tramp-dump-connection-properties): Declare `tramp-suppress-trace' property. * lisp/net/tramp-cmds.el (tramp-cleanup-dired-buffer-p) (tramp-delete-tainted-remote-process-buffer-function): Declare `tramp-suppress-trace' property. * lisp/net/tramp-compat.el (tramp-loaddefs): Require. (tramp-error): Declare. * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler): Fix typo. * lisp/net/tramp-integration.el (tramp-rfn-eshadow-setup-minibuffer) (tramp-rfn-eshadow-update-overlay-regexp) (tramp-rfn-eshadow-update-overlay): Declare `tramp-suppress-trace' property. * lisp/net/tramp-message.el (tramp-compat): Require (instead of tramp-loaddefs.el). (tramp-compat-string-replace, tramp-compat-temporary-file-directory): Don't declare. (tramp-byte-run--set-suppress-trace): Move to tramp.el. (tramp-debug-outline-level) (tramp-debug-buffer-command-completion-p, tramp-message) (tramp-debug-button-action, tramp-debug-link-messages) (tramp-debug-message-buttonize): Declare `tramp-suppress-trace' property. * lisp/net/tramp.el (tramp-byte-run--set-suppress-trace): New defun, moved from tramp-message.el. (tramp-file-name-unify, tramp-file-name-equal-p) (tramp-tramp-file-p, tramp-find-method, tramp-find-user) (tramp-find-host, tramp-dissect-file-name) (tramp-ensure-dissected-file-name, tramp-buffer-name) (tramp-delete-temp-file-function, tramp-time-diff): Declare `tramp-suppress-trace' property. diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el index 6fcb0ae5e69..590544f199f 100644 --- a/lisp/net/tramp-archive.el +++ b/lisp/net/tramp-archive.el @@ -263,7 +263,7 @@ tramp-archive-file-name-handler-alist (file-regular-p . tramp-handle-file-regular-p) ;; `file-remote-p' performed by default handler. (file-selinux-context . tramp-handle-file-selinux-context) - (file-symlink-p . tramp-handle-file-symlink-p) + (file-symlink-p . tramp-archive-handle-file-symlink-p) (file-system-info . tramp-archive-handle-file-system-info) (file-truename . tramp-archive-handle-file-truename) (file-user-uid . tramp-archive-handle-file-user-uid) @@ -666,6 +666,10 @@ tramp-archive-handle-file-readable-p "Like `file-readable-p' for file archives." (file-readable-p (tramp-archive-gvfs-file-name filename))) +(defun tramp-archive-handle-file-symlink-p (filename) + "Like `file-symlink-p' for file archives." + (file-symlink-p (tramp-archive-gvfs-file-name filename))) + (defun tramp-archive-handle-file-system-info (filename) "Like `file-system-info' for file archives." (with-parsed-tramp-archive-file-name filename nil diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index e0d38853956..8282e9c87ff 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -80,7 +80,6 @@ ;;; Code: (require 'tramp-compat) -(require 'tramp-loaddefs) (require 'time-stamp) ;;; -- Cache -- @@ -125,6 +124,7 @@ tramp-get-hash-table If it doesn't exist yet, it is created and initialized with matching entries of `tramp-connection-properties'. If KEY is `tramp-cache-undefined', don't create anything, and return nil." + (declare (tramp-suppress-trace t)) (unless (eq key tramp-cache-undefined) (or (gethash key tramp-cache-data) (let ((hash @@ -506,6 +506,7 @@ with-tramp-saved-connection-properties ;;;###tramp-autoload (defun tramp-cache-print (table) "Print hash table TABLE." + ;; (declare (tramp-suppress-trace t)) (when (hash-table-p table) (let (result) (maphash @@ -538,6 +539,11 @@ tramp-cache-print table) result))) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-cache-print 'tramp-suppress-trace t) + ;;;###tramp-autoload (defun tramp-list-connections () "Return all active `tramp-file-name' structs according to `tramp-cache-data'." @@ -553,6 +559,7 @@ tramp-list-connections (defun tramp-dump-connection-properties () "Write persistent connection properties into file \ `tramp-persistency-file-name'." + (declare (tramp-suppress-trace t)) ;; We shouldn't fail, otherwise Emacs might not be able to be closed. (ignore-errors (when (and (hash-table-p tramp-cache-data) diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 3c9b9e984e6..87651d60328 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -221,6 +221,7 @@ tramp-cleanup-some-buffers-hook (defun tramp-cleanup-dired-buffer-p () "Return t if current buffer runs `dired-mode'." + (declare (tramp-suppress-trace t)) (derived-mode-p 'dired-mode)) (add-hook 'tramp-cleanup-some-buffers-hook @@ -231,14 +232,21 @@ tramp-tainted-remote-process-buffers (defun tramp-delete-tainted-remote-process-buffer-function () "Delete current buffer from `tramp-tainted-remote-process-buffers'." + (declare (tramp-suppress-trace t)) (setq tramp-tainted-remote-process-buffers (delete (current-buffer) tramp-tainted-remote-process-buffers))) ;;;###tramp-autoload (defun tramp-taint-remote-process-buffer (buffer) "Mark buffer as related to remote processes." + ;; (declare (tramp-suppress-trace t)) (add-to-list 'tramp-tainted-remote-process-buffers buffer)) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-taint-remote-process-buffer 'tramp-suppress-trace t) + (add-hook 'kill-buffer-hook #'tramp-delete-tainted-remote-process-buffer-function) (add-hook 'tramp-unload-hook diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index 85ddb81f398..5bd3dff3d21 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -29,6 +29,7 @@ ;;; Code: +(require 'tramp-loaddefs) (require 'ansi-color) (require 'auth-source) (require 'format-spec) @@ -36,7 +37,7 @@ (require 'shell) (require 'xdg) -(declare-function tramp-error "tramp") +(declare-function tramp-error "tramp-message") (declare-function tramp-tramp-file-p "tramp") (defvar tramp-temp-name-prefix) diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el index c85f566c4d5..79eafc5c12e 100644 --- a/lisp/net/tramp-crypt.el +++ b/lisp/net/tramp-crypt.el @@ -281,7 +281,7 @@ tramp-crypt-file-name-handler (assoc operation tramp-crypt-file-name-handler-alist)))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) - (prog1 (tramp-run-real-handler operation args) + (prog1 (tramp-crypt-run-real-handler operation args) (setq tramp-debug-message-fnh-function operation)))) ;;;###tramp-autoload diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el index d7fcd8afefa..c73c86a9110 100644 --- a/lisp/net/tramp-integration.el +++ b/lisp/net/tramp-integration.el @@ -65,6 +65,7 @@ tramp-rfn-eshadow-setup-minibuffer "Set up a minibuffer for `file-name-shadow-mode'. Adds another overlay hiding filename parts according to Tramp's special handling of `substitute-in-file-name'." + (declare (tramp-suppress-trace t)) (when minibuffer-completing-file-name (setq tramp-rfn-eshadow-overlay (make-overlay (minibuffer-prompt-end) (minibuffer-prompt-end))) @@ -86,6 +87,7 @@ tramp-rfn-eshadow-setup-minibuffer (defun tramp-rfn-eshadow-update-overlay-regexp () "An overlay covering the shadowed part of the filename." + (declare (tramp-suppress-trace t)) (rx-to-string `(: (* (not (any ,tramp-postfix-host-format "/~"))) (| "/" "~")))) @@ -94,6 +96,7 @@ tramp-rfn-eshadow-update-overlay This is intended to be used as a minibuffer `post-command-hook' for `file-name-shadow-mode'; the minibuffer should have already been set up by `rfn-eshadow-setup-minibuffer'." + (declare (tramp-suppress-trace t)) ;; In remote files name, there is a shadowing just for the local part. (ignore-errors (let ((end (or (overlay-end rfn-eshadow-overlay) diff --git a/lisp/net/tramp-message.el b/lisp/net/tramp-message.el index cf90db1d6b1..cca22a28d7c 100644 --- a/lisp/net/tramp-message.el +++ b/lisp/net/tramp-message.el @@ -47,25 +47,13 @@ ;;; Code: -(require 'tramp-loaddefs) +(require 'tramp-compat) (require 'help-mode) -(declare-function tramp-compat-string-replace "tramp-compat") (declare-function tramp-file-name-equal-p "tramp") (declare-function tramp-file-name-host-port "tramp") (declare-function tramp-file-name-user-domain "tramp") (declare-function tramp-get-default-directory "tramp") -(defvar tramp-compat-temporary-file-directory) - -(eval-and-compile - (defalias 'tramp-byte-run--set-suppress-trace - #'(lambda (f _args val) - (list 'function-put (list 'quote f) - ''tramp-suppress-trace val))) - - (add-to-list - 'defun-declarations-alist - (list 'tramp-suppress-trace #'tramp-byte-run--set-suppress-trace))) ;;;###tramp-autoload (defcustom tramp-verbose 3 @@ -132,6 +120,7 @@ tramp-debug-outline-level Point must be at the beginning of a header line. The outline level is equal to the verbosity of the Tramp message." + (declare (tramp-suppress-trace t)) (1+ (string-to-number (match-string 3)))) ;; This function takes action since Emacs 28.1, when @@ -140,6 +129,7 @@ tramp-debug-outline-level (defun tramp-debug-buffer-command-completion-p (_symbol buffer) "A predicate for Tramp interactive commands. They are completed by \"M-x TAB\" only in Tramp debug buffers." + (declare (tramp-suppress-trace t)) (with-current-buffer buffer (string-equal (buffer-substring (point-min) (min (+ (point-min) 10) (point-max))) @@ -306,6 +296,7 @@ tramp-message Calls functions `message' and `tramp-debug-message' with FMT-STRING as control string and the remaining ARGUMENTS to actually emit the message (if applicable)." + ;; (declare (tramp-suppress-trace t)) (ignore-errors (when (<= level tramp-verbose) ;; Display only when there is a minimum level, and the progress @@ -346,8 +337,10 @@ tramp-message (concat (format "(%d) # " level) fmt-string) arguments)))))) -;; We cannot declare our private symbols in loaddefs. -(function-put 'tramp-message 'tramp-suppress-trace t) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-message 'tramp-suppress-trace t) (defsubst tramp-backtrace (&optional vec-or-proc force) "Dump a backtrace into the debug buffer. @@ -473,6 +466,7 @@ tramp-test-message (defun tramp-debug-button-action (button) "Goto the linked message in debug buffer at place." + (declare (tramp-suppress-trace t)) (when (mouse-event-p last-input-event) (mouse-set-point last-input-event)) (when-let ((point (button-get button 'position))) (goto-char point))) @@ -485,6 +479,7 @@ 'tramp-debug-button-type (defun tramp-debug-link-messages (pos1 pos2) "Set links for two messages in current buffer. The link buttons are in the verbositiy level substrings." + (declare (tramp-suppress-trace t)) (save-excursion (let (beg1 end1 beg2 end2) (goto-char pos1) @@ -518,6 +513,7 @@ tramp-debug-message-fnh-function (defun tramp-debug-message-buttonize (position) "Buttonize function in current buffer, at next line starting after POSTION." + (declare (tramp-suppress-trace t)) (save-excursion (goto-char position) (while (not (search-forward-regexp diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 00b47f6bead..0267b69340d 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -87,15 +87,6 @@ tramp-completion-file-name-regexp ;;;###autoload (when (featurep 'tramp-compat) ;;;###autoload (load "tramp-compat" 'noerror 'nomessage)) -;;; User Customizable Internal Variables: - -(defgroup tramp nil - "Edit remote files with a combination of ssh, scp, etc." - :group 'files - :group 'comm - :version "22.1" - :link '(custom-manual "(tramp)Top")) - ;;;###tramp-autoload (progn (defvar tramp--startup-hook nil @@ -105,9 +96,26 @@ tramp (defmacro tramp--with-startup (&rest body) "Schedule BODY to be executed at the end of tramp.el." - `(add-hook 'tramp--startup-hook (lambda () ,@body)))) + `(add-hook 'tramp--startup-hook (lambda () ,@body))) -(require 'tramp-loaddefs) + (eval-and-compile + (defalias 'tramp-byte-run--set-suppress-trace + #'(lambda (f _args val) + (list 'function-put (list 'quote f) + ''tramp-suppress-trace val))) + + (add-to-list + 'defun-declarations-alist + (list 'tramp-suppress-trace #'tramp-byte-run--set-suppress-trace)))) + +;;; User Customizable Internal Variables: + +(defgroup tramp nil + "Edit remote files with a combination of ssh, scp, etc." + :group 'files + :group 'comm + :version "22.1" + :link '(custom-manual "(tramp)Top")) ;; Maybe we need once a real Tramp mode, with key bindings etc. ;;;###autoload @@ -1480,6 +1488,7 @@ tramp-file-name-unify LOCALNAME is a relative file name, return `tramp-cache-undefined'. Objects returned by this function compare `equal' if they refer to the same connection. Make a copy in order to avoid side effects." + ;; (declare (tramp-suppress-trace t)) (if (and (stringp localname) (not (file-name-absolute-p localname))) (setq vec tramp-cache-undefined) @@ -1491,13 +1500,16 @@ tramp-file-name-unify (tramp-file-name-hop vec) nil)) vec)) -;; We cannot declare our private symbols in loaddefs. -(function-put 'tramp-file-name-unify 'tramp-suppress-trace t) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-file-name-unify 'tramp-suppress-trace t) ;; Comparison of file names is performed by `tramp-equal-remote'. (defun tramp-file-name-equal-p (vec1 vec2) "Check, whether VEC1 and VEC2 denote the same `tramp-file-name'. LOCALNAME and HOP do not count." + (declare (tramp-suppress-trace t)) (and (tramp-file-name-p vec1) (tramp-file-name-p vec2) (equal (tramp-file-name-unify vec1) (tramp-file-name-unify vec2)))) @@ -1526,6 +1538,7 @@ tramp-file-name-unquote-localname ;;;###tramp-autoload (defun tramp-tramp-file-p (name) "Return t if NAME is a string with Tramp file name syntax." + ;; (declare (tramp-suppress-trace t)) (and tramp-mode (stringp name) ;; No "/:" and "/c:". This is not covered by `tramp-file-name-regexp'. (not (string-match-p (rx bos "/" (? alpha) ":") name)) @@ -1535,6 +1548,11 @@ tramp-tramp-file-p (string-match-p tramp-file-name-regexp name) t)) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-tramp-file-p 'tramp-suppress-trace t) + ;; This function bypasses the file name handler approach. It is NOT ;; recommended to use it in any package if not absolutely necessary. ;; However, it is more performant than `file-local-name', and might be @@ -1563,6 +1581,7 @@ tramp-find-method "Return the right method string to use depending on USER and HOST. This is METHOD, if non-nil. Otherwise, do a lookup in `tramp-default-method-alist' and `tramp-default-method'." + (declare (tramp-suppress-trace t)) (when (and method (or (string-empty-p method) (string-equal method tramp-default-method-marker))) @@ -1588,6 +1607,7 @@ tramp-find-user "Return the right user string to use depending on METHOD and HOST. This is USER, if non-nil. Otherwise, do a lookup in `tramp-default-user-alist' and `tramp-default-user'." + (declare (tramp-suppress-trace t)) (let ((result (or user (let ((choices tramp-default-user-alist) @@ -1609,6 +1629,7 @@ tramp-find-host "Return the right host string to use depending on METHOD and USER. This is HOST, if non-nil. Otherwise, do a lookup in `tramp-default-host-alist' and `tramp-default-host'." + (declare (tramp-suppress-trace t)) (let ((result (or (and (tramp-compat-length> host 0) host) (let ((choices tramp-default-host-alist) @@ -1635,6 +1656,7 @@ tramp-dissect-file-name Unless NODEFAULT is non-nil, method, user and host are expanded to their default values. For the other file name parts, no default values are used." + ;; (declare (tramp-suppress-trace t)) (save-match-data (unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a Tramp file name: \"%s\"" name)) @@ -1691,8 +1713,10 @@ tramp-dissect-file-name (tramp-user-error v "Method `%s' is not supported for multi-hops" method))))))) -;; We cannot declare our private symbols in loaddefs. -(function-put 'tramp-dissect-file-name 'tramp-suppress-trace t) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-dissect-file-name 'tramp-suppress-trace t) ;;;###tramp-autoload (defun tramp-ensure-dissected-file-name (vec-or-filename) @@ -1700,13 +1724,16 @@ tramp-ensure-dissected-file-name VEC-OR-FILENAME may be either a string or a `tramp-file-name'. If it's not a Tramp filename, return nil." + ;; (declare (tramp-suppress-trace t)) (cond ((tramp-file-name-p vec-or-filename) vec-or-filename) ((tramp-tramp-file-p vec-or-filename) (tramp-dissect-file-name vec-or-filename)))) -;; We cannot declare our private symbols in loaddefs. -(function-put 'tramp-ensure-dissected-file-name 'tramp-suppress-trace t) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-ensure-dissected-file-name 'tramp-suppress-trace t) (defun tramp-dissect-hop-name (name &optional nodefault) "Return a `tramp-file-name' structure of `hop' part of NAME. @@ -1733,6 +1760,7 @@ tramp-string-empty-or-nil-p (defun tramp-buffer-name (vec) "A name for the connection buffer VEC." + (declare (tramp-suppress-trace t)) (let ((method (tramp-file-name-method vec)) (user-domain (tramp-file-name-user-domain vec)) (host-port (tramp-file-name-host-port vec))) @@ -6166,6 +6194,7 @@ tramp-make-tramp-temp-file (defun tramp-delete-temp-file-function () "Remove temporary files related to current buffer." + (declare (tramp-suppress-trace t)) (when (stringp tramp-temp-buffer-file-name) (ignore-errors (delete-file tramp-temp-buffer-file-name)))) @@ -6458,6 +6487,7 @@ tramp-clear-passwd (defun tramp-time-diff (t1 t2) "Return the difference between the two times, in seconds. T1 and T2 are time values (as returned by `current-time' for example)." + (declare (tramp-suppress-trace t)) (float-time (time-subtract t1 t2))) (defun tramp-unquote-shell-quote-argument (s) commit ea0685e039e7cd9aeaa5486f2e870e1dce20ae05 Author: Mattias Engdegård Date: Tue Aug 1 19:25:39 2023 +0200 ; * lisp/emacs-lisp/package.el: doc string copy-edit diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 392f8fafa79..6ce00bf4d6d 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -609,7 +609,7 @@ package-desc-priority (package-archive-priority (package-desc-archive pkg-desc))) (defun package--parse-elpaignore (pkg-desc) - "Return the of regular expression to match files ignored by PKG-DESC." + "Return a list of regular expressions to match files ignored by PKG-DESC." (let* ((pkg-dir (file-name-as-directory (package-desc-dir pkg-desc))) (ignore (expand-file-name ".elpaignore" pkg-dir)) files) commit 03914e565f75667dfce439e6d6848990aea04664 Author: Stefan Kangas Date: Tue Aug 1 14:34:09 2023 +0200 Add tresitter modes to ibuffer-saved-filters * lisp/ibuf-ext.el (ibuffer-saved-filters): Add tresitter modes. diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index 550b5ed0e6a..37065f5d41a 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -143,10 +143,10 @@ ibuffer-saved-filters (mode . bibtex-mode))) ("web" (or (derived-mode . sgml-mode) - (derived-mode . css-mode) - (mode . javascript-mode) + (derived-mode . css-base-mode) + (derived-mode . js-base-mode) + (derived-mode . typescript-ts-base-mode) (mode . js2-mode) - (mode . scss-mode) (derived-mode . haml-mode) (mode . sass-mode))) ("gnus" commit 7b9660c3b91d7550686f522650da3721e415ed64 Author: Stefan Kangas Date: Tue Aug 1 14:26:51 2023 +0200 Add align tests for CSS * test/lisp/align-tests.el (align-css): New test. * test/lisp/align-resources/css-mode.erts: New file. diff --git a/test/lisp/align-resources/css-mode.erts b/test/lisp/align-resources/css-mode.erts new file mode 100644 index 00000000000..e4455601083 --- /dev/null +++ b/test/lisp/align-resources/css-mode.erts @@ -0,0 +1,23 @@ +Name: align attributes + +=-= +div { + border: 1px solid black; + padding: 25px 50px 75px 100px; + background-color: lightblue; +} +p.center { + text-align: center; + color: red; +} +=-= +div { + border: 1px solid black; + padding: 25px 50px 75px 100px; + background-color: lightblue; +} +p.center { + text-align: center; + color: red; +} +=-=-= diff --git a/test/lisp/align-tests.el b/test/lisp/align-tests.el index 9f94bcb611f..52e136abfc8 100644 --- a/test/lisp/align-tests.el +++ b/test/lisp/align-tests.el @@ -34,6 +34,11 @@ align-c (ert-test-erts-file (ert-resource-file "c-mode.erts") (test-align-transform-fun #'c-mode))) +(ert-deftest align-css () + (let ((indent-tabs-mode nil)) + (ert-test-erts-file (ert-resource-file "css-mode.erts") + (test-align-transform-fun #'css-mode)))) + (ert-deftest align-java () (ert-test-erts-file (ert-resource-file "java-mode.erts") (test-align-transform-fun #'java-mode))) commit 8086fd181f62dcb2945ec993f4e252ad7958c719 Author: Stefan Kangas Date: Tue Aug 1 12:59:32 2023 +0200 Use `M-x align` toml rule also for toml-ts-mode * lisp/align.el (align-rules-list): Add toml-ts-mode to TOML rule. diff --git a/lisp/align.el b/lisp/align.el index 2e667ca4749..6b6cba12447 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -575,7 +575,7 @@ align-rules-list "=" (group (zero-or-more (syntax whitespace))))) (group . (1 2)) - (modes . '(conf-toml-mode)))) + (modes . '(conf-toml-mode toml-ts-mode)))) "A list describing all of the available alignment rules. The format is: commit 583ef0d35ddc01be706bc436fef0493243ed84f0 Author: Stefan Kangas Date: Tue Aug 1 12:58:06 2023 +0200 Make toml-ts-mode-indent-offset into natnum * lisp/textmodes/toml-ts-mode.el (toml-ts-mode-indent-offset): Make into natnum instead of integer. diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el index 2c491034372..193c83f9aec 100644 --- a/lisp/textmodes/toml-ts-mode.el +++ b/lisp/textmodes/toml-ts-mode.el @@ -39,8 +39,8 @@ (defcustom toml-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `toml-ts-mode'." :version "29.1" - :type 'integer - :safe 'integerp + :type 'natnum + :safe 'natnump :group 'toml) (defvar toml-ts-mode--syntax-table commit 742104abd7b0b9c417e4bbf3fcda684595375c27 Author: Stefan Kangas Date: Tue Aug 1 12:18:12 2023 +0200 Fix font locking of booleans in conf-toml-mode * lisp/textmodes/conf-mode.el (conf-toml-mode): Do not use case folding when font locking. * test/lisp/textmodes/conf-mode-tests.el (conf-test-toml-mode): Expand test. diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el index d15fba9c43a..ff41dcdf000 100644 --- a/lisp/textmodes/conf-mode.el +++ b/lisp/textmodes/conf-mode.el @@ -245,6 +245,7 @@ conf-toml-font-lock-keywords ("^\\s-*\\(.+?\\)\\(?:\\[\\(.*?\\)\\]\\)?\\s-*=" (1 'font-lock-variable-name-face) (2 'font-lock-constant-face nil t)) + ;; Must be lower-case according to the TOML spec. ("\\_" 0 'font-lock-keyword-face)) "Keywords to highlight in Conf TOML mode.") @@ -643,7 +644,10 @@ conf-toml-mode \[entry] value = \"some string\"" - (conf-mode-initialize "#" 'conf-toml-font-lock-keywords) + (conf-mode-initialize "#") + ;; Booleans are "always lowercase", so we must *not* use case + ;; folding. Therefore, we can't set it using `conf-mode-initialize´. + (setq-local font-lock-defaults `(,conf-toml-font-lock-keywords nil nil nil nil)) (setq-local conf-assignment-column 0) (setq-local conf-assignment-sign ?=)) diff --git a/test/lisp/textmodes/conf-mode-tests.el b/test/lisp/textmodes/conf-mode-tests.el index 1f6d9b6b587..677a6d35d66 100644 --- a/test/lisp/textmodes/conf-mode-tests.el +++ b/test/lisp/textmodes/conf-mode-tests.el @@ -158,7 +158,6 @@ conf-test-xdefaults-mode (should-not (face-at-point)))) (ert-deftest conf-test-toml-mode () - ;; From `conf-toml-mode' docstring. (with-temp-buffer (insert "[entry] value = \"some string\"") @@ -174,6 +173,22 @@ conf-test-toml-mode (search-forward "som") (should (equal (face-at-point) 'font-lock-string-face)))) +(ert-deftest conf-test-toml-mode/boolean () + ;; https://toml.io/en/v1.0.0#boolean + (with-temp-buffer + (insert "[entry] +a = true +b = True") + (goto-char (point-min)) + (conf-toml-mode) + (font-lock-mode) + (font-lock-ensure) + (search-forward "tru") + (should (equal (face-at-point) 'font-lock-keyword-face)) + ;; Do not fontify upper-case "True". + (search-forward "Tru") + (should (equal (face-at-point) nil)))) + (ert-deftest conf-test-desktop-mode () ;; From `conf-desktop-mode' dostring. (with-temp-buffer commit a3979a664304006afa0761884ae0927d269c698c Author: Stefan Kangas Date: Tue Aug 1 10:38:45 2023 +0200 Add `M-x align` support to conf-toml-mode * lisp/align.el (align-rules-list): Add rule for conf-toml-mode. * test/lisp/align-resources/conf-toml-mode.erts: New file. * test/lisp/align-tests.el (align-toml): New test. diff --git a/lisp/align.el b/lisp/align.el index 79a75dcec79..2e667ca4749 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -568,7 +568,14 @@ align-rules-list (css-declaration (regexp . "^\\s-*\\(?:\\w-?\\)+:\\(\\s-*\\).*;") (group . (1)) - (modes . '(css-mode html-mode)))) + (modes . '(css-mode html-mode))) + + (toml-assignment + (regexp . ,(rx (group (zero-or-more (syntax whitespace))) + "=" + (group (zero-or-more (syntax whitespace))))) + (group . (1 2)) + (modes . '(conf-toml-mode)))) "A list describing all of the available alignment rules. The format is: diff --git a/test/lisp/align-resources/conf-toml-mode.erts b/test/lisp/align-resources/conf-toml-mode.erts new file mode 100644 index 00000000000..d1fcbd58708 --- /dev/null +++ b/test/lisp/align-resources/conf-toml-mode.erts @@ -0,0 +1,45 @@ +Name: align key-value pairs + +=-= +[foo] +foo1=10 +foo22=20 + +[bar] +bar333="example.org" +bar4444 = "zzz" +=-= +[foo] +foo1 = 10 +foo22 = 20 + +[bar] +bar333 = "example.org" +bar4444 = "zzz" +=-=-= + +Name: align list values + +=-= +[foo] +a = 1 +some_list = [ + true, + false, +] +some_other_list = [ + 1, + 2, +] +=-= +[foo] +a = 1 +some_list = [ + true, + false, +] +some_other_list = [ + 1, + 2, +] +=-=-= diff --git a/test/lisp/align-tests.el b/test/lisp/align-tests.el index 5f9580fabf0..9f94bcb611f 100644 --- a/test/lisp/align-tests.el +++ b/test/lisp/align-tests.el @@ -38,6 +38,11 @@ align-java (ert-test-erts-file (ert-resource-file "java-mode.erts") (test-align-transform-fun #'java-mode))) +(ert-deftest align-toml () + (let ((indent-tabs-mode nil)) + (ert-test-erts-file (ert-resource-file "conf-toml-mode.erts") + (test-align-transform-fun #'conf-toml-mode)))) + (provide 'align-tests) ;;; align-tests.el ends here commit 3e505d36acb7510a5170fc3529fa8cf1c69e0f50 Author: Stefan Kangas Date: Mon Jul 31 13:13:33 2023 +0200 Convert align-tests to use erts diff --git a/test/lisp/align-resources/align-post.c b/test/lisp/align-resources/align-post.c deleted file mode 100644 index 157e1d6242a..00000000000 --- a/test/lisp/align-resources/align-post.c +++ /dev/null @@ -1,3 +0,0 @@ -int -main (int argc, - char *argv[]); diff --git a/test/lisp/align-resources/align-post.java b/test/lisp/align-resources/align-post.java deleted file mode 100644 index e0ea8e727f1..00000000000 --- a/test/lisp/align-resources/align-post.java +++ /dev/null @@ -1,9 +0,0 @@ -class X -{ - String field1; - String[] field2; - int field3; - int[] field4; - X field5; - X[] field6; -} diff --git a/test/lisp/align-resources/align-pre.c b/test/lisp/align-resources/align-pre.c deleted file mode 100644 index b1774181a40..00000000000 --- a/test/lisp/align-resources/align-pre.c +++ /dev/null @@ -1,3 +0,0 @@ -int -main (int argc, - char *argv[]); diff --git a/test/lisp/align-resources/align-pre.java b/test/lisp/align-resources/align-pre.java deleted file mode 100644 index fe7a87a9393..00000000000 --- a/test/lisp/align-resources/align-pre.java +++ /dev/null @@ -1,9 +0,0 @@ -class X -{ - String field1; - String[] field2; - int field3; - int[] field4; - X field5; - X[] field6; -} diff --git a/test/lisp/align-resources/c-mode.erts b/test/lisp/align-resources/c-mode.erts new file mode 100644 index 00000000000..0a0fa046b34 --- /dev/null +++ b/test/lisp/align-resources/c-mode.erts @@ -0,0 +1,11 @@ +Name: align function declaration + +=-= +int +main (int argc, + char *argv[]); +=-= +int +main (int argc, + char *argv[]); +=-=-= diff --git a/test/lisp/align-resources/java-mode.erts b/test/lisp/align-resources/java-mode.erts new file mode 100644 index 00000000000..693a4123121 --- /dev/null +++ b/test/lisp/align-resources/java-mode.erts @@ -0,0 +1,23 @@ +Name: align class fields + +=-= +class X +{ + String field1; + String[] field2; + int field3; + int[] field4; + X field5; + X[] field6; +} +=-= +class X +{ + String field1; + String[] field2; + int field3; + int[] field4; + X field5; + X[] field6; +} +=-=-= diff --git a/test/lisp/align-tests.el b/test/lisp/align-tests.el index 62ef9cf27fa..5f9580fabf0 100644 --- a/test/lisp/align-tests.el +++ b/test/lisp/align-tests.el @@ -25,22 +25,18 @@ (require 'ert-x) (require 'align) -(defun test-align-compare (file function) - (should (equal - (with-temp-buffer - (insert-file-contents (ert-resource-file (format file "pre"))) - (funcall function) - (align (point-min) (point-max)) - (buffer-substring-no-properties (point-min) (point-max))) - (with-temp-buffer - (insert-file-contents (ert-resource-file (format file "post"))) - (buffer-string))))) - -(ert-deftest align-java () - (test-align-compare "align-%s.java" #'java-mode)) +(defun test-align-transform-fun (function) + (lambda () + (funcall function) + (align (point-min) (point-max)))) (ert-deftest align-c () - (test-align-compare "align-%s.c" #'c-mode)) + (ert-test-erts-file (ert-resource-file "c-mode.erts") + (test-align-transform-fun #'c-mode))) + +(ert-deftest align-java () + (ert-test-erts-file (ert-resource-file "java-mode.erts") + (test-align-transform-fun #'java-mode))) (provide 'align-tests) commit f5932bcd425e0b3da81ce3d719413e2f824c3c0b Author: Mattias Engdegård Date: Mon Jul 31 18:52:49 2023 +0200 Fix vacuous conf-mode-test * test/lisp/textmodes/conf-mode-tests.el (conf-test-javaprop-mode): Attempt to give the test some meaning by repairing regexps, and fixing it so that it passes. diff --git a/test/lisp/textmodes/conf-mode-tests.el b/test/lisp/textmodes/conf-mode-tests.el index 5e21d2cfacb..1f6d9b6b587 100644 --- a/test/lisp/textmodes/conf-mode-tests.el +++ b/test/lisp/textmodes/conf-mode-tests.el @@ -93,12 +93,13 @@ conf-test-javaprop-mode (should (equal (face-at-point) 'font-lock-variable-name-face)) (search-forward "val") (should-not (face-at-point))) - (while (re-search-forward "a-z" nil t) + (while (re-search-forward "[xyz]" nil t) (backward-char) (should (equal (face-at-point) 'font-lock-variable-name-face)) - (re-search-forward "[0-0]" nil t) - (backward-char) - (should (equal (face-at-point) 'font-lock-constant-face))))) + (forward-char) + (when (re-search-forward "[0-9]" nil t) + (backward-char) + (should (equal (face-at-point) 'font-lock-constant-face)))))) (ert-deftest conf-test-space-mode () ;; From `conf-space-mode' docstring. commit a2be317b37e6f284b1160dfc1fe88377a4698e87 Author: Stefan Kangas Date: Tue Aug 1 09:55:01 2023 +0200 Remove IE9 support tag from HTML5 skeleton This is no longer recommended in 2023, and in any case seems like overkill in an otherwise bare-bones HTML5 template. Ref: https://stackoverflow.com/a/6771584 diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index d80cdc34775..27f3b2acd1c 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -2680,7 +2680,6 @@ html-html5-template "" \n "" \n "" \n - "" \n "" \n "" (skeleton-read "Page Title: ") "" \n "" \n commit 74d6604eaa2d770626309181ac4bc4f2598e63e7 Author: Po Lu Date: Tue Aug 1 10:34:33 2023 +0800 Fix stipple support on PGTK * src/image.c (image_create_pattern_from_pixbuf): Remove function. (image_bitmap_to_cr_pattern): New function. (image_create_bitmap_from_data): (image_create_bitmap_from_file): Create patterns with the correct mask values directly from bitmap data. Also, don't rely on GDK to read XPMs, as that format isn't supported anymore. * src/pgtkterm.c (pgtk_bitmap_icon): Disable already nonfunctional code. (pgtk_display_x_warning): Wrap warning message. * src/pgtkterm.h (struct pgtk_bitmap_record): Remove `img' field. (bug#64969) diff --git a/src/image.c b/src/image.c index c9420b48f4a..cb9725892d1 100644 --- a/src/image.c +++ b/src/image.c @@ -441,32 +441,101 @@ image_reference_bitmap (struct frame *f, ptrdiff_t id) } #ifdef HAVE_PGTK + +/* Create a Cairo pattern from the bitmap BITS, which should be WIDTH + and HEIGHT in size. BITS's fill order is LSB first, meaning that + the value of the left most pixel within a byte is its least + significant bit. */ + static cairo_pattern_t * -image_create_pattern_from_pixbuf (struct frame *f, GdkPixbuf * pixbuf) +image_bitmap_to_cr_pattern (char *bits, int width, int height) { - GdkPixbuf *pb = gdk_pixbuf_add_alpha (pixbuf, TRUE, 255, 255, 255); - cairo_surface_t *surface = - cairo_surface_create_similar_image (cairo_get_target - (f->output_data.pgtk->cr_context), - CAIRO_FORMAT_A1, - gdk_pixbuf_get_width (pb), - gdk_pixbuf_get_height (pb)); + cairo_surface_t *surface; + unsigned char *data; + int stride; + cairo_pattern_t *pattern; +#ifdef WORDS_BIGENDIAN + int x; + static const unsigned char table[] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + }; +#endif /* WORDS_BIGENDIAN */ - cairo_t *cr = cairo_create (surface); - gdk_cairo_set_source_pixbuf (cr, pb, 0, 0); - cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); - cairo_paint (cr); - cairo_destroy (cr); + surface = cairo_image_surface_create (CAIRO_FORMAT_A1, width, + height); - cairo_pattern_t *pat = cairo_pattern_create_for_surface (surface); - cairo_pattern_set_extend (pat, CAIRO_EXTEND_REPEAT); + if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) + memory_full (0); - cairo_surface_destroy (surface); - g_object_unref (pb); + cairo_surface_flush (surface); + data = cairo_image_surface_get_data (surface); + stride = cairo_image_surface_get_stride (surface); - return pat; +#ifdef WORDS_BIGENDIAN + /* Big endian systems require that individual bytes be inverted to + compensate for the different fill order used by Cairo. */ + while (height--) + { + memcpy (data, bits, (width + 7) / 8); + for (x = 0; x < (width + 7) / 8; ++x) + data[x] = table[data[x]]; + data += stride; + bits += (width + 7) / 8; + } +#else /* !WORDS_BIGENDIAN */ + /* Cairo uses LSB first fill order for bitmaps on little-endian + systems, so copy each row over. */ + + while (height--) + { + memcpy (data, bits, (width + 7) / 8); + data += stride; + bits += (width + 7) / 8; + } +#endif /* WORDS_BIGENDIAN */ + + cairo_surface_mark_dirty (surface); + pattern = cairo_pattern_create_for_surface (surface); + if (cairo_pattern_status (pattern) != CAIRO_STATUS_SUCCESS) + memory_full (0); + + /* The pattern now holds a reference to the surface. */ + cairo_surface_destroy (surface); + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); + return pattern; } -#endif + +#endif /* HAVE_PGTK */ /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */ @@ -504,46 +573,9 @@ image_create_bitmap_from_data (struct frame *f, char *bits, #endif #ifdef HAVE_PGTK - GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, - FALSE, - 8, - width, - height); - { - char *sp = bits; - int mask = 0x01; - unsigned char *buf = gdk_pixbuf_get_pixels (pixbuf); - int rowstride = gdk_pixbuf_get_rowstride (pixbuf); - for (int y = 0; y < height; y++) - { - unsigned char *dp = buf + rowstride * y; - for (int x = 0; x < width; x++) - { - if (*sp & mask) - { - *dp++ = 0xff; - *dp++ = 0xff; - *dp++ = 0xff; - } - else - { - *dp++ = 0x00; - *dp++ = 0x00; - *dp++ = 0x00; - } - if ((mask <<= 1) >= 0x100) - { - mask = 0x01; - sp++; - } - } - if (mask != 0x01) - { - mask = 0x01; - sp++; - } - } - } + cairo_pattern_t *pattern; + + pattern = image_bitmap_to_cr_pattern (bits, width, height); #endif /* HAVE_PGTK */ #ifdef HAVE_HAIKU @@ -577,10 +609,8 @@ image_create_bitmap_from_data (struct frame *f, char *bits, #endif #ifdef HAVE_PGTK - dpyinfo->bitmaps[id - 1].img = pixbuf; dpyinfo->bitmaps[id - 1].depth = 1; - dpyinfo->bitmaps[id - 1].pattern = - image_create_pattern_from_pixbuf (f, pixbuf); + dpyinfo->bitmaps[id - 1].pattern = pattern; #endif #ifdef HAVE_HAIKU @@ -616,7 +646,7 @@ image_create_bitmap_from_data (struct frame *f, char *bits, return id; } -#if defined HAVE_HAIKU || defined HAVE_NS +#if defined HAVE_HAIKU || defined HAVE_NS || defined HAVE_PGTK static char *slurp_file (int, ptrdiff_t *); static Lisp_Object image_find_image_fd (Lisp_Object, int *); static bool xbm_read_bitmap_data (struct frame *, char *, char *, @@ -680,25 +710,38 @@ image_create_bitmap_from_file (struct frame *f, Lisp_Object file) #endif #ifdef HAVE_PGTK - GError *err = NULL; - ptrdiff_t id; - void * bitmap = gdk_pixbuf_new_from_file (SSDATA (file), &err); + ptrdiff_t id, size; + int fd, width, height, rc; + char *contents, *data; + void *bitmap; - if (!bitmap) + if (!STRINGP (image_find_image_fd (file, &fd))) + return -1; + + contents = slurp_file (fd, &size); + + if (!contents) + return -1; + + rc = xbm_read_bitmap_data (f, contents, contents + size, + &width, &height, &data, 0); + + if (!rc) { - g_error_free (err); + xfree (contents); return -1; } id = image_allocate_bitmap_record (f); - dpyinfo->bitmaps[id - 1].img = bitmap; dpyinfo->bitmaps[id - 1].refcount = 1; dpyinfo->bitmaps[id - 1].file = xlispstrdup (file); - dpyinfo->bitmaps[id - 1].height = gdk_pixbuf_get_width (bitmap); - dpyinfo->bitmaps[id - 1].width = gdk_pixbuf_get_height (bitmap); + dpyinfo->bitmaps[id - 1].height = width; + dpyinfo->bitmaps[id - 1].width = height; dpyinfo->bitmaps[id - 1].pattern - = image_create_pattern_from_pixbuf (f, bitmap); + = image_bitmap_to_cr_pattern (data, width, height); + xfree (contents); + xfree (data); return id; #endif diff --git a/src/pgtkterm.c b/src/pgtkterm.c index dc2d6477bb5..9c1fc7bef4e 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -3147,11 +3147,15 @@ pgtk_scroll_run (struct window *w, struct run *run) /* Icons. */ -/* Make the x-window of frame F use the gnu icon bitmap. */ - static bool pgtk_bitmap_icon (struct frame *f, Lisp_Object file) { + /* This code has never worked anyway for the reason that Wayland + uses icons set within desktop files, and has been disabled + because leaving it intact would require image.c to retain a + reference to a GdkPixbuf (which are no longer used) within new + bitmaps. */ +#if 0 ptrdiff_t bitmap_id; if (FRAME_GTK_WIDGET (f) == 0) @@ -3207,12 +3211,8 @@ pgtk_bitmap_icon (struct frame *f, Lisp_Object file) bitmap_id = FRAME_DISPLAY_INFO (f)->icon_bitmap_id; } - if (FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img != NULL) - gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), - FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img); - f->output_data.pgtk->icon_bitmap = bitmap_id; - +#endif /* 0 */ return false; } @@ -6685,12 +6685,12 @@ pgtk_display_x_warning (GdkDisplay *display) gtk_window_set_title (window, "Warning"); gtk_window_set_screen (window, screen); - label = gtk_label_new ("You are trying to run Emacs configured with" - " the \"pure-GTK\" interface under the X Window" - " System. That configuration is unsupported and" - " will lead to sporadic crashes during transfer of" - " large selection data. It will also lead to" - " various problems with keyboard input."); + label = gtk_label_new ("You are trying to run Emacs configured with\n" + " the \"pure-GTK\" interface under the X Window\n" + " System. That configuration is unsupported and\n" + " will lead to sporadic crashes during transfer of\n" + " large selection data. It will also lead to\n" + " various problems with keyboard input.\n"); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_container_add (GTK_CONTAINER (content_area), label); gtk_widget_show (label); diff --git a/src/pgtkterm.h b/src/pgtkterm.h index 8f2f00efdad..069e425fd9c 100644 --- a/src/pgtkterm.h +++ b/src/pgtkterm.h @@ -42,7 +42,6 @@ #define _PGTKTERM_H_ struct pgtk_bitmap_record { - void *img; char *file; int refcount; int height, width, depth; commit bfb7c58ac5c322d6363e83f68afa88fc88ba2a0f Author: Michael Albinus Date: Mon Jul 31 19:40:11 2023 +0200 Optimizations on Tramp symlink handling * lisp/net/tramp-sh.el (cl-seq): Require. (tramp-perl-file-truename): Print also whether the file is a symlink. (tramp-bundle-read-file-names): Rename from `tramp-vc-registered-read-file-names'. Print also the `file-directory-p: value. (tramp-sh-handle-make-symbolic-link): Combine two commands. Use `tramp-skeleton-make-symbolic-link'. (tramp-sh-handle-file-truename): Read also "file-symlink-marker" property. (tramp-sh-handle-file-directory-p): Simplify if-let clause. (tramp-sh-handle-file-name-all-completions): Simplify command. (tramp-bundle-read-file-names): New defun. (tramp-sh-handle-vc-registered, tramp-get-remote-path): Use it. (tramp-open-shell): Flush "scripts" connection property. (tramp-open-connection-setup-interactive-shell): Combine two commands. * lisp/net/tramp-smb.el (tramp-smb-handle-make-symbolic-link): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-make-symbolic-link): Use `tramp-skeleton-make-symbolic-link'. * lisp/net/tramp.el (tramp-skeleton-make-symbolic-link): Rename from `tramp-skeleton-handle-make-symbolic-link'. (tramp-handle-file-symlink-p): Check file property "file-symlink-marker". diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 3d4dacb393c..eec00b17b4c 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -511,9 +511,9 @@ tramp-adb-handle-file-writable-p (with-parsed-tramp-file-name (expand-file-name filename) nil (with-tramp-file-property v localname "file-writable-p" (if (file-exists-p filename) + ;; Examine `file-attributes' cache to see if request can be + ;; satisfied without remote operation. (if (tramp-file-property-p v localname "file-attributes") - ;; Examine `file-attributes' cache to see if request can - ;; be satisfied without remote operation. (tramp-check-cached-permissions v ?w) (tramp-adb-send-command-and-check v (format "test -w %s" (tramp-shell-quote-argument localname)))) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index e889cb2e86f..b33e788b893 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -32,6 +32,7 @@ ;;; Code: (eval-when-compile (require 'cl-lib)) +(require 'cl-seq) (require 'tramp) ;; `dired-*' declarations can be removed, starting with Emacs 29.1. @@ -616,6 +617,13 @@ tramp-perl-file-truename $result = File::Spec->catpath($vol, File::Spec->catdir(@dirs), \"\"); } +if (-l $ARGV[0]) { + print \"t\\n\"; + } +else { + print \"nil\\n\"; + } + $result =~ s/\"/\\\\\"/g; print \"\\\"$result\\\"\\n\"; ' \"$1\" %n" @@ -699,11 +707,11 @@ tramp-stat-file-attributes " '((%s%%%%N%s) %%%%h (%s%%%%U%s . %%%%u) (%s%%%%G%s . %%%%g)" " %%%%X %%%%Y %%%%Z %%%%s %s%%%%A%s t %%%%i -1)' \"$1\" %%n || echo nil) |" " sed -e 's/\"/\\\\\"/g' -e 's/%s/\"/g'") - tramp-stat-marker tramp-stat-marker ; %%N - tramp-stat-marker tramp-stat-marker ; %%U - tramp-stat-marker tramp-stat-marker ; %%G - tramp-stat-marker tramp-stat-marker ; %%A - tramp-stat-quoted-marker) + tramp-stat-marker tramp-stat-marker ; %%N + tramp-stat-marker tramp-stat-marker ; %%U + tramp-stat-marker tramp-stat-marker ; %%G + tramp-stat-marker tramp-stat-marker ; %%A + tramp-stat-quoted-marker) "Shell function to produce output suitable for use with `file-attributes' on the remote file system. Format specifiers are replaced by `tramp-expand-script', percent @@ -1015,7 +1023,7 @@ tramp-awk-decode Format specifiers are replaced by `tramp-expand-script', percent characters need to be doubled.") -(defconst tramp-vc-registered-read-file-names +(defconst tramp-bundle-read-file-names "echo \"(\" while read file; do quoted=`echo \"$file\" | sed -e \"s/\\\"/\\\\\\\\\\\\\\\\\\\"/\"` @@ -1029,13 +1037,18 @@ tramp-vc-registered-read-file-names else echo \"(\\\"$quoted\\\" \\\"file-readable-p\\\" nil)\" fi + if %s \"$file\"; then + echo \"(\\\"$quoted\\\" \\\"file-directory-p\\\" t)\" + else + echo \"(\\\"$quoted\\\" \\\"file-directory-p\\\" nil)\" + fi done echo \")\"" - "Script to check existence of VC related files. -It must be send formatted with two strings; the tests for file -existence, and file readability. Input shall be read via -here-document, otherwise the command could exceed maximum length -of command line. + "Script to check file attributes of a bundle of files. +It must be sent formatted with three strings; the tests for file +existence, file readability, and file directory. Input shall be +read via here-document, otherwise the command could exceed +maximum length of command line. Format specifiers \"%s\" are replaced before the script is used.") ;; New handlers should be added here. @@ -1145,19 +1158,17 @@ tramp-sh-handle-make-symbolic-link (concat "Making a symbolic link: " "ln(1) does not exist on the remote host")))) - (tramp-skeleton-handle-make-symbolic-link target linkname ok-if-already-exists - (and (tramp-send-command-and-check - v (format - "cd %s" - (tramp-shell-quote-argument (file-name-directory localname)))) - (tramp-send-command-and-check - v (format - "%s -sf %s %s" (tramp-get-remote-ln v) - (tramp-shell-quote-argument target) - ;; The command could exceed PATH_MAX, so we use relative - ;; file names. - (tramp-shell-quote-argument - (concat "./" (file-name-nondirectory localname)))))))) + (tramp-skeleton-make-symbolic-link target linkname ok-if-already-exists + (tramp-send-command-and-check + v (format + "cd %s && %s -sf %s %s" + (tramp-shell-quote-argument (file-name-directory localname)) + (tramp-get-remote-ln v) + (tramp-shell-quote-argument target) + ;; The command could exceed PATH_MAX, so we use relative + ;; file names. + (tramp-shell-quote-argument + (concat "./" (file-name-nondirectory localname))))))) (defun tramp-sh-handle-file-truename (filename) "Like `file-truename' for Tramp files." @@ -1166,12 +1177,20 @@ tramp-sh-handle-file-truename ;; Use GNU readlink --canonicalize-missing where available. ((tramp-get-remote-readlink v) (tramp-send-command-and-check - v (format "%s --canonicalize-missing %s" - (tramp-get-remote-readlink v) - (tramp-shell-quote-argument localname))) + v (format + (concat + "(if %s -h \"%s\"; then echo t; else echo nil; fi) && " + "%s --canonicalize-missing %s") + (tramp-get-test-command v) + (tramp-shell-quote-argument localname) + (tramp-get-remote-readlink v) + (tramp-shell-quote-argument localname))) (with-current-buffer (tramp-get-connection-buffer v) (goto-char (point-min)) - (buffer-substring (point-min) (line-end-position)))) + (tramp-set-file-property v localname "file-symlink-marker" (read (current-buffer))) + ;; We cannote call `read', the file name isn't quoted. + (forward-line) + (buffer-substring (point) (line-end-position)))) ;; Use Perl implementation. ((and (tramp-get-remote-perl v) @@ -1179,9 +1198,13 @@ tramp-sh-handle-file-truename (tramp-get-connection-property v "perl-cwd-realpath")) (tramp-maybe-send-script v tramp-perl-file-truename "tramp_perl_file_truename") - (tramp-send-command-and-read + (tramp-send-command-and-check v (format "tramp_perl_file_truename %s" - (tramp-shell-quote-argument localname)))) + (tramp-shell-quote-argument localname))) + (with-current-buffer (tramp-get-connection-buffer v) + (goto-char (point-min)) + (tramp-set-file-property v localname "file-symlink-marker" (read (current-buffer))) + (read (current-buffer)))) ;; Do it yourself. (t (tramp-file-local-name @@ -1675,8 +1698,8 @@ tramp-sh-handle-file-directory-p (with-tramp-file-property v localname "file-directory-p" (if-let ((truename (tramp-get-file-property v localname "file-truename")) - (attr-p (tramp-file-property-p - v (tramp-file-local-name truename) "file-attributes"))) + ((tramp-file-property-p + v (tramp-file-local-name truename) "file-attributes"))) (eq (file-attribute-type (tramp-get-file-property v (tramp-file-local-name truename) "file-attributes")) @@ -1688,9 +1711,9 @@ tramp-sh-handle-file-writable-p (with-parsed-tramp-file-name (expand-file-name filename) nil (with-tramp-file-property v localname "file-writable-p" (if (file-exists-p filename) + ;; Examine `file-attributes' cache to see if request can be + ;; satisfied without remote operation. (if (tramp-file-property-p v localname "file-attributes") - ;; Examine `file-attributes' cache to see if request can - ;; be satisfied without remote operation. (tramp-check-cached-permissions v ?w) (tramp-run-test v "-w" localname)) ;; If file doesn't exist, check if directory is writable. @@ -1789,7 +1812,7 @@ tramp-sh-handle-file-name-all-completions "cd %s 2>&1 && %s -a 2>%s" " | while IFS= read f; do" " if %s -d \"$f\" 2>%s;" - " then \\echo \"$f/\"; else \\echo \"$f\"; fi;" + " then echo \"$f/\"; else echo \"$f\"; fi;" " done") (tramp-shell-quote-argument localname) (tramp-get-ls-command v) @@ -3525,6 +3548,41 @@ tramp-sh-handle-write-region (when coding-system-used (setq last-coding-system-used coding-system-used))))))) +(defun tramp-bundle-read-file-names (vec files) + "Read file attributes of FILES and with one command fill the cache. +FILES must be the local names only. The cache attributes to be +filled are described in `tramp-bundle-read-file-names'." + (when files + (tramp-maybe-send-script + vec + (format tramp-bundle-read-file-names + (tramp-get-file-exists-command vec) + (format "%s -r" (tramp-get-test-command vec)) + (format "%s -d" (tramp-get-test-command vec))) + "tramp_bundle_read_file_names") + + (dolist + (elt + (ignore-errors + ;; We cannot use `tramp-send-command-and-read', because + ;; this does not cooperate well with heredoc documents. + (tramp-send-command + vec + (format + "tramp_bundle_read_file_names <<'%s'\n%s\n%s\n" + tramp-end-of-heredoc + (mapconcat #'tramp-shell-quote-argument + files + "\n") + tramp-end-of-heredoc)) + (with-current-buffer (tramp-get-connection-buffer vec) + ;; Read the expression. + (goto-char (point-min)) + (read (current-buffer))))) + + (tramp-set-file-property + vec (car elt) (cadr elt) (cadr (cdr elt)))))) + (defvar tramp-vc-registered-file-names nil "List used to collect file names, which are checked during `vc-registered'.") @@ -3570,36 +3628,7 @@ tramp-sh-handle-vc-registered (tramp-message v 10 "\n%s" tramp-vc-registered-file-names) ;; Send just one command, in order to fill the cache. - (when tramp-vc-registered-file-names - (tramp-maybe-send-script - v - (format tramp-vc-registered-read-file-names - (tramp-get-file-exists-command v) - (format "%s -r" (tramp-get-test-command v))) - "tramp_vc_registered_read_file_names") - - (dolist - (elt - (ignore-errors - ;; We cannot use `tramp-send-command-and-read', - ;; because this does not cooperate well with - ;; heredoc documents. - (tramp-send-command - v - (format - "tramp_vc_registered_read_file_names <<'%s'\n%s\n%s\n" - tramp-end-of-heredoc - (mapconcat #'tramp-shell-quote-argument - tramp-vc-registered-file-names - "\n") - tramp-end-of-heredoc)) - (with-current-buffer (tramp-get-connection-buffer v) - ;; Read the expression. - (goto-char (point-min)) - (read (current-buffer))))) - - (tramp-set-file-property - v (car elt) (cadr elt) (cadr (cdr elt)))))) + (tramp-bundle-read-file-names v tramp-vc-registered-file-names)) ;; Second run. Now all `file-exists-p' or `file-readable-p' ;; calls shall be answered from the file cache. We unset @@ -4254,6 +4283,8 @@ tramp-open-shell "`tramp-histfile-override' uses invalid file `%s'" tramp-histfile-override)) + (tramp-flush-connection-property + (tramp-get-connection-process vec) "scripts") (tramp-set-connection-property (tramp-get-connection-process vec) "remote-shell" shell))) @@ -4335,12 +4366,10 @@ tramp-open-connection-setup-interactive-shell (tramp-open-shell vec (tramp-get-method-parameter vec 'tramp-remote-shell)) (tramp-message vec 5 "Setting up remote shell environment") - ;; Disable line editing. - (tramp-send-command vec "set +o vi +o emacs" t) - - ;; Dump option settings in the traces. - (when (>= tramp-verbose 9) - (tramp-send-command vec "set -o" t)) + ;; Disable line editing. Dump option settings in the traces. + (tramp-send-command + vec + (if (>= tramp-verbose 9) "set +o vi +o emacs -o" "set +o vi +o emacs") t) ;; Disable echo expansion. (tramp-send-command @@ -5554,22 +5583,16 @@ tramp-get-remote-path (setq remote-path (delq 'tramp-own-remote-path remote-path))) ;; Remove double entries. - (setq elt1 remote-path) - (while (consp elt1) - (while (and (car elt1) (setq elt2 (member (car elt1) (cdr elt1)))) - (setcar elt2 nil)) - (setq elt1 (cdr elt1))) + (setq remote-path + (cl-remove-duplicates + remote-path :test #'string-equal :from-end t)) ;; Remove non-existing directories. - (delq - nil - (mapcar - (lambda (x) - (and - (stringp x) - (file-directory-p (tramp-make-tramp-file-name vec x)) - x)) - remote-path)))))) + (let ((remote-file-name-inhibit-cache nil)) + (tramp-bundle-read-file-names vec remote-path) + (cl-remove-if + (lambda (x) (not (tramp-get-file-property vec x "file-directory-p"))) + remote-path)))))) (defun tramp-get-remote-locale (vec) "Determine remote locale, supporting UTF8 if possible." diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 60d40fef147..9c96a3f6851 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -1176,7 +1176,7 @@ tramp-smb-handle-make-symbolic-link (unless (tramp-smb-get-cifs-capabilities v) (tramp-error v 'file-error "make-symbolic-link not supported"))) - (tramp-skeleton-handle-make-symbolic-link target linkname ok-if-already-exists + (tramp-skeleton-make-symbolic-link target linkname ok-if-already-exists (unless (tramp-smb-send-command v (format "symlink %s %s" (tramp-smb-shell-quote-argument target) diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el index 2bbe0945330..2ce2647b5ac 100644 --- a/lisp/net/tramp-sudoedit.el +++ b/lisp/net/tramp-sudoedit.el @@ -574,9 +574,9 @@ tramp-sudoedit-handle-file-writable-p (with-parsed-tramp-file-name (expand-file-name filename) nil (with-tramp-file-property v localname "file-writable-p" (if (file-exists-p filename) + ;; Examine `file-attributes' cache to see if request can be + ;; satisfied without remote operation. (if (tramp-file-property-p v localname "file-attributes") - ;; Examine `file-attributes' cache to see if request can - ;; be satisfied without remote operation. (tramp-check-cached-permissions v ?w) (tramp-sudoedit-send-command v "test" "-w" (file-name-unquote localname))) @@ -596,7 +596,7 @@ tramp-sudoedit-handle-make-directory (defun tramp-sudoedit-handle-make-symbolic-link (target linkname &optional ok-if-already-exists) "Like `make-symbolic-link' for Tramp files." - (tramp-skeleton-handle-make-symbolic-link target linkname ok-if-already-exists + (tramp-skeleton-make-symbolic-link target linkname ok-if-already-exists (tramp-sudoedit-send-command v "ln" "-sf" (file-name-unquote target) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 76674e5207f..00b47f6bead 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3286,6 +3286,8 @@ tramp-skeleton-file-exists-p (when (tramp-connectable-p ,filename) (with-parsed-tramp-file-name (expand-file-name ,filename) nil (with-tramp-file-property v localname "file-exists-p" + ;; Examine `file-attributes' cache to see if request can + ;; be satisfied without remote operation. (if (tramp-file-property-p v localname "file-attributes") (not (null (tramp-get-file-property v localname "file-attributes"))) @@ -3356,7 +3358,7 @@ tramp-skeleton-make-directory ,@body nil)))) -(defmacro tramp-skeleton-handle-make-symbolic-link +(defmacro tramp-skeleton-make-symbolic-link (target linkname &optional ok-if-already-exists &rest body) "Skeleton for `tramp-*-handle-make-symbolic-link'. BODY is the backend specific code. @@ -3961,8 +3963,14 @@ tramp-handle-file-selinux-context (defun tramp-handle-file-symlink-p (filename) "Like `file-symlink-p' for Tramp files." - (let ((x (file-attribute-type (file-attributes filename)))) - (and (stringp x) x))) + (with-parsed-tramp-file-name (expand-file-name filename) nil + ;; Some operations, like `file-truename', set the file property + ;; "file-symlink-marker". We can use it as indicator, and avoid a + ;; possible call of `file-attributes'. + (when (or (tramp-get-file-property v localname "file-symlink-marker") + (not (tramp-file-property-p v localname "file-symlink-marker"))) + (let ((x (file-attribute-type (file-attributes filename)))) + (and (stringp x) x))))) (defun tramp-handle-file-truename (filename) "Like `file-truename' for Tramp files." commit 077c34edfe8f8a826dcb85e5c7036e6bbbef7ff2 Author: Ulrich Müller Date: Fri Jul 28 23:04:43 2023 +0200 Drop duplicate vietnamese-tcvn coding system * lisp/language/vietnamese.el (vietnamese-vscii): Update docstring. (vietnamese-tcvn, tcvn, tcvn-5712): Make them aliases of vietnamese-vscii. ("Vietnamese"): Drop vietnamese-tcvn from coding-system values. Update docstring. * etc/NEWS: Announce this change. diff --git a/etc/NEWS b/etc/NEWS index 39b4a35930a..7b521f3e6fe 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -665,6 +665,15 @@ previous behavior of showing 'U' in the mode line for 'koi8-u': (coding-system-put 'koi8-u :mnemonic ?U) +--- +** 'vietnamese-tcvn' is now a coding system alias for 'vietnamese-vscii'. +VSCII-1 and TCVN-5712 are different names for the same character +encoding. Therefore, the duplicate coding system definition has been +dropped in favor of an alias. + +The mode-line mnemonic for 'vietnamese-vscii' and its aliases is the +lowercase letter 'v'. + +++ ** Infinities and NaNs no longer act as symbols on non-IEEE platforms. On old platforms like the VAX that do not support IEEE floating-point, diff --git a/lisp/language/vietnamese.el b/lisp/language/vietnamese.el index bd0b3c5ae3e..e439a2c3851 100644 --- a/lisp/language/vietnamese.el +++ b/lisp/language/vietnamese.el @@ -28,8 +28,8 @@ ;;; Commentary: -;; For Vietnamese, the character sets VISCII, VSCII and TCVN-5712 are -;; supported. +;; For Vietnamese, the coding systems VISCII, VSCII-1 (TCVN-5712), +;; VIQR and windows-1258 are supported. ;;; Code: @@ -44,13 +44,16 @@ 'vietnamese-viscii (define-coding-system-alias 'viscii 'vietnamese-viscii) (define-coding-system 'vietnamese-vscii - "8-bit encoding for Vietnamese VSCII-1." + "8-bit encoding for Vietnamese VSCII-1 (TCVN-5712)." :coding-type 'charset :mnemonic ?v :charset-list '(vscii) :suitable-for-file-name t) (define-coding-system-alias 'vscii 'vietnamese-vscii) +(define-coding-system-alias 'vietnamese-tcvn 'vietnamese-vscii) +(define-coding-system-alias 'tcvn 'vietnamese-vscii) +(define-coding-system-alias 'tcvn-5712 'vietnamese-vscii) ;; (make-coding-system ;; 'vietnamese-vps 4 ?p @@ -74,7 +77,7 @@ 'viqr (set-language-info-alist "Vietnamese" '((charset viscii) (coding-system vietnamese-viscii vietnamese-vscii - vietnamese-tcvn vietnamese-viqr windows-1258) + vietnamese-viqr windows-1258) (nonascii-translation . viscii) (coding-priority vietnamese-viscii) (input-method . "vietnamese-viqr") @@ -83,12 +86,12 @@ 'viqr (sample-text . "Vietnamese (Tiếng Việt) Chào bạn") (documentation . "\ For Vietnamese, Emacs uses special charsets internally. -They can be decoded from and encoded to VISCII, VSCII, TCVN-5712, VIQR -and windows-1258. VSCII is deprecated in favor of TCVN-5712. The -Current setting gives higher priority to the coding system VISCII than -TCVN-5712. If you prefer TCVN-5712, please do: (prefer-coding-system -'vietnamese-tcvn). There are two Vietnamese input methods: VIQR and -Telex, VIQR is the default setting."))) +They can be decoded from and encoded to VISCII, VSCII-1 (TCVN-5712), +VIQR and windows-1258. The current setting gives higher priority +to the coding system VISCII than VSCII-1. If you prefer VSCII-1, +please do: (prefer-coding-system 'vietnamese-vscii). There are +two Vietnamese input methods: VIQR and Telex, VIQR is the default +setting."))) (define-coding-system 'windows-1258 "windows-1258 encoding for Vietnamese (MIME: WINDOWS-1258)" @@ -98,15 +101,6 @@ 'windows-1258 :mime-charset 'windows-1258) (define-coding-system-alias 'cp1258 'windows-1258) -(define-coding-system 'vietnamese-tcvn - "8-bit encoding for Vietnamese TCVN-5712" - :coding-type 'charset - :mnemonic ?t - :charset-list '(tcvn-5712) - :suitable-for-file-name t) -(define-coding-system-alias 'tcvn 'vietnamese-tcvn) -(define-coding-system-alias 'tcvn-5712 'vietnamese-tcvn) - (provide 'vietnamese) ;;; vietnamese.el ends here commit 18b176280db58932f7a321a1c7af3863b3e9f67a Merge: 30bcd714761 3560dfdb868 Author: Eli Zaretskii Date: Mon Jul 31 11:11:24 2023 -0400 ; Merge from origin/emacs-29 The following commit was skipped: 3560dfdb868 ; Fix backport of help-fns--analyze-function bug fix commit 30bcd71476127fa20da37372501637b07cd53d6c Merge: 38bbfdee62d 525d05c1b8a Author: Eli Zaretskii Date: Mon Jul 31 11:11:23 2023 -0400 Merge from origin/emacs-29 525d05c1b8a Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/... 29ef2157116 ; * lisp/textmodes/paragraphs.el: Remove leftover comment. 80c9f491fc8 Update to Org 9.6.7-5-gd1d0c3 735f3700f65 ; * src/character.c (Fstring_width): Fix last change. bf83fdba9e3 ; * src/character.c (Fstring_width, Fchar_width): Doc fixes. 1198cdb5567 Merge branch 'emacs-29' of git.sv.gnu.org:/srv/git/emacs ... 2b8796eea19 Fix rx wrong-code bug: ranges starting with ^ ba60070b81c Backport: Fix some tree-sitter :match regexps 092a2ecb083 ; * admin/make-tarball.txt: Update based on latest experi... 7b9e83d3cf9 Fix bug#64923 0002d4f3166 Avoid spurious whitespace in the modeline of emacsclient ... 96d52f89444 Fix function help for advised aliases (bug#64797) 71419a60c37 Avoid crashes due to invalid 'mode-line-format' b2cb6e82160 ; Better documentation of HOME on MS-Windows 54e98b5f9bd ; Clarify documentation of 'server-after-make-frame-hook' d13029cdcde Avoid crashes under 'which-key-mode' cb1f7db2490 ; Minor documentation fixes 4a687bcc20d Bump Emacs version commit 38bbfdee62d9cccaadd76135c396df1a2e5982fa Merge: ec80c3e544e 2b8796eea19 Author: Eli Zaretskii Date: Mon Jul 31 11:11:23 2023 -0400 ; Merge from origin/emacs-29 The following commits were skipped: 2b8796eea19 Fix rx wrong-code bug: ranges starting with ^ ba60070b81c Backport: Fix some tree-sitter :match regexps commit ec80c3e544eaf455e89f5b6bd84602b75dafdfd1 Merge: cd6629c5dc7 092a2ecb083 Author: Eli Zaretskii Date: Mon Jul 31 11:11:23 2023 -0400 Merge from origin/emacs-29 092a2ecb083 ; * admin/make-tarball.txt: Update based on latest experi... 7b9e83d3cf9 Fix bug#64923 commit cd6629c5dc73599176e7781b0a62b8904702f50a Merge: 70421a88196 0002d4f3166 Author: Eli Zaretskii Date: Mon Jul 31 11:11:23 2023 -0400 ; Merge from origin/emacs-29 The following commits were skipped: 0002d4f3166 Avoid spurious whitespace in the modeline of emacsclient ... 96d52f89444 Fix function help for advised aliases (bug#64797) 71419a60c37 Avoid crashes due to invalid 'mode-line-format' b2cb6e82160 ; Better documentation of HOME on MS-Windows 54e98b5f9bd ; Clarify documentation of 'server-after-make-frame-hook' d13029cdcde Avoid crashes under 'which-key-mode' cb1f7db2490 ; Minor documentation fixes 4a687bcc20d Bump Emacs version commit 70421a881965f77e526b789bbc682925ce0f61f6 Merge: d85805a4e16 a9b28224af0 Author: Eli Zaretskii Date: Mon Jul 31 11:11:23 2023 -0400 Merge from origin/emacs-29 a9b28224af0 ; Last-minute changes befor releasing 29.1 7da1cee56b3 Update CMake support due to upstream changes (bug#64922) c2d95dd00e6 Remove nullptr named node from c++-ts-mode (bug#64818) 4e977136d31 Make compat check also check typescript 906ecf442c4 ; * etc/HISTORY: Fix the 28.3 entry. commit d85805a4e167246b6e9d2f057476cc264f6bb181 Merge: 31e98998304 31cef9a4eac Author: Eli Zaretskii Date: Mon Jul 31 11:11:23 2023 -0400 ; Merge from origin/emacs-29 The following commit was skipped: 31cef9a4eac ; * lisp/ldefs-boot.el: Regenerated for Emacs 29.1. commit 31e98998304d275fd1f6f7e1223dfb591e7a7385 Merge: 9f3edb5726a 82d6bb66fea Author: Eli Zaretskii Date: Mon Jul 31 11:11:22 2023 -0400 Merge from origin/emacs-29 82d6bb66fea Update HISTORY and ChangeLog.4 commit 9f3edb5726ad95251ccb96b2806797d47e1d5766 Merge: 358a2e0568b 7d1737071fb Author: Eli Zaretskii Date: Mon Jul 31 11:11:22 2023 -0400 ; Merge from origin/emacs-29 The following commit was skipped: 7d1737071fb Bump Emacs version commit 358a2e0568bf3e68f1d753594d00d8aada468a3b Merge: c570d314b76 6b00e1a197d Author: Eli Zaretskii Date: Mon Jul 31 11:11:22 2023 -0400 Merge from origin/emacs-29 6b00e1a197d Update AUTHORS and ChangeLog.4 commit c570d314b769a8962d99e4edc78729b47d29dee0 Merge: 555cb8f7b13 76a142e265d Author: Eli Zaretskii Date: Mon Jul 31 11:11:21 2023 -0400 ; Merge from origin/emacs-29 The following commit was skipped: 76a142e265d ; * etc/NEWS: Prepare for Emacs 29.1 release. commit 555cb8f7b13f5f364f55024c21551ef00f810e19 Merge: 65cd0912460 ee20b50dfed Author: Eli Zaretskii Date: Mon Jul 31 11:11:21 2023 -0400 Merge from origin/emacs-29 ee20b50dfed ; * lisp/progmodes/typescript-ts-mode.el (treesit-query-c... 2215298d90b Update JSX support due to upstream changes (bug#64647) 235561a2ccc Update TSX support due to upstream changes (bug#64647) 12ab82d3b35 ; Fix customization form of 'bookmark-watch-bookmark-file' d149a4dc428 ; Improve documentation of automatic addition to minibuff... 42a99627948 ; Improve documentation of 'last-command-event' 101455cb853 ; * lisp/subr.el (ignore, always): Doc fixes. (Bug#64776) commit 65cd091246029fff3edf7402eb24cb17f9f95f26 Merge: f56034ca3c6 6152a411905 Author: Eli Zaretskii Date: Mon Jul 31 11:11:21 2023 -0400 ; Merge from origin/emacs-29 The following commit was skipped: 6152a411905 Unbreak build with CHECK_STRUCTS. commit f56034ca3c6626af331279caf347c6bedbab9ee8 Merge: 1f3995f65a0 c692bbc6596 Author: Eli Zaretskii Date: Mon Jul 31 11:11:21 2023 -0400 Merge from origin/emacs-29 c692bbc6596 Revert "Improve commentary in nsfns.m" bb885928d73 Fix NetBSD build --with-sound 39873d6d5d1 Fix typo in pre-filter for underline property commit 3560dfdb868556fb3f9ab3a5a1e5405f14c548c6 Author: Mattias Engdegård Date: Mon Jul 31 16:14:07 2023 +0200 ; Fix backport of help-fns--analyze-function bug fix * lisp/help-fns.el (help-fns--analyze-function): Add back the NOERROR argument to function-alias-p, needed because Emacs 29 doesn't prevent the creation of circular function aliases. This fixes a failure in help-fns-tests. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index eb50f3b26ca..044bcf8b51f 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -995,7 +995,7 @@ help-fns--analyze-function (symbol-name function))))))) (real-def (cond ((and aliased (not (subrp def))) - (or (car (function-alias-p real-function)) + (or (car (function-alias-p real-function t)) real-function)) ((subrp def) (intern (subr-name def))) (t def)))) commit 525d05c1b8ac54a4f7ad166b97f2fa913f80e73c Merge: 29ef2157116 80c9f491fc8 Author: Eli Zaretskii Date: Mon Jul 31 14:42:27 2023 +0300 Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/emacs into emacs-29 commit 29ef2157116550248ddccd74a5e52b2ab1fe3a9c Author: Eshel Yaron Date: Sun Jul 30 11:22:26 2023 +0300 ; * lisp/textmodes/paragraphs.el: Remove leftover comment. * lisp/textmodes/paragraphs.el: Remove a comment referring to code that was removed in cf605d5. (Bug#64947) diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el index a9e28a3275b..d23902b1c67 100644 --- a/lisp/textmodes/paragraphs.el +++ b/lisp/textmodes/paragraphs.el @@ -201,7 +201,6 @@ paragraph-ignore-fill-prefix :type 'boolean :safe #'booleanp) -;; Silence the compiler. (defun forward-paragraph (&optional arg) "Move forward to end of paragraph. With argument ARG, do it ARG times; commit 80c9f491fc8dc068421f32cd15e0b387a6d1ee11 Author: Kyle Meyer Date: Sun Jul 30 16:52:11 2023 -0400 Update to Org 9.6.7-5-gd1d0c3 diff --git a/doc/misc/org.org b/doc/misc/org.org index ae3fae0623e..d8bbcb4d0c5 100644 --- a/doc/misc/org.org +++ b/doc/misc/org.org @@ -4562,7 +4562,7 @@ all children are done, you can use the following setup: #+begin_src emacs-lisp (defun org-summary-todo (n-done n-not-done) "Switch entry to DONE when all subentries are done, to TODO otherwise." - (let (org-log-done org-log-states) ; turn off logging + (let (org-log-done org-todo-log-states) ; turn off logging (org-todo (if (= n-not-done 0) "DONE" "TODO")))) (add-hook 'org-after-todo-statistics-hook #'org-summary-todo) @@ -16034,7 +16034,12 @@ can remove every headline in the buffer during export like this: "Remove all headlines in the current buffer. BACKEND is the export back-end being used, as a symbol." (org-map-entries - (lambda () (delete-region (point) (line-beginning-position 2))))) + (lambda () + (delete-region (point) (line-beginning-position 2)) + ;; We need to tell `org-map-entries' to not skip over heading at + ;; point. Otherwise, it would continue from _next_ heading. See + ;; the docstring of `org-map-entries' for details. + (setq org-map-continue-from (point))))) (add-hook 'org-export-before-parsing-hook #'my-headline-removal) #+end_src diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex index 07463ee6a33..dd8cae5ce5e 100644 --- a/etc/refcards/orgcard.tex +++ b/etc/refcards/orgcard.tex @@ -1,5 +1,5 @@ % Reference Card for Org Mode -\def\orgversionnumber{9.6.6} +\def\orgversionnumber{9.6.7} \def\versionyear{2023} % latest update \input emacsver.tex diff --git a/lisp/org/ob-C.el b/lisp/org/ob-C.el index 3a6e99623f5..7763c4c07c1 100644 --- a/lisp/org/ob-C.el +++ b/lisp/org/ob-C.el @@ -339,7 +339,7 @@ org-babel-C-val-to-C-type (type (pcase basetype (`integerp '("int" "%d")) - (`floatp '("double" "%f")) + (`floatp '("double" "%s")) ;; %f rounds, use %s to print the float literally (`stringp (list (if (eq org-babel-c-variant 'd) "string" "const char*") diff --git a/lisp/org/ob-tangle.el b/lisp/org/ob-tangle.el index 980d4a12054..0b816a7c13c 100644 --- a/lisp/org/ob-tangle.el +++ b/lisp/org/ob-tangle.el @@ -513,6 +513,7 @@ org-babel-tangle--unbracketed-link (cdr (assq :tangle params))))) bare)))))) +(defvar org-outline-regexp) ; defined in lisp/org.el (defun org-babel-tangle-single-block (block-counter &optional only-this-block) "Collect the tangled source for current block. Return the list of block attributes needed by @@ -570,8 +571,8 @@ org-babel-tangle-single-block (buffer-substring (max (condition-case nil (save-excursion - (org-back-to-heading t) ; Sets match data - (match-end 0)) + (org-back-to-heading t) + (re-search-forward org-outline-regexp)) (error (point-min))) (save-excursion (if (re-search-backward diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el index 517d45b0224..df43ebcf0c5 100644 --- a/lisp/org/org-element.el +++ b/lisp/org/org-element.el @@ -7734,7 +7734,8 @@ org-element-cache-map ;; it to real beginning then despite ;; START being larger. (setq start nil) - (move-start-to-next-match nil) + (let ((data nil)) ; data may not be valid. ignore it. + (move-start-to-next-match nil)) ;; The new element may now start before ;; or at already processed position. ;; Make sure that we continue from an diff --git a/lisp/org/org-faces.el b/lisp/org/org-faces.el index 594c9a6e738..bb0958033fe 100644 --- a/lisp/org/org-faces.el +++ b/lisp/org/org-faces.el @@ -108,7 +108,7 @@ org-drawer "Face used for drawers." :group 'org-faces) -(defface org-property-value nil +(defface org-property-value '((t :inherit default)) "Face used for the value of a property." :group 'org-faces) diff --git a/lisp/org/org-fold-core.el b/lisp/org/org-fold-core.el index 027ff921581..6c17b00faf8 100644 --- a/lisp/org/org-fold-core.el +++ b/lisp/org/org-fold-core.el @@ -502,26 +502,34 @@ org-fold-core-cycle-over-indirect-buffers ;; different buffer. This can happen, for example, when ;; org-capture copies local variables into *Capture* buffer. (setq buffers (list (current-buffer))) - (dolist (buf (cons (or (buffer-base-buffer) (current-buffer)) - (buffer-local-value 'org-fold-core--indirect-buffers (or (buffer-base-buffer) (current-buffer))))) - (if (buffer-live-p buf) - (push buf buffers) - (dolist (spec (org-fold-core-folding-spec-list)) - (when (and (not (org-fold-core-get-folding-spec-property spec :global)) - (gethash (cons buf spec) org-fold-core--property-symbol-cache)) - ;; Make sure that dead-properties variable can be passed - ;; as argument to `remove-text-properties'. - (push t dead-properties) - (push (gethash (cons buf spec) org-fold-core--property-symbol-cache) - dead-properties)))))) + (let ((all-buffers (buffer-local-value + 'org-fold-core--indirect-buffers + (or (buffer-base-buffer) (current-buffer))))) + (dolist (buf (cons (or (buffer-base-buffer) (current-buffer)) + (buffer-local-value 'org-fold-core--indirect-buffers (or (buffer-base-buffer) (current-buffer))))) + (if (buffer-live-p buf) + (push buf buffers) + (dolist (spec (org-fold-core-folding-spec-list)) + (when (and (not (org-fold-core-get-folding-spec-property spec :global)) + (gethash (cons buf spec) org-fold-core--property-symbol-cache)) + ;; Make sure that dead-properties variable can be passed + ;; as argument to `remove-text-properties'. + (push t dead-properties) + (push (gethash (cons buf spec) org-fold-core--property-symbol-cache) + dead-properties))))) + (when dead-properties + (with-current-buffer (or (buffer-base-buffer) (current-buffer)) + (setq-local org-fold-core--indirect-buffers + (seq-filter #'buffer-live-p all-buffers)))))) (dolist (buf buffers) (with-current-buffer buf - (with-silent-modifications - (save-restriction - (widen) - (remove-text-properties - (point-min) (point-max) - dead-properties))) + (when dead-properties + (with-silent-modifications + (save-restriction + (widen) + (remove-text-properties + (point-min) (point-max) + dead-properties)))) ,@body)))) ;; This is the core function used to fold text in buffers. We use @@ -1277,19 +1285,19 @@ org-fold-core--fix-folded-region If the folded region is folded with a spec with non-nil :fragile property, unfold the region if the :fragile function returns non-nil." ;; If no insertions or deletions in buffer, skip all the checks. - (unless (or (eq org-fold-core--last-buffer-chars-modified-tick (buffer-chars-modified-tick)) - org-fold-core--ignore-modifications + (unless (or org-fold-core--ignore-modifications + (eq org-fold-core--last-buffer-chars-modified-tick (buffer-chars-modified-tick)) (memql 'ignore-modification-checks org-fold-core--optimise-for-huge-buffers)) ;; Store the new buffer modification state. (setq org-fold-core--last-buffer-chars-modified-tick (buffer-chars-modified-tick)) (save-match-data ;; Handle changes in all the indirect buffers and in the base ;; buffer. Work around Emacs bug#46982. - (when (eq org-fold-core-style 'text-properties) - (org-fold-core-cycle-over-indirect-buffers - ;; Re-hide text inserted in the middle/front/back of a folded - ;; region. - (unless (equal from to) ; Ignore deletions. + ;; Re-hide text inserted in the middle/front/back of a folded + ;; region. + (unless (equal from to) ; Ignore deletions. + (when (eq org-fold-core-style 'text-properties) + (org-fold-core-cycle-over-indirect-buffers (dolist (spec (org-fold-core-folding-spec-list)) ;; Reveal fully invisible text inserted in the middle ;; of visible portion of the buffer. This is needed, diff --git a/lisp/org/org-macs.el b/lisp/org/org-macs.el index 1552675f8a8..4efa8ba6800 100644 --- a/lisp/org/org-macs.el +++ b/lisp/org/org-macs.el @@ -1288,7 +1288,7 @@ org-replace-escapes (setq re (concat "%-?[0-9.]*" (substring (car e) 1))) (when (and (cdr e) (string-match re (cdr e))) (let ((sref (substring (cdr e) (match-beginning 0) (match-end 0))) - (safe "SREF")) + (safe (copy-sequence "SREF"))) (add-text-properties 0 3 (list 'sref sref) safe) (setcdr e (replace-match safe t t (cdr e))))) (while (string-match re string) diff --git a/lisp/org/org-mouse.el b/lisp/org/org-mouse.el index 3b2c4cba624..e0671f3d7d5 100644 --- a/lisp/org/org-mouse.el +++ b/lisp/org/org-mouse.el @@ -975,7 +975,7 @@ org-mouse-transform-to-outline (interactive) (org-back-to-heading) (let ((minlevel 1000) - (replace-text (concat (match-string 0) "* "))) + (replace-text (concat (make-string (org-current-level) ?*) "* "))) (beginning-of-line 2) (save-excursion (while (not (or (eobp) (looking-at org-outline-regexp))) diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el index 8d93af2c20d..9116e298aa9 100644 --- a/lisp/org/org-version.el +++ b/lisp/org/org-version.el @@ -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.6.6")) + (let ((org-release "9.6.7")) 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.6.6")) + (let ((org-git-version "release_9.6.7-5-gd1d0c3")) org-git-version)) (provide 'org-version) diff --git a/lisp/org/org.el b/lisp/org/org.el index d3e14fecec3..0043c0407a9 100644 --- a/lisp/org/org.el +++ b/lisp/org/org.el @@ -9,7 +9,7 @@ ;; URL: https://orgmode.org ;; Package-Requires: ((emacs "26.1")) -;; Version: 9.6.6 +;; Version: 9.6.7 ;; This file is part of GNU Emacs. ;; @@ -5691,7 +5691,7 @@ org-outline-level If this is called at a normal headline, the level is the number of stars. Use `org-reduced-level' to remove the effect of -`org-odd-levels'. Unlike to `org-current-level', this function +`org-odd-levels-only'. Unlike `org-current-level', this function takes into consideration inlinetasks." (org-with-wide-buffer (end-of-line) @@ -6621,7 +6621,7 @@ org-current-level "Return the level of the current entry, or nil if before the first headline. The level is the number of stars at the beginning of the headline. Use `org-reduced-level' to remove the effect of -`org-odd-levels'. Unlike to `org-outline-level', this function +`org-odd-levels-only'. Unlike `org-outline-level', this function ignores inlinetasks." (let ((level (org-with-limited-levels (org-outline-level)))) (and (> level 0) level))) @@ -9709,7 +9709,7 @@ org-after-todo-statistics-hook (defun org-summary-todo (n-done n-not-done) \"Switch entry to DONE when all subentries are done, to TODO otherwise.\" - (let (org-log-done org-log-states) ; turn off logging + (let (org-log-done org-todo-log-states) ; turn off logging (org-todo (if (= n-not-done 0) \"DONE\" \"TODO\"))))") (defvar org-todo-statistics-hook nil @@ -16253,7 +16253,8 @@ org-display-inline-images 2. Its description consists in a single link of the previous type. In this case, that link must be a well-formed plain - or angle link, i.e., it must have an explicit \"file\" type. + or angle link, i.e., it must have an explicit \"file\" or + \"attachment\" type. Equip each image with the key-map `image-map'. @@ -16284,7 +16285,7 @@ org-display-inline-images ;; "file:" links. Also check link abbreviations since ;; some might expand to "file" links. (file-types-re - (format "\\[\\[\\(?:file%s:\\|attachment:\\|[./~]\\)\\|\\]\\[\\( Date: Sun Jul 30 22:09:05 2023 +0300 ; * src/character.c (Fstring_width): Fix last change. diff --git a/src/character.c b/src/character.c index 5b8e99ab64d..4881b221a39 100644 --- a/src/character.c +++ b/src/character.c @@ -470,11 +470,12 @@ DEFUN ("string-width", Fstring_width, Sstring_width, 1, 3, 0, Width of each character in STRING is generally taken according to `char-width', but character compositions and the display table in effect are taken into consideration. -Tabs in are always taken to occupy `tab-width' columns, although they -might take fewer columns depending on the column where they begin. +Tabs in STRING are always assumed to occupy `tab-width' columns, +although they might take fewer columns depending on the column where +they begin on display. The effect of faces and fonts, including fonts used for non-Latin and -other unusual characters, such as emoji, is ignored as well, as are -display properties and invisible text. +other unusual characters, such as emoji, is ignored, as are display +properties and invisible text. For these reasons, the results are just an approximation, especially on GUI frames; for accurate dimensions of text as it will be commit bf83fdba9e3c3f5cba4a5b6f9580007c8a27135b Author: Eli Zaretskii Date: Sun Jul 30 20:10:54 2023 +0300 ; * src/character.c (Fstring_width, Fchar_width): Doc fixes. diff --git a/src/character.c b/src/character.c index 13d516987d3..5b8e99ab64d 100644 --- a/src/character.c +++ b/src/character.c @@ -260,8 +260,12 @@ char_width (int c, struct Lisp_Char_Table *dp) DEFUN ("char-width", Fchar_width, Schar_width, 1, 1, 0, - doc: /* Return width of CHAR when displayed in the current buffer. -The width is measured by how many columns it occupies on the screen. + doc: /* Return width of CHAR in columns when displayed in the current buffer. +The width of CHAR is measured by how many columns it will occupy on the screen. +This is based on data in `char-width-table', and ignores the actual +metrics of the character's glyph as determined by its font. +If the display table in effect replaces CHAR on display with +something else, the function returns the width of the replacement. Tab is taken to occupy `tab-width' columns. usage: (char-width CHAR) */) (Lisp_Object ch) @@ -457,20 +461,25 @@ lisp_string_width (Lisp_Object string, ptrdiff_t from, ptrdiff_t to, } DEFUN ("string-width", Fstring_width, Sstring_width, 1, 3, 0, - doc: /* Return width of STRING when displayed in the current buffer. -Width is measured by how many columns it occupies on the screen. + doc: /* Return width of STRING in columns when displayed in the current buffer. +Width of STRING is measured by how many columns it will occupy on the screen. + Optional arguments FROM and TO specify the substring of STRING to consider, and are interpreted as in `substring'. -When calculating width of a multibyte character in STRING, -only the base leading-code is considered; the validity of -the following bytes is not checked. Tabs in STRING are always -taken to occupy `tab-width' columns. The effect of faces and fonts -used for non-Latin and other unusual characters (such as emoji) is -ignored as well, as are display properties and invisible text. -For these reasons, the results are not generally reliable; -for accurate dimensions of text as it will be displayed, -use `string-pixel-width' or `window-text-pixel-size' instead. +Width of each character in STRING is generally taken according to +`char-width', but character compositions and the display table in +effect are taken into consideration. +Tabs in are always taken to occupy `tab-width' columns, although they +might take fewer columns depending on the column where they begin. +The effect of faces and fonts, including fonts used for non-Latin and +other unusual characters, such as emoji, is ignored as well, as are +display properties and invisible text. + +For these reasons, the results are just an approximation, especially +on GUI frames; for accurate dimensions of text as it will be +displayed, use `string-pixel-width' or `window-text-pixel-size' +instead. usage: (string-width STRING &optional FROM TO) */) (Lisp_Object str, Lisp_Object from, Lisp_Object to) { commit 1198cdb55673d5f5545ee0ec9008b9832b830f06 Merge: 23fc4793001 2b8796eea19 Author: Eli Zaretskii Date: Sun Jul 30 12:19:32 2023 -0400 Merge branch 'emacs-29' of git.sv.gnu.org:/srv/git/emacs into emacs-29 commit 2b8796eea1979fe6891ab9d80cd126fe8980167a Author: Mattias Engdegård Date: Sun Jul 30 15:30:38 2023 +0200 Fix rx wrong-code bug: ranges starting with ^ (rx (in (?^ . ?a))) was incorrectly translated to "[^-a]". Change it so that we get "[_-a^]" instead. * lisp/emacs-lisp/rx.el (rx--generate-alt): Split ranges starting with `^` occurring first in a non-negated character alternative. * test/lisp/emacs-lisp/rx-tests.el (rx-any): Add and adapt tests. (cherry picked from commit 5f5d668ac7917d61e9366fe0c3efd7b542671c3d) diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index 46f61c26bc4..30195cbae32 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el @@ -445,13 +445,19 @@ rx--generate-alt (setcar dash-l ?.)) ; Reduce --x to .-x (setq items (nconc items '((?- . ?-)))))) - ;; Deal with leading ^ and range ^-x. - (when (and (consp (car items)) - (eq (caar items) ?^) - (cdr items)) - ;; Move ^ and ^-x to second place. - (setq items (cons (cadr items) - (cons (car items) (cddr items))))) + ;; Deal with leading ^ and range ^-x in non-negated set. + (when (and (eq (car-safe (car items)) ?^) + (not negated)) + (if (eq (cdar items) ?^) + ;; single leading ^ + (when (cdr items) + ;; Move the ^ to second place. + (setq items (cons (cadr items) + (cons (car items) (cddr items))))) + ;; Split ^-x to _-x^ + (setq items (cons (cons ?_ (cdar items)) + (cons '(?^ . ?^) + (cdr items)))))) (cond ;; Empty set: if negated, any char, otherwise match-nothing. diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index 028250b7352..9c8628a8f26 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -112,23 +112,33 @@ rx-any (should (equal (rx (any "]" "^") (any "]" "-") (any "-" "^") (not (any "]" "^")) (not (any "]" "-")) (not (any "-" "^"))) - "[]^][]-][-^][^]^][^]-][^-^]")) + "[]^][]-][-^][^]^][^]-][^^-]")) (should (equal (rx (any "]" "^" "-") (not (any "]" "^" "-"))) "[]^-][^]^-]")) + (should (equal (rx (any "^-f") (any "^-f" "-") + (any "^-f" "z") (any "^-f" "z" "-")) + "[_-f^][_-f^-][_-f^z][_-f^z-]")) + (should (equal (rx (not (any "^-f")) (not (any "^-f" "-")) + (not (any "^-f" "z")) (not (any "^-f" "z" "-"))) + "[^^-f][^^-f-][^^-fz][^^-fz-]")) + (should (equal (rx (any "^-f" word) (any "^-f" "-" word)) + "[_-f^[:word:]][_-f^[:word:]-]")) + (should (equal (rx (not (any "^-f" word)) (not (any "^-f" "-" word))) + "[^^-f[:word:]][^^-f[:word:]-]")) (should (equal (rx (any "-" ascii) (any "^" ascii) (any "]" ascii)) "[[:ascii:]-][[:ascii:]^][][:ascii:]]")) (should (equal (rx (not (any "-" ascii)) (not (any "^" ascii)) (not (any "]" ascii))) - "[^[:ascii:]-][^[:ascii:]^][^][:ascii:]]")) + "[^[:ascii:]-][^^[:ascii:]][^][:ascii:]]")) (should (equal (rx (any "-]" ascii) (any "^]" ascii) (any "-^" ascii)) "[][:ascii:]-][]^[:ascii:]][[:ascii:]^-]")) (should (equal (rx (not (any "-]" ascii)) (not (any "^]" ascii)) (not (any "-^" ascii))) - "[^][:ascii:]-][^]^[:ascii:]][^[:ascii:]^-]")) + "[^][:ascii:]-][^]^[:ascii:]][^^[:ascii:]-]")) (should (equal (rx (any "-]^" ascii) (not (any "-]^" ascii))) "[]^[:ascii:]-][^]^[:ascii:]-]")) (should (equal (rx (any "^" lower upper) (not (any "^" lower upper))) - "[[:lower:]^[:upper:]][^[:lower:]^[:upper:]]")) + "[[:lower:]^[:upper:]][^^[:lower:][:upper:]]")) (should (equal (rx (any "-" lower upper) (not (any "-" lower upper))) "[[:lower:][:upper:]-][^[:lower:][:upper:]-]")) (should (equal (rx (any "]" lower upper) (not (any "]" lower upper))) @@ -143,7 +153,7 @@ rx-any "[]-a-][^]-a-]")) (should (equal (rx (any "--]") (not (any "--]")) (any "-" "^-a") (not (any "-" "^-a"))) - "[].-\\-][^].-\\-][-^-a][^-^-a]")) + "[].-\\-][^].-\\-][_-a^-][^^-a-]")) (should (equal (rx (not (any "!a" "0-8" digit nonascii))) "[^!0-8a[:digit:][:nonascii:]]")) (should (equal (rx (any) (not (any))) commit ba60070b81c4b507b856269031a17b99e9f5e77c Author: Basil L. Contovounesios Date: Tue Jun 13 13:53:31 2023 +0100 Backport: Fix some tree-sitter :match regexps This was originally installed on 2023-06-17 in the emacs-29 release branch and later reverted. This backport follows the Emacs 29.1 release (bug#64019). The shy groups were caught by modified versions of the GNU ELPA packages xr and relint: - https://github.com/mattiase/xr/pull/6 - https://github.com/mattiase/relint/pull/14 * lisp/progmodes/ruby-ts-mode.el (ruby-ts--s-p-query): Quote special character in regexp. * lisp/progmodes/java-ts-mode.el (java-ts-mode--font-lock-settings): * lisp/progmodes/js.el (js--plain-method-re): (js--treesit-font-lock-settings): * lisp/progmodes/rust-ts-mode.el (rust-ts-mode--font-lock-settings): * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode--font-lock-settings): Replace character alternative [\\d], which matches '\' or 'd', with the most likely intention [0-9]. Fix shy groups mistyped as optional colons. Remove unneeded numbered :match group in rust-ts-mode. (cherry picked from commit cd8d3f3379ec7179fac4bb8e9c40658be15a64f6) diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el index 463872dcbc8..7f2fc4188a3 100644 --- a/lisp/progmodes/java-ts-mode.el +++ b/lisp/progmodes/java-ts-mode.el @@ -168,7 +168,7 @@ java-ts-mode--font-lock-settings :override t :feature 'constant `(((identifier) @font-lock-constant-face - (:match "\\`[A-Z_][A-Z_\\d]*\\'" @font-lock-constant-face)) + (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face)) [(true) (false)] @font-lock-constant-face) :language 'java :override t diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 70048e5d26c..bbe3159f596 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -106,7 +106,7 @@ js--opt-cpp-start (defconst js--plain-method-re (concat "^\\s-*?\\(" js--dotted-name-re "\\)\\.prototype" - "\\.\\(" js--name-re "\\)\\s-*?=\\s-*?\\(\\(:?async[ \t\n]+\\)function\\)\\_>") + "\\.\\(" js--name-re "\\)\\s-*?=\\s-*?\\(\\(?:async[ \t\n]+\\)function\\)\\_>") "Regexp matching an explicit JavaScript prototype \"method\" declaration. Group 1 is a (possibly-dotted) class name, group 2 is a method name, and group 3 is the `function' keyword.") @@ -3540,7 +3540,7 @@ js--treesit-font-lock-settings :language 'javascript :feature 'constant '(((identifier) @font-lock-constant-face - (:match "\\`[A-Z_][A-Z_\\d]*\\'" @font-lock-constant-face)) + (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face)) [(true) (false) (null)] @font-lock-constant-face) @@ -3646,7 +3646,7 @@ js--treesit-font-lock-settings :feature 'number '((number) @font-lock-number-face ((identifier) @font-lock-number-face - (:match "\\`\\(:?NaN\\|Infinity\\)\\'" @font-lock-number-face))) + (:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face))) :language 'javascript :feature 'operator diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el index 91d65a2777b..4b951f7606f 100644 --- a/lisp/progmodes/ruby-ts-mode.el +++ b/lisp/progmodes/ruby-ts-mode.el @@ -1021,7 +1021,7 @@ ruby-ts--s-p-query (:match "\\`\\$[#\"'`:?]" @global_var)) ;; ?' ?" ?` are character literals. ((character) @char - (:match "\\`?[#\"'`:?]" @char)) + (:match "\\`\\?[#\"'`:?]" @char)) ;; Symbols like :+, :<=> or :foo=. ((simple_symbol) @symbol (:match "\\s." @symbol)) diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index b55af0b49e3..999c1d7ae96 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el @@ -143,7 +143,7 @@ rust-ts-mode--font-lock-settings eol)) @font-lock-builtin-face))) ((identifier) @font-lock-type-face - (:match "\\`\\(:?Err\\|Ok\\|None\\|Some\\)\\'" @font-lock-type-face))) + (:match "\\`\\(?:Err\\|Ok\\|None\\|Some\\)\\'" @font-lock-type-face))) :language 'rust :feature 'comment @@ -232,9 +232,12 @@ rust-ts-mode--font-lock-settings (type_identifier) @font-lock-type-face ((scoped_identifier name: (identifier) @rust-ts-mode--fontify-tail)) ((scoped_identifier path: (identifier) @font-lock-type-face) - (:match - "\\`\\(u8\\|u16\\|u32\\|u64\\|u128\\|usize\\|i8\\|i16\\|i32\\|i64\\|i128\\|isize\\|char\\|str\\)\\'" - @font-lock-type-face)) + (:match ,(rx bos + (or "u8" "u16" "u32" "u64" "u128" "usize" + "i8" "i16" "i32" "i64" "i128" "isize" + "char" "str") + eos) + @font-lock-type-face)) ((scoped_identifier path: (identifier) @rust-ts-mode--fontify-scope)) ((scoped_type_identifier path: (identifier) @rust-ts-mode--fontify-scope)) (type_identifier) @font-lock-type-face) @@ -249,7 +252,7 @@ rust-ts-mode--font-lock-settings :feature 'constant `((boolean_literal) @font-lock-constant-face ((identifier) @font-lock-constant-face - (:match "\\`[A-Z][A-Z\\d_]*\\'" @font-lock-constant-face))) + (:match "\\`[A-Z][0-9A-Z_]*\\'" @font-lock-constant-face))) :language 'rust :feature 'variable diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index bacf9fbd08e..d234bf2f6e6 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -198,7 +198,7 @@ typescript-ts-mode--font-lock-settings :language language :feature 'constant `(((identifier) @font-lock-constant-face - (:match "\\`[A-Z_][A-Z_\\d]*\\'" @font-lock-constant-face)) + (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face)) [(true) (false) (null)] @font-lock-constant-face) :language language @@ -345,7 +345,7 @@ typescript-ts-mode--font-lock-settings :feature 'number `((number) @font-lock-number-face ((identifier) @font-lock-number-face - (:match "\\`\\(:?NaN\\|Infinity\\)\\'" @font-lock-number-face))) + (:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face))) :language language :feature 'operator commit 092a2ecb083d9f3e301c5b9bf23e0f2f666fec27 Author: Eli Zaretskii Date: Sun Jul 30 18:08:27 2023 +0300 ; * admin/make-tarball.txt: Update based on latest experiences. diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt index 1cc97c883af..fddf8444067 100644 --- a/admin/make-tarball.txt +++ b/admin/make-tarball.txt @@ -426,6 +426,13 @@ Now change to the 'manual' directory and invoke upload-manuals: If upload-manuals fails, resolve the problems and re-invoke it. This requires running make-manuals again, since upload-manuals destructively modifies the 'manual' directory where you invoke it. + + If new files fail to be "cvs add"ed, they need to be manually + removed from under /path/to/webpages/cvs/checkout before retrying + upload-manuals, because if they exist, they will not be handled as + "new" files, and will not be "cvs add"ed by the next run of the + script. + Also, upload-manuals invokes "cvs commit -f", so if you run it several times, some files will be committed more than once even though they were not changed in-between. Suck it up. commit 23fc4793001e4de920bb8dae280133f4467a7797 Author: Eli Zaretskii Date: Sun Jul 30 11:05:00 2023 -0400 ; Fix admin/upload-manuals script * admin/upload-manuals (html_mono): Chdir to the right directory before committing. (html_node): Avoid computing $stale in newly-created or empty directories. diff --git a/admin/upload-manuals b/admin/upload-manuals index 6f44456efb8..a206177a5c1 100755 --- a/admin/upload-manuals +++ b/admin/upload-manuals @@ -305,13 +305,14 @@ done ## TODO: check for removed manuals. [ "$clist" ] && ( - cd $webdir/manual/html_mono + cd $webdir/manual [ "$new" ] && { echo "Adding new files: $new" $cvs add $new || die "add error" new_manual $new || die echo "Remember to add new entries to manual/index.html" } + cd html_mono $cvs commit -m "$message" $clist || die "commit error" ) @@ -339,9 +340,13 @@ for d in html_node/*; do done stale= - for f in $webdir/manual/$d/*.html; do - [ -e ${f#$webdir/manual/} ] || stale="$stale ${f##*/}" - done + # Newly created directory will have no HTML files, so none can be + # "stale". But 'for' returns the original wildcard, so avoid that. + ls $webdir/manual/$d/*.html > /dev/null 2>&1 && { + for f in $webdir/manual/$d/*.html; do + [ -e ${f#$webdir/manual/} ] || stale="$stale ${f##*/}" + done + } mv $d/*.html $webdir/manual/$d/ commit 7b9e83d3cf92abf1411c1999068839a7e1bb36e8 Author: Po Lu Date: Sun Jul 30 21:18:54 2023 +0800 Fix bug#64923 * src/xfns.c (Fx_create_frame): Prevent cairo surface from being left without a desired size. (bug#64923) diff --git a/src/xfns.c b/src/xfns.c index 528ae61ca32..d723b1f7d7c 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5109,6 +5109,17 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, gui_default_parameter (f, parms, Qfullscreen, Qnil, "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); +#ifdef USE_CAIRO + /* Set the initial size of the Cairo surface to the frame's current + width and height. If the window manager doesn't resize the new + frame after it's first mapped, Emacs will create a surface with + empty dimensions in response to to the initial exposure event, + which will persist until the next time it's resized. + (bug#64923) */ + x_cr_update_surface_desired_size (f, FRAME_PIXEL_WIDTH (f), + FRAME_PIXEL_HEIGHT (f)); +#endif /* USE_CAIRO */ + /* Make the window appear on the frame and enable display, unless the caller says not to. However, with explicit parent, Emacs cannot control visibility, so don't try. */ commit 0002d4f31666719c5e972ca65efffc70750db613 Author: Ulrich Müller Date: Fri Jul 28 12:21:42 2023 +0200 Avoid spurious whitespace in the modeline of emacsclient frames * lisp/bindings.el (mode-line-client): Compute 'help-echotext property in advance. (Bug#58183) (cherry picked from commit 8c3338f6ba354218aee12c223d778be4180f892b) diff --git a/lisp/bindings.el b/lisp/bindings.el index f4881ac388c..6db043e495c 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -226,9 +226,9 @@ mode-line-mule-info (put 'mode-line-mule-info 'risky-local-variable t) (defvar mode-line-client - `("" - (:propertize ("" (:eval (if (frame-parameter nil 'client) "@" ""))) - help-echo ,(purecopy "emacsclient frame"))) + `(:eval + (if (frame-parameter nil 'client) + ,(propertize "@" 'help-echo (purecopy "emacsclient frame")))) "Mode line construct for identifying emacsclient frames.") ;; Autoload if this file no longer dumped. ;;;###autoload commit 96d52f894441c06d7fdc10617e707f410ad66cc3 Author: Mattias Engdegård Date: Thu Jul 27 16:13:54 2023 +0200 Fix function help for advised aliases (bug#64797) * lisp/help-fns.el (help-fns--analyze-function): For aliases, use the base function name if at the end of the chain. This fixes a regression introduced in d30fde6b0cc. Reported by Michael Heerdegen. (cherry picked from commit 024bd1f09099ae186442001a75e578638070e296) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index be13d40cfa3..eb50f3b26ca 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -995,7 +995,8 @@ help-fns--analyze-function (symbol-name function))))))) (real-def (cond ((and aliased (not (subrp def))) - (car (function-alias-p real-function t))) + (or (car (function-alias-p real-function)) + real-function)) ((subrp def) (intern (subr-name def))) (t def)))) commit 71419a60c3710549742c2489b7fce7783ac0f65c Author: Eli Zaretskii Date: Thu Jul 27 15:34:38 2023 +0300 Avoid crashes due to invalid 'mode-line-format' * src/xdisp.c (display_mode_element, redisplay_window_error): Don't take XCAR of what can be Qnil. (Bug#64893) (cherry picked from commit 7ea3f39deec3d54914077455e70605a14eb7d200) diff --git a/src/xdisp.c b/src/xdisp.c index fdb4acd71bf..9cddcfeda27 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -17601,6 +17601,7 @@ redisplay_window_error (Lisp_Object error_data) if (max_redisplay_ticks > 0 && CONSP (error_data) && EQ (XCAR (error_data), Qerror) + && CONSP (XCDR (error_data)) && STRINGP (XCAR (XCDR (error_data)))) Vdelayed_warnings_list = Fcons (list2 (XCAR (error_data), XCAR (XCDR (error_data))), @@ -27091,7 +27092,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, oprops = Fcopy_sequence (oprops); tem = props; - while (CONSP (tem)) + while (CONSP (tem) && CONSP (XCDR (tem))) { oprops = plist_put (oprops, XCAR (tem), XCAR (XCDR (tem))); commit b2cb6e821603b53b88b99b5cbf24dc715fc25867 Author: Eli Zaretskii Date: Thu Jul 27 09:51:39 2023 +0300 ; Better documentation of HOME on MS-Windows * doc/emacs/custom.texi (Find Init): Add footnote about HOME on MS-Windows. (Bug#64871) (cherry picked from commit d59630e591cd49780e6554d1025c1879bb89680b) diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index e56b1fe964c..ea29876be80 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -2804,7 +2804,12 @@ Find Init @subsection How Emacs Finds Your Init File Emacs normally finds your init file in a location under your home -directory. @xref{Init File}. +directory@footnote{ +On MS-Windows, there's no single directory considered by all programs +as ``the home directory'' of the user. Emacs uses one of the +pertinent directories as the equivalent of your home directory; see +@ref{Windows HOME}, for the details. +}. @xref{Init File}. Emacs looks for your init file using the filenames @file{~/.emacs.el}, @file{~/.emacs}, or @file{~/.emacs.d/init.el} in that order; you can commit 54e98b5f9bdd82a84fc301f1faf9a09a7326dc3f Author: Eli Zaretskii Date: Thu Jul 27 09:37:03 2023 +0300 ; Clarify documentation of 'server-after-make-frame-hook' * doc/lispref/frames.texi (Creating Frames): * lisp/server.el (server-after-make-frame-hook): Clarify documentation of 'server-after-make-frame-hook'. (Bug#64873) (cherry picked from commit e650a14f64b9ebea69615c19ca4466c14af35857) diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index a8ac9a214f6..9bfb9e50c6c 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -187,9 +187,13 @@ Creating Frames @end defvar @defopt server-after-make-frame-hook -A normal hook run when the Emacs server creates a client frame. When -this hook is called, the created frame is the selected one. -@xref{Emacs Server,,, emacs, The GNU Emacs Manual}. +A normal hook run when the Emacs server starts using a client frame. +When this hook is called, the client frame is the selected one. Note +that, depending on how @command{emacsclient} was invoked +(@pxref{Invoking emacsclient,,, emacs, The GNU Emacs Manual}), this +client frame could be a new frame created for the client, or it could +be an existing frame that the server reused for handling the client +commands. @xref{Emacs Server,,, emacs, The GNU Emacs Manual}. @end defopt diff --git a/lisp/server.el b/lisp/server.el index eaf24a770e4..104fc060c05 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -182,8 +182,10 @@ server-switch-hook :type 'hook) (defcustom server-after-make-frame-hook nil - "Hook run when the Emacs server creates a client frame. -The created frame is selected when the hook is called." + "Hook run when the Emacs server starts using a client frame. +The client frame is selected when the hook is called. +The client frame could be a newly-created frame, or an +existing frame reused for this purpose." :type 'hook :version "27.1") commit d13029cdcde22b8e68d91d8f0c0b2649f72675f2 Author: Eli Zaretskii Date: Tue Jul 25 20:38:01 2023 +0300 Avoid crashes under 'which-key-mode' * src/keyboard.c (Fthis_single_command_keys): Don't allow calls to Fvector with negative first argument. (Bug#64857) (cherry picked from commit 65834b8f8d53402517da7fe2446f5bac0aa30c39) diff --git a/src/keyboard.c b/src/keyboard.c index 99f886821e2..101a6f3a78e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -11116,8 +11116,8 @@ DEFUN ("this-single-command-keys", Fthis_single_command_keys, The value is always a vector. */) (void) { - return Fvector (this_command_key_count - - this_single_command_key_start, + ptrdiff_t nkeys = this_command_key_count - this_single_command_key_start; + return Fvector (nkeys < 0 ? 0 : nkeys, (XVECTOR (this_command_keys)->contents + this_single_command_key_start)); } commit cb1f7db249096bf58e28fb586d7ef926536dcb09 Author: Eli Zaretskii Date: Tue Jul 25 16:49:18 2023 +0300 ; Minor documentation fixes * src/character.c (Fstring_width): Doc fix. * doc/emacs/trouble.texi (Understanding Bug Reporting): Fix typo (bug#64854). (cherry picked from commit f6e4e77d23d0be79be83ef41c3ea9acd5c983af2) diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index bccdea72b19..d2e8ac3452a 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -706,7 +706,7 @@ Understanding Bug Reporting for the detailed raw data. Reporting the facts is straightforward, but many people strain to posit explanations and report them instead of the facts. If the explanations are based on guesses about how -Emacs is implemented, they night not be useful; meanwhile, lacking the +Emacs is implemented, they might not be useful; meanwhile, lacking the facts, we will have no real information about the bug. If you want to actually @emph{debug} the problem, and report explanations that are more than guesses, that is useful---but please include the raw facts diff --git a/src/character.c b/src/character.c index d0b18367a83..13d516987d3 100644 --- a/src/character.c +++ b/src/character.c @@ -470,7 +470,7 @@ DEFUN ("string-width", Fstring_width, Sstring_width, 1, 3, 0, ignored as well, as are display properties and invisible text. For these reasons, the results are not generally reliable; for accurate dimensions of text as it will be displayed, -use `window-text-pixel-size' instead. +use `string-pixel-width' or `window-text-pixel-size' instead. usage: (string-width STRING &optional FROM TO) */) (Lisp_Object str, Lisp_Object from, Lisp_Object to) { commit 4a687bcc20d4d5a3297bfaecd6bd9d400ba39195 Author: Eli Zaretskii Date: Sun Jul 30 10:08:27 2023 +0300 Bump Emacs version * README: * configure.ac: * nt/README.W32: * msdos/sed2v2.inp: * etc/NEWS: Bump Emacs version to 29.1.50. diff --git a/README b/README index 38de64ff128..64b8c833d3f 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Copyright (C) 2001-2023 Free Software Foundation, Inc. See the end of the file for license conditions. -This directory tree holds version 29.1 of GNU Emacs, the extensible, +This directory tree holds version 29.1.50 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. The file INSTALL in this directory says how to build and install GNU diff --git a/configure.ac b/configure.ac index ad1068a70ad..5dd182ae6e5 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ AC_PREREQ([2.65]) dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el. -AC_INIT([GNU Emacs], [29.1], [bug-gnu-emacs@gnu.org], [], +AC_INIT([GNU Emacs], [29.1.50], [bug-gnu-emacs@gnu.org], [], [https://www.gnu.org/software/emacs/]) dnl Set emacs_config_options to the options of 'configure', quoted for the shell, diff --git a/etc/NEWS b/etc/NEWS index 75bf8f5dd28..922938f13a1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -15,6 +15,33 @@ in older Emacs versions. You can narrow news to a specific version by calling 'view-emacs-news' with a prefix argument or by typing 'C-u C-h C-n'. + +* Installation Changes in Emacs 29.2 + + +* Startup Changes in Emacs 29.2 + + +* Changes in Emacs 29.2 + + +* Editing Changes in Emacs 29.2 + + +* Changes in Specialized Modes and Packages in Emacs 29.2 + + +* New Modes and Packages in Emacs 29.2 + + +* Incompatible Lisp Changes in Emacs 29.2 + + +* Lisp Changes in Emacs 29.2 + + +* Changes in Emacs 29.2 on Non-Free Operating Systems + * Installation Changes in Emacs 29.1 diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index c5d8e1a4919..bcf92ac6be3 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -67,7 +67,7 @@ /^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/ /^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/ /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/ -/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "29.1"/ +/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "29.1.50"/ /^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/ /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/ /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/ diff --git a/nt/README.W32 b/nt/README.W32 index 9c3c675cbb4..4eda5e1e243 100644 --- a/nt/README.W32 +++ b/nt/README.W32 @@ -1,7 +1,7 @@ Copyright (C) 2001-2023 Free Software Foundation, Inc. See the end of the file for license conditions. - Emacs version 29.1 for MS-Windows + Emacs version 29.1.50 for MS-Windows This README file describes how to set up and run a precompiled distribution of the latest version of GNU Emacs for MS-Windows. You commit a9b28224af0f73d1fe0f422e9b318c5b91af889b (tag: refs/tags/emacs-29.1) Author: Eli Zaretskii Date: Sun Jul 30 02:11:49 2023 -0400 ; Last-minute changes befor releasing 29.1 * ChangeLog.4: * etc/HISTORY: Update. diff --git a/ChangeLog.4 b/ChangeLog.4 index d8f7fc4a579..9d64446d68e 100644 --- a/ChangeLog.4 +++ b/ChangeLog.4 @@ -1,7 +1,49 @@ -2023-07-29 Eli Zaretskii +2023-07-30 Eli Zaretskii * Version 29.1 released. +2023-07-29 Vincenzo Pupillo + + Update CMake support due to upstream changes (bug#64922) + + A recent change in tree-sitter-cmake grammar support for CMake (commit + fe9b5e0), now put arguments are wrapped in a new argument_list node. + To support the old and new version of the grammar, a new function was + added on which string syntax highlighting now depends. + + * lisp/progmodes/cmake-ts-mode.el + (cmake-ts-mode--font-lock-compatibility-fe9b5e0): Indent helper + function to handle different tree-sitter-cmake version. + * lisp/progmodes/cmake-ts-mode.el + (cmake-ts-mode--font-lock-settings): Use the new function to handle + the new argument_list node. + +2023-07-24 Theodor Thornhill + + Remove nullptr named node from c++-ts-mode (bug#64818) + + The nullptr node was changed from a named node to an unnamed node + upstream[0], which caused font locking to break. As this is a small + enough regression, no compat code is required. + + * lisp/progmodes/c-ts-mode.el (c-ts-mode--font-lock-settings): Remove + node no longer in use. + + [0]: + https://github.com/tree-sitter/tree-sitter-c/commit/c75868f8b508ae32a0c8490da91bb31b2b96430e + +2023-07-24 Theodor Thornhill + + Make compat check also check typescript + + * lisp/progmodes/typescript-ts-mode.el + (tsx-ts-mode--font-lock-compatibility-bb1f97b): + Add argument so that we run the 'treesit-query-capture' when the + language is 'typescript', not only 'tsx'. + + * lisp/progmodes/typescript-ts-mode.el + (typescript-ts-mode--font-lock-settings): Use supplied argument. + 2023-07-23 Eli Zaretskii Bump Emacs version @@ -117338,7 +117380,7 @@ This file records repository revisions from commit f2ae39829812098d8269eafbc0fcb98959ee5bb7 (exclusive) to -commit 76a142e265df742b2fdd3d220607a46fcbc30e1a (inclusive). +commit 7d1737071fba1fd83039aac34f34f6b90c9579b8 (inclusive). See ChangeLog.3 for earlier changes. ;; Local Variables: diff --git a/etc/HISTORY b/etc/HISTORY index 30ad1b8f51b..70f8669cb29 100644 --- a/etc/HISTORY +++ b/etc/HISTORY @@ -230,7 +230,7 @@ GNU Emacs 28.2 (2022-09-12) emacs-28.2 GNU Emacs 28.3 (2023-02-17) emacs-28.3 (was not actually released) -GNU Emacs 29.1 (2023-07-29) emacs-29.1 +GNU Emacs 29.1 (2023-07-30) emacs-29.1 ---------------------------------------------------------------------- commit 7da1cee56b3cc35fad7ff6f67147bb77cda6bb98 Author: Vincenzo Pupillo Date: Sat Jul 29 21:10:57 2023 +0200 Update CMake support due to upstream changes (bug#64922) A recent change in tree-sitter-cmake grammar support for CMake (commit fe9b5e0), now put arguments are wrapped in a new argument_list node. To support the old and new version of the grammar, a new function was added on which string syntax highlighting now depends. * lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode--font-lock-compatibility-fe9b5e0): Indent helper function to handle different tree-sitter-cmake version. * lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode--font-lock-settings): Use the new function to handle the new argument_list node. diff --git a/lisp/progmodes/cmake-ts-mode.el b/lisp/progmodes/cmake-ts-mode.el index 9d35d8077bd..53d471c381a 100644 --- a/lisp/progmodes/cmake-ts-mode.el +++ b/lisp/progmodes/cmake-ts-mode.el @@ -31,6 +31,7 @@ (eval-when-compile (require 'rx)) (declare-function treesit-parser-create "treesit.c") +(declare-function treesit-query-capture "treesit.c") (declare-function treesit-induce-sparse-tree "treesit.c") (declare-function treesit-node-child "treesit.c") (declare-function treesit-node-start "treesit.c") @@ -87,6 +88,42 @@ cmake-ts-mode--if-conditions "VERSION_GREATER_EQUAL" "VERSION_LESS" "VERSION_LESS_EQUAL") "CMake if conditions for tree-sitter font-locking.") +(defun cmake-ts-mode--font-lock-compatibility-fe9b5e0 () + "Indent rules helper, to handle different releases of tree-sitter-cmake. +Check if a node type is available, then return the right indent rules." + ;; handle commit fe9b5e0 + (condition-case nil + (progn (treesit-query-capture 'cmake '((argument_list) @capture)) + `(((foreach_command + ((argument_list) @font-lock-constant-face + (:match ,(rx-to-string + `(seq bol + (or ,@cmake-ts-mode--foreach-options) + eol)) + @font-lock-constant-face)))) + ((if_command + ((argument_list) @font-lock-constant-face + (:match ,(rx-to-string + `(seq bol + (or ,@cmake-ts-mode--if-conditions) + eol)) + @font-lock-constant-face)))))) + (error + `(((foreach_command + ((argument) @font-lock-constant-face + (:match ,(rx-to-string + `(seq bol + (or ,@cmake-ts-mode--foreach-options) + eol)) + @font-lock-constant-face)))) + ((if_command + ((argument) @font-lock-constant-face + (:match ,(rx-to-string + `(seq bol + (or ,@cmake-ts-mode--if-conditions) + eol)) + @font-lock-constant-face)))))))) + (defvar cmake-ts-mode--font-lock-settings (treesit-font-lock-rules :language 'cmake @@ -95,20 +132,7 @@ cmake-ts-mode--font-lock-settings :language 'cmake :feature 'builtin - `(((foreach_command - ((argument) @font-lock-constant-face - (:match ,(rx-to-string - `(seq bol - (or ,@cmake-ts-mode--foreach-options) - eol)) - @font-lock-constant-face)))) - ((if_command - ((argument) @font-lock-constant-face - (:match ,(rx-to-string - `(seq bol - (or ,@cmake-ts-mode--if-conditions) - eol)) - @font-lock-constant-face))))) + (cmake-ts-mode--font-lock-compatibility-fe9b5e0) :language 'cmake :feature 'comment commit c2d95dd00e6cb0abaf4e7550f38c8c2c9ca22f2d Author: Theodor Thornhill Date: Mon Jul 24 20:18:09 2023 +0200 Remove nullptr named node from c++-ts-mode (bug#64818) The nullptr node was changed from a named node to an unnamed node upstream[0], which caused font locking to break. As this is a small enough regression, no compat code is required. * lisp/progmodes/c-ts-mode.el (c-ts-mode--font-lock-settings): Remove node no longer in use. [0]: https://github.com/tree-sitter/tree-sitter-c/commit/c75868f8b508ae32a0c8490da91bb31b2b96430e diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 7f4f6f11387..98797bf3ce7 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -574,9 +574,7 @@ c-ts-mode--font-lock-settings :feature 'constant `((true) @font-lock-constant-face (false) @font-lock-constant-face - (null) @font-lock-constant-face - ,@(when (eq mode 'cpp) - '((nullptr) @font-lock-constant-face))) + (null) @font-lock-constant-face) :language mode :feature 'keyword commit 4e977136d3148c3baa0e03568c7a2c7dc28eea65 Author: Theodor Thornhill Date: Mon Jul 24 16:17:34 2023 +0200 Make compat check also check typescript * lisp/progmodes/typescript-ts-mode.el (tsx-ts-mode--font-lock-compatibility-bb1f97b): Add argument so that we run the 'treesit-query-capture' when the language is 'typescript', not only 'tsx'. * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode--font-lock-settings): Use supplied argument. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index ae0a80aea86..bacf9fbd08e 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -154,15 +154,16 @@ typescript-ts-mode--operators "&&" "||" "!" "?.") "TypeScript operators for tree-sitter font-locking.") -(defun tsx-ts-mode--font-lock-compatibility-bb1f97b () +(defun tsx-ts-mode--font-lock-compatibility-bb1f97b (language) "Font lock rules helper, to handle different releases of tree-sitter-tsx. -Check if a node type is available, then return the right font lock rules." +Check if a node type is available, then return the right font lock rules. +Argument LANGUAGE is either `typescript' or `tsx'." ;; handle commit bb1f97b ;; Warning: treesitter-query-capture says both node types are valid, ;; but then raises an error if the wrong node type is used. So it is ;; important to check with the new node type (member_expression) (condition-case nil - (progn (treesit-query-capture 'tsx '((member_expression) @capture)) + (progn (treesit-query-capture language '((member_expression) @capture)) '((jsx_opening_element [(member_expression (identifier)) (identifier)] @typescript-ts-jsx-tag-face) @@ -337,7 +338,7 @@ typescript-ts-mode--font-lock-settings :language language :feature 'jsx - (append (tsx-ts-mode--font-lock-compatibility-bb1f97b) + (append (tsx-ts-mode--font-lock-compatibility-bb1f97b language) `((jsx_attribute (property_identifier) @typescript-ts-jsx-attribute-face))) :language language commit 906ecf442c43da98e6b8c7488f549691901690e9 Author: Eli Zaretskii Date: Sun Jul 23 16:36:30 2023 +0300 ; * etc/HISTORY: Fix the 28.3 entry. diff --git a/etc/HISTORY b/etc/HISTORY index d60397ab3cb..30ad1b8f51b 100644 --- a/etc/HISTORY +++ b/etc/HISTORY @@ -228,7 +228,7 @@ GNU Emacs 28.1 (2022-04-04) emacs-28.1 GNU Emacs 28.2 (2022-09-12) emacs-28.2 -GNU Emacs 28.3 (2023-02-17) emacs-28.3 +GNU Emacs 28.3 (2023-02-17) emacs-28.3 (was not actually released) GNU Emacs 29.1 (2023-07-29) emacs-29.1 commit 31cef9a4eac01fff5ff4fcb89d7e2b7815e93bad (tag: refs/tags/emacs-29.1-rc1) Author: Eli Zaretskii Date: Sun Jul 23 04:18:31 2023 -0400 ; * lisp/ldefs-boot.el: Regenerated for Emacs 29.1. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 8f8a30d0382..99fff8d8c98 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -14808,9 +14808,8 @@ 'find-grep If CONFIRM is non-nil, the user will be given an opportunity to edit the command before it's run. -Interactively, the user can use the \\`M-c' command while entering -the regexp to indicate whether the grep should be case sensitive -or not. +Interactively, the user can use \\\\[read-regexp-toggle-case-fold] while entering the regexp +to indicate whether the grep should be case sensitive or not. (fn REGEXP &optional FILES DIR CONFIRM)" t) (autoload 'zrgrep "grep" "\ @@ -20673,6 +20672,8 @@ "minibuf-eldef" (autoload 'duplicate-line "misc" "\ Duplicate the current line N times. Interactively, N is the prefix numeric argument, and defaults to 1. +The user option `duplicate-line-final-position' specifies where to +move point after duplicating the line. Also see the `copy-from-above-command' command. (fn &optional N)" t) @@ -20731,7 +20732,7 @@ "minibuf-eldef" The return value is always nil. (fn &optional LOADED-ONLY-P BUFFER)" t) -(register-definition-prefixes "misc" '("list-dynamic-libraries--")) +(register-definition-prefixes "misc" '("duplicate-line-final-position" "list-dynamic-libraries--")) ;;; Generated autoloads from misearch.el @@ -33204,7 +33205,7 @@ "type-break" at least 3 (which is the default value). (fn)" t) -(register-definition-prefixes "typescript-ts-mode" '("typescript-ts-mode-")) +(register-definition-prefixes "typescript-ts-mode" '("tsx-ts-mode--" "typescript-ts-mode-")) ;;; Generated autoloads from international/ucs-normalize.el commit 82d6bb66fea018bf05707db6a2b4507b07cc3f98 Author: Eli Zaretskii Date: Sun Jul 23 03:54:44 2023 -0400 Update HISTORY and ChangeLog.4 * etc/HISTORY: * ChangeLog.4: Update for the Emacs 29.1 release. diff --git a/ChangeLog.4 b/ChangeLog.4 index db65528350c..d8f7fc4a579 100644 --- a/ChangeLog.4 +++ b/ChangeLog.4 @@ -1,3 +1,23 @@ +2023-07-29 Eli Zaretskii + + * Version 29.1 released. + +2023-07-23 Eli Zaretskii + + Bump Emacs version + + * README: + * configure.ac: + * nt/README.W32: + * msdos/sed2v2.inp: Bump Emacs version to 29.1. + +2023-07-23 Eli Zaretskii + + Update AUTHORS and ChangeLog.4 + + * ChangeLog.4: + * etc/AUTHORS: Update for Emacs 29.1 release. + 2023-07-22 Vincenzo Pupillo Update JSX support due to upstream changes (bug#64647) diff --git a/etc/HISTORY b/etc/HISTORY index 8b80473e321..d60397ab3cb 100644 --- a/etc/HISTORY +++ b/etc/HISTORY @@ -230,6 +230,8 @@ GNU Emacs 28.2 (2022-09-12) emacs-28.2 GNU Emacs 28.3 (2023-02-17) emacs-28.3 +GNU Emacs 29.1 (2023-07-29) emacs-29.1 + ---------------------------------------------------------------------- This file is part of GNU Emacs. commit 7d1737071fba1fd83039aac34f34f6b90c9579b8 Author: Eli Zaretskii Date: Sun Jul 23 03:40:46 2023 -0400 Bump Emacs version * README: * configure.ac: * nt/README.W32: * msdos/sed2v2.inp: Bump Emacs version to 29.1. diff --git a/README b/README index 8187d95df3f..38de64ff128 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Copyright (C) 2001-2023 Free Software Foundation, Inc. See the end of the file for license conditions. -This directory tree holds version 29.0.92 of GNU Emacs, the extensible, +This directory tree holds version 29.1 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. The file INSTALL in this directory says how to build and install GNU diff --git a/configure.ac b/configure.ac index df74f8cd2f8..ad1068a70ad 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ AC_PREREQ([2.65]) dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el. -AC_INIT([GNU Emacs], [29.0.92], [bug-gnu-emacs@gnu.org], [], +AC_INIT([GNU Emacs], [29.1], [bug-gnu-emacs@gnu.org], [], [https://www.gnu.org/software/emacs/]) dnl Set emacs_config_options to the options of 'configure', quoted for the shell, diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index c26b79ca7db..c5d8e1a4919 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -67,7 +67,7 @@ /^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/ /^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/ /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/ -/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "29.0.92"/ +/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "29.1"/ /^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/ /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/ /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/ diff --git a/nt/README.W32 b/nt/README.W32 index 18b6efb30cd..9c3c675cbb4 100644 --- a/nt/README.W32 +++ b/nt/README.W32 @@ -1,7 +1,7 @@ Copyright (C) 2001-2023 Free Software Foundation, Inc. See the end of the file for license conditions. - Emacs version 29.0.92 for MS-Windows + Emacs version 29.1 for MS-Windows This README file describes how to set up and run a precompiled distribution of the latest version of GNU Emacs for MS-Windows. You commit 6b00e1a197d01471c442544fb8c1dc1389efa58a Author: Eli Zaretskii Date: Sun Jul 23 03:36:32 2023 -0400 Update AUTHORS and ChangeLog.4 * ChangeLog.4: * etc/AUTHORS: Update for Emacs 29.1 release. diff --git a/ChangeLog.4 b/ChangeLog.4 index b8efa20cdf9..db65528350c 100644 --- a/ChangeLog.4 +++ b/ChangeLog.4 @@ -1,3 +1,670 @@ +2023-07-22 Vincenzo Pupillo + + Update JSX support due to upstream changes (bug#64647) + + A recent change in tree-sitter-javascript grammar support for + JSX (commit bb1f97b), changed two things: + 1. renamed nested_identifier to member_expression + 2. removed jsx_fragment, jsx_text is used instead + + * lisp/progmodes/js.el (js-jsx--treesit-indent-compatibility-bb1f97b): + Indent helper function to handle different tree-sitter-javascript + version. + * lisp/progmodes/js.el (js--treesit-indent-rules): Use the new + function to handle both jsx_fragment and jsx_text. + * lisp/progmodes/js.el (js-jsx--treesit-font-lock-compatibility-bb1f97b): + Font lock helper function for handle different tree-sitter-javascript + version. + * lisp/progmodes/js.el (js--treesit-font-lock-settings): Use the new + function to handle both nested_identifier and member_expression. + +2023-07-22 Vincenzo Pupillo + + Update TSX support due to upstream changes (bug#64647) + + A recent change in tree-sitter-typescript grammar support for + TSX (commit b893426), changed two things: + 1. renamed nested_identifier to member_expression + 2. removed jsx_fragment, jsx_text is used instead + + * lisp/progmodes/typescript-ts-mode.el + (tsx-ts-mode--indent-compatibility-b893426): Indent helper function + to handle different tree-sitter-typescript version. + * lisp/progmodes/typescript-ts-mode.el + (typescript-ts-mode--indent-rules): use the new function to handle + both jsx_fragment and jsx_text. + * lisp/progmodes/typescript-ts-mode.el + (tsx-ts-mode--font-lock-compatibility-bb1f97b): Font lock helper + function for handle different tree-sitter-typescript version. + * lisp/progmodes/typescript-ts-mode.el + (typescript-ts-mode--font-lock-settings): Use the new function to + handle both nested_identifier and member_expression. + +2023-07-21 Philipp Stephani + + Unbreak build with CHECK_STRUCTS. + + The hash for the Lisp_Overlay structure has changed due to the (comment-only) + commit 7ac947f34c745c61f8acc1fe2452a2c720d57a0d. + + * src/pdumper.c (dump_overlay): Update struct hash. + +2023-07-21 Mattias Engdegård + + Revert "Improve commentary in nsfns.m" + + This reverts commit 3af27a4b815906c2ee38cbaf3a765289b3df061a, + because it missed the point completely. + Please talk to the original author next time. + +2023-07-20 Eli Zaretskii + + Fix NetBSD build --with-sound + + * src/sound.c (alsa_write): Use ESTRPIPE only if defined. + (Bug#64698) + +2023-07-20 Mauro Aranda + + Fix typo in pre-filter for underline property + + * lisp/cus-face.el (custom-face-attributes): Fix typo (Bug#64347) + +2023-07-20 Po Lu + + Improve commentary in nsfns.m + + * src/nsfns.m (lispString): Avoid C++ comment and make the + commentary actually relevant to the reason `make_string' is + used. + +2023-07-20 Po Lu + + Fix typos and ommissions in cus-edit.el + + * lisp/cus-edit.el (custom-display): Add missing display types. + +2023-07-18 Mattias Engdegård + + Convert NUL-containing NSString objects to Lisp strings correctly + + This cures the inability to paste text containing NUL from other + applications on macOS, introduced by mistake in 7e3c2b553f + (bug#64697). + + * src/nsfns.m ([NSString lispString]): Use make_string instead of + build_string which relies on NUL-termination. + +2023-07-15 Spencer Baugh + + Ignore quit while getting interprogram paste in kill-new + + On X, if the current selection owner is not responding to selection + requests, the user may want to take ownership of the selection. The + obvious way to do this is to kill some text (which a user might also + be doing just as part of normal editing at the time the selection + owner becomes nonresponsive). However, if + save-interprogram-paste-before-kill is non-nil, then killing text will + hang until the user quits, and this quit will abort the entire + kill-new, preventing the user from taking ownership of the selection. + + Now instead if the user quits while we are attempting to retrieve the + selection from hanging owner, we will proceed to take ownership of the + selection as normal, resolving the problem. + + (One example of a selction owner that might not be responding to + selection requests is another instance of Emacs itself; while Emacs is + blocked in call-process or Lisp execution, it currently does not + respond to selection requests.) + + * lisp/simple.el (kill-new): Ignore quit while getting interprogram + paste (bug#64423) + +2023-07-15 Wang Diancheng (tiny change) + + * lisp/progmodes/gdb-mi.el: Fix interactive invocation of 'gud-go'. + + Bug#64590. + +2023-07-15 Valtteri Vuorikoski (tiny change) + + Fix NetBSD build with and without ncurses + + * configure.ac (netbsd): Don't set TERMINFO=no unless the termcap + library is either -ltermcap or -lcurses. This prevents aborts + because on recent versions of NetBSD libtermcap is actually a + symlink to libterminfo. (Bug#64577) + +2023-07-14 YugaEgo + + Improve documentation of 'enable-local-variables' in Emacs manual + + * doc/emacs/custom.texi (Safe File Variables): Document ':all'. + (Bug#64621) + +2023-07-13 Jim Porter + + Add documentation about remote access in Eshell + + Do not merge to master. This is a backport of 438921161ac. + + * doc/misc/eshell.texi + (Invocation): Mention the '*' prefix. + (Remote Access): New section... + (Commands): ... link to it. + +2023-07-13 Jim Porter + + Document some missing Eshell commands + + Do not merge to master. This is a backport of f7a899d7ca0. + + * doc/misc/eshell.texi (Built-ins): Document 'eshell-debug'. + (Extra built-in commands): Document 'count', 'ff', and 'gf'. + +2023-07-13 Jim Porter + + Document optional Eshell modules + + Do not merge to master. This is a backport of 77f13edab0f. + + * doc/misc/eshell.texi (Built-ins): Move disabled-by-default commands + to... + (Tramp extensions, Extra built-in commands): ...here + (Optional modules, Key rebinding, Smart scrolling): Add documentation. + (Bug and ideas): Documentation is no longer incomplete! + +2023-07-13 Jim Porter + + Correct the Eshell documentation about how to write new modules + + * doc/misc/eshell.texi (Writing a module): Fix the documentation. + 'eshell-defgroup' doesn't exist anymore. + + Do not merge to master. This is a backport of 77f13edab0f. + +2023-07-13 Jim Porter + + Restructure Eshell extension modules documentation + + This adds a section for documenting all the optional modules. + + Do not merge to master. This is a backport of f2981a1681d. + + * doc/misc/eshell.texi (Extension modules): Move explanation about + writing modules to... + (Writing a module): ... here. + (Module testing): Remove. Testing an Eshell module doesn't require + any special documentation. + (Key binding, Smart scrolling, Electric forward slash): Move under... + (Optional modules): ... here. + (Directory handling, Terminal emulation): Remove. These modules are + enabled by default, and so are documented above. + (Tramp extensions, Extra built-in commands): New sections. + +2023-07-13 Jens Schmidt + + Replace duplicate text from epa.texi by a reference + + * doc/misc/auth.texi (GnuPG and EasyPG Assistant Configuration): + Replace duplicate text from epa.texi by a reference to + that. (Bug#64154) + +2023-07-13 Jens Schmidt + + Add basic usage information and fix references + + * doc/misc/epa.texi (Top): Add menu entry for new node GnuPG Pinentry. + (Quick Start): Add information on and reference to basic GnuPG + configuration. + (Encrypting/decrypting gpg files): Add usage information. + (GnuPG version compatibility): Update version information. + (GnuPG Pinentry): Add new node. + (Caching Passphrases): Describe mandatory gpg-agent usage for GnuPG + 2.0 and later. + (Overview, Encrypting/decrypting gpg files, GnuPG version compatibility) + (Caching Passphrases, Bug Reports): Fix references, terminology, + mark-up, and index entries. (Bug#64154) + +2023-07-13 Jens Schmidt + + Add concept index, title-case structure titles + + * doc/misc/epa.texi (Top, Overview, Commands, Key management) + (Cryptographic operations on regions, Cryptographic operations on files) + (Dired integration, Mail-mode integration) + (Encrypting/decrypting gpg files, Querying a key server) + (GnuPG version compatibility, Caching Passphrases) + (GNU Free Documentation License): Add concept index, title-case + structure titles. (Bug#64154) + +2023-07-10 Eli Zaretskii + + Fix show-paren-mode when the parentheses is partially visible + + * lisp/paren.el (show-paren-function): Support the case where the + open paren is partially visible, but enough so to not consider it + "off-screen". (Bug#64547) + +2023-07-08 Gregory Heytings + + Merge branch 'scratch/bug64391' into emacs-29 + +2023-07-08 Michael Albinus + + * lisp/net/tramp.el (tramp-get-buffer-string): Stabilize. + +2023-07-08 Michael Albinus + + Fix stale cache in Tramp (don't merge) + + * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-directly): + Flush cache in time. + +2023-07-07 Mattias Engdegård + + Mark failing icalendar test as unstable (bug#56241) + + * test/lisp/calendar/icalendar-tests.el + (icalendar-export-bug-56241-dotted-pair): + This test started failing early July 2023 in multiple branches at + once without any change to the code and is likely sensitive to the + current date. Tag it to keep it quiet for now. + +2023-07-06 Gregory Heytings + + Simplify after adding internal function to enter a labeled restriction + + * src/editfns.c: (Finternal__labeled_narrow_to_region): Merge the + code of Finternal__label_restriction into this function. + (Finternal__label_restriction): Remove this function. + (syms_of_editfns): Remove the 'outermost-restriction' buffer local + variable, which is not used anymore, and the symbol of + 'internal--label-restriction'. + (Fwiden): Remove the call to reset the 'outermost-restriction' + buffer local variable. + +2023-07-06 Gregory Heytings + + Add internal function to enter a labeled restriction + + * src/editfns.c (Finternal__labeled_narrow_to_region): New + function. A specific function is necessary to avoid unnecessary + slowdowns when 'narrow-to-region'/'widen' are called in a loop. + (Fnarrow_to_region): Remove the call to Fset, which has been moved + into Finternal__labeled_narrow_to_region. + (labeled_narrow_to_region): Use the new function. + (syms_of_editfns): Add the symbol of the new function. + + * lisp/subr.el (internal--with-restriction): Use the new function. + +2023-07-04 Robert Pluim + + Improve natnump shortdoc + + * lisp/emacs-lisp/shortdoc.el (number): Make it clear that zero + satisfies 'natnump'. Move 'natnump' next to 'cl-plusp' to highlight + the difference between them. + +2023-07-04 Robert Pluim + + correct info documentation of benchmark-call + + * doc/lispref/debugging.texi (Profiling): 'benchmark-call' is a defun, + not a macro. + +2023-07-03 Juri Linkov + + * lisp/progmodes/grep.el (rgrep): Fix docstring. + + Instead of the incorrect key `M-c' produce the right key + with \\\\[read-regexp-toggle-case-fold]. + +2023-07-03 Spencer Baugh + + Include a help-echo for flymake's modeline counters + + This helps clarify what each of these numbers mean. This is inspired + by 'compilation-mode-line-errors' which does the same. + * lisp/progmodes/flymake.el (flymake--mode-line-counter): Add + help-echo to mode line properties. (Bug#64424) + +2023-07-02 Eli Zaretskii + + Avoid errors in completion due to 'completion-regexp-list' + + * doc/lispref/minibuf.texi (Basic Completion): + * src/minibuf.c (syms_of_minibuf) : + Document that global non-nil settings of 'completion-regexp-list' + are not safe. + + * lisp/minibuffer.el (completion-pcm--merge-completions): Avoid + errors in 'try-completion' when PREFIX is nil. (Bug#64351) + +2023-07-01 Alan Mackenzie + + C Mode: Don't fontify foo globally as type due to "struct foo" + + This fixes bug#64322. + + * lisp/progmodes/cc-langs.el (c-typeless-decl-kwds): Make the + entry for c-mode nil. + +2023-07-01 Mattias Engdegård + + * lisp/rect.el (rectangle--duplicate-right): Fix rectangle dup bug. + + This is a necessary adjustment to changes to rect.el in Emacs 29. + +2023-07-01 Spencer Baugh + + Add project command entries to the menu-bar + + This will make it easier for new users to learn these increasingly + important and useful commands. (Bug#63469) + + * lisp/menu-bar.el (menu-bar-file-menu): Add project-dired and + project-find-file entries. + (menu-bar-search-menu): Add project-find-regexp entry. + (menu-bar-replace-menu): Add project-query-replace regexp entry. + (menu-bar-shell-commands-menu): Add project-shell entry. + (menu-bar-buffers-menu-command-entries): Add project-switch-to-buffer + and project-list-buffer entries. + (menu-bar-project-menu): Add. + (menu-bar-tools-menu): Add "Project" submenu, and also project-compile + entry and change text for compile entry. + +2023-06-30 Eli Zaretskii + + Improve documentation of registers + + * doc/lispref/text.texi (Registers): Document buffers in + registers. Mention "frameset" as another name for "frame + configuration". + * doc/emacs/regs.texi (Registers, Configuration Registers) + (File and Buffer Registers): Clarify and improve wording. Add + cross-references and indexing. + (Configuration Registers): Rename the section to a more accurate + name. (Bug#64354) + + * lisp/register.el (jump-to-register, point-to-register) + (register-alist, frame-configuration-to-register): Doc fixes. + (Bug#64353) + +2023-06-29 Andrew G Cohen + + Use a temporary buffer in nnagent-request-set-mark (bug#64117) + + Commit cb12a84f2c519a48dd87453c925e3bc36d9944db inadvertently removed + the use of a temporary buffer in nnagent-request-set-mark. Bug and + fix reported by Jens Schmidt + + * lisp/gnus/nnagent.el (nnagent-request-set-mark): Restore the use of + a temporary buffer that was inadvertently removed. + + (cherry picked from commit 5075d752773c31d959272a7e2b73b1dc38ba184c) + +2023-06-29 john muhl (tiny change) + + Support cons cell as value of ':line-width' box attribute + + * lisp/calculator.el (calculator-need-3-lines): Support + values of a face's ':line-width' box attribute that are + cons cells. (Bug#64344) + +2023-06-29 Yuan Fu + + Add missing calls to treesit_record_change in editfns.c + + These should be all that are missing. See the next commit for detail. + + * src/editfns.c (Ftranslate_region_internal): + (Ftranspose_regions): Call treesit_record_change. + +2023-06-29 Yuan Fu + + Call treesit_record_change in subst-char-in-region (bug#64329) + + * src/editfns.c (Fsubst_char_in_region): Call treesit_record_change in + the else branch. + +2023-06-29 Juri Linkov + + * lisp/misc.el (duplicate-line-final-position): New defcustom (bug#64185). + + * lisp/misc.el (duplicate-line): Use it. + + * test/lisp/misc-tests.el (misc--duplicate-line): Add tests for + duplicate-line-final-position. + + Don't merge to master. + +2023-06-29 Daniel Martín + + Make js-beginning-of-defun return non-nil on success + + The docstring of 'beginning-of-defun-function' says that the + function shall return non-nil when it found the beginning + of a defun. This is specially important because the calling + code decides when to move point depending on the return value. + * lisp/progmodes/js.el (js-beginning-of-defun) + (js--beginning-of-defun-flat): Return non-nil when the beginning + of a defun is found. (Bug#64283) + + * test/lisp/progmodes/js-tests.el (js-mode-end-of-defun): Add a unit + test. + +2023-06-27 Yuan Fu + + Tree-sitter use with-silent-modifications like jit-lock (bug#64321) + + * lisp/treesit.el (treesit--font-lock-notifier): Use + with-silent-modifications when marking modified text to be fontified + by jit-lock. This is what jit-lock itself does. + +2023-06-27 Stephen Berman + + Fix todo-mode.el Commentary and a doc string (bug#64298) + + * lisp/calendar/todo-mode.el: Explicitly note in the Commentary + that the Todo mode user manual is a separate Info manual in the + Emacs installation. + (todo-always-add-time-string): Replace doc string, which was + mistakenly retained in the initial merge of this version of + todo-mode.el, by a correct description of this user option. + +2023-06-27 Stephen Berman + + Prevent truncation of todo-mode categories sexp + + * lisp/calendar/todo-mode.el (todo-delete-file) + (todo-move-category, todo-convert-legacy-files) + (todo-update-categories-sexp, todo-check-format): + Bind print-length and print-level to nil before using prin1 + and related functions, to avoid truncating the todo categories + sexp and possibly corrupting the file format. + +2023-06-27 Stephen Berman + + Avoid making todo-mode buffers manually editable + + * lisp/calendar/todo-mode.el (todo-add-category) + (todo-move-category, todo-edit-item--header) + (todo-set-item-priority, todo-move-item, todo-item-undone) + (todo-archive-done-item, todo-set-category-number): Restrict the + scope of nil buffer-read-only to the function calls that change + buffer text, thereby preventing todo mode buffers from becoming + manually editable and hence possibly corrupted when the minibuffer + is in use. + +2023-06-26 Michael Albinus + + Fix Tramp mount-spec (don't merge) + + * lisp/net/tramp-fuse.el (tramp-fuse-mounted-p): The mount-spec + could contain an optional trailing slash. (Bug#64278) + +2023-06-25 Daniel Semyonov + + Fix VC package build when doc file isn't in a subdir + + * lisp/emacs-lisp/package-vc.el (package-vc--build-documentation): + Expand 'file' before attempting to get its directory. (Bug#64242) + +2023-06-25 Michael Albinus + + Fix type check in tramp-get-buffer-string + + * lisp/net/tramp.el (tramp-get-buffer-string): Check, that BUFFER + is really a bufferp. + +2023-06-25 Richard M. Stallman + + Clarify list terminology + + * doc/lispintro/emacs-lisp-intro.texi (Lists diagrammed): + Mention "cons cell". Add index entries. + (car & cdr): Simplify etymology of `car' and `cdr'. + Explain why for some purposes they are better than `first' and `rest'. + Mention cons cells. + + (cherry picked from commit 188c90c7c111dbbdc3edd29c23b59ade26f97bfd) + +2023-06-24 Mattias Engdegård + + * lisp/emacs-lisp/shortdoc.el: More and better `substring` examples. + + Suggested by Juri Linkov. + +2023-06-24 Eli Zaretskii + + Fix "C-x RET r" when the new encoding is UTF + + * src/fileio.c (Finsert_file_contents): Update point of + 'conversion_buffer' before decoding the last block. (Bug#64253) + +2023-06-23 Dmitry Gutov + + Fix "vc-print-log does not erase buffer" and associated problems + + * lisp/vc/vc.el (vc-deduce-fileset): Make sure to retain the + buffer switch (if it did), bug#63949. + +2023-06-23 Theodor Thornhill + + Add selector_expression indentation rule + + * lisp/progmodes/go-ts-mode.el (go-ts-mode--indent-rules): New rule. + +2023-06-22 Eli Zaretskii + + Add "nixd" LSP server to Eglot + + * lisp/progmodes/eglot.el (eglot-server-programs): Add "nixd". + Patch by Brian Leung . (Bug#64214) + +2023-06-22 Eli Zaretskii + + Fix building --with-native-compilation=aot from release tarball + + * lisp/Makefile.in (%.eln): Pattern rule for AOT native + compilation. + (compile-eln-targets, compile-eln-aot): New targets for AOT native + compilation. + + * src/Makefile.in (../native-lisp): If NATIVE_COMPILATION_AOT is + set, also native-compile all the other Lisp files. + (Bug#64167) + +2023-06-21 Alan Mackenzie + + Fix bug#64152 (Minibuffer sometimes goes "modal") + + In particular, when a frame has no minibuffer and is using that + of a different "normal" frame, C-x 5 o, etc., and GUI + operations fail. + + Fix by partially reverting the commit from 2022-07-07 15:38:09 + +0000 "Remove obscure, obsolete code from do_switch_frame". As + a consequent change, also revert the commit from 2022-07-08 + 20:19:03 +0000 "Remove now unused parameter TRACK from + do_switch_frame". + + * src/frame.c (do_switch_frame): Restore the TRACK parameter. + Restore the code which redirects the frame focus when a new + frame gets selected. + + * src/frame.c (Fselect_frame, Fhandle_switch_frame) + (delete_frame) + * src/keyboard.c (quit_throw_to_read_char) + * src/lisp.h (do_switch_frame prototype) + * src/minibuf.c (read_minibuf_unwind) + * src/window.c (Fset_window_configuration): Restore the TRACK + argument to do_switch_frame. + + * src/xterm.c (x_try_restore_frame): Add a zero TRACK argument + to do_switch_frame. + +2023-06-21 Eli Zaretskii + + Disable target-async by default in gdb-mi.el + + * lisp/progmodes/gdb-mi.el (gdb-non-stop-setting): Disable until + bug#63084 is fixed. (Bug#64186) + +2023-06-20 Filipp Gunbin + + Revert "Fix parsing of dn line if WITHDN is non-nil" + + This reverts commits 71b27779a9a and d2246b26275, because they change + the return value of "ldap-search" in an incompatible way. The fix + (a different one) will be done on master instead (bug#64089). + +2023-06-20 Eli Zaretskii + + Don't truncate filenames with "emacs.el" in them + + * lisp/emacs-lisp/find-func.el (find-function-search-for-symbol): + Avoid false positives when looking for "emacs.el" matches the + likes of "emacs.elpa". (Bug#64143) + +2023-06-20 Eli Zaretskii + + Improve documentation of 'minibuffer-message' + + * doc/lispref/minibuf.texi (Minibuffer Misc): Clarify that + 'minibuffer-message' behaves like 'message' if called from a + buffer that is not a minibuffer. + + * lisp/minibuffer.el (minibuffer-message) + (set-minibuffer-message, clear-minibuffer-message): Doc fixes. + (Bug#64165) + +2023-06-19 João Távora + + Eglot: again fix positions of coinciding inlay hint overlays (bug#64101) + + This bug originated from the previous fix, and is reproducible on non + Mac OS platforms, as long as the very latest version (at time of + writing) of the rust-analyzer server is used. + + * lisp/progmodes/eglot.el (eglot--update-hints-1): Reverse + priorities when pegging overlays after (i.e. when before-string is + used). + +2023-06-18 Eli Zaretskii + + * lisp/ldefs-boot.el: Regenerate. + +2023-06-18 Eli Zaretskii + + Bump Emacs version to 29.0.92 + + * README: + * configure.ac: + * nt/README.W32: + * msdos/sed2v2.inp: Bump version to 29.0.92. + 2023-06-18 Mattias Engdegård Describe primarily the Emacs s-exp dialect for treesit queries @@ -116651,7 +117318,7 @@ This file records repository revisions from commit f2ae39829812098d8269eafbc0fcb98959ee5bb7 (exclusive) to -commit 8f62e7b85f69bb4026e9cf2971668b0d77077792 (inclusive). +commit 76a142e265df742b2fdd3d220607a46fcbc30e1a (inclusive). See ChangeLog.3 for earlier changes. ;; Local Variables: diff --git a/etc/AUTHORS b/etc/AUTHORS index 9bd490dd3f8..27d01ed9eb9 100644 --- a/etc/AUTHORS +++ b/etc/AUTHORS @@ -112,9 +112,9 @@ Alan Mackenzie: wrote cc-awk.el debug-early.el and co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-fonts.el cc-langs.el cc-mode.el cc-styles.el cc-vars.el and changed cc-mode.texi bytecomp.el minibuf.c window.c edebug.el - follow.el lisp.h display.texi eval.c keyboard.c subr.el frame.c lread.c + follow.el frame.c lisp.h display.texi eval.c keyboard.c subr.el lread.c syntax.texi xdisp.c progmodes/compile.el programs.texi font-lock.el - modes.texi window.el windows.texi and 190 other files + modes.texi window.el windows.texi and 191 other files Alan Modra: changed unexelf.c @@ -389,7 +389,7 @@ and changed nnir.el gnus-sum.el nnimap.el gnus-group.el gnus.texi gnus-msg.el gnus-int.el gnus-search.el auth-source.el gnus-art.el gnus-cache.el gnus.el nnheader.el nnspool.el deps.mk dns.el fns-tests.el fns.c gnus-agent.el gnus-cloud.el gnus-registry.el - and 14 other files + and 15 other files Andrew Hall: changed paren.el @@ -1190,7 +1190,7 @@ Daniel Martín: changed c-ts-mode.el nsterm.m shortdoc.el ns-win.el simple.el diff-mode-tests.el erc.texi files.el files.texi indent.erts msdos-xtra.texi progmodes/python.el search.texi .lldbinit basic.texi c-ts-mode-tests.el cmacexp.el compilation.txt compile-tests.el - compile.texi configure.ac and 43 other files + compile.texi configure.ac and 45 other files Daniel McClanahan: changed lisp-mode.el @@ -1227,7 +1227,7 @@ Daniel Ralston: changed rcirc.el Daniel Schoepe: changed gnus-sum.el -Daniel Semyonov: changed mairix.el +Daniel Semyonov: changed mairix.el package-vc.el Dani Moncayo: changed msys-to-w32 Makefile.in configure.ac buffers.texi lists.texi mini.texi INSTALL README.W32 basic.texi custom.texi @@ -1660,9 +1660,9 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c] chartab-tests.el coding-tests.el etags-tests.el rxvt.el tty-colors.el and co-wrote help-tests.el and changed xdisp.c display.texi w32.c msdos.c simple.el w32fns.c - files.el fileio.c keyboard.c emacs.c text.texi w32term.c dispnew.c - configure.ac frames.texi w32proc.c files.texi xfaces.c window.c - dispextern.h lisp.h and 1329 other files + files.el fileio.c keyboard.c emacs.c text.texi w32term.c configure.ac + dispnew.c frames.texi w32proc.c files.texi xfaces.c window.c + dispextern.h lisp.h and 1330 other files Eliza Velasquez: changed server.el @@ -2170,7 +2170,7 @@ Gregor Schmid: changed intervals.c intervals.h tcl-mode.el textprop.c Gregory Chernov: changed nnslashdot.el -Gregory Heytings: changed xdisp.c editfns.c keyboard.c buffer.c subr.el +Gregory Heytings: changed xdisp.c editfns.c keyboard.c subr.el buffer.c dispextern.h lisp.h buffer.h display.texi efaq.texi files.el isearch.el minibuffer.el Makefile.in bytecode.c composite.c positions.texi bytecomp.el emake help-fns.el lread.c and 78 other files @@ -2686,7 +2686,8 @@ and changed mml-sec.el gnus-util.el message.texi mml-smime.el mml1991.el Jens Petersen: wrote find-func.el and changed mule-cmds.el pcmpl-rpm.el -Jens Schmidt: changed plstore.el comint.el gnus.texi isearch.el ldap.el +Jens Schmidt: changed epa.texi plstore.el auth.texi comint.el gnus.texi + isearch.el ldap.el Jens Toivo Berger Thielemann: changed word-help.el @@ -2919,6 +2920,8 @@ John Mastro: changed auth-source.el ibuffer.el w32heap.c John Mongan: changed progmodes/f90.el +John Muhl: changed calculator.el + John Paul Wallington: changed ibuffer.el ibuf-ext.el subr.el help-fns.el rmail.el files.el thumbs.el bindings.el fns.c xfns.c arc-mode.el bytecomp.el cus-theme.el font-lock.el hexl.el ibuf-macs.el info.el @@ -3122,9 +3125,9 @@ Juri Linkov: wrote compose.el emoji.el files-x.el misearch.el repeat-tests.el replace-tests.el tab-bar-tests.el tab-bar.el tab-line.el and changed isearch.el simple.el info.el replace.el dired.el dired-aux.el - minibuffer.el progmodes/grep.el window.el subr.el vc.el mouse.el + progmodes/grep.el minibuffer.el window.el subr.el vc.el mouse.el outline.el diff-mode.el repeat.el image-mode.el files.el menu-bar.el - search.texi startup.el progmodes/compile.el and 472 other files + search.texi startup.el progmodes/compile.el and 473 other files Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h w32console.c w32heap.c w32inevt.c w32term.h @@ -3985,7 +3988,7 @@ Mauro Aranda: changed wid-edit.el cus-edit.el custom.el wid-edit-tests.el widget.texi perl-mode.el custom-tests.el checkdoc-tests.el checkdoc.el cperl-mode-tests.el cus-edit-tests.el cus-theme.el customize.texi files.texi gnus.texi octave.el pong.el align.el auth-source.el - autorevert.el button.el and 44 other files + autorevert.el button.el and 45 other files Maxime Edouard Robert Froumentin: changed gnus-art.el mml.el @@ -4793,7 +4796,7 @@ Philipp Stephani: wrote callint-tests.el checkdoc-tests.el lread-tests.el mouse-tests.el startup-tests.el xt-mouse-tests.el and changed emacs-module.c emacs-module-tests.el configure.ac json.c process.c eval.c internals.texi json-tests.el process-tests.el alloc.c - emacs-module.h.in emacs.c lread.c nsterm.m bytecomp.el lisp.h pdumper.c + emacs-module.h.in emacs.c lread.c nsterm.m pdumper.c bytecomp.el lisp.h seccomp-filter.c callproc.c cl-macs.el gtkutil.c and 188 other files Phillip Dixon: changed eglot.el @@ -5038,7 +5041,7 @@ and co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-langs.el and changed files.el keyboard.c simple.el xterm.c xdisp.c rmail.el fileio.c process.c sysdep.c buffer.c xfns.c window.c subr.el configure.ac startup.el sendmail.el emacs.c Makefile.in editfns.c - info.el dired.el and 1338 other files + info.el dired.el and 1339 other files Richard Ryniker: changed sendmail.el @@ -5089,7 +5092,7 @@ and changed configure.ac process.c blocks.awk keymap.el font.c network-stream-tests.el processes.texi custom.texi emoji-zwj.awk ftfont.c gtkutil.c process-tests.el unicode vc-git.el terminal.c char-fold.el gnutls.el keymaps.texi network-stream.el nsm.el nsterm.m - and 191 other files + and 192 other files Robert Thorpe: changed cus-start.el indent.el rmail.texi @@ -5487,7 +5490,7 @@ Sławomir Nowaczyk: changed emacs.py progmodes/python.el TUTORIAL.pl flyspell.el ls-lisp.el w32proc.c Spencer Baugh: changed data-tests.el minibuffer.el alloc.c autorevert.el - mini.texi processes.texi + flymake.el menu-bar.el mini.texi processes.texi simple.el Spencer Thomas: changed dabbrev.el emacsclient.c gnus.texi server.el unexcoff.c @@ -5780,9 +5783,9 @@ Theodore Jump: changed makefile.nt makefile.def w32-win.el w32faces.c Theodor Thornhill: changed typescript-ts-mode.el java-ts-mode.el c-ts-mode.el eglot.el js.el csharp-mode.el css-mode.el project.el json-ts-mode.el treesit.el c-ts-common.el eglot-tests.el EGLOT-NEWS - README.md c-ts-mode-tests.el compile-tests.el indent-bsd.erts - indent.erts maintaining.texi mwheel.el ruby-ts-mode.el - and 4 other files + README.md c-ts-mode-tests.el compile-tests.el go-ts-mode.el + indent-bsd.erts indent.erts maintaining.texi mwheel.el + and 5 other files Theresa O'Connor: wrote json.el and changed erc.el erc-viper.el erc-log.el erc-track.el viper.el @@ -6105,6 +6108,8 @@ Valentin Wüstholz: changed org.el Valery Alexeev: changed cyril-util.el cyrillic.el +Valtteri Vuorikoski: changed configure.ac + Van L: changed subr.el Vasilij Schneidermann: changed ETAGS.EBNF cus-start.el eww.el cc-mode.el @@ -6146,7 +6151,7 @@ Vincent Bernat: changed gnus-int.el nnimap.el xsettings.c Vincent Del Vecchio: changed info.el mh-utils.el -Vincenzo Pupillo: changed java-ts-mode.el +Vincenzo Pupillo: changed js.el typescript-ts-mode.el java-ts-mode.el Vince Salvino: changed msdos.texi w32.c w32fns.c @@ -6370,7 +6375,7 @@ Yuan Fu: changed treesit.el treesit.c c-ts-mode.el parsing.texi progmodes/python.el modes.texi js.el treesit-tests.el indent.erts typescript-ts-mode.el css-mode.el treesit.h configure.ac java-ts-mode.el print.c sh-script.el c-ts-common.el gdb-mi.el - rust-ts-mode.el go-ts-mode.el starter-guide and 53 other files + rust-ts-mode.el go-ts-mode.el starter-guide and 54 other files Yuanle Song: changed rng-xsd.el commit 76a142e265df742b2fdd3d220607a46fcbc30e1a Author: Eli Zaretskii Date: Sun Jul 23 03:16:35 2023 -0400 ; * etc/NEWS: Prepare for Emacs 29.1 release. Do not merge to master. diff --git a/etc/NEWS b/etc/NEWS index 9e6f0c16bcd..75bf8f5dd28 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -15,16 +15,9 @@ in older Emacs versions. You can narrow news to a specific version by calling 'view-emacs-news' with a prefix argument or by typing 'C-u C-h C-n'. -Temporary note: -+++ indicates that all relevant manuals in doc/ have been updated. ---- means no change in the manuals is needed. -When you add a new item, use the appropriate mark if you are sure it -applies, and please also update docstrings as needed. - * Installation Changes in Emacs 29.1 ---- ** Ahead-of-time native compilation can now be requested via configure. Use '--with-native-compilation=aot' to request that all the Lisp files in the Emacs tree should be natively compiled ahead of time. (This is @@ -32,7 +25,6 @@ slow on most machines.) This feature existed in Emacs 28.1, but was less easy to request. -+++ ** Emacs can be built with the tree-sitter parsing library. This library, together with separate grammar libraries for each language, provides incremental parsing capabilities for several @@ -85,26 +77,22 @@ available from their sites, as these libraries are in constant development and occasionally add features and fix important bugs to follow the advances in the programming languages they support. -+++ ** Emacs can be built with built-in support for accessing SQLite databases. This uses the popular sqlite3 library, and can be disabled by using the '--without-sqlite3' option to the 'configure' script. -+++ ** Support for the WebP image format. This support is built by default when the libwebp library is available, and includes support for animated WebP images. To disable WebP support, use the '--without-webp' configure flag. Image specifiers can now use ':type webp'. ---- ** Emacs now installs the ".pdmp" file using a unique fingerprint in the name. The file is typically installed using a file name akin to "...dir/libexec/emacs/29.1/x86_64-pc-linux-gnu/emacs-.pdmp". If a constant file name is required, the file can be renamed to "emacs.pdmp", and Emacs will find it during startup anyway. ---- ** Emacs on X now uses XInput 2 for input events. If your X server has support and you have the XInput 2 development headers installed, Emacs will use the X Input Extension for handling @@ -114,7 +102,6 @@ option '--without-xinput2' to disable this support. '(featurep 'xinput2)' can be used to test for the presence of XInput 2 support from Lisp programs. ---- ** Emacs can now be optionally built with the Cairo XCB backend. Configure Emacs with the '--with-cairo-xcb' option to use the Cairo XCB backend; the default is not to use it. This backend makes Emacs @@ -124,7 +111,6 @@ a display connection to the same terminal; this could happen, for example, if you repeatedly visit files via emacsclient in a single client frame, each time deleting the frame with 'C-x C-c'. -+++ ** Emacs now supports being built with pure GTK. To use this option, make sure the GTK 3 (version 3.22.23 or later) and Cairo development files are installed, and configure Emacs with the @@ -142,7 +128,6 @@ automatically switch to text-mode interface (thus emulating '-nw') if it cannot determine the default display; it will instead complain and ask you to invoke it with the explicit '-nw' option. -+++ ** Emacs has been ported to the Haiku operating system. The configuration process should automatically detect and build for Haiku. There is also an optional window-system port to Haiku, which @@ -160,7 +145,6 @@ Unlike X, there is no compile-time option to enable or disable double-buffering; it is always enabled. To disable it, change the frame parameter 'inhibit-double-buffering' instead. ---- ** Emacs no longer reduces the size of the Japanese dictionary. Building Emacs includes generation of a Japanese dictionary, which is used by Japanese input methods. Previously, the build included a step @@ -175,7 +159,6 @@ by saying after deleting "lisp/leim/ja-dic/ja-dic.el". ---- ** The docstrings of preloaded files are not in "etc/DOC" any more. Instead, they're fetched as needed from the corresponding ".elc" files, as was already the case for all the non-preloaded files. @@ -183,7 +166,6 @@ files, as was already the case for all the non-preloaded files. * Startup Changes in Emacs 29.1 -+++ ** '--batch' and '--script' now adjust the garbage collection levels. These switches now set 'gc-cons-percentage' to 1.0 (up from the default of 0.1). This means that batch processes will typically use @@ -191,7 +173,6 @@ more memory than before, but use less time doing garbage collection. Batch jobs that are supposed to run for a long time should adjust the limit back down again. -+++ ** Emacs can now be used more easily in an executable script. If you start an executable script with @@ -202,16 +183,13 @@ and then execute the rest of the script file as Emacs Lisp. When it reaches the end of the script, Emacs will exit with an exit code from the value of the final form. -+++ ** Emacs now supports setting 'user-emacs-directory' via '--init-directory'. Use the '--init-directory' command-line option to set 'user-emacs-directory'. -+++ ** Emacs now has a '--fingerprint' option. This will output a string identifying the current Emacs build, and exit. -+++ ** New hook 'after-pdump-load-hook'. This is run at the end of the Emacs startup process, and is meant to be used to reinitialize data structures that would normally be done at @@ -219,14 +197,12 @@ load time. ** Native Compilation -+++ *** New command 'native-compile-prune-cache'. This command deletes old subdirectories of the eln cache (but not the ones for the current Emacs version). Note that subdirectories of the system directory where the "*.eln" files are installed (usually, the last entry in 'native-comp-eln-load-path') are not deleted. -+++ *** New function 'startup-redirect-eln-cache'. This function can be called in your init files to change the user-specific directory where Emacs stores the "*.eln" files produced @@ -237,7 +213,6 @@ of 'user-emacs-directory'. * Incompatible changes in Emacs 29.1 -+++ ** The image commands have changed key bindings. In previous Emacs versions, the '+', '-' and 'r' keys were bound when point was over an image. In Emacs 29.1, additional commands have been @@ -247,7 +222,6 @@ moved to the 'i' prefix keymap, so '+' is now 'i +', '-' is now 'i -', and 'r' is now 'i r'. In addition, these commands are now repeating, so you can rotate an image twice by saying 'i r r', for instance. -+++ ** Emacs now picks the correct coding-system for X input methods. Previously, Emacs would use 'locale-coding-system' for input methods, which could in some circumstances be incorrect, especially @@ -260,7 +234,6 @@ changed the coding system used to decode X keyboard input must adjust their customizations to 'locale-coding-system' to the variable 'x-input-coding-system' instead. -+++ ** Bookmarks no longer include context for encrypted files. If you're visiting an encrypted file, setting a bookmark no longer includes excerpts from that buffer in the bookmarks file. This is @@ -268,7 +241,6 @@ implemented by the new hook 'bookmark-inhibit-context-functions', where packages can register a function which returns non-nil for file names to be excluded from adding such excerpts. ---- ** 'show-paren-mode' is now disabled in 'special-mode' buffers. In Emacs versions previous to Emacs 28.1, 'show-paren-mode' defaulted off. In Emacs 28.1, the mode was switched on in all buffers. In @@ -279,7 +251,6 @@ init file: (setopt show-paren-predicate t) -+++ ** Explicitly-set read-only state is preserved when reverting a buffer. If you use the 'C-x C-q' command to change the read-only state of the buffer and then revert it, Emacs would previously use the file @@ -287,14 +258,12 @@ permission bits to determine whether the buffer should be read-only after reverting the buffer. Emacs now remembers the decision made in 'C-x C-q'. ---- ** The Gtk selection face is no longer used for the region. The combination of a Gtk-controlled background and a foreground color controlled by the internal Emacs machinery led to low-contrast faces in common default setups. Emacs now uses the same 'region' face on Gtk and non-Gtk setups. ---- ** 'C-h f' and 'C-h x' may now require confirmation when you press 'RET'. If the text in the minibuffer cannot be completed to a single function or command, typing 'RET' will not automatically complete to the shortest @@ -306,12 +275,10 @@ second 'RET'. ** Dired ---- *** 'w' ('dired-copy-filename-as-kill') has changed behavior. If there are several files marked, file names containing space and quote characters will be quoted "like this". ---- *** The 'd' command now more consistently skips dot files. In previous Emacs versions, commands like 'C-u 10 d' would put the "D" mark on the next ten files, no matter whether they were dot files @@ -319,10 +286,8 @@ mark on the next ten files, no matter whether they were dot files mouse (in 'transient-mark-mode') and then hitting 'd' would skip dot files. These now work equivalently. -+++ ** Warning about "eager macro-expansion failure" is now an error. ---- ** Previously, the X "reverseVideo" value at startup was heeded for all frames. This meant that if you had a "reverseVideo" resource on the initial display, and then opened up a new frame on a display without any @@ -330,26 +295,21 @@ explicit "reverseVideo" setting, it would get heeded there, too. (This included terminal frames.) In Emacs 29, the "reverseVideo" X resource is handled like all the other X resources, and set on a per-frame basis. -+++ ** 'E' in 'query-replace' now edits the replacement with exact case. Previously, this command did the same as 'e'. ---- ** '/ a' in "*Packages*" buffer now limits by archive name(s) instead of regexp. -+++ ** Setting the goal columns now also affects '' and ''. Previously, 'C-x C-n' only affected 'next-line' and 'previous-line', but it now also affects 'scroll-up-command' and 'scroll-down-command'. ---- ** Isearch in "*Help*" and "*info*" now char-folds quote characters by default. This means that you can say 'C-s `foo' (GRAVE ACCENT) if the buffer contains "‘foo" (LEFT SINGLE QUOTATION MARK) and the like. These quotation characters look somewhat similar in some fonts. To switch this off, disable the new 'isearch-fold-quotes-mode' minor mode. ---- ** Sorting commands no longer necessarily change modification status. In earlier Emacs versions, commands like 'sort-lines' would always change buffer modification status to "modified", whether they changed @@ -357,19 +317,16 @@ something in the buffer or not. This has been changed: the buffer is marked as modified only if the sorting ended up actually changing the contents of the buffer. ---- ** 'string-lines' handles trailing newlines differently. It no longer returns an empty final string if the string ends with a newline. ---- ** 'TAB' and '' are now bound in 'button-map'. This means that if point is on a button, 'TAB' will take you to the next button, even if the mode has bound it to something else. This also means that 'TAB' on a button in an 'outline-minor-mode' heading will move point instead of collapsing the outline. ---- ** 'outline-minor-mode-cycle-map' is now parent of 'outline-minor-mode'. Instead of adding text property 'keymap' with 'outline-minor-mode-cycle' on outline headings in 'outline-minor-mode', the keymap @@ -378,12 +335,10 @@ But keybindings in 'outline-minor-mode-cycle' still take effect only on outline headings because they are bound with the help of 'outline-minor-mode-cycle--bind' that checks if point is on a heading. ---- ** 'Info-default-directory-list' is no longer populated at Emacs startup. If you have code in your init file that removes directories from 'Info-default-directory-list', this will no longer work. ---- ** 'C-k' no longer deletes files in 'ido-mode'. To get the previous action back, put something like the following in your Init file: @@ -391,14 +346,12 @@ your Init file: (require 'ido) (keymap-set ido-file-completion-map "C-k" #'ido-delete-file-at-head) ---- ** New user option 'term-clear-full-screen-programs'. By default, term.el will now work like most terminals when displaying full-screen programs: When they exit, the output is cleared, leaving what was displayed in the window before the programs started. Set this user option to nil to revert back to the old behavior. ---- ** Support for old EIEIO functions is not autoloaded any more. You need an explicit '(require 'eieio-compat)' to use 'defmethod' and 'defgeneric' (which were made obsolete in Emacs 25.1 by @@ -406,11 +359,9 @@ and 'defgeneric' (which were made obsolete in Emacs 25.1 by Similarly you might need to '(require 'eieio-compat)' before loading files that were compiled with an old EIEIO (Emacs<25). ---- ** 'C-x 8 .' has been moved to 'C-x 8 . .'. This is to open up the 'C-x 8 .' map to bind further characters there. ---- ** 'C-x 8 =' has been moved to 'C-x 8 = ='. You can now use 'C-x 8 =' to insert several characters with macron; for example, 'C-x 8 = a' will insert U+0101 LATIN SMALL LETTER A WITH @@ -424,12 +375,10 @@ For consistency with remote connections, Eshell now uses 'exec-path' to determine the execution path on the local or remote system, instead of using the PATH environment variable directly. ---- *** 'source' and '.' no longer accept the '--help' option. This is for compatibility with the shell versions of these commands, which don't handle options like '--help' in any special way. -+++ *** String delimiters in argument predicates/modifiers are more restricted. Previously, some argument predicates/modifiers allowed arbitrary characters as string delimiters. To provide more unified behavior @@ -438,11 +387,9 @@ been restricted to "...", '...', /.../, |...|, (...), [...], <...>, and {...}. See the "(eshell) Argument Predication and Modification" node in the Eshell manual for more details. -+++ *** Eshell pipelines now only pipe stdout by default. To pipe both stdout and stderr, use the '|&' operator instead of '|'. ---- ** The 'delete-forward-char' command now deletes by grapheme clusters. This command is by default bound to the '' function key (a.k.a. ''). When invoked without a prefix argument or @@ -452,12 +399,10 @@ example, if point is before an Emoji sequence, pressing '' will delete the entire sequence, not just a single character at its beginning. -+++ ** 'load-history' does not treat autoloads specially any more. An autoload definition appears just as a '(defun . NAME)' and the '(t . NAME)' entries are not generated any more. ---- ** The Tamil input methods no longer insert Tamil digits. The input methods 'tamil-itrans' and 'tamil-inscript' no longer insert the Tamil digits, as those digit characters are not used nowadays by @@ -465,7 +410,6 @@ speakers of the Tamil language. To get back the previous behavior, use the new 'tamil-itrans-digits' and 'tamil-inscript-digits' input methods instead. -+++ ** New variable 'current-time-list' governing default timestamp form. Functions like 'current-time' now yield '(TICKS . HZ)' timestamps if this new variable is nil. The variable defaults to t, which means @@ -476,7 +420,6 @@ Developers are encouraged to test timestamp-related code with this variable set to nil, as it will default to nil in a future Emacs version and will be removed some time after that. -+++ ** Functions that recreate the "*scratch*" buffer now also initialize it. When functions like 'other-buffer' and 'server-execute' recreate "*scratch*", they now also insert 'initial-scratch-message' and set @@ -484,7 +427,6 @@ the major mode according to 'initial-major-mode', like at Emacs startup. Previously, these functions ignored 'initial-scratch-message' and left "*scratch*" in 'fundamental-mode'. ---- ** Naming of Image-Dired thumbnail files has changed. Names of thumbnail files generated when 'image-dired-thumbnail-storage' is 'image-dired' now always end in ".jpg". This fixes various issues @@ -493,25 +435,21 @@ will not be used in Emacs 29, and vice-versa. If disk space is an issue, consider deleting the 'image-dired-dir' directory (usually "~/.emacs.d/image-dired/") after upgrading to Emacs 29. ---- ** The 'rlogin' method in the URL library is now obsolete. Emacs will now display a warning if you request a URL like "rlogin://foo@example.org". ---- ** Setting 'url-gateway-method' to 'rlogin' is now obsolete. Emacs will now display a warning when setting it to that value. The user options 'url-gateway-rlogin-host', 'url-gateway-rlogin-parameters', and 'url-gateway-rlogin-user-name' are also obsolete. ---- ** The user function 'url-irc-function' now takes a SCHEME argument. The user option 'url-irc-function' is now called with a sixth argument corresponding to the scheme portion of the target URL. For example, this would be "ircs" for a URL like "ircs://irc.libera.chat". ---- ** The linum.el library is now obsolete. We recommend using either the built-in 'display-line-numbers-mode', or the 'nlinum' package from GNU ELPA instead. The former has better @@ -536,40 +474,31 @@ performance, but the latter is closer to a drop-in replacement. (require 'linum) ---- ** The thumbs.el library is now obsolete. We recommend using the 'image-dired' command instead. ---- ** The autoarg.el library is now marked obsolete. This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor modes to emulate the behavior of the historical editor Twenex Emacs. We believe it is no longer useful. ---- ** The quickurl.el library is now obsolete. Use 'abbrev', 'skeleton' or 'tempo' instead. ---- ** The rlogin.el library, and the 'rsh' command are now obsolete. Use something like 'M-x shell RET ssh RET' instead. ---- ** The url-about.el library is now obsolete. ---- ** The autoload.el library is now obsolete. It is superseded by the new loaddefs-gen.el library. ---- ** The netrc.el library is now obsolete. Use the 'auth-source-netrc-parse-all' function in auth-source.el instead. ---- ** The url-dired.el library is now obsolete. ---- ** The fast-lock.el and lazy-lock.el libraries have been removed. They have been obsolete since Emacs 22.1. @@ -577,7 +506,6 @@ The variable 'font-lock-support-mode' is occasionally useful for debugging purposes. It is now a regular variable (instead of a user option) and can be set to nil to disable Just-in-time Lock mode. -+++ ** The 'utf-8-auto' coding-system now produces BOM on encoding. This is actually a bugfix, since this is how 'utf-8-auto' was documented from day one; it just didn't behave according to @@ -594,7 +522,6 @@ encoding, only for decoding. * Changes in Emacs 29.1 -+++ ** New user option 'major-mode-remap-alist' to specify favorite major modes. This user option lets you remap the default modes (e.g. 'perl-mode' or 'latex-mode') to your favorite ones (e.g. 'cperl-mode' or @@ -603,15 +530,12 @@ undesirable side effects. This applies to all modes specified via 'auto-mode-alist', file-local variables, etc. ---- ** Emacs now supports Unicode Standard version 15.0. ---- ** New user option 'electric-quote-replace-consecutive'. This allows you to disable the default behavior of consecutive single quotes being replaced with a double quote. ---- ** Emacs is now capable of editing files with very long lines. The display of long lines has been optimized, and Emacs should no longer choke when a buffer on display contains long lines. The @@ -648,7 +572,6 @@ access portions of the buffer outside of the narrowed region. The new function 'long-line-optimizations-p' returns non-nil when these optimizations are in effect in the current buffer. -+++ ** New command to change the font size globally. To increase the font size, type 'C-x C-M-+' or 'C-x C-M-='; to decrease it, type 'C-x C-M--'; to restore the font size, type 'C-x @@ -660,7 +583,6 @@ increase and decrease the font size globally. Additionally, the user option 'global-text-scale-adjust-resizes-frames' controls whether the frames are resized when the font size is changed. ---- ** New config variable 'syntax-wholeline-max' to reduce the cost of long lines. This variable is used by some operations (mostly syntax-propertization and font-locking) to treat lines longer than this variable as if they @@ -672,13 +594,11 @@ can recover the previous behavior with: (setq syntax-wholeline-max most-positive-fixnum) ---- ** New bindings in 'find-function-setup-keys' for 'find-library'. When 'find-function-setup-keys' is enabled, 'C-x L' is now bound to 'find-library', 'C-x 4 L' is now bound to 'find-library-other-window' and 'C-x 5 L' is now bound to 'find-library-other-frame'. -+++ ** New key binding after 'M-x' or 'M-X': 'M-X'. Emacs allows different completion predicates to be used with 'M-x' (i.e., 'execute-extended-command') via the @@ -688,10 +608,8 @@ especially relevant to the current buffer. Emacs now allows toggling between these modes while the user is inputting a command by hitting 'M-X' while in the minibuffer. ---- ** Interactively, 'kill-buffer' will now offer to save the buffer if unsaved. ---- ** New commands 'duplicate-line' and 'duplicate-dwim'. 'duplicate-line' duplicates the current line the specified number of times. 'duplicate-dwim' duplicates the region if it is active. If not, it @@ -700,10 +618,8 @@ duplicated on its right-hand side. The new user option 'duplicate-line-final-position' specifies where to move point after duplicating a line. ---- ** Files with the ".eld" extension are now visited in 'lisp-data-mode'. -+++ ** 'network-lookup-address-info' can now check numeric IP address validity. Specifying 'numeric' as the new optional HINTS argument makes it check if the passed address is a valid IPv4/IPv6 address (without DNS @@ -712,23 +628,19 @@ traffic). (network-lookup-address-info "127.1" 'ipv4 'numeric) => ([127 0 0 1 0]) -+++ ** New command 'find-sibling-file'. This command jumps to a file considered a "sibling file", which is determined according to the new user option 'find-sibling-rules'. -+++ ** New user option 'delete-selection-temporary-region'. When non-nil, 'delete-selection-mode' will only delete the temporary regions (usually set by mouse-dragging or shift-selection). -+++ ** New user option 'switch-to-prev-buffer-skip-regexp'. This should be a regexp or a list of regexps; buffers whose names match those regexps will be ignored by 'switch-to-prev-buffer' and 'switch-to-next-buffer'. -+++ ** New command 'rename-visited-file'. This command renames the file visited by the current buffer by moving it to a new name or location, and also makes the buffer visit this new @@ -736,19 +648,16 @@ file. ** Menus ---- *** The entries following the buffers in the "Buffers" menu can now be altered. Change the 'menu-bar-buffers-menu-command-entries' variable to alter the entries that follow the buffer list. ---- ** 'delete-process' is now a command. When called interactively, it will kill the process running in the current buffer (if any). This can be useful if you have runaway output in the current buffer (from a process or a network connection), and want to stop it. -+++ ** New command 'restart-emacs'. This is like 'save-buffers-kill-emacs', but instead of just killing the current Emacs process at the end, it starts a new Emacs process @@ -759,66 +668,54 @@ process. ** Drag and Drop -+++ *** New user option 'mouse-drag-mode-line-buffer'. If non-nil, dragging on the buffer name part of the mode-line will drag the buffer's associated file to other programs. This option is currently only available on X, Haiku and Nextstep (GNUstep or macOS). -+++ *** New user option 'mouse-drag-and-drop-region-cross-program'. If non-nil, this option allows dragging text in the region from Emacs to another program. ---- *** New user option 'mouse-drag-and-drop-region-scroll-margin'. If non-nil, this option allows scrolling a window while dragging text around without a scroll wheel. -+++ *** The value of 'mouse-drag-copy-region' can now be the symbol 'non-empty'. This prevents mouse drag gestures from putting empty strings onto the kill ring. -+++ *** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'. These options allow adjusting point and scrolling a window when dragging items from another program. -+++ *** The X Direct Save (XDS) protocol is now supported. This means dropping an image or file link from programs such as Firefox will no longer create a temporary file in a random directory, instead asking you where to save the file first. -+++ ** New user option 'record-all-keys'. If non-nil, this option will force recording of all input keys, including those typed in response to passwords prompt (this was the previous behavior). The default is nil, which inhibits recording of passwords. -+++ ** New function 'command-query'. This function makes its argument command prompt the user for confirmation before executing. -+++ ** The 'disabled' property of a command's symbol can now be a list. The first element of the list should be the symbol 'query', which will cause the command disabled this way prompt the user with a y/n or a yes/no question before executing. The new function 'command-query' is a convenient method of making commands disabled in this way. ---- ** 'count-words' will now report buffer totals if given a prefix. Without a prefix, it will only report the word count for the narrowed part of the buffer. -+++ ** 'count-words' will now report sentence count when used interactively. -+++ ** New user option 'set-message-functions'. It allows more flexible control of how echo-area messages are displayed by adding functions to this list. The default value is a list of one @@ -829,29 +726,24 @@ specifying, via 'inhibit-message-regexps', the list of messages whose display should be inhibited; and 'set-multi-message' that accumulates recent messages and displays them stacked together. ---- ** New user option 'find-library-include-other-files'. If set to nil, commands like 'find-library' will only include library files in the completion candidates. The default is t, which preserves previous behavior, whereby non-library files could also be included. -+++ ** New command 'sqlite-mode-open-file' for examining an sqlite3 file. This uses the new 'sqlite-mode' which allows listing the tables in a DB file, and examining and modifying the columns and the contents of those tables. ---- ** 'write-file' will now copy some file mode bits. If the current buffer is visiting a file that is executable, the 'C-x C-w' command will now make the new file executable, too. -+++ ** New user option 'process-error-pause-time'. This determines how long to pause Emacs after a process filter/sentinel error has been handled. -+++ ** New faces for font-lock. These faces are primarily meant for use with tree-sitter. They are: 'font-lock-bracket-face', 'font-lock-delimiter-face', @@ -861,40 +753,33 @@ These faces are primarily meant for use with tree-sitter. They are: 'font-lock-property-use-face', 'font-lock-punctuation-face', 'font-lock-regexp-face', and 'font-lock-variable-use-face'. -+++ ** New face 'variable-pitch-text'. This face is like 'variable-pitch' (from which it inherits), but is slightly larger, which should help with the visual size differences between the default, non-proportional font and proportional fonts when mixed. -+++ ** New face 'mode-line-active'. This inherits from the 'mode-line' face, but is the face actually used on the mode lines (along with 'mode-line-inactive'). -+++ ** New face attribute pseudo-value 'reset'. This value stands for the value of the corresponding attribute of the 'default' face. It can be used to reset attribute values produced by inheriting from other faces. -+++ ** New X resource "borderThickness". This controls the thickness of the external borders of the menu bars and pop-up menus. -+++ ** New X resource "inputStyle". This controls the style of the pre-edit and status areas of X input methods. -+++ ** New X resources "highlightForeground" and "highlightBackground". Only in the Lucid build, this controls colors used for highlighted menu item widgets. -+++ ** On X, Emacs now tries to synchronize window resize with the window manager. This leads to less flicker and empty areas of a frame being displayed when a frame is being resized. Unfortunately, it does not work on @@ -902,7 +787,6 @@ some ancient buggy window managers, so if Emacs appears to freeze, but is still responsive to input, you can turn it off by setting the X resource "synchronizeResize" to "off". -+++ ** On X, Emacs can optionally synchronize display with the graphics hardware. When this is enabled by setting the X resource "synchronizeResize" to "extended", frame content "tearing" is drastically reduced. This is @@ -914,22 +798,18 @@ https://fishsoup.net/misc/wm-spec-synchronization.html). This behavior can be toggled on and off via the frame parameter 'use-frame-synchronization'. -+++ ** New frame parameter 'alpha-background' and X resource "alphaBackground". This controls the opacity of the text background when running on a composited display. -+++ ** New frame parameter 'shaded'. With window managers which support this, it controls whether or not a frame's contents will be hidden, leaving only the title bar on display. ---- ** New user option 'x-gtk-use-native-input'. This controls whether or not GTK input methods are used by Emacs, instead of XIM input methods. Defaults to nil. -+++ ** New user option 'use-system-tooltips'. This controls whether to use the toolkit tooltips, or Emacs's own native implementation of tooltips as small frames. This option is @@ -938,13 +818,11 @@ support, and defaults to t, which makes Emacs use the toolkit tooltips. The existing GTK-specific option 'x-gtk-use-system-tooltips' is now an alias of this new option. -+++ ** Non-native tooltips are now supported on Nextstep. This means Emacs built with GNUstep or built on macOS is now able to display different faces and images inside tooltips when the 'use-system-tooltips' user option is nil. ---- ** New minor mode 'pixel-scroll-precision-mode'. When enabled, and if your mouse supports it, you can scroll the display up or down at pixel resolution, according to what your mouse @@ -954,20 +832,17 @@ scrolls. ** Terminal Emacs ---- *** Emacs will now use 24-bit colors on terminals that support "Tc" capability. This is in addition to previously-supported ways of discovering 24-bit color support: either via the "RGB" or "setf24" capabilities, or if the 'COLORTERM' environment variable is set to the value "truecolor". ---- *** Select active regions with xterm selection support. On terminals with xterm "setSelection" support, the active region may be saved to the X primary selection, following the 'select-active-regions' variable. This support is enabled when 'tty-select-active-regions' is non-nil. ---- *** New command to set up display of unsupported characters. The new command 'standard-display-by-replacement-char' produces Lisp code that sets up the 'standard-display-table' to use a replacement @@ -977,7 +852,6 @@ This feature is most useful with the Linux console and similar terminals, where Emacs has a reliable way of determining which characters have glyphs in the font loaded into the terminal's memory. ---- *** New functions to set terminal output buffer size. The new functions 'tty--set-output-buffer-size' and 'tty--output-buffer-size' allow setting and retrieving the output @@ -989,89 +863,72 @@ at the end of display update. ** ERT -+++ *** New ERT variables 'ert-batch-print-length' and 'ert-batch-print-level'. These variables will override 'print-length' and 'print-level' when printing Lisp values in ERT batch test results. ---- *** Redefining an ERT test in batch mode now signals an error. Executing 'ert-deftest' with the same name as an existing test causes the previous definition to be discarded, which was probably not intended when this occurs in batch mode. To remedy the error, rename tests so that they all have unique names. -+++ *** ERT can generate JUnit test reports. When environment variable 'EMACS_TEST_JUNIT_REPORT' is set, ERT generates a JUnit test report under this file name. This is useful for Emacs integration into CI/CD test environments. ---- *** Unbound test symbols now signal an 'ert-test-unbound' error. This affects the 'ert-select-tests' function and its callers. ** Emoji -+++ *** Emacs now has several new methods for inserting Emoji. The Emoji commands are under the new 'C-x 8 e' prefix. -+++ *** New command 'emoji-insert' (bound to 'C-x 8 e e' and 'C-x 8 e i'). This command guides you through various Emoji categories and combinations in a graphical menu system. -+++ *** New command 'emoji-search' (bound to 'C-x 8 e s'). This command lets you search for and insert an Emoji based on names. -+++ *** New command 'emoji-list' (bound to 'C-x 8 e l'). This command lists all Emoji (categorized by themes) in a special buffer and lets you choose one of them to insert. ---- *** New command 'emoji-recent' (bound to 'C-x 8 e r'). This command lets you choose among the Emoji you have recently inserted and insert it. -+++ *** New command 'emoji-describe' (bound to 'C-x 8 e d'). This command will tell you the name of the Emoji at point. (It also works for non-Emoji characters.) ---- *** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'. These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively. They can be used on any character, but are mainly useful for Emoji. ---- *** New command 'emoji-zoom-reset'. This is bound to 'C-x 8 e 0', and undoes any size changes performed by 'emoji-zoom-increase' and 'emoji-zoom-decrease'. ---- *** New input method 'emoji'. This allows you to enter Emoji using short strings, eg ':face_palm:' or ':scream:'. ** Help ---- *** Variable values displayed by 'C-h v' in "*Help*" are now fontified. -+++ *** New user option 'help-clean-buttons'. If non-nil, link buttons in "*Help*" buffers will have any surrounding quotes removed. ---- *** 'M-x apropos-variable' output now includes values of variables. Such an apropos buffer is more easily viewed with outlining after enabling 'outline-minor-mode' in 'apropos-mode'. -+++ *** New docstring syntax to indicate that symbols shouldn't be links. When displaying docstrings in "*Help*" buffers, strings that are "`like-this'" are made into links (if they point to a bound @@ -1080,12 +937,10 @@ about values that are symbols that happen to have the same names as functions/variables. To inhibit this buttonification, use the new "\\+`like-this'" syntax. -+++ *** New user option 'help-window-keep-selected'. If non-nil, commands to show the info manual and the source will reuse the same window in which the "*Help*" buffer is shown. ---- *** Commands like 'C-h f' have changed how they describe menu bindings. For instance, previously a command might be described as having the following bindings: @@ -1097,56 +952,45 @@ This has been changed to: It is bound to and C-x C-f. It can also be invoked from the menu: File → Visit New File... -+++ *** The 'C-h .' command now accepts a prefix argument. 'C-u C-h .' would previously inhibit displaying a warning message if there was no local help at point. This has been changed to call 'button-describe'/'widget-describe' and display button/widget help instead. ---- *** New user option 'help-enable-variable-value-editing'. If enabled, 'e' on a value in "*Help*" will pop you to a new buffer where you can edit the value. This is not enabled by default, because it is easy to make an edit that yields an invalid result. ---- *** 'C-h b' uses outlining by default. Set 'describe-bindings-outline' to nil to get back the old behavior. ---- *** Jumping to function/variable source now saves mark before moving point. Jumping to source from a "*Help*" buffer moves point when the source buffer is already open. Now, the old point is pushed onto mark ring. -+++ *** New key bindings in "*Help*" buffers: 'n' and 'p'. These will take you (respectively) to the next and previous "page". ---- *** 'describe-char' now also outputs the name of Emoji sequences. -+++ *** New key binding in "*Help*" buffer: 'I'. This will take you to the Emacs Lisp manual entry for the item displayed, if any. ---- *** The 'C-h m' ('describe-mode') "*Help*" buffer has been reformatted. It now only includes local minor modes at the start, and the global minor modes are listed after the major mode. -+++ *** The user option 'help-window-select' now affects apropos commands. The apropos commands will now select the apropos window if 'help-window-select' is non-nil. ---- *** 'describe-keymap' now considers the symbol at point. If the symbol at point is a keymap, 'describe-keymap' suggests it as the default candidate. ---- *** New command 'help-quick' displays an overview of common commands. The command pops up a buffer at the bottom of the screen with a few helpful commands for various tasks. You can toggle the display using @@ -1157,7 +1001,6 @@ See the file "etc/ORG-NEWS" for user-visible changes in Org. ** Outline Mode -+++ *** Support for customizing the default visibility state of headings. Customize the user option 'outline-default-state' to define what headings will be visible initially, after Outline mode is turned on. @@ -1169,7 +1012,6 @@ subtree has long lines or is itself too long. ** Outline Minor Mode -+++ *** New user option 'outline-minor-mode-use-buttons'. If non-nil, Outline Minor Mode will use buttons to hide/show outlines in addition to the ellipsis. The default is nil, but in 'help-mode' @@ -1178,7 +1020,6 @@ buffer, and you can use 'RET' to cycle outline visibility. When the value is 'in-margins', Outline Minor Mode uses the window margins for buttons that hide/show outlines. -+++ *** Buttons and headings now have their own keymaps. 'outline-button-icon-map', 'outline-overlay-button-map', and 'outline-inserted-button-map' are now available as defined keymaps @@ -1186,19 +1027,16 @@ instead of being anonymous keymaps. ** Windows -+++ *** New commands 'split-root-window-below' and 'split-root-window-right'. These commands split the root window in two, and are bound to 'C-x w 2' and 'C-x w 3', respectively. A number of other useful window-related commands are now available with key sequences that start with the 'C-x w' prefix. -+++ *** New display action 'display-buffer-full-frame'. This action removes other windows from the frame when displaying a buffer on that frame. -+++ *** 'display-buffer' now can set up the body size of the chosen window. For example, a 'display-buffer-alist' entry of @@ -1207,35 +1045,29 @@ For example, a 'display-buffer-alist' entry of will make the body of the chosen window 40 columns wide. For the height use 'window-height' and 'body-lines', respectively. -+++ *** 'display-buffer' provides more options for using an existing window. The display buffer action functions 'display-buffer-use-some-window' and 'display-buffer-use-least-recent-window' now honor the action alist entry 'window-min-height' as well as the entries listed below to make the display of several buffers in a row more amenable. -+++ *** New buffer display action alist entry 'lru-frames'. This allows specifying which frames 'display-buffer' should consider when using a window that shows another buffer. It is interpreted as per the ALL-FRAMES argument of 'get-lru-window'. -+++ *** New buffer display action alist entry 'lru-time'. 'display-buffer' will ignore windows with a use time higher than this when using a window that shows another buffer. -+++ *** New buffer display action alist entry 'bump-use-time'. This has 'display-buffer' bump the use time of any window it returns, making it a less likely candidate for displaying another buffer. -+++ *** New buffer display action alist entry 'window-min-width'. This allows specifying a preferred minimum width of the window used to display a buffer. ---- *** You can specify on which window 'scroll-other-window' operates. This is controlled by the new 'other-window-scroll-default' variable, which should be set to a function that returns a window. When this @@ -1243,7 +1075,6 @@ variable is nil, 'next-window' is used. ** Frames -+++ *** Deleted frames can now be undeleted. The 16 most recently deleted frames can be undeleted with 'C-x 5 u' when 'undelete-frame-mode' is enabled. Without a prefix argument, undelete @@ -1251,7 +1082,6 @@ the most recently deleted frame. With a numerical prefix argument between 1 and 16, where 1 is the most recently deleted frame, undelete the corresponding deleted frame. -+++ *** The variable 'icon-title-format' can now have the value t. That value means to use 'frame-title-format' for iconified frames. This is useful with some window managers and desktop environments @@ -1261,24 +1091,20 @@ same no matter if the frame is iconified or not. ** Tab Bars and Tab Lines ---- *** New user option 'tab-bar-auto-width' to automatically determine tab width. This option is non-nil by default, which resizes tab-bar tabs so that their width is evenly distributed across the tab bar. A companion option 'tab-bar-auto-width-max' controls the maximum width of a tab before its name on display is truncated. ---- *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist. It prompts for the name of a tab and switches to it, creating a new tab if no tab exists by that name. ---- *** New keymap 'tab-bar-history-mode-map'. By default, it contains 'C-c ' and 'C-c ' to browse the history of tab window configurations back and forward. ---- ** Better detection of text suspiciously reordered on display. The function 'bidi-find-overridden-directionality' has been extended to detect reordering effects produced by embeddings and isolates @@ -1289,17 +1115,14 @@ suspicious and could be malicious. ** Emacs Server and Client -+++ *** New command-line option '-r'/'--reuse-frame' for emacsclient. With this command-line option, Emacs reuses an existing graphical client frame if one exists; otherwise it creates a new frame. -+++ *** New command-line option '-w N'/'--timeout=N' for emacsclient. With this command-line option, emacsclient will exit if Emacs does not respond within N seconds. The default is to wait forever. -+++ *** 'server-stop-automatically' can be used to automatically stop the server. The Emacs server will be automatically stopped when certain conditions are met. The conditions are determined by the argument to @@ -1308,17 +1131,14 @@ are met. The conditions are determined by the argument to ** Rcirc -+++ *** New command 'rcirc-when'. This shows the reception time of the message at point (if available). -+++ *** New user option 'rcirc-cycle-completion-flag'. Rcirc now uses the default 'completion-at-point' mechanism. The conventional IRC behavior of completing by cycling through the available options can be restored by enabling this option. -+++ *** New user option 'rcirc-bridge-bot-alist'. If you are in a channel where a bot is responsible for bridging between networks, you can use this variable to make these messages @@ -1334,7 +1154,6 @@ to be reformatted into 09:47 I am not on IRC ---- *** New formatting commands. Most IRC clients (including rcirc) support basic formatting using control codes. Under the 'C-c C-f' prefix a few commands have been @@ -1344,15 +1163,12 @@ to be highlighted in bold. ** Imenu -+++ *** 'imenu' is now bound to 'M-g i' globally. ---- *** New function 'imenu-flush-cache'. Use it if you want Imenu to forget the buffer's index alist and recreate it anew next time 'imenu' is invoked. ---- ** Emacs is now capable of abandoning a window's redisplay that takes too long. This is controlled by the new variable 'max-redisplay-ticks'. If that variable is set to a non-zero value, display of a window will be @@ -1366,19 +1182,16 @@ lines.) * Editing Changes in Emacs 29.1 -+++ ** 'M-SPC' is now bound to 'cycle-spacing'. Formerly it invoked 'just-one-space'. The actions performed by 'cycle-spacing' and their order can now be customized via the user option 'cycle-spacing-actions'. ---- ** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars. These commands now behave as case-sensitive for interactive calls when they are invoked with an uppercase character, regardless of the value of 'case-fold-search'. ---- ** 'scroll-other-window' and 'scroll-other-window-down' now respect remapping. These commands (bound to 'C-M-v' and 'C-M-V') used to scroll the other windows without looking at customizations in that other window. These @@ -1387,7 +1200,6 @@ in that other window, and then call the remapped function instead. In addition, these commands now also respect the 'scroll-error-top-bottom' user option. ---- ** Indentation of 'cl-flet' and 'cl-labels' has changed. These forms now indent like this: @@ -1398,32 +1210,26 @@ These forms now indent like this: This change also affects 'cl-macrolet', 'cl-flet*' and 'cl-symbol-macrolet'. -+++ ** New user option 'translate-upper-case-key-bindings'. Set this option to nil to inhibit the default translation of upper case keys to their lower case variants. -+++ ** New command 'ensure-empty-lines'. This command increases (or decreases) the number of empty lines before point. ---- ** Improved mouse behavior with auto-scrolling modes. When clicking inside the 'scroll-margin' or 'hscroll-margin' region, point is now moved only when releasing the mouse button. This no longer results in a bogus selection, unless the mouse has also been dragged. -+++ ** 'kill-ring-max' now defaults to 120. ---- ** New user option 'yank-menu-max-items'. Customize this option to limit the number of entries in the menu "Edit → Paste from Kill Menu". The default is 60. ---- ** New user option 'copy-region-blink-predicate'. By default, when copying a region with 'kill-ring-save', Emacs only blinks point and mark when the region is not denoted visually, that @@ -1435,12 +1241,10 @@ this user option to 'always'. To disable blinking unconditionally, either set this option to 'ignore', or set 'copy-region-blink-delay' to 0. -+++ ** Performing a pinch gesture on a touchpad now increases the text scale. ** Show Paren Mode -+++ *** New user option 'show-paren-context-when-offscreen'. When non-nil, if the point is in a closing delimiter and the opening delimiter is offscreen, shows some context around the opening @@ -1454,19 +1258,16 @@ echo area. ** Comint -+++ *** 'comint-term-environment' is now aware of connection-local variables. The user option 'comint-terminfo-terminal' and the variable 'system-uses-terminfo' can now be set as connection-local variables to change the terminal used on a remote host. ---- *** New user option 'comint-delete-old-input'. When nil, this prevents comint from deleting the current input when inserting previous input using ''. The default is t, to preserve previous behavior. ---- *** New minor mode 'comint-fontify-input-mode'. This minor mode is enabled by default in "*shell*" and "*ielm*" buffers. It fontifies input text according to 'shell-mode' or @@ -1476,7 +1277,6 @@ you don't want to enable input fontification by default. ** Mwheel ---- *** New user options for alternate wheel events. The user options 'mouse-wheel-down-alternate-event' and 'mouse-wheel-up-alternate-event' as well as the variables @@ -1486,19 +1286,16 @@ systems where two kinds of wheel events can be received. ** Internationalization ---- *** The '' function key now allows deleting the entire composed sequence. For the details, see the item about the 'delete-forward-char' command above. ---- *** New user option 'composition-break-at-point'. Setting it to a non-nil value temporarily disables automatic composition of character sequences at point, and thus makes it easier to edit such sequences by allowing point to "enter" the composed sequence. ---- *** Support for many old scripts and writing systems. Emacs now supports, and has language-environments and input methods, for several dozens of old scripts that were used in the past for @@ -1573,48 +1370,39 @@ environments are: Mongolian-cyrillic language environment ---- *** The "Oriya" language environment was renamed to "Odia". This is to follow the change in the official name of the script. The 'oriya' input method was also renamed to 'odia'. However, the old name of the language environment and the input method are still supported. ---- *** New Greek translation of the Emacs tutorial. Type 'C-u C-h t' to select it in case your language setup does not do so automatically. ---- *** New Ukrainian translation of the Emacs tutorial. ---- *** New Farsi/Persian translation of the Emacs tutorial. ---- *** New default phonetic input method for the Tamil language environment. The default input method for the Tamil language environment is now "tamil-phonetic" which is a customizable phonetic input method. To change the input method's translation rules, customize the user option 'tamil-translation-rules'. ---- *** New 'tamil99' input method for the Tamil language. This supports the keyboard layout specifically designed for the Tamil language. ---- *** New input method 'slovak-qwerty'. This is a variant of the 'slovak' input method, which corresponds to the QWERTY Slovak keyboards. ---- *** New input method 'cyrillic-chuvash'. This input method is based on the russian-computer input method, and is intended for typing in the Chuvash language written in the Cyrillic script. ---- *** New input method 'cyrillic-mongolian'. This input method is for typing in the Mongolian language using the Cyrillic script. It is the default input method for the new @@ -1625,23 +1413,19 @@ Mongolian-cyrillic language environment, see above. ** Ecomplete ---- *** New commands 'ecomplete-edit' and 'ecomplete-remove'. These allow you to (respectively) edit and bulk-remove entries from the ecomplete database. ---- *** New user option 'ecomplete-auto-select'. If non-nil and there's only one matching option, auto-select that. ---- *** New user option 'ecomplete-filter-regexp'. If non-nil, this user option describes what entries not to add to the database stored on disk. ** Auth Source -+++ *** New user option 'auth-source-pass-extra-query-keywords'. Whether to recognize additional keyword params, like ':max' and ':require', as well as accept lists of query terms paired with @@ -1650,13 +1434,11 @@ unique to auth-source-pass, such as wildcard subdomain matching. ** Dired -+++ *** 'dired-guess-shell-command' moved from dired-x to dired. This means that 'dired-do-shell-command' will now provide smarter defaults without first having to require 'dired-x'. See the node "(emacs) Shell Command Guessing" in the Emacs manual for more details. ---- *** 'dired-clean-up-buffers-too' moved from dired-x to dired. This means that Dired now offers to kill buffers visiting files and dirs when they are deleted in Dired. Before, you had to require @@ -1665,20 +1447,16 @@ customize the user option 'dired-clean-up-buffers-too' to nil. The related user option 'dired-clean-confirm-killing-deleted-buffers' (which see) has also been moved to 'dired'. -+++ *** 'dired-do-relsymlink' moved from dired-x to dired. The corresponding key 'Y' is now bound by default in Dired. -+++ *** 'dired-do-relsymlink-regexp' moved from dired-x to dired. The corresponding key sequence '% Y' is now bound by default in Dired. ---- *** 'M-G' is now bound to 'dired-goto-subdir'. Before, that binding was only available if the dired-x package was loaded. -+++ *** 'dired-info' and 'dired-man' moved from dired-x to dired. The 'dired-info' and 'dired-man' commands have been moved from the dired-x package to dired. They have also been renamed to @@ -1696,29 +1474,24 @@ the following to your Init file: (keymap-set dired-mode-map "N" nil) (keymap-set dired-mode-map "I" nil)) ---- *** New command 'dired-do-eww'. This command visits the file on the current line with EWW. ---- *** 'browse-url-of-dired-file' can now call the secondary browser. When invoked with a prefix arg, this will now call 'browse-url-secondary-browser-function' instead of the default browser. 'browse-url-of-dired-file' is bound to 'W' by default in dired mode. ---- *** New user option 'dired-omit-lines'. This is used by 'dired-omit-mode', and now allows you to hide based on other things than just the file names. -+++ *** New user option 'dired-mouse-drag-files'. If non-nil, dragging file names with the mouse in a Dired buffer will initiate a drag-and-drop session allowing them to be opened in other programs. -+++ *** New user option 'dired-free-space'. Dired will now, by default, include the free space in the first line instead of having it on a separate line. To get the previous behavior @@ -1726,13 +1499,11 @@ back, say: (setopt dired-free-space 'separate) ---- *** New user option 'dired-make-directory-clickable'. If non-nil (which is the default), hitting 'RET' or 'mouse-1' on the directory components at the directory displayed at the start of the buffer will take you to that directory. ---- *** Search and replace in Dired/Wdired supports more regexps. For example, the regexp ".*" will match only characters that are part of the file name. Also "^.*$" can be used to match at the beginning @@ -1743,31 +1514,26 @@ default). ** Elisp ---- *** New command 'elisp-eval-region-or-buffer' (bound to 'C-c C-e'). This command evals the forms in the active region or in the whole buffer. ---- *** New commands 'elisp-byte-compile-file' and 'elisp-byte-compile-buffer'. These commands (bound to 'C-c C-f' and 'C-c C-b', respectively) byte-compile the visited file and the current buffer, respectively. ** Games ---- *** New user option 'tetris-allow-repetitions'. This controls how randomness is implemented (whether to use pure randomness as before, or to use a bag). ** Battery -+++ *** New user option 'battery-update-functions'. This can be used to trigger actions based on the battery status. ** DocView ---- *** doc-view can now generate SVG images when viewing PDF files. If Emacs is built with SVG support, doc-view can generate SVG files when using MuPDF as the converter for PDF files, which generally leads @@ -1781,14 +1547,12 @@ or can take a long time to render. ** Enriched Mode -+++ *** New command 'enriched-toggle-markup'. This allows you to see the markup in 'enriched-mode' buffers (e.g., the "HELLO" file). Bound to 'M-o m' by default. ** Shell Script Mode ---- *** New user option 'sh-indent-statement-after-and'. This controls how statements like the following are indented: @@ -1801,10 +1565,8 @@ command is installed. ** CC Mode ---- *** C++ Mode now supports most of the new features in the C++20 Standard. ---- *** In Objective-C Mode, no extra types are recognized by default. The default value of 'objc-font-lock-extra-types' has been changed to nil, since too many identifiers were getting misfontified as types. @@ -1814,19 +1576,16 @@ doc string. ** Cperl Mode ---- *** New user option 'cperl-file-style'. This option determines the indentation style to be used. It can also be used as a file-local variable. ** Gud ---- *** 'gud-go' is now bound to 'C-c C-v'. If given a prefix, it will prompt for an argument to use for the run/continue command. ---- *** 'perldb' now recognizes '-E'. As of Perl 5.10, 'perl -E 0' behaves like 'perl -e 0' but also activates all optional features of the Perl version in use. 'perldb' now uses @@ -1834,27 +1593,23 @@ this invocation as its default. ** Customize ---- *** New command 'custom-toggle-hide-all-widgets'. This is bound to 'H' and toggles whether to hide or show the widget contents. ** Diff Mode ---- *** New user option 'diff-whitespace-style'. Sets the value of the buffer-local variable 'whitespace-style' in 'diff-mode' buffers. By default, this variable is '(face trailing)', which preserves behavior of previous Emacs versions. -+++ *** New user option 'diff-add-log-use-relative-names'. If non-nil insert file names in ChangeLog skeletons relative to the VC root directory. ** Ispell ---- *** 'ispell-region' and 'ispell-buffer' now push the mark. These commands push onto the mark ring the location of the last misspelled word where corrections were offered, so that you can then @@ -1862,73 +1617,60 @@ skip back to that location with 'C-x C-x'. ** Dabbrev ---- *** New function 'dabbrev-capf' for use on 'completion-at-point-functions'. -+++ *** New user option 'dabbrev-ignored-buffer-modes'. Buffers with major modes in this list will be ignored. By default, this includes "binary" buffers like 'archive-mode' and 'image-mode'. ** Package -+++ *** New command 'package-upgrade'. This command allows you to upgrade packages without using 'list-packages'. A package that comes with the Emacs distribution can only be upgraded after you install, once, a newer version from ELPA via the package-menu displayed by 'list-packages'. -+++ *** New command 'package-upgrade-all'. This command allows upgrading all packages without any queries. A package that comes with the Emacs distribution will only be upgraded by this command after you install, once, a newer version of that package from ELPA via the package-menu displayed by 'list-packages'. -+++ *** New commands 'package-recompile' and 'package-recompile-all'. These commands can be useful if the ".elc" files are out of date (invalid byte code and macros). -+++ *** New DWIM action on 'x' in "*Packages*" buffer. If no packages are marked, 'x' will install the package under point if it isn't already, and remove it if it is installed. Customize the new option 'package-menu-use-current-if-no-marks' to the nil value to get back the old behavior of signaling an error in that case. -+++ *** New command 'package-vc-install'. Packages can now be installed directly from source by cloning from their repository. -+++ *** New command 'package-vc-install-from-checkout'. An existing checkout can now be loaded via package.el, by creating a symbolic link from the usual package directory to the checkout. -+++ *** New command 'package-vc-checkout'. Used to fetch the source of a package by cloning a repository without activating the package. -+++ *** New command 'package-vc-prepare-patch'. This command allows you to send patches to package maintainers, for packages checked out using 'package-vc-install'. -+++ *** New command 'package-report-bug'. This command helps you compose an email for sending bug reports to package maintainers, and is bound to 'b' in the "*Packages*" buffer. -+++ *** New user option 'package-vc-selected-packages'. By customizing this user option you can specify specific packages to install. ---- *** New user option 'package-install-upgrade-built-in'. When enabled, 'package-install' will include in the list of upgradeable packages those built-in packages (like Eglot and @@ -1950,7 +1692,6 @@ setting in your early-init file. ** Emacs Sessions (Desktop) -+++ *** New user option to load a locked desktop if locking Emacs is not running. The option 'desktop-load-locked-desktop' can now be set to the value 'check-pid', which means to allow loading a locked ".emacs.desktop" @@ -1962,7 +1703,6 @@ Emacs Sessions" node in the Emacs manual for more details. ** Miscellaneous -+++ *** New command 'scratch-buffer'. This command switches to the "*scratch*" buffer. If "*scratch*" doesn't exist, the command creates it first. You can use this command if you @@ -1970,31 +1710,26 @@ inadvertently delete the "*scratch*" buffer. ** Debugging ---- *** 'q' in a "*Backtrace*" buffer no longer clears the buffer. Instead it just buries the buffer and switches the mode from 'debugger-mode' to 'backtrace-mode', since commands like 'e' are no longer available after exiting the recursive edit. -+++ *** New user option 'debug-allow-recursive-debug'. This user option controls whether the 'e' (in a "*Backtrace*" buffer or while edebugging) and 'C-x C-e' (while edebugging) commands lead to a (further) backtrace. By default, this variable is nil, which is a change in behavior from previous Emacs versions. -+++ *** 'e' in edebug can now take a prefix arg to pretty-print the results. When invoked with a prefix argument, as in 'C-u e', this command will pop up a new buffer and show the full pretty-printed value there. -+++ *** 'C-x C-e' now interprets a non-zero prefix arg to pretty-print the results. When invoked with a non-zero prefix argument, as in 'C-u C-x C-e', this command will pop up a new buffer and show the full pretty-printed value there. -+++ *** You can now generate a backtrace from Lisp errors in redisplay. To do this, set the new variable 'backtrace-on-redisplay-error' to a non-nil value. The backtrace will be written to a special buffer @@ -2003,18 +1738,15 @@ displayed in a window. ** Compile -+++ *** New user option 'compilation-hidden-output'. This regular expression can be used to make specific parts of compilation output invisible. -+++ *** The 'compilation-auto-jump-to-first-error' user option has been extended. It can now have the additional values 'if-location-known' (which will only jump if the location of the first error is known), and 'first-known' (which will jump to the first known error location). -+++ *** New user option 'compilation-max-output-line-length'. Lines longer than the value of this option will have their ends hidden, with a button to reveal the hidden text. This speeds up @@ -2023,15 +1755,12 @@ value is 400; set to nil to disable hiding. ** Flymake -+++ *** New user option 'flymake-mode-line-lighter'. -+++ ** New minor mode 'word-wrap-whitespace-mode' for extending 'word-wrap'. This mode switches 'word-wrap' on, and breaks on all the whitespace characters instead of just 'SPC' and 'TAB'. ---- ** New mode, 'emacs-news-mode', for editing the NEWS file. This mode adds some highlighting, makes the 'M-q' command aware of the format of NEWS entries, and has special commands for doing maintenance @@ -2040,13 +1769,11 @@ of the Emacs NEWS files. In addition, this mode turns on 'icon-preference') in the margins. To disable these icons, set 'outline-minor-mode-use-buttons' to a nil value. ---- ** Kmacro Kmacros are now OClosures and have a new constructor 'kmacro' which uses the 'key-parse' syntax. It replaces the old 'kmacro-lambda-form' (which is now declared obsolete). ---- ** savehist.el can now truncate variables that are too long. An element of user option 'savehist-additional-variables' can now be of the form '(VARIABLE . MAX-ELTS)', which means to truncate the @@ -2055,7 +1782,6 @@ before saving the value. ** Minibuffer and Completions -+++ *** New commands for navigating completions from the minibuffer. When the minibuffer is the current buffer, typing 'M-' or 'M-' selects a previous/next completion candidate from the @@ -2070,13 +1796,11 @@ exit the minibuffer. These keys are also available for in-buffer completion, but they don't insert candidates automatically, you need to type 'M-RET' to insert the selected candidate to the buffer. -+++ *** Choosing a completion with a prefix argument doesn't exit the minibuffer. This means that typing 'C-u RET' on a completion candidate in the "*Completions*" buffer inserts the completion into the minibuffer, but doesn't exit the minibuffer. -+++ *** The "*Completions*" buffer can now be automatically selected. To enable this behavior, customize the user option 'completion-auto-select' to t, then pressing 'TAB' will switch to the @@ -2084,13 +1808,11 @@ To enable this behavior, customize the user option 'second-tab', then the first 'TAB' will display "*Completions*", and the second one will switch to the "*Completions*" buffer. ---- *** New user option 'completion-auto-wrap'. When non-nil, the commands 'next-completion' and 'previous-completion' automatically wrap around on reaching the beginning or the end of the "*Completions*" buffer. -+++ *** New values for the 'completion-auto-help' user option. There are two new values to control the way the "*Completions*" buffer behaves after pressing a 'TAB' if completion is not unique. The value @@ -2099,61 +1821,51 @@ to complete. The value 'visual' is like 'always', but only updates the completions if they are already visible. The default value t always hides the completion buffer after some completion is made. ---- *** New commands to complete the minibuffer history. 'minibuffer-complete-history' ('C-x ') is like 'minibuffer-complete' but completes on the history items instead of the default completion table. 'minibuffer-complete-defaults' ('C-x ') completes on the list of default items. -+++ *** User option 'minibuffer-eldef-shorten-default' is now obsolete. Customize the user option 'minibuffer-default-prompt-format' instead. -+++ *** New user option 'completions-sort'. This option controls the sorting of the completion candidates in the "*Completions*" buffer. Available styles are no sorting, alphabetical (the default), or a custom sort function. -+++ *** New user option 'completions-max-height'. This option limits the height of the "*Completions*" buffer. -+++ *** New user option 'completions-header-format'. This is a string to control the header line to show in the "*Completions*" buffer before the list of completions. If it contains "%s", that is replaced with the number of completions. If nil, the header line is not shown. -+++ *** New user option 'completions-highlight-face'. When this user option names a face, the current candidate in the "*Completions*" buffer is highlighted with that face. The nil value disables this highlighting. The default is to highlight using the 'completions-highlight' face. -+++ *** You can now define abbrevs for the minibuffer modes. 'minibuffer-mode-abbrev-table' and 'minibuffer-inactive-mode-abbrev-table' are now defined. ** Isearch and Replace -+++ *** Changes in how Isearch responds to 'mouse-yank-at-point'. If a user does 'C-s' and then uses '' ('mouse-yank-primary') outside the echo area, Emacs will, by default, end the Isearch and yank the text at mouse cursor. But if 'mouse-yank-at-point' is non-nil, the text will now be added to the Isearch instead. -+++ *** Changes for values 'no' and 'no-ding' of 'isearch-wrap-pause'. Now with these values the search will wrap around not only on repeating with 'C-s C-s', but also after typing a character. -+++ *** New user option 'char-fold-override'. Non-nil means that the default definitions of equivalent characters are overridden. @@ -2161,7 +1873,6 @@ are overridden. *** New command 'describe-char-fold-equivalences'. It displays character equivalences used by 'char-fold-to-regexp'. -+++ *** New command 'isearch-emoji-by-name'. It is bound to 'C-x 8 e RET' during an incremental search. The command accepts the Unicode name of an Emoji (for example, "smiling @@ -2170,7 +1881,6 @@ completion, and adds the Emoji into the search string. ** GDB/MI ---- *** New user option 'gdb-debuginfod-enable-setting'. On capable platforms, GDB 10.1 and later can download missing source and debug info files from special-purpose servers, called "debuginfod @@ -2182,18 +1892,15 @@ that session. ** Glyphless Characters -+++ *** New minor mode 'glyphless-display-mode'. This allows an easy way to toggle seeing all glyphless characters in the current buffer. ---- *** The extra slot of 'glyphless-char-display' can now have cons values. The extra slot of the 'glyphless-char-display' char-table can now have values that are cons cells, specifying separate values for text-mode and GUI terminals. -+++ *** "Replacement character" feature for undisplayable characters on TTYs. The 'acronym' method of displaying glyphless characters on text-mode frames treats single-character acronyms specially: they are displayed @@ -2202,7 +1909,6 @@ without the surrounding '[..]' "box", thus in effect treating such ** Registers -+++ *** Buffer names can now be stored in registers. For instance, to enable jumping to the "*Messages*" buffer with 'C-x r j m': @@ -2211,53 +1917,43 @@ For instance, to enable jumping to the "*Messages*" buffer with ** Pixel Fill -+++ *** This is a new package that deals with filling variable-pitch text. -+++ *** New function 'pixel-fill-region'. This fills the region to be no wider than a specified pixel width. ** Info -+++ *** Command 'info-apropos' now takes a prefix argument to search for regexps. ---- *** New command 'Info-goto-node-web' and key binding 'G'. This will take you to the "gnu.org" web server's version of the current info node. This command only works for the Emacs and Emacs Lisp manuals. ** Shortdoc ---- *** New command 'shortdoc-copy-function-as-kill' bound to 'w'. It copies the name of the function near point into the kill ring. ---- *** 'N' and 'P' are now bound to 'shortdoc-{next,previous}-section'. This is in addition to the old keybindings 'C-c C-n' and 'C-c C-p'. ** VC ---- *** New command 'vc-pull-and-push'. This commands first does a "pull" command, and if that is successful, does a "push" command afterwards. Currently supported in Git and Bzr. -+++ *** 'C-x v b' prefix key is used now for branch commands. 'vc-print-branch-log' is bound to 'C-x v b l', and new commands are 'vc-create-branch' ('C-x v b c') and 'vc-switch-branch' ('C-x v b s'). The VC Directory buffer now uses the prefix 'b' for these branch-related commands. -+++ *** New command 'vc-dir-mark-by-regexp' bound to '% m' and '* %'. This command marks files based on a regexp. If given a prefix argument, unmark instead. -+++ *** New command 'C-x v !' ('vc-edit-next-command'). This prefix command requests editing of the next VC shell command before execution. For example, in a Git repository, you can produce a @@ -2268,7 +1964,6 @@ The intention is that this command can be used to access a wide variety of version control system-specific functionality from VC without complexifying either the VC command set or the backend API. ---- *** 'C-x v v' in a diffs buffer allows to commit only some of the changes. This command is intended to allow you to commit only some of the changes you have in your working tree. Begin by creating a buffer @@ -2277,7 +1972,6 @@ with the changes against the last commit, e.g. with 'C-x v D' want to commit. Finally, type 'C-x v v' in that diff buffer to commit only part of your changes, those whose hunks were left in the buffer. ---- *** 'C-x v v' on an unregistered file will now use the most specific backend. Previously, if you had an SVN-covered "~/" directory, and a Git-covered directory in "~/foo/bar", using 'C-x v v' on a new, unregistered file @@ -2285,28 +1979,23 @@ directory in "~/foo/bar", using 'C-x v v' on a new, unregistered file in the Git repository in "~/foo/bar". This makes this command consistent with 'vc-responsible-backend'. ---- *** Log Edit now fontifies long Git commit summary lines. Writing shorter summary lines avoids truncation in contexts in which Git commands display summary lines. See the two new user options 'vc-git-log-edit-summary-target-len' and 'vc-git-log-edit-summary-max-len'. ---- *** New 'log-edit-headers-separator' face. It is used to style the line that separates the 'log-edit' headers from the 'log-edit' summary. ---- *** The function 'vc-read-revision' accepts a new MULTIPLE argument. If non-nil, multiple revisions can be queried. This is done using 'completing-read-multiple'. ---- *** New function 'vc-read-multiple-revisions'. This function invokes 'vc-read-revision' with a non-nil value for MULTIPLE. -+++ *** New command 'vc-prepare-patch'. Patches for any version control system can be prepared using VC. The command will query what commits to send and will compose messages for @@ -2316,32 +2005,26 @@ modified by the user options 'vc-prepare-patches-separately' and ** Message ---- *** New user option 'mml-attach-file-at-the-end'. If non-nil, 'C-c C-a' will put attached files at the end of the message. ---- *** Message Mode now supports image yanking. -+++ *** New user option 'message-server-alist'. This controls automatic insertion of the "X-Message-SMTP-Method" header before sending a message. ** HTML Mode ---- *** HTML Mode now supports "text/html" and "image/*" yanking. ** Texinfo Mode ---- *** 'texinfo-mode' now has a specialized 'narrow-to-defun' definition. It narrows to the current node. ** EUDC -+++ *** Deprecations planned for next release. After Emacs 29.1, some aspects of EUDC will be deprecated. The goal of these deprecations is to simplify EUDC server configuration by @@ -2361,20 +2044,17 @@ possible servers, instead of requiring a call to 'eudc-set-server' like it does in this release. The default value of 'eudc-ignore-options-file' will be changed from nil to t. -+++ *** New user option 'eudc-ignore-options-file' that defaults to nil. The 'eudc-ignore-options-file' user option can be configured to ignore the 'eudc-options-file' (typically "~/.emacs.d/eudc-options"). Most users should configure this to t and put EUDC configuration in the main Emacs initialization file ("~/.emacs" or "~/.emacs.d/init.el"). -+++ *** 'eudc-expansion-overwrites-query' to 'eudc-expansion-save-query-as-kill'. The user option 'eudc-expansion-overwrites-query' is renamed to 'eudc-expansion-save-query-as-kill' to reflect the actual behavior of the user option. The former is kept as alias. -+++ *** New command 'eudc-expand-try-all'. This command can be used in place of 'eudc-expand-inline'. It takes a prefix argument that causes 'eudc-expand-try-all' to return matches @@ -2382,7 +2062,6 @@ from all servers instead of just the matches from the first server to return any. This is useful for example, if one wants to search LDAP for a name that happens to match a contact in one's BBDB. -+++ *** New behavior and default for user option 'eudc-inline-expansion-format'. EUDC inline expansion result formatting defaulted to @@ -2402,25 +2081,21 @@ is called, and the returned values are used to populate the phrase and comment parts (see RFC 5322 for definitions). In both cases, the phrase part will be automatically quoted if necessary. -+++ *** New function 'eudc-capf-complete' with 'message-mode' integration. EUDC can now contribute email addresses to 'completion-at-point' by adding the new function 'eudc-capf-complete' to 'completion-at-point-functions' in 'message-mode'. -+++ *** Additional attributes of query and results in eudcb-macos-contacts.el. The EUDC back-end for the macOS Contacts app now provides a wider set of attributes to use for queries, and delivers more attributes in query results. -+++ *** New back-end for ecomplete. A new back-end for ecomplete allows information from that database to be queried by EUDC, too. The attributes present in the EUDC query are used to select the entry type in the ecomplete database. -+++ *** New back-end for mailabbrev. A new back-end for mailabbrev allows information from that database to be queried by EUDC, too. Only the attributes 'email', 'name', and @@ -2428,7 +2103,6 @@ be queried by EUDC, too. Only the attributes 'email', 'name', and ** EWW/SHR -+++ *** New user option to automatically rename EWW buffers. The 'eww-auto-rename-buffer' user option can be configured to rename rendered web pages by using their title, URL, or a user-defined @@ -2437,26 +2111,22 @@ of the resulting name is controlled by the user option 'eww-buffer-name-length'. By default, no automatic renaming is performed. -+++ *** New user option 'shr-allowed-images'. This complements 'shr-blocked-images', but allows specifying just the allowed images. -+++ *** New user option 'shr-use-xwidgets-for-media'. If non-nil (and Emacs has been built with support for xwidgets), display