diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 2bd35380780..5f7aa1f1ef5 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -2202,24 +2202,20 @@ variable @code{isearch-lazy-highlight} to @code{nil} disables this highlighting. Here are some other variables that customize the lazy highlighting: -@table @code +@vtable @code @item lazy-highlight-initial-delay -@vindex lazy-highlight-initial-delay Time in seconds to wait before highlighting visible matches. Applies only if the search string is less than @code{lazy-highlight-no-delay-length} characters long. @item lazy-highlight-no-delay-length -@vindex lazy-highlight-no-delay-length For search strings at least as long as the value of this variable, lazy highlighting of matches starts immediately. @item lazy-highlight-interval -@vindex lazy-highlight-interval Time in seconds between highlighting successive matches. @item lazy-highlight-max-at-a-time -@vindex lazy-highlight-max-at-a-time The maximum number of matches to highlight before checking for input. A large number can take some time to highlight, so if you want to continue searching and type @kbd{C-s} or @kbd{C-r} during that time, @@ -2227,17 +2223,28 @@ Emacs will not respond until it finishes highlighting all those matches. Thus, smaller values make Emacs more responsive. @item isearch-lazy-count -@vindex isearch-lazy-count Show the current match number and the total number of matches in the search prompt. @item lazy-count-prefix-format @itemx lazy-count-suffix-format -@vindex lazy-count-prefix-format -@vindex lazy-count-suffix-format These two variables determine the format of showing the current and the total number of matches for @code{isearch-lazy-count}. -@end table + +@item lazy-highlight-buffer +If non-@code{nil}, lazy highlighting highlights the matches in the +entire buffer, not only those visible on display of the current window +(so, for example, they will also become visible in other windows showing +the same buffer). + +@item lazy-highlight-buffer-max-at-a-time +Like @code{lazy-highlight-max-at-a-time}, but used for highlighting +matches not currently visible in the window when +@code{lazy-highlight-buffer} is non-@code{nil}. It defaults to 200; set +to @code{nil} to highlight all the matches in a buffer without checking +for input. @strong{Warning:} this could make Emacs not responsive when +searching large buffers. +@end vtable @vindex search-nonincremental-instead Normally, entering @key{RET} within incremental search when the diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index ae65cf2a620..6daa2b010cf 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -6435,6 +6435,13 @@ You can change this directory by setting the user option "XDG_RUNTIME_DIR")}. +@item +I get an error @samp{Method `gdrive' not supported by GVFS}. + +@samp{google-drive} has been disabled in @acronym{GNOME} 50. It is +not clear yet whether and when it will be reenabled. +@c @uref{https://discourse.gnome.org/t/google-drive-in-gnome-50/34417} + @item How to ignore errors when changing file attributes? diff --git a/etc/NEWS.31 b/etc/NEWS.31 index 3021ad42a12..083e6b50ea4 100644 --- a/etc/NEWS.31 +++ b/etc/NEWS.31 @@ -169,6 +169,12 @@ behavior, customize 'find-function-mode-lower-precedence' to non-nil. --- ** 'find-function' can now find 'cl-defmethod' invocations inside macros. +--- +** New minor mode 'prettify-special-glyphs-mode'. +The new minor mode prettifies the special character glyphs (truncation +and continuation) on TTY frames (and GUI frames without fringes). You +can customize the associated new face 'special-glyphs'. + ** Minibuffer and Completions +++ @@ -3931,7 +3937,20 @@ A major mode based on 'conf-mode' for editing ".npmrc" files. ** New major modes based on the tree-sitter library *** New major mode 'markdown-ts-mode'. -A major mode based on the tree-sitter library for editing Markdown files. +A major mode based on the tree-sitter library for editing Markdown +files. This is now the default major mode for Markdown files. If you +don't have the necessary tree-sitter grammar libraries installed, or if +your Emacs was built without tree-sitter support, Emacs will now show a +warning to that effect when you visit a Markdown file. If you don't +want to use this mode and want to avoid these warnings, add the +following to your init file: + + (add-to-list 'auto-mode-alist '("\\.md\\'" . fundamental-mode)) + (add-to-list 'auto-mode-alist '("\\.markdown\\'" . fundamental-mode)) + (add-to-list 'auto-mode-alist '("\\.mdx\\'" . fundamental-mode)) + +This will cause Emacs to visit Markdown files in Fundamental mode, which +was the default before this mode was added to Emacs. *** New major mode 'mhtml-ts-mode'. An optional major mode based on the tree-sitter library for editing HTML diff --git a/lisp/calendar/diary-icalendar.el b/lisp/calendar/diary-icalendar.el index bc58e7b5924..9604dce8e4e 100644 --- a/lisp/calendar/diary-icalendar.el +++ b/lisp/calendar/diary-icalendar.el @@ -2690,12 +2690,12 @@ recurrence rule values in these nodes are adjusted NDAYS forward." :duration (ical:period-dur-value value))) (t (ical:date/time-add value :day ndays))))))) (ical:rrule - (let ((mdays (ical:recur-by* 'BYMONTHDAY value)) - (ydays (ical:recur-by* 'BYYEARDAY value)) - (dows (ical:recur-by* 'BYDAY value)) + (let ((mdays (ical:rrule-by* 'BYMONTHDAY value)) + (ydays (ical:rrule-by* 'BYYEARDAY value)) + (dows (ical:rrule-by* 'BYDAY value)) (bad-clause - (cond ((ical:recur-by* 'BYSETPOS value) 'BYSETPOS) - ((ical:recur-by* 'BYWEEKNO value) 'BYWEEKNO)))) + (cond ((ical:rrule-by* 'BYSETPOS value) 'BYSETPOS) + ((ical:rrule-by* 'BYWEEKNO value) 'BYWEEKNO)))) ;; We can't reliably subtract days in the following cases, so bail: (when (< 28 ndays) (di:signal-export-error @@ -2970,12 +2970,12 @@ nil, if MONTHS, DAYS and YEARS are all integers)." rdates (seq-remove (apply-partially #'equal dtstart) rdates)))) ;; Return the pair of nodes (DTSTART RRULE) or (DTSTART RDATE): - (let* ((recur-value + (let* ((rrule-value (delq nil `((FREQ ,freq) ,(when bymonth (list 'BYMONTH bymonth)) ,(when bymonthday (list 'BYMONTHDAY bymonthday))))) - (rrule-node (when freq (ical:make-property ical:rrule recur-value))) + (rrule-node (when freq (ical:make-property ical:rrule rrule-value))) (rdate-node (when rdates (ical:make-property ical:rdate rdates (ical:valuetypeparam rdate-type)))) @@ -3548,7 +3548,7 @@ values (of the same type as START)." (interval (icr:find-interval date start rule))) (cl-typecase start (ical:date - (if (ical:recur-count rule) + (if (ical:rrule-count rule) (when (member date (icr:recurrences-to-count vevent)) entry) (when (member date (icr:recurrences-in-interval interval vevent)) @@ -3581,7 +3581,7 @@ values (of the same type as START)." (ical:date/time-add-duration start duration)) (di:format-time-as-local start))) (date-entry (concat entry-time " " entry))) - (when (memq (ical:recur-freq date-rule) '(HOURLY MINUTELY SECONDLY)) + (when (memq (ical:rrule-freq date-rule) '(HOURLY MINUTELY SECONDLY)) (setf (alist-get 'FREQ date-rule) 'DAILY) (setf (alist-get 'INTERVAL date-rule) 1) (setf (alist-get 'BYHOUR date-rule nil t) nil) diff --git a/lisp/calendar/icalendar-parser.el b/lisp/calendar/icalendar-parser.el index 93293f19cbf..c6100c828e4 100644 --- a/lisp/calendar/icalendar-parser.el +++ b/lisp/calendar/icalendar-parser.el @@ -1352,9 +1352,9 @@ See `icalendar-read-weekdaynum' for the format of VAL." ;; number alone just stands for a day: (car (rassq val ical:weekday-numbers)))) -(defun ical:read-recur-rule-part (s) - "Read an `icalendar-recur-rule-part' from string S. -S should have been matched against `icalendar-recur-rule-part'. +(defun ical:read-rrule-part (s) + "Read an `icalendar-rrule-part' from string S. +S should have been matched against `icalendar-rrule-part'. The return value is a list (KEYWORD VALUE), where VALUE may itself be a list, depending on the values allowed by KEYWORD." ;; TODO: this smells like a design flaw. Silence the byte compiler for now. @@ -1376,7 +1376,7 @@ itself be a list, depending on the values allowed by KEYWORD." (rx ical:weekdaynum) ",")) (WKST (cdr (assoc values ical:weekday-numbers))))))) -(defun ical:print-recur-rule-part (part) +(defun ical:print-rrule-part (part) "Serialize recur rule part PART to a string." (let ((keyword (car part)) (values (cadr part)) @@ -1398,7 +1398,7 @@ itself be a list, depending on the values allowed by KEYWORD." (concat (symbol-name keyword) "=" values-str))) -(rx-define ical:recur-rule-part +(rx-define ical:rrule-part ;; Group 11: keyword ;; Group 12: value(s) (or (seq (group-n 11 "FREQ") "=" (group-n 12 ical:freq)) @@ -1423,14 +1423,12 @@ itself be a list, depending on the values allowed by KEYWORD." (ical:comma-list ical:yeardaynum))) (seq (group-n 11 "WKST") "=" (group-n 12 ical:weekday)))) -(defun ical:read-recur (s) +(defun ical:read-rrule-value (s) "Read a recurrence rule value from string S. S should be a match against rx `icalendar-recur'." - ;; TODO: let's switch to keywords and a plist, so we can more easily - ;; write these clauses also in diary sexp entries without so many parens - (ical:read-list-with #'ical:read-recur-rule-part s (rx ical:recur-rule-part) ";")) + (ical:read-list-with #'ical:read-rrule-part s (rx ical:rrule-part) ";")) -(defun ical:print-recur (val) +(defun ical:print-rrule-value (val) "Serialize a recurrence rule value VAL to a string." ;; RFC5545 sec. 3.3.10: "to ensure backward compatibility with ;; applications that pre-date this revision of iCalendar the @@ -1438,15 +1436,15 @@ S should be a match against rx `icalendar-recur'." ;; RECUR value." (string-join (cons - (ical:print-recur-rule-part (assq 'FREQ val)) - (mapcar #'ical:print-recur-rule-part + (ical:print-rrule-part (assq 'FREQ val)) + (mapcar #'ical:print-rrule-part (seq-filter (lambda (part) (not (eq 'FREQ (car part)))) val))) ";")) -(defconst ical:-recur-value-types +(defconst ical:-rrule-value-types ;; `list-of' is not a cl-type specifier, just a symbol here; it is - ;; handled specially when checking types in `ical:recur-value-p': + ;; handled specially when checking types in `ical:rrule-value-p': '(FREQ (member YEARLY MONTHLY WEEKLY DAILY HOURLY MINUTELY SECONDLY) UNTIL (or ical:date-time ical:date) COUNT (integer 1 *) @@ -1470,7 +1468,7 @@ DAYNO must be in [0..6] and OFFSET in [-53..53], excluding 0." (cl-typep (car val) '(integer 0 6)) (cl-typep (cdr val) '(or (integer -53 -1) (integer 1 53))))) -(defun ical:recur-value-p (vals) +(defun ical:rrule-value-p (vals) "Return non-nil if VALS is an iCalendar recurrence rule value." (and (listp vals) ;; FREQ is always required: @@ -1487,11 +1485,11 @@ DAYNO must be in [0..6] and OFFSET in [-53..53], excluding 0." (assq 'BYHOUR vals) (assq 'BYMINUTE vals) (assq 'BYSECOND vals)) - (let ((freq (ical:recur-freq vals)) - (byday (ical:recur-by* 'BYDAY vals)) - (byweekno (ical:recur-by* 'BYWEEKNO vals)) - (bymonthday (ical:recur-by* 'BYMONTHDAY vals)) - (byyearday (ical:recur-by* 'BYYEARDAY vals))) + (let ((freq (ical:rrule-freq vals)) + (byday (ical:rrule-by* 'BYDAY vals)) + (byweekno (ical:rrule-by* 'BYWEEKNO vals)) + (bymonthday (ical:rrule-by* 'BYMONTHDAY vals)) + (byyearday (ical:rrule-by* 'BYYEARDAY vals))) (and ;; "The BYDAY rule part MUST NOT be specified with a numeric ;; value when the FREQ rule part is not set to MONTHLY or @@ -1518,7 +1516,7 @@ DAYNO must be in [0..6] and OFFSET in [-53..53], excluding 0." (when (consp kv) (let* ((keyword (car kv)) (val (cadr kv)) - (type (plist-get ical:-recur-value-types keyword))) + (type (plist-get ical:-rrule-value-types keyword))) (and keyword val type (if (and (consp type) (eq (car type) 'list-of)) @@ -1526,7 +1524,14 @@ DAYNO must be in [0..6] and OFFSET in [-53..53], excluding 0." (cl-typep val type)))))) vals))) -(ical:define-type ical:recur "RECUR" +(ical:define-type ical:rrule-value + ;; Renamed from "ical:recur", which turns out to + ;; produce confusing names downstream. Thus I've + ;; deviated from the standard here, and call + ;; `ical:rrule-value' what the standard calls a RECUR + ;; value. (`ical:rrule' is not available because that + ;; names the *property* containing such a value.) + "RECUR" "Type for Recurrence Rule values. When printed, a recurrence rule value looks like @@ -1587,39 +1592,39 @@ Some examples: Notice that singleton values are still wrapped in a list when the KEY accepts a list of values, but not when the KEY always has a single (e.g. integer) value." - '(satisfies ical:recur-value-p) - (ical:semicolon-list ical:recur-rule-part) - :reader ical:read-recur - :printer ical:print-recur + '(satisfies ical:rrule-value-p) + (ical:semicolon-list ical:rrule-part) + :reader ical:read-rrule-value + :printer ical:print-rrule-value :link "https://www.rfc-editor.org/rfc/rfc5545#section-3.3.10") -(defun ical:recur-freq (recur-value) - "Return the frequency in RECUR-VALUE." - (car (alist-get 'FREQ recur-value))) +(defun ical:rrule-freq (rrule) + "Return the frequency in RRULE." + (car (alist-get 'FREQ rrule))) -(defun ical:recur-interval-size (recur-value) - "Return the interval size in RECUR-VALUE, or the default of 1." - (or (car (alist-get 'INTERVAL recur-value)) 1)) +(defun ical:rrule-interval-size (rrule) + "Return the interval size in RRULE, or the default of 1." + (or (car (alist-get 'INTERVAL rrule)) 1)) -(defun ical:recur-until (recur-value) - "Return the UNTIL date(-time) in RECUR-VALUE." - (car (alist-get 'UNTIL recur-value))) +(defun ical:rrule-until (rrule) + "Return the UNTIL date(-time) in RRULE." + (car (alist-get 'UNTIL rrule))) -(defun ical:recur-count (recur-value) - "Return the COUNT in RECUR-VALUE." - (car (alist-get 'COUNT recur-value))) +(defun ical:rrule-count (rrule) + "Return the COUNT in RRULE." + (car (alist-get 'COUNT rrule))) -(defun ical:recur-weekstart (recur-value) - "Return the weekday which starts the work week in RECUR-VALUE. -If no starting weekday is specified in RECUR-VALUE, returns the default, +(defun ical:rrule-weekstart (rrule) + "Return the weekday which starts the work week in RRULE. +If no starting weekday is specified in RRULE, returns the default, 1 (= Monday)." - (or (car (alist-get 'WKST recur-value)) 1)) + (or (car (alist-get 'WKST rrule)) 1)) -(defun ical:recur-by* (byunit recur-value) - "Return the values in the BYUNIT clause in RECUR-VALUE. +(defun ical:rrule-by* (byunit rrule) + "Return the values in the BYUNIT clause in RRULE. BYUNIT should be a symbol: \\='BYMONTH, \\='BYDAY, etc. -See `icalendar-recur' for all the possible BYUNIT values." - (car (alist-get byunit recur-value))) +See `icalendar-rrule-value' for all the possible BYUNIT values." + (car (alist-get byunit rrule))) ;;;; 3.3.11 Text (rx-define ical:escaped-char @@ -3272,7 +3277,7 @@ and times on which an `icalendar-vevent', `icalendar-todo', `icalendar-daylight' component recurs. Together with the `icalendar-dtstart', `icalendar-rdate', and `icalendar-exdate' properties, it defines the recurrence set of the component." - ical:recur + ical:rrule-value ;; TODO: faces for subexpressions? :child-spec (:zero-or-more (ical:otherparam)) :link "https://www.rfc-editor.org/rfc/rfc5545#section-3.8.5.3") @@ -4567,7 +4572,7 @@ which see." (ical:dtend :first dtend-node :value dtend) (ical:due :value due) (ical:duration :value duration) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:rdate :all rdate-nodes) (ical:exdate :all exdate-nodes) (ical:uid :value uid)) @@ -4592,7 +4597,7 @@ which see." ;; If the component has an RRULE that specifies a fixed number ;; of recurrences, compute them now and index them for each date ;; in each recurrence: - ((and recur-value (ical:recur-count recur-value)) + ((and rrule (ical:rrule-count rrule)) (let* ((tz (gethash (ical:with-param-of dtstart-node 'ical:tzidparam) tzid-index)) (recs (cons dtstart (icr:recurrences-to-count component tz)))) @@ -4605,7 +4610,7 @@ which see." (list (ical:date/time-to-date (ical:date/time-to-local rec)))))))))) ;; Same with RDATEs when there's no RRULE: - ((and rdates (not recur-value)) + ((and rdates (not rrule)) (dolist (rec (cons dtstart rdates)) (unless (or (cl-typep rec 'ical:period) (member rec exdates)) (let ((end-time @@ -4624,7 +4629,7 @@ which see." (setq dates (append dates (ical:dates-until start end t))))))) ;; A non-recurring event also gets an index entry for each date ;; until its end time: - ((not recur-value) + ((not rrule) (let ((end-time (or dtend due (when duration @@ -4703,13 +4708,13 @@ Only one keyword argument can be queried at a time." (dolist (component recurring) (ical:with-component component ((ical:dtstart :first dtstart-node :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:rdate :all rdate-nodes) (ical:duration :value duration)) (unless (ical:date/time<= date dtstart) (let* ((tz (ical:with-param-of dtstart-node 'ical:tzidparam nil (gethash value (plist-get index :bytzid)))) - (int (icr:find-interval date dtstart recur-value tz)) + (int (icr:find-interval date dtstart rrule tz)) (recs (icr:recurrences-in-interval int component tz))) (catch 'found (dolist (rec recs) diff --git a/lisp/calendar/icalendar-recur.el b/lisp/calendar/icalendar-recur.el index fcebbc9c6f0..b6c766962c9 100644 --- a/lisp/calendar/icalendar-recur.el +++ b/lisp/calendar/icalendar-recur.el @@ -451,29 +451,29 @@ See `icalendar-recur-find-interval' for arguments' meanings." ;; Return the bounds: (icr:make-interval low high next-low))) -(defun icr:find-interval (target dtstart recur-value &optional vtimezone) +(defun icr:find-interval (target dtstart rrule &optional vtimezone) "Return the recurrence interval around TARGET. TARGET and DTSTART should be `icalendar-date' or `icalendar-date-time' -values. RECUR-VALUE should be an `icalendar-recur'. +values. RRULE should be an `icalendar-recur'. The returned value is an interval [LOW HIGH NEXT-LOW] which represents the lower and upper bounds of a recurrence interval around TARGET. For some N, LOW is equal to START + N*INTERVALSIZE units, HIGH is equal to START + (N+1)*INTERVALSIZE units, and LOW <= TARGET < HIGH. -START here is a time derived from DTSTART depending on RECUR-VALUE's +START here is a time derived from DTSTART depending on RRULE's FREQ part: the first day of the year for a \\='YEARLY rule, first day of the month for a \\='MONTHLY rule, etc. -RECUR-VALUE's interval determines INTERVALSIZE, and its frequency +RRULE's interval determines INTERVALSIZE, and its frequency determines the units: a month for \\='MONTHLY, etc. If VTIMEZONE is provided, it is used to set time zone information in the returned interval bounds. Otherwise, the bounds contain no time zone information and represent floating local times." - (let ((freq (ical:recur-freq recur-value)) - (intsize (ical:recur-interval-size recur-value)) - (weekstart (ical:recur-weekstart recur-value))) + (let ((freq (ical:rrule-freq rrule)) + (intsize (ical:rrule-interval-size rrule)) + (weekstart (ical:rrule-weekstart rrule))) (cl-case freq (SECONDLY (icr:find-secondly-interval target dtstart intsize vtimezone)) (MINUTELY (icr:find-minutely-interval target dtstart intsize vtimezone)) @@ -484,22 +484,22 @@ information and represent floating local times." (MONTHLY (icr:find-monthly-interval target dtstart intsize vtimezone)) (YEARLY (icr:find-yearly-interval target dtstart intsize vtimezone))))) -(defun icr:nth-interval (n dtstart recur-value &optional vtimezone) +(defun icr:nth-interval (n dtstart rrule &optional vtimezone) "Return the Nth recurrence interval after DTSTART. The returned value is an interval [LOW HIGH NEXT-LOW] which is the Nth recurrence interval after DTSTART. LOW is equal to START + N*INTERVALSIZE units, HIGH is equal to START + (N+1)*INTERVALSIZE units, and LOW <= TARGET < HIGH. START here is a time derived from DTSTART -depending on RECUR-VALUE's FREQ part: the first day of the year for a +depending on RRULE's FREQ part: the first day of the year for a \\='YEARLY rule, first day of the month for a \\='MONTHLY rule, etc. -RECUR-VALUE's interval determines INTERVALSIZE, and its frequency +RRULE's interval determines INTERVALSIZE, and its frequency determines the units: a month for \\='MONTHLY, etc. N should be a non-negative integer. Interval 0 is the interval containing DTSTART. DTSTART should be an `icalendar-date' or -`icalendar-date-time' value. RECUR-VALUE should be an +`icalendar-date-time' value. RRULE should be an `icalendar-recur'. If VTIMEZONE is provided, it is used to set time zone information in the @@ -509,8 +509,8 @@ information and represent floating local times." (let* ((start-dt (if (cl-typep dtstart 'ical:date) (ical:date-to-date-time dtstart :tz vtimezone) dtstart)) - (freq (ical:recur-freq recur-value)) - (intervalsize (ical:recur-interval-size recur-value)) + (freq (ical:rrule-freq rrule)) + (intervalsize (ical:rrule-interval-size rrule)) (unit (cl-case freq (YEARLY :year) (MONTHLY :month) @@ -520,16 +520,16 @@ information and represent floating local times." (MINUTELY :minute) (SECONDLY :second))) (target (ical:date/time-add start-dt unit (* n intervalsize) vtimezone))) - (icr:find-interval target dtstart recur-value vtimezone))) + (icr:find-interval target dtstart rrule vtimezone))) -(defun icr:next-interval (interval recur-value &optional vtimezone) +(defun icr:next-interval (interval rrule &optional vtimezone) "Return the next recurrence interval after INTERVAL. Given a recurrence interval [LOW HIGH NEXT], returns the next interval [NEXT HIGHER HIGHER-NEXT], where HIGHER and HIGHER-NEXT are determined -by the frequency and interval sizes of RECUR-VALUE." +by the frequency and interval sizes of RRULE." (let* ((new-low (icr:interval-next interval)) - (freq (ical:recur-freq recur-value)) + (freq (ical:rrule-freq rrule)) (unit (cl-case freq (YEARLY :year) (MONTHLY :month) @@ -538,7 +538,7 @@ by the frequency and interval sizes of RECUR-VALUE." (HOURLY :hour) (MINUTELY :minute) (SECONDLY :second))) - (intervalsize (ical:recur-interval-size recur-value)) + (intervalsize (ical:rrule-interval-size rrule)) (new-high (ical:date/time-add new-low unit 1 vtimezone)) (new-next (when (< 1 intervalsize) @@ -552,17 +552,17 @@ by the frequency and interval sizes of RECUR-VALUE." (icr:make-interval new-low new-high new-next))) -(defun icr:previous-interval (interval recur-value dtstart &optional vtimezone) +(defun icr:previous-interval (interval rrule dtstart &optional vtimezone) "Given a recurrence INTERVAL, return the previous interval. For an interval [LOW HIGH NEXT-LOW], the previous interval is [PREV-LOW PREV-HIGH LOW], where PREV-LOW and PREV-HIGH are determined by -the frequency and interval sizes of RECUR-VALUE (see +the frequency and interval sizes of RRULE (see `icalendar-recur-find-interval'). If the resulting period of time between PREV-LOW and PREV-HIGH occurs entirely before DTSTART, then the interval does not exist; in this case nil is returned." (let* ((upper (icr:interval-low interval)) - (freq (ical:recur-freq recur-value)) + (freq (ical:rrule-freq rrule)) (unit (cl-case freq (YEARLY :year) (MONTHLY :month) @@ -571,7 +571,7 @@ interval does not exist; in this case nil is returned." (HOURLY :hour) (MINUTELY :minute) (SECONDLY :second))) - (intervalsize (ical:recur-interval-size recur-value)) + (intervalsize (ical:rrule-interval-size rrule)) (new-low (ical:date/time-add upper unit (* -1 intervalsize) vtimezone)) (new-high (if (< 1 intervalsize) @@ -1032,12 +1032,12 @@ The returned value is RECURRENCES filtered by index." (pop dts)) (nreverse r))) -(defun icr:refine-from-clauses (interval recur-value dtstart +(defun icr:refine-from-clauses (interval rrule dtstart &optional vtimezone) - "Resolve INTERVAL into subintervals based on the clauses in RECUR-VALUE. + "Resolve INTERVAL into subintervals based on the clauses in RRULE. The resulting list of subintervals represents all times in INTERVAL -which match the BY* clauses of RECUR-VALUE except BYSETPOS, as well as +which match the BY* clauses of RRULE except BYSETPOS, as well as the constraints implicit in DTSTART. (For example, if there is no BYMINUTE clause, subintervals will have the same minute value as DTSTART.) @@ -1047,14 +1047,14 @@ components and TZID should be the `icalendar-tzid' property value of one of those timezones. In this case, TZID states the time zone of DTSTART, and the offsets effective in that time zone on the dates and times of recurrences will be local to that time zone." - (let ((freq (ical:recur-freq recur-value)) - (weekstart (ical:recur-weekstart recur-value)) + (let ((freq (ical:rrule-freq rrule)) + (weekstart (ical:rrule-weekstart rrule)) (subintervals (list interval))) (dolist (byunit (list 'BYMONTH 'BYWEEKNO 'BYYEARDAY 'BYMONTHDAY 'BYDAY 'BYHOUR 'BYMINUTE 'BYSECOND)) - (let ((values (ical:recur-by* byunit recur-value)) + (let ((values (ical:rrule-by* byunit rrule)) (in-month nil)) ;; When there is no explicit BY* clause, use the value implicit ;; in DTSTART. (These conditions are adapted from RFC8984: @@ -1086,26 +1086,26 @@ recurrences will be local to that time zone." (setq values (list (ical:date/time-weekday dtstart)))) (when (and (eq byunit 'BYMONTHDAY) (eq freq 'MONTHLY) - (not (ical:recur-by* 'BYDAY recur-value)) + (not (ical:rrule-by* 'BYDAY rrule)) (not values)) (setq values (list (ical:date/time-monthday dtstart)))) (when (and (eq freq 'YEARLY) - (not (ical:recur-by* 'BYYEARDAY recur-value))) + (not (ical:rrule-by* 'BYYEARDAY rrule))) (when (and (eq byunit 'BYMONTH) (not values) - (not (ical:recur-by* 'BYWEEKNO recur-value)) - (or (ical:recur-by* 'BYMONTHDAY recur-value) - (not (ical:recur-by* 'BYDAY recur-value)))) + (not (ical:rrule-by* 'BYWEEKNO rrule)) + (or (ical:rrule-by* 'BYMONTHDAY rrule) + (not (ical:rrule-by* 'BYDAY rrule)))) (setq values (list (ical:date/time-month dtstart)))) (when (and (eq byunit 'BYMONTHDAY) (not values) - (not (ical:recur-by* 'BYWEEKNO recur-value)) - (not (ical:recur-by* 'BYDAY recur-value))) + (not (ical:rrule-by* 'BYWEEKNO rrule)) + (not (ical:rrule-by* 'BYDAY rrule))) (setq values (list (ical:date/time-monthday dtstart)))) (when (and (eq byunit 'BYDAY) (not values) - (ical:recur-by* 'BYWEEKNO recur-value) - (not (ical:recur-by* 'BYMONTHDAY recur-value))) + (ical:rrule-by* 'BYWEEKNO rrule) + (not (ical:rrule-by* 'BYMONTHDAY rrule))) (setq values (list (ical:date/time-weekday dtstart))))) ;; Handle offsets in a BYDAY clause: @@ -1120,7 +1120,7 @@ recurrences will be local to that time zone." (when (and (eq byunit 'BYDAY) (or (eq freq 'MONTHLY) (and (eq freq 'YEARLY) - (ical:recur-by* 'BYMONTH recur-value)))) + (ical:rrule-by* 'BYMONTH rrule)))) (setq in-month t)) ;; On each iteration of the loop, we refine the subintervals @@ -1246,10 +1246,10 @@ retrieved on subsequent calls with the same arguments." (ical:with-component component ((ical:dtstart :value dtstart) (ical:tzoffsetfrom :value offset-from) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:rdate :all rdate-nodes) ;; TODO: these can also be ical:period values (ical:exdate :all exdate-nodes)) - (if (not (or recur-value rdate-nodes)) + (if (not (or rrule rdate-nodes)) ;; No recurrences to calculate, so just return early: nil ;; Otherwise, calculate recurrences in the interval: @@ -1267,19 +1267,19 @@ retrieved on subsequent calls with the same arguments." (t (let* (;; Start by generating all the recurrences matching the ;; BY* clauses except for BYSETPOS: - (subs (icr:refine-from-clauses interval recur-value dtstart + (subs (icr:refine-from-clauses interval rrule dtstart vtimezone)) (sub-recs (icr:subintervals-to-recurrences subs dtstart vtimezone)) ;; Apply any BYSETPOS clause to this set: - (keep-indices (ical:recur-by* 'BYSETPOS recur-value)) + (keep-indices (ical:rrule-by* 'BYSETPOS rrule)) (pos-recs (if keep-indices (icr:bysetpos-filter keep-indices sub-recs) sub-recs)) ;; Remove any recurrences before DTSTART or after UNTIL ;; (both of which are inclusive bounds): - (until (ical:recur-until recur-value)) + (until (ical:rrule-until rrule)) (until-recs (seq-filter (lambda (rec) (and (ical:date/time<= dtstart rec) @@ -1345,9 +1345,9 @@ UTC offsets local to that time zone." (ical:with-component component ((ical:dtstart :value dtstart) (ical:tzoffsetfrom :value offset-from) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:rdate :all rdate-nodes)) - (if (not (or recur-value rdate-nodes)) + (if (not (or rrule rdate-nodes)) ;; No recurrences to calculate, so just return early: nil ;; Otherwise, calculate the recurrences in the window: @@ -1362,11 +1362,11 @@ UTC offsets local to that time zone." (let* (;; don't look for nonexistent intervals: (low-start (if (ical:date/time< lower dtstart) dtstart lower)) - (until (ical:recur-until recur-value)) + (until (ical:rrule-until rrule)) (high-end (if (and until (ical:date/time< until upper)) until upper)) - (curr-interval (icr:find-interval low-start dtstart recur-value + (curr-interval (icr:find-interval low-start dtstart rrule vtimezone)) - (high-interval (icr:find-interval high-end dtstart recur-value + (high-interval (icr:find-interval high-end dtstart rrule vtimezone)) (high-intbound (icr:interval-high high-interval)) (recurrences nil)) @@ -1376,7 +1376,7 @@ UTC offsets local to that time zone." (nconc (icr:recurrences-in-interval curr-interval component vtimezone) recurrences)) - (setq curr-interval (icr:next-interval curr-interval recur-value + (setq curr-interval (icr:next-interval curr-interval rrule vtimezone))) ;; exclude any recurrences inside the first and last intervals but @@ -1447,7 +1447,7 @@ UTC offsets local to that time zone." (ical:with-component component ((ical:dtstart :value dtstart) (ical:tzoffsetfrom :value offset-from) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:rdate :all rdate-nodes)) (when (memq (ical:ast-node-type component) '(ical:standard ical:daylight)) ;; in time zone observances, set the zone field in dtstart @@ -1457,18 +1457,18 @@ UTC offsets local to that time zone." :zone offset-from :dst (not (ical:daylight-component-p component))))) - (unless (or recur-value rdate-nodes) + (unless (or rrule rdate-nodes) (error "No recurrence data in component: %s" component)) - (unless (ical:recur-count recur-value) + (unless (ical:rrule-count rrule) (error "Recurrence rule has no COUNT clause")) - (let ((count (ical:recur-count recur-value)) - (int (icr:nth-interval 0 dtstart recur-value vtimezone)) + (let ((count (ical:rrule-count rrule)) + (int (icr:nth-interval 0 dtstart rrule vtimezone)) recs) (while (length< recs count) (setq recs (nconc recs (icr:recurrences-in-interval int component vtimezone (- count (length recs))))) - (setq int (icr:next-interval int recur-value vtimezone))) + (setq int (icr:next-interval int rrule vtimezone))) recs))) @@ -1771,7 +1771,7 @@ ignored." (dolist (obs (append stds dls)) (ical:with-component obs ((ical:dtstart :value start) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:rdate :all rdate-nodes) (ical:tzoffsetfrom :value offset-from)) ;; DTSTART of the observance must be given as local time, and is @@ -1781,7 +1781,7 @@ ignored." (effective-start (ical:date-time-variant start :zone offset-from :dst (not is-daylight))) - (until (ical:recur-until recur-value)) + (until (ical:rrule-until rrule)) (bound ;; Optimization: compute a rough upper bound for when ;; an observance might apply, thus allowing us to skip @@ -1796,8 +1796,8 @@ ignored." (when until (ical:date-time-variant until :year (+ (decoded-time-year until) - (ical:recur-interval-size - recur-value))))) + (ical:rrule-interval-size + rrule))))) (observance-might-apply (if given-clock-time (icr:-w/in-locally-p given-clock-time effective-start bound) @@ -1859,11 +1859,11 @@ ignored." ;; start of each observance onset), which ;; `icr:tz-set-zone' knows to handle specially without ;; calling this function. - (when recur-value + (when rrule (let* ((target (or given-clock-time (decode-time given-abs-time offset-from))) (int (icr:find-interval - target effective-start recur-value offset-from)) + target effective-start rrule offset-from)) (<=given (if given-clock-time (lambda (rec) @@ -1883,7 +1883,7 @@ ignored." ;; actually be in the previous interval, e.g. ;; if `dt' is in January after an annual change to ;; Standard Time in November. So check that as well. - (setq int (icr:previous-interval int recur-value + (setq int (icr:previous-interval int rrule effective-start offset-from)) (setq int-recs diff --git a/lisp/calendar/icalendar-shortdoc.el b/lisp/calendar/icalendar-shortdoc.el index ef6f23cdfb9..cf706f54672 100644 --- a/lisp/calendar/icalendar-shortdoc.el +++ b/lisp/calendar/icalendar-shortdoc.el @@ -252,22 +252,22 @@ "(icalendar-recur-recurrences-to-count '(1 1 2026) '(12 31 2026) vevent)" :eg-result-string "((1 10 2026) (2 10 2026) (3 10 2026))") - (icalendar-recur-freq + (icalendar-rrule-freq :eval - (icalendar-recur-freq '((FREQ MONTHLY) (INTERVAL 3) (BYDAY ((5 . -1)))))) - (icalendar-recur-interval-size - :eval (icalendar-recur-interval-size '((FREQ MONTHLY) (BYDAY ((5 . -1))))) - :eval (icalendar-recur-interval-size '((FREQ MONTHLY) (INTERVAL 3)))) - (icalendar-recur-count - :eval (icalendar-recur-count '((FREQ MONTHLY) (INTERVAL 2) (COUNT 6)))) - (icalendar-recur-until - :eval (icalendar-recur-until '((FREQ WEEKLY) (UNTIL (12 31 2026))))) - (icalendar-recur-by* - :eval (icalendar-recur-by* 'BYDAY '((FREQ MONTHLY) (BYDAY ((5 . -1)))))) - (icalendar-recur-weekstart + (icalendar-rrule-freq '((FREQ MONTHLY) (INTERVAL 3) (BYDAY ((5 . -1)))))) + (icalendar-rrule-interval-size + :eval (icalendar-rrule-interval-size '((FREQ MONTHLY) (BYDAY ((5 . -1))))) + :eval (icalendar-rrule-interval-size '((FREQ MONTHLY) (INTERVAL 3)))) + (icalendar-rrule-count + :eval (icalendar-rrule-count '((FREQ MONTHLY) (INTERVAL 2) (COUNT 6)))) + (icalendar-rrule-until + :eval (icalendar-rrule-until '((FREQ WEEKLY) (UNTIL (12 31 2026))))) + (icalendar-rrule-by* + :eval (icalendar-rrule-by* 'BYDAY '((FREQ MONTHLY) (BYDAY ((5 . -1)))))) + (icalendar-rrule-weekstart :eval - (icalendar-recur-weekstart '((FREQ WEEKLY) (UNTIL (12 31 2026)) (WKST 0))) + (icalendar-rrule-weekstart '((FREQ WEEKLY) (UNTIL (12 31 2026)) (WKST 0))) :eval - (icalendar-recur-weekstart '((FREQ WEEKLY) (UNTIL (12 31 2026)))))) + (icalendar-rrule-weekstart '((FREQ WEEKLY) (UNTIL (12 31 2026)))))) (provide 'icalendar-shortdoc) diff --git a/lisp/disp-table.el b/lisp/disp-table.el index 9f2971a6fc3..467430f30ef 100644 --- a/lisp/disp-table.el +++ b/lisp/disp-table.el @@ -458,6 +458,50 @@ which characters can be displayed and which cannot." (insert ")\n")) (pop-to-buffer buf))) +(defface special-glyphs + '((t :inherit (shadow default))) + "Face for displaying special glyphs." + :group 'basic-faces + :version "31.1") + +(defvar prettify-special-glyphs-saved-truncation) +(defvar prettify-special-glyphs-saved-continuation) + +;;;###autoload +(define-minor-mode prettify-special-glyphs-mode + "Mode to display pretty special character glyphs. +If you have already customized your special character glyphs, only the +`special-glyphs' face is applied to them. This mode only applies to the +`standard-display-table'. Window or buffer display table, if defined, +still take precedence." + :global t + :group 'display + (if prettify-special-glyphs-mode + (let ((tbl standard-display-table) + truncation wrap) + ;; Save current glyphs. + (setq prettify-special-glyphs-saved-truncation + (display-table-slot tbl 'truncation) + prettify-special-glyphs-saved-continuation + (display-table-slot tbl 'wrap)) + ;; Prepare new ones with face. + (setq truncation + (if prettify-special-glyphs-saved-truncation + (make-glyph-code prettify-special-glyphs-saved-truncation + 'special-glyphs) + (make-glyph-code ?→ 'special-glyphs)) + wrap + (if prettify-special-glyphs-saved-continuation + (make-glyph-code prettify-special-glyphs-saved-continuation + 'special-glyphs) + (make-glyph-code ?↩ 'special-glyphs))) + ;; Alter display-table. + (set-display-table-slot tbl 'truncation truncation) + (set-display-table-slot tbl 'wrap wrap)) + (let ((tbl standard-display-table)) + ;; Reset saved glyphs. + (set-display-table-slot tbl 'truncation prettify-special-glyphs-saved-truncation) + (set-display-table-slot tbl 'wrap prettify-special-glyphs-saved-continuation)))) (provide 'disp-table) diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 0952033a6cc..b6d52b8b3c5 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -379,6 +379,8 @@ The same keyword arguments are supported as in (ffap--gcc-is-clang-p)) (defvar tramp-default-host-alist) +(defvar tramp-default-remote-shell) +(defvar tramp-encoding-shell) (defvar tramp-methods) (defvar tramp-remote-path) @@ -394,16 +396,17 @@ The same keyword arguments are supported as in (cond ((getenv "REMOTE_TEMPORARY_FILE_DIRECTORY")) ((eq system-type 'windows-nt) null-device) - ;; Android's built-in shell is far too dysfunctional to support + ;; Android's built-in shell is far too dysfunctional to support. ;; Tramp. ((eq system-type 'android) null-device) (t (add-to-list 'tramp-methods - '("mock" - (tramp-login-program "sh") + `("mock" + (tramp-login-program ,tramp-encoding-shell) (tramp-login-args (("-i"))) - (tramp-direct-async ("-c")) - (tramp-remote-shell "/bin/sh") + (tramp-direct-async ("-c")) + (tramp-tmpdir ,temporary-file-directory) + (tramp-remote-shell ,tramp-default-remote-shell) (tramp-remote-shell-args ("-c")) (tramp-connection-timeout 10))) (add-to-list diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el index 0097f590b43..54f105f6fda 100644 --- a/lisp/gnus/gnus-icalendar.el +++ b/lisp/gnus/gnus-icalendar.el @@ -131,18 +131,18 @@ (cl-defmethod gnus-icalendar-event:recurring-freq ((event gnus-icalendar-event)) "Return recurring frequency of EVENT." - (ical:recur-freq (gnus-icalendar-event:recur event))) + (ical:rrule-freq (gnus-icalendar-event:recur event))) (cl-defmethod gnus-icalendar-event:recurring-interval ((event gnus-icalendar-event)) "Return recurring interval of EVENT." - (ical:recur-interval-size (gnus-icalendar-event:recur event))) + (ical:rrule-interval-size (gnus-icalendar-event:recur event))) (cl-defmethod gnus-icalendar-event:recurring-days ((event gnus-icalendar-event)) "Return, when available, the week day numbers on which the EVENT recurs." (let ((rrule (gnus-icalendar-event:recur event))) (when rrule (mapcar (lambda (el) (if (consp el) (car el) el)) - (ical:recur-by* 'BYDAY rrule))))) + (ical:rrule-by* 'BYDAY rrule))))) (cl-defmethod gnus-icalendar-event:start ((event gnus-icalendar-event)) (format-time-string "%Y-%m-%d %H:%M" (gnus-icalendar-event:start-time event))) diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index 99f1735dfec..a478093fc6c 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -444,7 +444,7 @@ only affect the Gcc copy, but not the original message." (defun gnus-inews-make-draft-meta-information (group articles) (when (numberp articles) (setq articles (list articles))) - (concat "(\"" group "\"" + (concat "(" (prin1-to-string (or group "")) (if articles (concat " " (mapconcat diff --git a/lisp/isearch.el b/lisp/isearch.el index 785d324cac3..92bd9af6643 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -347,6 +347,9 @@ you can define more of these faces using the same numbering scheme." When non-nil, all text currently visible on the screen matching the current search string is highlighted lazily (see `lazy-highlight-initial-delay' and `lazy-highlight-interval'). +However, if `lazy-highlight-buffer' is non-nil, all text in the +entire buffer matching the search string is highlighted lazily. +The highlighting uses the `lazy-highlight' face. When multiple windows display the current buffer, the highlighting is displayed only on the selected window, unless @@ -385,8 +388,8 @@ If this is nil, extra highlighting can be \"manually\" removed with (defcustom lazy-highlight-initial-delay 0.25 "Seconds to wait before beginning to lazily highlight all matches. -This setting only has effect when the search string is less than -`lazy-highlight-no-delay-length' characters long." +This setting only has effect when the search string is shorter than +`lazy-highlight-no-delay-length' characters." :type 'number :group 'lazy-highlight) @@ -428,7 +431,9 @@ When non-nil, all text in the buffer matching the current search string is highlighted lazily (see `lazy-highlight-initial-delay', `lazy-highlight-interval' and `lazy-highlight-buffer-max-at-a-time'). This is useful when `lazy-highlight-cleanup' is customized to nil -and doesn't remove full-buffer highlighting after a search." +and doesn't remove full-buffer highlighting after a search. +If this is nil (the default), only the text currently visible in +the window is highlighted, subject to `isearch-lazy-highlight'." :type 'boolean :group 'lazy-highlight :version "27.1") @@ -443,7 +448,9 @@ and doesn't remove full-buffer highlighting after a search." (((class color) (min-colors 8)) (:background "turquoise3" :distant-foreground "white")) (t (:underline t))) - "Face for lazy highlighting of matches other than the current one." + "Face for lazy highlighting of matches other than the current one. +Used in Isearch when `isearch-lazy-highlight' is non-nil, +and in `query-replace' when `query-replace-lazy-highlight' is non-nil." :group 'lazy-highlight :group 'basic-faces) @@ -1006,6 +1013,9 @@ Each element is an `isearch--state' struct where the slots are With a prefix argument, do an incremental regular expression search instead. \\ As you type characters, they add to the search string and are found. +Current match for the search string is highlighted using the `isearch' face, +and if `isearch-lazy-highlight' is non-nil, the other matches are +highlighted using the `lazy-highlight' face. The following non-printing keys are bound in `isearch-mode-map'. Type \\[isearch-delete-char] to cancel last input item from end of search string. diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 95e1c5ecad8..1fc77f0e80d 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -63,7 +63,7 @@ SYNTAX can be one of the symbols `default' (default), (interactive (list (completing-read - "method: " + "Method: " (tramp-compat-seq-keep (lambda (x) (when-let* ((name (symbol-name x)) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 7b90ae9c11b..8d4dc557676 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -3107,6 +3107,11 @@ will be used." ,(concat "PS1=" (getenv-internal "PS1" env))))) (eenv (setenv-internal eenv "INSIDE_EMACS" nil nil)) (eenv (setenv-internal eenv "PS1" nil nil)) + vars + (eenv (dolist (item (reverse eenv) vars) + (setq item (split-string item "=" 'omit)) + (setcdr item (string-join (cdr item) "=")) + (push (format "%s %s" (car item) (cdr item)) vars))) (command (when (stringp program) (format "cd %s && %s exec %s %s env %s %s" @@ -3222,10 +3227,15 @@ will be used." (delete-region mark (point-max)) (narrow-to-region (point-max) (point-max)) ;; Send delayed environment. - (dolist (entry eenv) + (when eenv (tramp-send-command - v (format - "export %s" (tramp-shell-quote-argument entry)))) + v + (format + "while read var val; do export $var=\"$val\"; done <<'%s'\n%s\n%s" + tramp-end-of-heredoc + (string-join eenv "\n") + tramp-end-of-heredoc) + t)) ;; Now do it. (if command ;; Send the command. @@ -3350,6 +3360,8 @@ will be used." env "EMACSCLIENT_TRAMP" (tramp-make-tramp-file-name v 'noloc) 'keep))) (setq env (setenv-internal env "INSIDE_EMACS" (tramp-inside-emacs) 'keep)) + ;; Remove looong environment variables, for example from tramp-tests.el. + (setq env (seq-remove (lambda (x) (length> x 256)) env)) (when env (setq command (format diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index a913271a41a..e945dfb9739 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -4014,7 +4014,7 @@ for which LSP on-type-formatting should be requested." (when annotation (concat " " (propertize annotation - 'face 'font-lock-function-name-face)))))) + 'face 'completions-annotations)))))) :company-kind ;; Associate each lsp-item with a lsp-kind symbol. (lambda (proxy) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index ffa8407b9bc..8479c3cfd9a 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -406,8 +406,6 @@ name symbol." ;; to work fine. This is needed so that dabbrev-expand ;; $VARNAME works. ?$ "'" - ?* "." - ?+ "." ?! "." ?% "." ?: "." diff --git a/lisp/replace.el b/lisp/replace.el index 933249d824c..48e158de531 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -133,9 +133,11 @@ you can define more of these faces using the same numbering scheme." (defcustom query-replace-lazy-highlight t "Controls the lazy-highlighting during query replacements. -When non-nil, all text in the buffer matching the current match -is highlighted lazily using isearch lazy highlighting (see -`lazy-highlight-initial-delay' and `lazy-highlight-interval')." +When non-nil, all text matching the current match that is +currently visible in the window is highlighted lazily using +isearch lazy highlighting (see `lazy-highlight-initial-delay' +and `lazy-highlight-interval'). Uses the `lazy-highlight' face +to highlight matching text." :type 'boolean :group 'lazy-highlight :group 'matching @@ -143,7 +145,9 @@ is highlighted lazily using isearch lazy highlighting (see (defface query-replace '((t (:inherit isearch))) - "Face for highlighting query replacement matches." + "Face for highlighting query replacement matches. +Used in `query-replace' and `query-replace-regexp' +when `query-replace-highlight' is non-nil" :group 'matching :version "22.1") @@ -427,6 +431,11 @@ In Transient Mark mode, if the mark is active, operate on the contents of the region. Otherwise, operate from point to the end of the buffer's accessible portion. +The current match of FROM-STRING is highlighted using +the `query-replace' face. Other matches of FROM-STRING are highlighted +using the `lazy-highlight' face if `query-replace-lazy-highlight' is +non-nil. + In interactive use, the prefix arg (non-nil DELIMITED in non-interactive use), means replace only matches surrounded by word boundaries. A negative prefix arg means replace backward. @@ -508,6 +517,11 @@ accessible portion. When invoked interactively, matching a newline with `\\n' will not work; use \\`C-q C-j' instead. To match a tab character (`\\t'), just press \\`TAB'. +The current match of REGEXP is highlighted using +the `query-replace' face. Other matches of REGEXP are highlighted +using the `lazy-highlight' face if `query-replace-lazy-highlight' is +non-nil. + Use \\\\[next-history-element] \ to pull the last incremental search regexp to the minibuffer that reads REGEXP, or invoke replacements from diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index 7f87ff5d0bc..be2247b870e 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -5402,9 +5402,12 @@ With a prefix argument, ARG, if needed, install parsers for `html', (markdown-ts--set-up)) (t (warn "markdown-ts-mode cannot be set up; using fundamental-mode. -The tree-sitter parsers `markdown' and `markdown-inline' were not found. +%s." + (if (treesit-available-p) + "The tree-sitter parsers `markdown' and `markdown-inline' were not found. Use the command `markdown-ts-mode-install-parsers' to install them. -With a prefix argument, it can also install optional parsers.") +With a prefix argument, it can also install optional parsers" + "Emacs was built without Tree-sitter support, or could not load Tree-sitter")) (fundamental-mode))))) ;;;###autoload diff --git a/src/gtkutil.c b/src/gtkutil.c index daa3fd1b993..4fc6b3e0108 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -1352,8 +1352,6 @@ xg_frame_set_size_and_position (struct frame *f, int width, int height) gdk_window_move_resize (gwin, x, y, outer_width, outer_height); if (FRAME_PARENT_FRAME (f)) { - /* Record the dimensions for GTK to remember after remapping. */ - gtk_window_resize (GTK_WINDOW (gwin), outer_width, outer_height); /* Resize all inner widgets and Cairo surface right away so the next redisplay drawing isn't clipped to the old size. */ GtkAllocation alloc = {0, 0, outer_width, outer_height}; diff --git a/src/widget.c b/src/widget.c index b843bca1fb9..f05818fcc76 100644 --- a/src/widget.c +++ b/src/widget.c @@ -428,8 +428,7 @@ EmacsFrameResize (Widget widget) ew->core.width, ew->core.height, f->new_width, f->new_height); - if (FRAME_PIXEL_WIDTH (f) == ew->core.width - && FRAME_PIXEL_HEIGHT (f) == ew->core.height) + if (FRAME_PARENT_FRAME (f)) /* Size always up to date. */ return; change_frame_size (f, ew->core.width, ew->core.height, diff --git a/src/window.c b/src/window.c index 3dbf1530d78..792c43d0555 100644 --- a/src/window.c +++ b/src/window.c @@ -7611,7 +7611,7 @@ struct saved_window { union vectorlike_header header; - Lisp_Object window, buffer, start, pointm, old_pointm; + Lisp_Object window, buffer, old_buffer, start, pointm, old_pointm; Lisp_Object pixel_left, pixel_top, pixel_height, pixel_width; Lisp_Object left_col, top_line, total_cols, total_lines; Lisp_Object normal_cols, normal_lines; @@ -7835,6 +7835,7 @@ the return value is nil. Otherwise the value is t. */) /* If we squirreled away the buffer, restore it now. */ if (BUFFERP (w->combination_limit)) wset_buffer (w, w->combination_limit); + wset_old_buffer (w, p->old_buffer); w->pixel_left = XFIXNAT (p->pixel_left); w->pixel_top = XFIXNAT (p->pixel_top); w->pixel_width = XFIXNAT (p->pixel_width); @@ -8221,6 +8222,7 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, ptrdiff_t i) wset_temslot (w, make_fixnum (i)); i++; p->window = window; p->buffer = (WINDOW_LEAF_P (w) ? w->contents : Qnil); + p->old_buffer = w->old_buffer; p->pixel_left = make_fixnum (w->pixel_left); p->pixel_top = make_fixnum (w->pixel_top); p->pixel_width = make_fixnum (w->pixel_width); diff --git a/test/lisp/calendar/diary-icalendar-tests.el b/test/lisp/calendar/diary-icalendar-tests.el index 22faeb7aa23..06272a39cf4 100644 --- a/test/lisp/calendar/diary-icalendar-tests.el +++ b/test/lisp/calendar/diary-icalendar-tests.el @@ -817,8 +817,8 @@ SOURCE, if given, should be a symbol; it is used to name the test." (should (equal (ical:date-time-to-date dtstart) (calendar-nth-named-day 1 4 1 di:recurring-start-year))) (should (= 16 (decoded-time-hour dtstart))) - (should (eq (ical:recur-freq rrule) 'WEEKLY)) - (should (equal (ical:recur-by* 'BYDAY rrule) (list 4))))) + (should (eq (ical:rrule-freq rrule) 'WEEKLY)) + (should (equal (ical:rrule-by* 'BYDAY rrule) (list 4))))) (dit:parse-test ;; Multiline entry, parsed as one event: @@ -961,10 +961,10 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:summary :value summary)) (should (equal dtstart '(5 28 1995))) - (should (eq (ical:recur-freq recur-value) 'YEARLY)) + (should (eq (ical:rrule-freq rrule) 'YEARLY)) (should (equal summary "H's birthday")))) (dit:parse-test @@ -977,11 +977,11 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:summary :value summary)) (should (equal dtstart '(6 24 2012))) - (should (equal (ical:recur-freq recur-value) 'DAILY)) - (should (equal (ical:recur-until recur-value) '(7 10 2012))) + (should (equal (ical:rrule-freq rrule) 'DAILY)) + (should (equal (ical:rrule-until rrule) '(7 10 2012))) (should (equal summary "Vacation")))) (dit:parse-test @@ -994,11 +994,11 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:summary :value summary)) (should (equal dtstart '(3 1 2012))) - (should (eq (ical:recur-freq recur-value) 'DAILY)) - (should (eq (ical:recur-interval-size recur-value) 50)) + (should (eq (ical:rrule-freq rrule) 'DAILY)) + (should (eq (ical:rrule-interval-size rrule) 50)) (should (equal summary "Renew medication")))) (dit:parse-test @@ -1011,13 +1011,13 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:summary :value summary)) (should (equal dtstart (calendar-nth-named-day 4 4 11 di:recurring-start-year))) - (should (eq (ical:recur-freq recur-value) 'MONTHLY)) - (should (equal (ical:recur-by* 'BYMONTH recur-value) (list 11))) - (should (equal (ical:recur-by* 'BYDAY recur-value) (list '(4 . 4)))) + (should (eq (ical:rrule-freq rrule) 'MONTHLY)) + (should (equal (ical:rrule-by* 'BYMONTH rrule) (list 11))) + (should (equal (ical:rrule-by* 'BYDAY rrule) (list '(4 . 4)))) (should (equal summary "American Thanksgiving")))) (dit:parse-test @@ -1030,13 +1030,13 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:summary :value summary)) (should (equal dtstart (calendar-nth-named-day 4 5 1 di:recurring-start-year))) - (should (eq (ical:recur-freq recur-value) 'MONTHLY)) + (should (eq (ical:rrule-freq rrule) 'MONTHLY)) ;; day 3 is Wednesday, so offset of 2 means Friday (=5): - (should (equal (ical:recur-by* 'BYDAY recur-value) (list '(5 . 4)))) + (should (equal (ical:rrule-by* 'BYDAY rrule) (list '(5 . 4)))) (should (equal summary "Monthly committee meeting")))) (dit:parse-test @@ -1052,11 +1052,11 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:exdate :values exdates) (ical:summary :value summary)) (should (equal dtstart '(11 11 2024))) - (should (eq (ical:recur-freq recur-value) 'WEEKLY)) + (should (eq (ical:rrule-freq rrule) 'WEEKLY)) (should (equal exdates '((12 23 2024) (12 30 2024)))) (should (equal summary "Reading group")))) @@ -1070,12 +1070,12 @@ SOURCE, if given, should be a symbol; it is used to name the test." :tests (ical:with-component (car parsed) ((ical:dtstart :value dtstart) - (ical:rrule :value recur-value) + (ical:rrule :value rrule) (ical:summary :value summary)) (should (equal dtstart (list 10 22 di:recurring-start-year))) - (should (eq (ical:recur-freq recur-value) 'YEARLY)) - (should (equal (ical:recur-by* 'BYMONTH recur-value) (list 10 11 12))) - (should (equal (ical:recur-by* 'BYMONTHDAY recur-value) (list 22))) + (should (eq (ical:rrule-freq rrule) 'YEARLY)) + (should (equal (ical:rrule-by* 'BYMONTH rrule) (list 10 11 12))) + (should (equal (ical:rrule-by* 'BYMONTHDAY rrule) (list 22))) (should (equal summary "Rake leaves")))) (dit:parse-test diff --git a/test/lisp/calendar/icalendar-parser-tests.el b/test/lisp/calendar/icalendar-parser-tests.el index f3c5de35c87..8215f977e26 100644 --- a/test/lisp/calendar/icalendar-parser-tests.el +++ b/test/lisp/calendar/icalendar-parser-tests.el @@ -388,21 +388,21 @@ test." (ipt:parse/print-test "FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1" -:type icalendar-recur +:type icalendar-rrule-value :parser icalendar-parse-value-node :printer icalendar-print-value-node :source rfc5545-sec3.3.10/1) (ipt:parse/print-test "FREQ=YEARLY;INTERVAL=2;BYMONTH=1;BYDAY=SU;BYHOUR=8,9;BYMINUTE=30" -:type icalendar-recur +:type icalendar-rrule-value :parser icalendar-parse-value-node :printer icalendar-print-value-node :source rfc5545-sec3.3.10/2) (ipt:parse/print-test "FREQ=DAILY;COUNT=10;INTERVAL=2" -:type icalendar-recur +:type icalendar-rrule-value :parser icalendar-parse-value-node :printer icalendar-print-value-node :source rfc5545-sec3.3.10/3) diff --git a/test/lisp/calendar/icalendar-recur-tests.el b/test/lisp/calendar/icalendar-recur-tests.el index c1f7bb90974..199d6c4aa25 100644 --- a/test/lisp/calendar/icalendar-recur-tests.el +++ b/test/lisp/calendar/icalendar-recur-tests.el @@ -1383,7 +1383,7 @@ END:VTIMEZONE (ts-obs/onset (icr:tz-observance-on ts ict:tz-eastern))) (should (eq 'ical:daylight (ical:ast-node-type obs))) (should (equal dt onset)) - (should (equal end (ical:recur-until + (should (equal end (ical:rrule-until (ical:with-property-of obs 'ical:rrule nil value)))) (should (equal obs/onset ts-obs/onset))) @@ -1534,10 +1534,10 @@ SOURCE should be a symbol; it is used to name the test." ,(format "Parse and evaluate recur-value example from `%s':\n%s" source doc) :tags ,tags - (let* ((parsed (ical:parse-from-string 'ical:recur ,recur-string)) + (let* ((parsed (ical:parse-from-string 'ical:rrule-value ,recur-string)) (recvalue (ical:ast-node-value parsed)) - (until (ical:recur-until recvalue)) - (count (ical:recur-count recvalue)) + (until (ical:rrule-until recvalue)) + (count (ical:rrule-count recvalue)) (dtstart ,dtstart) (tzid (when (cl-typep dtstart 'ical:date-time) diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index c0ad7205c5d..4d11faf64de 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -117,9 +117,10 @@ (t (add-to-list 'tramp-methods `("mock" - (tramp-login-program ,tramp-default-remote-shell) + (tramp-login-program ,tramp-encoding-shell) (tramp-login-args (("-i"))) (tramp-direct-async ("-c")) + (tramp-tmpdir ,temporary-file-directory) (tramp-remote-shell ,tramp-default-remote-shell) (tramp-remote-shell-args ("-c")) (tramp-connection-timeout 10))) @@ -225,7 +226,8 @@ auto-revert-use-notify t ert-batch-backtrace-right-margin nil ert-remote-temporary-file-directory - (expand-file-name ert-remote-temporary-file-directory) + (let ((tramp-show-ad-hoc-proxies t) (non-essential t)) + (expand-file-name ert-remote-temporary-file-directory)) password-cache-expiry nil remote-file-name-inhibit-cache nil tramp-allow-unsafe-temporary-files t @@ -6855,8 +6857,7 @@ INPUT, if non-nil, is a string sent to the process." "Check loooong `tramp-remote-path'." :tags '(:expensive-test) (skip-unless (tramp--test-enabled)) - (skip-unless (tramp--test-sh-p)) - (skip-unless (not (tramp--test-crypt-p))) + (skip-unless (tramp--test-supports-environment-variables-p)) (let* ((tmp-name1 (tramp--test-make-temp-name)) (default-directory ert-remote-temporary-file-directory) @@ -9330,9 +9331,6 @@ If INTERACTIVE is non-nil, the tests are run interactively." ;; Use `skip-when' starting with Emacs 30.1. -;; Starting with Emacs 29, use `ert-with-temp-file' and -;; `ert-with-temp-directory'. - (provide 'tramp-tests) ;;; tramp-tests.el ends here