commit 336253ddd398fed75d3e404f860691171de4d9d3 (HEAD, refs/remotes/origin/master) Merge: 4cc6cdcf9d4 df3fb94f091 Author: Eli Zaretskii Date: Sat Jun 14 11:23:54 2025 -0400 Merge from origin/emacs-30 df3fb94f091 Insert missing step to make use of directory tracking OSC... 1bed2949583 * lisp/keymap.el (keymap-set): Refer to 'key-description'... 941158fc133 Support new tree-sitter grammar filename format (bug#78754) 888f846d377 Fix crash when evaluating "(signal nil 5)" (bug#78738) 51b9e92ab8e Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/... c0a913ea4f3 ; * doc/lispref/modes.texi (Font Lock Basics): Remove old... 37de076017a Adapt emba integration (don't merge) commit 4cc6cdcf9d408407c69cdd9d468ec0de58038a44 Merge: 4d88b925ba8 37de076017a Author: Eli Zaretskii Date: Sat Jun 14 11:23:54 2025 -0400 ; Merge from origin/emacs-30 The following commit was skipped: 37de076017a Adapt emba integration (don't merge) commit 4d88b925ba839fab9448915edcc699a6647df71c Author: Steven Allen Date: Fri Jun 13 07:51:37 2025 -0700 Improve documentation of the internal Lisp_Process->status field Contrary to the existing documentation here, the value of this field cannot be the symbols open or closed. Furthermore, this field is never set to "stop" for network connections. * src/process.h (Lisp_Process): Improve/fix documentation of the 'status' field. (Bug#78784) diff --git a/src/process.h b/src/process.h index a27e95a9199..1e0ad8c7f68 100644 --- a/src/process.h +++ b/src/process.h @@ -83,13 +83,20 @@ struct Lisp_Process Lisp_Object mark; /* Symbol indicating status of process. - This may be a symbol: run, open, closed, listen, or failed. + This may be a symbol: run, listen, or failed. Or it may be a pair (connect . ADDRINFOS) where ADDRINFOS is a list of remaining (PROTOCOL . ADDRINFO) pairs to try. Or it may be (failed ERR) where ERR is an integer, string or symbol. Or it may be a list, whose car is stop, exit or signal and whose cdr is a pair (EXIT_CODE . COREDUMP_FLAG) - or (SIGNAL_NUMBER . COREDUMP_FLAG). */ + or (SIGNAL_NUMBER . COREDUMP_FLAG). + The symbols open and closed are not used here: an open network + process has an internal status of "run" and a closed network + process an internal status of "exit". + Stopped network processes do not set this status to "stop"; + instead, they set command to t. "stop" is only used here to + indicate stopped system processes. + */ Lisp_Object status; /* Coding-system for decoding the input from this process. */ commit 69254cd51a1cdf8a67f2c10421c098cf907c0125 Author: Eli Zaretskii Date: Sat Jun 14 17:56:01 2025 +0300 ; * src/profiler.c (export_log): Fix whitespace (bug#78762). diff --git a/src/profiler.c b/src/profiler.c index f421eb52b31..6d6769b0cdd 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -560,7 +560,9 @@ before returning. */) static Lisp_Object export_log (struct profiler_log *plog) { - if (!plog->log) return Qnil; + if (!plog->log) + return Qnil; + log_t *log = plog->log; /* The returned hash table uses `equal' as key equivalence predicate which is more discriminating than the `function-equal' used by commit 009cdc8ae09ef060c030feac06578a4ba37cd8c5 Author: Zach Shaftel Date: Wed Jun 11 15:37:31 2025 -0400 Fix segfault in profiler-cpu-log and profiler-memory-log (bug#78763) * src/profiler.c (export_log): Check if a log has been allocated first, and return nil if it hasn't. (Fprofiler_cpu_log, Fprofiler_memory_log): Doc fix. * test/src/profiler-tests.el (profiler-tests-cpu-profiler) (profiler-tests-memory-profiler): New tests. diff --git a/src/profiler.c b/src/profiler.c index 12d75012c79..f421eb52b31 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -534,7 +534,11 @@ DEFUN ("profiler-cpu-log", Fprofiler_cpu_log, Sprofiler_cpu_log, The log is a hash-table mapping backtraces to counters which represent the amount of time spent at those points. Every backtrace is a vector of functions, where the last few elements may be nil. -Before returning, a new log is allocated for future samples. */) + +If the profiler has not run since the last invocation of +`profiler-cpu-log' (or was never run at all), return nil. If the +profiler is currently running, allocate a new log for future samples +before returning. */) (void) { /* Temporarily stop profiling to avoid it interfering with our data @@ -556,6 +560,7 @@ Before returning, a new log is allocated for future samples. */) static Lisp_Object export_log (struct profiler_log *plog) { + if (!plog->log) return Qnil; log_t *log = plog->log; /* The returned hash table uses `equal' as key equivalence predicate which is more discriminating than the `function-equal' used by @@ -639,7 +644,11 @@ DEFUN ("profiler-memory-log", The log is a hash-table mapping backtraces to counters which represent the amount of memory allocated at those points. Every backtrace is a vector of functions, where the last few elements may be nil. -Before returning, a new log is allocated for future samples. */) + +If the profiler has not run since the last invocation of +`profiler-memory-log' (or was never run at all), return nil. If the +profiler is currently running, allocate a new log for future samples +before returning. */) (void) { bool prof_mem = profiler_memory_running; diff --git a/test/src/profiler-tests.el b/test/src/profiler-tests.el new file mode 100644 index 00000000000..fe50de713e2 --- /dev/null +++ b/test/src/profiler-tests.el @@ -0,0 +1,58 @@ +;;; profiler-tests.el --- tests for src/profiler.c -*- lexical-binding:t -*- + +;; Copyright (C) 2025 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;;; Code: + +(require 'ert) + +(ert-deftest profiler-tests-memory-profiler () + (let ((was-running (profiler-memory-running-p))) + ;; do this first in case the profiler was already running + (should (eq was-running (profiler-memory-stop))) + (profiler-memory-start) + (should-error (profiler-memory-start)) + (should (profiler-memory-running-p)) + (should (hash-table-p (profiler-memory-log))) + ;; `profiler-memory-log' shouldn't terminate profiling. + (should (profiler-memory-running-p)) + (profiler-memory-stop) + (profiler-memory-log) ;flush the log + (should-not (profiler-memory-log)) + (when was-running (profiler-memory-start)))) + +(defconst profiler-tests-cpu-sampling-interval 1000000) + +(ert-deftest profiler-tests-cpu-profiler () + (skip-unless (fboundp 'profiler-cpu-start)) + (let ((was-running (profiler-cpu-running-p))) + (should (eq was-running (profiler-cpu-stop))) + (profiler-cpu-start profiler-tests-cpu-sampling-interval) + (should-error (profiler-cpu-start profiler-tests-cpu-sampling-interval)) + (should (hash-table-p (profiler-cpu-log))) + (should (profiler-cpu-running-p)) + (profiler-cpu-stop) + (profiler-cpu-log) + (should-not (profiler-cpu-log)) + (when was-running + (profiler-cpu-start (or (bound-and-true-p profiler-sampling-interval) + profiler-tests-cpu-sampling-interval))))) + +;;; profiler-tests.el ends here commit e1d0ee1b6b545c82937755dd19787c3d7059eca3 Author: Steven Allen Date: Wed Jun 11 14:55:43 2025 -0700 mailcap: Treat .ics files as text/calendar This ensures iCalendar attachments are always displayed correctly (via `gnus-icalendar-mm-inline'), even when they have an incorrect MIME type (looking at you Google Calendar). * lisp/net/mailcap.el (mailcap-mime-extensions): Add a mapping from ".ics" to "text/calendar". (Bug#78764) diff --git a/lisp/net/mailcap.el b/lisp/net/mailcap.el index 7e69826160e..b80baab97d5 100644 --- a/lisp/net/mailcap.el +++ b/lisp/net/mailcap.el @@ -920,6 +920,7 @@ If NO-DECODE is non-nil, don't decode STRING." (".htm" . "text/html") (".html" . "text/html") (".icon" . "image/x-icon") + (".ics" . "text/calendar") (".ief" . "image/ief") (".jpg" . "image/jpeg") (".macp" . "image/x-macpaint") commit 994f816ca8bac187e5f0d32cdf7343899acd7d7b Author: Eli Zaretskii Date: Sat Jun 14 17:21:18 2025 +0300 ; * lisp/time.el (world-clock--sort-entries): Avoid compiler warning. diff --git a/lisp/time.el b/lisp/time.el index 7f2f276be6d..3750206d08e 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -592,8 +592,8 @@ See `world-clock'." (defvar world-clock--timer nil "The current world clock timer.") -(defun world-clock--sort-entries (tzlist time) - "Sort TZLIST according to `world-clock-sort-order' at a given TIME." +(defun world-clock--sort-entries (tzlist timeval) + "Sort TZLIST according to `world-clock-sort-order' at a given TIMEVAL." (pcase world-clock-sort-order ((pred null) tzlist) ((or (and (pred stringp) format) @@ -601,9 +601,9 @@ See `world-clock'." ,(and (pred booleanp) reverse))) (sort tzlist :key (lambda (entry) - (format-time-string format time (car entry))) + (format-time-string format timeval (car entry))) :reverse reverse)) - ((pred functionp) (funcall world-clock-sort-order tzlist time)) + ((pred functionp) (funcall world-clock-sort-order tzlist timeval)) (_ (error "Invalid `world-clock-sort-order': `%s'" world-clock-sort-order)))) commit 9c6c7c4bb7c02d08a14fc6f5e2517f51a28e927c Author: Jacob S. Gordon Date: Mon Jun 2 21:06:37 2025 -0400 world-clock: Add user option to control order of entries * lisp/time.el (world-clock-sort-order): Add user option. (world-clock--sort-entries): Add auxiliary sorting function. (world-clock-display): Sort entries based on the new user option. (Bug#78678) diff --git a/etc/NEWS b/etc/NEWS index d643723945f..0c66ac38105 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2193,6 +2193,17 @@ Latin-1 range 0-255. This hard-coded maximum is replaced by the display of matching vectors as Unicode strings. The default value is '0xFF' or '255' to preserve the existing behavior. +** Time + +*** New user option 'world-clock-sort-order'. +This option controls the order of timezone entries in the 'world-clock'. +By default, no sorting is done, and entries appear in the same order as +in 'world-clock-list'. Any format understood by 'format-time-string' +can be used to specify a key for the sort order, which is updated upon +each refresh. The sort direction can be controlled by using a cons cell +of a format string and a boolean. Alternatively, a sorting function can +be provided directly. + * New Modes and Packages in Emacs 31.1 diff --git a/lisp/time.el b/lisp/time.el index fd66775c879..7f2f276be6d 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -536,6 +536,36 @@ If the value is t instead of an alist, use the value of :type 'natnum :version "28.1") +(defcustom world-clock-sort-order nil + "Sort order of entries in the `world-clock'. +This variable can take a few different forms: + +- A nil value indicates no sorting, and the displayed order is the same + as in `world-clock-list'. This is the default. + +- A string is taken as a format for `format-time-string', whose output + is used as the sorting key. For example, an ISO 8601 format `\"%FT%T\"' + means entries are sorted in chronological order. + +- A cons cell of the form (STRING . BOOL) again provides a format for + `format-time-string'. The boolean part controls the sort direction. + For example, `(\"%FT%T\" . t)' means entries are sorted in reverse + chronological order. + +- A function that takes a list of (TIMEZONE LABEL) entries and a TIME as + arguments, and returns another list of entries." + :version "31.1" + :type '(choice (const :tag "No sorting" nil) + (const :tag "Chronological order" "%FT%T") + (const :tag "Reverse chronological order" ("%FT%T" . t)) + (const :tag "Time of day order" "%T") + (const :tag "Reverse time of day order" ("%T" . t)) + (string :tag "Format string") + (cons :tag "Format string and reverse flag" + (string :tag "Format string") + (boolean :tag "Reverse")) + (function :tag "Sorting function"))) + (defface world-clock-label '((t :inherit font-lock-variable-name-face)) "Face for time zone label in `world-clock' buffer.") @@ -562,15 +592,32 @@ See `world-clock'." (defvar world-clock--timer nil "The current world clock timer.") +(defun world-clock--sort-entries (tzlist time) + "Sort TZLIST according to `world-clock-sort-order' at a given TIME." + (pcase world-clock-sort-order + ((pred null) tzlist) + ((or (and (pred stringp) format) + `(,(and (pred stringp) format) . + ,(and (pred booleanp) reverse))) + (sort tzlist + :key (lambda (entry) + (format-time-string format time (car entry))) + :reverse reverse)) + ((pred functionp) (funcall world-clock-sort-order tzlist time)) + (_ (error "Invalid `world-clock-sort-order': `%s'" + world-clock-sort-order)))) + (defun world-clock-display (alist) - "Replace current buffer text with times in various zones, based on ALIST." - (let ((inhibit-read-only t) - (buffer-undo-list t) - (now (current-time)) - (max-width 0) - result fmt) + "Replace current buffer text with times in various zones, based on ALIST. +The entries are ordered according to `world-clock-sort-order'." + (let* ((inhibit-read-only t) + (buffer-undo-list t) + (now (current-time)) + (zones (world-clock--sort-entries alist now)) + (max-width 0) + result fmt) (erase-buffer) - (dolist (zone alist) + (dolist (zone zones) (let* ((label (cadr zone)) (width (string-width label))) (push (cons label commit 5bd9fa084dcf0ce8efaaf9212c24addec48d824f Author: Jacob S. Gordon Date: Mon May 19 15:05:37 2025 -0400 calc: Allow strings with character codes above Latin-1 The current behavior of the functions 'calc-display-strings', 'strings', and 'bstrings' is to skip any vector containing integers outside the Latin-1 range (0x00-0xFF). We introduce a custom variable 'calc-string-maximum-character' to replace this hard-coded maximum, and to allow vectors containing higher character codes to be displayed as strings. The default value of 0xFF preserves the existing behavior. * lisp/calc/calc.el (calc-string-maximum-character): Add custom variable 'calc-string-maximum-character'. * lisp/calc/calccomp.el (math-vector-is-string): Replace hard-coded maximum with 'calc-string-maximum-character', and the 'natnump' assertion with 'characterp'. The latter guards against the maximum being larger than '(max-char)', but not on invalid types of the maximum such as strings. * test/lisp/calc/calc-tests.el (calc-math-vector-is-string): Add tests for 'math-vector-is-string' using different values of 'calc-string-maximum-character'. * doc/misc/calc.texi (Quick Calculator, Strings, Customizing Calc): Add variable definition for 'calc-string-maximum-character' and reference thereof when discussing 'calc-display-strings'. Generalize a comment about string display and availability of 8-bit fonts. (Bug#78528) diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index 61466b55201..eda442ecb38 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -10179,7 +10179,7 @@ result @samp{[120]} (because 120 is the ASCII code of the lower-case is displayed only according to the current mode settings. But running Quick Calc again and entering @samp{120} will produce the result @samp{120 (16#78, 8#170, x)} which shows the number in its -decimal, hexadecimal, octal, and ASCII forms. +decimal, hexadecimal, octal, and character forms. Please note that the Quick Calculator is not any faster at loading or computing the answer than the full Calculator; the name ``quick'' @@ -10836,11 +10836,11 @@ from 1 to @samp{n}. @cindex Strings @cindex Character strings Character strings are not a special data type in the Calculator. -Rather, a string is represented simply as a vector all of whose -elements are integers in the range 0 to 255 (ASCII codes). You can -enter a string at any time by pressing the @kbd{"} key. Quotation -marks and backslashes are written @samp{\"} and @samp{\\}, respectively, -inside strings. Other notations introduced by backslashes are: +Rather, a string is represented simply as a vector all of whose elements +are integers in the Latin-1 range 0 to 255. You can enter a string at +any time by pressing the @kbd{"} key. Quotation marks and backslashes +are written @samp{\"} and @samp{\\}, respectively, inside strings. +Other notations introduced by backslashes are: @example @group @@ -10857,21 +10857,24 @@ inside strings. Other notations introduced by backslashes are: @noindent Finally, a backslash followed by three octal digits produces any -character from its ASCII code. +character from its code. @kindex d " @pindex calc-display-strings Strings are normally displayed in vector-of-integers form. The @w{@kbd{d "}} (@code{calc-display-strings}) command toggles a mode in which any vectors of small integers are displayed as quoted strings -instead. +instead. The display of strings containing higher character codes can +be enabled by increasing the custom variable +@code{calc-string-maximum-character} (@pxref{Customizing Calc}). The backslash notations shown above are also used for displaying -strings. Characters 128 and above are not translated by Calc; unless -you have an Emacs modified for 8-bit fonts, these will show up in -backslash-octal-digits notation. For characters below 32, and -for character 127, Calc uses the backslash-letter combination if -there is one, or otherwise uses a @samp{\^} sequence. +strings. For ASCII control characters (below 32), and for the +@code{DEL} character (127), Calc uses the backslash-letter combination +if there is one, or otherwise uses a @samp{\^} sequence. Control +characters above 127 are not translated by Calc, and will show up in +backslash-octal-digits notation. The display of higher character codes +will depend on your display settings and system font coverage. The only Calc feature that uses strings is @dfn{compositions}; @pxref{Compositions}. Strings also provide a convenient @@ -35684,6 +35687,33 @@ choose from, or the user can enter their own date. The default value of @code{calc-gregorian-switch} is @code{nil}. @end defvar +@defvar calc-string-maximum-character +@xref{Strings}.@* + +The variable @code{calc-string-maximum-character} is the maximum value +of a vector's elements for @code{calc-display-strings}, @code{string}, +and @code{bstring} to display the vector as a string. This maximum +@emph{must} represent a character, i.e. it's a non-negative integer less +than or equal to @code{(max-char)} or @code{0x3FFFFF}. Any negative +value effectively disables the display of strings, and for values larger +than @code{0x3FFFFF} the display acts as if the maximum were +@code{0x3FFFFF}. Some natural choices (and their resulting ranges) are: + +@itemize +@item +@code{0x7F} or 127 (ASCII), +@item +@code{0xFF} or 255 (Latin-1, the default), +@item +@code{0x10FFFF} (Unicode), +@item +@code{0x3FFFFF} (Emacs). +@end itemize + +The default value of @code{calc-string-maximum-character} is @code{0xFF} +or 255. +@end defvar + @node Reporting Bugs @appendix Reporting Bugs diff --git a/etc/NEWS b/etc/NEWS index 34f9725d992..d643723945f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2182,7 +2182,19 @@ modifier, it scrolls by year. The month and year navigation key bindings 'M-}', 'M-{', 'C-x ]' and 'C-x [' now have the alternative keys '}', '{', ']' and '['. +** Calc + +*** New user option 'calc-string-maximum-character'. + +Previously, the 'calc-display-strings', 'string', and 'bstring' +functions only considered integer vectors whose elements are all in the +Latin-1 range 0-255. This hard-coded maximum is replaced by +'calc-string-maximum-character', and setting it to a higher value allows +the display of matching vectors as Unicode strings. The default value +is '0xFF' or '255' to preserve the existing behavior. + + * New Modes and Packages in Emacs 31.1 ** New minor mode 'delete-trailing-whitespace-mode'. diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index a7bd671998e..a350419b320 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -628,6 +628,37 @@ Otherwise, 1 / 0 is changed to uinf (undirected infinity).") (defcalcmodevar calc-display-strings nil "If non-nil, display vectors of byte-sized integers as strings.") +(defcustom calc-string-maximum-character #xFF + "Maximum value of vector contents to be displayed as a string. + +If a vector consists of characters up to this maximum value, the +function `calc-display-strings' will toggle displaying the vector as a +string. This maximum value must represent a character (see `characterp'). +Some natural choices (and their resulting ranges) are: + +- `0x7F' (`ASCII'), +- `0xFF' (`Latin-1', the default), +- `0x10FFFF' (`Unicode'), +- `0x3FFFFF' (`Emacs'). + +Characters for low control codes are either caret or backslash escaped, +while others without a glyph are displayed in backslash-octal notation. +The display of strings containing higher character codes will depend on +your display settings and system font coverage. + +See the following for further information: + +- info node `(calc)Strings', +- info node `(elisp)Text Representations', +- info node `(emacs)Text Display'." + :version "31.1" + :type '(choice (restricted-sexp :tag "Character Code" + :match-alternatives (characterp)) + (const :tag "ASCII" #x7F) + (const :tag "Latin-1" #xFF) + (const :tag "Unicode" #x10FFFF) + (const :tag "Emacs" #x3FFFFF))) + (defcalcmodevar calc-matrix-just 'center "If nil, vector elements are left-justified. If `right', vector elements are right-justified. diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el index cc27e6c2025..7e1f8378d80 100644 --- a/lisp/calc/calccomp.el +++ b/lisp/calc/calccomp.el @@ -907,13 +907,20 @@ (concat " " math-comp-right-bracket))))) (defun math-vector-is-string (a) + "Return t if A can be displayed as a string, and nil otherwise. + +Elements of A must either be a character (see `characterp') or a complex +number with only a real character part, each with a value less than or +equal to the custom variable `calc-string-maximum-character'." (while (and (setq a (cdr a)) - (or (and (natnump (car a)) - (<= (car a) 255)) + (or (and (characterp (car a)) + (<= (car a) + calc-string-maximum-character)) (and (eq (car-safe (car a)) 'cplx) - (natnump (nth 1 (car a))) + (characterp (nth 1 (car a))) (eq (nth 2 (car a)) 0) - (<= (nth 1 (car a)) 255))))) + (<= (nth 1 (car a)) + calc-string-maximum-character))))) (null a)) (defconst math-vector-to-string-chars '( ( ?\" . "\\\"" ) diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el index 42eb6077b04..2fd6a6be45e 100644 --- a/test/lisp/calc/calc-tests.el +++ b/test/lisp/calc/calc-tests.el @@ -879,5 +879,72 @@ An existing calc stack is reused, otherwise a new one is created." (should-error (math-read-preprocess-string nil)) (should-error (math-read-preprocess-string 42))) +(ert-deftest calc-math-vector-is-string () + "Test `math-vector-is-string' with varying `calc-string-maximum-character'. + +All tests operate on both an integer vector and the corresponding +complex vector. The sets covered are: + +1. `calc-string-maximum-character' is a valid character. The last case +with `0x3FFFFF' is borderline, as integers above it will not make it +past the `characterp' test. +2. `calc-string-maximum-character' is negative, so the test always fails. +3. `calc-string-maximum-character' is above `(max-char)', so only the +first `characterp' test is active. +4. `calc-string-maximum-character' has an invalid type, which triggers +an error in the comparison." + (cl-flet* ((make-vec (lambda (contents) (append (list 'vec) contents))) + (make-cplx (lambda (x) (list 'cplx x 0))) + (make-cplx-vec (lambda (contents) + (make-vec (mapcar #'make-cplx contents))))) + ;; 1: calc-string-maximum-character is a valid character + (dolist (maxchar '(#x7F #xFF #x10FFFF #x3FFFFD #x3FFFFF)) + (let* ((calc-string-maximum-character maxchar) + (small-chars (number-sequence (- maxchar 2) maxchar)) + (large-chars (number-sequence maxchar (+ maxchar 2))) + (small-real-vec (make-vec small-chars)) + (large-real-vec (make-vec large-chars)) + (small-cplx-vec (make-cplx-vec small-chars)) + (large-cplx-vec (make-cplx-vec large-chars))) + (should (math-vector-is-string small-real-vec)) + (should-not (math-vector-is-string large-real-vec)) + (should (math-vector-is-string small-cplx-vec)) + (should-not (math-vector-is-string large-cplx-vec)))) + ;; 2: calc-string-maximum-character is negative + (let* ((maxchar -1) + (calc-string-maximum-character maxchar) + (valid-contents (number-sequence 0 2)) + (invalid-contents (number-sequence (- maxchar 2) maxchar)) + (valid-real-vec (make-vec valid-contents)) + (invalid-real-vec (make-vec invalid-contents)) + (valid-cplx-vec (make-cplx-vec valid-contents)) + (invalid-cplx-vec (make-cplx-vec invalid-contents))) + (should-not (math-vector-is-string valid-real-vec)) + (should-not (math-vector-is-string invalid-real-vec)) + (should-not (math-vector-is-string valid-cplx-vec)) + (should-not (math-vector-is-string invalid-cplx-vec))) + ;; 3: calc-string-maximum-character is larger than (max-char) + (let* ((maxchar (+ (max-char) 3)) + (calc-string-maximum-character maxchar) + (valid-chars (number-sequence (- (max-char) 2) (max-char))) + (invalid-chars (number-sequence (1+ (max-char)) maxchar)) + (valid-real-vec (make-vec valid-chars)) + (invalid-real-vec (make-vec invalid-chars)) + (valid-cplx-vec (make-cplx-vec valid-chars)) + (invalid-cplx-vec (make-cplx-vec invalid-chars))) + (should (math-vector-is-string valid-real-vec)) + (should-not (math-vector-is-string invalid-real-vec)) + (should (math-vector-is-string valid-cplx-vec)) + (should-not (math-vector-is-string invalid-cplx-vec))) + ;; 4: calc-string-maximum-character has the wrong type + (let* ((calc-string-maximum-character "wrong type") + (contents (number-sequence 0 2)) + (real-vec (make-vec contents)) + (cplx-vec (make-cplx-vec contents))) + (should-error (math-vector-is-string real-vec) + :type 'wrong-type-argument) + (should-error (math-vector-is-string cplx-vec) + :type 'wrong-type-argument)))) + (provide 'calc-tests) ;;; calc-tests.el ends here commit 82766b71a45a691e19386422d3a12a3e0321b2e8 Author: Eli Zaretskii Date: Sat Jun 14 16:56:44 2025 +0300 ; Fix warnings in MinGW builds * src/w32fns.c (msh_mousewheel): Declare. * src/treesit.c (treesit_debug_print_linecol): Fix format specifiers. * lib-src/pop.c (pfn_getaddrinfo, pfn_freeaddrinfo): Now static. diff --git a/lib-src/pop.c b/lib-src/pop.c index db6e7638990..dc48e2ddcc3 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -1565,9 +1565,10 @@ find_crlf (char *in_string, int len) /* The following 2 functions are only available since XP, so we load them dynamically and provide fallbacks. */ -int (WINAPI *pfn_getaddrinfo) (const char *, const char *, - const struct addrinfo *, struct addrinfo **); -void (WINAPI *pfn_freeaddrinfo) (struct addrinfo *); +static int (WINAPI *pfn_getaddrinfo) (const char *, const char *, + const struct addrinfo *, + struct addrinfo **); +static void (WINAPI *pfn_freeaddrinfo) (struct addrinfo *); static int load_ws2 (void) diff --git a/src/treesit.c b/src/treesit.c index 67dd2ee3a7a..7fbe331c234 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -937,7 +937,7 @@ void treesit_debug_print_linecol (struct ts_linecol); void treesit_debug_print_linecol (struct ts_linecol linecol) { - printf ("{ line=%ld col=%ld bytepos=%ld }\n", linecol.line, linecol.col, linecol.bytepos); + printf ("{ line=%td col=%td bytepos=%td }\n", linecol.line, linecol.col, linecol.bytepos); } /* Returns true if BUF tracks linecol. */ diff --git a/src/w32fns.c b/src/w32fns.c index 493f33486fb..fd64b04691d 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -266,6 +266,7 @@ extern AppendMenuW_Proc unicode_append_menu; static int ignore_ime_char = 0; /* W95 mousewheel handler */ +extern unsigned int msh_mousewheel; unsigned int msh_mousewheel = 0; /* Timers */ commit ebe7c1b5285d196f1ec3f3ca9dd96f99ba544997 Merge: 1682a6b6060 d97ddce0aac Author: Eli Zaretskii Date: Sat Jun 14 16:55:53 2025 +0300 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit 1682a6b606097d24050efc318f74d738c3881fb4 Author: Eli Zaretskii Date: Sat Jun 14 16:41:50 2025 +0300 ; * etc/NEWS: Announce support for semantic-linefeed filling. diff --git a/etc/NEWS b/etc/NEWS index e96fcb5c087..34f9725d992 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -581,6 +581,14 @@ activate the mark if it is not already active. The default value is t, which retains the old behavior. This variable has no effect when Transient Mark mode is off. +--- +** New commands for filling text using semantic linefeeds. +The new command 'fill-paragraph-semlf' fills a paragraph of text using +"semantic linefeeds", whereby a newline is inserted after every +sentence. The new command 'fill-region-as-paragraph-semlf' fills a +region of text using semantic linefeeds as if the region were a single +paragraph. + * Changes in Specialized Modes and Packages in Emacs 31.1 commit 24a699243e29649f1c126f56afaf4252fac95312 Author: Roi Martin Date: Fri Mar 21 14:22:46 2025 +0100 Add semantic linefeed support for paragraph filling * lisp/textmodes/fill.el (fill-region-as-paragraph-semlf): Add function to fill a region using semantic linefeeds as if it were a single paragraph. (fill-paragraph-semlf): Add function to fill paragraph using semantic linefeeds. * test/lisp/textmodes/fill-tests.el (fill-test-fill-region-as-paragraph-semlf) (fill-test-fill-paragraph-semlf) (fill-test-fill-paragraph-semlf-fill-paragraph-function) (fill-test-fill-paragraph-semlf-justify) (fill-test-fill-paragraph-semlf-sentence-end-double-space) (fill-test-fill-paragraph-semlf-fill-column) (fill-test-fill-paragraph-semlf-punctuation-marks) (fill-test-fill-paragraph-semlf-twice) (fill-test-fill-paragraph-semlf-fill-prefix) (fill-test-fill-paragraph-semlf-indented-block) (fill-test-fill-paragraph-semlf-revert) (fill-test-fill-paragraph-semlf-emacs-lisp-mode) (fill-test-fill-paragraph-semlf-c-mode) (fill-test-fill-paragraph-semlf-org-mode) (fill-test-fill-paragraph-semlf-markdown-mode): Add tests. * test/lisp/textmodes/fill-resources/semlf-c-mode.erts: * test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts: * test/lisp/textmodes/fill-resources/semlf-fill-column.erts: * test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts: * test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts: * test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts: * test/lisp/textmodes/fill-resources/semlf-indented-block.erts: * test/lisp/textmodes/fill-resources/semlf-justify.erts: * test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts: * test/lisp/textmodes/fill-resources/semlf-org-mode.erts: * test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts: * test/lisp/textmodes/fill-resources/semlf-revert.erts: * test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts: * test/lisp/textmodes/fill-resources/semlf-twice.erts: * test/lisp/textmodes/fill-resources/semlf.erts: Add test data. (Bug#78561) diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index e38d030734f..386a88bda3a 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -1583,4 +1583,96 @@ Also, if CITATION-REGEXP is non-nil, don't fill header lines." "") string)) +(defun fill-region-as-paragraph-semlf (from to &optional justify + nosqueeze squeeze-after) + "Fill the region using semantic linefeeds as if it were a single paragraph. +This command removes any paragraph breaks in the region and extra +newlines at the end, and fills lines within the region. Text is +refilled putting a newline character after each sentence, calling +`forward-sentence' to find the ends of sentences. If +`sentence-end-double-space' is non-nil, period followed by one space is +not the end of a sentence. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. If NOSQUEEZE is non-nil, do not to make spaces between words +canonical before filling. SQUEEZE-AFTER, if non-nil, should be a buffer +position; it means canonicalize spaces only starting from that position. +See `canonically-space-region' for the meaning of canonicalization of +spaces. The variable `fill-column' controls the width for filling. + +Return the `fill-prefix' used for filling. + +For more details about semantic linefeeds, see `fill-paragraph-semlf'." + (interactive (progn + (barf-if-buffer-read-only) + (list (region-beginning) + (region-end) + (if current-prefix-arg 'full)))) + (unless (memq justify '(t nil none full center left right)) + (setq justify 'full)) + + (let ((from (min from to)) + (to (max from to)) + pfx) + (goto-char from) + (with-restriction (line-beginning-position) to + (let ((fill-column (point-max))) + (setq pfx (or (save-excursion + (fill-region-as-paragraph (point) + (point-max) + nil + nosqueeze + squeeze-after)) + ""))) + (while (not (eobp)) + (let ((fill-prefix pfx)) + (fill-region-as-paragraph (point) + (progn (forward-sentence) (point)) + justify + nosqueeze + squeeze-after)) + (when (and (> (point) (line-beginning-position)) + (< (point) (line-end-position))) + (delete-horizontal-space) + (insert "\n") + (insert pfx)))) + (unless (eobp) (forward-char 1)) + pfx)) + +(defun fill-paragraph-semlf (&optional justify) + "Fill paragraph at or after point using semantic linefeeds. +Refill text putting a newline character after each sentence, calling +`forward-sentence' to find the ends of sentences. If +`sentence-end-double-space' is non-nil, period followed by one space is +not the end of a sentence. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. The variable `fill-column' controls the width for filling. + +Return the `fill-prefix' used for filling. + +You can use this function as the value of `fill-paragraph-function', so +`fill-paragraph' and other filling commands will use it. + +For more details about semantic linefeeds, see `https://sembr.org/' and +`https://rhodesmill.org/brandon/2012/one-sentence-per-line/'." + (interactive (progn + (barf-if-buffer-read-only) + (list (if current-prefix-arg 'full)))) + (unless (memq justify '(t nil none full center left right)) + (setq justify 'full)) + + (save-excursion + (let ((to (progn + (fill-forward-paragraph 1) + (backward-word) + (end-of-line) + (point))) + (from (progn + (fill-forward-paragraph -1) + (forward-word) + (beginning-of-line) + (point)))) + (fill-region-as-paragraph-semlf from to justify)))) + ;;; fill.el ends here diff --git a/test/lisp/textmodes/fill-resources/semlf-c-mode.erts b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts new file mode 100644 index 00000000000..a28eb68cfc6 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts @@ -0,0 +1,183 @@ +Point-Char: | + +Name: c-mode - single-line + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +// ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: c-mode - single-line - fill-prefix - marker + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// - eiusmod tempor. +// - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// - veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. +// - Duis aute irure dolor in reprehenderit in voluptate velit esse +// - cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// - officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - fill-prefix - whitespace + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. +// Duis aute irure dolor in reprehenderit in voluptate velit esse +// cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - indented block + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. Incididunt ut labore et dolore magna +// aliqua. Ut enim ad minim veniam, quis nostrud exercitation +// ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-=-= + +Name: c-mode - multi-line + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim + * ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - marker + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * - eiusmod tempor. + * - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * - veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. + * - Duis aute irure dolor in reprehenderit in voluptate velit esse + * - cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * - officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - whitespace + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. + * Duis aute irure dolor in reprehenderit in voluptate velit esse + * cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - indented block + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. Incididunt ut labore et dolore magna + * aliqua. Ut enim ad minim veniam, quis nostrud exercitation + * ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts new file mode 100644 index 00000000000..fe71ee32c1a --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts @@ -0,0 +1,87 @@ +Point-Char: | + +Name: emacs-lisp-mode + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +;; ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - marker + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; - eiusmod tempor. +;; - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; - veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. +;; - Duis aute irure dolor in reprehenderit in voluptate velit esse +;; - cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; - officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - whitespace + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. +;; Duis aute irure dolor in reprehenderit in voluptate velit esse +;; cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - indented block + +The `fill-forward-paragraph' function jumps to the beginning/end of +the comment. + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. Incididunt ut labore et dolore magna +;; aliqua. Ut enim ad minim veniam, quis nostrud exercitation +;; ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-column.erts b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts new file mode 100644 index 00000000000..20db7b1f9c5 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts @@ -0,0 +1,15 @@ +Name: fill-column + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts new file mode 100644 index 00000000000..467e7401cf5 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts @@ -0,0 +1,12 @@ +Name: fill-paragraph-function + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts new file mode 100644 index 00000000000..e067eff6970 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts @@ -0,0 +1,35 @@ +Name: fill-prefix - marker + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +- eiusmod tempor. +- Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +- veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. +- Duis aute irure dolor in reprehenderit in voluptate velit esse +- cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +- officia deserunt mollit anim id est laborum. +=-=-= + +Name: fill-prefix - whitespace + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts b/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts new file mode 100644 index 00000000000..114eaa46fc3 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts @@ -0,0 +1,37 @@ +Point-Char: | + +Name: fill-region-as-paragraph-semlf + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, s|ed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +do eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-indented-block.erts b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts new file mode 100644 index 00000000000..e483567c6ab --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts @@ -0,0 +1,31 @@ +Point-Char: | + +Name: indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-justify.erts b/test/lisp/textmodes/fill-resources/semlf-justify.erts new file mode 100644 index 00000000000..3a951b7ce42 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-justify.erts @@ -0,0 +1,12 @@ +Name: justify + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts new file mode 100644 index 00000000000..7257708c245 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts @@ -0,0 +1,129 @@ +Point-Char: | + +Name: markdown-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - indented block +Skip: t + +TODO - In `markdown-mode', the `fill-forward-paragraph' function +ignores code blocks. We should reach out to the `markdown-mode' +maintainer(s) to understand the reason for this and possibly suggest a +change to this behavior. This works as expected in +`markdown-ts-mode'. + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-org-mode.erts b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts new file mode 100644 index 00000000000..81dd4841de9 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts @@ -0,0 +1,122 @@ +Point-Char: | + +Name: org-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts new file mode 100644 index 00000000000..5346216e9f9 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts @@ -0,0 +1,13 @@ +Name: punctuation marks + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua! Ut enim +ad minim veniam? Quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua! +Ut enim ad minim veniam? +Quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-revert.erts b/test/lisp/textmodes/fill-resources/semlf-revert.erts new file mode 100644 index 00000000000..d3efca50de6 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-revert.erts @@ -0,0 +1,11 @@ +Name: revert + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts new file mode 100644 index 00000000000..a01beed0f66 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts @@ -0,0 +1,13 @@ +Name: sentence-end-double-space + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris +nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-twice.erts b/test/lisp/textmodes/fill-resources/semlf-twice.erts new file mode 100644 index 00000000000..862dda6e27e --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-twice.erts @@ -0,0 +1,12 @@ +Name: fill twice + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf.erts b/test/lisp/textmodes/fill-resources/semlf.erts new file mode 100644 index 00000000000..f3e331cd938 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf.erts @@ -0,0 +1,88 @@ +Point-Char: | + +Name: beginning of buffer + +=-= +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: second paragraph + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: end of buffer + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.| +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index 6e079973100..8fbd9919bad 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -28,6 +28,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) (ert-deftest fill-test-no-fill-polish-nobreak-p nil "Tests of the `fill-polish-nobreak-p' function." @@ -121,6 +122,117 @@ eius. Foo"))) ;; w "))) + +(ert-deftest fill-test-fill-region-as-paragraph-semlf () + "Test the `fill-region-as-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-fill-region-as-paragraph.erts") + (lambda () + (setq-local fill-column 35) + (fill-region-as-paragraph-semlf + (point) + (progn + (goto-char (point-max)) + (forward-line -1) + (beginning-of-line) + (point)))))) + +(ert-deftest fill-test-fill-paragraph-semlf () + "Test the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-paragraph-function () + "Test `fill-paragraph-semlf' as `fill-paragraph-function'." + (ert-test-erts-file (ert-resource-file "semlf-fill-paragraph-function.erts") + (lambda () + (setq-local fill-paragraph-function #'fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-justify () + "Test the JUSTIFY parameter of the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-justify.erts") + (lambda () + (fill-paragraph-semlf 'justify)))) + +(ert-deftest fill-test-fill-paragraph-semlf-sentence-end-double-space () + "Test the `fill-paragraph-semlf' function with `sentence-end-double-space'." + (ert-test-erts-file (ert-resource-file "semlf-sentence-end-double-space.erts") + (lambda () + (setq-local sentence-end-double-space nil) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-column () + "Test the `fill-paragraph-semlf' function with `fill-column'." + (ert-test-erts-file (ert-resource-file "semlf-fill-column.erts") + (lambda () + (setq-local fill-column 35) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-punctuation-marks () + "Test the `fill-paragraph-semlf' function with different punctuation marks." + (ert-test-erts-file (ert-resource-file "semlf-punctuation-marks.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-twice () + "Test to run the `fill-paragraph-semlf' function twice." + (ert-test-erts-file (ert-resource-file "semlf-twice.erts") + (lambda () + (goto-char (point-min)) + (fill-paragraph-semlf) + (goto-char (point-min)) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-prefix () + "Test the `fill-paragraph-semlf' function with different fill prefixes." + (ert-test-erts-file (ert-resource-file "semlf-fill-prefix.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-indented-block () + "Test the `fill-paragraph-semlf' function with an indented block." + (ert-test-erts-file (ert-resource-file "semlf-indented-block.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-revert () + "Test that the `fill-paragraph-semlf' function can be reverted." + (ert-test-erts-file (ert-resource-file "semlf-revert.erts") + (lambda () + (fill-paragraph) + (fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-emacs-lisp-mode () + "Test the `fill-paragraph-semlf' function with `emacs-lisp-mode'." + (ert-test-erts-file (ert-resource-file "semlf-emacs-lisp-mode.erts") + (lambda () + (emacs-lisp-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-c-mode () + "Test the `fill-paragraph-semlf' function with `c-mode'." + (ert-test-erts-file (ert-resource-file "semlf-c-mode.erts") + (lambda () + (c-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-org-mode () + "Test the `fill-paragraph-semlf' function with `org-mode'." + (ert-test-erts-file (ert-resource-file "semlf-org-mode.erts") + (lambda () + (org-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-markdown-mode () + "Test the `fill-paragraph-semlf' function with `markdown-mode'." + (skip-unless (functionp 'markdown-mode)) + (ert-test-erts-file (ert-resource-file "semlf-markdown-mode.erts") + (lambda () + (markdown-mode) + (fill-paragraph-semlf)))) + (provide 'fill-tests) ;;; fill-tests.el ends here commit d97ddce0aac5fc0e114e7274dd286c5909dced79 Author: Philip Kaludercic Date: Sat Jun 14 15:22:06 2025 +0200 * doc/misc/rcirc.texi: Rephrase recent addition https://lists.gnu.org/archive/html/emacs-devel/2025-06/msg00184.html diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi index ca5f37b1595..3e0e7d1c92d 100644 --- a/doc/misc/rcirc.texi +++ b/doc/misc/rcirc.texi @@ -595,10 +595,10 @@ Before you can use this method, you will have to register your nick and pick a password for it. Contact @code{nickserv} and check out the details. (Using @code{/msg nickserv help}, for example.) -You can set the password to the symbol @code{:auth-source}, to fetch the -password from auth-source (@pxref{Help for users,,,auth, Emacs -auth-source Library}), if you to not hard-code your password in your -configuration. +You can set the password to the keyword @code{:auth-source}, if you do +not want to hard-code your password in your configuration. +@xref{Top,,,auth, Emacs auth-source Library} for details on how and +where Emacs gets the password from. @item chanserv @cindex chanserv authentication commit 3927402af0affcb13989a7afbacb5107badb9f80 Author: Eli Zaretskii Date: Sat Jun 14 11:57:42 2025 +0300 Support 'C-g C-g C-g' "urgent quit" feature on MS-Windows * src/w32fns.c (post_character_message): Support triple-C-g. (Bug#78737) diff --git a/src/w32fns.c b/src/w32fns.c index d96c051f30d..493f33486fb 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -3977,6 +3977,13 @@ post_character_message (HWND hwnd, UINT msg, || (wmsg.dwModifiers == 0 && w32_quit_key && wParam == w32_quit_key)) { + /* See keyboard.c:handle_interrupt. We repeat the same code + here to support the triple-C-g feature. */ + static int force_quit_count; + int count = NILP (Vquit_flag) ? 1 : force_quit_count + 1; + force_quit_count = count; + if (count == 3) + Vinhibit_quit = Qnil; Vquit_flag = Qt; /* The choice of message is somewhat arbitrary, as long as commit df3fb94f09143285980348a3c6264ace913d3c73 (refs/remotes/origin/emacs-30) Author: Sean Whitton Date: Wed Jun 11 15:23:32 2025 +0100 Insert missing step to make use of directory tracking OSC codes * doc/emacs/misc.texi (Interactive Shell): Say to add comint-osc-process-output to comint-output-filter-function. diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index c35afcf802c..4782fe673e0 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -955,6 +955,13 @@ at each prompt, for instance with the following command: printf "\e]7;file://%s%s\e\\" "$HOSTNAME" "$PWD" @end example +@noindent +Then tell Emacs to process the escape codes: + +@lisp +(add-hook 'comint-output-filter-functions #'comint-osc-process-output) +@end lisp + @vindex explicit-shell-file-name @cindex environment variables for subshells @cindex @env{ESHELL} environment variable @@ -1188,7 +1195,7 @@ supports some extend escape codes, like some of the @acronym{OSC} (Operating System Codes) if you put the following in your init file: @lisp -(add-hook 'comint-output-filter-functions 'comint-osc-process-output) +(add-hook 'comint-output-filter-functions #'comint-osc-process-output) @end lisp With this enabled, the output from, for instance, @code{ls commit 1bed29495836dab96fe642dbd6f4c1625c50b12a Author: Robert Pluim Date: Tue Jun 10 09:48:20 2025 +0200 * lisp/keymap.el (keymap-set): Refer to 'key-description'. (Bug#78714) diff --git a/lisp/keymap.el b/lisp/keymap.el index b2c7321a1d5..173600f4d4b 100644 --- a/lisp/keymap.el +++ b/lisp/keymap.el @@ -60,7 +60,11 @@ DEFINITION is anything that can be a key's definition: keymap has been created with a menu name, see `make-keymap'), or a cons (MAP . CHAR), meaning use definition of CHAR in keymap MAP, or an extended menu item definition. - (See info node `(elisp)Extended Menu Items'.)" + (See info node `(elisp)Extended Menu Items'.) + +The `key-description' convenience function converts a simple +string of characters to an equivalent form that is acceptable for +COMMAND." (declare (compiler-macro (lambda (form) (keymap--compile-check key) form))) (keymap--check key) ;; If we're binding this key to another key, then parse that other commit 941158fc133f9722abbca8b89a0a346230b83998 Author: Yuan Fu Date: Tue Jun 10 22:55:58 2025 -0700 Support new tree-sitter grammar filename format (bug#78754) Previously Emacs only looks for filenames like libtree-sitter-json.so.0.0. Now Emacs also look for filenames like libtree-sitter-json.so.15.0. * src/treesit.c: (treesit_load_language_push_for_each_suffix): Add versioned candidate to candidate list too. diff --git a/src/treesit.c b/src/treesit.c index 3a0e9674f65..45d1bc58b06 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -603,14 +603,29 @@ treesit_load_language_push_for_each_suffix (Lisp_Object lib_base_name, Lisp_Object candidate1 = concat2 (lib_base_name, XCAR (suffixes)); #ifndef WINDOWSNT /* On Posix hosts, support libraries named with ABI version - numbers. In the foreseeable future we only need to support - version 0.0. For more details, see + numbers. Originally tree-sitter grammars are always versioned + at 0.0, so we first try that. For more details, see https://lists.gnu.org/archive/html/emacs-devel/2023-04/msg00386.html. */ Lisp_Object candidate2 = concat2 (candidate1, Vtreesit_str_dot_0); Lisp_Object candidate3 = concat2 (candidate2, Vtreesit_str_dot_0); *path_candidates = Fcons (candidate3, *path_candidates); *path_candidates = Fcons (candidate2, *path_candidates); + + /* Since 2025, tree-sitter grammars use their supported + TREE_SITTER_LANGUAGE_VERSION as the major version. So we need + to try all the version supported by the tree-sitter library + too. (See bug#78754) */ + for (int version = TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION; + version <= TREE_SITTER_LANGUAGE_VERSION; + version++) + { + char ext[16]; // 16 should be enough until the end of universe. + snprintf ((char *) &ext, 16, ".%d.0", version); + Lisp_Object versioned_candidate = concat2 (candidate1, + build_string (ext)); + *path_candidates = Fcons (versioned_candidate, *path_candidates); + } #endif *path_candidates = Fcons (candidate1, *path_candidates); } commit 888f846d377a589c6fca5be5d2f4274f423e5fcf Author: Pip Cet Date: Tue Jun 10 12:00:30 2025 +0000 Fix crash when evaluating "(signal nil 5)" (bug#78738) The docstring already warns against calling signal with a nil error symbol, which is for internal use only, but we can avoid crashing in this case. * src/eval.c (Fsignal): Produce a "peculiar error" for more arguments involving non-lists. diff --git a/src/eval.c b/src/eval.c index caae4cb17e2..ecff5d40a10 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1817,7 +1817,7 @@ See also the function `condition-case'. */ (Lisp_Object error_symbol, Lisp_Object data) { /* If they call us with nonsensical arguments, produce "peculiar error". */ - if (NILP (error_symbol) && NILP (data)) + if (NILP (error_symbol) && !CONSP (data)) error_symbol = Qerror; signal_or_quit (error_symbol, data, false); eassume (false); commit 51b9e92ab8e13e1ea3ce9c2f96631f62c6081b62 Merge: c0a913ea4f3 37de076017a Author: Eli Zaretskii Date: Mon Jun 9 17:02:03 2025 +0300 Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/emacs into emacs-30 commit c0a913ea4f3445567ded55da7cd8436a4b872276 Author: Eli Zaretskii Date: Sun Jun 8 18:43:20 2025 +0300 ; * doc/lispref/modes.texi (Font Lock Basics): Remove old info (bug#78720). diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 3a6b163c81c..421ec136c7c 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -3263,10 +3263,7 @@ Lock mode is enabled, to set all the other variables. @defvar font-lock-defaults This variable is set by modes to specify how to fontify text in that mode. It automatically becomes buffer-local when set. If its value -is @code{nil}, Font Lock mode does no highlighting, and you can use -the @samp{Faces} menu (under @samp{Edit} and then @samp{Text -Properties} in the menu bar) to assign faces explicitly to text in the -buffer. +is @code{nil}, Font Lock mode does no highlighting. If non-@code{nil}, the value should look like this: commit 37de076017a7967296bb80a4282a46e3de75322f Author: Michael Albinus Date: Sun Jun 8 14:47:26 2025 +0200 Adapt emba integration (don't merge) * test/infra/Dockerfile.emba (emacs-inotify): Don't install clangd. * test/infra/gitlab-ci.yml (.job-template): Make actions in after_script more robust. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 8c6641b19b9..4c46193c555 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -34,10 +34,9 @@ RUN apt-get update && \ FROM emacs-base as emacs-inotify -# We install clangd for Eglot tests. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ - inotify-tools clangd \ + inotify-tools \ && rm -rf /var/lib/apt/lists/* COPY . /checkout diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml index 2b443d14c24..0d7d31c3fdd 100644 --- a/test/infra/gitlab-ci.yml +++ b/test/infra/gitlab-ci.yml @@ -93,9 +93,9 @@ default: - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/test ${test_name} - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/config.log ${test_name} || true - test -n "$(docker ps -aq -f name=${test_name})" && docker rm ${test_name} - - find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} \) -type f -delete + - test -d ${test_name} && find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} \) -type f -delete # BusyBox find does not know -empty. - - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null + - test -d ${test_name} && find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null .build-template: needs: []