diff options
| author | Po Lu | 2024-08-07 09:21:27 +0800 |
|---|---|---|
| committer | Po Lu | 2024-08-07 09:21:27 +0800 |
| commit | 1a4c26d413f06342fc7fa9230f9312a95a37dae3 (patch) | |
| tree | 26a1bde5bef543ea897022c1e44f807adfd040de | |
| parent | aa5c725fe7ba0a5e67ce1029061b2d887ddeb949 (diff) | |
| parent | 679f7ccc49f6300681309029f4e58cffe3e9ff1a (diff) | |
| download | emacs-1a4c26d413f06342fc7fa9230f9312a95a37dae3.tar.gz emacs-1a4c26d413f06342fc7fa9230f9312a95a37dae3.zip | |
Merge from savannah/emacs-30
679f7ccc49f Prevent accesses to /content files without a GUI connection
f0a7eec5a7d * lisp/net/tramp-integration.el (shortdoc): Use `tramp--w...
fb642d9cf54 Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/...
f1e37ae423f Avoid crashes in very large buffers with long lines
4dc9e99349d Update description of string comparison functions
3817355aed5 Add sanity check when adding Tramp functions to shortdoc
1bbb3220179 ; * lisp/erc/erc-fill.el (erc-fill-wrap-mode): Doc fix.
3f6e7e1da68 js-ts-mode: Make jsdoc's "description" block a comment (b...
1c7e00f4f65 Also condition cjk-misc font-spec on Android
b89d65df5fa ; * etc/PROBLEMS: How to install sources on SUSE Linux (b...
729b17c2026 ; * src/lread.c (Fload): Add comment. (Bug#72433)
bfb1aee9989 Fix ':defer nil' in 'use-package'
d787817076e Document unsupported color Emoji on OpenBSD
db1f749db55 Fix regressions in Customize caused by 'widget-unselected...
f94d58008eb Avoid inserting extra space in SVG data
292fcd20099 Fix c-ts-common filling function (bug#71760)
e50d597f450 Fix missing type checks before specbind
# Conflicts:
# lisp/progmodes/c-ts-common.el
| -rw-r--r-- | doc/lispref/sequences.texi | 5 | ||||
| -rw-r--r-- | doc/lispref/strings.texi | 45 | ||||
| -rw-r--r-- | etc/PROBLEMS | 41 | ||||
| -rw-r--r-- | lisp/erc/erc-fill.el | 20 | ||||
| -rw-r--r-- | lisp/international/fontset.el | 4 | ||||
| -rw-r--r-- | lisp/net/tramp-integration.el | 61 | ||||
| -rw-r--r-- | lisp/progmodes/c-ts-common.el | 5 | ||||
| -rw-r--r-- | lisp/progmodes/js.el | 4 | ||||
| -rw-r--r-- | lisp/svg.el | 1 | ||||
| -rw-r--r-- | lisp/use-package/use-package-core.el | 6 | ||||
| -rw-r--r-- | lisp/wid-edit.el | 5 | ||||
| -rw-r--r-- | src/androidvfs.c | 5 | ||||
| -rw-r--r-- | src/eval.c | 22 | ||||
| -rw-r--r-- | src/lread.c | 3 | ||||
| -rw-r--r-- | src/xdisp.c | 12 | ||||
| -rw-r--r-- | test/src/eval-tests.el | 8 |
16 files changed, 157 insertions, 90 deletions
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index 9b0a0d74f30..079fc6094c3 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi | |||
| @@ -468,8 +468,9 @@ Specifically: | |||
| 468 | @item | 468 | @item |
| 469 | Numbers are compared using @code{<} (@pxref{definition of <}). | 469 | Numbers are compared using @code{<} (@pxref{definition of <}). |
| 470 | @item | 470 | @item |
| 471 | Strings are compared using @code{string<} (@pxref{definition of | 471 | Strings are compared using @code{string-lessp} (@pxref{definition of |
| 472 | string<}) and symbols are compared by comparing their names as strings. | 472 | string-lessp}) and symbols are compared by comparing their names as |
| 473 | strings. | ||
| 473 | @item | 474 | @item |
| 474 | Conses, lists, vectors and records are compared lexicographically. This | 475 | Conses, lists, vectors and records are compared lexicographically. This |
| 475 | means that the two sequences are compared element-wise from left to | 476 | means that the two sequences are compared element-wise from left to |
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index 06094e45aad..5da9acd4eb5 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi | |||
| @@ -502,7 +502,7 @@ in case if @code{case-fold-search} is non-@code{nil}. | |||
| 502 | @end example | 502 | @end example |
| 503 | @end defun | 503 | @end defun |
| 504 | 504 | ||
| 505 | @defun string= string1 string2 | 505 | @defun string-equal string1 string2 |
| 506 | This function returns @code{t} if the characters of the two strings | 506 | This function returns @code{t} if the characters of the two strings |
| 507 | match exactly. Symbols are also allowed as arguments, in which case | 507 | match exactly. Symbols are also allowed as arguments, in which case |
| 508 | the symbol names are used. Case is always significant, regardless of | 508 | the symbol names are used. Case is always significant, regardless of |
| @@ -513,25 +513,25 @@ This function is equivalent to @code{equal} for comparing two strings | |||
| 513 | the two strings are ignored; use @code{equal-including-properties} if | 513 | the two strings are ignored; use @code{equal-including-properties} if |
| 514 | you need to distinguish between strings that differ only in their text | 514 | you need to distinguish between strings that differ only in their text |
| 515 | properties. However, unlike @code{equal}, if either argument is not a | 515 | properties. However, unlike @code{equal}, if either argument is not a |
| 516 | string or symbol, @code{string=} signals an error. | 516 | string or symbol, @code{string-equal} signals an error. |
| 517 | 517 | ||
| 518 | @example | 518 | @example |
| 519 | (string= "abc" "abc") | 519 | (string-equal "abc" "abc") |
| 520 | @result{} t | 520 | @result{} t |
| 521 | (string= "abc" "ABC") | 521 | (string-equal "abc" "ABC") |
| 522 | @result{} nil | 522 | @result{} nil |
| 523 | (string= "ab" "ABC") | 523 | (string-equal "ab" "ABC") |
| 524 | @result{} nil | 524 | @result{} nil |
| 525 | @end example | 525 | @end example |
| 526 | 526 | ||
| 527 | A unibyte and a multibyte string are equal in the sense of | 527 | A unibyte and a multibyte string are equal in the sense of |
| 528 | @code{string=} if and only if they contain the same sequence of | 528 | @code{string-equal} if and only if they contain the same sequence of |
| 529 | character codes all being in the range 0--127 (@acronym{ASCII}). | 529 | character codes all being in the range 0--127 (@acronym{ASCII}). |
| 530 | @xref{Text Representations}. | 530 | @xref{Text Representations}. |
| 531 | @end defun | 531 | @end defun |
| 532 | 532 | ||
| 533 | @defun string-equal string1 string2 | 533 | @defun string= string1 string2 |
| 534 | @code{string-equal} is another name for @code{string=}. | 534 | @code{string=} is another name for @code{string-equal}. |
| 535 | @end defun | 535 | @end defun |
| 536 | 536 | ||
| 537 | @defun string-equal-ignore-case string1 string2 | 537 | @defun string-equal-ignore-case string1 string2 |
| @@ -597,9 +597,8 @@ that collation implements. | |||
| 597 | @end defun | 597 | @end defun |
| 598 | 598 | ||
| 599 | @cindex lexical comparison of strings | 599 | @cindex lexical comparison of strings |
| 600 | @anchor{definition of string<} | 600 | @anchor{definition of string-lessp} |
| 601 | @defun string< string1 string2 | 601 | @defun string-lessp string1 string2 |
| 602 | @c (findex string< causes problems for permuted index!!) | ||
| 603 | This function compares two strings a character at a time. It | 602 | This function compares two strings a character at a time. It |
| 604 | scans both the strings at the same time to find the first pair of corresponding | 603 | scans both the strings at the same time to find the first pair of corresponding |
| 605 | characters that do not match. If the lesser character of these two is | 604 | characters that do not match. If the lesser character of these two is |
| @@ -618,11 +617,11 @@ multibyte non-@acronym{ASCII} character (@pxref{Text Representations}). | |||
| 618 | 617 | ||
| 619 | @example | 618 | @example |
| 620 | @group | 619 | @group |
| 621 | (string< "abc" "abd") | 620 | (string-lessp "abc" "abd") |
| 622 | @result{} t | 621 | @result{} t |
| 623 | (string< "abd" "abc") | 622 | (string-lessp "abd" "abc") |
| 624 | @result{} nil | 623 | @result{} nil |
| 625 | (string< "123" "abc") | 624 | (string-lessp "123" "abc") |
| 626 | @result{} t | 625 | @result{} t |
| 627 | @end group | 626 | @end group |
| 628 | @end example | 627 | @end example |
| @@ -634,15 +633,15 @@ no characters is less than any other string. | |||
| 634 | 633 | ||
| 635 | @example | 634 | @example |
| 636 | @group | 635 | @group |
| 637 | (string< "" "abc") | 636 | (string-lessp "" "abc") |
| 638 | @result{} t | 637 | @result{} t |
| 639 | (string< "ab" "abc") | 638 | (string-lessp "ab" "abc") |
| 640 | @result{} t | 639 | @result{} t |
| 641 | (string< "abc" "") | 640 | (string-lessp "abc" "") |
| 642 | @result{} nil | 641 | @result{} nil |
| 643 | (string< "abc" "ab") | 642 | (string-lessp "abc" "ab") |
| 644 | @result{} nil | 643 | @result{} nil |
| 645 | (string< "" "") | 644 | (string-lessp "" "") |
| 646 | @result{} nil | 645 | @result{} nil |
| 647 | @end group | 646 | @end group |
| 648 | @end example | 647 | @end example |
| @@ -651,8 +650,8 @@ Symbols are also allowed as arguments, in which case their print names | |||
| 651 | are compared. | 650 | are compared. |
| 652 | @end defun | 651 | @end defun |
| 653 | 652 | ||
| 654 | @defun string-lessp string1 string2 | 653 | @defun string< string1 string2 |
| 655 | @code{string-lessp} is another name for @code{string<}. | 654 | @code{string<} is another name for @code{string-lessp}. |
| 656 | @end defun | 655 | @end defun |
| 657 | 656 | ||
| 658 | @defun string-greaterp string1 string2 | 657 | @defun string-greaterp string1 string2 |
| @@ -661,6 +660,10 @@ This function returns the result of comparing @var{string1} and | |||
| 661 | @code{(string-lessp @var{string2} @var{string1})}. | 660 | @code{(string-lessp @var{string2} @var{string1})}. |
| 662 | @end defun | 661 | @end defun |
| 663 | 662 | ||
| 663 | @defun string> string1 string2 | ||
| 664 | @code{string>} is another name for @code{string-greaterp}. | ||
| 665 | @end defun | ||
| 666 | |||
| 664 | @cindex locale-dependent string comparison | 667 | @cindex locale-dependent string comparison |
| 665 | @defun string-collate-lessp string1 string2 &optional locale ignore-case | 668 | @defun string-collate-lessp string1 string2 &optional locale ignore-case |
| 666 | This function returns @code{t} if @var{string1} is less than | 669 | This function returns @code{t} if @var{string1} is less than |
diff --git a/etc/PROBLEMS b/etc/PROBLEMS index c1ad8321fa6..7d7c9ab5f27 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS | |||
| @@ -456,6 +456,26 @@ However, the exact directory name will depend on the system, and you | |||
| 456 | will need to both upgrade source and debug info when your system | 456 | will need to both upgrade source and debug info when your system |
| 457 | upgrades or patches Emacs, and change your startup file accordingly. | 457 | upgrades or patches Emacs, and change your startup file accordingly. |
| 458 | 458 | ||
| 459 | ** SUSE based distributions (openSUSE, SUSE Linux Enterprise) | ||
| 460 | |||
| 461 | On systems with distributions, you can install source and debug info via | ||
| 462 | superuser commands like the following: | ||
| 463 | |||
| 464 | # Install Emacs source and debuginfo by using --plus-content | ||
| 465 | zypper --plus-content debug,source install \ | ||
| 466 | emacs-debuginfo emacs-debugsource | ||
| 467 | |||
| 468 | To get describe-function and similar commands to work, you can then add | ||
| 469 | something like the following to your startup file: | ||
| 470 | |||
| 471 | (setq find-function-C-source-directory | ||
| 472 | "/usr/src/debug/emacs-27.1-1/src/") | ||
| 473 | |||
| 474 | The line above should work for all systems using zypper besides SUSE | ||
| 475 | based ones, however it could be that you have to adjust the path to the | ||
| 476 | sources slightly depending on the version of the distribution you have | ||
| 477 | installed. | ||
| 478 | |||
| 459 | ** Source and debuginfo for other systems | 479 | ** Source and debuginfo for other systems |
| 460 | 480 | ||
| 461 | If your system follows neither the Debian nor the Red Hat patterns, | 481 | If your system follows neither the Debian nor the Red Hat patterns, |
| @@ -1274,6 +1294,27 @@ Emacs will select some other font instead. | |||
| 1274 | The only workaround is not to choose such font variants as the default | 1294 | The only workaround is not to choose such font variants as the default |
| 1275 | font when running Emacs on MS-Windows. | 1295 | font when running Emacs on MS-Windows. |
| 1276 | 1296 | ||
| 1297 | ** On OpenBSD, color Emoji are not supported by default. | ||
| 1298 | |||
| 1299 | The system's FreeType library is not built with libpng support, so it | ||
| 1300 | can't display color emoji. This is due to the fact that, on OpenBSD, | ||
| 1301 | libpng is provided through ports and that a base component cannot depend | ||
| 1302 | on that. | ||
| 1303 | |||
| 1304 | However, you can add support for PNG in the system's FreeType library by | ||
| 1305 | following those steps: | ||
| 1306 | 1. Install the 'png' package. | ||
| 1307 | 2. Read the release(8) man page for how to get Xenocara sources. | ||
| 1308 | 3. Patch the file | ||
| 1309 | "/usr/xenocara/lib/freetype/include/freetype/config/ftoption.h" | ||
| 1310 | by uncommenting the "#define FT_CONFIG_OPTION_USE_PNG" line. | ||
| 1311 | 4. Patch the file "/usr/xenocara/lib/freetype/Makefile" by | ||
| 1312 | appending "-L/usr/local/lib -lpng" to LDADD and appending | ||
| 1313 | "-I/usr/local/include" to CPPFLAGS. | ||
| 1314 | 5. Build and install Xenocara (also, see release(8)). | ||
| 1315 | |||
| 1316 | Note that this support will be gone after each OpenBSD's system upgrade. | ||
| 1317 | |||
| 1277 | * Internationalization problems | 1318 | * Internationalization problems |
| 1278 | 1319 | ||
| 1279 | ** M-{ does not work on a Spanish PC keyboard. | 1320 | ** M-{ does not work on a Spanish PC keyboard. |
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el index defef6fe414..c863d99a339 100644 --- a/lisp/erc/erc-fill.el +++ b/lisp/erc/erc-fill.el | |||
| @@ -490,16 +490,15 @@ option `erc-fill-wrap-margin-width'. To use it, either include | |||
| 490 | `erc-fill-wrap'. | 490 | `erc-fill-wrap'. |
| 491 | 491 | ||
| 492 | Once enabled, use \\[erc-fill-wrap-nudge] to adjust the width of | 492 | Once enabled, use \\[erc-fill-wrap-nudge] to adjust the width of |
| 493 | the indent and the stamp margin. And For cycling between | 493 | the indent and the stamp margin. For cycling between |
| 494 | logical- and screen-line oriented command movement, see | 494 | logical- and screen-line oriented command movement, see |
| 495 | \\[erc-fill-wrap-toggle-truncate-lines]. Similarly, use | 495 | \\[erc-fill-wrap-toggle-truncate-lines]. Similarly, use |
| 496 | \\[erc-fill-wrap-refill-buffer] to fix alignment problems after | 496 | \\[erc-fill-wrap-refill-buffer] to fix alignment problems after |
| 497 | running certain commands, like `text-scale-adjust'. Also see | 497 | running certain commands, like `text-scale-adjust'. Also see |
| 498 | related stylistic options `erc-fill-wrap-merge', and | 498 | related stylistic options `erc-fill-wrap-merge' and |
| 499 | `erc-fill-wrap-merge-indicator'. (Hint: in narrow windows, try | 499 | `erc-fill-wrap-merge-indicator'. (Hint: in narrow windows, try |
| 500 | setting `erc-fill-static-center' to 1, and if you use | 500 | setting `erc-fill-static-center' to 1 and choosing \"Leading |
| 501 | `erc-fill-wrap-merge-indicator', choose \"Leading MIDDLE DOT sans | 501 | MIDDLE DOT sans gap\" for `erc-fill-wrap-merge-indicator'.) |
| 502 | gap\" or one of the \"trailing\" items from the Customize menu.) | ||
| 503 | 502 | ||
| 504 | This module imposes various restrictions on the appearance of | 503 | This module imposes various restrictions on the appearance of |
| 505 | timestamps. Most notably, it insists on displaying them in the | 504 | timestamps. Most notably, it insists on displaying them in the |
| @@ -510,12 +509,11 @@ Additionally, this module assumes that users providing their own | |||
| 510 | `erc-insert-timestamp-function' have also customized the option | 509 | `erc-insert-timestamp-function' have also customized the option |
| 511 | `erc-fill-wrap-margin-side' to an explicit side. When stamps | 510 | `erc-fill-wrap-margin-side' to an explicit side. When stamps |
| 512 | appear in the right margin, which they do by default, users may | 511 | appear in the right margin, which they do by default, users may |
| 513 | find that ERC actually appends them to copy-as-killed messages | 512 | find that ERC actually appends them to copy-as-killed messages. |
| 514 | without an intervening space. This normally poses at most a | 513 | This normally poses at most a minor inconvenience. Users of the |
| 515 | minor inconvenience, however users of the `log' module may prefer | 514 | `log' module wanting to avoid this effect in logs should see |
| 516 | a workaround provided by `erc-stamp-prefix-log-filter', which | 515 | `erc-stamp-prefix-log-filter', which strips trailing stamps from |
| 517 | strips trailing stamps from logged messages and instead prepends | 516 | logged messages and instead prepends them to every line. |
| 518 | them to every line. | ||
| 519 | 517 | ||
| 520 | A so-called \"local\" module, `fill-wrap' depends on the global | 518 | A so-called \"local\" module, `fill-wrap' depends on the global |
| 521 | modules `fill', `stamp', `button', and `scrolltobottom'. It | 519 | modules `fill', `stamp', `button', and `scrolltobottom'. It |
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index c9b60418b22..a4456d31cf9 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el | |||
| @@ -726,7 +726,9 @@ | |||
| 726 | ;; This is required, as otherwise many TrueType fonts | 726 | ;; This is required, as otherwise many TrueType fonts |
| 727 | ;; with CJK characters but no corresponding ``design | 727 | ;; with CJK characters but no corresponding ``design |
| 728 | ;; language'' declaration can't be found. | 728 | ;; language'' declaration can't be found. |
| 729 | ,(font-spec :registry "iso10646-1" :script 'cjk-misc)) | 729 | ,@(and (featurep 'android) |
| 730 | (list (font-spec :registry "iso10646-1" | ||
| 731 | :script 'cjk-misc)))) | ||
| 730 | 732 | ||
| 731 | (hangul (nil . "KSC5601.1987-0") | 733 | (hangul (nil . "KSC5601.1987-0") |
| 732 | ,(font-spec :registry "iso10646-1" :lang 'ko)) | 734 | ,(font-spec :registry "iso10646-1" :lang 'ko)) |
diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el index 56deaf9066b..8d039c25eae 100644 --- a/lisp/net/tramp-integration.el +++ b/lisp/net/tramp-integration.el | |||
| @@ -274,35 +274,38 @@ NAME must be equal to `tramp-current-connection'." | |||
| 274 | 274 | ||
| 275 | ;;; Integration of shortdoc.el: | 275 | ;;; Integration of shortdoc.el: |
| 276 | 276 | ||
| 277 | (with-eval-after-load 'shortdoc | 277 | (tramp--with-startup |
| 278 | (dolist (elem `((file-remote-p | 278 | (with-eval-after-load 'shortdoc |
| 279 | :eval (file-remote-p "/ssh:user@host:/tmp/foo") | 279 | ;; Some packages deactivate Tramp. They don't deserve a shortdoc entry then. |
| 280 | :eval (file-remote-p "/ssh:user@host:/tmp/foo" 'method) | 280 | (when (file-remote-p "/ssh:user@host:/tmp/foo") |
| 281 | :eval (file-remote-p "/ssh:user@[::1]#1234:/tmp/foo" 'host) | 281 | (dolist (elem `((file-remote-p |
| 282 | ;; We don't want to see the text properties. | 282 | :eval (file-remote-p "/ssh:user@host:/tmp/foo") |
| 283 | :no-eval (file-remote-p "/sudo::/tmp/foo" 'user) | 283 | :eval (file-remote-p "/ssh:user@host:/tmp/foo" 'method) |
| 284 | :result ,(substring-no-properties | 284 | :eval (file-remote-p "/ssh:user@[::1]#1234:/tmp/foo" 'host) |
| 285 | (file-remote-p "/sudo::/tmp/foo" 'user))) | 285 | ;; We don't want to see the text properties. |
| 286 | (file-local-name | 286 | :no-eval (file-remote-p "/sudo::/tmp/foo" 'user) |
| 287 | :eval (file-local-name "/ssh:user@host:/tmp/foo")) | 287 | :result ,(substring-no-properties |
| 288 | (file-local-copy | 288 | (file-remote-p "/sudo::/tmp/foo" 'user))) |
| 289 | :no-eval (file-local-copy "/ssh:user@host:/tmp/foo") | 289 | (file-local-name |
| 290 | :eg-result "/tmp/tramp.8ihLbO" | 290 | :eval (file-local-name "/ssh:user@host:/tmp/foo")) |
| 291 | :eval (file-local-copy "/tmp/foo")))) | 291 | (file-local-copy |
| 292 | (unless (assoc (car elem) | 292 | :no-eval (file-local-copy "/ssh:user@host:/tmp/foo") |
| 293 | (member "Remote Files" (assq 'file shortdoc--groups))) | 293 | :eg-result "/tmp/tramp.8ihLbO" |
| 294 | (shortdoc-add-function 'file "Remote Files" elem))) | 294 | :eval (file-local-copy "/tmp/foo")))) |
| 295 | 295 | (unless (assoc (car elem) | |
| 296 | (add-hook | 296 | (member "Remote Files" (assq 'file shortdoc--groups))) |
| 297 | 'tramp-integration-unload-hook | 297 | (shortdoc-add-function 'file "Remote Files" elem))) |
| 298 | (lambda () | 298 | |
| 299 | (let ((glist (assq 'file shortdoc--groups))) | 299 | (add-hook |
| 300 | (while (and (consp glist) | 300 | 'tramp-integration-unload-hook |
| 301 | (not (and (stringp (cadr glist)) | 301 | (lambda () |
| 302 | (string-equal (cadr glist) "Remote Files")))) | 302 | (let ((glist (assq 'file shortdoc--groups))) |
| 303 | (setq glist (cdr glist))) | 303 | (while (and (consp glist) |
| 304 | (when (consp glist) | 304 | (not (and (stringp (cadr glist)) |
| 305 | (setcdr glist nil)))))) | 305 | (string-equal (cadr glist) "Remote Files")))) |
| 306 | (setq glist (cdr glist))) | ||
| 307 | (when (consp glist) | ||
| 308 | (setcdr glist nil)))))))) | ||
| 306 | 309 | ||
| 307 | ;;; Integration of compile.el: | 310 | ;;; Integration of compile.el: |
| 308 | 311 | ||
diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el index 674623a5e61..7d51d2434e6 100644 --- a/lisp/progmodes/c-ts-common.el +++ b/lisp/progmodes/c-ts-common.el | |||
| @@ -151,7 +151,9 @@ comment." | |||
| 151 | (orig-point (point-marker)) | 151 | (orig-point (point-marker)) |
| 152 | (start-marker (point-marker)) | 152 | (start-marker (point-marker)) |
| 153 | (end-marker nil) | 153 | (end-marker nil) |
| 154 | (end-len 0)) | 154 | (end-len 0) |
| 155 | (start-mask-done nil) | ||
| 156 | (end-mask-done nil)) | ||
| 155 | (move-marker start-marker start) | 157 | (move-marker start-marker start) |
| 156 | ;; If the first line is /* followed by non-text, exclude this line | 158 | ;; If the first line is /* followed by non-text, exclude this line |
| 157 | ;; from filling. | 159 | ;; from filling. |
| @@ -179,6 +181,7 @@ comment." | |||
| 179 | (goto-char (match-beginning 1)) | 181 | (goto-char (match-beginning 1)) |
| 180 | (setq end-marker (point-marker)) | 182 | (setq end-marker (point-marker)) |
| 181 | (setq end-len (- (match-end 1) (match-beginning 1))) | 183 | (setq end-len (- (match-end 1) (match-beginning 1))) |
| 184 | (setq end-mask-done t) | ||
| 182 | (replace-match (make-string end-len ?x) | 185 | (replace-match (make-string end-len ?x) |
| 183 | nil nil nil 1)) | 186 | nil nil nil 1)) |
| 184 | 187 | ||
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index f8140c14a49..75c8111035c 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el | |||
| @@ -3946,7 +3946,9 @@ See `treesit-thing-settings' for more information.") | |||
| 3946 | :embed 'jsdoc | 3946 | :embed 'jsdoc |
| 3947 | :host 'javascript | 3947 | :host 'javascript |
| 3948 | :local t | 3948 | :local t |
| 3949 | `(((comment) @capture (:match ,js--treesit-jsdoc-beginning-regexp @capture)))))) | 3949 | `(((comment) @capture (:match ,js--treesit-jsdoc-beginning-regexp @capture))))) |
| 3950 | |||
| 3951 | (setq c-ts-common--comment-regexp (rx (or "comment" "line_comment" "block_comment" "description")))) | ||
| 3950 | 3952 | ||
| 3951 | ;; Imenu | 3953 | ;; Imenu |
| 3952 | (setq-local treesit-simple-imenu-settings | 3954 | (setq-local treesit-simple-imenu-settings |
diff --git a/lisp/svg.el b/lisp/svg.el index f2eb2ec66dd..f5c76145136 100644 --- a/lisp/svg.el +++ b/lisp/svg.el | |||
| @@ -331,7 +331,6 @@ If the SVG is later changed, the image will also be updated." | |||
| 331 | (insert (format " %s=\"%s\"" (car attr) (cdr attr))))) | 331 | (insert (format " %s=\"%s\"" (car attr) (cdr attr))))) |
| 332 | (insert ">") | 332 | (insert ">") |
| 333 | (dolist (elem (nthcdr 2 dom)) | 333 | (dolist (elem (nthcdr 2 dom)) |
| 334 | (insert " ") | ||
| 335 | (svg-print elem)) | 334 | (svg-print elem)) |
| 336 | (insert (format "</%s>" (car dom))))) | 335 | (insert (format "</%s>" (car dom))))) |
| 337 | 336 | ||
diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index dd4efd3831d..8c3241d5ee0 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el | |||
| @@ -726,9 +726,9 @@ extending any keys already present." | |||
| 726 | 726 | ||
| 727 | ;; If at this point no :load, :defer or :no-require has been seen, then | 727 | ;; If at this point no :load, :defer or :no-require has been seen, then |
| 728 | ;; :load the package itself. | 728 | ;; :load the package itself. |
| 729 | (when (and (not (plist-member args :load)) | 729 | (when (and (not (plist-get args :load)) |
| 730 | (not (plist-member args :defer)) | 730 | (not (plist-get args :defer)) |
| 731 | (not (plist-member args :no-require))) | 731 | (not (plist-get args :no-require))) |
| 732 | (setq args (append args `(:load (,name))))) | 732 | (setq args (append args `(:load (,name))))) |
| 733 | 733 | ||
| 734 | ;; Sort the list of keywords based on the order of `use-package-keywords'. | 734 | ;; Sort the list of keywords based on the order of `use-package-keywords'. |
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 693991a6f3e..e7e6351fcab 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el | |||
| @@ -2549,7 +2549,10 @@ If the item is checked, CHOSEN is a cons whose cdr is the value." | |||
| 2549 | (t | 2549 | (t |
| 2550 | (widget-create-child-value | 2550 | (widget-create-child-value |
| 2551 | widget type (car (cdr chosen))) | 2551 | widget type (car (cdr chosen))) |
| 2552 | (widget-specify-selected child))))) | 2552 | ;; This somehow breaks :options and other |
| 2553 | ;; Custom features. | ||
| 2554 | ;; (widget-specify-selected child) | ||
| 2555 | )))) | ||
| 2553 | (t | 2556 | (t |
| 2554 | (error "Unknown escape `%c'" escape))))) | 2557 | (error "Unknown escape `%c'" escape))))) |
| 2555 | ;; Update properties. | 2558 | ;; Update properties. |
diff --git a/src/androidvfs.c b/src/androidvfs.c index bb855099c77..14da8eed37e 100644 --- a/src/androidvfs.c +++ b/src/androidvfs.c | |||
| @@ -2599,9 +2599,10 @@ android_content_name (struct android_vnode *vnode, char *name, | |||
| 2599 | component_end++; | 2599 | component_end++; |
| 2600 | 2600 | ||
| 2601 | /* Now, find out if the first component is a special vnode; if so, | 2601 | /* Now, find out if the first component is a special vnode; if so, |
| 2602 | call its root lookup function with the rest of NAME there. */ | 2602 | call its root lookup function with the rest of NAME there. What is |
| 2603 | more, content files are inaccessible in the absence of a GUI. */ | ||
| 2603 | 2604 | ||
| 2604 | if (api < 19) | 2605 | if (api < 19 || !android_init_gui) |
| 2605 | i = 3; | 2606 | i = 3; |
| 2606 | else if (api < 21) | 2607 | else if (api < 21) |
| 2607 | i = 1; | 2608 | i = 1; |
diff --git a/src/eval.c b/src/eval.c index 2161ab1e1ea..16ece744f42 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -1018,8 +1018,8 @@ usage: (let* VARLIST BODY...) */) | |||
| 1018 | } | 1018 | } |
| 1019 | 1019 | ||
| 1020 | var = maybe_remove_pos_from_symbol (var); | 1020 | var = maybe_remove_pos_from_symbol (var); |
| 1021 | if (!NILP (lexenv) && BARE_SYMBOL_P (var) | 1021 | CHECK_TYPE (BARE_SYMBOL_P (var), Qsymbolp, var); |
| 1022 | && !XBARE_SYMBOL (var)->u.s.declared_special | 1022 | if (!NILP (lexenv) && !XBARE_SYMBOL (var)->u.s.declared_special |
| 1023 | && NILP (Fmemq (var, Vinternal_interpreter_environment))) | 1023 | && NILP (Fmemq (var, Vinternal_interpreter_environment))) |
| 1024 | /* Lexically bind VAR by adding it to the interpreter's binding | 1024 | /* Lexically bind VAR by adding it to the interpreter's binding |
| 1025 | alist. */ | 1025 | alist. */ |
| @@ -1090,10 +1090,10 @@ usage: (let VARLIST BODY...) */) | |||
| 1090 | varlist = XCDR (varlist); | 1090 | varlist = XCDR (varlist); |
| 1091 | Lisp_Object var = maybe_remove_pos_from_symbol (SYMBOLP (elt) ? elt | 1091 | Lisp_Object var = maybe_remove_pos_from_symbol (SYMBOLP (elt) ? elt |
| 1092 | : Fcar (elt)); | 1092 | : Fcar (elt)); |
| 1093 | CHECK_TYPE (BARE_SYMBOL_P (var), Qsymbolp, var); | ||
| 1093 | tem = temps[argnum]; | 1094 | tem = temps[argnum]; |
| 1094 | 1095 | ||
| 1095 | if (!NILP (lexenv) && SYMBOLP (var) | 1096 | if (!NILP (lexenv) && !XBARE_SYMBOL (var)->u.s.declared_special |
| 1096 | && !XSYMBOL (var)->u.s.declared_special | ||
| 1097 | && NILP (Fmemq (var, Vinternal_interpreter_environment))) | 1097 | && NILP (Fmemq (var, Vinternal_interpreter_environment))) |
| 1098 | /* Lexically bind VAR by adding it to the lexenv alist. */ | 1098 | /* Lexically bind VAR by adding it to the lexenv alist. */ |
| 1099 | lexenv = Fcons (Fcons (var, tem), lexenv); | 1099 | lexenv = Fcons (Fcons (var, tem), lexenv); |
| @@ -1492,7 +1492,7 @@ internal_lisp_condition_case (Lisp_Object var, Lisp_Object bodyform, | |||
| 1492 | ptrdiff_t CACHEABLE clausenb = 0; | 1492 | ptrdiff_t CACHEABLE clausenb = 0; |
| 1493 | 1493 | ||
| 1494 | var = maybe_remove_pos_from_symbol (var); | 1494 | var = maybe_remove_pos_from_symbol (var); |
| 1495 | CHECK_SYMBOL (var); | 1495 | CHECK_TYPE (BARE_SYMBOL_P (var), Qsymbolp, var); |
| 1496 | 1496 | ||
| 1497 | Lisp_Object success_handler = Qnil; | 1497 | Lisp_Object success_handler = Qnil; |
| 1498 | 1498 | ||
| @@ -3272,18 +3272,18 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector) | |||
| 3272 | { | 3272 | { |
| 3273 | maybe_quit (); | 3273 | maybe_quit (); |
| 3274 | 3274 | ||
| 3275 | Lisp_Object next = XCAR (syms_left); | 3275 | Lisp_Object next = maybe_remove_pos_from_symbol (XCAR (syms_left)); |
| 3276 | if (!SYMBOLP (next)) | 3276 | if (!BARE_SYMBOL_P (next)) |
| 3277 | xsignal1 (Qinvalid_function, fun); | 3277 | xsignal1 (Qinvalid_function, fun); |
| 3278 | 3278 | ||
| 3279 | if (EQ (next, Qand_rest)) | 3279 | if (BASE_EQ (next, Qand_rest)) |
| 3280 | { | 3280 | { |
| 3281 | if (rest || previous_rest) | 3281 | if (rest || previous_rest) |
| 3282 | xsignal1 (Qinvalid_function, fun); | 3282 | xsignal1 (Qinvalid_function, fun); |
| 3283 | rest = 1; | 3283 | rest = 1; |
| 3284 | previous_rest = true; | 3284 | previous_rest = true; |
| 3285 | } | 3285 | } |
| 3286 | else if (EQ (next, Qand_optional)) | 3286 | else if (BASE_EQ (next, Qand_optional)) |
| 3287 | { | 3287 | { |
| 3288 | if (optional || rest || previous_rest) | 3288 | if (optional || rest || previous_rest) |
| 3289 | xsignal1 (Qinvalid_function, fun); | 3289 | xsignal1 (Qinvalid_function, fun); |
| @@ -3305,12 +3305,12 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector) | |||
| 3305 | arg = Qnil; | 3305 | arg = Qnil; |
| 3306 | 3306 | ||
| 3307 | /* Bind the argument. */ | 3307 | /* Bind the argument. */ |
| 3308 | if (!NILP (lexenv) && SYMBOLP (next)) | 3308 | if (!NILP (lexenv)) |
| 3309 | /* Lexically bind NEXT by adding it to the lexenv alist. */ | 3309 | /* Lexically bind NEXT by adding it to the lexenv alist. */ |
| 3310 | lexenv = Fcons (Fcons (next, arg), lexenv); | 3310 | lexenv = Fcons (Fcons (next, arg), lexenv); |
| 3311 | else | 3311 | else |
| 3312 | /* Dynamically bind NEXT. */ | 3312 | /* Dynamically bind NEXT. */ |
| 3313 | specbind (maybe_remove_pos_from_symbol (next), arg); | 3313 | specbind (next, arg); |
| 3314 | previous_rest = false; | 3314 | previous_rest = false; |
| 3315 | } | 3315 | } |
| 3316 | } | 3316 | } |
diff --git a/src/lread.c b/src/lread.c index ace7abd80c8..2e8ac37c1ff 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -1748,6 +1748,9 @@ Return t if the file exists and loads successfully. */) | |||
| 1748 | saved_strings[i].size = 0; | 1748 | saved_strings[i].size = 0; |
| 1749 | } | 1749 | } |
| 1750 | 1750 | ||
| 1751 | /* The "...done" messages are shown only in interactive mode, because | ||
| 1752 | the echo-area can display only the last message, and we want to | ||
| 1753 | avoid the impression that the load is still in progress. */ | ||
| 1751 | if (!noninteractive && (NILP (nomessage) || force_load_messages)) | 1754 | if (!noninteractive && (NILP (nomessage) || force_load_messages)) |
| 1752 | { | 1755 | { |
| 1753 | if (is_module) | 1756 | if (is_module) |
diff --git a/src/xdisp.c b/src/xdisp.c index 6f29f159d16..30771a1c83d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -3647,14 +3647,14 @@ get_narrowed_len (struct window *w) | |||
| 3647 | static ptrdiff_t | 3647 | static ptrdiff_t |
| 3648 | get_medium_narrowing_begv (struct window *w, ptrdiff_t pos) | 3648 | get_medium_narrowing_begv (struct window *w, ptrdiff_t pos) |
| 3649 | { | 3649 | { |
| 3650 | int len = get_narrowed_len (w); | 3650 | ptrdiff_t len = get_narrowed_len (w); |
| 3651 | return max ((pos / len - 1) * len, BEGV); | 3651 | return max ((pos / len - 1) * len, BEGV); |
| 3652 | } | 3652 | } |
| 3653 | 3653 | ||
| 3654 | static ptrdiff_t | 3654 | static ptrdiff_t |
| 3655 | get_medium_narrowing_zv (struct window *w, ptrdiff_t pos) | 3655 | get_medium_narrowing_zv (struct window *w, ptrdiff_t pos) |
| 3656 | { | 3656 | { |
| 3657 | int len = get_narrowed_len (w); | 3657 | ptrdiff_t len = get_narrowed_len (w); |
| 3658 | return min ((pos / len + 1) * len, ZV); | 3658 | return min ((pos / len + 1) * len, ZV); |
| 3659 | } | 3659 | } |
| 3660 | 3660 | ||
| @@ -3704,9 +3704,9 @@ get_large_narrowing_begv (ptrdiff_t pos) | |||
| 3704 | { | 3704 | { |
| 3705 | if (long_line_optimizations_region_size <= 0) | 3705 | if (long_line_optimizations_region_size <= 0) |
| 3706 | return BEGV; | 3706 | return BEGV; |
| 3707 | int len = long_line_optimizations_region_size / 2; | 3707 | ptrdiff_t len = long_line_optimizations_region_size / 2; |
| 3708 | int begv = max (pos - len, BEGV); | 3708 | ptrdiff_t begv = max (pos - len, BEGV); |
| 3709 | int limit = long_line_optimizations_bol_search_limit; | 3709 | ptrdiff_t limit = long_line_optimizations_bol_search_limit; |
| 3710 | while (limit > 0) | 3710 | while (limit > 0) |
| 3711 | { | 3711 | { |
| 3712 | if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n') | 3712 | if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n') |
| @@ -3722,7 +3722,7 @@ get_large_narrowing_zv (ptrdiff_t pos) | |||
| 3722 | { | 3722 | { |
| 3723 | if (long_line_optimizations_region_size <= 0) | 3723 | if (long_line_optimizations_region_size <= 0) |
| 3724 | return ZV; | 3724 | return ZV; |
| 3725 | int len = long_line_optimizations_region_size / 2; | 3725 | ptrdiff_t len = long_line_optimizations_region_size / 2; |
| 3726 | return min (pos + len, ZV); | 3726 | return min (pos + len, ZV); |
| 3727 | } | 3727 | } |
| 3728 | 3728 | ||
diff --git a/test/src/eval-tests.el b/test/src/eval-tests.el index 187dc2f34d5..e1663f489c5 100644 --- a/test/src/eval-tests.el +++ b/test/src/eval-tests.el | |||
| @@ -362,5 +362,13 @@ expressions works for identifiers starting with period." | |||
| 362 | (error err)))) | 362 | (error err)))) |
| 363 | (should (eq inner-error outer-error)))) | 363 | (should (eq inner-error outer-error)))) |
| 364 | 364 | ||
| 365 | (ert-deftest eval-bad-specbind () | ||
| 366 | (should-error (eval '(let (((a b) 23)) (+ 1 2)) t) | ||
| 367 | :type 'wrong-type-argument) | ||
| 368 | (should-error (eval '(let* (((a b) 23)) (+ 1 2)) t) | ||
| 369 | :type 'wrong-type-argument) | ||
| 370 | (should-error (eval '(condition-case (a b) (+ 1 2) (:success 'ok))) | ||
| 371 | :type 'wrong-type-argument) | ||
| 372 | (should-error (eval '(funcall '(lambda ((a b) 3.15) 84) 5 4)))) | ||
| 365 | 373 | ||
| 366 | ;;; eval-tests.el ends here | 374 | ;;; eval-tests.el ends here |