diff options
| author | Glenn Morris | 2020-04-29 07:50:20 -0700 |
|---|---|---|
| committer | Glenn Morris | 2020-04-29 07:50:20 -0700 |
| commit | b56401f3849cf6d00717ab8a64a221f2c01455a6 (patch) | |
| tree | 936d8d0fc04faf7aa2ec069c9376a8be09ec5f79 | |
| parent | 17eae91cb1b45711be676bce79bcc5fcd7df2d3d (diff) | |
| parent | 2f9bfaef21043d7894334b33b8538a165250f499 (diff) | |
| download | emacs-b56401f3849cf6d00717ab8a64a221f2c01455a6.tar.gz emacs-b56401f3849cf6d00717ab8a64a221f2c01455a6.zip | |
Merge from origin/emacs-27
2f9bfaef21 (origin/emacs-27) ; Fix last change
520fd3e728 * lisp/env.el (substitute-env-vars): Doc fix. (Bug#40948)
85544f8ef5 * lisp/isearch.el: Fix lazy-highlighting and lazy-counting...
d83cc05a73 Fix error in ERC when 'erc-server-coding-system' is custom...
16fed05ba8 Avoid crashes on TTY frames with over-long compositions
0278741676 Fix typo in custom.texi
9f5ae717fb * test/lisp/simple-tests.el (with-shell-command-dont-erase...
1f76a16ed3 * lisp/image-mode.el (image-mode-map): Update menu items.
f0e1bf56f0 Fix bugs in tab-bar and tab-line and mention remaining fea...
f0b9f18457 Make shell-command tests fit for tcsh.
68f4a740a1 Remove doc duplication
ac31cd384c * etc/NEWS: Fix inconsistencies.
# Conflicts:
# etc/NEWS
| -rw-r--r-- | doc/emacs/custom.texi | 2 | ||||
| -rw-r--r-- | doc/emacs/frames.texi | 57 | ||||
| -rw-r--r-- | doc/emacs/windows.texi | 12 | ||||
| -rw-r--r-- | doc/lispref/objects.texi | 3 | ||||
| -rw-r--r-- | etc/NEWS.27 | 16 | ||||
| -rw-r--r-- | lisp/env.el | 8 | ||||
| -rw-r--r-- | lisp/erc/erc-backend.el | 3 | ||||
| -rw-r--r-- | lisp/image-mode.el | 20 | ||||
| -rw-r--r-- | lisp/isearch.el | 7 | ||||
| -rw-r--r-- | lisp/tab-bar.el | 38 | ||||
| -rw-r--r-- | lisp/tab-line.el | 6 | ||||
| -rw-r--r-- | src/term.c | 2 | ||||
| -rw-r--r-- | test/lisp/simple-tests.el | 11 |
13 files changed, 135 insertions, 50 deletions
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index e7e879065ed..406f0c96c1f 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi | |||
| @@ -755,7 +755,7 @@ non-@code{nil} value). If you set a variable using the customization | |||
| 755 | buffer, you need not worry about giving it an invalid type: the | 755 | buffer, you need not worry about giving it an invalid type: the |
| 756 | customization buffer usually only allows you to enter meaningful | 756 | customization buffer usually only allows you to enter meaningful |
| 757 | values. When in doubt, use @kbd{C-h v} (@code{describe-variable}) to | 757 | values. When in doubt, use @kbd{C-h v} (@code{describe-variable}) to |
| 758 | check the variable's documentation string to see kind of value it | 758 | check the variable's documentation string to see what kind of value it |
| 759 | expects (@pxref{Examining}). | 759 | expects (@pxref{Examining}). |
| 760 | 760 | ||
| 761 | @menu | 761 | @menu |
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index d9373b8bc78..8f448e1aedc 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi | |||
| @@ -1266,7 +1266,7 @@ Note that the Tab Bar is different from the Tab Line (@pxref{Tab Line}). | |||
| 1266 | Whereas tabs on the Tab Line at the top of each window are used to | 1266 | Whereas tabs on the Tab Line at the top of each window are used to |
| 1267 | switch between buffers, tabs on the Tab Bar at the top of each frame | 1267 | switch between buffers, tabs on the Tab Bar at the top of each frame |
| 1268 | are used to switch between window configurations containing several | 1268 | are used to switch between window configurations containing several |
| 1269 | windows. | 1269 | windows with buffers. |
| 1270 | 1270 | ||
| 1271 | @findex tab-bar-mode | 1271 | @findex tab-bar-mode |
| 1272 | To toggle the use of tab bars, type @kbd{M-x tab-bar-mode}. This | 1272 | To toggle the use of tab bars, type @kbd{M-x tab-bar-mode}. This |
| @@ -1324,6 +1324,10 @@ current before calling the command that adds a new tab. | |||
| 1324 | To start a new tab with other buffers, customize the variable | 1324 | To start a new tab with other buffers, customize the variable |
| 1325 | @code{tab-bar-new-tab-choice}. | 1325 | @code{tab-bar-new-tab-choice}. |
| 1326 | 1326 | ||
| 1327 | @vindex tab-bar-new-tab-to | ||
| 1328 | The variable @code{tab-bar-new-tab-to} defines where to place a new tab. | ||
| 1329 | By default, a new tab is added on the right side of the current tab. | ||
| 1330 | |||
| 1327 | The following commands can be used to delete tabs: | 1331 | The following commands can be used to delete tabs: |
| 1328 | 1332 | ||
| 1329 | @table @kbd | 1333 | @table @kbd |
| @@ -1331,7 +1335,8 @@ To start a new tab with other buffers, customize the variable | |||
| 1331 | @kindex C-x t 0 | 1335 | @kindex C-x t 0 |
| 1332 | @findex tab-close | 1336 | @findex tab-close |
| 1333 | Close the selected tab (@code{tab-close}). It has no effect if there | 1337 | Close the selected tab (@code{tab-close}). It has no effect if there |
| 1334 | is only one tab. | 1338 | is only one tab, unless the variable @code{tab-bar-close-last-tab-choice} |
| 1339 | is customized to a non-default value. | ||
| 1335 | 1340 | ||
| 1336 | @item C-x t 1 | 1341 | @item C-x t 1 |
| 1337 | @kindex C-x t 1 | 1342 | @kindex C-x t 1 |
| @@ -1339,6 +1344,14 @@ is only one tab. | |||
| 1339 | Close all tabs on the selected frame, except the selected one. | 1344 | Close all tabs on the selected frame, except the selected one. |
| 1340 | @end table | 1345 | @end table |
| 1341 | 1346 | ||
| 1347 | @vindex tab-bar-close-tab-select | ||
| 1348 | The variable @code{tab-bar-close-tab-select} defines what tab to | ||
| 1349 | select after closing the current tab. By default, it selects | ||
| 1350 | a recently used tab. | ||
| 1351 | |||
| 1352 | @findex tab-undo | ||
| 1353 | The command @code{tab-undo} restores the last closed tab. | ||
| 1354 | |||
| 1342 | The following commands can be used to switch between tabs: | 1355 | The following commands can be used to switch between tabs: |
| 1343 | 1356 | ||
| 1344 | @table @kbd | 1357 | @table @kbd |
| @@ -1358,22 +1371,60 @@ switches back to the previous Nth tab. | |||
| 1358 | Switch to the previous tab. With a positive numeric argument N, it | 1371 | Switch to the previous tab. With a positive numeric argument N, it |
| 1359 | switches to the previous Nth tab; with a negative argument −N, it | 1372 | switches to the previous Nth tab; with a negative argument −N, it |
| 1360 | switches back to the next Nth tab. | 1373 | switches back to the next Nth tab. |
| 1374 | |||
| 1375 | @item C-x t @key{RET} @var{tabname} @key{RET} | ||
| 1376 | Switch to the tab by its name, with completion on all tab names. | ||
| 1377 | Default values are tab names sorted by recency, so you can use | ||
| 1378 | @kbd{M-n} (@code{next-history-element}) to get the name of the last | ||
| 1379 | visited tab, the second last, and so on. | ||
| 1380 | |||
| 1381 | @item @var{modifier}-@var{tabnumber} | ||
| 1382 | @findex tab-select | ||
| 1383 | Switch to the tab by its number. After customizing the variable | ||
| 1384 | @code{tab-bar-select-tab-modifiers} to specify a @var{modifier} key, you | ||
| 1385 | can select a tab by its ordinal number using the specified modifier in | ||
| 1386 | combination with the tab number to select. To display the tab number | ||
| 1387 | alongside the tab name, you can customize another variable | ||
| 1388 | @code{tab-bar-tab-hints}. This will help you to decide what key to press | ||
| 1389 | to select the tab by its number. | ||
| 1390 | |||
| 1391 | @item @var{modifier}-@kbd{0} | ||
| 1392 | @findex tab-recent | ||
| 1393 | Switch to the recent tab. The key combination is the modifier key | ||
| 1394 | defined by @code{tab-bar-select-tab-modifiers} and the key @kbd{0}. | ||
| 1395 | With a numeric argument N, switch to the Nth recent tab. | ||
| 1361 | @end table | 1396 | @end table |
| 1362 | 1397 | ||
| 1363 | The following commands can be used to operate on tabs: | 1398 | The following commands can be used to operate on tabs: |
| 1364 | 1399 | ||
| 1365 | @table @kbd | 1400 | @table @kbd |
| 1366 | @item C-x t r @var{tabname} @key{RET} | 1401 | @item C-x t r @var{tabname} @key{RET} |
| 1402 | @findex tab-rename | ||
| 1367 | Rename the current tab to @var{tabname}. You can control the | 1403 | Rename the current tab to @var{tabname}. You can control the |
| 1368 | programmatic name given to a tab by default by customizing the | 1404 | programmatic name given to a tab by default by customizing the |
| 1369 | variable @code{tab-bar-tab-name-function}. | 1405 | variable @code{tab-bar-tab-name-function}. |
| 1370 | 1406 | ||
| 1371 | @item C-x t m | 1407 | @item C-x t m |
| 1408 | @findex tab-move | ||
| 1372 | Move the current tab N positions to the right with a positive numeric | 1409 | Move the current tab N positions to the right with a positive numeric |
| 1373 | argument N. With a negative argument −N, it moves the current tab | 1410 | argument N. With a negative argument −N, move the current tab |
| 1374 | N positions to the left. | 1411 | N positions to the left. |
| 1375 | @end table | 1412 | @end table |
| 1376 | 1413 | ||
| 1414 | @findex tab-bar-history-mode | ||
| 1415 | You can enable @code{tab-bar-history-mode} to remember window | ||
| 1416 | configurations used in every tab, and restore them. | ||
| 1417 | |||
| 1418 | @table @kbd | ||
| 1419 | @item tab-bar-history-back | ||
| 1420 | Restore a previous window configuration used in the current tab. | ||
| 1421 | This navigates back in the history of window configurations. | ||
| 1422 | |||
| 1423 | @item tab-bar-history-forward | ||
| 1424 | Cancel restoration of the previous window configuration. | ||
| 1425 | This navigates forward in the history of window configurations. | ||
| 1426 | @end table | ||
| 1427 | |||
| 1377 | @node Dialog Boxes | 1428 | @node Dialog Boxes |
| 1378 | @section Using Dialog Boxes | 1429 | @section Using Dialog Boxes |
| 1379 | @cindex dialog boxes | 1430 | @cindex dialog boxes |
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi index cb5e9bce4d1..4c67660b92d 100644 --- a/doc/emacs/windows.texi +++ b/doc/emacs/windows.texi | |||
| @@ -628,8 +628,16 @@ Selecting the previous window-local tab is the same as typing @kbd{C-x | |||
| 628 | same as @kbd{C-x @key{RIGHT}} (@code{next-buffer}). Both commands | 628 | same as @kbd{C-x @key{RIGHT}} (@code{next-buffer}). Both commands |
| 629 | support a numeric prefix argument as a repeat count. | 629 | support a numeric prefix argument as a repeat count. |
| 630 | 630 | ||
| 631 | You can customize the variable @code{tab-line-tabs-function} to define | ||
| 632 | the preferred contents of the tab line. By default, it displays all | ||
| 633 | buffers previously visited in the window, as described above. But you | ||
| 634 | can also set it to display a list of buffers with the same major mode | ||
| 635 | as the current buffer, or to display buffers grouped by their major | ||
| 636 | mode, where clicking on the mode name in the first tab displays a list | ||
| 637 | of all major modes where you can select another group of buffers. | ||
| 638 | |||
| 631 | Note that the Tab Line is different from the Tab Bar (@pxref{Tab Bars}). | 639 | Note that the Tab Line is different from the Tab Bar (@pxref{Tab Bars}). |
| 632 | Whereas tabs on the Tab Bar at the top of each frame are used to | 640 | Whereas tabs on the Tab Bar at the top of each frame are used to |
| 633 | switch between window configurations containing several windows, | 641 | switch between window configurations containing several windows with buffers, |
| 634 | tabs on the Tab Line at the top of each window are used to switch | 642 | tabs on the Tab Line at the top of each window are used to switch |
| 635 | between buffers. | 643 | between buffers in the window. |
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index d35a9ace572..cd037d663da 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi | |||
| @@ -2406,8 +2406,7 @@ call @code{(make-string 3 ?a)} yields a mutable string that can be | |||
| 2406 | changed via later calls to @code{aset}. | 2406 | changed via later calls to @code{aset}. |
| 2407 | 2407 | ||
| 2408 | A mutable object can become constant if it is part of an expression | 2408 | A mutable object can become constant if it is part of an expression |
| 2409 | that is evaluated, because a program should not modify an object | 2409 | that is evaluated. The reverse does not occur: constant objects |
| 2410 | that is being evaluated. The reverse does not occur: constant objects | ||
| 2411 | should stay constant. | 2410 | should stay constant. |
| 2412 | 2411 | ||
| 2413 | Trying to modify a constant variable signals an error | 2412 | Trying to modify a constant variable signals an error |
diff --git a/etc/NEWS.27 b/etc/NEWS.27 index 1eb391f1350..42133b8bad8 100644 --- a/etc/NEWS.27 +++ b/etc/NEWS.27 | |||
| @@ -28,7 +28,7 @@ applies, and please also update docstrings as needed. | |||
| 28 | ** Emacs now uses GMP, the GNU Multiple Precision library. | 28 | ** Emacs now uses GMP, the GNU Multiple Precision library. |
| 29 | By default, if 'configure' does not find a suitable libgmp, it | 29 | By default, if 'configure' does not find a suitable libgmp, it |
| 30 | arranges for the included mini-gmp library to be built and used. | 30 | arranges for the included mini-gmp library to be built and used. |
| 31 | The new 'configure' option '--without-libgmp' uses mini-gmp even if a | 31 | The new configure option '--without-libgmp' uses mini-gmp even if a |
| 32 | suitable libgmp is available. | 32 | suitable libgmp is available. |
| 33 | 33 | ||
| 34 | --- | 34 | --- |
| @@ -132,7 +132,7 @@ can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2 | |||
| 132 | ** Emacs now normally uses a C pointer type instead of a C integer | 132 | ** Emacs now normally uses a C pointer type instead of a C integer |
| 133 | type to implement Lisp_Object, which is the fundamental machine word | 133 | type to implement Lisp_Object, which is the fundamental machine word |
| 134 | type internal to the Emacs Lisp interpreter. This change aims to | 134 | type internal to the Emacs Lisp interpreter. This change aims to |
| 135 | catch typos and supports '-fcheck-pointer-bounds'. The 'configure' | 135 | catch typos and supports '-fcheck-pointer-bounds'. The configure |
| 136 | option '--enable-check-lisp-object-type' is therefore no longer as | 136 | option '--enable-check-lisp-object-type' is therefore no longer as |
| 137 | useful and so is no longer enabled by default in developer builds, | 137 | useful and so is no longer enabled by default in developer builds, |
| 138 | to reduce differences between developer and production builds. | 138 | to reduce differences between developer and production builds. |
| @@ -868,7 +868,7 @@ to allow controlling how the conversion to text is done. | |||
| 868 | 868 | ||
| 869 | +++ | 869 | +++ |
| 870 | *** The prefix key 's' was changed to 'c' for slicing commands | 870 | *** The prefix key 's' was changed to 'c' for slicing commands |
| 871 | to avoid conflicts with image-mode key 's'. The new key 'c' still | 871 | to avoid conflicts with 'image-mode' key 's'. The new key 'c' still |
| 872 | has good mnemonics of "cut", "clip", "crop". | 872 | has good mnemonics of "cut", "clip", "crop". |
| 873 | 873 | ||
| 874 | ** Ido | 874 | ** Ido |
| @@ -2090,11 +2090,11 @@ variable for remote shells. It still defaults to "/bin/sh". | |||
| 2090 | 2090 | ||
| 2091 | +++ | 2091 | +++ |
| 2092 | *** New values of 'shell-command-dont-erase-buffer'. | 2092 | *** New values of 'shell-command-dont-erase-buffer'. |
| 2093 | This option can now have the value 'erase' to force to erase the | 2093 | This user option can now have the value 'erase' to force to erase the |
| 2094 | output buffer before execution of the command, even if the output goes | 2094 | output buffer before execution of the command, even if the output goes |
| 2095 | to the current buffer. Additional values 'beg-last-out', | 2095 | to the current buffer. Additional values 'beg-last-out', |
| 2096 | 'end-last-out', and 'save-point' control where to put point in the | 2096 | 'end-last-out', and 'save-point' control where to put point in the |
| 2097 | output buffer after inserting the shell-command output. | 2097 | output buffer after inserting the 'shell-command' output. |
| 2098 | 2098 | ||
| 2099 | --- | 2099 | --- |
| 2100 | *** The new functions 'shell-command-save-pos-or-erase' and | 2100 | *** The new functions 'shell-command-save-pos-or-erase' and |
| @@ -3538,9 +3538,9 @@ With a prefix argument, 'image-rotate' now rotates the image at point | |||
| 3538 | By default, the image will resize upon first display and whenever the | 3538 | By default, the image will resize upon first display and whenever the |
| 3539 | window's dimensions change. Two user options 'image-auto-resize' and | 3539 | window's dimensions change. Two user options 'image-auto-resize' and |
| 3540 | 'image-auto-resize-on-window-resize' control the resizing behavior | 3540 | 'image-auto-resize-on-window-resize' control the resizing behavior |
| 3541 | (including the possibility to disable auto-resizing). A new key | 3541 | (including the possibility to disable auto-resizing). A new prefix |
| 3542 | prefix 's' contains the commands that can be used to fit the image to | 3542 | key 's' contains the commands that can be used to fit the image to the |
| 3543 | the window manually. | 3543 | window manually. |
| 3544 | 3544 | ||
| 3545 | --- | 3545 | --- |
| 3546 | *** Some 'image-mode' variables are now buffer-local. | 3546 | *** Some 'image-mode' variables are now buffer-local. |
diff --git a/lisp/env.el b/lisp/env.el index ca2a9773b4e..6de90385a35 100644 --- a/lisp/env.el +++ b/lisp/env.el | |||
| @@ -68,10 +68,10 @@ with a character not a letter, digit or underscore; otherwise, enclose | |||
| 68 | the entire variable name in braces. For instance, in `ab$cd-x', | 68 | the entire variable name in braces. For instance, in `ab$cd-x', |
| 69 | `$cd' is treated as an environment variable. | 69 | `$cd' is treated as an environment variable. |
| 70 | 70 | ||
| 71 | If WHEN-DEFINED is nil, references to undefined environment variables | 71 | If WHEN-UNDEFINED is omitted or nil, references to undefined environment |
| 72 | are replaced by the empty string; if it is a function, the function is called | 72 | variables are replaced by the empty string; if it is a function, the |
| 73 | with the variable name as argument and should return the text with which | 73 | function is called with the variable's name as argument, and should return |
| 74 | to replace it or nil to leave it unchanged. | 74 | the text with which to replace it, or nil to leave it unchanged. |
| 75 | If it is non-nil and not a function, references to undefined variables are | 75 | If it is non-nil and not a function, references to undefined variables are |
| 76 | left unchanged. | 76 | left unchanged. |
| 77 | 77 | ||
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 57c8e730b83..1e2526f35ce 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el | |||
| @@ -466,7 +466,8 @@ If this is set to nil, never try to reconnect." | |||
| 466 | The length is specified in `erc-split-line-length'. | 466 | The length is specified in `erc-split-line-length'. |
| 467 | 467 | ||
| 468 | Currently this is called by `erc-send-input'." | 468 | Currently this is called by `erc-send-input'." |
| 469 | (let ((charset (car (erc-coding-system-for-target nil)))) | 469 | (let* ((coding (erc-coding-system-for-target nil)) |
| 470 | (charset (if (consp coding) (car coding) coding))) | ||
| 470 | (with-temp-buffer | 471 | (with-temp-buffer |
| 471 | (insert longline) | 472 | (insert longline) |
| 472 | ;; The line lengths are in octets, not characters (because these | 473 | ;; The line lengths are in octets, not characters (because these |
diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 3ee185a0dc5..480b2e6b26e 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el | |||
| @@ -505,16 +505,22 @@ call." | |||
| 505 | "--" | 505 | "--" |
| 506 | ["Fit Frame to Image" image-mode-fit-frame :active t | 506 | ["Fit Frame to Image" image-mode-fit-frame :active t |
| 507 | :help "Resize frame to match image"] | 507 | :help "Resize frame to match image"] |
| 508 | ["Fit Image to Window (Best Fit)" image-transform-fit-both | ||
| 509 | :help "Resize image to match the window height and width"] | ||
| 508 | ["Fit to Window Height" image-transform-fit-to-height | 510 | ["Fit to Window Height" image-transform-fit-to-height |
| 509 | :help "Resize image to match the window height"] | 511 | :help "Resize image to match the window height"] |
| 510 | ["Fit to Window Width" image-transform-fit-to-width | 512 | ["Fit to Window Width" image-transform-fit-to-width |
| 511 | :help "Resize image to match the window width"] | 513 | :help "Resize image to match the window width"] |
| 512 | ["Fit to Window Height and Width" image-transform-fit-both | 514 | ["Zoom In" image-increase-size |
| 513 | :help "Resize image to match the window height and width"] | 515 | :help "Enlarge the image"] |
| 516 | ["Zoom Out" image-decrease-size | ||
| 517 | :help "Shrink the image"] | ||
| 514 | ["Set Scale..." image-transform-set-scale | 518 | ["Set Scale..." image-transform-set-scale |
| 515 | :help "Resize image by specified scale factor"] | 519 | :help "Resize image by specified scale factor"] |
| 516 | ["Rotate Image..." image-transform-set-rotation | 520 | ["Rotate Clockwise" image-rotate |
| 517 | :help "Rotate the image"] | 521 | :help "Rotate the image"] |
| 522 | ["Set Rotation..." image-transform-set-rotation | ||
| 523 | :help "Set rotation angle of the image"] | ||
| 518 | ["Reset Transformations" image-transform-reset | 524 | ["Reset Transformations" image-transform-reset |
| 519 | :help "Reset all image transformations"] | 525 | :help "Reset all image transformations"] |
| 520 | "--" | 526 | "--" |
| @@ -524,10 +530,10 @@ call." | |||
| 524 | (image-dired default-directory)) | 530 | (image-dired default-directory)) |
| 525 | :active default-directory | 531 | :active default-directory |
| 526 | :help "Show thumbnails for all images in this directory"] | 532 | :help "Show thumbnails for all images in this directory"] |
| 527 | ["Next Image" image-next-file :active buffer-file-name | ||
| 528 | :help "Move to next image in this directory"] | ||
| 529 | ["Previous Image" image-previous-file :active buffer-file-name | 533 | ["Previous Image" image-previous-file :active buffer-file-name |
| 530 | :help "Move to previous image in this directory"] | 534 | :help "Move to previous image in this directory"] |
| 535 | ["Next Image" image-next-file :active buffer-file-name | ||
| 536 | :help "Move to next image in this directory"] | ||
| 531 | ["Copy File Name" image-mode-copy-file-name-as-kill | 537 | ["Copy File Name" image-mode-copy-file-name-as-kill |
| 532 | :active buffer-file-name | 538 | :active buffer-file-name |
| 533 | :help "Copy the current file name to the kill ring"] | 539 | :help "Copy the current file name to the kill ring"] |
| @@ -565,10 +571,10 @@ call." | |||
| 565 | ["Reset Animation Speed" image-reset-speed | 571 | ["Reset Animation Speed" image-reset-speed |
| 566 | :active image-multi-frame | 572 | :active image-multi-frame |
| 567 | :help "Reset the speed of this image's animation"] | 573 | :help "Reset the speed of this image's animation"] |
| 568 | ["Next Frame" image-next-frame :active image-multi-frame | ||
| 569 | :help "Show the next frame of this image"] | ||
| 570 | ["Previous Frame" image-previous-frame :active image-multi-frame | 574 | ["Previous Frame" image-previous-frame :active image-multi-frame |
| 571 | :help "Show the previous frame of this image"] | 575 | :help "Show the previous frame of this image"] |
| 576 | ["Next Frame" image-next-frame :active image-multi-frame | ||
| 577 | :help "Show the next frame of this image"] | ||
| 572 | ["Goto Frame..." image-goto-frame :active image-multi-frame | 578 | ["Goto Frame..." image-goto-frame :active image-multi-frame |
| 573 | :help "Show a specific frame of this image"] | 579 | :help "Show a specific frame of this image"] |
| 574 | )) | 580 | )) |
diff --git a/lisp/isearch.el b/lisp/isearch.el index e13a4dda83f..81e83d79509 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el | |||
| @@ -319,7 +319,7 @@ this variable is set to the symbol `all-windows'." | |||
| 319 | "Show match numbers in the search prompt. | 319 | "Show match numbers in the search prompt. |
| 320 | When both this option and `isearch-lazy-highlight' are non-nil, | 320 | When both this option and `isearch-lazy-highlight' are non-nil, |
| 321 | show the current match number and the total number of matches | 321 | show the current match number and the total number of matches |
| 322 | in the buffer (or its restriction)." | 322 | in the buffer (or its restriction), including all hidden matches." |
| 323 | :type 'boolean | 323 | :type 'boolean |
| 324 | :group 'lazy-count | 324 | :group 'lazy-count |
| 325 | :group 'isearch | 325 | :group 'isearch |
| @@ -3869,7 +3869,10 @@ Attempt to do the search exactly the way the pending Isearch would." | |||
| 3869 | (isearch-regexp-lax-whitespace | 3869 | (isearch-regexp-lax-whitespace |
| 3870 | isearch-lazy-highlight-regexp-lax-whitespace) | 3870 | isearch-lazy-highlight-regexp-lax-whitespace) |
| 3871 | (isearch-forward isearch-lazy-highlight-forward) | 3871 | (isearch-forward isearch-lazy-highlight-forward) |
| 3872 | (search-invisible nil) ; don't match invisible text | 3872 | ;; Don't match invisible text unless it can be opened |
| 3873 | ;; or when counting matches and user can visit hidden matches | ||
| 3874 | (search-invisible (or (eq search-invisible 'open) | ||
| 3875 | (and isearch-lazy-count search-invisible))) | ||
| 3873 | (retry t) | 3876 | (retry t) |
| 3874 | (success nil)) | 3877 | (success nil)) |
| 3875 | ;; Use a loop like in `isearch-search'. | 3878 | ;; Use a loop like in `isearch-search'. |
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index 30ed1a4cf68..ce6d8c33dd1 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el | |||
| @@ -87,10 +87,11 @@ | |||
| 87 | 87 | ||
| 88 | 88 | ||
| 89 | (defcustom tab-bar-select-tab-modifiers '() | 89 | (defcustom tab-bar-select-tab-modifiers '() |
| 90 | "List of key modifiers for selecting a tab by its index digit. | 90 | "List of modifier keys for selecting a tab by its index digit. |
| 91 | Possible modifiers are `control', `meta', `shift', `hyper', `super' and | 91 | Possible modifier keys are `control', `meta', `shift', `hyper', `super' and |
| 92 | `alt'." | 92 | `alt'. To help you to select a tab by its number, you can customize |
| 93 | :type '(set :tag "Tab selection key modifiers" | 93 | `tab-bar-tab-hints' that will show tab numbers alongside the tab name." |
| 94 | :type '(set :tag "Tab selection modifier keys" | ||
| 94 | (const control) | 95 | (const control) |
| 95 | (const meta) | 96 | (const meta) |
| 96 | (const shift) | 97 | (const shift) |
| @@ -310,7 +311,8 @@ If nil, don't show it at all." | |||
| 310 | 311 | ||
| 311 | (defcustom tab-bar-tab-hints nil | 312 | (defcustom tab-bar-tab-hints nil |
| 312 | "Show absolute numbers on tabs in the tab bar before the tab name. | 313 | "Show absolute numbers on tabs in the tab bar before the tab name. |
| 313 | This helps to select the tab by its number using `tab-bar-select-tab'." | 314 | This helps to select the tab by its number using `tab-bar-select-tab' |
| 315 | and `tab-bar-select-tab-modifiers'." | ||
| 314 | :type 'boolean | 316 | :type 'boolean |
| 315 | :initialize 'custom-initialize-default | 317 | :initialize 'custom-initialize-default |
| 316 | :set (lambda (sym val) | 318 | :set (lambda (sym val) |
| @@ -563,9 +565,10 @@ Return its existing value or a new value." | |||
| 563 | 565 | ||
| 564 | (defun tab-bar-select-tab (&optional arg) | 566 | (defun tab-bar-select-tab (&optional arg) |
| 565 | "Switch to the tab by its absolute position ARG in the tab bar. | 567 | "Switch to the tab by its absolute position ARG in the tab bar. |
| 566 | When this command is bound to a numeric key (with a prefix or modifier), | 568 | When this command is bound to a numeric key (with a prefix or modifier key |
| 567 | calling it without an argument will translate its bound numeric key | 569 | using `tab-bar-select-tab-modifiers'), calling it without an argument |
| 568 | to the numeric argument. ARG counts from 1." | 570 | will translate its bound numeric key to the numeric argument. |
| 571 | ARG counts from 1." | ||
| 569 | (interactive "P") | 572 | (interactive "P") |
| 570 | (unless (integerp arg) | 573 | (unless (integerp arg) |
| 571 | (let ((key (event-basic-type last-command-event))) | 574 | (let ((key (event-basic-type last-command-event))) |
| @@ -664,7 +667,10 @@ to the numeric argument. ARG counts from 1." | |||
| 664 | (message "No more recent tabs")))) | 667 | (message "No more recent tabs")))) |
| 665 | 668 | ||
| 666 | (defun tab-bar-switch-to-tab (name) | 669 | (defun tab-bar-switch-to-tab (name) |
| 667 | "Switch to the tab by NAME." | 670 | "Switch to the tab by NAME. |
| 671 | Default values are tab names sorted by recency, so you can use \ | ||
| 672 | \\<minibuffer-local-map>\\[next-history-element] | ||
| 673 | to get the name of the last visited tab, the second last, and so on." | ||
| 668 | (interactive | 674 | (interactive |
| 669 | (let* ((recent-tabs (mapcar (lambda (tab) | 675 | (let* ((recent-tabs (mapcar (lambda (tab) |
| 670 | (alist-get 'name tab)) | 676 | (alist-get 'name tab)) |
| @@ -789,7 +795,7 @@ After the tab is created, the hooks in | |||
| 789 | (pcase tab-bar-new-tab-to | 795 | (pcase tab-bar-new-tab-to |
| 790 | ('leftmost 0) | 796 | ('leftmost 0) |
| 791 | ('rightmost (length tabs)) | 797 | ('rightmost (length tabs)) |
| 792 | ('left (1- (or from-index 1))) | 798 | ('left (or from-index 1)) |
| 793 | ('right (1+ (or from-index 0))) | 799 | ('right (1+ (or from-index 0))) |
| 794 | ((pred functionp) | 800 | ((pred functionp) |
| 795 | (funcall tab-bar-new-tab-to)))))) | 801 | (funcall tab-bar-new-tab-to)))))) |
| @@ -920,7 +926,7 @@ for the last tab on a frame is determined by | |||
| 920 | ;; Select another tab before deleting the current tab | 926 | ;; Select another tab before deleting the current tab |
| 921 | (let ((to-index (or (if to-index (1- to-index)) | 927 | (let ((to-index (or (if to-index (1- to-index)) |
| 922 | (pcase tab-bar-close-tab-select | 928 | (pcase tab-bar-close-tab-select |
| 923 | ('left (1- current-index)) | 929 | ('left (1- (if (< current-index 1) 2 current-index))) |
| 924 | ('right (if (> (length tabs) (1+ current-index)) | 930 | ('right (if (> (length tabs) (1+ current-index)) |
| 925 | (1+ current-index) | 931 | (1+ current-index) |
| 926 | (1- current-index))) | 932 | (1- current-index))) |
| @@ -1004,7 +1010,7 @@ for the last tab on a frame is determined by | |||
| 1004 | (unless (eq frame (selected-frame)) | 1010 | (unless (eq frame (selected-frame)) |
| 1005 | (select-frame-set-input-focus frame)) | 1011 | (select-frame-set-input-focus frame)) |
| 1006 | 1012 | ||
| 1007 | (let ((tabs (tab-bar-tabs))) | 1013 | (let ((tabs (funcall tab-bar-tabs-function))) |
| 1008 | (setq index (max 0 (min index (length tabs)))) | 1014 | (setq index (max 0 (min index (length tabs)))) |
| 1009 | (cl-pushnew tab (nthcdr index tabs)) | 1015 | (cl-pushnew tab (nthcdr index tabs)) |
| 1010 | (when (eq index 0) | 1016 | (when (eq index 0) |
| @@ -1102,6 +1108,8 @@ function `tab-bar-tab-name-function'." | |||
| 1102 | (setq tab-bar-history-omit nil))) | 1108 | (setq tab-bar-history-omit nil))) |
| 1103 | 1109 | ||
| 1104 | (defun tab-bar-history-back () | 1110 | (defun tab-bar-history-back () |
| 1111 | "Restore a previous window configuration used in the current tab. | ||
| 1112 | This navigates back in the history of window configurations." | ||
| 1105 | (interactive) | 1113 | (interactive) |
| 1106 | (setq tab-bar-history-omit t) | 1114 | (setq tab-bar-history-omit t) |
| 1107 | (let* ((history (pop (gethash (selected-frame) tab-bar-history-back))) | 1115 | (let* ((history (pop (gethash (selected-frame) tab-bar-history-back))) |
| @@ -1119,6 +1127,8 @@ function `tab-bar-tab-name-function'." | |||
| 1119 | (message "No more tab back history")))) | 1127 | (message "No more tab back history")))) |
| 1120 | 1128 | ||
| 1121 | (defun tab-bar-history-forward () | 1129 | (defun tab-bar-history-forward () |
| 1130 | "Cancel restoration of the previous window configuration. | ||
| 1131 | This navigates forward in the history of window configurations." | ||
| 1122 | (interactive) | 1132 | (interactive) |
| 1123 | (setq tab-bar-history-omit t) | 1133 | (setq tab-bar-history-omit t) |
| 1124 | (let* ((history (pop (gethash (selected-frame) tab-bar-history-forward))) | 1134 | (let* ((history (pop (gethash (selected-frame) tab-bar-history-forward))) |
| @@ -1136,7 +1146,9 @@ function `tab-bar-tab-name-function'." | |||
| 1136 | (message "No more tab forward history")))) | 1146 | (message "No more tab forward history")))) |
| 1137 | 1147 | ||
| 1138 | (define-minor-mode tab-bar-history-mode | 1148 | (define-minor-mode tab-bar-history-mode |
| 1139 | "Toggle tab history mode for the tab bar." | 1149 | "Toggle tab history mode for the tab bar. |
| 1150 | Tab history mode remembers window configurations used in every tab, | ||
| 1151 | and can restore them." | ||
| 1140 | :global t :group 'tab-bar | 1152 | :global t :group 'tab-bar |
| 1141 | (if tab-bar-history-mode | 1153 | (if tab-bar-history-mode |
| 1142 | (progn | 1154 | (progn |
diff --git a/lisp/tab-line.el b/lisp/tab-line.el index eb279deab4c..7a2bdc0b72f 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el | |||
| @@ -474,8 +474,12 @@ variable `tab-line-tabs-function'." | |||
| 474 | "Template for displaying tab line for selected window." | 474 | "Template for displaying tab line for selected window." |
| 475 | (let* ((tabs (funcall tab-line-tabs-function)) | 475 | (let* ((tabs (funcall tab-line-tabs-function)) |
| 476 | (cache-key (list tabs | 476 | (cache-key (list tabs |
| 477 | ;; handle buffer renames | ||
| 477 | (buffer-name (window-buffer)) | 478 | (buffer-name (window-buffer)) |
| 478 | (window-parameter nil 'tab-line-hscroll))) | 479 | ;; handle tab-line scrolling |
| 480 | (window-parameter nil 'tab-line-hscroll) | ||
| 481 | ;; for setting face 'tab-line-tab-current' | ||
| 482 | (eq (selected-window) (old-selected-window)))) | ||
| 479 | (cache (window-parameter nil 'tab-line-cache))) | 483 | (cache (window-parameter nil 'tab-line-cache))) |
| 480 | ;; Enable auto-hscroll again after it was disabled on manual scrolling. | 484 | ;; Enable auto-hscroll again after it was disabled on manual scrolling. |
| 481 | ;; The moment to enable it is when the window-buffer was updated. | 485 | ;; The moment to enable it is when the window-buffer was updated. |
diff --git a/src/term.c b/src/term.c index a3aef31ec25..94bf013f4a0 100644 --- a/src/term.c +++ b/src/term.c | |||
| @@ -563,8 +563,8 @@ encode_terminal_code (struct glyph *src, int src_len, | |||
| 563 | { | 563 | { |
| 564 | cmp = composition_table[src->u.cmp.id]; | 564 | cmp = composition_table[src->u.cmp.id]; |
| 565 | required = cmp->glyph_len; | 565 | required = cmp->glyph_len; |
| 566 | required *= MAX_MULTIBYTE_LENGTH; | ||
| 567 | } | 566 | } |
| 567 | required *= MAX_MULTIBYTE_LENGTH; | ||
| 568 | 568 | ||
| 569 | if (encode_terminal_src_size - nbytes < required) | 569 | if (encode_terminal_src_size - nbytes < required) |
| 570 | { | 570 | { |
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el index fa71e26d21e..88be74fd2cc 100644 --- a/test/lisp/simple-tests.el +++ b/test/lisp/simple-tests.el | |||
| @@ -757,7 +757,7 @@ See Bug#21722." | |||
| 757 | ;;; Tests for shell-command-dont-erase-buffer | 757 | ;;; Tests for shell-command-dont-erase-buffer |
| 758 | 758 | ||
| 759 | (defmacro with-shell-command-dont-erase-buffer (str output-buffer-is-current &rest body) | 759 | (defmacro with-shell-command-dont-erase-buffer (str output-buffer-is-current &rest body) |
| 760 | (declare (debug (form &body)) (indent 2)) | 760 | (declare (debug (sexp form body)) (indent 2)) |
| 761 | (let ((expected (make-symbol "expected")) | 761 | (let ((expected (make-symbol "expected")) |
| 762 | (command (make-symbol "command")) | 762 | (command (make-symbol "command")) |
| 763 | (caller-buf (make-symbol "caller-buf")) | 763 | (caller-buf (make-symbol "caller-buf")) |
| @@ -766,8 +766,9 @@ See Bug#21722." | |||
| 766 | (,output-buf (if ,output-buffer-is-current ,caller-buf | 766 | (,output-buf (if ,output-buffer-is-current ,caller-buf |
| 767 | (generate-new-buffer "output-buf"))) | 767 | (generate-new-buffer "output-buf"))) |
| 768 | (emacs (expand-file-name invocation-name invocation-directory)) | 768 | (emacs (expand-file-name invocation-name invocation-directory)) |
| 769 | (,command (format "%s -Q --batch --eval \"(princ \\\"%s\\\")\"" | 769 | (,command |
| 770 | emacs ,str)) | 770 | (format "%s -Q --batch --eval %s" |
| 771 | emacs (shell-quote-argument (format "(princ %S)" ,str)))) | ||
| 771 | (inhibit-message t)) | 772 | (inhibit-message t)) |
| 772 | (unwind-protect | 773 | (unwind-protect |
| 773 | ;; Feature must work the same regardless how we specify the 2nd arg of `shell-command', ie, | 774 | ;; Feature must work the same regardless how we specify the 2nd arg of `shell-command', ie, |
| @@ -787,7 +788,7 @@ See Bug#21722." | |||
| 787 | 788 | ||
| 788 | (ert-deftest simple-tests-shell-command-39067 () | 789 | (ert-deftest simple-tests-shell-command-39067 () |
| 789 | "The output buffer is erased or not according to `shell-command-dont-erase-buffer'." | 790 | "The output buffer is erased or not according to `shell-command-dont-erase-buffer'." |
| 790 | (let ((str "foo\n")) | 791 | (let ((str "foo\\n")) |
| 791 | (dolist (output-current '(t nil)) | 792 | (dolist (output-current '(t nil)) |
| 792 | (with-shell-command-dont-erase-buffer str output-current | 793 | (with-shell-command-dont-erase-buffer str output-current |
| 793 | (let ((expected (cond ((eq shell-command-dont-erase-buffer 'erase) str) | 794 | (let ((expected (cond ((eq shell-command-dont-erase-buffer 'erase) str) |
| @@ -799,7 +800,7 @@ See Bug#21722." | |||
| 799 | 800 | ||
| 800 | (ert-deftest simple-tests-shell-command-dont-erase-buffer () | 801 | (ert-deftest simple-tests-shell-command-dont-erase-buffer () |
| 801 | "The point is set at the expected position after execution of the command." | 802 | "The point is set at the expected position after execution of the command." |
| 802 | (let* ((str "foo\n") | 803 | (let* ((str "foo\\n") |
| 803 | (expected-point `((beg-last-out . ,(1+ (length str))) | 804 | (expected-point `((beg-last-out . ,(1+ (length str))) |
| 804 | (end-last-out . ,(1+ (* 2 (length str)))) | 805 | (end-last-out . ,(1+ (* 2 (length str)))) |
| 805 | (save-point . 1)))) | 806 | (save-point . 1)))) |