diff options
| -rw-r--r-- | admin/release-process | 11 | ||||
| -rw-r--r-- | doc/lispref/commands.texi | 48 | ||||
| -rw-r--r-- | doc/lispref/sequences.texi | 9 | ||||
| -rw-r--r-- | doc/lispref/tips.texi | 17 | ||||
| -rw-r--r-- | doc/misc/info.texi | 42 | ||||
| -rw-r--r-- | lisp/Makefile.in | 6 | ||||
| -rw-r--r-- | lisp/emacs-lisp/seq.el | 8 | ||||
| -rw-r--r-- | lisp/info.el | 9 | ||||
| -rw-r--r-- | lisp/minibuffer.el | 83 | ||||
| -rw-r--r-- | src/keyboard.c | 7 | ||||
| -rw-r--r-- | src/xdisp.c | 7 |
11 files changed, 169 insertions, 78 deletions
diff --git a/admin/release-process b/admin/release-process index c3728b582f1..a1f42f05075 100644 --- a/admin/release-process +++ b/admin/release-process | |||
| @@ -195,6 +195,17 @@ pt-br Rodrigo Real | |||
| 195 | ru Alex Ott | 195 | ru Alex Ott |
| 196 | sk Miroslav Vaško | 196 | sk Miroslav Vaško |
| 197 | 197 | ||
| 198 | ** Update some files from their upstream. | ||
| 199 | |||
| 200 | Some files in Emacs are copies of data files maintained elsewhere. | ||
| 201 | Make sure that they are reasonably up-to-date. | ||
| 202 | |||
| 203 | - etc/publicsuffix.txt | ||
| 204 | https://publicsuffix.org/list/public_suffix_list.dat | ||
| 205 | |||
| 206 | - leim/SKK-DIC/SKK-JISYO.L | ||
| 207 | https://raw.githubusercontent.com/skk-dev/dict/master/SKK-JISYO.L | ||
| 208 | |||
| 198 | * BUGS | 209 | * BUGS |
| 199 | 210 | ||
| 200 | ** Check for modes which bind M-s that conflicts with a new global binding M-s | 211 | ** Check for modes which bind M-s that conflicts with a new global binding M-s |
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 25f657404f3..aabaec256b4 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi | |||
| @@ -1346,10 +1346,11 @@ button. @xref{Repeat Events}. | |||
| 1346 | 1346 | ||
| 1347 | To access the contents of a mouse position list in the | 1347 | To access the contents of a mouse position list in the |
| 1348 | @var{position} slot of a click event, you should typically use the | 1348 | @var{position} slot of a click event, you should typically use the |
| 1349 | functions documented in @ref{Accessing Mouse}. The explicit format of | 1349 | functions documented in @ref{Accessing Mouse}. |
| 1350 | the list depends on where the click occurred. For clicks in the text | 1350 | |
| 1351 | area, mode line, header line, tab line, or in the fringe or marginal | 1351 | The explicit format of the list depends on where the click occurred. |
| 1352 | areas, the mouse position list has the form | 1352 | For clicks in the text area, mode line, header line, tab line, or in |
| 1353 | the fringe or marginal areas, the mouse position list has the form | ||
| 1353 | 1354 | ||
| 1354 | @example | 1355 | @example |
| 1355 | (@var{window} @var{pos-or-area} (@var{x} . @var{y}) @var{timestamp} | 1356 | (@var{window} @var{pos-or-area} (@var{x} . @var{y}) @var{timestamp} |
| @@ -1479,6 +1480,45 @@ handle), @code{up} (the up arrow at one end of the scroll bar), or | |||
| 1479 | @c The 'top', 'bottom', and 'end-scroll' codes don't seem to be used. | 1480 | @c The 'top', 'bottom', and 'end-scroll' codes don't seem to be used. |
| 1480 | @end table | 1481 | @end table |
| 1481 | 1482 | ||
| 1483 | For clicks on the frame's internal border (@pxref{Frame Layout}), | ||
| 1484 | @var{position} has this form: | ||
| 1485 | |||
| 1486 | @example | ||
| 1487 | (@var{frame} @var{part} (@var{X} . @var{Y}) @var{timestamp}) | ||
| 1488 | @end example | ||
| 1489 | |||
| 1490 | @table @asis | ||
| 1491 | @item @var{frame} | ||
| 1492 | The frame whose internal border was clicked on. | ||
| 1493 | |||
| 1494 | @item @var{part} | ||
| 1495 | The part of the internal border which was clicked on. This can be one | ||
| 1496 | of the following: | ||
| 1497 | |||
| 1498 | @table @code | ||
| 1499 | @item nil | ||
| 1500 | The frame does not have an internal border. This usually happens on | ||
| 1501 | text-mode frames. This can also happen on GUI frames with internal | ||
| 1502 | border if the frame doesn't have its @code{drag-internal-border} | ||
| 1503 | parameter (@pxref{Mouse Dragging Parameters}) set to a non-@code{nil} | ||
| 1504 | value. | ||
| 1505 | |||
| 1506 | @item left-edge | ||
| 1507 | @itemx top-edge | ||
| 1508 | @itemx right-edge | ||
| 1509 | @itemx bottom-edge | ||
| 1510 | The click was on the corresponding border at an offset of at least one | ||
| 1511 | canonical character from the border's nearest corner. | ||
| 1512 | |||
| 1513 | @item top-left-corner | ||
| 1514 | @itemx top-right-corner | ||
| 1515 | @itemx bottom-right-corner | ||
| 1516 | @itemx bottom-left-corner | ||
| 1517 | The click was on the corresponding corner of the internal border. | ||
| 1518 | @end table | ||
| 1519 | |||
| 1520 | @end table | ||
| 1521 | |||
| 1482 | 1522 | ||
| 1483 | @node Drag Events | 1523 | @node Drag Events |
| 1484 | @subsection Drag Events | 1524 | @subsection Drag Events |
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index ca52369bd0c..952834bd4e3 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi | |||
| @@ -658,8 +658,13 @@ for which @var{predicate} returns @code{nil}. | |||
| 658 | @var{initial-value} and the first element of @var{sequence}, then calling | 658 | @var{initial-value} and the first element of @var{sequence}, then calling |
| 659 | @var{function} with that result and the second element of @var{sequence}, | 659 | @var{function} with that result and the second element of @var{sequence}, |
| 660 | then with that result and the third element of @var{sequence}, etc. | 660 | then with that result and the third element of @var{sequence}, etc. |
| 661 | @var{function} should be a function of two arguments. If | 661 | @var{function} should be a function of two arguments. |
| 662 | @var{sequence} is empty, this returns @var{initial-value} without | 662 | |
| 663 | @var{function} is called with two arguments. @var{intial-value} | ||
| 664 | (and then the accumulated value) is used as the first argument, and | ||
| 665 | the elements in @var{sequence} are used for the second argument. | ||
| 666 | |||
| 667 | If @var{sequence} is empty, this returns @var{initial-value} without | ||
| 663 | calling @var{function}. | 668 | calling @var{function}. |
| 664 | 669 | ||
| 665 | @example | 670 | @example |
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index 5b09b2ccea6..4d6dcb9f834 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi | |||
| @@ -95,6 +95,11 @@ If one prefix is insufficient, your package can use two or three | |||
| 95 | alternative common prefixes, so long as they make sense. | 95 | alternative common prefixes, so long as they make sense. |
| 96 | 96 | ||
| 97 | @item | 97 | @item |
| 98 | We recommend enabling @code{lexical-binding} in new code, and | ||
| 99 | converting existing Emacs Lisp code to enable @code{lexical-binding} | ||
| 100 | if it doesn't already. @xref{Using Lexical Binding}. | ||
| 101 | |||
| 102 | @item | ||
| 98 | Put a call to @code{provide} at the end of each separate Lisp file. | 103 | Put a call to @code{provide} at the end of each separate Lisp file. |
| 99 | @xref{Named Features}. | 104 | @xref{Named Features}. |
| 100 | 105 | ||
| @@ -963,7 +968,7 @@ explains these conventions, starting with an example: | |||
| 963 | 968 | ||
| 964 | @smallexample | 969 | @smallexample |
| 965 | @group | 970 | @group |
| 966 | ;;; foo.el --- Support for the Foo programming language | 971 | ;;; foo.el --- Support for the Foo programming language -*- lexical-binding: t; -*- |
| 967 | 972 | ||
| 968 | ;; Copyright (C) 2010-2020 Your Name | 973 | ;; Copyright (C) 2010-2020 Your Name |
| 969 | @end group | 974 | @end group |
| @@ -986,14 +991,14 @@ explains these conventions, starting with an example: | |||
| 986 | The very first line should have this format: | 991 | The very first line should have this format: |
| 987 | 992 | ||
| 988 | @example | 993 | @example |
| 989 | ;;; @var{filename} --- @var{description} | 994 | ;;; @var{filename} --- @var{description} -*- lexical-binding: t; -*- |
| 990 | @end example | 995 | @end example |
| 991 | 996 | ||
| 992 | @noindent | 997 | @noindent |
| 993 | The description should be contained in one line. If the file | 998 | The description should be contained in one line. If the file needs to |
| 994 | needs a @samp{-*-} specification, put it after @var{description}. | 999 | set more variables in the @samp{-*-} specification, add it after |
| 995 | If this would make the first line too long, use a Local Variables | 1000 | @code{lexical-binding}. If this would make the first line too long, use |
| 996 | section at the end of the file. | 1001 | a Local Variables section at the end of the file. |
| 997 | 1002 | ||
| 998 | The copyright notice usually lists your name (if you wrote the | 1003 | The copyright notice usually lists your name (if you wrote the |
| 999 | file). If you have an employer who claims copyright on your work, you | 1004 | file). If you have an employer who claims copyright on your work, you |
diff --git a/doc/misc/info.texi b/doc/misc/info.texi index f3ab305e350..85e04a99608 100644 --- a/doc/misc/info.texi +++ b/doc/misc/info.texi | |||
| @@ -798,17 +798,17 @@ in cross references and node names if it differs from the current | |||
| 798 | file, so you can always know that you are going to be switching to | 798 | file, so you can always know that you are going to be switching to |
| 799 | another manual and which one. | 799 | another manual and which one. |
| 800 | 800 | ||
| 801 | However, Emacs normally hides some other text in cross-references. | 801 | Emacs normally hides some text in cross references. If you put your |
| 802 | If you put your mouse over the cross reference, then the information | 802 | mouse over the cross reference, then the information appearing in a |
| 803 | appearing in a separate box (tool tip) or in the echo area will show | 803 | separate box (tool tip) or in the echo area will show the full |
| 804 | the full cross-reference including the file name and the node name of | 804 | cross reference, including the file name and the node name of the |
| 805 | the cross reference. If you have a mouse, just leave it over the | 805 | cross reference if it leads to another file. If you have a mouse, |
| 806 | cross reference @xref{Top,, Overview of Texinfo, texinfo, Texinfo: | 806 | just leave it over the next cross reference: @xref{Top,, Overview of |
| 807 | The GNU Documentation Format}, and watch what happens. If you | 807 | Texinfo, texinfo, Texinfo: The GNU Documentation Format}, and watch |
| 808 | always like to have that information visible without having to move | 808 | what happens. If you always like to have that information visible |
| 809 | your mouse over the cross reference, use @kbd{M-x visible-mode}, or | 809 | without having to move your mouse over the cross reference, use |
| 810 | set @code{Info-hide-note-references} to a value other than @code{t} | 810 | @kbd{M-x visible-mode}, or set @code{Info-hide-note-references} to a |
| 811 | (@pxref{Emacs Info Variables}). | 811 | value other than @code{t} (@pxref{Emacs Info Variables}). |
| 812 | 812 | ||
| 813 | @format | 813 | @format |
| 814 | >> Now type @kbd{n} to learn more commands. | 814 | >> Now type @kbd{n} to learn more commands. |
| @@ -1227,12 +1227,20 @@ not scroll with the rest of the buffer, making these links always | |||
| 1227 | visible. | 1227 | visible. |
| 1228 | 1228 | ||
| 1229 | @item Info-hide-note-references | 1229 | @item Info-hide-note-references |
| 1230 | As explained in earlier nodes, the Emacs version of Info normally | 1230 | As explained in earlier sections, the Emacs version of Info normally |
| 1231 | hides some text in menus and cross-references. You can completely | 1231 | hides some text in menus and cross references. It also replaces the |
| 1232 | disable this feature, by setting this option to @code{nil}. Setting | 1232 | @samp{*note} prefix of each cross reference with a more grammatically |
| 1233 | it to a value that is neither @code{nil} nor @code{t} produces an | 1233 | correct @samp{see}. This is the effect of the default value of this |
| 1234 | intermediate behavior, hiding a limited amount of text, but showing | 1234 | option, @code{t}. Setting this option to @code{nil} disables both |
| 1235 | all text that could potentially be useful. | 1235 | hiding and replacing of the original cross reference text, and Emacs |
| 1236 | will then display them as they are in the Info file. If you set it to | ||
| 1237 | the value @code{hide}, Emacs will do the same as with @code{t}, but | ||
| 1238 | will also remove @samp{*note} without replacing it with anything. | ||
| 1239 | Setting it to any other non-@code{nil} value produces an intermediate | ||
| 1240 | behavior, hiding a limited amount of text, but showing all text that | ||
| 1241 | could potentially be useful, including the name of the node that is | ||
| 1242 | the target of the cross reference and its file if it is different from | ||
| 1243 | the current file. | ||
| 1236 | 1244 | ||
| 1237 | @item Info-scroll-prefer-subnodes | 1245 | @item Info-scroll-prefer-subnodes |
| 1238 | If set to a non-@code{nil} value, @key{SPC} and @key{BACKSPACE} (or | 1246 | If set to a non-@code{nil} value, @key{SPC} and @key{BACKSPACE} (or |
diff --git a/lisp/Makefile.in b/lisp/Makefile.in index 57527bb5afc..dac62cedec2 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in | |||
| @@ -525,4 +525,10 @@ $(lisp)/progmodes/cc-mode.elc: $(lisp)/progmodes/cc-langs.elc \ | |||
| 525 | $(lisp)/progmodes/cc-styles.elc: $(lisp)/progmodes/cc-vars.elc \ | 525 | $(lisp)/progmodes/cc-styles.elc: $(lisp)/progmodes/cc-vars.elc \ |
| 526 | $(lisp)/progmodes/cc-align.elc | 526 | $(lisp)/progmodes/cc-align.elc |
| 527 | 527 | ||
| 528 | # https://debbugs.gnu.org/43037 | ||
| 529 | # js.elc (like all modes using CC Mode's compile time macros) needs to | ||
| 530 | # be compiled under the same version of CC Mode it will run with. | ||
| 531 | $(lisp)/progmodes/js.elc: $(lisp)/progmodes/cc-defs.elc \ | ||
| 532 | $(lisp)/progmodes/cc-engine.elc $(lisp)/progmodes/cc-mode.elc | ||
| 533 | |||
| 528 | # Makefile ends here. | 534 | # Makefile ends here. |
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el index e3037a71901..42b145da2fd 100644 --- a/lisp/emacs-lisp/seq.el +++ b/lisp/emacs-lisp/seq.el | |||
| @@ -336,9 +336,11 @@ list." | |||
| 336 | "Reduce the function FUNCTION across SEQUENCE, starting with INITIAL-VALUE. | 336 | "Reduce the function FUNCTION across SEQUENCE, starting with INITIAL-VALUE. |
| 337 | 337 | ||
| 338 | Return the result of calling FUNCTION with INITIAL-VALUE and the | 338 | Return the result of calling FUNCTION with INITIAL-VALUE and the |
| 339 | first element of SEQUENCE, then calling FUNCTION with that result and | 339 | first element of SEQUENCE, then calling FUNCTION with that result |
| 340 | the second element of SEQUENCE, then with that result and the third | 340 | and the second element of SEQUENCE, then with that result and the |
| 341 | element of SEQUENCE, etc. | 341 | third element of SEQUENCE, etc. FUNCTION will be called with |
| 342 | INITIAL-VALUE (and then the accumulated value) as the first | ||
| 343 | argument, and the elements from SEQUENCE as the second argument. | ||
| 342 | 344 | ||
| 343 | If SEQUENCE is empty, return INITIAL-VALUE and FUNCTION is not called." | 345 | If SEQUENCE is empty, return INITIAL-VALUE and FUNCTION is not called." |
| 344 | (if (seq-empty-p sequence) | 346 | (if (seq-empty-p sequence) |
diff --git a/lisp/info.el b/lisp/info.el index 033a7a5cbb5..13c57bdcd13 100644 --- a/lisp/info.el +++ b/lisp/info.el | |||
| @@ -305,10 +305,11 @@ when you hit the end of the current node." | |||
| 305 | 305 | ||
| 306 | (defcustom Info-hide-note-references t | 306 | (defcustom Info-hide-note-references t |
| 307 | "If non-nil, hide the tag and section reference in *note and * menu items. | 307 | "If non-nil, hide the tag and section reference in *note and * menu items. |
| 308 | If value is non-nil but not `hide', also replaces the \"*note\" with \"see\". | 308 | If the value is t, the default, replace \"*note\" with \"see\". |
| 309 | If value is non-nil but not t or `hide', the reference section is still shown. | 309 | If the value is `hide', remove \"*note\" without replacing it with anything. |
| 310 | nil completely disables this feature. If this is non-nil, you might | 310 | If value is non-nil, but not t or `hide', the reference section is still shown. |
| 311 | want to set `Info-refill-paragraphs'." | 311 | nil completely disables this feature, leaving the original \"*note\" visible. |
| 312 | If this is non-nil, you may wish setting `Info-refill-paragraphs' non-nil." | ||
| 312 | :version "22.1" | 313 | :version "22.1" |
| 313 | :type '(choice (const :tag "No hiding" nil) | 314 | :type '(choice (const :tag "No hiding" nil) |
| 314 | (const :tag "Replace tag and hide reference" t) | 315 | (const :tag "Replace tag and hide reference" t) |
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 10cfca8d587..942fb019fe2 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el | |||
| @@ -783,45 +783,50 @@ The text is displayed for `minibuffer-message-clear-timeout' seconds | |||
| 783 | whichever comes first. | 783 | whichever comes first. |
| 784 | Unlike `minibuffer-message', this function is called automatically | 784 | Unlike `minibuffer-message', this function is called automatically |
| 785 | via `set-message-function'." | 785 | via `set-message-function'." |
| 786 | (when (and (not noninteractive) | 786 | (let* ((minibuf-window (active-minibuffer-window)) |
| 787 | (window-live-p (active-minibuffer-window)) | 787 | (minibuf-frame (and (window-live-p minibuf-window) |
| 788 | (eq (window-frame) (window-frame (active-minibuffer-window)))) | 788 | (window-frame minibuf-window)))) |
| 789 | (with-current-buffer (window-buffer (active-minibuffer-window)) | 789 | (when (and (not noninteractive) |
| 790 | (setq message (if (string-match-p "\\` *\\[.+\\]\\'" message) | 790 | (window-live-p minibuf-window) |
| 791 | ;; Make sure we can put-text-property. | 791 | (or (eq (window-frame) minibuf-frame) |
| 792 | (copy-sequence message) | 792 | (eq (frame-parameter minibuf-frame 'minibuffer) 'only))) |
| 793 | (concat " [" message "]"))) | 793 | (with-current-buffer (window-buffer minibuf-window) |
| 794 | (unless (or (null minibuffer-message-properties) | 794 | (setq message (if (string-match-p "\\` *\\[.+\\]\\'" message) |
| 795 | ;; Don't overwrite the face properties the caller has set | 795 | ;; Make sure we can put-text-property. |
| 796 | (text-properties-at 0 message)) | 796 | (copy-sequence message) |
| 797 | (setq message (apply #'propertize message minibuffer-message-properties))) | 797 | (concat " [" message "]"))) |
| 798 | 798 | (unless (or (null minibuffer-message-properties) | |
| 799 | (clear-minibuffer-message) | 799 | ;; Don't overwrite the face properties the caller has set |
| 800 | 800 | (text-properties-at 0 message)) | |
| 801 | (let ((ovpos (minibuffer--message-overlay-pos))) | 801 | (setq message |
| 802 | (setq minibuffer-message-overlay | 802 | (apply #'propertize message minibuffer-message-properties))) |
| 803 | (make-overlay ovpos ovpos nil t t))) | 803 | |
| 804 | (unless (zerop (length message)) | 804 | (clear-minibuffer-message) |
| 805 | ;; The current C cursor code doesn't know to use the overlay's | 805 | |
| 806 | ;; marker's stickiness to figure out whether to place the cursor | 806 | (let ((ovpos (minibuffer--message-overlay-pos))) |
| 807 | ;; before or after the string, so let's spoon-feed it the pos. | 807 | (setq minibuffer-message-overlay |
| 808 | (put-text-property 0 1 'cursor 1 message)) | 808 | (make-overlay ovpos ovpos nil t t))) |
| 809 | (overlay-put minibuffer-message-overlay 'after-string message) | 809 | (unless (zerop (length message)) |
| 810 | ;; Make sure the overlay with the message is displayed before | 810 | ;; The current C cursor code doesn't know to use the overlay's |
| 811 | ;; any other overlays in that position, in case they have | 811 | ;; marker's stickiness to figure out whether to place the cursor |
| 812 | ;; resize-mini-windows set to nil and the other overlay strings | 812 | ;; before or after the string, so let's spoon-feed it the pos. |
| 813 | ;; are too long for the mini-window width. This makes sure the | 813 | (put-text-property 0 1 'cursor 1 message)) |
| 814 | ;; temporary message will always be visible. | 814 | (overlay-put minibuffer-message-overlay 'after-string message) |
| 815 | (overlay-put minibuffer-message-overlay 'priority 1100) | 815 | ;; Make sure the overlay with the message is displayed before |
| 816 | 816 | ;; any other overlays in that position, in case they have | |
| 817 | (when (numberp minibuffer-message-clear-timeout) | 817 | ;; resize-mini-windows set to nil and the other overlay strings |
| 818 | (setq minibuffer-message-timer | 818 | ;; are too long for the mini-window width. This makes sure the |
| 819 | (run-with-timer minibuffer-message-clear-timeout nil | 819 | ;; temporary message will always be visible. |
| 820 | #'clear-minibuffer-message))) | 820 | (overlay-put minibuffer-message-overlay 'priority 1100) |
| 821 | 821 | ||
| 822 | ;; Return `t' telling the caller that the message | 822 | (when (numberp minibuffer-message-clear-timeout) |
| 823 | ;; was handled specially by this function. | 823 | (setq minibuffer-message-timer |
| 824 | t))) | 824 | (run-with-timer minibuffer-message-clear-timeout nil |
| 825 | #'clear-minibuffer-message))) | ||
| 826 | |||
| 827 | ;; Return `t' telling the caller that the message | ||
| 828 | ;; was handled specially by this function. | ||
| 829 | t)))) | ||
| 825 | 830 | ||
| 826 | (setq set-message-function 'set-minibuffer-message) | 831 | (setq set-message-function 'set-minibuffer-message) |
| 827 | 832 | ||
diff --git a/src/keyboard.c b/src/keyboard.c index 5f136f03ecf..fca71985b92 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -5246,7 +5246,6 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, | |||
| 5246 | extra_info))); | 5246 | extra_info))); |
| 5247 | } | 5247 | } |
| 5248 | 5248 | ||
| 5249 | #ifdef HAVE_WINDOW_SYSTEM | ||
| 5250 | else if (f) | 5249 | else if (f) |
| 5251 | { | 5250 | { |
| 5252 | /* Return mouse pixel coordinates here. */ | 5251 | /* Return mouse pixel coordinates here. */ |
| @@ -5254,7 +5253,9 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, | |||
| 5254 | xret = XFIXNUM (x); | 5253 | xret = XFIXNUM (x); |
| 5255 | yret = XFIXNUM (y); | 5254 | yret = XFIXNUM (y); |
| 5256 | 5255 | ||
| 5257 | if (FRAME_LIVE_P (f) | 5256 | #ifdef HAVE_WINDOW_SYSTEM |
| 5257 | if (FRAME_WINDOW_P (f) | ||
| 5258 | && FRAME_LIVE_P (f) | ||
| 5258 | && FRAME_INTERNAL_BORDER_WIDTH (f) > 0 | 5259 | && FRAME_INTERNAL_BORDER_WIDTH (f) > 0 |
| 5259 | && !NILP (get_frame_param (f, Qdrag_internal_border))) | 5260 | && !NILP (get_frame_param (f, Qdrag_internal_border))) |
| 5260 | { | 5261 | { |
| @@ -5263,8 +5264,8 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, | |||
| 5263 | 5264 | ||
| 5264 | posn = builtin_lisp_symbol (internal_border_parts[part]); | 5265 | posn = builtin_lisp_symbol (internal_border_parts[part]); |
| 5265 | } | 5266 | } |
| 5266 | } | ||
| 5267 | #endif | 5267 | #endif |
| 5268 | } | ||
| 5268 | 5269 | ||
| 5269 | else | 5270 | else |
| 5270 | window_or_frame = Qnil; | 5271 | window_or_frame = Qnil; |
diff --git a/src/xdisp.c b/src/xdisp.c index 6c401d0abb9..03dc4bec712 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -22793,6 +22793,10 @@ maybe_produce_line_number (struct it *it) | |||
| 22793 | int lnum_face_id = merge_faces (it->w, Qline_number, 0, DEFAULT_FACE_ID); | 22793 | int lnum_face_id = merge_faces (it->w, Qline_number, 0, DEFAULT_FACE_ID); |
| 22794 | int current_lnum_face_id | 22794 | int current_lnum_face_id |
| 22795 | = merge_faces (it->w, Qline_number_current_line, 0, DEFAULT_FACE_ID); | 22795 | = merge_faces (it->w, Qline_number_current_line, 0, DEFAULT_FACE_ID); |
| 22796 | /* From here onwards, we must prevent freeing realized faces, because | ||
| 22797 | we are using the above 2 face IDs for the glyphs we produce. */ | ||
| 22798 | bool save_free_realized_faces = inhibit_free_realized_faces; | ||
| 22799 | inhibit_free_realized_faces = true; | ||
| 22796 | /* Compute point's line number if needed. */ | 22800 | /* Compute point's line number if needed. */ |
| 22797 | if ((EQ (Vdisplay_line_numbers, Qrelative) | 22801 | if ((EQ (Vdisplay_line_numbers, Qrelative) |
| 22798 | || EQ (Vdisplay_line_numbers, Qvisual) | 22802 | || EQ (Vdisplay_line_numbers, Qvisual) |
| @@ -22922,10 +22926,13 @@ maybe_produce_line_number (struct it *it) | |||
| 22922 | it->lnum_width = 0; | 22926 | it->lnum_width = 0; |
| 22923 | it->lnum_pixel_width = 0; | 22927 | it->lnum_pixel_width = 0; |
| 22924 | bidi_unshelve_cache (itdata, false); | 22928 | bidi_unshelve_cache (itdata, false); |
| 22929 | inhibit_free_realized_faces = save_free_realized_faces; | ||
| 22925 | return; | 22930 | return; |
| 22926 | } | 22931 | } |
| 22927 | } | 22932 | } |
| 22928 | 22933 | ||
| 22934 | inhibit_free_realized_faces = save_free_realized_faces; | ||
| 22935 | |||
| 22929 | /* Record the width in pixels we need for the line number display. */ | 22936 | /* Record the width in pixels we need for the line number display. */ |
| 22930 | it->lnum_pixel_width = tem_it.current_x; | 22937 | it->lnum_pixel_width = tem_it.current_x; |
| 22931 | /* Copy the produced glyphs into IT's glyph_row. */ | 22938 | /* Copy the produced glyphs into IT's glyph_row. */ |