commit 0df8f481dde9b46c8566db6b432191f374cd578c (HEAD, refs/remotes/origin/master) Author: Eli Zaretskii Date: Sun Aug 14 09:34:37 2022 +0300 ; * src/xdisp.c (display_line): Fix a typo. diff --git a/src/xdisp.c b/src/xdisp.c index 719b131baa..7ee42918eb 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -24608,10 +24608,9 @@ display_line (struct it *it, int cursor_vpos) walking there. */ ptrdiff_t chars_to_skip = it->first_visible_x / FRAME_COLUMN_WIDTH (it->f); - enum move_it_result rc = - fast_move_it_horizontally (it, chars_to_skip); + move_result = fast_move_it_horizontally (it, chars_to_skip); - if (rc == MOVE_X_REACHED) + if (move_result == MOVE_X_REACHED) it->current_x = it->first_visible_x; else /* use arbitrary value < first_visible_x */ it->current_x = it->first_visible_x - FRAME_COLUMN_WIDTH (it->f); commit 47e23ad7a82bd707dedcd17425e89e8024b5a763 Author: Po Lu Date: Sun Aug 14 09:39:08 2022 +0800 More fixes to MPX drag-and-drop interaction * src/xterm.c (x_dnd_begin_drag_and_drop): Also initialize the keyboard device used for drag-and-drop. (handle_one_xevent): Verify deviceid in more places; also test keyboard device before swallowing F1. diff --git a/src/xterm.c b/src/xterm.c index e48d6fd251..6cf44e162b 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -1402,6 +1402,9 @@ static bool x_dnd_last_tooltip_valid; /* The master pointer device being used for the drag-and-drop operation. */ static int x_dnd_pointer_device; + +/* The keyboard device attached to that pointer device. */ +static int x_dnd_keyboard_device; #endif /* Structure describing a single window that can be the target of @@ -11976,6 +11979,9 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction, struct x_display_info *event_display; #endif unsigned int additional_mask; +#ifdef HAVE_XINPUT2 + struct xi_device_t *device; +#endif base = SPECPDL_INDEX (); @@ -12171,6 +12177,14 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction, /* This returns Bool but cannot actually fail. */ XIGetClientPointer (FRAME_X_DISPLAY (f), None, &x_dnd_pointer_device); + + x_dnd_keyboard_device = -1; + + device = xi_device_from_id (FRAME_DISPLAY_INFO (f), + x_dnd_pointer_device); + + if (device) + x_dnd_keyboard_device = device->attachment; } #endif @@ -21000,6 +21014,12 @@ handle_one_xevent (struct x_display_info *dpyinfo, operation, don't send an event. We only have to set the user time. */ if (x_dnd_in_progress + /* If another master device moved the + pointer, we should put a wheel event on + the keyboard buffer as usual. It will be + run once the drag-and-drop operation + completes. */ + && xev->deviceid == x_dnd_pointer_device && (command_loop_level + minibuf_level <= x_dnd_recursion_depth) && dpyinfo == FRAME_DISPLAY_INFO (x_dnd_frame)) @@ -22306,7 +22326,9 @@ handle_one_xevent (struct x_display_info *dpyinfo, inev.ie.modifiers = x_x_to_emacs_modifiers (dpyinfo, state); #ifdef XK_F1 - if (x_dnd_in_progress && keysym == XK_F1) + if (x_dnd_in_progress + && xev->deviceid == x_dnd_keyboard_device + && keysym == XK_F1) { x_dnd_xm_use_help = true; goto xi_done_keysym; commit 15c20cb4fe9a43a96fc0d80c442741b8d2e21bc7 Author: Philip Kaludercic Date: Sat Aug 13 22:33:46 2022 +0200 ; * etc/NEWS: Fix typo. diff --git a/etc/NEWS b/etc/NEWS index e2bccca4a8..2b942f67b0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2888,7 +2888,7 @@ This is like 'get-text-property', but works on the 'display' text property. +++ -** New function 'add-text-display-property'. +** New function 'add-display-text-property'. This is like 'put-text-property', but works on the 'display' text property. commit 864847bf3c9f041256e32353b323ddafee86f6da Author: Basil L. Contovounesios Date: Sat Aug 13 21:59:39 2022 +0300 Document time-convert FORM argument as mandatory This is a followup to commit b70369c557 of 2022-08-05 "time-convert): Deprecate calls without an explicit FORM arg". * doc/lispref/os.texi (Time Conversion): * src/timefns.c (Ftime_convert): Describe FORM argument as required as per the advertised calling convention. diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index d591b219cd..3582801841 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1544,11 +1544,11 @@ as traditional Gregorian years do; for example, the year number @defun time-convert time form This function converts a time value into a Lisp timestamp. -The optional @var{form} argument specifies the timestamp form to be -returned. If @var{form} is the symbol @code{integer}, this function -returns an integer count of seconds. If @var{form} is a positive -integer, it specifies a clock frequency and this function returns an -integer-pair timestamp @code{(@var{ticks} . @var{form})}. If @var{form} is +The @var{form} argument specifies the timestamp form to be returned. +If @var{form} is the symbol @code{integer}, this function returns an +integer count of seconds. If @var{form} is a positive integer, it +specifies a clock frequency and this function returns an integer-pair +timestamp @code{(@var{ticks} . @var{form})}. If @var{form} is @code{t}, this function treats it as a positive integer suitable for representing the timestamp; for example, it is treated as 1000000000 if @var{time} is @code{nil} and the platform timestamp has nanosecond diff --git a/src/timefns.c b/src/timefns.c index 8b1e729d4f..7db50ea81c 100644 --- a/src/timefns.c +++ b/src/timefns.c @@ -1714,11 +1714,10 @@ usage: (encode-time TIME &rest OBSOLESCENT-ARGUMENTS) */) } DEFUN ("time-convert", Ftime_convert, Stime_convert, 1, 2, 0, - doc: /* Convert TIME value to a Lisp timestamp. -With optional FORM, convert to that timestamp form. + doc: /* Convert TIME value to a Lisp timestamp of the given FORM. Truncate the returned value toward minus infinity. -If FORM is nil (the default), return the same form as `current-time'. +If FORM is nil, return the same form as `current-time'. If FORM is a positive integer, return a pair of integers (TICKS . FORM), where TICKS is the number of clock ticks and FORM is the clock frequency commit 0a9375938529c7603f19204cd166716f63e8a640 Author: Stefan Kangas Date: Sat Aug 13 20:30:12 2022 +0200 Improve time-convert docstring formatting for readability * src/timefns.c (Ftime_convert): Doc fix; improve formatting for readability. diff --git a/src/timefns.c b/src/timefns.c index 1112f17476..8b1e729d4f 100644 --- a/src/timefns.c +++ b/src/timefns.c @@ -1719,14 +1719,20 @@ With optional FORM, convert to that timestamp form. Truncate the returned value toward minus infinity. If FORM is nil (the default), return the same form as `current-time'. + If FORM is a positive integer, return a pair of integers (TICKS . FORM), where TICKS is the number of clock ticks and FORM is the clock frequency -in ticks per second. If FORM is t, return (TICKS . PHZ), where -PHZ is a suitable clock frequency in ticks per second. If FORM is -`integer', return an integer count of seconds. If FORM is `list', -return an integer list (HIGH LOW USEC PSEC), where HIGH has the most -significant bits of the seconds, LOW has the least significant 16 -bits, and USEC and PSEC are the microsecond and picosecond counts. */) +in ticks per second. + +If FORM is t, return (TICKS . PHZ), where PHZ is a suitable clock +frequency in ticks per second. + +If FORM is `integer', return an integer count of seconds. + +If FORM is `list', return an integer list (HIGH LOW USEC PSEC), where +HIGH has the most significant bits of the seconds, LOW has the least +significant 16 bits, and USEC and PSEC are the microsecond and +picosecond counts. */) (Lisp_Object time, Lisp_Object form) { struct lisp_time t; commit dd2973bf5040d26d29a937d252eeaf2884dca9fb Author: Stefan Monnier Date: Sat Aug 13 12:03:22 2022 -0400 nadvice.el: Avoid exponential blow up in interactive-form recursion * lisp/emacs-lisp/nadvice.el (advice--interactive-form): Sink the call to `commandp` into the autoloaded function case since it's redundant in the other branch. (advice--make-interactive-form): Take just the interactive forms rather than the actual functions as arguments. (oclosure-interactive-form): Use `advice--interactive-form` rather than `commandp` since we'd call `advice--interactive-form` afterwards anyway. diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el index 2d5a1b5e77..86f26fc0d8 100644 --- a/lisp/emacs-lisp/nadvice.el +++ b/lisp/emacs-lisp/nadvice.el @@ -167,31 +167,31 @@ DOC is a string where \"FUNCTION\" and \"OLDFUN\" are expected.") (defun advice--interactive-form (function) "Like `interactive-form' but tries to avoid autoloading functions." - (when (commandp function) - (if (not (and (symbolp function) (autoloadp (indirect-function function)))) - (interactive-form function) - `(interactive (advice-eval-interactive-spec + (if (not (and (symbolp function) (autoloadp (indirect-function function)))) + (interactive-form function) + (when (commandp function) + `(interactive (advice--eval-interactive-spec (cadr (interactive-form ',function))))))) -(defun advice--make-interactive-form (function main) +(defun advice--make-interactive-form (iff ifm) ;; TODO: make it so that interactive spec can be a constant which ;; dynamically checks the advice--car/cdr to do its job. ;; For that, advice-eval-interactive-spec needs to be more faithful. - (let* ((iff (advice--interactive-form function)) - (ifm (advice--interactive-form main)) - (fspec (cadr iff))) + (let* ((fspec (cadr iff))) (when (eq 'function (car-safe fspec)) ;; Macroexpanded lambda? - (setq fspec (nth 1 fspec))) + (setq fspec (eval fspec t))) (if (functionp fspec) `(funcall ',fspec ',(cadr ifm)) (cadr (or iff ifm))))) (cl-defmethod oclosure-interactive-form ((ad advice) &optional _) - (let ((car (advice--car ad)) - (cdr (advice--cdr ad))) - (when (or (commandp car) (commandp cdr)) - `(interactive ,(advice--make-interactive-form car cdr))))) + (let* ((car (advice--car ad)) + (cdr (advice--cdr ad)) + (ifa (advice--interactive-form car)) + (ifd (advice--interactive-form cdr))) + (when (or ifa ifd) + `(interactive ,(advice--make-interactive-form ifa ifd))))) (cl-defmethod cl-print-object ((object advice) stream) (cl-assert (advice--p object)) commit a1cf3b96f84794b708a9d80281d4e9deadfb610c Author: Eli Zaretskii Date: Sat Aug 13 18:52:46 2022 +0300 ; Fix documentation of 'deactivate-mark' * src/keyboard.c (syms_of_keyboard): * etc/NEWS: Fix the documentation of 'deactivate-mark' and its new value 'dont-save'. (Bug#57147) diff --git a/etc/NEWS b/etc/NEWS index 4f1ae74514..e2bccca4a8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2570,10 +2570,10 @@ patcomp.el, pc-mode.el, pc-select.el, s-region.el, and sregex.el. * Lisp Changes in Emacs 29.1 --- -** New 'dont-save' value of 'deactivate-mark'. +** 'deactivate-mark' can have new value 'dont-save'. This value means that Emacs should deactivate the mark as usual, but -without setting the primary selection should 'select-active-regions' -be enabled. +without setting the primary selection, if 'select-active-regions' is +enabled. +++ ** New 'declare' form 'interactive-args'. diff --git a/src/keyboard.c b/src/keyboard.c index 05c68ea7fb..8a2b7d58c4 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -12650,14 +12650,17 @@ cancels any modification. */); DEFSYM (Qdeactivate_mark, "deactivate-mark"); DEFVAR_LISP ("deactivate-mark", Vdeactivate_mark, - doc: /* If an editing command sets this to t, deactivate the mark afterward. + doc: /* Whether to deactivate the mark after an editing command. The command loop sets this to nil before each command, and tests the value when the command returns. -Buffer modification stores t in this variable. +If an editing command sets this non-nil, deactivate the mark after +the command returns. + +Buffer modifications store t in this variable. By default, deactivating the mark will save the contents of the region -according to `select-active-regions'. If this is set to the symbol -`dont-save', the region will not be saved.*/); +according to `select-active-regions', unless this is set to the symbol +`dont-save'. */); Vdeactivate_mark = Qnil; Fmake_variable_buffer_local (Qdeactivate_mark); commit f289a17c068e5486f6d8fa695b4c36bcb9978996 Author: Stefan Kangas Date: Sat Aug 13 17:40:17 2022 +0200 Update Gnus Installation FAQ * doc/misc/gnus-faq.texi (FAQ 1-1, FAQ 1-2, FAQ 1-3, FAQ 1-4) (FAQ 1-5): Update to reflect that Gnus is no longer released separately from Emacs. Delete FAQ on Gnus 5.10, released in May 2003. diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi index ee179ba0d0..8aa8b1b49b 100644 --- a/doc/misc/gnus-faq.texi +++ b/doc/misc/gnus-faq.texi @@ -98,9 +98,8 @@ misprints are the Gnus team's fault, sorry. @menu * FAQ 1-1:: What is the latest version of Gnus? -* FAQ 1-2:: What's new in 5.10? -* FAQ 1-3:: Where and how to get Gnus? -* FAQ 1-4:: I sometimes read references to No Gnus and Oort Gnus, +* FAQ 1-2:: Where and how to get Gnus? +* FAQ 1-3:: I sometimes read references to No Gnus and Oort Gnus, what are those? @end menu @@ -111,69 +110,30 @@ What is the latest version of Gnus? @subsubheading Answer -Jingle please: Gnus 5.10 is released, get it while it's -hot! As well as the step in version number is rather -small, Gnus 5.10 has tons of new features which you -shouldn't miss. The current release (5.13) should be at -least as stable as the latest release of the 5.8 series. +The latest version of Gnus is bundled with Emacs. @node FAQ 1-2 @subsubheading Question 1.2 -What's new in 5.10? - -@subsubheading Answer - -First of all, you should have a look into the file -GNUS-NEWS in the toplevel directory of the Gnus tarball, -there the most important changes are listed. Here's a -short list of the changes I find especially -important/interesting: - -@itemize @bullet - -@item -Major rewrite of the Gnus agent, Gnus agent is now -active by default. - -@item -Many new article washing functions for dealing with -ugly formatted articles. - -@item -Anti Spam features. - -@item -Message-utils now included in Gnus. - -@item -New format specifiers for summary lines, e.g., %B for -a complex trn-style thread tree. -@end itemize - -@node FAQ 1-3 -@subsubheading Question 1.3 - Where and how to get Gnus? @subsubheading Answer Gnus is bundled with Emacs. -@node FAQ 1-4 -@subsubheading Question 1.4 +@node FAQ 1-3 +@subsubheading Question 1.3 I sometimes read references to No Gnus and Oort Gnus, what are those? @subsubheading Answer -Oort Gnus was the name of the development version of -Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is -the name of the current development version which will -once become Gnus 5.12 or Gnus 6. (If you're wondering why -not 5.11, the odd version numbers are normally used for -the Gnus versions bundled with Emacs) +Oort Gnus was the name of the development version of Gnus, which +became Gnus 5.10 in autumn 2003. No Gnus was the name of the +development version that become Gnus 5.12. (If you're wondering why +not 5.11, the odd version numbers are normally used for the Gnus +versions bundled with Emacs.) @node FAQ 2 - Startup / Group buffer @subsection Startup / Group buffer commit 9d6d3b0edb14df42a46bb4bcf1525c47006ead9b Author: Stefan Kangas Date: Sat Aug 13 17:29:36 2022 +0200 Make many gnus version variables obsolete Many haven't been bumped since 1997, others not since 2004. * lisp/gnus/deuglify.el (gnus-outlook-deuglify-version): * lisp/gnus/gnus-diary.el (gnus-diary-version): * lisp/gnus/nnagent.el (nnagent-version): * lisp/gnus/nnbabyl.el (nnbabyl-version): * lisp/gnus/nndiary.el (nndiary-version): * lisp/gnus/nndir.el (nndir-version): * lisp/gnus/nndoc.el (nndoc-version): * lisp/gnus/nndraft.el (nndraft-version): * lisp/gnus/nneething.el (nneething-version): * lisp/gnus/nnfolder.el (nnfolder-version): * lisp/gnus/nnmaildir.el (nnmaildir-version): * lisp/gnus/nnmbox.el (nnmbox-version): * lisp/gnus/nnmh.el (nnmh-version): * lisp/gnus/nnml.el (nnml-version): * lisp/gnus/nnrss.el (nnrss-version): * lisp/gnus/nnspool.el (nnspool-version): * lisp/gnus/nntp.el (nntp-version): * lisp/gnus/nnvirtual.el (nnvirtual-version): Make obsolete in favor of emacs-version. diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el index 732c6062b8..41fc2d83ac 100644 --- a/lisp/gnus/deuglify.el +++ b/lisp/gnus/deuglify.el @@ -223,6 +223,7 @@ (defconst gnus-outlook-deuglify-version "1.5 Gnus version" "Version of gnus-outlook-deuglify.") +(make-obsolete-variable 'gnus-outlook-deuglify-version 'emacs-version "29.1") ;;; User Customizable Variables: diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el index cd2b53064b..6028d4fcb2 100644 --- a/lisp/gnus/gnus-diary.el +++ b/lisp/gnus/gnus-diary.el @@ -65,8 +65,9 @@ There are currently two built-in format functions: (const :tag "french" gnus-diary-delay-format-french) (symbol :tag "other"))) -(defconst gnus-diary-version nndiary-version +(defconst gnus-diary-version "0.2-b14" "Current Diary back end version.") +(make-obsolete-variable 'gnus-diary-version 'emacs-version "29.1") ;; Compatibility functions ================================================== @@ -377,8 +378,9 @@ If ARG (or prefix) is non-nil, force prompting for all fields." (defun gnus-diary-version () "Current Diary back end version." + (declare (obsolete emacs-version "29.1")) (interactive) - (message "NNDiary version %s" nndiary-version)) + (message "NNDiary version %s" gnus-diary-version)) (provide 'gnus-diary) diff --git a/lisp/gnus/nnagent.el b/lisp/gnus/nnagent.el index 60140a4641..d7e32e4580 100644 --- a/lisp/gnus/nnagent.el +++ b/lisp/gnus/nnagent.el @@ -35,6 +35,7 @@ (defconst nnagent-version "nnagent 1.0") +(make-obsolete-variable 'nnagent-version 'emacs-version "29.1") (defvoo nnagent-directory nil "Internal variable." diff --git a/lisp/gnus/nnbabyl.el b/lisp/gnus/nnbabyl.el index ff0dea8ecd..5f9903a5b0 100644 --- a/lisp/gnus/nnbabyl.el +++ b/lisp/gnus/nnbabyl.el @@ -55,6 +55,7 @@ (defconst nnbabyl-version "nnbabyl 1.0" "nnbabyl version.") +(make-obsolete-variable 'nnbabyl-version 'emacs-version "29.1") (defvoo nnbabyl-mbox-buffer nil) (defvoo nnbabyl-current-group nil) diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el index bd60c43f59..14540ac7e8 100644 --- a/lisp/gnus/nndiary.el +++ b/lisp/gnus/nndiary.el @@ -234,9 +234,11 @@ all. This may very well take some time.") (defconst nndiary-version "0.2-b14" "Current Diary back end version.") +(make-obsolete-variable 'nndiary-version 'emacs-version "29.1") (defun nndiary-version () "Current Diary back end version." + (declare (obsolete emacs-version "29.1")) (interactive) (message "NNDiary version %s" nndiary-version)) diff --git a/lisp/gnus/nndir.el b/lisp/gnus/nndir.el index 2ca25534ce..75a6ace107 100644 --- a/lisp/gnus/nndir.el +++ b/lisp/gnus/nndir.el @@ -48,6 +48,7 @@ (defvoo nndir-status-string "" nil nnmh-status-string) (defconst nndir-version "nndir 1.0") +(make-obsolete-variable 'nndir-version 'emacs-version "29.1") diff --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el index 19ccce47b5..cdff7c9acc 100644 --- a/lisp/gnus/nndoc.el +++ b/lisp/gnus/nndoc.el @@ -218,6 +218,7 @@ from the document.") (defconst nndoc-version "nndoc 1.0" "nndoc version.") +(make-obsolete-variable 'nndoc-version 'emacs-version "29.1") diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el index fa88b8a87e..f21e4faf55 100644 --- a/lisp/gnus/nndraft.el +++ b/lisp/gnus/nndraft.el @@ -56,6 +56,7 @@ are generated if and only if they are also in `message-draft-headers'." (defvoo nndraft-current-directory nil nil nnmh-current-directory) (defconst nndraft-version "nndraft 1.0") +(make-obsolete-variable 'nndraft-version 'emacs-version "29.1") (defvoo nndraft-status-string "" nil nnmh-status-string) diff --git a/lisp/gnus/nneething.el b/lisp/gnus/nneething.el index 0c565a8230..ff72842a2e 100644 --- a/lisp/gnus/nneething.el +++ b/lisp/gnus/nneething.el @@ -57,6 +57,7 @@ included.") (defconst nneething-version "nneething 1.0" "nneething version.") +(make-obsolete-variable 'nneething-version 'emacs-version "29.1") (defvoo nneething-current-directory nil "Current news group directory.") diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el index c3f7073a7b..a2b461c15f 100644 --- a/lisp/gnus/nnfolder.el +++ b/lisp/gnus/nnfolder.el @@ -91,6 +91,7 @@ message, a huge time saver for large mailboxes.") (defconst nnfolder-version "nnfolder 2.0" "nnfolder version.") +(make-obsolete-variable 'nnfolder-version 'emacs-version "29.1") (defconst nnfolder-article-marker "X-Gnus-Article-Number: " "String used to demarcate what the article number for a message is.") diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el index 3dc74c95fb..4d1ecbf864 100644 --- a/lisp/gnus/nnmaildir.el +++ b/lisp/gnus/nnmaildir.el @@ -62,6 +62,7 @@ (require 'subr-x)) (defconst nnmaildir-version "Gnus") +(make-obsolete-variable 'nnmaildir-version 'emacs-version "29.1") (defconst nnmaildir-flag-mark-mapping '((?F . tick) diff --git a/lisp/gnus/nnmbox.el b/lisp/gnus/nnmbox.el index 96ecc34e15..5735c97805 100644 --- a/lisp/gnus/nnmbox.el +++ b/lisp/gnus/nnmbox.el @@ -52,6 +52,7 @@ (defconst nnmbox-version "nnmbox 1.0" "nnmbox version.") +(make-obsolete-variable 'nnmbox-version 'emacs-version "29.1") (defvoo nnmbox-current-group nil "Current nnmbox news group directory.") diff --git a/lisp/gnus/nnmh.el b/lisp/gnus/nnmh.el index 3902af7d2f..bced527d03 100644 --- a/lisp/gnus/nnmh.el +++ b/lisp/gnus/nnmh.el @@ -55,6 +55,7 @@ as unread by Gnus.") (defconst nnmh-version "nnmh 1.0" "nnmh version.") +(make-obsolete-variable 'nnmh-version 'emacs-version "29.1") (defvoo nnmh-current-directory nil "Current news group directory.") diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el index 7fe2b516cc..ae726ba0f7 100644 --- a/lisp/gnus/nnml.el +++ b/lisp/gnus/nnml.el @@ -89,6 +89,7 @@ non-nil.") (defconst nnml-version "nnml 1.0" "nnml version.") +(make-obsolete-variable 'nnml-version 'emacs-version "29.1") (defvoo nnml-nov-file-name ".overview") diff --git a/lisp/gnus/nnrss.el b/lisp/gnus/nnrss.el index 8c96d3e067..99e7b2a6f3 100644 --- a/lisp/gnus/nnrss.el +++ b/lisp/gnus/nnrss.el @@ -71,6 +71,7 @@ this variable to the list of fields to be ignored.") (defvoo nnrss-status-string "") (defconst nnrss-version "nnrss 1.0") +(make-obsolete-variable 'nnrss-version 'emacs-version "29.1") (defvar nnrss-group-alist '() "List of RSS addresses.") diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el index 39b89abb88..e5eb4b8160 100644 --- a/lisp/gnus/nnspool.el +++ b/lisp/gnus/nnspool.el @@ -114,6 +114,7 @@ there.") (defconst nnspool-version "nnspool 2.0" "Version numbers of this version of NNSPOOL.") +(make-obsolete-variable 'nnspool-version 'emacs-version "29.1") (defvoo nnspool-current-directory nil "Current news group directory.") diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el index 29570fa8c9..6fa424a155 100644 --- a/lisp/gnus/nntp.el +++ b/lisp/gnus/nntp.el @@ -259,6 +259,7 @@ update their active files often, this can help.") (defvoo nntp-connection-alist nil) (defvoo nntp-status-string "") (defconst nntp-version "nntp 5.0") +(make-obsolete-variable 'nntp-version 'emacs-version "29.1") (defvoo nntp-inhibit-erase nil) (defvoo nntp-inhibit-output nil) diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el index ae4265de7f..7b192aa1d2 100644 --- a/lisp/gnus/nnvirtual.el +++ b/lisp/gnus/nnvirtual.el @@ -57,6 +57,7 @@ component group will show up when you enter the virtual group.") (defconst nnvirtual-version "nnvirtual 1.1") +(make-obsolete-variable 'nnvirtual-version 'emacs-version "29.1") (defvoo nnvirtual-current-group nil) commit 3fcbcc61db31e316115364cf6275effcbfdebc6f Author: Stefan Monnier Date: Sat Aug 13 11:18:40 2022 -0400 js.el: Tweak last change * lisp/progmodes/js.el (js-json-mode): Use a function as value of `syntax-propertize-function`. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index d2c24a7581..efad3b52aa 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3490,9 +3490,10 @@ This function is intended for use in `after-change-functions'." ;;;###autoload (define-derived-mode js-json-mode js-mode "JSON" - ;; JSON files can be big. Speed up syntax-ppss. - (setq-local syntax-propertize-function nil) - (setq-local js-enabled-frameworks nil)) + (setq-local js-enabled-frameworks nil) + ;; Speed up `syntax-ppss': JSON files can be big but can't hold + ;; regexp matchers nor #! thingies (and `js-enabled-frameworks' is nil). + (setq-local syntax-propertize-function #'ignore)) ;; Since we made JSX support available and automatically-enabled in ;; the base `js-mode' (for ease of use), now `js-jsx-mode' simply commit 94c10c426e305037126cf75cc5cf23c9f8df4664 Author: Eli Zaretskii Date: Sat Aug 13 16:59:22 2022 +0300 Speed up display of long lines under 'truncate-lines' * src/xdisp.c (partial_line_height): Return zero for long and truncated lines. (fast_move_it_horizontally): New function. (hscroll_window_tree, display_line): Use 'fast_move_it_horizontally' in preference to 'move_it_in_display_line_to', when dealing with long and truncated lines. (redisplay_internal): Optimize "optimization 3" for long and truncated lines. * src/buffer.c (syms_of_buffer) : New variable. * etc/NEWS: Announce 'large-hscroll-threshold'. diff --git a/etc/NEWS b/etc/NEWS index 7d3608b2fc..4f1ae74514 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -385,6 +385,10 @@ longer choke when a buffer on display contains long lines. The variable 'long-line-threshold' controls whether and when these display optimizations are in effect. +A companion variable 'large-hscroll-threshold' controls when another +set of display optimizations are in effect, which are aimed +specifically at speeding up display of long lines that are truncated. + If you still experience slowdowns while editing files with long lines, this may be due to line truncation, or to one of the enabled minor modes, or to the current major mode. Try turning off line truncation diff --git a/src/buffer.c b/src/buffer.c index e5601af505..6ab516d5f5 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -6442,6 +6442,24 @@ If nil, these display shortcuts will always remain disabled. There is no reason to change that value except for debugging purposes. */); XSETFASTINT (Vlong_line_threshold, 10000); + DEFVAR_INT ("large-hscroll-threshold", large_hscroll_threshold, + doc: /* Horizontal scroll of truncated lines above which to use redisplay shortcuts. + +The value should be a positive integer. + +Shortcuts in the display code intended to speed up redisplay for long +and truncated lines will automatically be enabled when a line's +horizontal scroll amount is or about to become larger than the value +of this variable. + +This variable has effect only in buffers which contain one or more +lines whose length is above `long-line-threshold', which see. +To disable redisplay shortcuts for long truncated line, set this +variable to `most-positive-fixnum'. + +There is no reason to change that value except for debugging purposes. */); + large_hscroll_threshold = 10000; + defsubr (&Sbuffer_live_p); defsubr (&Sbuffer_list); defsubr (&Sget_buffer); diff --git a/src/xdisp.c b/src/xdisp.c index 5268c359ec..719b131baa 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11054,6 +11054,15 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos) int partial_line_height (struct it *it_origin) { + /* In a buffer with very long and truncated lines, we ignore the + possibly-partial height of the last line in the window: it is too + expensive to compute that (since in most cases that involves + going all the way to ZV), and the effect of ignoring it is + relatively minor. */ + if (XBUFFER (it_origin->w->contents)->long_line_optimizations_p + && it_origin->line_wrap == TRUNCATE) + return 0; + int partial_height; void *it_data = NULL; struct it it; @@ -11077,6 +11086,51 @@ partial_line_height (struct it *it_origin) return partial_height; } +/* Approximate move_it_in_display_line_to for very long and truncated + display lines, when moving horizontally. This is used when the + buffer's long_line_optimizations_p flag is set. It ignores various + complications, like different font sizes, invisible text, display + and overlay strings, and, to some degree, bidirectional text. So + caveat emptor! + + Starting from IT's position, reseat IT after skipping NCHARS + characters or to the next newline/ZV, whichever comes first. Return + what move_it_in_display_line_to would have returned in this case. */ + +static enum move_it_result +fast_move_it_horizontally (struct it *it, ptrdiff_t nchars) +{ + ptrdiff_t nl_bytepos; + ptrdiff_t nl_pos = find_newline_no_quit (IT_CHARPOS (*it), IT_BYTEPOS (*it), + 1, &nl_bytepos); + struct text_pos new_pos; + enum move_it_result move_result; + + if (nl_pos - IT_CHARPOS (*it) > nchars) + { + SET_TEXT_POS (new_pos, + IT_CHARPOS (*it) + nchars, + CHAR_TO_BYTE (IT_CHARPOS (*it) + nchars)); + move_result = MOVE_X_REACHED; + } + else + { + if (nl_bytepos < ZV_BYTE + || (nl_bytepos > BEGV_BYTE + && FETCH_BYTE (nl_bytepos - 1) == '\n')) + { + nl_pos--; + nl_bytepos--; + move_result = MOVE_NEWLINE_OR_CR; + } + else + move_result = MOVE_POS_MATCH_OR_ZV; + SET_TEXT_POS (new_pos, nl_pos, nl_bytepos); + } + reseat (it, new_pos, false); + return move_result; +} + /* Return true if IT points into the middle of a display vector. */ bool @@ -15790,7 +15844,20 @@ hscroll_window_tree (Lisp_Object window) it.first_visible_x = window_hscroll_limited (w, it.f) * FRAME_COLUMN_WIDTH (it.f); it.last_visible_x = DISP_INFINITY; - move_it_in_display_line_to (&it, pt, -1, MOVE_TO_POS); + + ptrdiff_t nchars = pt - IT_CHARPOS (it); + if (current_buffer->long_line_optimizations_p + && nchars > large_hscroll_threshold) + { + /* Special optimization for very long and truncated + lines which need to be hscrolled far to the left: + jump directly to the (approximate) first position + that is visible, instead of slowly walking there. */ + fast_move_it_horizontally (&it, nchars); + it.current_x += nchars * FRAME_COLUMN_WIDTH (it.f); + } + else + move_it_in_display_line_to (&it, pt, -1, MOVE_TO_POS); /* If the line ends in an overlay string with a newline, we might infloop, because displaying the window will want to put the cursor after the overlay, i.e. at X @@ -15803,7 +15870,14 @@ hscroll_window_tree (Lisp_Object window) if (hscl) it.first_visible_x = (window_hscroll_limited (w, it.f) * FRAME_COLUMN_WIDTH (it.f)); - move_it_in_display_line_to (&it, pt - 1, -1, MOVE_TO_POS); + if (current_buffer->long_line_optimizations_p + && nchars > large_hscroll_threshold) + { + fast_move_it_horizontally (&it, nchars - 1); + it.current_x += (nchars - 1) * FRAME_COLUMN_WIDTH (it.f); + } + else + move_it_in_display_line_to (&it, pt - 1, -1, MOVE_TO_POS); } current_buffer = saved_current_buffer; @@ -16741,9 +16815,23 @@ redisplay_internal (void) it.current_y = this_line_y; it.vpos = this_line_vpos; - /* The call to move_it_to stops in front of PT, but - moves over before-strings. */ - move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS); + if (current_buffer->long_line_optimizations_p + && it.line_wrap == TRUNCATE + && PT - CHARPOS (tlbufpos) > large_hscroll_threshold) + { + /* When lines are very long and truncated, jumping to + the next visible line is much faster than slowly + iterating there. */ + reseat_at_next_visible_line_start (&it, false); + if (IT_CHARPOS (it) <= PT) /* point moved off this line */ + it.vpos = this_line_vpos + 1; + } + else + { + /* The call to move_it_to stops in front of PT, but + moves over before-strings. */ + move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS); + } if (it.vpos == this_line_vpos && (row = MATRIX_ROW (w->current_matrix, this_line_vpos), @@ -24510,8 +24598,27 @@ display_line (struct it *it, int cursor_vpos) it->first_visible_x += x_incr; it->last_visible_x += x_incr; } - move_result = move_it_in_display_line_to (it, ZV, it->first_visible_x, - MOVE_TO_POS | MOVE_TO_X); + if (current_buffer->long_line_optimizations_p + && it->line_wrap == TRUNCATE + && window_hscroll_limited (it->w, it->f) > large_hscroll_threshold) + { + /* Special optimization for very long and truncated lines + which are hscrolled far to the left: jump directly to the + (approximate) position that is visible, instead of slowly + walking there. */ + ptrdiff_t chars_to_skip = + it->first_visible_x / FRAME_COLUMN_WIDTH (it->f); + enum move_it_result rc = + fast_move_it_horizontally (it, chars_to_skip); + + if (rc == MOVE_X_REACHED) + it->current_x = it->first_visible_x; + else /* use arbitrary value < first_visible_x */ + it->current_x = it->first_visible_x - FRAME_COLUMN_WIDTH (it->f); + } + else + move_result = move_it_in_display_line_to (it, ZV, it->first_visible_x, + MOVE_TO_POS | MOVE_TO_X); /* If we are under a large hscroll, move_it_in_display_line_to could hit the end of the line without reaching first_visible_x. Pretend that we did reach it. This is commit 0ab572d5c991dee4818d364a65e004d20f1f45a1 Author: Po Lu Date: Sat Aug 13 21:12:20 2022 +0800 Add new value `dont-save' to `deactivate-mark' * etc/NEWS: Announce new value of `deactivate-mark'. * lisp/simple.el (deactivate-mark): Handle new value. (bug#57147) * src/keyboard.c (syms_of_keyboard): Update doc string of `deactivate-mark'. diff --git a/etc/NEWS b/etc/NEWS index 6ff8548921..7d3608b2fc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2565,6 +2565,12 @@ patcomp.el, pc-mode.el, pc-select.el, s-region.el, and sregex.el. * Lisp Changes in Emacs 29.1 +--- +** New 'dont-save' value of 'deactivate-mark'. +This value means that Emacs should deactivate the mark as usual, but +without setting the primary selection should 'select-active-regions' +be enabled. + +++ ** New 'declare' form 'interactive-args'. This can be used to specify what forms to put into 'command-history' diff --git a/lisp/simple.el b/lisp/simple.el index a4ea345ca5..ce3895176e 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -6731,7 +6731,8 @@ If Transient Mark mode is disabled, this function normally does nothing; but if FORCE is non-nil, it deactivates the mark anyway. Deactivating the mark sets `mark-active' to nil, updates the -primary selection according to `select-active-regions', and runs +primary selection according to `select-active-regions' (unless +`deactivate-mark' is `dont-save'), and runs `deactivate-mark-hook'. If Transient Mark mode was temporarily enabled, reset the value @@ -6742,6 +6743,7 @@ run `deactivate-mark-hook'." (when (and (if (eq select-active-regions 'only) (eq (car-safe transient-mark-mode) 'only) select-active-regions) + (not (eq deactivate-mark 'dont-save)) (region-active-p) (display-selections-p)) ;; The var `saved-region-selection', if non-nil, is the text in diff --git a/src/keyboard.c b/src/keyboard.c index 719226caed..05c68ea7fb 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -12650,10 +12650,14 @@ cancels any modification. */); DEFSYM (Qdeactivate_mark, "deactivate-mark"); DEFVAR_LISP ("deactivate-mark", Vdeactivate_mark, - doc: /* If an editing command sets this to t, deactivate the mark afterward. + doc: /* If an editing command sets this to t, deactivate the mark afterward. The command loop sets this to nil before each command, and tests the value when the command returns. -Buffer modification stores t in this variable. */); +Buffer modification stores t in this variable. + +By default, deactivating the mark will save the contents of the region +according to `select-active-regions'. If this is set to the symbol +`dont-save', the region will not be saved.*/); Vdeactivate_mark = Qnil; Fmake_variable_buffer_local (Qdeactivate_mark); commit d1578888bf57537e7f3559cdb2c3cef54b081ae9 Author: Lars Ingebrigtsen Date: Sat Aug 13 14:40:58 2022 +0200 Tweak outline symbol icons * lisp/outline.el (outline-close, outline-open): Use icons of the same size in Symbola. diff --git a/lisp/outline.el b/lisp/outline.el index bb62c573c4..3250b62f1e 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -295,7 +295,7 @@ buffers (yet) -- that will be amended in a future version." (define-icon outline-open button '((emoji "🔽") - (symbol " ⯆ ") + (symbol " ▼ ") (text " open ")) "Icon used for buttons for opening a section in outline buffers." :version "29.1" @@ -303,7 +303,7 @@ buffers (yet) -- that will be amended in a future version." (define-icon outline-close button '((emoji "▶️") - (symbol " ⯈ ") + (symbol " ▶ ") (text " close ")) "Icon used for buttons for closing a section in outline buffers." :version "29.1" commit 2bbb007e166764726079d6b32c2478b26c58270b Author: Lars Ingebrigtsen Date: Sat Aug 13 14:07:41 2022 +0200 Allow EXCLUDED-FILES in loaddefs-generate to be relative * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate): Allow the excluded files to be relative (bug#57144). diff --git a/lisp/emacs-lisp/loaddefs-gen.el b/lisp/emacs-lisp/loaddefs-gen.el index 6cb5d00782..31e1514193 100644 --- a/lisp/emacs-lisp/loaddefs-gen.el +++ b/lisp/emacs-lisp/loaddefs-gen.el @@ -551,6 +551,11 @@ instead of just updating them with the new/changed autoloads." (updating (and (file-exists-p output-file) (not generate-full))) (defs nil)) + ;; Allow the excluded files to be relative. + (setq excluded-files + (mapcar (lambda (file) (expand-file-name file dir)) + excluded-files)) + ;; Collect all the autoload data. (let ((progress (make-progress-reporter (byte-compile-info commit 1c7910ea6ecdc104fe024b879c7db9ea6dc3bf19 Author: Lars Ingebrigtsen Date: Fri Aug 12 22:41:30 2022 +0200 Don't hide final dump in admin/emake diff --git a/admin/emake b/admin/emake index 9bebd34067..548611c6af 100755 --- a/admin/emake +++ b/admin/emake @@ -29,6 +29,7 @@ s#^Running # Running # s#^Configured for # Configured for # s#^./temacs.*# \\& # s#^make.*Error# \\& # +s#^Dumping under the name# \\& # ' | \ grep -E --line-buffered -v "^make|\ ^Loading|\ @@ -43,7 +44,6 @@ GEN.*autoloads|\ ^Adding name|\ ^Dump mode|\ ^Dumping finger|\ -^Dumping under the name|\ ^Byte counts|\ ^Reloc counts|\ ^Pure-hashed|\ commit 87c2ebf8d2bf50c7e0bbc9492c33b991686766fa Author: Stefan Kangas Date: Sat Aug 13 13:10:45 2022 +0200 ; * lisp/emulation/viper.el: Bump version to match variable. diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index d1634c64ad..d1c8b5ff2d 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -7,7 +7,7 @@ ;; Author: Michael Kifer ;; Keywords: emulations -;; Version: 3.14.1 +;; Version: 3.14.2 ;; Yoni Rabkin contacted the maintainer of this ;; file on 20/3/2008, and the maintainer agreed that when a bug is commit fdb88899d40956c1aa22fbbc03cad8b8a6b73204 Author: Stefan Kangas Date: Sat Aug 13 13:08:47 2022 +0200 Make ps-mode-version variable obsolete * lisp/progmodes/ps-mode.el (ps-mode-version): Make obsolete. (ps-mode-show-version, ps-mode-submit-bug-report): Don't use above obsolete variable. diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el index 7c9aee2b2a..89482d86ce 100644 --- a/lisp/progmodes/ps-mode.el +++ b/lisp/progmodes/ps-mode.el @@ -34,7 +34,6 @@ ;;; Code: -(defconst ps-mode-version "1.1i, 17 May 2008") (defconst ps-mode-maintainer-address "Peter Kleiweg , bug-gnu-emacs@gnu.org") @@ -519,7 +518,7 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number (defun ps-mode-show-version () "Show current version of PostScript mode." (interactive) - (message " *** PostScript Mode (ps-mode) Version %s *** " ps-mode-version)) + (message " *** PostScript Mode (ps-mode) in GNU Emacs %s *** " emacs-version)) ;; From reporter.el (defvar reporter-prompt-for-summary-p) @@ -534,7 +533,7 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ps-run-font-lock-keywords-2))) (reporter-submit-bug-report ps-mode-maintainer-address - (format "ps-mode.el %s [%s]" ps-mode-version system-type) + (format "ps-mode.el %s [%s]" emacs-version system-type) '(ps-mode-tab ps-mode-paper-size ps-mode-print-function @@ -1094,6 +1093,9 @@ Use line numbers if `ps-run-error-line-numbers' is not nil." ;; (add-hook 'kill-emacs-hook #'ps-run-cleanup) +(defconst ps-mode-version "1.1i, 17 May 2008") +(make-obsolete-variable 'ps-mode-version 'emacs-version "29.1") + (provide 'ps-mode) ;;; ps-mode.el ends here commit 764d832bfaffe5a0069f4acc7a5aff465c36e801 Author: Stefan Kangas Date: Sat Aug 13 13:00:46 2022 +0200 Make htmlfontify-version variable obsolete * lisp/htmlfontify.el (htmlfontify-version): Make obolete. (hfy-meta-tags): Don't use above obsolete variable. diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el index dbcc152c15..bf7446f151 100644 --- a/lisp/htmlfontify.el +++ b/lisp/htmlfontify.el @@ -81,11 +81,9 @@ (eval-when-compile (require 'cl-lib)) (require 'cus-edit) -(defconst htmlfontify-version 0.21) - (defconst hfy-meta-tags - (format "" - emacs-version htmlfontify-version) + (format "" + emacs-version) "The generator meta tag for this version of htmlfontify.") (defconst htmlfontify-manual "Htmlfontify Manual" @@ -2392,13 +2390,14 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'." (let ((file (hfy-initfile))) (load file 'NOERROR nil nil) )) -;; Obsolete. - (defun hfy-interq (set-a set-b) "Return the intersection (using `eq') of two lists SET-A and SET-B." (declare (obsolete seq-intersection "28.1")) (nreverse (seq-intersection set-a set-b #'eq))) +(defconst htmlfontify-version 0.21) +(make-obsolete-variable 'htmlfontify-version 'emacs-version "29.1") + (define-obsolete-function-alias 'hfy-prop-invisible-p #'invisible-p "29.1") (provide 'htmlfontify) commit 4530368c06fef6a289b313b35c39e30629104020 Author: Stefan Kangas Date: Sat Aug 13 12:39:42 2022 +0200 Delete many references to Emacs 23 or older from docs * doc/emacs/glossary.texi (Glossary): * doc/emacs/msdos.texi (Windows Fonts): * doc/lispref/loading.texi (Library Search): * doc/lispref/processes.texi (Accepting Output): * doc/misc/auth.texi (GnuPG and EasyPG Assistant Configuration): * doc/misc/efaq-w32.texi (Font names): * doc/misc/efaq.texi (Turning on syntax highlighting) (Escape sequences in shell output): * doc/misc/eshell.texi (Bugs and ideas): * doc/misc/gnus.texi (nnmairix requirements): * doc/misc/gnus-faq.texi (FAQ 1-5): * doc/misc/idlwave.texi (Troubleshooting): * doc/misc/message.texi (Using S/MIME): * doc/misc/mh-e.texi (Preface, Incorporating Mail): * doc/misc/viper.texi (Viper Specials): Delete references to Emacs 23 or older. diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi index 5224e31340..9a53701997 100644 --- a/doc/emacs/glossary.texi +++ b/doc/emacs/glossary.texi @@ -1457,8 +1457,8 @@ level by aborting (q.v.@:) and quitting (q.v.). @xref{Quitting}. @item Transient Mark Mode The default behavior of the mark (q.v.@:) and region (q.v.), in which setting the mark activates it and highlights the region, is called -Transient Mark mode. In GNU Emacs 23 and onwards, it is enabled by -default. @xref{Disabled Transient Mark}. +Transient Mark mode. It is enabled by default. @xref{Disabled +Transient Mark}. @item Transposition Transposing two units of text means putting each one into the place diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi index e30d623a77..dd0787cd38 100644 --- a/doc/emacs/msdos.texi +++ b/doc/emacs/msdos.texi @@ -986,9 +986,9 @@ printer, put this in your @file{.emacs} file: @section Specifying Fonts on MS-Windows @cindex font specification (MS Windows) - Starting with Emacs 23, fonts are specified by their name, size -and optional properties. The format for specifying fonts comes from the -fontconfig library used in modern Free desktops: + Fonts are specified by their name, size and optional properties. +The format for specifying fonts comes from the fontconfig library used +in modern Free desktops: @example [Family[-PointSize]][:Option1=Value1[:Option2=Value2[...]]] diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 0972a7a123..4e4f12dc32 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -440,7 +440,7 @@ similarly-named file in a directory earlier on @code{load-path}. For instance, suppose @code{load-path} is set to @example - ("/opt/emacs/site-lisp" "/usr/share/emacs/23.3/lisp") + ("/opt/emacs/site-lisp" "/usr/share/emacs/29.1/lisp") @end example @noindent diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 382053ab24..db6b4c35ef 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -1960,7 +1960,6 @@ because @var{seconds} can be floating point to specify waiting a fractional number of seconds. If @var{seconds} is 0, the function accepts whatever output is pending but does not wait. -@c Emacs 22.1 feature If @var{process} is a process, and the argument @var{just-this-one} is non-@code{nil}, only output from that process is handled, suspending output from other processes until some output has been received from that diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 829d7f4fa0..91a9afd9c9 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -652,14 +652,8 @@ before @file{~/.authinfo}, the auth-source library will try to read the GnuPG encrypted @file{.gpg} file first, before the unencrypted file. -In Emacs 23 or later there is an option @code{auto-encryption-mode} to -automatically decrypt @file{*.gpg} files. It is enabled by default. -If you are using earlier versions of Emacs, you will need: - -@lisp -(require 'epa-file) -(epa-file-enable) -@end lisp +There is an option @code{auto-encryption-mode} to automatically +decrypt @file{*.gpg} files. It is enabled by default. If you want your GnuPG passwords to be cached, set up @code{gpg-agent} or EasyPG Assistant diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi index 084b5a3254..46c257e42e 100644 --- a/doc/misc/efaq-w32.texi +++ b/doc/misc/efaq-w32.texi @@ -930,9 +930,9 @@ an indication of whether the font is outline (.TTF, .ATM) or raster (.FON) based when fonts are listed, which may let you differentiate between two fonts with the same name and different technologies. -Starting with Emacs 23, the preferred font name format will be moving -to the simpler and more flexible fontconfig format. XLFD names will -continue to be supported for backward compatibility. +Starting with Emacs 23, the preferred font name format is the simpler +and more flexible fontconfig format. XLFD names will continue to be +supported for backward compatibility. @example XLFD: -*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1 diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi index a98c4b6a61..c29e4fe487 100644 --- a/doc/misc/efaq.texi +++ b/doc/misc/efaq.texi @@ -2891,20 +2891,20 @@ and cause an annoying delay in display, so several features exist to work around this. @cindex Just-In-Time syntax highlighting -In Emacs 21 and later, turning on @code{font-lock-mode} automatically -activates the new @dfn{Just-In-Time fontification} provided by -@code{jit-lock-mode}. @code{jit-lock-mode} defers the fontification of -portions of buffer until you actually need to see them, and can also -fontify while Emacs is idle. This makes display of the visible portion -of a buffer almost instantaneous. For details about customizing -@code{jit-lock-mode}, type @kbd{C-h f jit-lock-mode @key{RET}}. +Turning on @code{font-lock-mode} automatically activates +@dfn{Just-In-Time fontification} provided by @code{jit-lock-mode}. +@code{jit-lock-mode} defers the fontification of portions of buffer +until you actually need to see them, and can also fontify while Emacs +is idle. This makes display of the visible portion of a buffer almost +instantaneous. For details about customizing @code{jit-lock-mode}, +type @kbd{C-h f jit-lock-mode @key{RET}}. @cindex Levels of syntax highlighting @cindex Decoration level, in @code{font-lock-mode} -In versions of Emacs before 21, different levels of decoration are -available, from slight to gaudy. More decoration means you need to wait -more time for a buffer to be fontified (or a faster machine). To -control how decorated your buffers should become, set the value of +Different levels of decoration are available, from slight to gaudy. +More decoration means you need to wait more time for a buffer to be +fontified (or a faster machine). To control how decorated your +buffers should become, set the value of @code{font-lock-maximum-decoration} in your @file{.emacs} file, with a @code{nil} value indicating default (usually minimum) decoration, and a @code{t} value indicating the maximum decoration. For the gaudiest @@ -2985,11 +2985,7 @@ Add the following line to your @file{.emacs} file: In many systems, @code{ls} is aliased to @samp{ls --color}, which prints using ANSI color escape sequences. Emacs includes the @code{ansi-color} package, which lets Shell mode recognize these -escape sequences. In Emacs 23.2 and later, the package is enabled by -default; in earlier versions you can enable it by typing @kbd{M-x -ansi-color-for-comint-mode} in the Shell buffer, or by adding -@code{(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)} to -your init file. +escape sequences. It is enabled by default. @node Fullscreen mode on MS-Windows @section How can I start Emacs in fullscreen mode on MS-Windows? diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index aae779575d..13f13163dd 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -1848,11 +1848,6 @@ scrolls back. @item Menu support was removed, but never put back -@item Using C-p and C-n with rebind gets into a locked state - -This happened a few times in Emacs 21, but has been irreproducible -since. - @item If an interactive process is currently running, @kbd{M-!} doesn't work @item Use a timer instead of @code{sleep-for} when killing child processes diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi index 4923efb3db..ee179ba0d0 100644 --- a/doc/misc/gnus-faq.texi +++ b/doc/misc/gnus-faq.texi @@ -102,7 +102,6 @@ misprints are the Gnus team's fault, sorry. * FAQ 1-3:: Where and how to get Gnus? * FAQ 1-4:: I sometimes read references to No Gnus and Oort Gnus, what are those? -* FAQ 1-5:: Which version of Emacs do I need? @end menu @node FAQ 1-1 @@ -176,17 +175,6 @@ once become Gnus 5.12 or Gnus 6. (If you're wondering why not 5.11, the odd version numbers are normally used for the Gnus versions bundled with Emacs) -@node FAQ 1-5 -@subsubheading Question 1.5 - -Which version of Emacs do I need? - -@subsubheading Answer - -Gnus 5.13 requires an Emacs version that is greater than or equal -to Emacs 23.1, although there are some features that -only work on Emacs 24. - @node FAQ 2 - Startup / Group buffer @subsection Startup / Group buffer diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 8b065829fb..baffe369c3 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -21958,7 +21958,7 @@ you can set up a local @acronym{IMAP} server, which you then access via @code{nnimap}. This is a rather massive setup for accessing some mbox files, so just change to MH or Maildir already... However, if you're really, really passionate about using mbox, you might want to look into -the package @file{mairix.el}, which comes with Emacs 23. +the package @file{mairix.el}, which comes with Emacs. @node What nnmairix does @subsection What nnmairix does diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi index 6aaa4309a1..0ba87b2e58 100644 --- a/doc/misc/idlwave.texi +++ b/doc/misc/idlwave.texi @@ -4116,17 +4116,6 @@ configuration files (e.g., @file{.cshrc}), but from the file @file{~/.MacOSX/environment.plist}. Either include your path settings there, or start Emacs and IDLWAVE from the shell. -@item @strong{I'm getting errors like @samp{Symbol's value as variable is void: -cl-builtin-gethash} on completion or routine info.} - -This error arises if you upgraded Emacs from 20.x to 21.x without -re-installing IDLWAVE@. Old Emacs and new Emacs are not byte-compatible -in compiled lisp files. Presumably, you kept the original .elc files in -place, and this is the source of the error. If you recompile (or just -"make; make install") from source, it should resolve this problem. -Another option is to recompile the @file{idlw*.el} files by hand using -@kbd{M-x byte-compile-file}. - @item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches windows on my desktop.} diff --git a/doc/misc/message.texi b/doc/misc/message.texi index 29fbdfe178..49e3faed7b 100644 --- a/doc/misc/message.texi +++ b/doc/misc/message.texi @@ -1152,12 +1152,11 @@ programs are required to make things work, and some small general hints. @uref{https://www.gnupg.org/, GNU Privacy Guard} or @uref{https://www.openssl.org/, OpenSSL}. The default Emacs interface to the S/MIME implementation is EasyPG (@pxref{Top,,EasyPG Assistant -User's Manual, epa, EasyPG Assistant User's Manual}), which has been -included in Emacs since version 23 and which relies on the command -line tool @command{gpgsm} provided by @acronym{GnuPG}. That tool -implements certificate management, including certificate revocation -and expiry, while such tasks need to be performed manually, if OpenSSL -is used. +User's Manual, epa, EasyPG Assistant User's Manual}), which is +included in Emacs and relies on the command line tool @command{gpgsm} +provided by @acronym{GnuPG}. That tool implements certificate +management, including certificate revocation and expiry, while such +tasks need to be performed manually, if OpenSSL is used. The choice between EasyPG and OpenSSL is controlled by the variable @code{mml-smime-use}, which needs to be set to the value @code{epg} diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi index 12841860d9..83d81fc12d 100644 --- a/doc/misc/mh-e.texi +++ b/doc/misc/mh-e.texi @@ -213,8 +213,8 @@ more niceties about GNU Emacs and MH@. Now I'm fully hooked on both of them. The MH-E package is distributed with Emacs@footnote{Version -@value{VERSION} of MH-E appeared in Emacs 24.4. It is supported in GNU -Emacs 23 and higher. It is compatible with MH versions 6.8.4 and +@value{VERSION} of MH-E appeared in Emacs 24.4. +It is compatible with MH versions 6.8.4 and higher, all versions of nmh, and GNU mailutils 1.0 and higher}, so you shouldn't have to do anything special to use it. Gnus is also required; version 5.10 or higher is recommended. This manual covers @@ -1488,7 +1488,7 @@ Binding} of @samp{m}. @cindex Unix commands, @command{xbuffy} You can use @command{xbuffy} to automate the incorporation of this -mail using the Emacs 23 command @command{emacsclient} as follows: +mail using the Emacs command @command{emacsclient} as follows: @smallexample box ~/mail/mh-e diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi index 0e2473ddf3..0703667ecc 100644 --- a/doc/misc/viper.texi +++ b/doc/misc/viper.texi @@ -2571,7 +2571,7 @@ The GNU Emacs Manual}, for more information on tags. The following two commands are normally bound to a mouse click and are part of Viper. They work only if Emacs runs as an application under X -Windows (or under some other window system for which a port of GNU Emacs 20 +Windows (or under some other window system for which a port of GNU Emacs is available). Clicking the mouse when Emacs is invoked in an Xterm window (using @code{emacs -nw}) will do no good. commit 60f2a486e9d183c80e388d1fec7bab3754aaaebf Author: Eli Zaretskii Date: Sat Aug 13 13:40:00 2022 +0300 ; * etc/NEWS: Minor fixes. (Bug#57169) diff --git a/etc/NEWS b/etc/NEWS index f876916bb6..6ff8548921 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1348,9 +1348,9 @@ value there. +++ *** You can now generate a backtrace from Lisp errors in redisplay. To do this, set the new variable 'backtrace-on-redisplay-error' to a -non-nil value. The backtrace will be written to buffer -*Redisplay-trace*. This buffer will not be automatically displayed in -a window. +non-nil value. The backtrace will be written to a special buffer +named "*Redisplay-trace*". This buffer will not be automatically +displayed in a window. ** Compile @@ -1754,11 +1754,6 @@ The new ':doc-spec-function' element can be used to compute the ':doc-spec' element when the user asks for info on that particular mode (instead of at load time). -** Subr-x - -+++ -*** New macro 'with-memoization' provides a very primitive form of memoization. - ** Ansi-color --- @@ -2650,6 +2645,9 @@ If Emacs was built with native-compilation enabled, Lisp programs can now call 'symbol-file' with the new optional 3rd argument non-nil to request the name of the .eln file which defined a given symbol. ++++ +** New macro 'with-memoization' provides a very primitive form of memoization. + ** Themes --- commit f937a0f3f8b387cf8668e16c677860d5f707144f Author: Po Lu Date: Sat Aug 13 17:49:31 2022 +0800 Prevent selection converter from signalling if buffer is narrowed * lisp/select.el (xselect-convert-to-string): If positions are outside the accessible portion of the buffer, don't return anything. diff --git a/lisp/select.el b/lisp/select.el index e407c22436..5b9cca80a3 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -673,9 +673,12 @@ two markers or an overlay. Otherwise, it is nil." (let ((str (cond ((stringp value) value) ((setq value (xselect--selection-bounds value)) (with-current-buffer (nth 2 value) - (buffer-substring (nth 0 value) - (nth 1 value))))))) - (xselect--encode-string type str t))) + (when (and (>= (nth 0 value) (point-min)) + (<= (nth 1 value) (point-max))) + (buffer-substring (nth 0 value) + (nth 1 value)))))))) + (when str + (xselect--encode-string type str t)))) (defun xselect-convert-to-length (_selection _type value) (let ((len (cond ((stringp value)