commit a0b18d3cc22331a7c30520d654a85330a9557e6e (HEAD, refs/remotes/origin/master) Author: Lars Ingebrigtsen Date: Thu Jul 30 05:29:42 2020 +0200 Make libravatar lookups asynchronous * lisp/gnus/gnus-gravatar.el (gnus-gravatar-insert): Fix check for repeated gravatars, which is now easier to trigger now that things are more asynchronous. * lisp/image/gravatar.el (gravatar--service-libravatar): Fetch the data asynchronously (bug#40676). (gravatar-service-alist): Adjust all providers so they are asynchronous. (gravatar-build-url): Adjust caller to be asynchronous. (gravatar-retrieve): Ditto. (gravatar-retrieve-synchronously): Ditto. diff --git a/lisp/gnus/gnus-gravatar.el b/lisp/gnus/gnus-gravatar.el index e2bd4ed860..9c24de44cd 100644 --- a/lisp/gnus/gnus-gravatar.el +++ b/lisp/gnus/gnus-gravatar.el @@ -109,14 +109,16 @@ callback for `gravatar-retrieve'." ;; If we're on the " quoting the name, go backward. (when (looking-at-p "[\"<]") (goto-char (1- (point)))) - ;; Do not do anything if there's already a gravatar. This can - ;; happen if the buffer has been regenerated in the mean time, for - ;; example we were fetching someaddress, and then we change to - ;; another mail with the same someaddress. - (unless (get-text-property (point) 'gnus-gravatar) + ;; Do not do anything if there's already a gravatar. + ;; This can happen if the buffer has been regenerated in + ;; the mean time, for example we were fetching + ;; someaddress, and then we change to another mail with + ;; the same someaddress. + (unless (get-text-property (1- (point)) 'gnus-gravatar) (let ((pos (point))) (setq gravatar (append gravatar gnus-gravatar-properties)) - (gnus-put-image gravatar (buffer-substring pos (1+ pos)) category) + (gnus-put-image gravatar (buffer-substring pos (1+ pos)) + category) (put-text-property pos (point) 'gnus-gravatar address) (gnus-add-wash-type category) (gnus-add-image category gravatar))))) diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el index 5b5c27dbe1..ff612d2e9f 100644 --- a/lisp/image/gravatar.el +++ b/lisp/image/gravatar.el @@ -120,8 +120,10 @@ a gravatar for a given email address." :group 'gravatar) (defconst gravatar-service-alist - `((gravatar . ,(lambda (_addr) "https://www.gravatar.com/avatar")) - (unicornify . ,(lambda (_addr) "https://unicornify.pictures/avatar/")) + `((gravatar . ,(lambda (_addr callback) + (funcall callback "https://www.gravatar.com/avatar"))) + (unicornify . ,(lambda (_addr callback) + (funcall callback "https://unicornify.pictures/avatar/"))) (libravatar . ,#'gravatar--service-libravatar)) "Alist of supported gravatar services.") @@ -141,23 +143,31 @@ to track whether you're reading a specific mail." :link '(url-link "https://gravatar.com/") :group 'gravatar) -(defun gravatar--service-libravatar (addr) +(defun gravatar--service-libravatar (addr callback) "Find domain that hosts avatars for email address ADDR." ;; implements https://wiki.libravatar.org/api/ (save-match-data (if (not (string-match ".+@\\(.+\\)" addr)) - "https://seccdn.libravatar.org/avatar" - (let ((domain (match-string 1 addr))) - (catch 'found - (dolist (record '(("_avatars-sec" . "https") - ("_avatars" . "http"))) - (let* ((query (concat (car record) "._tcp." domain)) - (result (dns-query query 'SRV))) - (when result - (throw 'found (format "%s://%s/avatar" - (cdr record) - result))))) - "https://seccdn.libravatar.org/avatar"))))) + (funcall callback "https://seccdn.libravatar.org/avatar") + (let ((domain (match-string 1 addr)) + (records '(("_avatars-sec" . "https") + ("_avatars" . "http"))) + func) + (setq func + (lambda (result) + (cond + (result + (funcall callback (format "%s://%s/avatar" + (cdar records) result))) + ((> (length records) 1) + (pop records) + (dns-query-asynchronous + (concat (caar records) "._tcp." domain) + func 'SRV)) + (t + (funcall callback "https://seccdn.libravatar.org/avatar"))))) + (dns-query-asynchronous + (concat (caar records) "._tcp." domain) func 'SRV))))) (defun gravatar-hash (mail-address) "Return the Gravatar hash for MAIL-ADDRESS." @@ -175,14 +185,17 @@ to track whether you're reading a specific mail." ,@(and gravatar-size `((s ,gravatar-size)))))) -(defun gravatar-build-url (mail-address) - "Return the URL of a gravatar for MAIL-ADDRESS." +(defun gravatar-build-url (mail-address callback) + "Find the URL of a gravatar for MAIL-ADDRESS and call CALLBACK with it." ;; https://gravatar.com/site/implement/images/ - (format "%s/%s?%s" - (funcall (alist-get gravatar-service gravatar-service-alist) - mail-address) - (gravatar-hash mail-address) - (gravatar--query-string))) + (funcall (alist-get gravatar-service gravatar-service-alist) + mail-address + (lambda (url) + (funcall callback + (format "%s/%s?%s" + url + (gravatar-hash mail-address) + (gravatar--query-string)))))) (defun gravatar-get-data () "Return body of current URL buffer, or nil on failure." @@ -198,18 +211,23 @@ to track whether you're reading a specific mail." When finished, call CALLBACK as (apply CALLBACK GRAVATAR CBARGS), where GRAVATAR is either an image descriptor, or the symbol `error' if the retrieval failed." - (let ((url (gravatar-build-url mail-address))) - (if (url-cache-expired url gravatar-cache-ttl) - (url-retrieve url #'gravatar-retrieved (list callback cbargs) t) - (with-current-buffer (url-fetch-from-cache url) - (gravatar-retrieved () callback cbargs))))) + (gravatar-build-url + mail-address + (lambda (url) + (if (url-cache-expired url gravatar-cache-ttl) + (url-retrieve url #'gravatar-retrieved (list callback cbargs) t) + (with-current-buffer (url-fetch-from-cache url) + (gravatar-retrieved () callback cbargs)))))) ;;;###autoload (defun gravatar-retrieve-synchronously (mail-address) "Synchronously retrieve a gravatar for MAIL-ADDRESS. Value is either an image descriptor, or the symbol `error' if the retrieval failed." - (let ((url (gravatar-build-url mail-address))) + (let ((url nil)) + (gravatar-build-url mail-address (lambda (u) (setq url u))) + (while (not url) + (sleep-for 0.01)) (with-current-buffer (if (url-cache-expired url gravatar-cache-ttl) (url-retrieve-synchronously url t) (url-fetch-from-cache url)) commit ef7f569cbd3a69a77c09bc214baacd47737f7e01 Author: Lars Ingebrigtsen Date: Thu Jul 30 03:44:45 2020 +0200 Add the new function dns-query-asynchronous * lisp/net/dns.el (dns-query-asynchronous): New function. (dns--lookup, dns--filter): New internal functions. (dns-query): Reimplement on top of dns-query-asynchronous. diff --git a/etc/NEWS b/etc/NEWS index 8f5864961d..fab2d85e8d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -637,6 +637,11 @@ Formerly it made an exception for integer components of SOA records, because SOA serial numbers can exceed fixnum ranges on 32-bit platforms. Emacs now supports bignums so this old glitch is no longer needed. +--- +** The new function 'dns-query-asynchronous' has been added. +It takes the same parameters as 'dns-query', but adds a callback +parameter. + ** The Lisp variables 'previous-system-messages-locale' and 'previous-system-time-locale' have been removed, as they were created by mistake and were not useful to Lisp code. diff --git a/lisp/net/dns.el b/lisp/net/dns.el index 1c46102554..ef250f067e 100644 --- a/lisp/net/dns.el +++ b/lisp/net/dns.el @@ -374,9 +374,14 @@ Parses \"/etc/resolv.conf\" or calls \"nslookup\"." (set (intern key dns-cache) result) result)))) -(defun dns-query (name &optional type fullp reversep) +(defun dns-query-asynchronous (name callback &optional type fullp reversep) "Query a DNS server for NAME of TYPE. -If FULLP, return the entire record returned. +CALLBACK will be called with a single parameter: The result. + +If there's no result, or `dns-timeout' has passed, CALLBACK will +be called with nil as the parameter. + +If FULLP, return the entire record. If REVERSEP, look up an IP address." (setq type (or type 'A)) (unless (dns-servers-up-to-date-p) @@ -392,63 +397,118 @@ If REVERSEP, look up an IP address." (progn (message "No DNS server configuration found") nil) - (with-temp-buffer - (set-buffer-multibyte nil) - (let* ((process - (condition-case () - (let ((server (car dns-servers)) - (coding-system-for-read 'binary) - (coding-system-for-write 'binary)) - (if (featurep 'make-network-process '(:type datagram)) - (make-network-process - :name "dns" - :coding 'binary - :buffer (current-buffer) - :host server - :service "domain" - :type 'datagram) - ;; On MS-Windows datagram sockets are not - ;; supported, so we fall back on opening a TCP - ;; connection to the DNS server. + (dns--lookup name callback type fullp))) + +(defun dns--lookup (name callback type full) + (with-current-buffer (generate-new-buffer " *dns*") + (set-buffer-multibyte nil) + (let* ((tcp nil) + (process + (condition-case () + (let ((server (car dns-servers)) + (coding-system-for-read 'binary) + (coding-system-for-write 'binary)) + (if (featurep 'make-network-process '(:type datagram)) + (make-network-process + :name "dns" + :coding 'binary + :buffer (current-buffer) + :host server + :service "domain" + :type 'datagram) + ;; On MS-Windows datagram sockets are not + ;; supported, so we fall back on opening a TCP + ;; connection to the DNS server. + (progn + (setq tcp t) (open-network-stream "dns" (current-buffer) - server "domain"))) - (error - (message - "dns: Got an error while trying to talk to %s" - (car dns-servers)) - nil))) - (step 100) - (times (* dns-timeout 1000)) - (id (random 65000)) - (tcp-p (and process (not (process-contact process :type))))) - (when process - (process-send-string - process - (dns-write `((id ,id) - (opcode query) - (queries ((,name (type ,type)))) - (recursion-desired-p t)) - tcp-p)) - (while (and (zerop (buffer-size)) - (> times 0)) - (let ((step-sec (/ step 1000.0))) - (sit-for step-sec) - (accept-process-output process step-sec)) - (setq times (- times step))) - (condition-case nil - (delete-process process) - (error nil)) - (when (and (>= (buffer-size) 2) - ;; We had a time-out. - (> times 0)) - (let ((result (dns-read (buffer-string) tcp-p))) - (if fullp - result - (let ((answer (car (dns-get 'answers result)))) - (when (eq type (dns-get 'type answer)) - (if (eq type 'TXT) - (dns-get-txt-answer (dns-get 'answers result)) - (dns-get 'data answer)))))))))))) + server "domain")))) + (error + (message + "dns: Got an error while trying to talk to %s" + (car dns-servers)) + nil))) + (triggered nil) + (buffer (current-buffer)) + timer) + (if (not process) + (progn + (kill-buffer buffer) + (funcall callback nil)) + ;; Call the callback if we don't get any response at all. + (setq timer (run-at-time dns-timeout nil + (lambda () + (unless triggered + (setq triggered t) + (delete-process process) + (kill-buffer buffer) + (funcall callback nil))))) + (process-send-string + process + (dns-write `((id ,(random 65000)) + (opcode query) + (queries ((,name (type ,type)))) + (recursion-desired-p t)) + tcp)) + (set-process-filter + process + (lambda (process string) + (with-current-buffer (process-buffer process) + (goto-char (point-max)) + (insert string) + (goto-char (point-min)) + ;; If this is DNS, then we always get the full data in + ;; one packet. If it's TCP, we may only get part of the + ;; data, but the first two bytes says how long the data + ;; is supposed to be. + (when (or (not tcp) + (>= (buffer-size) (dns-read-bytes 2))) + (setq triggered t) + (cancel-timer timer) + (dns--filter process callback type full tcp))))) + ;; In case we the process is deleted for some reason, then do + ;; a failure callback. + (set-process-sentinel + process + (lambda (_ state) + (when (and (eq state 'deleted) + ;; Ensure we don't trigger this callback twice. + (not triggered)) + (setq triggered t) + (cancel-timer timer) + (kill-buffer buffer) + (funcall callback nil)))))))) + +(defun dns--filter (process callback type full tcp) + (let ((message (buffer-string))) + (when (process-live-p process) + (delete-process process)) + (kill-buffer (current-buffer)) + (when (>= (length message) 2) + (let ((result (dns-read message tcp))) + (funcall callback + (if full + result + (let ((answer (car (dns-get 'answers result)))) + (when (eq type (dns-get 'type answer)) + (if (eq type 'TXT) + (dns-get-txt-answer (dns-get 'answers result)) + (dns-get 'data answer)))))))))) + +(defun dns-query (name &optional type fullp reversep) + "Query a DNS server for NAME of TYPE. +If FULLP, return the entire record returned. +If REVERSEP, look up an IP address." + (let ((result nil)) + (dns-query-asynchronous + name + (lambda (response) + (setq result (list response))) + type fullp reversep) + ;; Loop until we get the callback. + (while (not result) + (sleep-for 0.01)) + (car result))) (provide 'dns) commit 789197049ca13a1434afccd6614134cc276a5074 Author: Lars Ingebrigtsen Date: Thu Jul 30 02:47:59 2020 +0200 Use lexical binding in dns.el * lisp/net/dns.el: Use lexical-binding. (dns-write-bytes, dns-read): Adjust for lexical-binding. diff --git a/lisp/net/dns.el b/lisp/net/dns.el index e02c99ea0c..1c46102554 100644 --- a/lisp/net/dns.el +++ b/lisp/net/dns.el @@ -1,4 +1,4 @@ -;;; dns.el --- Domain Name Service lookups +;;; dns.el --- Domain Name Service lookups -*- lexical-binding:t -*- ;; Copyright (C) 2002-2020 Free Software Foundation, Inc. @@ -24,6 +24,8 @@ ;;; Code: +(require 'cl-lib) + (defvar dns-timeout 5 "How many seconds to wait when doing DNS queries.") @@ -73,7 +75,7 @@ updated. Set this variable to t to disable the check.") (defun dns-write-bytes (value &optional length) (let (bytes) - (dotimes (i (or length 1)) + (dotimes (_ (or length 1)) (push (% value 256) bytes) (setq value (/ value 256))) (dolist (byte bytes) @@ -81,7 +83,7 @@ updated. Set this variable to t to disable the check.") (defun dns-read-bytes (length) (let ((value 0)) - (dotimes (i length) + (dotimes (_ length) (setq value (logior (* value 256) (following-char))) (forward-char 1)) value)) @@ -229,7 +231,7 @@ If TCP-P, the first two bytes of the packet will be the length field." (setq authorities (dns-read-bytes 2)) (setq additionals (dns-read-bytes 2)) (let ((qs nil)) - (dotimes (i queries) + (dotimes (_ queries) (push (list (dns-read-name) (list 'type (dns-inverse-get (dns-read-bytes 2) dns-query-types)) @@ -237,26 +239,31 @@ If TCP-P, the first two bytes of the packet will be the length field." dns-classes))) qs)) (push (list 'queries qs) spec)) - (dolist (slot '(answers authorities additionals)) - (let ((qs nil) - type) - (dotimes (i (symbol-value slot)) - (push (list (dns-read-name) - (list 'type - (setq type (dns-inverse-get (dns-read-bytes 2) - dns-query-types))) - (list 'class (dns-inverse-get (dns-read-bytes 2) - dns-classes)) - (list 'ttl (dns-read-bytes 4)) - (let ((length (dns-read-bytes 2))) - (list 'data - (dns-read-type - (buffer-substring - (point) - (progn (forward-char length) (point))) - type)))) - qs)) - (push (list slot qs) spec))) + (cl-loop for (slot length) in `((answers ,answers) + (authorities ,authorities) + (additionals ,additionals)) + do (let ((qs nil) + type) + (dotimes (_ length) + (push (list (dns-read-name) + (list 'type + (setq type (dns-inverse-get + (dns-read-bytes 2) + dns-query-types))) + (list 'class (dns-inverse-get + (dns-read-bytes 2) + dns-classes)) + (list 'ttl (dns-read-bytes 4)) + (let ((length (dns-read-bytes 2))) + (list 'data + (dns-read-type + (buffer-substring + (point) + (progn (forward-char length) + (point))) + type)))) + qs)) + (push (list slot qs) spec))) (nreverse spec)))) (defun dns-read-int32 () @@ -274,12 +281,12 @@ If TCP-P, the first two bytes of the packet will be the length field." (cond ((eq type 'A) (let ((bytes nil)) - (dotimes (i 4) + (dotimes (_ 4) (push (dns-read-bytes 1) bytes)) (mapconcat 'number-to-string (nreverse bytes) "."))) ((eq type 'AAAA) (let (hextets) - (dotimes (i 8) + (dotimes (_ 8) (push (dns-read-bytes 2) hextets)) (mapconcat (lambda (n) (format "%x" n)) (nreverse hextets) ":"))) commit 18a5e52eed67700b65681ce5007f121f9700f241 Author: Lars Ingebrigtsen Date: Thu Jul 30 02:38:00 2020 +0200 Small dns.el code cleanup * lisp/net/dns.el (dns-query): Clean up code slightly by removing a macro and moving the code into the function itself. diff --git a/lisp/net/dns.el b/lisp/net/dns.el index 53ea0b19b5..e02c99ea0c 100644 --- a/lisp/net/dns.el +++ b/lisp/net/dns.el @@ -355,25 +355,6 @@ Parses \"/etc/resolv.conf\" or calls \"nslookup\"." result)) ;;; Interface functions. -(defmacro dns-make-network-process (server) - `(let ((server ,server) - (coding-system-for-read 'binary) - (coding-system-for-write 'binary)) - (if (and - (fboundp 'make-network-process) - (featurep 'make-network-process '(:type datagram))) - (make-network-process - :name "dns" - :coding 'binary - :buffer (current-buffer) - :host server - :service "domain" - :type 'datagram) - ;; Older versions of Emacs do not have `make-network-process', - ;; and on MS-Windows datagram sockets are not supported, so we - ;; fall back on opening a TCP connection to the DNS server. - (open-network-stream "dns" (current-buffer) server "domain")))) - (defvar dns-cache (make-vector 4096 0)) (defun dns-query-cached (name &optional type fullp reversep) @@ -386,9 +367,6 @@ Parses \"/etc/resolv.conf\" or calls \"nslookup\"." (set (intern key dns-cache) result) result)))) -;; The old names `query-dns' and `query-dns-cached' weren't used in Emacs 23 -;; yet, so no alias are provided. --rsteib - (defun dns-query (name &optional type fullp reversep) "Query a DNS server for NAME of TYPE. If FULLP, return the entire record returned. @@ -409,17 +387,33 @@ If REVERSEP, look up an IP address." nil) (with-temp-buffer (set-buffer-multibyte nil) - (let* ((process (condition-case () - (dns-make-network-process (car dns-servers)) - (error - (message - "dns: Got an error while trying to talk to %s" - (car dns-servers)) - nil))) - (step 100) - (times (* dns-timeout 1000)) - (id (random 65000)) - (tcp-p (and process (not (process-contact process :type))))) + (let* ((process + (condition-case () + (let ((server (car dns-servers)) + (coding-system-for-read 'binary) + (coding-system-for-write 'binary)) + (if (featurep 'make-network-process '(:type datagram)) + (make-network-process + :name "dns" + :coding 'binary + :buffer (current-buffer) + :host server + :service "domain" + :type 'datagram) + ;; On MS-Windows datagram sockets are not + ;; supported, so we fall back on opening a TCP + ;; connection to the DNS server. + (open-network-stream "dns" (current-buffer) + server "domain"))) + (error + (message + "dns: Got an error while trying to talk to %s" + (car dns-servers)) + nil))) + (step 100) + (times (* dns-timeout 1000)) + (id (random 65000)) + (tcp-p (and process (not (process-contact process :type))))) (when process (process-send-string process commit 55806ee46b047c03698340ce8a6397de6355c56a Author: Glenn Morris Date: Wed Jul 29 15:15:15 2020 -0700 * admin/gitmerge.el (gitmerge-resolve): Discard AUTHORS conflicts. diff --git a/admin/gitmerge.el b/admin/gitmerge.el index 922ddef6bb..18da466aaa 100644 --- a/admin/gitmerge.el +++ b/admin/gitmerge.el @@ -354,7 +354,7 @@ Returns non-nil if conflicts remain." ;; The conflict markers remain so we return non-nil. (message "Failed to fix NEWS conflict")))) ;; Generated files. - ((member file '("lisp/ldefs-boot.el")) + ((member file '("lisp/ldefs-boot.el" "etc/AUTHORS")) ;; We are in the file's buffer, so names are relative. (call-process "git" nil t nil "reset" "--" (file-name-nondirectory file)) commit 653a81bf8ce41725d12b20f6de3d1877d190f269 Author: Glenn Morris Date: Wed Jul 29 08:52:42 2020 -0700 Update a gravatar test * test/lisp/image/gravatar-tests.el (gravatar-build-url): Update for recent change in default gravatar-service. diff --git a/test/lisp/image/gravatar-tests.el b/test/lisp/image/gravatar-tests.el index 66098fa011..e66b5c6803 100644 --- a/test/lisp/image/gravatar-tests.el +++ b/test/lisp/image/gravatar-tests.el @@ -67,6 +67,6 @@ (gravatar-force-default nil) (gravatar-size nil)) (should (equal (gravatar-build-url "foo") "\ -https://seccdn.libravatar.org/avatar/acbd18db4cc2f85cedef654fccc4a4d8?r=g")))) +https://www.gravatar.com/avatar/acbd18db4cc2f85cedef654fccc4a4d8?r=g")))) ;;; gravatar-tests.el ends here commit c48bb7deb88317b6beda4c5944aca7998ff8c37a Author: Mattias Engdegård Date: Wed Jul 29 17:47:32 2020 +0200 Preserve match data in 'kbd' * lisp/subr.el (kbd): Preserve match data since this function is declared pure (see discussion in bug#42147). diff --git a/lisp/subr.el b/lisp/subr.el index 10c37e9413..3c8dbd1614 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -893,8 +893,9 @@ This is the same format used for saving keyboard macros (see For an approximate inverse of this, see `key-description'." ;; Don't use a defalias, since the `pure' property is true only for ;; the calling convention of `kbd'. - (read-kbd-macro keys)) -(put 'kbd 'pure t) + (declare (pure t)) + ;; A pure function is expected to preserve the match data. + (save-match-data (read-kbd-macro keys))) (defun undefined () "Beep to tell the user this binding is undefined." commit 3b0cb1c4f5cb78d3c887701810b5370b80be6559 Merge: b8c8e93f06 d024fc141b Author: Glenn Morris Date: Wed Jul 29 08:39:28 2020 -0700 Merge from origin/emacs-27 d024fc141b (origin/emacs-27) * doc/lispref/symbols.texi (Definitions)... d78e0f3cd5 ; lisp/ldefs-boot.el: Update. 27877e7bcf (tag: emacs-27.1-rc1) * etc/HISTORY: Add Emacs 27.1 releas... commit b8c8e93f068fd58694cf639d48ea72974f99f954 Merge: 8f46e67ffd 44888c95b0 Author: Glenn Morris Date: Wed Jul 29 08:39:28 2020 -0700 ; Merge from origin/emacs-27 The following commit was skipped: 44888c95b0 Bump Emacs version to 27.1 commit 8f46e67ffdad7fd0887c9a0fc0a6a697c2cc4d50 Merge: 64a1b42456 1fc742b63e Author: Glenn Morris Date: Wed Jul 29 08:39:28 2020 -0700 Merge from origin/emacs-27 1fc742b63e ; Update ChangeLog.3 4c7f6217da * etc/AUTHORS: Update. 24391f517a Update authors.el 56f958807c * etc/NEWS: Remove temporary markup. 73a2f51043 Add another test for global module references # Conflicts: # etc/AUTHORS # etc/NEWS commit 64a1b4245673aea1c9bce54226edcdeaf3064ca6 Merge: 775a3e19d2 3838aeb739 Author: Glenn Morris Date: Wed Jul 29 08:38:51 2020 -0700 ; Merge from origin/emacs-27 The following commits were skipped: 3838aeb739 Backport: add another test case for module assertions. bde5f5f897 Backport: Add module test for edge case. commit 775a3e19d2c14531055ae8cba21bc6a0a97f6a94 Merge: 50237759b0 4b3085a7fe Author: Glenn Morris Date: Wed Jul 29 08:38:51 2020 -0700 Merge from origin/emacs-27 4b3085a7fe Fix last change efdd4632c9 Fix Arabic shaping when column-number-mode is in effect d5acc50941 Fix description of kmacro-* commands in the user manual commit 50237759b042d5f2e3df9403a4c1697c381f6eae Merge: 9d011397ab 96a3b473fa Author: Glenn Morris Date: Wed Jul 29 08:38:51 2020 -0700 ; Merge from origin/emacs-27 The following commit was skipped: 96a3b473fa Fix viewing of encrypted S/MIME messages commit 9d011397abae131ff6c40ba625e670d5a51674e9 Author: Michael Albinus Date: Wed Jul 29 16:41:30 2020 +0200 * etc/NEWS: Fix typos. diff --git a/etc/NEWS b/etc/NEWS index e4d9887480..8f5864961d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -156,7 +156,7 @@ value of 'tab-bar-show'. It is now defined as a generalized variable that can be used with 'setf' to modify the value stored in a given class slot. -** New minor mode 'cl-font-lock-built-in-mode' for `lisp-mode'. +** New minor mode 'cl-font-lock-built-in-mode' for 'lisp-mode'. The mode provides refined highlighting of built-in functions, types, and variables. @@ -261,8 +261,8 @@ supplied error message. This hook is intended to be used for registering doc string functions. These functions don't need to produce the doc string right away, they may arrange for it to be produced asynchronously. The results of all -doc string functions are accessible to the user through the existing -variable 'eldoc-documentation-strategy'. +doc string functions are accessible to the user through the user +option 'eldoc-documentation-strategy'. *** New user option 'eldoc-documentation-strategy'. The built-in choices available for this user option let users compose @@ -481,14 +481,14 @@ This is still the case by default, but if you customize other function, it will now be called instead of the default. +++ -*** New variable 'shr-max-width'. -If this variable is non-nil, and 'shr-width' is nil, then SHR will use -the value of 'shr-max-width' to limit the width of the rendered HTML. -The default is 120 characters, so even if you have very wide frames, -HTML text will be rendered more narrowly, which usually leads to a -more readable text. Set this variable to nil to get the previous -behavior of rendering as wide as the window-width allows. If -'shr-width' is non-nil, it overrides this variable. +*** New user option 'shr-max-width'. +If this user option is non-nil, and 'shr-width' is nil, then SHR will +use the value of 'shr-max-width' to limit the width of the rendered +HTML. The default is 120 characters, so even if you have very wide +frames, HTML text will be rendered more narrowly, which usually leads +to a more readable text. Set this user option to nil to get the +previous behavior of rendering as wide as the 'window-width' allows. +If 'shr-width' is non-nil, it overrides this variable. ** Images @@ -503,7 +503,7 @@ animation is stopped. +++ *** 'eww-download-directory' will now use the XDG location, if defined. -However, if ~/Downloads/ already exists, that will continue to be +However, if "~/Downloads/" already exists, that will continue to be used. --- @@ -715,7 +715,7 @@ for encoding and decoding without having to bind 'coding-system-for-{read,write}' or call 'set-process-coding-system'. +++ -** 'open-network-stream' can now take a :capability-command that's a function. +** 'open-network-stream' can now take a ':capability-command' that's a function. The function is called with the greeting from the server as its only parameter, and allows sending different TLS capability commands to the server based on that greeting. @@ -733,7 +733,7 @@ process is interrupted by a signal. In order for the two functions to behave more consistently, 'format-spec' now pads and truncates based on string width rather than length, and also supports format specifications that include a -truncating precision field, such as '%.2a'. +truncating precision field, such as "%.2a". --- ** New function 'color-values-from-color-spec'. commit 4a07d3c7d40c00d8b6d5ca1daaf6a8c6513a1ff9 Author: Michael Albinus Date: Wed Jul 29 16:41:18 2020 +0200 Tramp doc edit * doc/misc/tramp.texi: Use it. * doc/misc/trampver.texi: Declare @trampurl. diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index c018033cda..b4195111d4 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -59,7 +59,7 @@ local and the remote host, whereas @value{tramp} uses a combination of @command{ssh}/@command{scp}. You can find the latest version of this document on the web at -@uref{https://www.gnu.org/software/tramp/}. +@uref{@value{trampurl}}. @ifhtml The latest release of @value{tramp} is available for diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi index aabb2f8acc..dbebbc3681 100644 --- a/doc/misc/trampver.texi +++ b/doc/misc/trampver.texi @@ -9,6 +9,7 @@ @c tramp.el, and the bug report address is auto-frobbed from @c configure.ac. @set trampver 2.5.0-pre +@set trampurl https://www.gnu.org/software/tramp/ @set tramp-bug-report-address tramp-devel@@gnu.org @set emacsver 25.1 commit d024fc141bab0b8d3400dc6b53eac1ed199ddb1f (refs/remotes/origin/emacs-27) Author: Stefan Kangas Date: Wed Jul 29 12:34:31 2020 +0200 * doc/lispref/symbols.texi (Definitions): Fix typo. diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index dad2955456..d6b0494d1a 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi @@ -132,7 +132,7 @@ variables. To define a customizable variable, use the (@pxref{Customization}). In principle, you can assign a variable value to any symbol with -@code{setq}, whether not it has first been defined as a variable. +@code{setq}, whether or not it has first been defined as a variable. However, you ought to write a variable definition for each global variable that you want to use; otherwise, your Lisp program may not act correctly if it is evaluated with lexical scoping enabled commit d78e0f3cd55689ad1608aeb05b0de1dfb914a63a Author: Nicolas Petton Date: Tue Jul 28 23:04:11 2020 +0200 ; lisp/ldefs-boot.el: Update. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index a8e1ed8f8d..18935f80aa 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -10544,7 +10544,10 @@ The buffer is expected to contain a mail message." t nil) (autoload 'epa-mail-sign "epa-mail" "\ Sign the current buffer. -The buffer is expected to contain a mail message. +The buffer is expected to contain a mail message, and signing is +performed with your default key. +With prefix argument, asks you to select interactively the key to +use from your key ring. \(fn START END SIGNERS MODE)" t nil) commit 27877e7bcfa37b2c97a3dde170f870d4729ff807 (tag: refs/tags/emacs-27.1-rc1) Author: Nicolas Petton Date: Tue Jul 28 22:30:24 2020 +0200 * etc/HISTORY: Add Emacs 27.1 release date. diff --git a/etc/HISTORY b/etc/HISTORY index 6cda28d15a..f0fd7d6f21 100644 --- a/etc/HISTORY +++ b/etc/HISTORY @@ -220,6 +220,8 @@ GNU Emacs 26.2 (2019-04-12) emacs-26.2 GNU Emacs 26.3 (2019-08-28) emacs-26.3 +GNU Emacs 27.1 (2020-08-06) emacs-27.1 + ---------------------------------------------------------------------- This file is part of GNU Emacs. commit 44888c95b0944ae45942ccfb32e78ffb51a60b2b Author: Nicolas Petton Date: Tue Jul 28 22:27:07 2020 +0200 Bump Emacs version to 27.1 * README: * configure.ac: * msdos/sed2v2.inp: * nt/README.W32: Bump Emacs version. diff --git a/README b/README index 9e4906c734..5482f719c3 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Copyright (C) 2001-2020 Free Software Foundation, Inc. See the end of the file for license conditions. -This directory tree holds version 27.0.91 of GNU Emacs, the extensible, +This directory tree holds version 27.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 76f42ae9e2..40bc610f9b 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see . AC_PREREQ(2.65) dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el. -AC_INIT(GNU Emacs, 27.0.91, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/) +AC_INIT(GNU Emacs, 27.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, dnl and then quoted again for a C string. Separate options with spaces. diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index 3fbfe942e7..c1ec9ff0ca 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -66,7 +66,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 "27.0.91"/ +/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "27.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 53b3c6b762..8f2e277eca 100644 --- a/nt/README.W32 +++ b/nt/README.W32 @@ -1,7 +1,7 @@ Copyright (C) 2001-2020 Free Software Foundation, Inc. See the end of the file for license conditions. - Emacs version 27.0.91 for MS-Windows + Emacs version 27.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 1fc742b63ebfa548dd3ff6e99b530480e8c0b12c Author: Nicolas Petton Date: Tue Jul 28 22:26:42 2020 +0200 ; Update ChangeLog.3 diff --git a/ChangeLog.3 b/ChangeLog.3 index 7f6000fc55..4aa52a762f 100644 --- a/ChangeLog.3 +++ b/ChangeLog.3 @@ -1,3 +1,1847 @@ +2020-07-28 Nicolas Petton + + * etc/NEWS: Remove temporary markup. + +2020-07-26 Philipp Stephani + + Add another test for global module references + + * test/src/emacs-module-tests.el (mod-test-globref-reordered): New + unit test. + + * test/data/emacs-module/mod-test.c (Fmod_test_globref_reordered): New + test module function. + (emacs_module_init): Export it. + +2020-07-26 Philipp Stephani + + Backport: add another test case for module assertions. + + This backports commit 9f01ce6327 from master. Since the bug isn’t + present on emacs-27, just backport the new test case. + + * test/data/emacs-module/mod-test.c (Fmod_test_globref_invalid_free): + New test module function. + (emacs_module_init): Export it. + + * test/src/emacs-module-tests.el + (module--test-assertions--globref-invalid-free): New unit test. + +2020-07-26 Philipp Stephani + + Backport: Add module test for edge case. + + This backports commit 6355a3ec62 from master. Since the bug isn’t + present in emacs-27, just backport the test case. + + * test/data/emacs-module/mod-test.c + (Fmod_test_invalid_store_copy): New test module function. + (emacs_module_init): Export it. + + * test/src/emacs-module-tests.el + (module--test-assertions--load-non-live-object-with-global-copy): + New unit test. + +2020-07-25 Eli Zaretskii + + Fix last change + + * src/composite.c (composition_reseat_it): Fix of the commentary, + and a minor change of the last fix. + +2020-07-25 Pip Cet + + Fix Arabic shaping when column-number-mode is in effect + + * src/indent.c (scan_for_column, compute_motion): Pass -1, + instead of NEUTRAL_DIR, to 'composition_reseat_it'. + * src/composite.c (composition_reseat_it): Interpret negative + value of BIDI_LEVEL to mean the caller doesn't know what is the + bidi direction of the text. (Bug#41005) + +2020-07-24 Eli Zaretskii + + Fix description of kmacro-* commands in the user manual + + * doc/emacs/kmacro.texi (Basic Keyboard Macro): Separate old-style + macro definition commands from the new style in the summary + table. (Bug#42492) + +2020-07-24 Lars Ingebrigtsen + + Fix viewing of encrypted S/MIME messages + + * lisp/gnus/mm-decode.el (mm-possibly-verify-or-decrypt): Don't + add a content-type header if there already is one (bug#41659). + +2020-07-21 Ken Manheimer + + Revert "Rectify allout-widgets region undecoration so item at start is not missed." + + This reverts commit 33d85cb768b40794bffcd9ab22fbdec1211a74e5. + + Backporting it to emacs-27 was not appropriate. + +2020-07-21 Ken Manheimer + + Revert "Resolve missing button-region keymap bindings." + + This reverts commit dd7c191291c8eb1afeac0f1512745491c5c7a317. + + Backporting it to emacs-27 was not appropriate. + +2020-07-21 Ken Manheimer + + Revert "Provide missing let definition to prevent background void-variable error." + + This reverts commit 3c410b6b4753e02269bb36914e7534eb124150dd. + + Backporting it to emacs-27 was not appropriate. + +2020-07-21 Ken Manheimer + + Revert "Don't let item decoration be disrupted by too-shallow items." + + This reverts commit 8684216542889fa57daa32072104afc69785907f. + + Backporting it to emacs-27 was not appropriate. + +2020-07-21 Ken Manheimer + + Revert "Fix allout-widgets-mode handling of edits to item cue, fixing (bug#11312)" + + This reverts commit 8e13d332481551e4c8c1c66dd0c69dd09256dffc. + + Backporting it to emacs-27 was not appropriate. + +2020-07-21 Robert Pluim + + Run custom-magic-reset in the customize buffer + + If the user has navigated away from the customize buffer, then + clicking on a widget in the customize buffer applies changes in the + selected buffer rather than in the customize buffer. Pass the + customize buffer to 'custom-magic-reset' to avoid this. + + * lisp/cus-edit.el (custom-magic-reset): Add optional buffer argument, + apply changes in that buffer. + (custom-notify): Pass the buffer containing the widget to + 'custom-magic-reset'. (Bug#40788) + +2020-07-20 Ken Manheimer + + Backport: Rectify allout-widgets region undecoration so item at start is not missed. + + * lisp/allout-widgets.el (allout-widgets-undecorate-region): + Reorganize the loop so an item at the start is not skipped. + + (cherry picked from commit 33d85cb768b40794bffcd9ab22fbdec1211a74e5) + +2020-07-20 Ken Manheimer + + Backport: Resolve missing button-region keymap bindings. + + * lisp/allout-widgets.el (allout-item-icon-keymap, + allout-item-body-keymap, allout-cue-span-keymap, allout-widgets-mode): + Inherit from both (current-local-map) and (current-global-map). This + provides for missing global bindings when inheriting from + just (current-local-map), eg Esc-<. + + (cherry picked from commit dd7c191291c8eb1afeac0f1512745491c5c7a317) + +2020-07-20 Ken Manheimer + + Backport: Provide missing let definition to prevent background void-variable error. + + * lisp/allout-widgets.el (allout-widgets-exposure-change-processor) + Let-declare handled-conceal, for reference through `(symbol-value)' + within the let body. (Because the error happens in an + after-change-functions hook, so it is caught and reported as a message + by allout-widgets-hook-error-handler.) + + (cherry picked from commit 3c410b6b4753e02269bb36914e7534eb124150dd) + +2020-07-20 Ken Manheimer + + Backport: Don't let item decoration be disrupted by too-shallow items. + + * lisp/allout-widgets.el (allout-decorate-item-and-context): Check for + parent-position having value before using it. + + Also, shift local emacs vars topic deeper so it doesn't constitute + an instance of that particular aberrant case. + + (cherry picked from commit 8684216542889fa57daa32072104afc69785907f) + +2020-07-20 Ken Manheimer + + Backport: Fix allout-widgets-mode handling of edits to item cue, fixing (bug#11312) + + * lisp/allout-widgets.el (allout-decorate-item-cue): Properly decorate + item cue span. + (allout-setup-text-properties): use allout-graphics-modification-handler + as allout-cue-span-category modification hook. + + (cherry picked from commit 8e13d332481551e4c8c1c66dd0c69dd09256dffc) + +2020-07-20 Robert Pluim + + Document prefix arg effects for 'epa-mail-{sign,encrypt}' + + * doc/misc/epa.texi (Mail-mode integration): Describe effect of + prefix arg to 'epa-mail-encrypt' and 'epa-mail-sign'. + + * lisp/epa-mail.el (epa-mail-sign): Describe effect of prefix arg. + +2020-07-20 Robert Pluim + + * etc/NEWS: Correct description of :client-certificate change + +2020-07-18 Eli Zaretskii + + Revert "Fix filename completion in shell mode buffers" + + This reverts commit e4d17d8cb479ffeeb7dfb7320a1432722ac8df75. + Per bug#42383 discussions, the fix for bug#34330 probably + just works around the real issue, which is in pcomplete.el. + +2020-07-18 Eli Zaretskii + + Improve documentation of 'bookmark-bmenu-mode' + + * lisp/bookmark.el (bookmark-bmenu-mode): Add + `bookmark-bmenu-search' to the doc string. (Bug#42325) + +2020-07-18 Eli Zaretskii + + Update systems using GnuTLS certificate files + + * lisp/net/gnutls.el (gnutls-trustfiles): Update the names of the + systems in the comments. Reported by Richard Stallman + in + https://lists.gnu.org/archive/html/emacs-devel/2020-07/msg00455.html. + +2020-07-17 Eli Zaretskii + + Improve documentation of 'kill-emacs' + + * doc/lispref/os.texi (Killing Emacs): + * src/emacs.c (Fkill_emacs): Document what non-integer, non-string + argument to 'kill-emacs' means. (Bug#42400) + +2020-07-17 Eli Zaretskii + + Improve documentation of 'display-raw-bytes-as-hex' + + * doc/emacs/display.texi (Text Display): Mention + 'display-raw-bytes-as-hex'. (Bug#42384) + +2020-07-17 Robert Pluim + + Correct descriptions of init file + + These still referred to XDG as being preferred. + + * doc/emacs/custom.texi (Init File): Correct description of init + file preference order (Bug#42388). + + * doc/emacs/custom.texi (Find Init): Correct description of + default init-file. + +2020-07-16 Eli Zaretskii + + Fix interrupt-process on MS-Windows + + * src/w32proc.c (sys_kill): Test the status of the left Ctrl key + for the purpose of restoring it after simulating Ctrl-C. This + avoids leaving the left Ctrl key status in depressed state when + the user actually pressed the right Ctrl key. (Bug#42350) + +2020-07-11 Andrea Corallo + + Revert "* doc/misc/flymake.texi (An annotated example backend): Typo fix." + + This reverts commit b1ad0380d2372b8df35ff603b8918d22c27ad964. + +2020-07-11 Mattias Engdegård + + Correct 'concat' manual entry (bug#42296) + + * doc/lispref/strings.texi (Creating Strings): 'concat' does not + necessarily return a newly allocated string. This has been the case + at least since 1997 (Emacs 20.3). + +2020-07-11 Andrea Corallo + + * doc/misc/flymake.texi (An annotated example backend): Typo fix. + +2020-07-11 Eli Zaretskii + + Add commentary in gtkutil.c + + * src/gtkutil.c: Add a comment regarding the incompatibilities + vis-a-vis GTK. Suggested by Richard Stallman . + +2020-07-10 Basil L. Contovounesios + + Consistently stylize eldoc as ElDoc in prose + + * doc/emacs/custom.texi (Specifying File Variables): + * doc/emacs/modes.texi (Major Modes): + * doc/emacs/programs.texi (Lisp Doc): + * etc/NEWS.22: + * etc/NEWS.23: + * lisp/progmodes/python.el: + (python-eldoc-function): + * test/lisp/progmodes/python-tests.el: Consistently capitalize eldoc + as ElDoc rather than Eldoc. + +2020-07-09 Eli Zaretskii + + Improve documentation of "C-u C-x =" + + * doc/emacs/mule.texi (International Chars): Mention the + composition information displayed by "C-u C-x =". (Bug#42256) + +2020-07-09 Paul Eggert + + Mention floating rounding issues + + * doc/lispref/numbers.texi (Float Basics): Mention floating-point + rounding issues uncovered by the discussion in Bug#42417. + +2020-07-09 Mattias Engdegård + + Repair global-auto-revert-ignore-modes (bug#42271) + + Reported by Gustavo Tavares Cabral. + + * lisp/autorevert.el (auto-revert--global-add-current-buffer): Fix typo. + +2020-07-08 Eli Zaretskii + + One more improvement of left/right-fringe display spec docs + + * doc/lispref/display.texi (Fringe Bitmaps): Yet another + clarification of how to use FACE in left/right-fringe display + spec. + +2020-07-07 Eli Zaretskii + + Another clarification of left/right-fringe display spec + + * doc/lispref/display.texi (Fringe Bitmaps): More accurate + description of what FACE means in the left/right-fringe display + spec. + +2020-07-07 Eli Zaretskii + + Avoid infloop in 'format-mode-line' + + * src/xdisp.c (decode_mode_spec): Don't use W->start if it is + outside of the buffer's accessible region. (Bug#42220) + +2020-07-05 Eli Zaretskii + + Clarify the documentation of 'left/right-fringe' display spec + + * doc/lispref/display.texi (Other Display Specs, Fringe Bitmaps): + Clarify how the optional FACE parameter of the left-fringe and + right-fringe display spec is used. Reported by Gregory Heytings + . + +2020-07-04 Eli Zaretskii + + Minor improvement in ELisp manual + + * doc/lispref/frames.texi (Position Parameters): Clarify the + description of the 'above' frame parameter. (Bug#42154) + +2020-07-02 Michael Albinus + + * doc/misc/tramp.texi (Customizing Methods): Fix typo. + +2020-06-29 Philipp Stephani + + Fix undefined behavior in json.c (Bug#42113) + + * src/json.c (lisp_to_json_toplevel_1, Fjson_parse_string): Check + whether input strings are actually strings. + + * test/src/json-tests.el (json-parse-string/wrong-type) + (json-serialize/wrong-hash-key-type): New regression tests. + +2020-06-28 Richard Kim + + Fix ACTION argument of 'display-buffer' call in gud.el + + * lisp/progmodes/gud.el (gud-common-init): The ACTION argument of + 'display-buffer' should be a list of list of functions. (Bug#41888) + +2020-06-27 Eli Zaretskii + + * src/keyboard.c (Fclear_this_command_keys): Doc fix. + +2020-06-27 Eli Zaretskii + + Improve do string of 'man' + + * lisp/man.el (man): Mention the need to use C-q for quoting the + SPC character in the man-page input. (Bug#41859) + +2020-06-26 Eli Zaretskii + + Fix posn-at-point at beginning of a display string + + * src/xdisp.c (pos_visible_p): Account for the line-number width + when the display string at CHARPOS ends in a newline. (Bug#42039) + +2020-06-26 Eli Zaretskii + + Improve documentation of Info node movement commands + + * lisp/info.el (Info-next, Info-prev, Info-forward-node) + (Info-backward-node): More detailed descriptions of what each + commands does with respect to child and parent nodes. (Bug#42050) + +2020-06-22 Phillip Lord + + Add Jansson dependency to Windows Build + + * admin/nt/dist-build/build-dep-zips.py: Add dependency + +2020-06-22 Richard Copley (tiny change) + + Unbreak 'reverse-region' + + * lisp/sort.el (reverse-region): Unbreak the function. It was + broken by a fix for bug#39376. + +2020-06-22 Basil L. Contovounesios + + Fix typos and markup in fill column indicator docs + + * doc/emacs/display.texi (Displaying Boundaries): Fix typos and + Texinfo markup. + +2020-06-20 Stephen Berman + + Avoid crashes in 'defconst' + + * src/eval.c (Fdefconst): Verify that SYMBOL is a known symbol. + (Bug#41817) + +2020-06-20 Richard Stallman + + Fix text about Lisp archives in the Emacs FQ + + * doc/misc/efaq.texi (Packages that do not come with Emacs): Warn + about using Lisp archives other than GNU ELPA. + +2020-06-20 Eli Zaretskii + + Don't use 'cl' functions in ELisp manual's examples + + * doc/lispref/control.texi (pcase Macro): Use 'cl-evenp' instead + of 'evenp'. (Bug#41947) + +2020-06-17 Basil L. Contovounesios + + Fix some Texinfo markup + + * doc/misc/gnus-faq.texi (FAQ 3-11): + * doc/emacs/frames.texi (Tab Bars): Consistently use @var with + lower-case metasyntactic variables and @minus instead of a dash. + (Text-Only Mouse): + * doc/emacs/files.texi (Auto Revert): + * doc/emacs/misc.texi (emacsclient Options) + (Embedded WebKit Widgets): + * doc/lispref/control.texi (pcase Macro): + * doc/lispref/debugging.texi (Backtraces): + * doc/lispref/files.texi (Truenames): + * doc/lispref/frames.texi (Management Parameters): + * doc/lispref/os.texi (Time Calculations): + * doc/lispref/text.texi (Parsing JSON): + * doc/misc/efaq-w32.texi (Other versions of Emacs, Debugging) + (Swap Caps NT, Printing, Bash, Developing with Emacs): + * doc/misc/efaq.texi (New in Emacs 25): + * doc/misc/emacs-gnutls.texi (Help For Users): + * doc/misc/message.texi (Using S/MIME, Passphrase caching): + * test/manual/etags/tex-src/gzip.texi (Overview): Use @. when a + sentence in the middle of a paragraph ends with an upper-case letter + as per "(texinfo) Ending a Sentence". + +2020-06-17 Basil L. Contovounesios + + Fix recentf typo in Emacs manual + + * doc/emacs/files.texi (File Conveniences): Fix misspelling of + recentf-list. + +2020-06-17 Juri Linkov + + Rename default function to next-error-buffer-unnavigated-current (bug#40919) + + * lisp/simple.el (next-error-find-buffer-function): Rename default function + from next-error-no-navigation-try-current + to next-error-buffer-unnavigated-current. + +2020-06-17 Juri Linkov + + * lisp/image-mode.el (image-toggle-display-image): Fix fit of rotated images. + + When fitting rotated image to width and height, swap width and height + when changing orientation between portrait and landscape (bug#41886). + +2020-06-16 Michael Albinus + + * doc/misc/tramp.texi (Predefined connection information): Add "tmpdir". + +2020-06-13 João Távora + + Delete, don't kill, dir dir fragments in icomplete-fido-backward-updir + + Reported by: Andrew Schwartzmeyer + + * lisp/icomplete.el (icomplete-fido-backward-updir): Don't save + dir fragments to kill ring. + +2020-06-13 Basil L. Contovounesios + + Revert markup change in with-coding-priority docs + + This partially reverts commit fc759eb9b3 + "Fix with-coding-priority markup in Elisp manual" + of 2019-10-13T15:36:02Z!contovob@tcd.ie. + + For discussion, see the following thread: + https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00550.html + https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00473.html + + * doc/lispref/nonascii.texi (Specifying Coding Systems): Use more + specific cross-reference to progn even if info.el displays it + suboptimally. + +2020-06-10 Juri Linkov + + * lisp/emulation/cua-rect.el (cua--rectangle-region-insert): New function. + + Add cua--insert-rectangle around region-insert-function (bug#41440). + +2020-06-09 Juri Linkov + + * lisp/simple.el (shell-command-on-region): Fix docstring. + + * lisp/simple.el (shell-command-on-region): Mention REGION-NONCONTIGUOUS-P + in docstring (bug#41440) + + * etc/NEWS: Better example for 'windmove-display-default-keybindings'. + +2020-06-08 Basil L. Contovounesios + + Clean up D-Bus documentation (bug#41744) + + * doc/lispref/errors.texi (Standard Errors): The error symbol + dbus-error is defined even when Emacs is built without D-Bus. + + * doc/misc/dbus.texi (Bus Names, Introspection) + (Nodes and Interfaces, Methods and Signal) + (Properties and Annotations, Arguments and Signatures) + (Synchronous Methods, Receiving Method Calls, Signals) + (Alternative Buses, Errors and Events): Clarify wording. Fix + indentation of and simplify examples where possible. Improve + Texinfo markup and cross-referencing where possible. + (Type Conversion): Ditto. Remove mentions of Emacs' fixnum range + now that we have bignums. + + * lisp/net/dbus.el (dbus-return-values-table) + (dbus-call-method-asynchronously, dbus-send-signal) + (dbus-register-signal, dbus-register-method) + (dbus-string-to-byte-array, dbus-byte-array-to-string) + (dbus-escape-as-identifier, dbus-check-event, dbus-event-bus-name) + (dbus-event-message-type, dbus-event-serial-number) + (dbus-event-service-name, dbus-event-path-name) + (dbus-event-interface-name, dbus-event-member-name) + (dbus-list-activatable-names, dbus-list-queued-owners, dbus-ping) + (dbus-introspect-get-interface-names, dbus-introspect-get-interface) + (dbus-introspect-get-method, dbus-introspect-get-signal) + (dbus-introspect-get-property, dbus-introspect-get-annotation-names) + (dbus-introspect-get-annotation, dbus-introspect-get-argument-names) + (dbus-introspect-get-argument, dbus-introspect-get-signature) + (dbus-set-property, dbus-register-property) + (dbus-get-all-managed-objects, dbus-init-bus): Clarify docstring and + improve formatting where possible. + (dbus-call-method): Ditto. Remove mentions of Emacs' fixnum range + now that we have bignums. + +2020-06-08 Juri Linkov + + * lisp/image-mode.el (image-transform-original): New command (bug#41222). + + (image-mode-map): Bind it to "so" and add to menu. + +2020-06-08 Juri Linkov + + Move tab-bar and tab-line faces to faces.el (part of bug#41200) + + These are basic faces, so they need to be defined in + faces.el, otherwise (get 'tab-line 'face) returns 0. + + * lisp/faces.el (tab-bar, tab-line): Move faces here + from tab-bar.el and tab-line.el. + + * lisp/tab-bar.el (tab-bar): Move face to faces.el. + (tab-bar-faces): Add '((tab-bar custom-face)) + to the second arg MEMBERS of 'defgroup'. + + * lisp/tab-line.el (tab-line): Move face to faces.el. + (tab-line-faces): Add '((tab-line custom-face)) + to the second arg MEMBERS of 'defgroup'. + +2020-06-07 Basil L. Contovounesios + + Fix typo in "(elisp) Type Keywords" + + * doc/lispref/customize.texi (Type Keywords): Fix typo of 'choice' + composite type. (Bug#41749) + +2020-06-07 Tassilo Horn + + Gnus nnir-summary-line-format has no effect + + * lisp/gnus/nnir.el (nnir-mode): Update summary format specs if + nnir-summary-line-format is set and different from + gnus-summary-line-format. + (nnir-open-server): Run nnir-mode in gnus-summary-generate-hook + instead of gnus-summary-prepared-hook. + +2020-06-06 Eli Zaretskii + + Improve documentation of 'window-text-pixel-size' + + * doc/lispref/display.texi (Size of Displayed Text): Clarify the + description of 'window-text-pixel-size'. + +2020-06-06 Eli Zaretskii + + * src/xdisp.c (Fwindow_text_pixel_size): Doc fix. (Bug#41737) + +2020-06-06 Basil L. Contovounesios + + Minor improvements to EDE and EIEIO manuals + + For discussion, see the following threads: + https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html + https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00099.html + + * doc/misc/ede.texi (ede-generic-project): Clean up example. + * doc/misc/eieio.texi (Accessing Slots): Document slot-value as a + generalized variable and set-slot-value as obsolete. + (Predicates): Fix typo. + (Introspection): Document eieio-class-slots in place of the obsolete + object-slots. + +2020-06-06 João Távora + + Have Fido mode also imitate Ido mode in ignore-case options + + Suggested by Sean Whitton . + + * lisp/icomplete.el (icomplete--fido-mode-setup): Set ignore-case + options. + +2020-06-05 Basil L. Contovounesios + + Update package-menu-quick-help + + * lisp/emacs-lisp/package.el (package--quick-help-keys): Filtering + is now bound to the prefix '/', not the key 'f' (bug#41721). + Advertise only the standard 'g' binding now that both it and 'r' are + bound to revert-buffer (bug#35504). + (package--prettify-quick-help-key): Avoid modifying string literals. + (package-menu-filter): Reintroduce as obsolete alias of + package-menu-filter-by-keyword for backward + compatibility (bug#36981). + +2020-06-05 Eli Zaretskii + + Improve documentation of 'sort-subr' + + * doc/lispref/text.texi (Sorting): Clarify the meaning and use of + PREDICATE argument to 'sort-subr'. (Bug#41706) + +2020-06-05 Andrii Kolomoiets + + Update Ukrainian transliteration + + * lisp/language/cyril-util.el (standard-display-cyrillic-translit): + Add missing letter "ґ"; tweak letter "г". (Bug#41683) + +2020-06-05 Eli Zaretskii + + Fix Arabic shaping when eww/shr fill the text to be rendered + + * src/hbfont.c (hbfont_shape): Don't use DIRECTION if the current + buffer has bidi reordering disabled. (Bug#41005) + +2020-06-03 Basil L. Contovounesios + + Silence some byte-compiler warnings in tests + + * test/lisp/emacs-lisp/cl-generic-tests.el: + * test/lisp/progmodes/elisp-mode-tests.el: Declare functions + referred to within macroexpansions. + (xref-elisp-overloadable-no-default) + (xref-elisp-overloadable-co-located-default) + (xref-elisp-overloadable-separate-default): Prefix unused arguments + with underscore. + + * test/lisp/international/ccl-tests.el: + * test/lisp/wdired-tests.el: + * test/lisp/emacs-lisp/package-tests.el: Declare functions used. + (package-test-update-archives, package-test-signed): Use + revert-buffer in place of its obsolete alias package-menu-refresh. + + * test/lisp/eshell/eshell-tests.el: + * test/lisp/mail/footnote-tests.el: + * test/src/buffer-tests.el: Require dependencies used. + + * test/lisp/image/exif-tests.el: Remove unneeded (require 'seq). + (test-exit-direct-ascii-value): Actually perform the test. + * test/lisp/progmodes/sql-tests.el (sql-test-add-existing-product): + Fix typo. + + * test/lisp/simple-tests.el (with-shell-command-dont-erase-buffer): + * test/src/data-tests.el (test-bool-vector-bv-from-hex-string) + (test-bool-vector-apply-mock-op): Remove unused local variables. + +2020-06-03 Basil L. Contovounesios + + * test/lisp/battery-tests.el: New file. + +2020-06-02 Basil L. Contovounesios + + Improve format-spec documentation (bug#41571) + + * doc/lispref/text.texi (Interpolated Strings): Move from here... + * doc/lispref/strings.texi (Custom Format Strings): ...to here, + renaming the node and clarifying the documentation. + (Formatting Strings): End node with sentence referring to the next + one. + * lisp/format-spec.el (format-spec): Clarify docstring. + +2020-06-01 Eli Zaretskii + + Don't call 'mbrtowc' on WINDOWSNT + + * src/emacs.c (using_utf8): Don't call 'mbrtowc' on WINDOWSNT + systems, as it's not available on Windows 9X. + +2020-06-01 João Távora + + * doc/emacs/buffers.texi (Icomplete): Mention icomplete-minibuffer-setup-hook. + +2020-06-01 Paul Eggert + + Be more aggressive in marking objects during GC + + Simplified version of a patch from Pip Cet (Bug#41321#299). + * src/alloc.c (maybe_lisp_pointer): Remove. All uses removed. + (mark_memory): Also look at the pointer offset by ‘lispsym’, + for symbols. + +2020-05-31 Alan Mackenzie + + Fix bug #41618 "(byte-compile 'foo) errors when foo is a macro." + + * lisp/emacs-lisp/bytecomp.el (byte-compile): Disentangle the eval of the + final form from the pushing of 'macro onto it, doing the former first. + +2020-05-31 Eli Zaretskii + + Avoid crashes due to bidi cache being reset during redisplay + + If automatic character composition triggers GC, and + 'garbage-collection-messages' are turned on, we could have the + bidi cache reset while processing RTL text, which would then + consistently crash. + * src/xdisp.c (display_echo_area_1): Protect the bidi cache + against changes inside 'try_window'. + +2020-05-31 Juri Linkov + + * lisp/tab-bar.el (switch-to-buffer-other-tab): Normalize buffer. + + * lisp/tab-bar.el (switch-to-buffer-other-tab): Use + 'window-normalize-buffer-to-switch-to' on 'buffer-or-name', + like does 'pop-to-buffer' used by 'switch-to-buffer-other-frame', + instead of raising the error "Invalid buffer" on a non-existent buffer name. + +2020-05-30 Eli Zaretskii + + Fix mingw.org's MinGW GCC 9 warning about 'execve' + + * nt/inc/ms-w32.h (execve) [__GNUC__ > 9]: Provide a different + prototype for mingw.org's MinGW as well, to match the GCC builtin. + +2020-05-28 Glenn Morris + + Tiny texinfo markup fixes + + * doc/lispref/edebug.texi (Edebug Views): + * doc/lispref/loading.texi (Library Search): + * doc/lispref/os.texi (User Identification): Markup fixes. + +2020-05-27 Dmitry Gutov + + Make next-error behavior a bit more flexible + + * lisp/simple.el (next-error-no-navigation-try-current): + Extract from the case #2 in next-error-find-buffer (bug#40919). + (next-error-find-buffer-function): Use it as the default. + +2020-05-27 Noam Postavsky + + * etc/NEWS.25: Belatedly announce upcase-dwim and downcase-dwim. + +2020-05-25 Eli Zaretskii + + Fix access to single-byte characters in buffer text + + * src/xdisp.c (get_visually_first_element) + (Fbidi_find_overridden_directionality): + * src/cmds.c (Fend_of_line): Use FETCH_BYTE instead of FETCH_CHAR, + and byte position instead of character position, to access + individual bytes of buffer text. This avoids producing invalid + characters and accessing wrong buffer positions. (Bug#41520) + +2020-05-25 Noam Postavsky + + Revert "Fix eshell-mode-map initialization" + + It makes eshell-return-exits-minibuffer permanently affect the + eshell-mode-map (Bug#41370). + + Do not merge to master, we will fix it properly there. + +2020-05-25 Matthias Meulien + + Fix tab-bar-tab-name-ellipsis initialization + + * lisp/tab-bar.el (tab-bar-tab-name-truncated): Evaluate displayable + character when generating tab name. + +2020-05-24 Basil L. Contovounesios + + Fix Elisp manual entry for format-spec + + * doc/lispref/text.texi (Interpolated Strings): Fix typos. Don't + document modifier for default space padding as it's redundant and + inconsistent with the docstring and implementation of format-spec. + +2020-05-24 Eli Zaretskii + + Fix rare assertion violations in 'etags' + + * lib-src/etags.c (pfnote): Instead of raising an assertion when + we get an empty tag name, return immediately. (Bug#41465) + + * test/manual/etags/ETAGS.good_1: + * test/manual/etags/ETAGS.good_2: + * test/manual/etags/ETAGS.good_3: + * test/manual/etags/ETAGS.good_4: + * test/manual/etags/ETAGS.good_5: + * test/manual/etags/ETAGS.good_6: Adapt to latest changes in + etags. + +2020-05-23 Stefan Monnier + + * lisp/subr.el (save-match-data): Clarify use in docstring + +2020-05-23 Eli Zaretskii + + Improve the documentation of setting up fontsets + + * doc/lispref/display.texi (Fontsets): Improve the accuracy of a + cross-reference to "Character Properties". + + * doc/emacs/mule.texi (Fontsets, Modifying Fontsets): Improve the + documentation of fontsets and how to modify them. + +2020-05-23 Eli Zaretskii + + * doc/emacs/killing.texi (Rectangles): Improve indexing. + +2020-05-23 Eli Zaretskii + + Fix accessing files on networked drives on MS-Windows + + * src/w32.c (acl_get_file): Set errno to ENOTSUP if + get_file_security returns ERROR_NOT_SUPPORTED. (Bug#41463) + +2020-05-22 Alan Mackenzie + + CC Mode: Fix bug #39972, by fixing c-display-defun-name for nested defuns + + * lisp/progmodes/cc-mode.el (c-common-init): Build + add-log-current-defun-function out of c-defun-name-and-limits instead of the + former c-defun-name. + +2020-05-21 Paul Eggert + + Redo RCS Id for pdumper + + * lisp/version.el: Don’t put an RCS Id style string into the + executable via purecopy, as this does not work with the pdumper. + * src/emacs.c (RCS_Id): New constant, for 'ident'. + + (cherry picked from commit 3d1bcfba5e21b29be8669aa2a8f27b344c9e02fd) + +2020-05-21 Stefan Kangas + + Second attempt at improving indexing in control.texi + + * doc/lispref/control.texi (Processing of Errors): Improve indexing by + adding the word form "handle" in addition to "handling". With thanks + to Eli Zaretskii. + +2020-05-19 Stefan Kangas + + * doc/lispref/control.texi (Processing of Errors): Improve indexing. + +2020-05-17 Paul Eggert + + Minor fixups for mutability doc + + * doc/lispref/objects.texi (Mutability): Minor fixups in + response to a comment by Dmitry Gutov (Bug#40671#477). + +2020-05-17 Paul Eggert + + Don’t use “constant” for values you shouldn’t change + + Inspired by patch proposed by Dmitry Gutov (Bug#40671#393) + and by further comments by him and by Michael Heerdegen + in the same bug report. + * doc/lispintro/emacs-lisp-intro.texi (setcar): + Don’t push mutability here. + * doc/lispref/eval.texi (Self-Evaluating Forms, Quoting) + (Backquote): + * doc/lispref/lists.texi (Modifying Lists): + * doc/lispref/objects.texi (Lisp Data Types, Mutability): + * doc/lispref/sequences.texi (Array Functions, Vectors): + * doc/lispref/strings.texi (String Basics, Modifying Strings): + Don’t use the word “constant” to describe all values that + a program should not change. + * doc/lispref/objects.texi (Mutability): + Rename from “Constants and Mutability”. All uses changed. + In a footnote, contrast the Emacs behavior with that of Common + Lisp, Python, etc. for clarity, and say the goal is to be nicer. + +2020-05-16 Eli Zaretskii + + Improve documentation of manually installing Lisp packages + + * doc/emacs/building.texi (Lisp Libraries): Describe how to + manually load packages in the init file. Mention the 'site-lisp' + subdirectory of the default 'load-path'. + + * doc/emacs/package.texi (Packages): Describe manual installation + of ELisp packages. Suggested by Jean-Christophe Helary + . + +2020-05-16 Eli Zaretskii + + Reflect the emacs-devel ELPA/MELPA dispute in FAQ + + * doc/misc/efaq.texi (Packages that do not come with Emacs): Warn + that some MELPA packages may require non-free software. + +2020-05-15 Tassilo Horn + + Consider face inheritance when checking region face background. + + Some themes (like dracula) make the region face inherit from some + other face. If the background color of the region was inherited, + `indicate-copied-region' did the switch-point-and-mark-twice dance + which is not visible in case the region is highlighted. It just + looked like Emacs would hang for a second after M-w. + + * lisp/simple.el (indicate-copied-region): Consider face inheritance + when checking region face background. + +2020-05-15 Leo Vivier + + Fix dired default file operation (bug#41261) + + * lisp/dired-aux.el (dired-dwim-target-directories): Restore + pre-emacs-27 behavior of 'dired-dwim-target'. + +2020-05-14 Philipp Stephani + + Fix documentation related to 'command-switch-alist'. + + While there, add a unit test to verify the behavior. + + * doc/lispref/os.texi (Command-Line Arguments): Fix documentation: the + option string in 'command-switch-alist' does include leading hyphens. + Also mention that 'command-switch-alist' parsing ignores equals signs + in options. + + * test/lisp/startup-tests.el + (startup-tests/command-switch-alist): New unit test. + +2020-05-13 Simon Lang (tiny change) + + Improve ediff readability in misterioso theme (Bug#41221) + + * etc/themes/misterioso-theme.el: Add ediff faces. + +2020-05-13 Clément Pit-Claudel + + Fix a crash in handle_display_spec + + * src/xdisp.c (handle_display_spec): Check that the cdr of the + disable-eval spec is a cons before taking its car. (Bug#41232) + +2020-05-13 Martin Rudalics + + In x_hide_tip reset tip_last_frame for GTK+ tooltips only (Bug#41200) + + * src/xfns.c (x_hide_tip): Reset tip_last_frame only when + using GTK+ system tooltips (Bug#41200). + +2020-05-12 João Távora + + Fix docstring of flymake-make-diagnostic (bug#40351) + + * lisp/progmodes/flymake.el (flymake-make-diagnostic): Fix docstring + +2020-05-10 Paul Eggert + + Go back to “Bahá’í” + + * doc/emacs/calendar.texi (Holidays): Revert previous change, as + bahai.org spells it “Bahá’í” (with U+2019 RIGHT SINGLE QUOTATION + MARK) and that’s good enough for us. + +2020-05-10 Eli Zaretskii + + * lisp/dired.el (dired-toggle-marks): Doc fix. (Bug#41097) + +2020-05-09 Philipp Stephani + + Small fix for type of 'display-fill-column-indicator-character' + + * lisp/cus-start.el (standard): Don't mark t as safe file-local value + for 'display-fill-column-indicator-character', as that value isn't + allowed. + +2020-05-09 Eli Zaretskii + + Fix customization of 'display-fill-column-indicator-character' + + * lisp/cus-start.el (display-fill-column-indicator-character): Fix + the customization form. (Bug#41145) + +2020-05-09 Philipp Stephani + + Refer to fill column indicator Info node in some places. + + * src/xdisp.c (syms_of_xdisp): Add reference to manual in + documentation strings for variables related to fill column indicators. + + * lisp/display-fill-column-indicator.el (display-fill-column-indicator) + (display-fill-column-indicator-mode): Add reference to manual. + +2020-05-09 Martin Rudalics + + Fix GTK's Tool Bar menu radio buttons + + * lisp/menu-bar.el (menu-bar-showhide-tool-bar-menu): Fix typo + that makes the radio buttons pretend that the tool bar is always + shown on the left side of the frame. + +2020-05-09 Eli Zaretskii + + Minor clarifications in NEWS + + * etc/NEWS: Tell how to revert to previous behaviors regarding + displaying messages when the minibuffer is active. (Bug#41087) + +2020-05-08 Philipp Stephani + + Improve documentation of 'with-suppressed-warnings'. + + * lisp/emacs-lisp/byte-run.el (with-suppressed-warnings): Refer to + 'byte-compile-warnings' instead of 'byte-compile-warning-types', as + only the former variable documents the available warning types. + +2020-05-08 Eli Zaretskii + + Fix a typo in a comment + + * lisp/display-fill-column-indicator.el: Fix a typo in a comment. + Suggested by david s . + +2020-05-08 Eli Zaretskii + + Improve documentation of Hi Lock mode + + * lisp/hi-lock.el (hi-lock-mode, hi-lock-face-buffer) + (hi-lock-face-phrase-buffer, hi-lock-face-symbol-at-point): + Clarify when 'hi-lock-mode' will use Font Lock and when it will + use overlays. (Bug#41124) + +2020-05-08 Eli Zaretskii + + Fix typos in the Emacs user manual + + * doc/emacs/calendar.texi (Holidays): Fix usage of non-ASCII + accents. + * doc/emacs/custom.texi (Init Rebinding): Fix a cross-reference. + * doc/emacs/dired.texi (Operating on Files): Make the + cross-reference to "VC Delete/Rename" be to a different manual in + the printed version. (Bug#41100) + +2020-05-08 Björn Holby (tiny change) + + Fix references to Speedbar in VHDL mode + + * lisp/progmodes/vhdl-mode.el (vhdl-speedbar-initialize): Update + references to Speedbar variables. (Bug#41084) + +2020-05-08 Eli Zaretskii + + Fix handling of FROM = t and TO = t by 'window-text-pixel-size' + + * src/xdisp.c (Fwindow_text_pixel_size): Use byte position for + accessing buffer text, not character positions. (Bug#41125) + +2020-05-06 Eli Zaretskii + + * doc/emacs/modes.texi (Major Modes): Fix quoting. (Bug#41110) + +2020-05-06 Noam Postavsky + + Fix docstring quoting + + * lisp/gnus/message.el (message-sendmail-extra-arguments): Fix + escaping of quotes in docstring. + +2020-05-06 Noam Postavsky + + Revert "cl-loop: Calculate the array length just once" + + Don't merge to master. This is a safe-for-release fix for Bug#40727. + +2020-05-06 Noam Postavsky + + Revert "cl-loop: Add missing guard condition" + + Don't merge to master. This is a safe-for-release fix for Bug#40727. + +2020-05-06 Noam Postavsky + + Revert "Refix conditional step clauses in cl-loop" + + Don't merge to master. This is a safe-for-release fix for Bug#40727. + +2020-05-05 Eli Zaretskii + + Improve "Help Summary" section in user manual + + * doc/emacs/help.texi (Help Summary): Add cross-references to + sections with details of each Help command. + +2020-05-05 Stefan Kangas + + Clarify message-sendmail-extra-arguments docstring + + * lisp/gnus/message.el (message-sendmail-extra-arguments): Clarify + docstring. + +2020-05-05 Philipp Stephani + + * src/editfns.c (Fformat): Small documentation fix. + +2020-05-04 Alan Mackenzie + + Remove calls to non-existent functions from edebug.el. + + Do not merge to master. + + *lisp/emacs-lisp/edebug.el (edebug--display-1) + (edebug-toggle-disable-breakpoint): Remove calls to + edebug--overlay-breakpoints and edebug--overlay-breakpoints-removed which had + been overlooked in a recent changed to edebug. + +2020-05-04 Dmitry Gutov + + Honor search-upper-case + + * lisp/fileloop.el (fileloop--case-fold): + Extract from existing code. Honor search-upper-case (bug#40940). + (fileloop-initialize-replace, fileloop-initialize-search): Use it. + Update the docstring. + +2020-05-04 Basil L. Contovounesios + + Fix eww-follow-link on URLs with #target + + * lisp/net/eww.el (eww-display-html): Ensure shr-target-id is set as + callers depend on this (bug#28441, bug#40532). + +2020-05-04 Juri Linkov + + Revert part of recent commit 85544f8ef5 (bug#40808) + + * lisp/isearch.el (isearch-lazy-highlight-search): Remove recent fix of + lazy-highlighting of hidden matches. In emacs-27 leave only the fix for + lazy-counting of hidden matches when isearch-lazy-count is non-nil. + +2020-05-03 Stefan Kangas + + Improve doc strings of makunbound and fmakunbound + + * src/data.c (Fmakunbound, Ffmakunbound): Improve doc + strings. (Bug#41026) + +2020-05-03 Alan Mackenzie + + Revert "Mark breakpoints in edebug with highlights". This fixes bug #40992 + + Do not merge to master. + + This reverts commit e8b3a15cb6ff187ce08afcb43bd9a0b7907268ca. + +2020-05-02 Paul Eggert + + Make memq etc. examples more like they were + + Problem reported by Štěpán Němec in: + https://lists.gnu.org/r/emacs-devel/2020-05/msg00130.html + * doc/lispref/lists.texi (Sets And Lists, Association Lists): + Revert examples to be more like the way they were, using + self-evaluating expressions. Be more consistent about listing + unspecified results. + +2020-05-02 Eli Zaretskii + + Document effect of 'search-upper-case' on replacement commands + + * doc/emacs/search.texi (Replacement and Lax Matches): Document + the role of 'search-upper-case' in replacement commands. + (Lax Search): Document the value 'not-yanks' of + 'search-upper-case' where the variable itself is documented. + + * lisp/replace.el (query-replace-regexp, query-replace): Mention + 'search-upper-case' and its effect in doc strings. (Bug#40940) + +2020-05-01 Eli Zaretskii + + * lisp/desktop.el (desktop-save): Doc fix. (Bug#41007) + +2020-04-30 Stefan Kangas + + Recommend to avoid unnecessary abbreviations in doc + + * doc/lispref/tips.texi (Documentation Tips): Recommend to avoid + unnecessary abbreviations. (Bug#40011) + +2020-04-30 Eli Zaretskii + + Revert "Fix calculator division truncation (bug#40892)" + + This reverts commit 82140c510c4d27e639b4bca1e9bf158f0f66c375. + (Bug#40892) + +2020-04-30 Mattias Engdegård + + Fix calculator division truncation (bug#40892) + + * lisp/calculator.el (calculator-string-to-number): Convert decimal + numbers input to float, fixing a regression introduced in f248292ede. + Reported by Aitor Soroa. + +2020-04-29 Dmitry Gutov + + Expand file name for remote dirs as well + + * lisp/progmodes/project.el (project--files-in-directory): + Expand file name for remote dirs as well (bug#40940). + +2020-04-29 Eli Zaretskii + + Fix project.el commands in "transient" projects + + * lisp/progmodes/project.el (project--files-in-directory): Run + local DIR directory names through 'expand-file-name', so that "~/" + is expanded, in case the shell doesn't or the shell's notion of + the home directory is different from that of Emacs. (Bug#40940) + +2020-04-29 Eli Zaretskii + + Make sure alist-related functions say so in their doc + + * src/fns.c (Fassq, assq_no_quit, Fassoc, assoc_no_quit, Frassq) + (Frassoc): Rename argument LIST to ALIST. Doc strings updated. + +2020-04-29 Eli Zaretskii + + * lisp/env.el (substitute-env-vars): Doc fix. (Bug#40948) + +2020-04-29 Juri Linkov + + * lisp/isearch.el: Fix lazy-highlighting and lazy-counting of hidden matches + + * lisp/isearch.el (isearch-lazy-highlight-search): Let-bind + search-invisible to t when search-invisible is 'open' or when both + isearch-lazy-count and search-invisible are non-nil. (Bug#40808) + +2020-04-28 Eli Zaretskii + + Fix error in ERC when 'erc-server-coding-system' is customized + + * lisp/erc/erc-backend.el (erc-split-line): Handle the case where + 'erc-coding-system-for-target' returns a coding-system's symbol. + (Bug#40914) + +2020-04-28 Eli Zaretskii + + Avoid crashes on TTY frames with over-long compositions + + * src/term.c (encode_terminal_code): Each character from an + automatic composition is a multibyte character, so its multibyte + representation can take up to MAX_MULTIBYTE_LENGTH bytes. + Account for that when allocating storage for characters to be + encoded. (Bug#40913) + +2020-04-27 Stefan Kangas + + Fix typo in custom.texi + + * doc/emacs/custom.texi (Variables): Fix typo. Pointed out by + ej32u@protonmail.com. (Bug#40890) + +2020-04-27 Michael Albinus + + * test/lisp/simple-tests.el (with-shell-command-dont-erase-buffer): + + Use `shell-quote-argument' instead of quoting 'like this'. + +2020-04-27 Juri Linkov + + * lisp/image-mode.el (image-mode-map): Update menu items. + + * lisp/image-mode.el (image-mode-map): Move "Fit Image to Window (Best Fit)" + higher. Add "Zoom In" (image-increase-size), "Zoom Out" (image-decrease-size) + and "Rotate Clockwise" (image-rotate). Use name "Set Rotation..." + for image-transform-set-rotation. Swap "Next Image" and "Previous Image". + Swap "Next Frame" and "Previous Frame". + +2020-04-27 Juri Linkov + + Fix bugs in tab-bar and tab-line and mention remaining features in manual. + + * doc/emacs/frames.texi (Tab Bars): Mention tab-bar-new-tab-to, + tab-bar-close-last-tab-choice, tab-bar-close-tab-select, tab-undo, + tab-select, tab-bar-history-mode. + + * doc/emacs/windows.texi (Tab Line): Mention tab-line-tabs-function. + + * lisp/tab-bar.el (tab-bar-select-tab-modifiers): Mention + tab-bar-tab-hints in docstring. + (tab-bar-tab-hints): Mention tab-bar-select-tab-modifiers + in docstring. + (tab-bar-select-tab): Mention tab-bar-select-tab-modifiers + in docstring. + (tab-bar-switch-to-tab): Expand the docstring. + (tab-bar-new-tab-to): Fix bug in handling 'left' value. + (tab-bar-close-tab): Fix bug in handling 'left' value. + (tab-bar-undo-close-tab): Use funcall tab-bar-tabs-function + instead of direct call to tab-bar-tabs. + (tab-bar-history-back, tab-bar-history-forward): Add docstrings. + (tab-bar-history-mode): Expand docstring. + + * lisp/tab-line.el (tab-line-format): Fix bug for handling window + switching that should set face 'tab-line-tab-current'. + +2020-04-26 Michael Albinus + + Make shell-command tests fit for tcsh. + + * test/lisp/simple-tests.el (with-shell-command-dont-erase-buffer): + Fix debug spec. Format command to run also under tcsh. + (simple-tests-shell-command-39067) + (simple-tests-shell-command-dont-erase-buffer): Quote newline in string. + +2020-04-25 Paul Eggert + + Remove doc duplication + + * doc/lispref/objects.texi (Constants and Mutability): Remove + duplication. From a suggestion by Andreas Schwab (Bug#40671#150). + +2020-04-25 Michael Albinus + + * etc/NEWS: Fix inconsistencies. + +2020-04-25 Noam Postavsky + + Clarify semantics of trace-function CONTEXT argument + + * lisp/emacs-lisp/trace.el (trace-function-foreground): Explain that + CONTEXT should be a function, when called from Lisp. + +2020-04-25 Noam Postavsky + + Don't let a code literal get modified in mml parsing (Bug#39884) + + * lisp/gnus/mml.el (mml-parse-1): Make a fresh cons for the tag type, + because 'mml-generate-mime' destructively modifies it. + +2020-04-25 Eli Zaretskii + + * lisp/simple.el (kill-ring-save): Doc fix. (Bug#40797) + +2020-04-25 Clément Pit-Claudel + + Minor doc clarification regarding fringe bitmaps + + * doc/lispref/display.texi (Customizing Bitmaps): Add a note + regarding the order of bits being the opposite of that in + XBM images. (Bug#40784) + +2020-04-25 Eli Zaretskii + + Fix documentation of fringe bitmaps + + * doc/lispref/display.texi (Fringe Bitmaps): The 'empty-line' + fringe indicator _is_ used. (Bug#40799) + +2020-04-25 Paul Eggert + + Tweak mutability doc a bit more + + Inspired by a comment from Michael Heerdegen (Bug#40671#114). + * doc/lispref/objects.texi (Constants and Mutability): Tweak further. + +2020-04-24 Mattias Engdegård + + Calc: fix autoload errors (bug#40800) + + Reported by Hugo Daschbach. + + * lisp/calc/calc-ext.el (calc-init-extensions): + Remove calc-kbd-report key binding and autoload; it was removed in 2005. + calc-keypad-x-{left,right,middle}-click were renamed to + calc-keypad-{left,right,middle}-click in 2001; fix the autoloads. + calc-twos-complement-mode is a variable, not a function; remove the + autoload. + * lisp/calc/calc-prog.el: Remove commented-out calc-kbd-report. + +2020-04-24 Stefan Kangas + + Improve indexing of ELisp manual + + * doc/lispref/tips.texi (Tips): Add index entry 'best practices'. + +2020-04-24 Juri Linkov + + * lisp/image-mode.el (image-transform-resize): Remove FIXME comment. + + The user customizable variable 'image-auto-resize' is documented now + in the manual. + +2020-04-23 Tassilo Horn + + Improve the default value of 'doc-view-ghostscript-program'. + + * lisp/doc-view.el (doc-view-ghostscript-program): Use plain command + name instead of qualified name returned by executable-find (as + suggested by Stefan Monnier). (Bug#36357) + +2020-04-23 Juri Linkov + + Change doc-view-mode-map prefix key 's' to 'c'. + + * doc/emacs/misc.texi (DocView Slicing): Change prefix key 's' to 'c'. + + * lisp/doc-view.el (doc-view-mode-map): Change prefix key 's' to 'c'. + + * lisp/image-mode.el (image-mode-map): Add image-transform-set-scale to menu. + + * doc/emacs/files.texi (Image Mode): Describe commands + image-transform-fit-both, image-transform-set-scale, image-transform-reset. + + * etc/NEWS: Rearrange image sections. + + https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01315.html + +2020-04-22 Paul Eggert + + Improve wording about constants + + Thanks to Štěpán Němec and Drew Adams for reviews of recent changes. + * doc/lispref/eval.texi (Quoting): Give an example. + * doc/lispref/lists.texi (Association Lists): Simplify example code. + * doc/lispref/objects.texi (Lisp Data Types) + (Constants and Mutability): Clarify wording. + +2020-04-22 Tassilo Horn + + Improve the default value of 'doc-view-ghostscript-program'. + + * lisp/doc-view.el (doc-view-ghostscript-program): On Windows, try + gswin64c, gswin32c, rungs, and mgs. (Bug#36357) + +2020-04-21 Eli Zaretskii + + Minor improvements in documentation of the last change + + * etc/NEWS: + * doc/emacs/files.texi (Image Mode): Minor copyedits of last change. + +2020-04-21 Juri Linkov + + Add image-auto-resize defcustoms to image-mode.el + + * lisp/image-mode.el (image-auto-resize) + (image-auto-resize-on-window-resize): New defcustoms. + (image-mode-map): Bind "sb" to image-transform-fit-both. + (image-mode): Set image-transform-resize to image-auto-resize initially. + (image-mode--setup-mode): Add hook on image-auto-resize-on-window-resize. + (image-toggle-display-image): Check if image-transform-resize is t. + (image-transform-properties): Check image-transform-resize for nil and t. + (image-transform-fit-both): New command. + (image-transform-reset): Reset image-transform-resize to image-auto-resize. + + * doc/emacs/files.texi (Image Mode): Mention image-auto-resize and + image-auto-resize-on-window-resize. + + https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01160.html + +2020-04-21 Juri Linkov + + Improve the documentation of tab-bar and tab-line + + * doc/emacs/frames.texi (Tab Bars): Add xref to "Tab Line". + Document more commands. + + * doc/emacs/windows.texi (Windows): + * doc/emacs/emacs.texi (Top): Add "Tab Line" menu. + + * doc/emacs/windows.texi (Window Convenience): + Move tab-line documentation to new node "Tab Line". + (Tab Line): New node. + + * doc/emacs/glossary.texi (Glossary): + * doc/emacs/modes.texi (Minor Modes): + * doc/emacs/display.texi (Standard Faces): Add xref to "Tab Line". + +2020-04-20 Paul Eggert + + Tweak wording re constant variables + + * doc/lispref/objects.texi (Constants and Mutability): Tweak. + Problem reported by Michael Heerdegen (Bug#40693#44). + +2020-04-20 Paul Eggert + + Tweak setcar-related wording + + * doc/lispref/eval.texi (Self-Evaluating Forms): + Change “primitives” to “operations”. + Problem reported by Štěpán Němec in: + https://lists.gnu.org/r/emacs-devel/2020-04/msg01146.html + +2020-04-20 Juri Linkov + + * lisp/image-mode.el: Add prefix key 's' and reduce dependency on ImageMagick. + + * lisp/image-mode.el (image-mode-map): Regroup existing keybindings and + add new ones with the prefix key 's'. + Remove condition ":visible (eq image-type 'imagemagick)" from menu. + (image-toggle-display-image): Don't rotate again after user rotated manually. + (image-transform-check-size): Remove check for imagemagick. + (image-transform-properties, image-transform-set-scale) + (image-transform-fit-to-height, image-transform-fit-to-width) + (image-transform-set-rotation, image-transform-reset): + Remove mentions of ImageMagick from docstrings since these commands + now work without ImageMagick. + +2020-04-20 Juri Linkov + + * doc/emacs/windows.texi (Window Convenience): Decribe more windmove features. + + * doc/emacs/windows.texi (Window Convenience): Add descriptions of + windmove-display-default-keybindings, + windmove-delete-default-keybindings, + windmove-swap-states-in-direction. + + * etc/NEWS: Regroup to move some parts closer to related sections. + +2020-04-20 Paul Eggert + + Fix mutability glitches reported by Drew Adams + + See Bug#40693#32. + * doc/lispref/eval.texi (Self-Evaluating Forms, Backquote): + Say that these yield constant conses, vectors and strings, + not constant symbols. + * doc/lispref/objects.texi (Constants and Mutability): Say that an + attempt to modify a constant variable signals an error, instead of + saying that it has undefined behavior. + +2020-04-19 Paul Eggert + + Improve mutability doc + + See Eli Zaretskii’s suggestions (Bug#40671#33). + * doc/lispref/lists.texi (Setcar, Setcdr, Rearrangement): + * doc/lispref/sequences.texi (Sequence Functions) + (Array Functions): + Add commentary to examples. + * doc/lispref/lists.texi (Sets And Lists): + Revert change to delq example. + +2020-04-19 Paul Eggert + + Improve mutability documentation + + This change was inspired by comments from Štěpán Němec in: + https://lists.gnu.org/r/emacs-devel/2020-04/msg01063.html + * doc/lispref/objects.texi (Lisp Data Types): Mention mutability. + (Constants and mutability): New section. + * doc/lispintro/emacs-lisp-intro.texi (Lists diagrammed) + (Indent Tabs Mode): Improve wording. + * doc/lispref/eval.texi (Self-Evaluating Forms): + Say that they return constants. + * doc/lispref/lists.texi (Sets And Lists): + Fix memql mistake/confusion that I recently introduced. + +2020-04-19 Paul Eggert + + Document that quoting yields constants + + * doc/lispref/eval.texi (Quoting, Backquote): + Mention that quoted expressions yield a constant (Bug#40693). + +2020-04-19 Stefan Monnier + + * doc/lispref/keymaps.texi (Extended Menu Items, Easy Menu) <:key-sequence>: + + Clarify the documentation further + +2020-04-19 Mattias Engdegård + + Remove #' and function quoting from lambda forms in manual + + * doc/lispref/abbrevs.texi (Abbrev Expansion): + * doc/lispref/backups.texi (Reverting): + * doc/lispref/functions.texi (Mapping Functions): + * doc/lispref/help.texi (Accessing Documentation): + * doc/lispref/sequences.texi (Char-Tables): + * doc/lispref/syntax.texi (Categories): + * doc/lispref/text.texi (Sorting): + Remove function quoting from lambda in examples where it still occurs, + since examples should follow our best style and be consistent. + +2020-04-19 Stefan Monnier + + * src/regex-emacs.c (re_match_2_internal): Rework comment in last change + + Explain why we don't need to worry about Lisp modifying the buffer. + + * src/syntax.c (parse_sexp_propertize): Fix name in error message. + +2020-04-19 Juri Linkov + + Add new node "Image Mode" to Emacs Manual. + + * doc/emacs/dired.texi (Image-Dired): Add xref to "Image Mode". + + * doc/emacs/emacs.texi (Top): Add new node "Image Mode" to menu. + + * doc/emacs/files.texi (Files): Add new node "Image Mode" to menu. + (File Conveniences): Split part of node to new node "Image Mode". + + * doc/emacs/frames.texi (Mouse Commands): Add xref to "Image Mode". + + * doc/emacs/misc.texi (Embedded WebKit Widgets): Rename xref from + "File Conveniences" to "Image Mode". + +2020-04-18 Paul Eggert + + * doc/lispref/display.texi (Customizing Bitmaps): Fix typo. + +2020-04-18 Paul Eggert + + Document constant vs mutable objects better + + This patch builds on a suggested patch by Mattias Engdegård + and on further comments by Eli Zaretskii. + Original bug report by Kevin Vigouroux (Bug#40671). + * doc/lispintro/emacs-lisp-intro.texi (set & setq, Review) + (setcar, Lists diagrammed, Mail Aliases, Indent Tabs Mode): + setq is a special form, not a function or command. + * doc/lispintro/emacs-lisp-intro.texi (setcar): + * doc/lispref/lists.texi (Modifying Lists, Rearrangement): + * doc/lispref/sequences.texi (Sequence Functions) + (Array Functions, Vectors): + * doc/lispref/strings.texi (String Basics, Modifying Strings): + Mention mutable vs constant objects. + * doc/lispintro/emacs-lisp-intro.texi (setcar, setcdr) + (kill-new function, cons & search-fwd Review): + * doc/lispref/edebug.texi (Printing in Edebug): + * doc/lispref/keymaps.texi (Changing Key Bindings): + * doc/lispref/lists.texi (Setcar, Setcdr, Rearrangement) + (Sets And Lists, Association Lists, Plist Access): + * doc/lispref/sequences.texi (Sequence Functions) + (Array Functions): + * doc/lispref/strings.texi (Text Comparison): + Fix examples so that they do not try to change constants. + +2020-04-18 Eli Zaretskii + + Improve documentation of 'sort-lines' + + * lisp/sort.el (sort-lines): Clarify the interactive invocation. + (Bug#40697) + +2020-04-18 Štěpán Němec + + Mention 'spam-stat-process-directory-age' in the documentation + + I was at a loss as to why my attempt to set up spam-stat seemed to + have no effect, only to find (digging in the code) that it was + ignoring most of the sample files due to this undocumented variable. + + * doc/misc/gnus.texi (Creating a spam-stat dictionary): Document + the variable 'spam-stat-process-directory-age'. (bug#39780) + +2020-04-18 Eli Zaretskii + + Avoid crashes in regex-emacs.c due to GC + + * src/regex-emacs.c (re_match_2_internal): Prevent GC from + invalidating C pointers to buffer text. (Bug#40661) + +2020-04-18 Eli Zaretskii + + Fix "C-u M-!" when 'shell-command-dont-erase-buffer' is non-nil + + * lisp/simple.el (shell-command-dont-erase-buffer): Clarify the + effect of the various values in the doc string. + (shell-command-save-pos-or-erase, shell-command): Don't move or + push point if the output will go to the current buffer. + (Bug#40690) + (shell-command): Mention 'shell-command-dont-erase-buffer' in the + doc string. + + * test/lisp/simple-tests.el + (with-shell-command-dont-erase-buffer): Don't is shell quoting + 'like this', as it doesn't work on MS-Windows; quote "like this" + instead. + (simple-tests-shell-command-dont-erase-buffer): Adapt the test to + the new modus operandi. + + * doc/emacs/misc.texi (Single Shell): Document the effect of the + various values of 'shell-command-dont-erase-buffer'. + + * etc/NEWS: Expand and reword the entry regarding changes in + 'shell-command-dont-erase-buffer'. + +2020-04-17 Paul Eggert + + Fix cl-most-positive-float doc typo + + * doc/misc/cl.texi (Implementation Parameters): + Fix typo in documentation of cl-most-positive-float. + +2020-04-16 jakub-w (tiny change) + + Fix a typo in calculator.el + + * lisp/calculator.el (calculator-expt): Overflowing exponentiation + caused the function to return -1.0e+INF if the base was an odd, + negative number, no matter what the exponent was. + +2020-04-16 Amin Bandali + + * lisp/erc/erc.el: Add URL to the new ERC page on the Emacs site + +2020-04-16 Nicolas Petton + + Bump Emacs version to 27.0.91 + + * README: + * configure.ac: + * msdos/sed2v2.inp: + * nt/README.W32: Bump Emacs version. + +2020-04-16 João Távora + + Correct Fido-mode's backspacing of directories with spaces + + (Bug#40625) + + * lisp/icomplete.el (icomplete-fido-backward-updir): Use + zap-up-to-char. + +2020-04-15 João Távora + + Default completion-flex-nospace to nil + + By default, the flex completion style _does_ match spaces. + + (Bug#40625) + + * lisp/icomplete.el (icomplete--fido-mode-setup): Force + completion-flex-nospace to nil. + + * lisp/minibuffer.el (completion-flex-nospace): Default to nil. + +2020-04-15 Eli Zaretskii + + Improve an example in w32 FAQ + + * doc/misc/efaq-w32.texi (Font names): Modify the expression to + insert a lits of all installed fonts so as to avoid producing too + long lines. Suggested by ndame . + +2020-04-15 Stefan Monnier + + * lisp/htmlfontify.el (hfy-force-fontification): Fix bug#40642 + + Don't presume that `jit-lock-mode` is enabled. + Do not merge to `master`. + +2020-04-15 Nicolas Petton + + * admin/authors.el: Add an author alias. + +2020-04-15 YAMAMOTO Mitsuharu + + Limit RLIMIT_NOFILE to FD_SETSIZE on macOS + + * src/nsterm.m ([EmacsApp applicationDidFinishLaunching:]): Call + CoreFoundation functions that increase RLIMIT_NOFILE behind our back + during startup, and then set RLIMIT_NOFILE back to FD_SETSIZE to avoid + crashes in setup_process_coding_system (Bug#39164). + +2020-04-15 Martin Rudalics + + Fix Elisp manual entry on 'set-window-configuration' + + * doc/lispref/windows.texi (Window Configurations): Fix + description of 'set-window-configuration'. + +2020-04-14 Nicolas Petton + + * admin/authors.el: Add missing author aliases. + 2020-04-14 Mattias Engdegård Fix edge case errors in filename-matching regexps @@ -140538,7 +142382,7 @@ This file records repository revisions from commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to -commit 4acdd7fe58ae9f94102afeca67b0383141d597da (inclusive). +commit 56f958807c0b8ea8f45e3c088157ca144a1b1fac (inclusive). See ChangeLog.2 for earlier changes. ;; Local Variables: commit 4c7f6217daf2ff1075b287e905d0a8883a186019 Author: Nicolas Petton Date: Tue Jul 28 22:25:32 2020 +0200 * etc/AUTHORS: Update. diff --git a/etc/AUTHORS b/etc/AUTHORS index aff24a8d8d..2d4e073120 100644 --- a/etc/AUTHORS +++ b/etc/AUTHORS @@ -127,84 +127,18 @@ Albert L. Ting: changed gnus-group.el mail-hist.el Aleksei Gusev: changed progmodes/compile.el -Alexander Becher: changed vc-annotate.el +Alexandru Harsanyi: changed soap-client.el soap-inspect.el emacs3.py + vc-hooks.el vc.el xml.el -Alexander Gramiak: changed w32term.c xterm.c nsterm.m dispextern.h - xdisp.c frame.c image.c nsgui.h w32gui.h xfns.c frame.el termhooks.h - w32fns.c w32term.h faces.el nsterm.h xfaces.c xterm.h frame.h xfont.c - configure.ac and 64 other files - -Alexander Haeckel: changed getset.el - -Alexander Klimov: changed files.el calc-graph.el files.texi man.el rx.el - sendmail.el - -Alexander Kreuzer: changed nnrss.el - -Alexander Kuleshov: changed dns-mode.el files.texi image-mode.el - keyboard.c ld-script.el xdisp.c - -Alexander L. Belikoff: wrote erc.el - -Alexander Pohoyda: co-wrote mail/rmailmm.el -and changed rmailsum.el man.el rmail.el sendmail.el - -Alexander Shopov: changed code-pages.el - -Alexander Vorobiev: changed org-compat.el - -Alexander Zhuckov: changed ebrowse.c - -Alexandre Garreau: changed message.el - -Alexandre Julliard: wrote vc-git.el -and changed vc.el ewoc.el - -Alexandre Oliva: wrote gnus-mlspl.el -and changed unexelf.c format.el iris4d.h iris5d.h regex.c unexsgi.c - -Alexandre Veyrenc: changed fr-refcard.tex - -Alexandru Harsanyi: wrote soap-client.el soap-inspect.el -and changed emacs3.py vc-hooks.el vc.el xml.el - -Alex Branham: changed checkdoc.el bibtex.el em-rebind.el esh-util.el - indent.el js.el lpr.el message.el subr.el text.texi .dir-locals.el - auth-source-pass.el bug-reference.el comint.el conf-mode-tests.el - conf-mode.el dired-x.el dired.el ediff-diff.el ediff-help.el - ediff-hook.el and 41 other files - -Alex Coventry: changed files.el - -Alex Dunn: changed subr-tests.el subr.el - -Alexei Khlebnikov: changed autorevert.el vc-git.el - -Alex Gramiak: changed prolog.el terminal.c - -Alex Kosorukoff: changed org-capture.el - -Alex Murray: changed erc-desktop-notifications.el network-stream.el - -Alex Ott: changed TUTORIAL.ru ede/files.el ru-refcard.tex base.el - cedet-files.el cpp-root.el ede.el ede/generic.el idle.el ispell.el - semantic/format.el - -Alex Reed: changed verilog-mode.el - -Alex Rezinsky: wrote which-func.el - -Alex Schroeder: wrote ansi-color.el cus-theme.el erc-compat.el - erc-hecomplete.el erc-join.el erc-lang.el erc-ring.el master.el - spam-stat.el sql.el +Alex Gramiak: wrote ansi-color.el conf-mode-tests.el cus-theme.el + erc-compat.el erc-hecomplete.el erc-join.el erc-lang.el erc-ring.el + erc.el gnus-mlspl.el master.el soap-client.el soap-inspect.el + spam-stat.el sql.el vc-git.el which-func.el and co-wrote longlines.el mail/rmailmm.el -and changed erc.el erc-track.el erc-button.el erc-stamp.el erc-match.el - erc-autoaway.el erc-nickserv.el rcirc.texi Makefile erc-autojoin.el - erc-fill.el erc-pcomplete.el erc-complete.el erc-ibuffer.el - erc-members.el rmail.el comint.el custom.el erc-bbdb.el erc-chess.el - erc-ezbounce.el and 35 other files - -Alex Shinn: changed files.el +and changed erc-track.el erc-button.el w32term.c xterm.c erc-stamp.el + nsterm.m xdisp.c dispextern.h frame.c image.c nsgui.h w32gui.h xfns.c + erc-match.el frame.el termhooks.h w32fns.c Makefile TUTORIAL.ru + erc-autoaway.el erc-nickserv.el and 215 other files Alfred Correira: changed generic-x.el @@ -254,7 +188,7 @@ and changed nsterm.m nsfns.m nsmenu.m nsterm.h font-lock.el nsimage.m Anders Waldenborg: changed emacsclient.c -Andrea Corallo: changed map-tests.el map.el +Andrea Corallo: changed flymake.texi map-tests.el map.el Andrea Rossetti: changed ruler-mode.el @@ -366,7 +300,7 @@ Andrey Slusar: changed gnus-async.el gnus.el Andrey Zhdanov: changed gud.el Andrii Kolomoiets: changed vc-hg.el progmodes/python.el vc-git.el vc.el - maintaining.texi vc-svn.el + cyril-util.el maintaining.texi vc-svn.el Andrzej Lichnerowicz: wrote ob-io.el @@ -487,11 +421,11 @@ Bartosz Duszel: changed allout.el bib-mode.el cc-cmds.el hexl.el icon.el sendmail.el ses.el simple.el verilog-mode.el vi.el vip.el viper-cmd.el xscheme.el -Basil L. Contovounesios: changed simple.el message.el subr.el gravatar.el - custom.el gnus-group.el gnus-sum.el gnus-win.el internals.texi - modes.texi text.texi window.c bibtex.el button.el customize.texi - display.texi eww.el gnus-art.el gnus-msg.el gnus.texi lists.texi - and 150 other files +Basil L. Contovounesios: changed simple.el message.el subr.el text.texi + gravatar.el modes.texi custom.el customize.texi display.texi eww.el + files.texi gnus-group.el gnus-sum.el gnus-win.el internals.texi + window.c bibtex.el button.el gnus-art.el gnus-msg.el gnus.texi + and 182 other files Bastian Beischer: changed semantic/complete.el include.el mru-bookmark.el refs.el senator.el @@ -577,6 +511,8 @@ and changed mh-customize.el mh-search.el mh-alias.el mh-e.texi Makefile Bjarte Johansen: wrote ob-sed.el +Björn Holby: changed vhdl-mode.el + Björn Lindström: changed rcirc.texi Bjørn Mork: changed nnimap.el gnus-agent.el message.el mml2015.el @@ -901,7 +837,7 @@ Claudio Fontana: changed Makefile.in leim/Makefile.in lib-src/Makefile.in Clément Pit--Claudel: changed debugging.texi emacs-lisp/debug.el eval.c progmodes/python.el subr-tests.el subr.el url-http.el url-vars.el -Clément Pit-Claudel: changed keyboard.c text.texi +Clément Pit-Claudel: changed display.texi keyboard.c text.texi xdisp.c Colin Marquardt: changed gnus.el message.el @@ -1309,7 +1245,7 @@ Diane Murray: changed erc.el erc-backend.el erc-menu.el erc-button.el erc-goodies.el erc-ibuffer.el erc-log.el erc-nicklist.el url-http.el Makefile erc-dcc.el and 36 other files -Dick R. Chiang: changed checkdoc.el +Dick R. Chiang: changed checkdoc.el cl-macs-tests.el cl-macs.el Didier Verna: wrote gnus-diary.el nndiary.el and co-wrote nnml.el @@ -1355,9 +1291,9 @@ Dmitry Gutov: wrote elisp-mode-tests.el jit-lock-tests.el json-tests.el vc-hg-tests.el xref-tests.el and changed ruby-mode.el xref.el project.el vc-git.el elisp-mode.el etags.el ruby-mode-tests.el js.el package.el vc-hg.el vc.el - symref/grep.el log-edit.el dired-aux.el simple.el minibuffer.el + symref/grep.el log-edit.el simple.el dired-aux.el minibuffer.el menu-bar.el package-test.el progmodes/grep.el vc-svn.el eldoc.el - and 111 other files + and 112 other files Dmitry Kurochkin: changed isearch.el @@ -1443,9 +1379,9 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c] chartab-tests.el coding-tests.el doc-tests.el etags-tests.el rxvt.el tty-colors.el and changed xdisp.c msdos.c w32.c display.texi w32fns.c simple.el - files.el fileio.c keyboard.c w32term.c w32proc.c emacs.c files.texi + files.el fileio.c keyboard.c w32term.c emacs.c w32proc.c files.texi text.texi dispnew.c frames.texi lisp.h dispextern.h window.c process.c - term.c and 1187 other files + term.c and 1191 other files Emanuele Giaquinta: changed configure.ac rxvt.el charset.c etags.c fontset.c frame.el gnus-faq.texi loadup.el lread.c sh-script.el @@ -1767,6 +1703,8 @@ Fujii Hironori: changed w32fns.c Gábor Vida: changed gnus-demon.el auth-source.el ido.el +Gaby Launay: changed auth-source-pass.el + Gareth Jones: changed fns.c gnus-score.el Gareth Rees: changed NEWS.24 @@ -2145,7 +2083,7 @@ Jaesup Kwak: changed xwidget.c Jaeyoun Chung: changed hangul3.el hanja3.el gnus-mule.el hangul.el -J. Alexander Branham: wrote conf-mode-tests.el +Jakub-W: changed calculator.el Jambunathan K: wrote ox-odt.el and co-wrote ox-html.el @@ -2433,8 +2371,8 @@ João Távora: wrote elec-pair.el electric-tests.el flymake-cc.el and changed flymake.el flymake-proc.el icomplete.el minibuffer.el flymake-tests.el flymake.texi elisp-mode.el flymake-elisp.el electric.el flymake-ui.el text.texi json-tests.el tex-mode.el - errors-and-warnings.c json.c xref.el auth-source-pass.el linum.el - maintaining.texi message.el progmodes/python.el and 30 other files + errors-and-warnings.c json.c xref.el auth-source-pass.el buffers.texi + linum.el maintaining.texi message.el and 30 other files Jochen Hein: changed gnus-art.el @@ -2712,8 +2650,8 @@ and changed tramp-gvfs.el tramp-sh.el comint.el em-unix.el esh-util.el Juri Linkov: wrote files-x.el misearch.el replace-tests.el tab-bar.el tab-line.el and changed isearch.el info.el simple.el replace.el dired.el dired-aux.el - progmodes/grep.el progmodes/compile.el startup.el subr.el diff-mode.el - files.el menu-bar.el faces.el bindings.el display.texi image-mode.el + progmodes/grep.el image-mode.el progmodes/compile.el startup.el subr.el + diff-mode.el files.el menu-bar.el faces.el display.texi bindings.el desktop.el comint.el minibuffer.el search.texi and 419 other files Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h @@ -3110,6 +3048,8 @@ Leonard Randall: changed org-bibtex.el reftex-parse.el Leo P. White: changed eieio-custom.el +Leo Vivier: changed dired-aux.el + Levin Du: changed parse-time.el org-clock.el Le Wang: changed org-src.el comint.el hilit-chg.el misc.el @@ -3435,7 +3375,7 @@ Matthias Dahl: changed faces.el process.c process.h Matthias Förste: changed files.el Matthias Meulien: changed bookmark.el progmodes/python.el buff-menu.el - prog-mode.el simple.el tabify.el vc-dir.el vc-git.el + prog-mode.el simple.el tab-bar.el tabify.el vc-dir.el vc-git.el Matthias Wiehl: changed gnus.el @@ -3454,7 +3394,7 @@ Mattias Engdegård: changed rx.el searching.texi rx-tests.el autorevert.el calc-tests.el regexp-opt.el filenotify.el subr.el files.el progmodes/compile.el mouse.el bytecomp.el compile-tests.el autorevert-tests.el byte-opt.el bytecomp-tests.el calc-alg.el - compilation.txt dired.el font.c regex-emacs.c and 161 other files + compilation.txt dired.el font.c regex-emacs.c and 170 other files Matt Lundin: changed org-agenda.el org.el org-bibtex.el org-footnote.el ox-publish.el org-bbdb.el org-datetree.el org-gnus.el @@ -3492,7 +3432,7 @@ and co-wrote tramp-cache.el tramp-sh.el tramp.el and changed tramp.texi tramp-adb.el trampver.el trampver.texi dbusbind.c file-notify-tests.el files.el ange-ftp.el files.texi dbus.texi autorevert.el tramp-fish.el kqueue.c tramp-gw.el tramp-imap.el os.texi - xesam.el configure.ac lisp.h shell.el gfilenotify.c and 253 other files + xesam.el configure.ac lisp.h shell.el gfilenotify.c and 254 other files Michael Ben-Gershon: changed acorn.h configure.ac riscix1-1.h riscix1-2.h unexec.c @@ -3874,7 +3814,7 @@ Noam Postavsky: changed progmodes/python.el lisp-mode.el bytecomp.el lisp-mode-tests.el term.el xdisp.c eval.c cl-macs.el data.c emacs-lisp/debug.el simple.el help-fns.el modes.texi subr.el elisp-mode.el ert.el isearch.el processes.texi cl-print.el diff-mode.el - ffap.el and 359 other files + ffap.el and 360 other files Nobuyoshi Nakada: co-wrote ruby-mode.el and changed ruby-mode-tests.el @@ -3982,9 +3922,9 @@ and changed imenu.el make-mode.el Paul Eggert: wrote rcs2log and co-wrote cal-dst.el and changed lisp.h configure.ac alloc.c process.c fileio.c editfns.c - xdisp.c sysdep.c image.c keyboard.c data.c emacs.c fns.c lread.c + xdisp.c sysdep.c image.c keyboard.c emacs.c data.c fns.c lread.c xterm.c eval.c callproc.c Makefile.in frame.c buffer.c gnulib-comp.m4 - and 1821 other files + and 1822 other files Paul Fisher: changed fns.c @@ -4166,15 +4106,15 @@ Philipp Rumpf: changed electric.el Philipp Stephani: wrote callint-tests.el checkdoc-tests.el cl-preloaded-tests.el ediff-diff-tests.el eval-tests.el ido-tests.el - lread-tests.el mouse-tests.el xt-mouse-tests.el + lread-tests.el mouse-tests.el startup-tests.el xt-mouse-tests.el and changed emacs-module.c emacs-module-tests.el json.c json-tests.el - eval.c mod-test.c lisp.h lread.c nsterm.m configure.ac bytecomp.el - internals.texi gtkutil.c emacs-module.h.in files.el alloc.c - electric-tests.el electric.el test/Makefile.in editfns.c emacs.c - and 127 other files + mod-test.c eval.c lisp.h lread.c nsterm.m configure.ac bytecomp.el + internals.texi gtkutil.c emacs-module.h.in files.el alloc.c editfns.c + electric-tests.el electric.el test/Makefile.in emacs.c + and 129 other files Phillip Lord: wrote ps-print-tests.el -and changed build-zips.sh lisp/Makefile.in undo.c build-dep-zips.py +and changed build-zips.sh lisp/Makefile.in build-dep-zips.py undo.c simple.el test/Makefile.in Makefile Makefile.in emacs.nsi keyboard.c viper-cmd.el README-windows-binaries README.W32 elisp-mode-tests.el ldefs-clean.el loadup.el README-scripts autoload.el @@ -4214,10 +4154,10 @@ Piotr Trojanek: changed gnutls.c process.c Piotr Zieliński: wrote org-mouse.el -Pip Cet: changed fns.c display.texi xdisp.c xterm.c dispextern.h frame.el - gtkutil.c image.c json-tests.el json.c mail-utils.el nsterm.m simple.el - subr.el text.texi textprop.c timer-list.el tty-colors-tests.el - tty-colors.el url-http.el xfaces.c xterm.h +Pip Cet: changed fns.c display.texi xdisp.c xterm.c composite.c + dispextern.h frame.el gtkutil.c image.c indent.c json-tests.el json.c + mail-utils.el nsterm.m simple.el subr.el text.texi textprop.c + timer-list.el tty-colors-tests.el tty-colors.el and 4 other files Pontus Michael: changed simple.el @@ -4329,7 +4269,7 @@ Ricardo Wurmus: changed xwidget.el xwidget.c configure.ac xwidget.h Riccardo Murri: changed vc-bzr.el tls.el -Richard Copley: changed Makefile.in epaths.in epaths.nt gdb-mi.el +Richard Copley: changed Makefile.in epaths.in epaths.nt gdb-mi.el sort.el text.texi Richard Dawe: changed config.in src/Makefile.in @@ -4339,7 +4279,7 @@ Richard G. Bielawski: changed modes.texi paren.el Richard Hoskins: changed message.el Richard Kim: wrote wisent/python.el -and changed bovine.texi db-global.el loading.texi python-wy.el +and changed bovine.texi db-global.el gud.el loading.texi python-wy.el texnfo-upd.el wisent.texi Richard King: wrote filelock.c uniquify.el userlock.el @@ -4415,9 +4355,9 @@ Robert P. Goldman: changed org.texi ob-exp.el org.el ox-latex.el Robert Pluim: wrote nsm-tests.el and changed process.c ftfont.c gtkutil.c processes.texi vc-git.el configure.ac font.c network-stream.el nsm.el process-tests.el xfns.c - dispextern.h files.texi ftcrfont.c gnus-icalendar.el gnutls.el - gtkutil.h network-stream-tests.el nsterm.m text.texi w32.c - and 90 other files + custom.texi dispextern.h files.texi ftcrfont.c gnus-icalendar.el + gnutls.el gtkutil.h network-stream-tests.el nsterm.m text.texi + and 92 other files Robert Thorpe: changed cus-start.el indent.el @@ -4730,6 +4670,8 @@ and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg-gpg.el gnus-int.el gnus.el hashcash.el mm-view.el password.el and 101 other files +Simon Lang: changed misterioso-theme.el + Simon Law: changed delsel.el electric.el Simon Leinen: changed Makefile.in smtpmail.el Makefile cm.c cm.h hpux9.h @@ -4774,8 +4716,8 @@ Stefan Kangas: wrote bookmark-tests.el delim-col-tests.el morse-tests.el tabify-tests.el timezone-tests.el underline-tests.el uudecode-tests.el and changed bookmark.el package.el efaq.texi package.texi ibuffer.el mwheel.el cperl-mode.el fns.c gud.el simple.el subr.el autoinsert.el - comint-tests.el cus-edit.el delim-col.el dired-aux.el dired-x.el - em-term.el ert.texi flow-fill.el frames.texi and 147 other files + comint-tests.el control.texi cus-edit.el delim-col.el dired-aux.el + dired-x.el em-term.el ert.texi flow-fill.el and 152 other files Stefan Merten: co-wrote rst.el @@ -4791,7 +4733,7 @@ and co-wrote font-lock.el gitmerge.el pcvs.el and changed subr.el simple.el keyboard.c bytecomp.el files.el lisp.h cl-macs.el vc.el xdisp.c alloc.c eval.c sh-script.el progmodes/compile.el keymap.c tex-mode.el buffer.c newcomment.el - window.c lread.c fileio.c help-fns.el and 1372 other files + window.c lread.c fileio.c help-fns.el and 1373 other files Stefano Facchini: changed gtkutil.c @@ -4810,10 +4752,9 @@ Stefan Wiens: changed gnus-sum.el Steinar Bang: changed gnus-setup.el imap.el Štěpán Němec: changed INSTALL calc-ext.el checkdoc.el cl.texi comint.el - edebug.texi font-lock.el functions.texi gnus-sum.el insdel.c + edebug.texi font-lock.el functions.texi gnus-sum.el gnus.texi insdel.c leim-ext.el loading.texi maps.texi mark.texi message.texi mini.texi - minibuf.texi misc.texi programs.texi subr.el text.texi - and 7 other files + minibuf.texi misc.texi programs.texi subr.el and 8 other files Stephan Stahl: changed which-func.el buff-menu.el buffer.c dired-x.texi ediff-mult.el @@ -4826,7 +4767,7 @@ and changed wdired.el todo-mode.texi diary-lib.el wdired-tests.el dired-tests.el doc-view.el files.el minibuffer.el dired.el frames.texi hl-line.el info.el menu-bar.el mouse.el otodo-mode.el subr.el .gitattributes TUTORIAL allout.el artist.el compile.texi - and 43 other files + and 44 other files Stephen C. Gilardi: changed configure.ac @@ -4978,7 +4919,7 @@ and changed reftex-vars.el tex-mode.el gnus.texi reftex-cite.el tsdh-dark-theme.el tsdh-light-theme.el gnus-sum.el file-notify-tests.el reftex.el misc.texi org-gnus.el prog-mode.el subword.el image-mode.el json.el lisp-mode.el cc-cmds.el display.texi em-term.el emacsbug.el - files.el and 82 other files + files.el and 83 other files Tatsuya Ichikawa: changed gnus-agent.el gnus-cache.el @@ -5298,8 +5239,6 @@ Valentin Gatien-Baron: changed emacs-module.c Valentin Wüstholz: changed org.el -Valery Alexeev: changed cyril-util.el cyrillic.el - Van L: changed subr.el Vasilij Schneidermann: changed cus-start.el eww.el cc-mode.el @@ -5359,8 +5298,6 @@ and changed erc-backend.el erc.el erc-services.el hexl.el emacs.c erc-button.el erc-capab.el erc-join.el htmlfontify.texi sh-script.el xterm.c xterm.h -Vladimir Alexiev: changed arc-mode.el nnvirtual.el tmm.el - Vladimir Kazanov: changed java.srt Vladimir Lomov: changed ox-html.el commit 24391f517a28c6166c4037b2efa666293f2045f7 Author: Nicolas Petton Date: Tue Jul 28 22:22:53 2020 +0200 Update authors.el * admin/authors.el (authors-aliases): Add author aliases. diff --git a/admin/authors.el b/admin/authors.el index fd17a3394d..acaa7dfaa7 100644 --- a/admin/authors.el +++ b/admin/authors.el @@ -212,6 +212,8 @@ files.") ("Carlos Pita" "memeplex") ("Vinicius Jose Latorre" "viniciusjl") ("Gaby Launay" "galaunay") + ("Alex Gramiak" "alex") + ("Dick R. Chiang" "dickmao") ) "Alist of author aliases. commit 56f958807c0b8ea8f45e3c088157ca144a1b1fac Author: Nicolas Petton Date: Tue Jul 28 22:02:53 2020 +0200 * etc/NEWS: Remove temporary markup. diff --git a/etc/NEWS b/etc/NEWS index 2c8fa9dd39..a056f5c1e8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -31,7 +31,6 @@ arranges for the included mini-gmp library to be built and used. The new configure option '--without-libgmp' uses mini-gmp even if a suitable libgmp is available. ---- ** Emacs can now use HarfBuzz as its shaping engine. The new configure option '--with-harfbuzz' adds support for the HarfBuzz text shaping engine. It is on by default; use './configure @@ -44,7 +43,6 @@ supported ones, so the font backends that use older shaping engines enabled by default; they can be enabled via the 'font-backend' frame parameter or via X resources. ---- ** The new configure option '--with-json' adds native support for JSON. This uses the Jansson library. The option is on by default; use './configure --with-json=no' to build without Jansson support. The @@ -52,7 +50,6 @@ new JSON functions 'json-serialize', 'json-insert', 'json-parse-string', and 'json-parse-buffer' are typically much faster than their Lisp counterparts from json.el. ---- ** The configure option '--with-cairo' is no longer experimental. This builds Emacs with Cairo drawing, and supports built-in printing when Emacs is built with GTK+. Some severe bugs in this build were @@ -85,12 +82,10 @@ use the configure-time option '--with-dumping=unexec'; however, please file a bug report describing the situation, as unexec dumping is deprecated, and we plan on removing it in some future release. ---- ** The new configure option '--enable-checking=structs' attempts to check that the portable dumper code has been updated to match the last change to one of the data structures that it relies on. ---- ** The configure options '--enable-checking=conslist' and '--enable-checking=xmallocoverrun' have been withdrawn. The former made Emacs irredeemably slow, and the latter made it crash. Neither @@ -98,19 +93,16 @@ option was useful with modern debugging tools such as AddressSanitizer. (See "etc/DEBUG" for the details of using the modern replacements of the removed configure options.) ---- ** Emacs no longer defaults to using ImageMagick to display images. This is due to security and stability concerns with ImageMagick. To override the default, use 'configure --with-imagemagick'. ---- ** Several configure options now accept an option-argument 'ifavailable'. For example, './configure --with-xpm=ifavailable' now configures Emacs to attempt to use libxpm but to continue building even if libxpm is absent. The other affected options are '--with-gif', '--with-gnutls', '--with-jpeg', '--with-png', and '--with-tiff'. ---- ** The 'etags' program now uses the C library's regular expression matcher. If it's possible, 'etags' will use the regexp matcher from the system's standard C library, otherwise it will be linked with a @@ -120,7 +112,6 @@ configure option '--without-included-regex' forces 'etags' to use the C library's regex matcher even if the regex substitute ordinarily would be used to work around compatibility problems. ---- ** Emacs has been ported to the '-fcheck-pointer-bounds' option of GCC. This causes Emacs to check bounds of some arrays addressed by its internal pointers, which can be helpful when debugging the Emacs @@ -128,7 +119,6 @@ interpreter or modules that it uses. If your platform supports it you can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2 -mmpx -fcheck-pointer-bounds"' on Intel MPX platforms. ---- ** Emacs now normally uses a C pointer type instead of a C integer type to implement Lisp_Object, which is the fundamental machine word type internal to the Emacs Lisp interpreter. This change aims to @@ -137,30 +127,24 @@ option '--enable-check-lisp-object-type' is therefore no longer as useful and so is no longer enabled by default in developer builds, to reduce differences between developer and production builds. ---- ** The distribution tarball now has test cases; 'make check' runs them. This is intended mostly to help developers. ---- ** Emacs now requires GTK 2.24 and GTK 3.10 for the GTK 2 and GTK 3 builds respectively. ---- ** New make target 'help' shows a summary of common make targets. ---- ** Emacs now builds with dynamic module support by default. Pass '--without-modules' to 'configure' to disable dynamic module support. ---- ** The ftx font backend driver is now obsolete and will be removed in Emacs 28. * Startup Changes in Emacs 27.1 -+++ ** Emacs can now use the XDG convention for init files. The 'XDG_CONFIG_HOME' environment variable (which defaults to "~/.config") specifies the XDG configuration parent directory. Emacs @@ -180,7 +164,6 @@ Emacs will never create "$XDG_CONFIG_HOME/emacs". Whichever directory Emacs decides to use, it will set 'user-emacs-directory' to point to it. -+++ ** Emacs can now be configured using an early init file. The file is called "early-init.el", in 'user-emacs-directory'. It is loaded very early in the startup process: before graphical elements @@ -196,7 +179,6 @@ process, and some important parts of the Emacs session, such as 'window-system' and other GUI features, are not yet set up, which could make some customization fail to work. -+++ ** Installed packages are now activated *before* loading the init file. As a result of this change, it is no longer necessary to call 'package-initialize' in your init file. @@ -218,7 +200,6 @@ it won't work right without some adjustment: does not need to pay attention to 'package-load-list' or 'package-user-dir' any more. ---- ** Emacs now notifies systemd when startup finishes or shutdown begins. Units that are ordered after 'emacs.service' will only be started after Emacs has finished initialization and is ready for use. @@ -229,10 +210,8 @@ the new version of the file again.) * Changes in Emacs 27.1 ---- ** Emacs now supports Unicode Standard version 13.0. -+++ ** Emacs now supports resizing and rotating images without ImageMagick. All modern systems support this feature. (On GNU and Unix systems, Cairo drawing or the XRender extension to X11 is required for this to @@ -242,12 +221,10 @@ enable scaling.) The new function 'image-transforms-p' can be used to test whether any given frame supports these capabilities. -+++ ** The Network Security Manager now allows more fine-grained control of what checks to run via the 'network-security-protocol-checks' user option. -+++ ** TLS connections have their security tightened by default. Most of the checks for outdated, believed-to-be-weak TLS algorithms and ciphers are now switched on by default. (In addition, several new @@ -259,7 +236,6 @@ issued), you can either set 'network-security-protocol-checks' to nil, or adjust the elements in that user option to only happen on the 'high' security level (assuming you use the 'medium' level). ---- ** New user option 'nsm-trust-local-network'. Allows skipping Network Security Manager checks for hosts on your local subnet(s). It defaults to nil. Usually, there should be no @@ -267,21 +243,18 @@ need to set this non-nil, and doing that risks opening your local network connections to attacks. So be sure you know what you are doing before changing the value. -+++ ** Native GnuTLS connections can now use client certificates. Previously, this support was only available when using the external 'gnutls-cli' or 'starttls' command. Call 'open-network-stream' with ':client-certificate t' to trigger looking up of per-server certificates via 'auth-source'. -+++ ** New user option 'network-stream-use-client-certificates'. When non-nil, 'open-network-stream' performs lookups of client certificates using 'auth-source' as if ':client-certificate t' were specified if there is no explicit ':client-certificate' parameter. Defaults to nil. -+++ ** 'next/previous-multiframe-window' have been renamed. The new names are as follows: @@ -292,12 +265,10 @@ The old function names are maintained as aliases for backward compatibility. ** emacsclient -+++ *** emacsclient now supports the 'EMACS_SOCKET_NAME' environment variable. The command-line argument '--socket-name' overrides it. (The same behavior as for the pre-existing 'EMACS_SERVER_FILE' variable.) -+++ *** Emacs and emacsclient now default to "$XDG_RUNTIME_DIR/emacs". This is used as the directory for client/server sockets, if Emacs is running on a platform or environment that sets the 'XDG_RUNTIME_DIR' @@ -305,11 +276,9 @@ environment variable to indicate where session sockets should go. To get the old, less-secure behavior, you can set the 'EMACS_SOCKET_NAME' environment variable to an appropriate value. ---- *** When run by root, emacsclient no longer connects to non-root sockets. (Instead you can use Tramp methods to run root commands in a non-root Emacs.) ---- ** 'xft-ignore-color-fonts' now ignores even more color fonts. There are color fonts that managed to bypass the existing checks, causing XFT crashes, they are now filtered out. Setting @@ -317,45 +286,36 @@ causing XFT crashes, they are now filtered out. Setting require setting 'face-ignored-fonts' to filter out problematic fonts. Known problematic fonts are "Noto Color Emoji" and "Emoji One". ---- ** The GTK+ font chooser now respects 'face-ignored-fonts'. When using 'menu-set-font' under GTK3, the available fonts are now matched against 'face-ignored-fonts'. ---- ** The GTK+ font chooser now remembers the previously selected settings. It now remembers the name, size, style, etc. -+++ ** New user option 'what-cursor-show-names'. When non-nil, 'what-cursor-position' will show the name of the character in addition to the decimal/hex/octal representation. Default nil. -+++ ** New function 'network-lookup-address-info'. This does IPv4 and/or IPv6 address lookups on hostnames. -+++ ** 'network-interface-list' can now return IPv4 and IPv6 addresses. IPv4 and IPv6 addresses are now returned by default if available, optionally including netmask/broadcast address information. ---- ** Control of the threshold for using the 'distant-foreground' color. The threshold for color distance below which the 'distant-foreground' color of the face will be used instead of the foreground color can now be controlled via the new variable 'face-near-same-color-threshold'. The default value is 30000, as the previously hard-coded threshold. -+++ ** The function 'read-passwd' uses "*" as default character to hide passwords. -+++ ** The function 'read-answer' now accepts not only single character answers, but also function keys like 'F1', character events such as 'C-M-h', and control characters like 'C-h'. -+++ ** Lexical binding is now used by default when evaluating interactive Elisp. More specifically, 'lexical-binding' is now used by default for 'M-:' and '--eval' (including in evaluations invoked from 'emacsclient' via @@ -371,19 +331,16 @@ to work with lexical binding, or wrap it in an extra level of 'eval'. For example, --eval "FORM" becomes --eval "(eval 'FORM)" (note the extra quote in 'FORM). ---- ** The new user option 'tooltip-resize-echo-area' avoids truncating tooltip text on GUI frames when tooltips are displayed in the echo area. Instead, it resizes the echo area as needed to accommodate the full tool-tip text. ---- ** Show mode line tooltips only if the corresponding action applies. Customize the user option 'mode-line-default-help-echo' to restore the old behavior where the tooltip text is also shown when the corresponding action does not apply. -+++ ** New hook 'server-after-make-frame-hook'. This hook is a convenient place to perform initializations in daemon mode which require GUI features to be available. One example is @@ -392,15 +349,12 @@ the call to 'desktop-read' in this hook, if you want the GUI settings to be restored, or if desktop.el needs to interact with you during restoration of the session. -+++ ** The functions 'set-frame-height' and 'set-frame-width' are now commands, and will set the currently selected frame to the height/ width specified by the numeric prefix. -+++ ** New function 'logcount' calculates an integer's Hamming weight. -+++ ** New function 'libxml-available-p'. This function returns non-nil if libxml support is both compiled in and available at run time. Lisp programs should use this function to @@ -408,7 +362,6 @@ detect built-in libxml support, instead of testing for that indirectly, e.g., by checking that functions like 'libxml-parse-html-region' return nil. -+++ ** 'libxml-parse-xml-region' and 'libxml-parse-html-region' take a parameter that's called DISCARD-COMMENTS, but it really only discards the top-level comment. Therefore this parameter is now @@ -416,83 +369,67 @@ obsolete, and the new utility function 'xml-remove-comments' can be used to remove comments before calling the libxml functions to parse the data. -+++ ** A new DOM (the XML/HTML document structure returned by functions such as 'libxml-parse-html-region') traversal function has been added: 'dom-search', which takes a DOM and a predicate and returns all nodes that match. -+++ ** New function 'fill-polish-nobreak-p', to be used in 'fill-nobreak-predicate'. It blocks line breaking after a one-letter word, also in the case when this word is preceded by a non-space, but non-alphanumeric character. -+++ ** The limit on repetitions in regexps has been raised to 2^16-1. It was previously limited to 2^15-1. For example, the following regular expression was previously invalid, but is now accepted: x\{32768\} ---- ** The German prefix and postfix input methods now support Capital sharp S. ---- ** New input methods 'hawaiian-postfix' and 'hawaiian-prefix'. ---- ** New input methods 'georgian-qwerty' and 'georgian-nuskhuri'. ---- ** New input methods for several variants of the Sami language. The Sami input methods include: 'norwegian-sami-prefix', 'bergsland-hasselbrink-sami-prefix', 'southern-sami-prefix', 'ume-sami-prefix', 'northern-sami-prefix', 'inari-sami-prefix', 'skolt-sami-prefix', and 'kildin-sami-prefix'. -+++ ** Japanese environments use UTF-8 by default. In Japanese environments that do not specify encodings and are not based on MS-Windows, the default encoding is now utf-8 instead of japanese-iso-8bit. -+++ ** New function 'exec-path'. This function by default returns the value of the corresponding user option, but can optionally return the equivalent of 'exec-path' from a remote host. -+++ ** The function 'executable-find' supports an optional argument REMOTE. This triggers searching for the program on the remote host as indicated by 'default-directory'. -+++ ** New user option 'auto-save-no-message'. When set to t, no message will be shown when auto-saving (default value: nil). ---- ** The value of 'make-cursor-line-fully-visible' can now be a function. In addition to nil or non-nil, the value can now be a predicate function. Follow mode uses this to control scrolling of its windows when the last screen line in a window is not fully visible. -+++ ** New variable 'emacs-repository-branch'. It reports the git branch from which Emacs was built. -+++ ** New user option 'switch-to-buffer-obey-display-actions'. When non-nil, 'switch-to-buffer' uses 'pop-to-buffer-same-window' that respects display actions specified by 'display-buffer-alist' and 'display-buffer-overriding-action'. -+++ ** The user option 'switch-to-visible-buffer' is now obsolete. Customize 'switch-to-prev-buffer-skip' instead. -+++ ** New user option 'switch-to-prev-buffer-skip'. This user option allows specifying the set of buffers that may be shown by 'switch-to-prev-buffer' and 'switch-to-next-buffer' more @@ -504,10 +441,8 @@ matches strings where the pattern appears as a subsequence. Put simply, makes "foo" complete to both "barfoo" and "frodo". Add 'flex' to 'completion-styles' or 'completion-category-overrides' to use it. ---- ** The 'completion-common-part' face is now visible by default. -+++ ** New face attribute ':extend' to control face extension at EOL. The new face attribute ':extend' controls whether to use the face for displaying the empty space beyond end of line (EOL) till the edge of @@ -524,32 +459,25 @@ Consequently, a theme generally shouldn't specify this attribute unless it has a good reason to do so. ** Connection-local variables -+++ *** Connection-local variables are applied by default like file-local and directory-local variables. -+++ *** The macro 'with-connection-local-variables' has been renamed from 'with-connection-local-profiles'. No argument PROFILES needed any longer. ---- ** New user option 'next-error-verbose' controls when 'next-error' outputs a message about the error locus. ---- ** New user option 'grep-search-path' defines the directories searched for grep hits (this used to be controlled by 'compilation-search-path'). ---- ** New user option 'emacs-lisp-compilation-search-path' defines the directories searched for byte-compiler error messages (this used to be controlled by 'compilation-search-path'). ---- ** Multicolor fonts such as "Noto Color Emoji" can be displayed on Emacs configured with Cairo drawing and linked with cairo >= 1.16.0. -+++ ** Emacs now optionally displays a fill column indicator. This is similar to what 'fill-column-indicator' package provides, but much faster and compatible with 'show-trailing-whitespace'. @@ -564,46 +492,36 @@ in tooltips, as it is not useful there. There are 2 new buffer local variables and 1 face to customize this mode, they are described in the manual "(emacs) Display". -+++ ** 'progress-reporter-update' now accepts an optional suffix string to display. ---- ** New user option 'xref-file-name-display' controls the display of file names in xref buffers. ---- ** New user option 'byte-count-to-string-function'. It is used for displaying file sizes and disk space in some cases. -+++ ** Emacs now interprets RGB triplets like HTML, SVG, and CSS do. The X convention previously used differed slightly, particularly for RGB triplets with a single hexadecimal digit per component. ---- ** The toolbar now shows the equivalent key binding in its tooltips. ---- ** The File menu-bar menu was re-arranged. Print menu items moved to submenu, and also added the new entries for tabs. ---- ** 'scroll-lock-mode' is now bound to the 'Scroll_Lock' key globally. Note that this key binding will not work on MS-Windows systems if 'w32-scroll-lock-modifier' is non-nil. ---- ** 'global-set-key', called interactively, now no longer downcases a key binding with an upper case letter - if you can type it, you can bind it. -+++ ** 'read-from-minibuffer' now works with buffer-local history variables. The HIST argument of 'read-from-minibuffer' now works correctly with buffer-local variables. This means that different buffers can have their own separated input history list if desired. -+++ ** 'backup-by-copying-when-privileged-mismatch' applies to file gid, too. In addition to checking the file owner uid, Emacs also checks that the group gid is not greater than 'backup-by-copying-when-privileged-mismatch'; @@ -612,48 +530,39 @@ if so, 'backup-by-copying-when-mismatch' will be forced on. * Editing Changes in Emacs 27.1 -+++ ** When asked to visit a large file, Emacs now offers to visit it literally. Previously, Emacs would only ask for confirmation before visiting large files. Now it also offers a third alternative: to visit the file literally, as in 'find-file-literally', which speeds up navigation and editing of large files. -+++ ** 'zap-to-char' now uses the history of characters you used to zap to. 'zap-to-char' uses the new 'read-char-from-minibuffer' function to allow navigating through the history of characters that have been input. This is mostly useful for characters that have complex input methods where inputting the character again may involve many keystrokes. -+++ ** 'save-some-buffers' now has a new action in the prompt: 'C-f' will exit the command and switch to the buffer currently being asked about. ---- ** More commands support noncontiguous rectangular regions, namely 'upcase-dwim', 'downcase-dwim', 'capitalize-dwim', 'capitalize-region', 'upcase-initials-region', 'replace-string', 'replace-regexp', and 'delimit-columns-region'. -+++ ** The new 'amalgamating-undo-limit' variable can be used to control how many changes should be amalgamated when using the 'undo' command. ---- ** The 'newline-and-indent' command (commonly bound to 'RET' in many modes) now takes an optional numeric argument to specify how many times is should insert newlines (and indent). -+++ ** New command 'make-empty-file'. ---- ** New variable 'x-wait-for-event-timeout'. This controls how long Emacs will wait for updates to the graphical state to take effect (making a frame visible, for example). -+++ ** New user option 'electric-quote-replace-double'. This option controls whether '"' is replaced in 'electric-quote-mode', in addition to other quote characters. If non-nil, ASCII double-quote @@ -661,59 +570,48 @@ characters that quote text "like this" are replaced by double typographic quotes, “like this”, in text modes, and in comments in non-text modes. ---- ** New user option 'flyspell-case-fold-duplications'. This option controls whether Flyspell mode considers consecutive words to be duplicates if they are not in the same case. If non-nil, the default, words are considered to be duplicates even if their letters' case does not match. ---- ** 'write-abbrev-file' now includes special properties. 'write-abbrev-file' now writes special properties like ':case-fixed' for abbrevs that have them. -+++ ** 'write-abbrev-file' skips empty tables. 'write-abbrev-file' now skips inserting a 'define-abbrev-table' form for tables which do not have any non-system abbrevs to save. -+++ ** The new functions and commands 'text-property-search-forward' and 'text-property-search-backward' have been added. These provide an interface that's more like functions like 'search-forward'. ---- ** 'add-dir-local-variable' now uses dotted pair notation syntax to write alists of variables to ".dir-locals.el". This is the same syntax that you can see in the example of a ".dir-locals.el" file in the node "(emacs) Directory Variables" of the user manual. -+++ ** Network connections using 'local' can now use IPv6. 'make-network-process' now uses the correct loopback address when asked to use ':host 'local' and ':family 'ipv6'. -+++ ** The new function 'replace-region-contents' replaces the current region using a given replacement-function in a non-destructive manner (in terms of 'replace-buffer-contents'). -+++ ** The command 'replace-buffer-contents' now has two optional arguments mitigating performance issues when operating on huge buffers. -+++ ** Dragging 'C-M-mouse-1' now marks rectangular regions. -+++ ** The command 'delete-indentation' now operates on the active region. If the region is active, the command joins all the lines in the region. When there's no active region, the command works on the current and the previous or the next line, as before. -+++ ** You can now change the font size with the mouse wheel. Scrolling the mouse wheel with the Ctrl key pressed will now act the same as the 'C-x C-+' and 'C-x C--' commands. @@ -721,18 +619,15 @@ same as the 'C-x C-+' and 'C-x C--' commands. * Changes in Specialized Modes and Packages in Emacs 27.1 ---- ** New HTML mode skeleton 'html-id-anchor'. This new command (which inserts an _ skeleton) is bound to 'C-c C-c #'. -+++ ** New command 'font-lock-refontify'. This is an interactive convenience function to be used when developing font locking for a mode. It recomputes the font locking data and then re-fontifies the buffer. ---- ** Font Lock is smarter about fontifying unterminated strings and comments. When you type a quote that starts a string, or a comment delimiter that starts a comment, font-lock will not immediately refontify the @@ -743,28 +638,22 @@ comment. This is controlled by the new user option 'jit-lock-antiblink-grace', which specifies the delay in seconds. The default is 2 seconds; set to nil to get back the old behavior. ---- ** The 'C' command in 'tar-mode' will now preserve the timestamp of the extracted file if the new user option 'tar-copy-preserve-time' is non-nil. ---- ** 'autoconf-mode' is now used instead of 'm4-mode' for the "acinclude.m4" / "aclocal.m4" / "acsite.m4" files. ---- ** On GNU/Linux, 'M-x battery' will now list all batteries, no matter what they're named, and the 'battery-linux-sysfs-regexp' variable has been removed. ---- ** The 'list-processes' command now includes port numbers in the network connection information (in addition to the host name). ---- ** The 'cl' package is now officially deprecated in favor of 'cl-lib'. ---- ** desktop *** When called interactively with a prefix arg 'C-u', 'desktop-read' @@ -772,115 +661,94 @@ now prompts the user for the directory containing the desktop file. ** display-line-numbers-mode -+++ *** New faces 'line-number-major-tick' and 'line-number-minor-tick', and user options 'display-line-numbers-major-tick' and 'display-line-numbers-minor-tick' can be used to highlight the line numbers of lines multiple of certain numbers. -+++ *** New variable 'display-line-numbers-offset', when non-zero, adds an offset to absolute line numbers. ** winner -+++ *** A new user option, 'winner-boring-buffers-regexp', has been added. ** table -+++ *** 'table-generate-source' now supports wiki and mediawiki. This command can now output wiki and mediawiki format tables. ** telnet-mode ---- *** Reverting a buffer in 'telnet-mode' will restart a closed connection. ** goto-addr ---- *** A way to more conveniently specify what URI address schemes should be ignored has been added via the 'goto-address-uri-schemes-ignored' variable. ** tex-mode -+++ *** 'latex-noindent-commands' controls indentation of certain commands. You can use this new user option to control indentation of arguments of \emph, \footnote, and similar commands. ** byte compiler -+++ *** 'byte-compile-dynamic' is now obsolete. This is because on the one hand it suffers from misbehavior in corner cases that have plagued it for years, and on the other hand experience indicates that it doesn't bring any measurable benefit. ---- *** The 'g' keystroke in "*Compile-Log*" buffers has been bound to a new command that will recompile the file previously compiled with 'M-x byte-compile-file' and the like. ** compile.el ---- *** In 'compilation-error-regexp-alist', 'line' (and 'end-line') can be functions. -+++ *** 'compilation-context-lines' can now take the value t; this is like nil, but instead of scrolling the current line to the top of the screen when there is no left fringe, it inserts a visible arrow before column zero. ---- *** The new 'compilation-transform-file-match-alist' user option can be used to transform file name matches compilation output, and remove known false positives being recognized as warnings/errors. ** cl-lib.el -+++ *** 'cl-defstruct' has a new ':noinline' argument to prevent inlining its functions. -+++ *** 'cl-defstruct' slots accept a ':documentation' property. ---- *** 'cl-values-list' will now signal an error if its argument isn't a list. ** doc-view.el ---- *** New commands 'doc-view-presentation' and 'doc-view-fit-window-to-page'. ---- *** Added support for password-protected PDF files. ---- *** A new user option 'doc-view-pdftotext-program-args' has been added to allow controlling how the conversion to text is done. -+++ *** The prefix key 's' was changed to 'c' for slicing commands to avoid conflicts with 'image-mode' key 's'. The new key 'c' still has good mnemonics of "cut", "clip", "crop". ** Ido ---- *** New user option 'ido-big-directories' to mark directories whose names match certain regular expressions as big. Ido won't attempt to list the contents of such directories when completing file names. ** Minibuffer -+++ *** New user option 'minibuffer-beginning-of-buffer-movement'. This option allows control of how the 'M-<' command works in the minibuffer. If non-nil, point will move to the end of the prompt @@ -888,7 +756,6 @@ the minibuffer. If non-nil, point will move to the end of the prompt preserves the original behavior of 'M-<' moving to the beginning of the prompt. -+++ *** When the minibuffer is active, echo-area messages are displayed at the end of the minibuffer instead of hiding the minibuffer by the echo area display. The new user option 'minibuffer-message-clear-timeout' @@ -898,19 +765,15 @@ temporarily overwrote the minibuffer contents until the user typed something, set 'set-message-function' and 'clear-message-function' to nil. ---- *** Minibuffer now uses 'minibuffer-message' to display error messages at the end of the active minibuffer. To disable this, remove 'minibuffer-error-initialize' from 'minibuffer-setup-hook'. -+++ *** 'y-or-n-p' now uses the minibuffer to read 'y' or 'n' answer. ---- *** Some commands that previously used 'read-char-choice' now read a character using the minibuffer by 'read-char-from-minibuffer'. ---- ** map.el *** Now also understands plists. @@ -919,10 +782,8 @@ a character using the minibuffer by 'read-char-from-minibuffer'. *** 'map-contains-key' now returns a boolean rather than the key. *** Deprecate the 'testfn' args of 'map-elt' and 'map-contains-key'. *** New generic function 'map-insert'. -+++ *** The 'type' arg can be a list '(hash-table :key1 VAL1 :key2 VAL2 ...)'. ---- ** seq.el New convenience functions 'seq-first' and 'seq-rest' give easy access to respectively the first and all but the first elements of sequences. @@ -930,22 +791,18 @@ to respectively the first and all but the first elements of sequences. The new predicate function 'seq-contains-p' should be used instead of the now obsolete 'seq-contains'. ---- ** Follow mode In the current follow group of windows, "ghost" cursors are no longer displayed in the non-selected follow windows. To get the old behavior back, customize 'follow-hide-ghost-cursors' to nil. -+++ ** New variable 'warning-fill-column' for 'display-warning'. ** Windmove ---- *** 'windmove-create-window' when non-nil makes a new window. This happens upon moving off the edge of the frame. -+++ *** Windmove supports directional window display and selection. The new command 'windmove-display-default-keybindings' binds default keys with provided modifiers (by default, Shift-Meta) to the commands @@ -959,7 +816,6 @@ display the buffer in the same window, for example, 'S-M-0 C-h e' displays the "*Messages*" buffer in the same window. 'S-M-t C-h r' displays the Emacs manual in a new tab. -+++ *** Windmove also supports directional window deletion. The new command 'windmove-delete-default-keybindings' binds default keys with provided prefix (by default, 'C-x') and modifiers (by default, @@ -969,12 +825,10 @@ With a prefix arg 'C-u', also kills the buffer in that window. With 'M-0', deletes the selected window and selects the window that was in the specified direction. -+++ *** New command 'windmove-swap-states-in-direction' binds default keys to the commands that swap the states of the selected window with the window in the specified direction. ---- *** Windmove code no longer used is now obsolete. That includes the user option 'windmove-window-distance-delta' and the functions 'windmove-coord-add', 'windmove-constrain-to-range', @@ -982,104 +836,82 @@ functions 'windmove-coord-add', 'windmove-constrain-to-range', 'windmove-constrain-loc-for-movement', 'windmove-wrap-loc-for-movement', 'windmove-reference-loc' and 'windmove-other-window-loc'. ---- ** Octave mode The mode is automatically enabled in files that start with the 'function' keyword. ** project.el -+++ *** New commands 'project-search' and 'project-query-replace-regexp'. ---- *** New user option 'project-read-file-name-function'. ** Etags -+++ *** 'next-file' is now an obsolete alias of 'tags-next-file'. ---- *** 'tags-loop-revert-buffers' is an obsolete alias of 'fileloop-revert-buffers'. -+++ *** The 'tags-loop-continue' function along with the 'tags-loop-operate' and 'tags-loop-scan' variables are now obsolete; use the new 'fileloop-initialize' and 'fileloop-continue' functions instead. -+++ *** etags is now able to read Zstandard-compressed files. ** bibtex ---- *** New commands 'bibtex-next-entry' and 'bibtex-previous-entry'. In 'bibtex-mode-map', 'forward-paragraph' and 'backward-paragraph' are remapped to these, respectively. ** Dired -+++ *** New command 'dired-create-empty-file'. -+++ *** New command 'dired-number-of-marked-files'. It is by default bound to '* N'. ---- *** The marking commands now report how many files were marked by the command itself, not how many files are marked in total. -+++ *** The new user option 'dired-create-destination-dirs' controls whether 'dired-do-copy' and 'dired-rename-file' should create non-existent directories in the destination. -+++ *** 'dired-dwim-target' can be customized to prefer either the next window, or one of the most recently visited windows with a Dired buffer. -+++ *** When the new user option 'dired-vc-rename-file' is non-nil, Dired performs file renaming using underlying version control system. ---- *** Zstandard compression is now supported for 'dired-do-compress' and 'dired-do-compress-to'. ---- *** On systems that support suid/guid files, Dired now fontifies the permissions of such files with a special face 'dired-set-id'. ---- *** A new face, 'dired-special', is used to highlight sockets, named pipes, block devices and character devices. ** Find-Dired ---- *** New user option 'find-dired-refine-function'. The default value is 'find-dired-sort-by-filename'. ---- *** New sorting options for the user option 'find-ls-option'. ** Change Logs and VC ---- *** New user option 'vc-tor'. When non-nil, this user option causes the VC commands to communicate with the repository via Tor's proxy, using the 'torsocks' wrapper script. The default is nil. -+++ *** New command 'log-edit-generate-changelog-from-diff', bound to 'C-c C-w'. This generates ChangeLog entries from the VC fileset diff. -+++ *** Recording ChangeLog entries doesn't require an actual file. If a ChangeLog file doesn't exist, and if the new user option 'add-log-dont-create-changelog-file' is non-nil (which is the @@ -1089,32 +921,26 @@ still be used if it exists.) Set the user option to nil to get the previous behavior of always creating a buffer that visits a ChangeLog file. -+++ *** The new 'd' command ('vc-dir-clean-files') in 'vc-dir-mode' buffers will delete the marked files (or if no files are marked, the file under point). This command does not notify the VC backend, and is mostly useful for unregistered files. ---- *** 'vc-dir-ignore' now takes a prefix argument to ignore all marked files. ---- *** New user option 'vc-git-grep-template'. This new user option allows customizing the default arguments passed to 'git-grep' when 'vc-git-grep' is used. ---- *** Command 'vc-git-stash' now respects marks in the "*vc-dir*" buffer. When some files are marked, only those are stashed. When no files are marked, all modified files are stashed, as before. ---- *** 'vc-dir' now shows a button allowing you to hide the stash list. Controlled by user option 'vc-git-show-stash'. Default t means show the entire list as before. An integer value limits the list length (but still allows you to show the entire list via the button). ---- *** 'vc-git-stash' is now bound to 'C' in the stash headers. -- @@ -1122,44 +948,35 @@ the entire list as before. An integer value limits the list length 'vc-git-stash' and 'vc-git-stash-snapshot' can now be run using 'C' and 'S' respectively, including when there are no stashes. ---- *** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag. ---- *** 'vc-hg' now invokes 'smerge-mode' when visiting files. Code that attempted to invoke 'smerge-mode' when visiting an Hg file with conflicts existed in earlier versions of Emacs, but incorrectly never detected a conflict due to invalid assumptions about cached values. -+++ *** The Hg (Mercurial) back-end now supports 'vc-region-history'. The 'C-x v h' command now works in buffers that visit files controlled by Hg. -+++ *** The Hg (Mercurial) back-end now prompts for revision to merge when you invoke 'C-x v m' ('vc-merge'). ---- *** The Hg (Mercurial) back-end now uses tags, branches and bookmarks instead of revision numbers as completion candidates when it prompts for a revision. ---- *** New user option 'vc-hg-revert-switches'. It specifies switches to pass to Hg's 'revert' command. -+++ *** 'C-u C-x v D' ('vc-root-version-diff') prompts for two revisions and compares their entire trees. ---- *** 'C-x v M D' ('vc-diff-mergebase') and 'C-x v M L' ('vc-log-mergebase') print diffs and logs between the merge base (common ancestor) of two given revisions. -+++ *** New command 'vc-log-search' asks for a pattern, searches it in the revision log, and displays matched log entries in the log buffer. For example, 'M-x vc-log-search RET bug#36644 RET' @@ -1168,7 +985,6 @@ With a prefix argument asks for a command, so for example, 'C-u M-x vc-log-search RET git log -1 f302475 RET' will display just one log entry found by its revision number. -+++ *** It is now possible to display a specific revision given by its ID. If you invoke 'C-x v L' ('vc-print-root-log') with a numeric argument of 1, as in 'C-1 C-x v L' or 'C-u 1 C-x v L', it asks for a revision @@ -1176,56 +992,46 @@ ID, and shows its log entry together with the diffs introduced by the revision's commit. (For some less capable VCSes, only the log entry is shown.) ---- *** New user option 'vc-find-revision-no-save'. With non-nil, 'vc-find-revision' doesn't write the created buffer to file. ---- *** 'C-x v =' can now mimic Magit's diff format. Set the new user option 'diff-font-lock-prettify' to t for that, see below under "Diff mode". ---- *** The 'diff' function arguments OLD and NEW may each be a buffer rather than a file, in non-interactive calls. This change was made in Emacs 24.1, but wasn't documented until now. -+++ *** New command 'diff-buffers' interactively diffs two buffers. ** Diff mode -+++ *** Hunks are now automatically refined by font-lock. To disable refinement, set the new user option 'diff-refine' to nil. To get back the old behavior where hunks are refined as you navigate through a diff, set 'diff-refine' to the symbol 'navigate'. -+++ *** 'diff-auto-refine-mode' is deprecated in favor of 'diff-refine'. It is no longer enabled by default and binding it no longer has any effect. -+++ *** Better syntax highlighting of Diff hunks. Fragments of source in Diff hunks are now by default highlighted according to the appropriate major mode. Customize the new user option 'diff-font-lock-syntax' to nil to disable this. ---- *** File headers can be shortened, mimicking Magit's diff format. To enable it, set the new user option 'diff-font-lock-prettify' to t. On GUI frames, this option also displays the insertion and deletion indicators on the left fringe. -+++ *** Prefix arg of 'diff-goto-source' means jump to the old revision of the file under version control if point is on an old changed line, or to the new revision of the file otherwise. ** Texinfo -+++ *** New function for inserting '@pxref', '@xref', or '@ref' commands. The function 'texinfo-insert-dwim-@ref', bound to 'C-c C-c r' by default, inserts one of three types of references based on the text @@ -1234,35 +1040,29 @@ start of a sentence or at '(point-min)', else '@ref'. ** Browse-url ---- *** The function 'browse-url-emacs' can now visit a URL in selected window. It now treats the optional 2nd argument to mean that the URL should be shown in the currently selected window. ---- *** A new function, 'browse-url-add-buttons' can be used to add clickable links to most ordinary special-mode buffers that display text that have URLs embedded. 'browse-url-button-regexp' controls what's considered a button. ---- *** New user option 'browse-url-secondary-browser-function'. It can be set to a function that invokes an alternative browser. ** Comint -+++ *** 'send-invisible' is now an obsolete alias for 'comint-send-invisible'. Also, 'shell-strip-ctrl-m' is declared obsolete. -+++ *** 'C-c .' ('comint-insert-previous-argument') no longer interprets '&'. This feature caused problems when '&&' was present in the previous command. Since this command emulates 'M-.' in Bash and zsh, neither of which treats '&' specially, the feature was removed for compatibility with these shells. -+++ *** 'comint-insert-previous-argument' can now count arguments from the end. By default, invoking 'C-c .' with a numeric argument N would copy the Nth argument, counting from the first one. But if the new user option @@ -1272,11 +1072,9 @@ better emulate 'M-.' in both Bash and zsh, since the former counts from the beginning of the arguments, while the latter counts from the end. -+++ *** 'comint-run' can now accept a list of switches to pass to the program. 'C-u M-x comint-run' will prompt for the switches interactively. -+++ *** Abnormal hook 'comint-password-function' has been added. This hook permits a derived mode to supply a password for the underlying command interpreter without prompting the user. For @@ -1292,7 +1090,6 @@ if it had been supplied on the command line. ** SQL ---- *** SQL Indent Minor Mode SQL Mode now supports the ELPA 'sql-indent' package for assisting sophisticated SQL indenting rules. Note, however, that SQL is not @@ -1305,19 +1102,16 @@ prefer to rely upon existing Emacs facilities for formatting code but the 'sql-indent' package provides facilities to aid more casual SQL developers layout queries and complex expressions. ---- **** 'sql-use-indent-support' (default t) enables SQL indention support. The 'sql-indent' package from ELPA must be installed to get the indentation support in 'sql-mode' and 'sql-interactive-mode'. ---- **** 'sql-mode-hook' and 'sql-interactive-mode-hook' changed. Both hook variables have had 'sql-indent-enable' added to their default values. If you have existing customizations to these variables, you should make sure that the new default entry is included. ---- *** Connection Wallet Database passwords can now by stored in NETRC or JSON data files that may optionally be encrypted. When establishing an interactive session @@ -1336,48 +1130,38 @@ be encrypted with GPG by adding an additional ".gpg" suffix. ** Term ---- *** 'term-read-noecho' is now obsolete, use 'read-passwd' instead. -+++ *** 'serial-term' now takes an optional parameter to leave the emulator in line mode. ** Flymake -+++ *** The variable 'flymake-diagnostic-types-alist' is obsolete. You should instead set properties on known diagnostic symbols, like ':error' and ':warning', as demonstrated in the Flymake manual. -+++ *** New user option 'flymake-start-on-save-buffer'. Control whether Flymake starts checking the buffer on save. ---- *** Flymake and backend functions may exchange hints about buffer changes. This enables more efficient backends. See the docstring of 'flymake-diagnostic-functions' or the Flymake manual for details. -+++ *** 'flymake-start-syntax-check-on-newline' is now obsolete, use 'post-self-insert-hook' to check on newline. ** Ruby ---- *** The Rubocop Flymake diagnostic function will only run Lint cops if it can't find the config file. ---- *** Rubocop is called with 'bundle exec' if Gemfile mentions it. ---- *** New command 'ruby-find-library-file' bound to 'C-c C-f'. ** Package ---- *** Warn if "footer line" is missing, but still install package. package.el used to refuse to install a package without the so-called "footer line", which appears at the very end of the file: @@ -1392,24 +1176,20 @@ Note that versions of Emacs older than 27.1 will not only refuse to install packages without such a line -- they will be unable to parse package data. It is therefore recommended to keep this line. -+++ *** Change of 'package-check-signature' for packages with multiple sigs. In previous Emacsen, t checked that all signatures are valid. Now t only checks that at least one signature is valid and the new 'all' value needs to be used if you want to enforce that all signatures are valid. This only affects packages with multiple signatures. -+++ *** The meaning of 'allow-unsigned' in 'package-check-signature' has changed slightly: If a usable OpenPGP configuration can't be found (for instance, if gpg isn't installed), it now has the same meaning as nil. ---- *** New function 'package-get-version' lets packages query their own version. Example use in auctex.el: '(defconst auctex-version (package-get-version))' ---- *** New 'package-quickstart' feature. When 'package-quickstart' is non-nil, package.el precomputes a big autoloads file so that activation of packages can be done much faster, @@ -1419,10 +1199,8 @@ It also causes user options like 'package-user-dir' and is run rather than at startup so you don't need to set them in your early init file. ---- *** New function 'package-activate-all'. -+++ *** New functions for filtering packages list. A new function has been added which allows users to filter the packages list by name: 'package-menu-filter-by-name'. By default, it @@ -1432,13 +1210,10 @@ is bound to '/ n'. Additionally, the function (from 'f'). To clear any of the two filters, the user can now call the 'package-menu-clear-filter' function, bound to '/ /' by default. ---- *** Imenu support has been added to 'package-menu-mode'. ---- *** The package list can now be sorted by version or description. -+++ *** In Package Menu, 'g' now updates package data from archives. Previously, 'g' invoked 'tabulated-list-revert' which did not update the cached archive data. It is now bound to 'revert-buffer', which @@ -1448,19 +1223,16 @@ will update the data. ** Info -+++ *** Clicking on the left/right arrow icon in the Info tool-bar while holding down the Ctrl key pops up a menu of previously visited Info nodes where you can select a node to go back (like in browsers). ---- *** Info can now follow 'file://' protocol URLs. The 'file://' URLs in Info documents can now be followed by passing them to the 'browse-url' function, like the other protocols: 'ftp', 'http', and 'https'. This allows having references to local HTML files, for example. ---- ** Display of man pages now limits the width for formatting pages. The new user option 'Man-width-max' (80 by default) limits the number of columns passed to the 'man' program for formatting man pages. This @@ -1469,40 +1241,32 @@ windows (which are customary with today's large displays). ** Xref -+++ *** New command 'xref-find-definitions-at-mouse'. This command finds definitions of the identifier at the place of a mouse click event, and is intended to be bound to a mouse event. -+++ *** Changing 'xref-marker-ring-length' works after xref.el is loaded. Previously, setting 'xref-marker-ring-length' would only take effect if set before xref.el was loaded. ---- *** 'xref-find-definitions' now sets the mark at the buffer position where it was invoked. ---- *** New xref faces 'xref-file-header', 'xref-line-number', 'xref-match'. ---- *** New user option 'xref-show-definitions-function'. It encapsulates the logic pertinent to showing the result of 'xref-find-definitions'. The user can change it to customize its behavior and the display of results. ---- *** Search results show the buffer even for one hit. The search-type Xref commands (e.g. 'xref-find-references' or 'project-find-regexp') now show the results buffer even when there is only one hit. This can be altered by changing 'xref-show-xrefs-function'. -+++ *** Xref buffers support refreshing the search results. A new command 'xref-revert-buffer' is bound to 'g'. ---- *** Imenu support has been added to 'xref--xref-buffer-mode'. *** New generic method 'xref-backend-identifier-completion-ignore-case'. @@ -1511,7 +1275,6 @@ identifier completion. ** Checkdoc ---- *** Checkdoc can now optionally spell-check doc strings. Invoking 'checkdoc-buffer' with a non-nil TAKE-NOTES argument (interactively, with a prefix arg) will now spell-check the doc @@ -1519,7 +1282,6 @@ strings and report all the spelling mistakes. ** Icomplete -+++ *** New minor mode Fido mode. This mode is based on Icomplete, and its name stands for "Fake Ido". The point of this mode is to be an 'ido-mode' workalike, providing @@ -1529,29 +1291,24 @@ completion facilities. ** Ecomplete ---- *** The Ecomplete sorting has changed to a decay-based algorithm. This can be controlled by the new 'ecomplete-sort-predicate' user option. ---- *** The 'ecomplete-database-file' file is now placed in "~/.emacs.d/ecompleterc" by default. Of course it will still find it if you have it in "~/.ecompleterc". ** Gnus ---- *** 'mm-uu-diff-groups-regexp' now defaults to matching all groups, which means that "git am" diffs are recognized everywhere. -+++ *** Two new Gnus summary mode navigation commands have been added, bound to the '[' and ']' keys: 'gnus-summary-prev-unseen-article' and 'gnus-summary-next-unseen-article'. These take you (respectively) to the previous unseen or next unseen article. (These are the ones that are marked with "." in the summary mode lines.) -+++ *** The Gnus user variable 'nnimap-expunge' supports three new values: 'never' for never expunging messages, 'immediately' for immediately expunging deleted messages, and 'on-exit' to expunge deleted articles @@ -1561,67 +1318,53 @@ result in Gnus expunging all messages that have been flagged as deleted by any IMAP client (rather than just those that have been deleted by Gnus). -+++ *** New user option 'gnus-use-atomic-windows' makes Gnus window layouts atomic. See the "(elisp) Atomic Windows" node of the Elisp manual for details. -+++ *** There's a new value for 'gnus-article-date-headers', 'combined-local-lapsed', which will show both the time (in the local timezone) and the lapsed time. ---- *** Gnus now maps imaps to 993 only on old MS-Windows versions. The nnimap backend used to do this unconditionally to work around problems on old versions of MS-Windows. This is now done only for Windows XP and older. -+++ *** The nnimap backend now has support for IMAP namespaces. This feature can be enabled by setting the new 'nnimap-use-namespaces' server variable to non-nil. -+++ *** A prefix argument to 'gnus-summary-limit-to-score' will limit in reverse. Limit to articles with score "at or below" the SCORE argument rather than "at or above". ---- *** The function 'gnus-score-find-favorite-words' has been renamed from 'gnus-score-find-favourite-words'. ---- *** Gmane has been removed as an nnir backend, since Gmane no longer has a search engine. -+++ *** Splitting mail on common mailing list headers has been added. See the concept index in the Gnus manual for the 'match-list' entry. -+++ *** nil is no longer an allowed value for 'mm-text-html-renderer'. -+++ *** The default value of 'mm-inline-large-images' has changed from nil to 'resize', which means that large images will be resized instead of displayed with an external program by default. -+++ *** A new Gnus summary mode command, 'S A' ('gnus-summary-attach-article') can be used to attach the current article(s) to a pre-existing Message buffer, or create a new Message buffer with the article(s) attached. -+++ *** A new Gnus summary mode command, 'w' ('gnus-summary-browse-url') scans the article buffer for URLs, and offers them to the user to open with 'browse-url'. ---- *** New user option 'nnir-notmuch-filter-group-names-function'. This option controls whether and how to use Gnus search groups as 'path:' search terms to 'notmuch'. ---- *** The buttons in the Gnus article buffer were formerly widgets (i.e., buttons from widget.el). This has now changed, and they are now buttons (from button.el), and commands like 'TAB' now search for @@ -1631,22 +1374,18 @@ fail. ** erc ---- *** New hook 'erc-insert-done-hook'. This hook is called after strings have been inserted into the buffer, and is free to alter point and window configurations, as it's not called from inside a 'save-excursion', as opposed to 'erc-insert-post-hook'. ---- *** 'erc-button-google-url' has been renamed to 'erc-button-search-url' and its value has been changed to Duck Duck Go. ---- *** 'erc-send-pre-hook' and 'erc-send-this' have been obsoleted. The user option to use instead to alter text to be sent is now 'erc-pre-send-functions'. ---- *** Improve matching/highlighting of nicknames. Open and close parenthesis and apostrophe are not considered valid nick characters anymore, matching the given grammar in RFC 2812 @@ -1654,43 +1393,35 @@ section 2.3.1. This enables correct matching and highlighting of nicks when they are surrounded by parentheses, like "(nick)", and when adjacent to an apostrophe, like "nick's". ---- *** Set 'erc-button-url-regexp' to 'browse-url-button-regexp' which better handles surrounding pair of parentheses. ---- *** New function 'erc-switch-to-buffer-other-window' which is like 'erc-switch-to-buffer', but opens the buffer in another window. ---- *** New function 'erc-track-switch-buffer-other-window' which is like 'erc-track-switch-buffer', but opens the buffer in another window. ** EUDC ---- *** XEmacs support has been removed. ** eww/shr -+++ *** The new user option 'shr-cookie-policy' can be used to control when to use cookies when fetching embedded images. The default is to use them when the images are from the same domain as the main HTML document. -+++ *** The 'eww' command can now create a new EWW buffer. Invoking the command with a prefix argument will cause it to create a new EWW buffer for the URL instead of reusing the default one. -+++ *** Clicking with the Ctrl key or 'C-u RET' on a link opens a new tab when tab-bar-mode is enabled. -+++ *** The 'd' ('eww-download') command now falls back to current page's URL. If this command is invoked with no URL at point, it now downloads the current page instead of signaling an error. @@ -1700,30 +1431,24 @@ current page instead of signaling an error. 'shr-selected-link' face to give the user feedback that the command has been executed. -+++ *** New user option 'shr-discard-aria-hidden'. If set, shr will not render tags with attribute 'aria-hidden="true"'. This attribute is meant to tell screen readers to ignore a tag. -+++ *** 'shr-external-browser' has been made into an obsolete alias of 'browse-url-secondary-browser-function'. ---- *** 'shr-tag-ol' now respects the ordered list 'start' attribute. ---- *** The following tags are now handled: '', '', and ''. ** Htmlfontify -+++ *** The functions 'hfy-color', 'hfy-color-vals' and 'hfy-fallback-color-values' and the variables 'hfy-fallback-color-map' and 'hfy-rgb-txt-color-map' have been renamed from names that used 'colour' instead of 'color'. -+++ ** Enriched mode supports the 'charset' text property. You can add or modify the 'charset' text properties of text using the 'Edit->Text Properties->Special Properties' menu, or by invoking the @@ -1733,70 +1458,57 @@ restored when the file is visited. ** Smtpmail ---- *** Authentication mechanisms can be added via external packages, by defining new 'cl-defmethod' of 'smtpmail-try-auth-method'. -+++ *** To always force smtpmail to send credentials over on the first attempt when communicating with the SMTP server(s), the 'smtpmail-servers-requiring-authorization' user option can be used. -+++ *** smtpmail will now try resending mail when getting a transient "4xx" error message from the SMTP server. The new 'smtpmail-retries' user option says how many times to retry. ** Footnote mode ---- *** Support Hebrew-style footnotes. ---- *** Footnote text lines are now aligned. Can be controlled via the new user option 'footnote-align-to-fn-text'. ** CSS mode ---- *** A new command 'css-cycle-color-format' for cycling between color formats (e.g. "black" => "#000000" => "rgb(0, 0, 0)") has been added, bound to 'C-c C-f'. ---- *** CSS mode, SCSS mode, and Less CSS mode now have support for Imenu. ** SGML mode ---- *** 'sgml-quote' now handles double quotes and apostrophes when escaping text and in addition all numeric entities when unescaping text. ** Python mode ---- *** Python mode supports three different font lock decoration levels. The maximum level is used by default; customize 'font-lock-maximum-decoration' to tone down the decoration. ---- *** New user option 'python-pdbtrack-kill-buffers'. If non-nil, the default, buffers opened during pdbtracking session are killed when pdbtracking session is finished. ---- *** New function 'python-shell-send-statement. It sends the statement delimited by 'python-nav-beginning-of-statement' and 'python-nav-end-of-statement' to the inferior Python process. ** Help ---- *** Descriptions of variables and functions give an estimated first release where the variable or function appeared in Emacs. ---- *** Output format of 'C-h l' ('view-lossage') has changed. For convenience, 'view-lossage' now displays the last keystrokes and commands in the same format as the edit buffer of @@ -1804,23 +1516,19 @@ and commands in the same format as the edit buffer of the buffer generated by 'view-lossage' to the "*Edit Macro*" buffer created by 'edit-last-kbd-macro', and to save the macro by 'C-c C-c'. ---- *** The list of help commands produced by 'C-h C-h' ('help-for-help') can now be searched via 'C-s'. ** Ibuffer ---- *** New filter 'ibuffer-filter-by-process'; bound to '/ E'. ---- *** All mode filters can now accept a list of symbols. This means you can now easily filter several major modes, as well as a single mode. ** Search and Replace -+++ *** Isearch supports a prefix argument for 'C-s' ('isearch-repeat-forward') and 'C-r' ('isearch-repeat-backward'). With a prefix argument, these commands repeat the search for the specified occurrence of the search string. @@ -1830,7 +1538,6 @@ This makes possible also to use a prefix argument for 'M-s .' Also a prefix argument is supported for 'isearch-yank-until-char', 'isearch-yank-word-or-char', 'isearch-yank-symbol-or-char'. -+++ *** To go to the first/last occurrence of the current search string is possible now with new commands 'isearch-beginning-of-buffer' and 'isearch-end-of-buffer' bound to 'M-s M-<' and 'M-s M->' in Isearch. @@ -1839,14 +1546,12 @@ counting from the beginning/end of the buffer. This complements 'C-s'/'C-r' that searches for the next Nth relative occurrence with a numeric argument. -+++ *** 'isearch-lazy-count' shows the current match number and total number of matches in the Isearch prompt. User options 'lazy-count-prefix-format' and 'lazy-count-suffix-format' define the format of the current and the total number of matches in the prompt's prefix and suffix, respectively. ---- *** 'lazy-highlight-buffer' highlights matches in the full buffer. It is useful in combination with 'lazy-highlight-cleanup' customized to nil to leave matches highlighted in the whole buffer after exiting isearch. @@ -1855,7 +1560,6 @@ navigation through the matches without flickering is more smooth. 'lazy-highlight-buffer-max-at-a-time' controls the number of matches to highlight in one iteration while processing the full buffer. -+++ *** New isearch bindings. 'C-M-z' invokes new function 'isearch-yank-until-char', which yanks everything from point up to but not including the specified @@ -1871,27 +1575,21 @@ string to highlight lines matching the search string. This is similar to the existing binding 'M-s h r' ('highlight-regexp') that highlights JUST the search string. -+++ *** New user option 'isearch-yank-on-move' provides options t and 'shift' to extend the search string by yanking text that ends at the new position after moving point in the current buffer. 'shift' extends the search string by motion commands while holding down the shift key. -+++ *** 'isearch-allow-scroll' provides a new option 'unlimited' to allow scrolling any distance off screen. ---- *** Isearch now remembers the regexp-based search mode for words/symbols and case-sensitivity together with search strings in the search ring. ---- *** Isearch now has its own tool-bar and menu-bar menu. -+++ *** 'flush-lines' prints and returns the number of deleted matching lines. ---- *** 'char-fold-to-regexp' now matches more variants of a base character. The table used to check for equivalence of characters is now built using the complete chain of unicode decompositions of a character, @@ -1899,7 +1597,6 @@ rather than stopping after one level, such that searching for e.g. "GREEK SMALL LETTER IOTA" will now also find "GREEK SMALL LETTER IOTA WITH OXIA". -+++ *** New char-folding options: 'char-fold-include' lets you add ad hoc foldings, 'char-fold-exclude' to remove foldings from default decomposition, and 'char-fold-symmetric' to search for any of an equivalence class of @@ -1910,7 +1607,6 @@ to find "e". ** Debugger -+++ *** The Lisp Debugger is now based on 'backtrace-mode'. Backtrace mode adds fontification and commands for changing the appearance of backtrace frames. See the node "(elisp) Backtraces" in @@ -1918,45 +1614,37 @@ the Elisp manual for documentation of the new mode and its commands. ** Edebug -+++ *** 'edebug-eval-last-sexp' and 'edebug-eval-print-last-sexp' interactively now take a zero prefix analogously to the non-Edebug counterparts. -+++ *** New faces 'edebug-enabled-breakpoint' and 'edebug-disabled-breakpoint'. When setting breakpoints in Edebug, an overlay with these faces are placed over the point in question, depending on whether they are enabled or not. -+++ *** New command 'edebug-toggle-disable-breakpoint'. This command allows you to disable a breakpoint temporarily. This is mainly useful with breakpoints that are conditional and would take some time to recreate. -+++ *** New command 'edebug-unset-breakpoints'. To clear all breakpoints in the current form, the 'U' command in 'edebug-mode', or 'M-x edebug-unset-breakpoints' can be used. ---- *** Re-instrumenting a function with Edebug will now try to preserve previously-set breakpoints. However, if the code has changed substantially, this may not be possible. -+++ *** New command 'edebug-remove-instrumentation'. This command removes Edebug instrumentation from all functions that have been instrumented. -+++ *** The runtime behavior of Edebug's instrumentation can be changed using the new variables 'edebug-behavior-alist', 'edebug-after-instrumentation-function' and 'edebug-new-definition-function'. Edebug's behavior can be changed globally or for individual definitions. -+++ *** Edebug's backtrace buffer now uses 'backtrace-mode'. Backtrace mode adds fontification, links and commands for changing the appearance of backtrace frames. See the node "(elisp) Backtraces" in @@ -1973,14 +1661,12 @@ been instrumented by Edebug. ** Enhanced xterm support ---- *** New user option 'xterm-set-window-title' controls whether Emacs sets the XTerm window title. This feature is experimental and is disabled by default. ** Grep -+++ *** 'rgrep', 'lgrep' and 'zrgrep' now hide part of the command line that contains a list of ignored directories and files. Clicking on the button with ellipsis unhides it. @@ -1988,16 +1674,13 @@ The abbreviation can be disabled by the new user option 'grep-find-abbreviate'. The new command 'grep-find-toggle-abbreviation' toggles it interactively. ---- *** 'grep-find-use-xargs' is now customizable with sorting options. ** ERT -+++ *** New variable 'ert-quiet' allows making ERT output in batch mode less verbose by removing non-essential information. -+++ *** ERT's backtrace buffer now uses 'backtrace-mode'. Backtrace mode adds fontification and commands for changing the appearance of backtrace frames. See the node "(elisp) Backtraces" in @@ -2005,73 +1688,61 @@ the Elisp manual for documentation of the new mode and its commands. ** Gamegrid ---- *** Gamegrid now determines its default glyph size based on display dimensions, instead of always using 16 pixels. As a result, Tetris, Snake and Pong are better playable on HiDPI displays. ---- *** 'gamegrid-add-score' can now sort scores from lower to higher. This is useful for games where lower scores are better, like time-based games. ** Filecache ---- *** Completing file names in the minibuffer via 'C-TAB' now uses the styles as configured by the user option 'completion-styles'. -+++ ** New macros 'thunk-let' and 'thunk-let*'. These macros are analogue to 'let' and 'let*', but create bindings that are evaluated lazily. ** next-error -+++ *** New user option 'next-error-find-buffer-function'. The value should be a function that determines how to find the next buffer to be used by 'next-error' and 'previous-error'. The default is to use the last buffer that navigated to the current error. -+++ *** New command 'next-error-select-buffer'. It can be used to set any buffer as the next one to be used by 'next-error' and 'previous-error'. ** nxml-mode ---- *** The default value of 'nxml-sexp-element-flag' is now t. This means that pressing 'C-M-SPACE' now selects the entire tree by default, and not just the opening element. ** Eshell ---- *** TAB completion uses the standard 'completion-at-point' rather than 'pcomplete'. Its UI is slightly different but can be customized to behave similarly, e.g. Pcomplete's default cycling can be obtained with '(setq completion-cycle-threshold 5)'. -+++ *** Expansion of history event designators is disabled by default. To restore the old behavior, use (add-hook 'eshell-expand-input-functions #'eshell-expand-history-references) ---- *** The function 'eshell-uniquify-list' has been renamed from 'eshell-uniqify-list'. ---- *** The function 'eshell/kill' is now able to handle signal switches. Previously 'eshell/kill' would fail if provided a kill signal to send to the process. It now accepts signals specified either by name or by its number. ---- *** Emacs now follows symlinks in history-related files. The files specified by 'eshell-history-file-name' and 'eshell-last-dir-ring-file-name' can include symlinks; these are now @@ -2079,16 +1750,13 @@ followed when Emacs writes the relevant history variables to the disk. ** Shell ---- *** Program name completion inside remote shells works now as expected. -+++ *** The user option 'shell-file-name' can be set now as connection-local variable for remote shells. It still defaults to "/bin/sh". ** Single shell commands -+++ *** New values of 'shell-command-dont-erase-buffer'. This user option can now have the value 'erase' to force to erase the output buffer before execution of the command, even if the output goes @@ -2096,42 +1764,34 @@ to the current buffer. Additional values 'beg-last-out', 'end-last-out', and 'save-point' control where to put point in the output buffer after inserting the 'shell-command' output. ---- *** The new functions 'shell-command-save-pos-or-erase' and 'shell-command-set-point-after-cmd' control how point is handled between two consecutive shell commands in the same output buffer. -+++ *** 'async-shell-command-width' defines the number of display columns available for output of asynchronous shell commands. -+++ *** Prompt for shell commands can now show the current directory. Customize the new user option 'shell-command-prompt-show-cwd' to enable it. ** Pcomplete ---- *** The 'pcomplete' command is now obsolete. The Pcomplete functionality can be obtained via 'completion-at-point' instead, by adding 'pcomplete-completions-at-point' to 'completion-at-point-functions'. ---- *** The function 'pcomplete-uniquify-list' has been renamed from 'pcomplete-uniqify-list'. ---- *** 'pcomplete/make' now completes on targets in included files, recursively. To recover the previous behavior, set new user option 'pcmpl-gnu-makefile-includes' to nil. ** Auth-source ---- *** The Secret Service backend supports the ':create' key now. ---- *** ".authinfo" and ".netrc" files now use a new mode: 'authinfo-mode'. This is just like 'fundamental-mode', except that it hides passwords under a "****" display property. When the cursor moves to this text, @@ -2140,110 +1800,89 @@ the real password is revealed (via 'reveal-mode'). The new ** Tramp -+++ *** New connection method "nextcloud", which allows accessing OwnCloud or NextCloud hosted files and directories. -+++ *** New connection method "rclone", which allows accessing system storages via the 'rclone' program. This feature is experimental. -+++ *** New connection method "sudoedit", which allows editing local files with different user credentials. Contrary to the "sudo" method, no session is run permanently in the background. This is for security reasons. -+++ *** Connection methods "obex" and "synce" have been removed, because they are obsoleted in GVFS. -+++ *** Validated passwords are saved by auth-source backends which support this. -+++ *** During user and host name completion in the minibuffer, results from auth-source search are taken into account. This can be disabled by setting the user option 'tramp-completion-use-auth-sources' to nil. -+++ *** The user option 'tramp-ignored-file-name-regexp' allows disabling Tramp for some look-alike remote file names. -+++ *** For some connection methods, like "su" or "sudo", the host name in multi-hop file names must match the previous hop. Default host names are adjusted to the host name from the previous hop. -+++ *** A timeout has been added for the connection methods "sudo" and "doas". The underlying session is disabled when the timeout expires. This is for security reasons. -+++ *** For some connection methods, like "sshx" or "plink", it is possible to configure the remote login shell. This avoids problems with remote hosts, where "/bin/sh" is a link to a shell which cooperates badly with Tramp. -+++ *** New commands 'tramp-rename-files' and 'tramp-rename-these-files'. They allow saving remote files somewhere else when the corresponding host is not reachable anymore. ** Rcirc ---- *** New user option 'rcirc-url-max-length'. Setting this option to an integer causes URLs displayed in Rcirc buffers to be truncated to that many characters. ---- *** The default '/quit' and '/part' reasons are now configurable. Two new user options are provided for this: 'rcirc-default-part-reason' and 'rcirc-default-quit-reason'. ** Register ---- *** The return value of method 'register-val-describe' includes the names of buffers shown by the windows of a window configuration. ** Message ---- *** Completion of email addresses can use the standard completion UI. This is controlled by 'message-expand-name-standard-ui'. With the standard UI the different sources (ecomplete, bbdb, and eudc) are matched together and try to obey 'completion-styles'. It should work for other completion front ends like Company. ---- *** 'message-mode' now supports highlighting citations of different depths. This can be customized via the new user option 'message-cite-level-function' and the new 'message-cited-text-*' faces. -+++ *** Messages can now be systematically encrypted when the PGP keyring contains a public key for every recipient. To achieve this, add 'message-sign-encrypt-if-all-keys-available' to 'message-send-hook'. ---- *** When replying a message that have addresses on the form '"foo@bar.com" ', Message will elide the repeated "name" from the address field in the response. ---- *** The default of 'message-forward-as-mime' has changed from t to nil as it has been reported that many recipients can't read forwards that are formatted as MIME digests. -+++ *** 'message-forward-included-headers' has changed its default to exclude most headers when forwarding. ---- *** 'mml-secure-openpgp-sign-with-sender' sets also "gpg --sender". When 'mml-secure-openpgp-sign-with-sender' is non-nil, message sender's email address (in addition to its old behavior) will also be used to @@ -2259,61 +1898,48 @@ The option is useful for two reasons when verifying the signature: 2.2.17 to fully benefit from this feature. See gpg(1) man page for "--auto-key-retrieve". -+++ *** The 'mail-from-style' variable is now obsolete. According to RFC 5322, only the 'angles' value is valid. ---- ** EasyPG ---- *** 'epa-pinentry-mode' is renamed to 'epg-pinentry-mode'. It now applies to epg functions as well as epa functions. ---- *** The alias functions 'epa--encode-coding-string', 'epa--decode-coding-string', and 'epa--select-safe-coding-system' have been removed. Use 'encode-coding-string', 'decode-coding-string', and 'select-safe-coding-system' instead. ---- *** 'epg-context' structure supports now 'sender' slot. The value of the new 'sender' slot (if a string) is used to set gpg's "--sender" option. This feature is used by 'mml-secure-openpgp-sign-with-sender'. See gpg(1) manual page about "--sender" for more information. ---- ** Rmail -+++ *** New user option 'rmail-output-reset-deleted-flag'. If this option is non-nil, messages appended to an output file by the 'rmail-output' command have their Deleted flag reset. ---- *** The command 'rmail-summary-by-senders' with an empty argument selects the messages to summarize with a regexp that matches the sender of the current message. ** Threads -+++ *** New variable 'main-thread' holds Emacs's main thread. This is handy in Lisp programs that run on a non-main thread and want to signal the main thread, e.g., when they encounter an error. -+++ *** 'thread-join' now returns the result of the finished thread. -+++ *** 'thread-signal' does not propagate errors to the main thread. Instead, error messages are just printed in the main thread. ---- *** 'thread-alive-p' is now obsolete, use 'thread-live-p' instead. -+++ *** New command 'list-threads' shows Lisp threads. See the current list of live threads in a tabulated-list buffer which automatically updates. In the buffer, you can use 's q' or 's e' to @@ -2322,42 +1948,35 @@ backtrace with 'b'. ** thingatpt.el ---- *** 'thing-at-point' supports a new "thing" called 'uuid'. A symbol 'uuid' can be passed to 'thing-at-point' and it returns the UUID at point. ---- *** 'number-at-point' will now recognize hex numbers like 0xAb09 and #xAb09 and return them as numbers. ---- *** 'word-at-point' and 'sentence-at-point' accept NO-PROPERTIES. Just like 'thing-at-point' itself. ** Interactive automatic highlighting -+++ *** 'highlight-regexp' can now highlight subexpressions. The new command accepts a prefix numeric argument to choose the subexpression. ** Mouse display of minor mode menu ---- *** 'minor-mode-menu-from-indicator' now displays full minor mode name. When there is no menu for a mode, display the mode name after the indicator instead of just the indicator (which is sometimes cryptic). ** rx ---- *** rx now handles raw bytes in character alternatives correctly, when given in a string. Previously, '(any "\x80-\xff")' would match characters U+0080...U+00FF. Now the expression matches raw bytes in the 128...255 range, as expected. ---- *** The rx 'or' and 'seq' forms no longer require any arguments. '(or)' produces a regexp that never matches anything, while '(seq)' matches the empty string, each being an identity for the operation. @@ -2365,31 +1984,25 @@ This also works for their aliases: '|' for 'or'; ':', 'and' and 'sequence' for 'seq'. The symbol 'unmatchable' can be used as an alternative to '(or)'. ---- *** 'regexp' and new 'literal' accept arbitrary lisp as arguments. In this case, 'rx' will generate code which produces a regexp string at run time, instead of a constant string. ---- *** New rx extension mechanism: 'rx-define', 'rx-let', 'rx-let-eval'. These macros add new forms to the rx notation. -+++ *** 'anychar' is now an alias for 'anything'. Both match any single character; 'anychar' is more descriptive. -+++ *** New 'intersection' form for character sets. With 'or' and 'not', it can be used to compose character-matching expressions from simpler parts. -+++ *** 'not' now accepts more argument types. The argument can now also be a character, a single-character string, an 'intersection' form, or an 'or' form whose arguments each match a single character. -+++ *** Nested 'or' forms of strings guarantee a longest match. For example, '(or (or "IN" "OUT") (or "INPUT" "OUTPUT"))' now matches the whole string "INPUT" if present, not just "IN". Previously, this @@ -2397,15 +2010,12 @@ was only guaranteed inside a single 'or' form of string literals. ** Frames -+++ *** New command 'make-frame-on-monitor' makes a frame on the specified monitor. -+++ *** New value of 'minibuffer' frame parameter 'child-frame'. This allows creating and immediately parenting a minibuffer-only child frame when making a frame. ---- *** New predicates 'display-blink-cursor-p' and 'display-symbol-keys-p'. These predicates are to be preferred over 'display-graphic-p' when testing for blinking cursor capability and the capability to have @@ -2413,7 +2023,6 @@ symbols (e.g., '[return]', '[tab]', '[backspace]') as keys respectively. ** Tabulated List mode -+++ *** New user options for tabulated list sort indicators. You can now customize which sorting indicator character to display near the current column in Tabulated Lists (see user options @@ -2422,52 +2031,42 @@ near the current column in Tabulated Lists (see user options 'tabulated-list-tty-sort-indicator-asc', and 'tabulated-list-tty-sort-indicator-desc'). -+++ *** Two new commands and keystrokes have been added to the tabulated list mode: 'w' (which widens the current column) and 'c' which makes the current column contract. -+++ *** New function 'tabulated-list-clear-all-tags'. This function clears all tags from the padding area in the current buffer. Tags are typically added by calling 'tabulated-list-put-tag'. ** Text mode -+++ *** 'text-mode-variant' is now obsolete, use 'derived-mode-p' instead. ** CUA mode ---- *** New user option 'cua-rectangle-terminal-modifier-key'. This user option allows for the customization of the modifier key used in a terminal frame. ** JS mode ---- *** JSX syntax is now automatically detected and enabled. If a file imports Facebook's 'React' library, or if the file uses the extension ".jsx", then various features supporting XML-like syntax will be supported in 'js-mode' and derivative modes. ('js-jsx-mode' no longer needs to be enabled.) ---- *** New user option 'js-jsx-detect-syntax' disables automatic detection. This is turned on by default. ---- *** New user option 'js-jsx-syntax' enables JSX syntax unconditionally. This is off by default. ---- *** New variable 'js-jsx-regexps' controls JSX detection. ---- *** JSX syntax is now highlighted like SGML. ---- *** JSX code is properly indented in many more scenarios. Previously, JSX indentation usually only worked when an element was wrapped in parenthesis (e.g. in a 'return' statement or a function @@ -2477,7 +2076,6 @@ supported; and, indentation conventions align more closely with those of the React developer community (see 'js-jsx-align->-with-<'), otherwise still adhering to SGML conventions. ---- *** New user option 'js-jsx-align->-with-<' controls '>' indents. Commonly in JSX code, a '>' on its own line is indented at the same level as its opening '<'. This is the new default for JSX. This @@ -2489,7 +2087,6 @@ This is turned on by default. To get back the old default indentation behavior of aligning '>' with attributes, set 'js-jsx-align->-with-<' to nil. ---- *** Indentation uses 'js-indent-level' instead of 'sgml-basic-offset'. Since JSX is a syntax extension of JavaScript, it makes the most sense for JSX expressions to be indented the same number of spaces as other @@ -2500,21 +2097,17 @@ be indented like JS, you won't need to change your config. The old behavior can be emulated by controlling JSX indentation independently of JS, by setting 'js-jsx-indent-level'. ---- *** New user option 'js-jsx-indent-level' for different JSX indentation. If you wish to indent JSX by a different number of spaces than JS, set this user option to the desired number. ---- *** New user option 'js-jsx-attribute-offset' for JSX attribute indents. ---- *** New variable 'js-syntactic-mode-name' controls mode name display. Previously, the mode name was simply 'JavaScript'. Now, when a syntax extension like JSX is enabled, the mode name is 'JavaScript[JSX]'. Set this variable to nil to disable the new behavior. ---- *** New function 'js-use-syntactic-mode-name' for deriving modes. Packages deriving from 'js-mode' with 'define-derived-mode' should call this function to add enabled syntax extensions to their mode @@ -2522,7 +2115,6 @@ name, too. ** Autorevert -+++ *** New user option 'auto-revert-avoid-polling' for saving power. When set to a non-nil value, buffers in Auto Revert mode are no longer polled for changes periodically. This reduces the power consumption @@ -2530,7 +2122,6 @@ of an idle Emacs, but may fail on some network file systems; set 'auto-revert-notify-exclude-dir-regexp' to match files where notification is not supported. The default value is nil. -+++ *** New variable 'buffer-auto-revert-by-notification'. A major mode can declare that notification on the buffer's default directory is sufficient to know when updates are required, by setting @@ -2538,41 +2129,33 @@ the new variable 'buffer-auto-revert-by-notification' to a non-nil value. Auto Revert mode can use this information to avoid polling the buffer periodically when 'auto-revert-avoid-polling' is non-nil. ---- *** 'global-auto-revert-ignore-buffer' can now also be a predicate function that can be used for more fine-grained control of which buffers to auto-revert. ** auth-source-pass -+++ *** New user option 'auth-source-pass-filename'. Allows setting the path to the password-store, defaults to "~/.password-store". -+++ *** New user option 'auth-source-pass-port-separator'. Specifies separator between host and port, defaults to colon ":". ---- *** Minimize the number of decryptions during password lookup. This makes the package usable with physical tokens requiring touching a sensor for every decryption. ---- *** 'auth-source-pass-get' is now autoloaded. ** Bookmarks ---- *** 'bookmark-file' and 'bookmark-old-default-file' are now obsolete aliases of 'bookmark-default-file'. ---- *** New user option 'bookmark-watch-bookmark-file'. When non-nil, watch whether the bookmark file has changed on disk. ---- *** The old bookmark file format is no longer supported. This bookmark file format has not been used in Emacs since at least version 19.34, released in 1996, and will no longer be automatically @@ -2584,14 +2167,12 @@ The following functions are now declared obsolete: 'bookmark-upgrade-file-format-from-0', and 'bookmark-upgrade-version-0-alist'. ---- ** The mantemp.el library is now marked obsolete. This library generates manual C++ template instantiations. It should no longer be useful on modern compilers, which do this automatically. ** Ispell ---- *** New hook 'ispell-change-dictionary-hook'. This runs after changing the dictionary and could be used to automatically spellcheck a buffer when changing language without @@ -2599,43 +2180,36 @@ needing to advice 'ispell-change-dictionary'. ** scroll-lock ---- *** New command 'scroll-lock-next-line-always-scroll'. This command is bound to 'S-down' and scrolls the buffer up in particular when the end of the buffer is visible in the window. ** mwheel.el ---- *** 'mwheel-install' is now obsolete. Use 'mouse-wheel-mode' instead. Note that 'mouse-wheel-mode' is already enabled by default on most graphical displays. ** Gravatar -+++ *** 'gravatar-cache-ttl' is now a number of seconds. The previously used timestamp format of a list of integers is still supported, but is deprecated. The default value has not changed. -+++ *** 'gravatar-size' can now be nil. This results in the use of Gravatar's default size of 80 pixels. -+++ *** The default fallback gravatar is now configurable. This is possible using the new user options 'gravatar-default-image' and 'gravatar-force-default'. ** ada-mode ---- *** The built-in ada-mode is now deleted. The GNU ELPA package is a good replacement, even in very large source files. ** time-stamp ---- *** New '%5z' conversion for 'time-stamp-format' gives time zone offset. Specifying '%5z' in 'time-stamp-format' or 'time-stamp-pattern' expands to the time zone offset, e.g., '+0100'. The time zone used is @@ -2645,7 +2219,6 @@ Because this feature is new in Emacs 27.1, do not use it in the local variables section of any file that might be edited by an older version of Emacs. ---- *** Some conversions recommended for 'time-stamp-format' have changed. The new documented/recommended %-conversions are closer to those used by 'format-time-string' and are compatible at least as far back @@ -2669,15 +2242,12 @@ file-local variable, you may need to update the value. ** mode-local ---- *** Declare 'define-overload' and 'define-child-mode' as obsolete. ---- *** Rename several internal functions to use a 'mode-local-' prefix. ** CC Mode -+++ *** You can now flag "wrong style" comments with 'font-lock-warning-face'. To do this, use 'c-toggle-comment-style', if needed, to set the desired default comment style (block or line); then set the user option @@ -2685,12 +2255,10 @@ default comment style (block or line); then set the user option ** Mailcap ---- *** The new function 'mailcap-file-name-to-mime-type' has been added. It's a simple convenience function for looking up MIME types based on file name extensions. ---- *** The default way the list of possible external viewers for MIME types is sorted and chosen has changed. Earlier, the most specific viewer was chosen, even if there was a general override in "~/.mailcap". @@ -2702,7 +2270,6 @@ method back, set 'mailcap-prefer-mailcap-viewers' to nil. ** MH-E -+++ *** The hook 'mh-show-mode-hook' is now called before the message is inserted. Functions that want to affect the message text (for example, to change highlighting) can no longer use 'mh-show-mode-hook', because the @@ -2711,7 +2278,6 @@ called. Such functions should now be attached to 'mh-show-hook'. ** URL ---- *** The 'file:' handler no longer looks for "index.html" in directories if you ask it for a "file:///dir" URL. Since this is a low-level library, such decisions (if they are to be made at all) are @@ -2722,7 +2288,6 @@ left to higher-level functions. ** Tab Bars -+++ *** Tab Bar mode The new command 'tab-bar-mode' enables the tab bar at the top of each frame (including TTY frames), where you can use tabs to switch between @@ -2751,7 +2316,6 @@ using completion on tab names, or using 'tab-switcher'. Read the new Info node "(emacs) Tab Bars" for full description of all related features. -+++ *** Tab Line mode The new command 'global-tab-line-mode' enables the tab line above each window, which you can use to switch buffers in the window. Selecting @@ -2765,16 +2329,13 @@ line scrolls tabs. Read the new Info node "(emacs) Tab Line" for full description of all related features. -+++ ** fileloop.el lets one setup multifile operations like search&replace. -+++ ** Emacs can now visit files in archives as if they were directories. This feature uses Tramp and works only on systems which support GVFS, i.e. GNU/Linux, roughly spoken. See the node "(tramp) Archive file names" in the Tramp manual for full documentation of these facilities. -+++ ** New library for writing JSONRPC applications (https://jsonrpc.org). The 'jsonrpc' library enables writing Emacs Lisp applications that rely on this protocol. Since the protocol is designed to be @@ -2783,14 +2344,12 @@ transport strategies as well as a separate API to use them. A transport implementation for process-based communication, such as is used by the Language Server Protocol (LSP), is readily available. -+++ ** Backtrace mode improves viewing of Elisp backtraces. Backtrace mode adds pretty printing, fontification and ellipsis expansion to backtrace buffers produced by the Lisp debugger, Edebug and ERT. See the node "(elisp) Backtraces" in the Elisp manual for documentation of the new mode and its commands. -+++ ** so-long.el helps to mitigate performance problems with long lines. When 'global-so-long-mode' has been enabled, visiting a file with very long lines will (subject to configuration) cause the user's preferred @@ -2802,7 +2361,6 @@ immediately. Type 'M-x so-long-commentary' for full documentation. * Incompatible Lisp Changes in Emacs 27.1 ---- ** Incomplete destructive splicing support has been removed. Support for Common Lisp style destructive splicing (",.") was incomplete and broken for a long time. It has now been removed. @@ -2815,11 +2373,9 @@ starting with a period ("."). Consider the following example: In the past, this would have incorrectly evaluated to '(\,\. foo)', but will now instead evaluate to '42'. ---- ** The REGEXP in 'magic-mode-alist' is now matched case-sensitively. Likewise for 'magic-fallback-mode-alist'. -+++ ** 'add-hook' does not always add to the front or the end any more. The replacement of 'append' with 'depth' implies that the function is not always added to the very front (when append/depth is nil) or the @@ -2828,15 +2384,12 @@ the hook may have specified higher/lower depths. This makes it possible to control the ordering of functions more precisely, as was already possible in 'add-function' and 'advice-add'. ---- ** In 'compilation-error-regexp-alist' the old undocumented feature where 'line' could be a function of 2 arguments has been dropped. ---- ** 'define-fringe-bitmap' is always defined, even when Emacs is built without any GUI support. ---- ** Just loading a theme's file no longer activates the theme's settings. Loading a theme with 'M-x load-theme' still activates the theme, as it did before. However, loading the theme's file with 'M-x load-file', @@ -2852,10 +2405,8 @@ default applied immediately. The variable 'custom--inhibit-theme-enable' controls this behavior; its default value changed in Emacs 27.1. ---- ** The REPETITIONS argument of 'benchmark-run' can now also be a variable. ---- ** Interpretation of relative 'HOME' directory has changed. If "$HOME" is set to a relative file name, 'expand-file-name' now interprets it relative to the directory where Emacs was started, not @@ -2863,15 +2414,12 @@ relative to the 'default-directory' of the current buffer. We recommend always setting "$HOME" to an absolute file name, so that its meaning is independent of where Emacs was started. ---- ** 'file-name-absolute-p' no longer considers "~foo" to be an absolute file name if there is no user named "foo". -+++ ** The FILENAME argument to 'file-name-base' is now mandatory and no longer defaults to 'buffer-file-name'. -+++ ** File metadata primitives now signal an error if I/O, access, or other serious errors prevent them from determining the result. Formerly, these functions often (though not always) silently returned @@ -2884,35 +2432,29 @@ file does not exist. The affected primitives are 'file-modes', 'file-newer-than-file-p', 'file-selinux-context', 'file-system-info', and 'set-visited-file-modtime'. ---- ** The function 'eldoc-message' now accepts a single argument. Programs that called it with multiple arguments before should pass them through 'format' first. Even that is discouraged: for ElDoc support, you should set 'eldoc-documentation-function' instead of calling 'eldoc-message' directly. ---- ** Old-style backquotes now generate an error. They have been generating warnings for a decade. To interpret old-style backquotes as new-style, bind the new variable 'force-new-style-backquotes' to t. ---- ** Defining a Common Lisp structure using 'cl-defstruct' or 'cl-struct-define' whose name clashes with a builtin type (e.g., 'integer' or 'hash-table') now signals an error. ---- ** When formatting a floating-point number as an octal or hexadecimal integer, Emacs now signals an error if the number is too large for the implementation to format. -+++ ** 'logb' now returns infinity when given an infinite or zero argument, and returns a NaN when given a NaN. Formerly, it returned an extreme fixnum for such arguments. ---- ** Some functions and variables obsolete since Emacs 22 have been removed: 'archive-mouse-extract', 'assoc-ignore-case', 'assoc-ignore-representation', 'backward-text-line', 'blink-cursor', 'bookmark-exit-hooks', @@ -2950,28 +2492,24 @@ fixnum for such arguments. 'vc-previous-comment', 'view-todo', 'x-lost-selection-hooks', 'x-sent-selection-hooks'. ---- ** Further functions and variables obsolete since Emacs 24 have been removed: 'default-directory-alist', 'dired-default-directory', 'dired-default-directory-alist', 'dired-enable-local-variables', 'dired-hack-local-variables', 'dired-local-variables-file', 'dired-omit-here-always'. -+++ ** Garbage collection no longer treats miscellaneous objects specially; they are now allocated like any other pseudovector. As a result, the 'garbage-collect' and 'memory-use-count' functions no longer return a 'misc' component, and the 'misc-objects-consed' variable has been removed. -+++ ** Reversed character ranges are no longer permitted in 'rx'. Previously, ranges where the starting character is greater than the ending character were silently omitted. For example, '(rx (any "@z-a" (?9 . ?0)))' would match '@' only. Now, such 'rx' expressions generate an error. ---- ** Internal 'rx' functions and variables have been removed, as a consequence of an improved implementation. Packages using these should use the public 'rx' and 'rx-to-string' instead. @@ -2979,7 +2517,6 @@ these should use the public 'rx' and 'rx-to-string' instead. extension mechanism is preferred: 'rx-define', 'rx-let' and 'rx-let-eval'. -+++ ** 'text-mode' no longer sets the value of 'indent-line-function'. The global value of 'indent-line-function', which defaults to 'indent-relative', will no longer be reset locally when turning on @@ -2988,28 +2525,22 @@ The global value of 'indent-line-function', which defaults to To get back the old behavior, add a function to 'text-mode-hook' which performs '(setq-local indent-line-function #'indent-relative)'. ---- ** 'make-process' no longer accepts a non-nil ':stop' key. This has never worked reliably, and now causes an error. -+++ ** 'eventp' no longer returns non-nil for lists whose car is nil. This is consistent with the fact that nil, though a symbol, is not a valid event type. ---- ** The obsolete package xesam.el (since Emacs 24) has been removed. -+++ ** The XBM image handler now accepts a ':stride' argument, which should be specified in image specs representing the entire bitmap as a single bool vector. -+++ ** 'regexp-quote' may return its argument string. If the argument needs no quoting, it can be returned instead of a copy. -+++ ** Mouse scroll up and down with control key modifier changes font size. Previously, the control key modifier was used to scroll up or down by an amount which was close to near a full screen. This is now instead @@ -3026,24 +2557,19 @@ pointer is over. To change this behavior, you can customize the user option 'mouse-wheel-follow-mouse'. Note that this will also affect scrolling. -+++ ** Mouse scroll up and down with control key modifier also works on images where it scales the image under the mouse pointer. ---- ** 'help-follow-symbol' now signals 'user-error' if point (or the position pointed to by the argument POS) is not in a symbol. ---- ** The options.el library has been removed. It was obsolete since Emacs 22.1, replaced by customize. ---- ** The tls.el and starttls.el libraries are now marked obsolete. Use of built-in libgnutls based functionality (described in the Emacs GnuTLS manual) is recommended instead. ---- ** The url-ns.el library is now marked obsolete. This library is used to open configuration files for the long defunct web browser Netscape, and is no longer relevant. @@ -3051,7 +2577,6 @@ web browser Netscape, and is no longer relevant. * Lisp Changes in Emacs 27.1 -+++ ** Emacs Lisp integers can now be of arbitrary size. Emacs uses the GNU Multiple Precision (GMP) library to support integers whose size is too large to support natively. The integers @@ -3079,20 +2604,17 @@ like 'file-attributes' that compute file sizes and other attributes, functions like 'process-id' that compute process IDs, and functions like 'user-uid' and 'group-gid' that compute user and group IDs. -+++ ** 'overflow-error' is now documented as a subcategory of 'range-error'. Formerly it was undocumented, and was (incorrectly) a subcategory of 'domain-error'. ** Time values -+++ *** New function 'time-convert' converts Lisp time values to Lisp timestamps of various forms, including a new timestamp form '(TICKS . HZ)' where TICKS is an integer and HZ a positive integer denoting a clock frequency. -+++ *** Although the default timestamp format is still '(HI LO US PS)', it is planned to change in a future Emacs version, to exploit bignums. The documentation has been updated to mention that the timestamp @@ -3101,7 +2623,6 @@ format may change and that programs should use functions like probing the innards of a timestamp directly, or creating a timestamp by hand. -+++ *** Decoded (calendrical) timestamps now have subsecond resolution. This affects 'decode-time', which generates these timestamps, as well as functions like 'encode-time' that accept them. The subsecond info @@ -3118,11 +2639,9 @@ traditional behavior, this default may change in future Emacs versions, so callers requiring an integer should specify FORM explicitly. -+++ *** 'encode-time' supports a new API '(encode-time TIME)'. The old 'encode-time' API is still supported. -+++ *** A new package to parse ISO 8601 time, date, durations and intervals has been added. The main function to use is 'iso8601-parse', but there's also 'iso8601-parse-date', @@ -3131,30 +2650,25 @@ intervals has been added. The main function to use is structures, except the final one, which returns three of them (start, end and duration). -+++ *** 'time-add', 'time-subtract', and 'time-less-p' now accept infinities and NaNs too, and propagate them or return nil like floating-point operators do. If both arguments are finite, these functions now return exact results instead of rounding in some cases, and they also avoid excess precision when that is easy. -+++ *** New function 'time-equal-p' compares time values for equality. -+++ *** 'format-time-string' supports a new conversion specifier flag '+' that acts like the '0' flag but also puts a '+' before nonnegative years containing more than four digits. This is for compatibility with POSIX.1-2017. -+++ *** To access (or alter) the elements of a decoded time value, the 'decoded-time-second', 'decoded-time-minute', 'decoded-time-hour', 'decoded-time-day', 'decoded-time-month', 'decoded-time-year', 'decoded-time-weekday', 'decoded-time-dst' and 'decoded-time-zone' accessors can be used. -+++ *** The new functions 'date-days-in-month' (which will say how many days there are in a month in a specific year), 'date-ordinal-to-time' (that computes the date of an ordinal day), 'decoded-time-add' (for @@ -3163,7 +2677,6 @@ doing computations on a decoded time structure), 'make-decoded-time' filled out), and 'encoded-time-set-defaults' (which fills in nil elements as if it's midnight January 1st, 1970) have been added. -+++ *** In the DST slot, 'encode-time' and 'parse-time-string' now return -1 if it is not known whether daylight saving time is in effect. Formerly they were inconsistent: 'encode-time' returned t in this @@ -3171,38 +2684,31 @@ situation, whereas 'parse-time-string' returned nil. Now they consistently use nil to mean that DST is not in effect, and use -1 to mean that it is not known whether DST is in effect. -+++ ** New macro 'benchmark-progn'. This macro works like 'progn', but messages how long it takes to evaluate the body forms. The value of the last form is the return value. -+++ ** New function 'read-char-from-minibuffer'. This function works like 'read-char', but uses 'read-from-minibuffer' to read a character, so it maintains a history that can be navigated via usual minibuffer keystrokes 'M-p'/'M-n'. ---- ** New variables 'set-message-function' and 'clear-message-function' can be used to specify functions to show and clear messages that normally are displayed in the echo area. -+++ ** 'setq-local' can now set an arbitrary number of variables, which makes the syntax more like 'setq'. ---- ** 'reveal-mode' can now also be used for more than to toggle between invisible and visible: It can also toggle 'display' properties in overlays. This is only done on 'display' properties that have the 'reveal-toggle-invisible' property set. -+++ ** 'process-contact' now takes an optional NO-BLOCK argument to allow not waiting for a process to be set up. ---- ** New variable 'read-process-output-max' controls sub-process throughput. This variable determines how many bytes can be read from a sub-process in one read operation. The default, 4096 bytes, was previously a @@ -3210,118 +2716,94 @@ hard-coded constant. Setting it to a larger value might enhance throughput of reading from sub-processes that produces vast (megabytes) amounts of data in one go. -+++ ** The new user option 'quit-window-hook' is now run first when executing the 'quit-window' command. -+++ ** The user options 'help-enable-completion-auto-load', 'help-enable-auto-load' and 'vhdl-project-auto-load', as well as the function 'vhdl-auto-load-project' have been renamed to have "autoload" without the hyphen in their names. Obsolete aliases from the old names have been added. -+++ ** Buttons (created with 'make-button' and related functions) can now use the 'button-data' property. If present, the data in this property will be passed on to the 'action' function instead of the button itself in 'button-activate'. -+++ ** 'defcustom' now takes a ':local' keyword that can be either t or 'permanent', which mean that the variable should be automatically buffer-local. 'permanent' also sets the variable's 'permanent-local' property. -+++ ** The new macro 'with-suppressed-warnings' can be used to suppress specific byte-compile warnings. -+++ ** The new macro 'ignore-error' is like 'ignore-errors', but takes a specific error condition, and will only ignore that condition. (This can also be a list of conditions.) ---- ** The new function 'byte-compile-info-message' can be used to output informational messages that look pleasing during the Emacs build. ---- ** New 'help-fns-describe-variable-functions' hook. It makes it possible to add metadata information to 'describe-variable'. ** i18n (internationalization) ---- *** 'ngettext' can be used now to return the right plural form according to the given numeric value. -+++ ** 'inhibit-null-byte-detection' is renamed to 'inhibit-nul-byte-detection'. -+++ ** 'self-insert-command' takes the char to insert as (optional) argument. -+++ ** 'lookup-key' can take a list of keymaps as argument. -+++ ** 'condition-case' now accepts t to match any error symbol. -+++ ** New function 'proper-list-p'. Given a proper list as argument, this predicate returns its length; otherwise, it returns nil. 'format-proper-list-p' is now an obsolete alias for the new function. ---- ** 'define-minor-mode' automatically documents the meaning of ARG. -+++ ** The function 'recenter' now accepts an additional optional argument. By default, calling 'recenter' will not redraw the frame even if 'recenter-redisplay' is non-nil. Call 'recenter' with the new second argument non-nil to force redisplay per 'recenter-redisplay's value. -+++ ** New functions 'major-mode-suspend' and 'major-mode-restore'. Use them when switching temporarily to another major mode, e.g. for 'hexl-mode', or to switch between 'c-mode' and 'image-mode' in XPM. -+++ ** New macro 'dolist-with-progress-reporter'. This works like 'dolist', but reports progress similar to 'dotimes-with-progress-reporter'. -+++ ** New hook 'after-delete-frame-functions'. This works like 'delete-frame-functions', but runs after the frame to be deleted has been made dead and removed from the frame list. ---- ** The function 'provided-mode-derived-p' was extended to support aliases. The function now returns non-nil when the argument MODE is derived from any alias of any of MODES. -+++ ** New frame focus state inspection interface. The hooks 'focus-in-hook' and 'focus-out-hook' are now obsolete. Instead, attach to 'after-focus-change-function' using 'add-function' and inspect the focus state of each frame using 'frame-focus-state'. -+++ ** Emacs now requests and recognizes focus-change notifications from TTYs. On terminal emulators that support the feature, Emacs can now support 'focus-in-hook' and 'focus-out-hook' for TTY frames. -+++ ** Window-specific face remapping. Face specifications (of the kind used in 'face-remapping-alist') now support filters, allowing faces to vary between different windows displaying the same buffer. See the node "(elisp) Face Remapping" of the Emacs Lisp Reference manual for more detail. -+++ ** Window change functions have been redesigned. Hooks reacting to window changes run now only when redisplay detects that a change has actually occurred. Six hooks are now provided: @@ -3351,55 +2833,44 @@ Also 'run-window-configuration-change-hook' is declared obsolete. See the section "(elisp) Window Hooks" in the Elisp manual for a detailed explanation of the new behavior. -+++ ** Scroll bar and fringe settings can now be made persistent for windows. The functions 'set-window-scroll-bars' and 'set-window-fringes' now have a new optional argument that makes the settings they produce reliably survive subsequent invocations of 'set-window-buffer'. -+++ ** New user option 'resize-mini-frames'. This option allows automatically resizing minibuffer-only frames similarly to how minibuffer windows are resized on "normal" frames. -+++ ** New buffer display action function 'display-buffer-in-direction'. This function allows specifying the location of the window chosen by 'display-buffer' in various ways. -+++ ** New buffer display action alist entry 'dedicated'. Such an entry allows specifying the dedicated status of a window created by 'display-buffer'. -+++ ** New buffer display action alist entry 'window-min-height'. Such an entry allows specifying a minimum height of the window used for displaying a buffer. 'display-buffer-below-selected' is the only action function to respect it at the moment. -+++ ** New buffer display action alist entry 'direction'. This entry is used to specify the location of the window chosen by 'display-buffer-in-direction'. -+++ ** Additional meaning of display action alist entry 'window'. A 'window' entry can now also specify a reference window for 'display-buffer-in-direction'. -+++ ** The function 'assoc-delete-all' now takes an optional predicate argument. -+++ ** New function 'string-distance' to calculate the Levenshtein distance between two strings. -+++ ** 'print-quoted' now defaults to t, so if you want to see '(quote x)' instead of 'x you will have to bind it to nil where applicable. -+++ ** Numbers formatted via '%o' or '%x' are now formatted as signed integers. This avoids problems in calls like '(read (format "#x%x" -1))', and is more compatible with bignums. To get the traditional machine-dependent @@ -3408,12 +2879,10 @@ and if the new behavior breaks your code please email <32252@debbugs.gnu.org>. Because '%o' and '%x' can now format signed integers, they now support the '+' and space flags. -+++ ** In Emacs Lisp mode, symbols with confusable quotes are highlighted. For example, the first character in '‘foo' would be highlighted in 'font-lock-warning-face'. -+++ ** Omitting variables after '&optional' and '&rest' is now allowed. For example '(defun foo (&optional))' is no longer an error. This is sometimes convenient when writing macros. See the ChangeLog entry @@ -3421,7 +2890,6 @@ titled "Allow '&rest' or '&optional' without following variable (Bug#29165)" for a full listing of which arglists are accepted across versions. ---- ** Internal parsing commands now use 'syntax-ppss' and disregard 'open-paren-in-column-0-is-defun-start'. This affects mostly things like 'forward-comment', 'scan-sexps', and 'forward-sexp' when parsing backward. @@ -3432,7 +2900,6 @@ brackets at the start of a line inside documentation strings with a backslash, although there is no harm in doing so to make the code easier to edit with an older Emacs version. ---- ** New symbolic accessor functions for a parse state list. The new accessor functions 'ppss-depth', 'ppss-list-start', 'ppss-last-sexp-start', 'ppss-string-terminator', 'comment-depth', @@ -3440,37 +2907,30 @@ The new accessor functions 'ppss-depth', 'ppss-list-start', and 'two-character-syntax' can be used on the list value returned by 'parse-partial-sexp' and 'syntax-ppss'. ---- ** The 'server-name' and 'server-socket-dir' variables are set when a socket has been passed to Emacs. ---- ** The 'file-system-info' function is now available on all platforms. instead of just Microsoft platforms. This fixes a 'get-free-disk-space' bug on OS X 10.8 and later. ---- ** The function 'get-free-disk-space' returns now a non-nil value for remote systems, which support this check. -+++ ** 'memory-limit' now returns a better estimate of memory consumption. -+++ ** When interpreting 'gc-cons-percentage', Emacs now estimates the heap size more often and (we hope) more accurately. E.g., formerly '(progn (let ((gc-cons-percentage 0.8)) BODY1) BODY2)' continued to use the 0.8 value during BODY2 until the next garbage collection, but that is no longer true. Applications may need to re-tune their GC tricks. -+++ ** New macro 'combine-change-calls' arranges to call the change hooks ('before-change-functions' and 'after-change-functions') just once each around a sequence of lisp forms, given a region. This is useful when a function makes a possibly large number of repetitive changes and the change hooks are time consuming. -+++ ** 'eql', 'make-hash-table', etc. now treat NaNs consistently. Formerly, some of these functions ignored signs and significands of NaNs. Now, all these functions treat NaN signs and significands as @@ -3480,36 +2940,29 @@ Also, Emacs now reads and prints NaN significands; e.g., if X is a NaN, '(format "%s" X)' now returns "0.0e+NaN", "1.0e+NaN", etc., depending on X's significand. -+++ ** The function 'make-string' accepts an additional optional argument. If the optional third argument is non-nil, 'make-string' will produce a multibyte string even if its second argument is an ASCII character. ---- ** '(format "%d" X)' no longer mishandles a floating-point number X that does not fit in a machine integer. ---- ** New coding-system 'ibm038'. This is the International EBCDIC encoding, also available as aliases 'ebcdic-int' and 'cp038'. ---- ** New JSON parsing and serialization functions 'json-serialize', 'json-insert', 'json-parse-string', and 'json-parse-buffer'. These are implemented in C using the Jansson library. -+++ ** New function 'ring-resize'. 'ring-resize' can be used to grow or shrink a ring. -+++ ** New function 'flatten-tree'. 'flatten-list' is provided as an alias. These functions take a tree and 'flatten' it such that the result is a list of all the terminal nodes. -+++ ** 'zlib-decompress-region' can partially decompress corrupted data. If the new optional ALLOW-PARTIAL argument is passed, then the data that was decompressed successfully before failing will be inserted @@ -3517,23 +2970,19 @@ into the buffer. ** Image mode ---- *** New library Exif. An Exif library has been added that can parse JPEG files and output data about creation times and orientation and the like. 'exif-parse-file' and 'exif-parse-buffer' are the main interface functions. ---- *** 'image-mode' now uses this library to automatically rotate images according to the orientation in the Exif data, if any. -+++ *** The command 'image-rotate' now accepts a prefix argument. With a prefix argument, 'image-rotate' now rotates the image at point 90 degrees counter-clockwise, instead of the default clockwise. -+++ *** In 'image-mode' the image is resized automatically to fit in window. By default, the image will resize upon first display and whenever the window's dimensions change. Two user options 'image-auto-resize' and @@ -3542,20 +2991,17 @@ window's dimensions change. Two user options 'image-auto-resize' and key 's' contains the commands that can be used to fit the image to the window manually. ---- *** Some 'image-mode' variables are now buffer-local. The image parameters 'image-transform-rotation', 'image-transform-scale' and 'image-transform-resize' are now declared buffer-local, so each buffer could have its own values for these parameters. -+++ *** Three new 'image-mode' commands have been added: 'm', which marks the file in the dired buffer(s) for the directory the file is in; 'u', which unmarks the file; and 'w', which pushes the current buffer's file name to the kill ring. ---- *** New library image-converter. If you need to view exotic image formats for which Emacs doesn't have native support, customize the new user option @@ -3563,12 +3009,10 @@ native support, customize the new user option GraphicsMagick, ImageMagick or 'ffmpeg' installed, they will then be used to convert images automatically before displaying them. ---- *** 'auto-mode-alist' now includes many of the types typically supported by the external image converters, like WEPB, BMP and ICO. These now default to using 'image-mode'. ---- *** 'imagemagick-types-inhibit' disables using ImageMagick by default. 'image-mode' started using ImageMagick by default for all images some years back. It now respects 'imagemagick-types-inhibit' as a way @@ -3576,66 +3020,53 @@ to disable that. ** Modules ---- *** The function 'load' now behaves correctly when loading modules. Specifically, it puts the module name into 'load-history', prints loading messages if requested, and protects against recursive loads. -+++ *** New module environment function 'process_input' to process user input while module code is running. -+++ *** New module environment functions 'make_time' and 'extract_time' to convert between timespec structures and Emacs Lisp time values. -+++ *** New module environment functions 'make_big_integer' and 'extract_big_integer' to create and extract arbitrary-size integer values. -+++ *** emacs-module.h now defines a macro 'EMACS_MAJOR_VERSION' that expands to the major version of the latest Emacs supported by the header. -+++ ** The function 'read-variable' now uses its own history list. The history of variable names read by 'read-variable' is recorded in the new variable 'custom-variable-history'. ---- ** The functions 'string-to-unibyte' and 'string-to-multibyte' are no longer declared obsolete. We have found that there are legitimate use cases for these functions, where there's no better alternative. We believe that the incorrect uses of these functions all but disappeared by now, so we are un-obsoleting them. -+++ ** New function 'group-name' returns a group name corresponding to GID. -+++ ** 'make-process' now takes a keyword argument ':file-handler'; if that is non-nil, it will look for a file name handler for the current buffer's 'default-directory' and invoke that file name handler to make the process. That way 'make-process' can start remote processes. -+++ ** '(locale-info 'paper)' now returns the paper size on systems that support it. This is currently supported on GNUish hosts and on modern versions of MS-Windows. -+++ ** The function 'regexp-opt', when given an empty list of strings, now returns a regexp that never matches anything, which is an identity for this operation. Previously, the empty string was returned in this case. -+++ ** New constant 'regexp-unmatchable' contains a never-matching regexp. It is a convenient and readable way to specify a regexp that should not match anything, and is as fast as any such regexp can be. -+++ ** New functions to handle the URL variant of base-64 encoding. New functions 'base64url-encode-string' and 'base64url-encode-region' implement the url-variant of base-64 encoding as defined in RFC4648. @@ -3644,7 +3075,6 @@ The functions 'base64-decode-string' and 'base64-decode-region' now accept an optional argument to decode the URL variant of base-64 encoding. -+++ ** The function 'file-size-human-readable' accepts more optional arguments. The new third argument is a string put between the number and unit; it defaults to the empty string. The new fourth argument is a string @@ -3653,82 +3083,68 @@ argument is 'iec' and the empty string otherwise. We recommend a space or non-breaking space as third argument, and "B" as fourth argument, circumstances allowing. -+++ ** 'format-spec' has been expanded with several modifiers to allow greater flexibility when customizing variables. The modifiers include zero-padding, upper- and lower-casing, and limiting the length of the interpolated strings. The function has now also been documented in the Emacs Lisp manual. -+++ ** 'directory-files-recursively' can now take an optional PREDICATE parameter to control descending into subdirectories, and a FOLLOW-SYMLINK parameter to say that symbolic links that point to other directories should be followed. -+++ ** New function 'xor' returns the boolean exclusive-or of its args. The function was previously defined in array.el, but has been moved to subr.el so that it is available by default. It now always returns the non-nil argument when the other is nil. Several duplicates of 'xor' in other packages are now obsolete aliases of 'xor'. -+++ ** 'define-globalized-minor-mode' now takes BODY forms. -+++ ** New text property 'help-echo-inhibit-substitution'. Setting this on the first character of a help string disables conversions via 'substitute-command-keys'. -+++ ** New text property 'minibuffer-message'. Setting this on a character of the minibuffer text will display the temporary echo messages before that character, when messages need to be displayed while minibuffer is active. -+++ ** 'undo' can be made to ignore the active region for a command by setting 'undo-inhibit-region' symbol property of that command to non-nil. This is used by 'mouse-drag-region' to make the effect easier to undo immediately afterwards. ---- ** When called interactively, 'next-buffer' and 'previous-buffer' now signal 'user-error' if there is no buffer to switch to. * Changes in Emacs 27.1 on Non-Free Operating Systems ---- ** Battery status is now supported in all Cygwin builds. Previously it was supported only in the Cygwin-w32 build. ---- ** Emacs now handles key combinations involving the macOS "command" and "option" modifier keys more correctly. -+++ ** MacOS modifier key behavior is now more adjustable. The behavior of the macOS "Option", "Command", "Control" and "Function" keys can now be specified separately for use with ordinary keys, function keys and mouse clicks. This allows using them in their standard macOS way for composing characters. -+++ ** The special handling of 'frame-title-format' on NS where setting it to t would enable the macOS proxy icon has been replaced with a separate variable, 'ns-use-proxy-icon'. 'frame-title-format' will now work as on other platforms. ---- ** New primitive 'w32-read-registry'. This primitive lets Lisp programs access the MS-Windows Registry by retrieving values stored under a given key. It is intended to be used for supporting features such as XDG-like location of important files and directories. -+++ ** The default value of 'w32-pipe-read-delay' is now zero. This speeds up reading output from sub-processes that produce a lot of data. @@ -3739,7 +3155,6 @@ versions of MS-Windows. Set this variable to 50 if for some reason you need the old behavior (and please report such situations to Emacs developers). ---- ** New variable 'w32-multibyte-code-page'. This variable holds the value of the multibyte code page used by the system. It is usually zero, which indicates that 'w32-ansi-code-page' @@ -3747,12 +3162,10 @@ is being used, except in Far Eastern locales. When this variable is non-zero, Emacs at startup sets 'locale-coding-system' to the corresponding encoding, instead of using 'w32-ansi-code-page'. ---- ** The default value of 'inhibit-compacting-font-caches' is t on MS-Windows. Experience shows that compacting font caches causes more trouble on MS-Windows than it helps. -+++ ** Font lookup on MS-Windows was improved to support rare scripts. To activate the improvement, run the new function 'w32-find-non-USB-fonts' once per Emacs session, or assign to the new @@ -3760,13 +3173,11 @@ variable 'w32-non-USB-fonts' the list of scripts and the corresponding fonts. See the documentation of this function and variable in the Emacs manual for more details. -+++ ** On NS the behavior of drag and drop can now be modified by use of modifier keys in line with Apples guidelines. This makes the drag and drop behavior more consistent, as previously the sending application was able to 'set' modifiers without the knowledge of the user. ---- ** On NS multicolor font display is enabled again since it is also implemented in Emacs on free operating systems via Cairo drawing. commit 73a2f5104331264656ac830c848912af9389a04b Author: Philipp Stephani Date: Sun Jul 26 22:54:33 2020 +0200 Add another test for global module references * test/src/emacs-module-tests.el (mod-test-globref-reordered): New unit test. * test/data/emacs-module/mod-test.c (Fmod_test_globref_reordered): New test module function. (emacs_module_init): Export it. diff --git a/test/data/emacs-module/mod-test.c b/test/data/emacs-module/mod-test.c index 986c20ae8f..8d1b421bb4 100644 --- a/test/data/emacs-module/mod-test.c +++ b/test/data/emacs-module/mod-test.c @@ -205,6 +205,35 @@ Fmod_test_globref_invalid_free (emacs_env *env, ptrdiff_t nargs, return env->intern (env, "nil"); } +/* Allocate and free global references in a different order. */ + +static emacs_value +Fmod_test_globref_reordered (emacs_env *env, ptrdiff_t nargs, + emacs_value *args, void *data) +{ + emacs_value booleans[2] = { + env->intern (env, "nil"), + env->intern (env, "t"), + }; + emacs_value local = env->intern (env, "foo"); + emacs_value globals[4] = { + env->make_global_ref (env, local), + env->make_global_ref (env, local), + env->make_global_ref (env, env->intern (env, "foo")), + env->make_global_ref (env, env->intern (env, "bar")), + }; + emacs_value elements[4]; + for (int i = 0; i < 4; ++i) + elements[i] = booleans[env->eq (env, globals[i], local)]; + emacs_value ret = env->funcall (env, env->intern (env, "list"), 4, elements); + env->free_global_ref (env, globals[2]); + env->free_global_ref (env, globals[1]); + env->free_global_ref (env, globals[3]); + env->free_global_ref (env, globals[0]); + return ret; +} + + /* Return a copy of the argument string where every 'a' is replaced with 'b'. */ static emacs_value @@ -583,6 +612,8 @@ emacs_module_init (struct emacs_runtime *ert) DEFUN ("mod-test-globref-free", Fmod_test_globref_free, 4, 4, NULL, NULL); DEFUN ("mod-test-globref-invalid-free", Fmod_test_globref_invalid_free, 0, 0, NULL, NULL); + DEFUN ("mod-test-globref-reordered", Fmod_test_globref_reordered, 0, 0, NULL, + NULL); DEFUN ("mod-test-string-a-to-b", Fmod_test_string_a_to_b, 1, 1, NULL, NULL); DEFUN ("mod-test-userptr-make", Fmod_test_userptr_make, 1, 1, NULL, NULL); DEFUN ("mod-test-userptr-get", Fmod_test_userptr_get, 1, 1, NULL, NULL); diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el index e9f13ba368..91206156f8 100644 --- a/test/src/emacs-module-tests.el +++ b/test/src/emacs-module-tests.el @@ -160,6 +160,9 @@ changes." (ert-deftest mod-test-globref-free-test () (should (eq (mod-test-globref-free 1 'a "test" 'b) 'ok))) +(ert-deftest mod-test-globref-reordered () + (should (equal (mod-test-globref-reordered) '(t t t nil)))) + (ert-deftest mod-test-string-a-to-b-test () (should (string= (mod-test-string-a-to-b "aaa") "bbb"))) commit 3838aeb7397ce80134c70fd49f7e9e5ef7aff3e5 Author: Philipp Stephani Date: Sat Jul 25 23:23:19 2020 +0200 Backport: add another test case for module assertions. This backports commit 9f01ce6327 from master. Since the bug isn’t present on emacs-27, just backport the new test case. * test/data/emacs-module/mod-test.c (Fmod_test_globref_invalid_free): New test module function. (emacs_module_init): Export it. * test/src/emacs-module-tests.el (module--test-assertions--globref-invalid-free): New unit test. diff --git a/test/data/emacs-module/mod-test.c b/test/data/emacs-module/mod-test.c index f6c1c7cf3d..986c20ae8f 100644 --- a/test/data/emacs-module/mod-test.c +++ b/test/data/emacs-module/mod-test.c @@ -191,7 +191,19 @@ Fmod_test_globref_free (emacs_env *env, ptrdiff_t nargs, emacs_value args[], return env->intern (env, "ok"); } +/* Treat a local reference as global and free it. Module assertions + should detect this case even if a global reference representing the + same object also exists. */ +static emacs_value +Fmod_test_globref_invalid_free (emacs_env *env, ptrdiff_t nargs, + emacs_value *args, void *data) +{ + emacs_value local = env->make_integer (env, 9876); + env->make_global_ref (env, local); + env->free_global_ref (env, local); /* Not allowed. */ + return env->intern (env, "nil"); +} /* Return a copy of the argument string where every 'a' is replaced with 'b'. */ @@ -569,6 +581,8 @@ emacs_module_init (struct emacs_runtime *ert) 1, 1, NULL, NULL); DEFUN ("mod-test-globref-make", Fmod_test_globref_make, 0, 0, NULL, NULL); DEFUN ("mod-test-globref-free", Fmod_test_globref_free, 4, 4, NULL, NULL); + DEFUN ("mod-test-globref-invalid-free", Fmod_test_globref_invalid_free, 0, 0, + NULL, NULL); DEFUN ("mod-test-string-a-to-b", Fmod_test_string_a_to_b, 1, 1, NULL, NULL); DEFUN ("mod-test-userptr-make", Fmod_test_userptr_make, 1, 1, NULL, NULL); DEFUN ("mod-test-userptr-get", Fmod_test_userptr_get, 1, 1, NULL, NULL); diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el index de707a4243..e9f13ba368 100644 --- a/test/src/emacs-module-tests.el +++ b/test/src/emacs-module-tests.el @@ -299,6 +299,17 @@ during garbage collection." (mod-test-invalid-finalizer) (garbage-collect))) +(ert-deftest module--test-assertions--globref-invalid-free () + "Check that -module-assertions detects invalid freeing of a +local reference." + (skip-unless (or (file-executable-p mod-test-emacs) + (and (eq system-type 'windows-nt) + (file-executable-p (concat mod-test-emacs ".exe"))))) + (module--test-assertion + (rx "Global value was not found in list of " (+ digit) " globals") + (mod-test-globref-invalid-free) + (garbage-collect))) + (ert-deftest module/describe-function-1 () "Check that Bug#30163 is fixed." (with-temp-buffer commit bde5f5f8978f704f24cce2fc7beec8c740d0e331 Author: Philipp Stephani Date: Sat Jul 25 23:04:05 2020 +0200 Backport: Add module test for edge case. This backports commit 6355a3ec62 from master. Since the bug isn’t present in emacs-27, just backport the test case. * test/data/emacs-module/mod-test.c (Fmod_test_invalid_store_copy): New test module function. (emacs_module_init): Export it. * test/src/emacs-module-tests.el (module--test-assertions--load-non-live-object-with-global-copy): New unit test. diff --git a/test/data/emacs-module/mod-test.c b/test/data/emacs-module/mod-test.c index 8dc9ff144a..f6c1c7cf3d 100644 --- a/test/data/emacs-module/mod-test.c +++ b/test/data/emacs-module/mod-test.c @@ -296,6 +296,22 @@ Fmod_test_invalid_load (emacs_env *env, ptrdiff_t nargs, emacs_value *args, return invalid_stored_value; } +/* The next function works in conjunction with the two previous ones. + It stows away a copy of the object created by + `Fmod_test_invalid_store' in a global reference. Module assertions + should still detect the invalid load of the local reference. */ + +static emacs_value global_copy_of_invalid_stored_value; + +static emacs_value +Fmod_test_invalid_store_copy (emacs_env *env, ptrdiff_t nargs, + emacs_value *args, void *data) +{ + emacs_value local = Fmod_test_invalid_store (env, 0, NULL, NULL); + return global_copy_of_invalid_stored_value + = env->make_global_ref (env, local); +} + /* An invalid finalizer: Finalizers are run during garbage collection, where Lisp code can’t be executed. -module-assertions tests for this case. */ @@ -559,6 +575,8 @@ emacs_module_init (struct emacs_runtime *ert) DEFUN ("mod-test-vector-fill", Fmod_test_vector_fill, 2, 2, NULL, NULL); DEFUN ("mod-test-vector-eq", Fmod_test_vector_eq, 2, 2, NULL, NULL); DEFUN ("mod-test-invalid-store", Fmod_test_invalid_store, 0, 0, NULL, NULL); + DEFUN ("mod-test-invalid-store-copy", Fmod_test_invalid_store_copy, 0, 0, + NULL, NULL); DEFUN ("mod-test-invalid-load", Fmod_test_invalid_load, 0, 0, NULL, NULL); DEFUN ("mod-test-invalid-finalizer", Fmod_test_invalid_finalizer, 0, 0, NULL, NULL); diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el index 6f14d4f7fa..de707a4243 100644 --- a/test/src/emacs-module-tests.el +++ b/test/src/emacs-module-tests.el @@ -270,6 +270,24 @@ must evaluate to a regular expression string." (mod-test-invalid-store) (mod-test-invalid-load))) +(ert-deftest module--test-assertions--load-non-live-object-with-global-copy () + "Check that -module-assertions verify that non-live objects aren't accessed. +This differs from `module--test-assertions-load-non-live-object' +in that it stows away a global reference. The module assertions +should nevertheless detect the invalid load." + (skip-unless (or (file-executable-p mod-test-emacs) + (and (eq system-type 'windows-nt) + (file-executable-p (concat mod-test-emacs ".exe"))))) + ;; This doesn't yet cause undefined behavior. + (should (eq (mod-test-invalid-store-copy) 123)) + (module--test-assertion (rx "Emacs value not found in " + (+ digit) " values of " + (+ digit) " environments\n") + ;; Storing and reloading a local value causes undefined behavior, + ;; which should be detected by the module assertions. + (mod-test-invalid-store-copy) + (mod-test-invalid-load))) + (ert-deftest module--test-assertions--call-emacs-from-gc () "Check that -module-assertions prevents calling Emacs functions during garbage collection." commit 4b3085a7fe8980432aa63ddf614fee2a6fb04e94 Author: Eli Zaretskii Date: Sat Jul 25 19:25:02 2020 +0300 Fix last change * src/composite.c (composition_reseat_it): Fix of the commentary, and a minor change of the last fix. diff --git a/src/composite.c b/src/composite.c index 2fbe6796b5..a5288cb8a2 100644 --- a/src/composite.c +++ b/src/composite.c @@ -1171,7 +1171,9 @@ composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos, character to check, and CHARPOS and BYTEPOS are indices in the string. In that case, FACE must not be NULL. BIDI_LEVEL is the bidi embedding level of the current paragraph, and is used to calculate the - direction argument to pass to the font shaper. + direction argument to pass to the font shaper; value of -1 means the + caller doesn't know the embedding level (used by callers which didn't + invoke the display routines that perform bidi-display-reordering). If the character is composed, setup members of CMP_IT (id, nglyphs, from, to, reversed_p), and return true. Otherwise, update @@ -1256,7 +1258,16 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos, else bpos = CHAR_TO_BYTE (cpos); } - if ((bidi_level & 1) == 0) + /* The bidi_level < 0 case below strictly speaking should + never happen, since we get here when bidi scan direction + is backward in the buffer, which can only happen if the + display routines were called to perform the bidi + reordering. But it doesn't harm to test for that, and + avoid someon raising their brows and thinking it's a + subtle bug... */ + if (bidi_level < 0) + direction = Qnil; + else if ((bidi_level & 1) == 0) direction = QL2R; else direction = QR2L; commit efdd4632c95cc6be6efc099cfed051022fff7a84 Author: Pip Cet Date: Fri Jun 5 12:54:01 2020 +0000 Fix Arabic shaping when column-number-mode is in effect * src/indent.c (scan_for_column, compute_motion): Pass -1, instead of NEUTRAL_DIR, to 'composition_reseat_it'. * src/composite.c (composition_reseat_it): Interpret negative value of BIDI_LEVEL to mean the caller doesn't know what is the bidi direction of the text. (Bug#41005) diff --git a/src/composite.c b/src/composite.c index 364d5c9316..2fbe6796b5 100644 --- a/src/composite.c +++ b/src/composite.c @@ -1217,7 +1217,9 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos, continue; if (charpos < endpos) { - if ((bidi_level & 1) == 0) + if (bidi_level < 0) + direction = Qnil; + else if ((bidi_level & 1) == 0) direction = QL2R; else direction = QR2L; diff --git a/src/indent.c b/src/indent.c index f7db42783c..939e5931db 100644 --- a/src/indent.c +++ b/src/indent.c @@ -598,7 +598,7 @@ scan_for_column (ptrdiff_t *endpos, EMACS_INT *goalcol, ptrdiff_t *prevcol) if (cmp_it.id >= 0 || (scan == cmp_it.stop_pos && composition_reseat_it (&cmp_it, scan, scan_byte, end, - w, NEUTRAL_DIR, NULL, Qnil))) + w, -1, NULL, Qnil))) composition_update_it (&cmp_it, scan, scan_byte, Qnil); if (cmp_it.id >= 0) { @@ -1506,7 +1506,7 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos, if (cmp_it.id >= 0 || (pos == cmp_it.stop_pos && composition_reseat_it (&cmp_it, pos, pos_byte, to, win, - NEUTRAL_DIR, NULL, Qnil))) + -1, NULL, Qnil))) composition_update_it (&cmp_it, pos, pos_byte, Qnil); if (cmp_it.id >= 0) { commit d5acc509415869bce22c49ae311f2960494a0bdc Author: Eli Zaretskii Date: Fri Jul 24 17:47:59 2020 +0300 Fix description of kmacro-* commands in the user manual * doc/emacs/kmacro.texi (Basic Keyboard Macro): Separate old-style macro definition commands from the new style in the summary table. (Bug#42492) diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi index 7e5085cd2f..7b1d365ff0 100644 --- a/doc/emacs/kmacro.texi +++ b/doc/emacs/kmacro.texi @@ -49,23 +49,30 @@ intelligent or general. For such things, Lisp must be used. @table @kbd @item @key{F3} -@itemx C-x ( Start defining a keyboard macro (@code{kmacro-start-macro-or-insert-counter}). @item @key{F4} -@itemx C-x e If a keyboard macro is being defined, end the definition; otherwise, execute the most recent keyboard macro (@code{kmacro-end-or-call-macro}). @item C-u @key{F3} -@itemx C-u C-x ( Re-execute last keyboard macro, then append keys to its definition. @item C-u C-u @key{F3} -@itemx C-u C-u C-x ( Append keys to the last keyboard macro without re-executing it. @item C-x C-k r Run the last keyboard macro on each line that begins in the region (@code{apply-macro-to-region-lines}). +@item C-x ( +Start defining a keyboard macro (old style) +(@code{kmacro-start-macro}); with a prefix argument, append keys to +the last macro. +@item C-x ) +End a macro definition (old style) (@code{kmacro-end-macro}); prefix +argument serves as the repeat count for executing the macro. +@item C-x e +Execute the most recently defined keyboard macro +(@code{kmacro-end-and-call-macro}); prefix argument serves as repeat +count. @end table @kindex F3 commit 96a3b473fa5e152bf2f069f9eca10c370b311c25 Author: Lars Ingebrigtsen Date: Thu Jul 23 17:12:33 2020 +0200 Fix viewing of encrypted S/MIME messages * lisp/gnus/mm-decode.el (mm-possibly-verify-or-decrypt): Don't add a content-type header if there already is one (bug#41659). diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index d33bb56dc9..a340418507 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -1680,8 +1680,14 @@ If RECURSIVE, search recursively." (t (y-or-n-p (format "Decrypt (S/MIME) part? ")))) (mm-view-pkcs7 parts from)) - (goto-char (point-min)) - (insert "Content-type: text/plain\n\n") + ;; Normally there will be a Content-type header here, but + ;; some mailers don't add that to the encrypted part, which + ;; makes the subsequent re-dissection fail here. + (save-restriction + (mail-narrow-to-head) + (unless (mail-fetch-field "content-type") + (goto-char (point-max)) + (insert "Content-type: text/plain\n\n"))) (setq parts (mm-dissect-buffer t))))) ((equal subtype "signed") (unless (and (setq protocol