mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-16 21:41:27 +00:00
Merge from origin/emacs-31
7a17f97baaPrettify special glyphsf13287fde0Revert "sh-script: Mark + and * as punctuation rather tha...70b79b3ed8Rename `icalendar-recur' type and related functions3d2bb233f2; Minor Tramp changesf6281d757d; * etc/NEWS: Tell how to disable 'markdown-ts-mode'.142b1e0d4cFix Lisp injection via X-Draft-From in Gnusd6f7b2d99bSave/restore old_buffer slot via window configurations (B...e0fbecaf65Adapt ert-remote-temporary-file-directory settings3de7f0ce5eFix warning message in 'markdown-ts-mode--initialize'7df8604ea6; Improve documentation of lazy-highlight in search and r...2936b36164Fix "assertion 'GTK_IS_WINDOW (window)' failed"98348a0bdc[Xt] Fix child frame resizing glitch13b29eebc1Eglot: use standard face for completion annotations (bug#... # Conflicts: # etc/NEWS
This commit is contained in:
commit
ccc94458fb
25 changed files with 335 additions and 216 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
||||
|
|
|
|||
21
etc/NEWS.31
21
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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
\\<isearch-mode-map>
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -406,8 +406,6 @@ name symbol."
|
|||
;; to work fine. This is needed so that dabbrev-expand
|
||||
;; $VARNAME works.
|
||||
?$ "'"
|
||||
?* "."
|
||||
?+ "."
|
||||
?! "."
|
||||
?% "."
|
||||
?: "."
|
||||
|
|
|
|||
|
|
@ -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 \\<minibuffer-local-map>\\[next-history-element] \
|
||||
to pull the last incremental search regexp to the minibuffer
|
||||
that reads REGEXP, or invoke replacements from
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue