aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Morris2018-10-27 09:15:32 -0700
committerGlenn Morris2018-10-27 09:15:32 -0700
commit2df74ce79b910c977167e84d4cb37ede1053663f (patch)
treec349e7c462c20b423030b734c461b90eee17f23f
parent3e81e9a0e7742197354515f3d3ea55fdb201eb29 (diff)
parentdf64da8eb845c9f07ee93bfbf28af41a01a2e83f (diff)
downloademacs-2df74ce79b910c977167e84d4cb37ede1053663f.tar.gz
emacs-2df74ce79b910c977167e84d4cb37ede1053663f.zip
Merge from origin/emacs-26
df64da8 (origin/emacs-26) * lisp/simple.el (region-extract-function):... 520c486 * lisp/simple.el (region-bounds): Doc fix. (Bug#33168) 9193db0 Improve documentation of 'process-connection-type' 106b9e1 Unify prompt for gnupg passphrase between GNU/Linux and MS-Wi... 2a41616 Doc fix of 'gnus-fetch-old-headers' 29a7644 Deactivate incorrect hyperlinking in gnus-build-sparse-thread... 53ae90f Minor copyedits in cmdargs.texi fc2e65a Improve documentation of X resource loading 13132b3 * lisp/net/tramp-sh.el (tramp-inline-compress-commands): 8361292 ; Fix sorting in admin/MAINTAINERS 92de44f Don't error when indenting malformed Lisp (Bug#30891) c3adbc8 Improve 'isearch-delete-char' documentation (Bug#32990) 6ca71ce ; * lisp/help.el (with-help-window): Remove extra space in doc. f5f9583 Improve XPM load failure message (bug#33126) f3d01d4 Avoid infloop in CPerl mode fontification 71a2d50 Fix minibuffer-help-form for lexical binding 7e8eee6 Fix some NS drawing issues (bug#32932) d72975a * lisp/gnus/mm-util.el (mm-decompress-buffer): Fix split-stri... c97a5f1 * doc/misc/calc.texi (Summary): The +/- key is 'p', not 'P'. # Conflicts: # lisp/gnus/mm-util.el
-rw-r--r--admin/MAINTAINERS2
-rw-r--r--doc/emacs/cmdargs.texi18
-rw-r--r--doc/emacs/frames.texi4
-rw-r--r--doc/emacs/search.texi33
-rw-r--r--doc/emacs/xresources.texi5
-rw-r--r--doc/lispref/processes.texi19
-rw-r--r--doc/misc/calc.texi2
-rw-r--r--etc/PROBLEMS7
-rw-r--r--lisp/cus-edit.el2
-rw-r--r--lisp/emacs-lisp/lisp-mode.el4
-rw-r--r--lisp/epg.el2
-rw-r--r--lisp/gnus/gnus-sum.el15
-rw-r--r--lisp/gnus/mm-util.el2
-rw-r--r--lisp/help.el2
-rw-r--r--lisp/isearch.el13
-rw-r--r--lisp/net/tramp-sh.el3
-rw-r--r--lisp/progmodes/cperl-mode.el2
-rw-r--r--lisp/simple.el21
-rw-r--r--src/image.c2
-rw-r--r--src/nsterm.m80
20 files changed, 143 insertions, 95 deletions
diff --git a/admin/MAINTAINERS b/admin/MAINTAINERS
index 6db1d8801cb..05faa586c20 100644
--- a/admin/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -210,8 +210,8 @@ Paul Eggert
210Michael Albinus 210Michael Albinus
211 src/inotify.c 211 src/inotify.c
212 lisp/autorevert.el 212 lisp/autorevert.el
213 lisp/files.el (file-name-non-special)
214 lisp/eshell/em-tramp.el 213 lisp/eshell/em-tramp.el
214 lisp/files.el (file-name-non-special)
215 lisp/net/ange-ftp.el 215 lisp/net/ange-ftp.el
216 lisp/notifications.el 216 lisp/notifications.el
217 lisp/shadowfile.el 217 lisp/shadowfile.el
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index 733919a374a..2e2767ccada 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -305,6 +305,8 @@ not disable loading @file{site-start.el}.
305 305
306@item --no-site-file 306@item --no-site-file
307@opindex --no-site-file 307@opindex --no-site-file
308@itemx -nsl
309@opindex -nsl
308@cindex @file{site-start.el} file, not loading 310@cindex @file{site-start.el} file, not loading
309Do not load @file{site-start.el} (@pxref{Init File}). The @samp{-Q} 311Do not load @file{site-start.el} (@pxref{Init File}). The @samp{-Q}
310option does this too, but other options like @samp{-q} do not. 312option does this too, but other options like @samp{-q} do not.
@@ -323,14 +325,20 @@ Do not display a startup screen. You can also achieve this effect by
323setting the variable @code{inhibit-startup-screen} to non-@code{nil} 325setting the variable @code{inhibit-startup-screen} to non-@code{nil}
324in your initialization file (@pxref{Entering Emacs}). 326in your initialization file (@pxref{Entering Emacs}).
325 327
328@item --no-x-resources
329@opindex --no-x-resources
330@cindex X resources, not loading
331Do not load X resources. You can also achieve this effect by setting
332the variable @code{inhibit-x-resources} to @code{t} in your
333initialization file (@pxref{Resources}).
334
326@item -Q 335@item -Q
327@opindex -Q 336@opindex -Q
328@itemx --quick 337@itemx --quick
329@opindex --quick 338@opindex --quick
330Start Emacs with minimum customizations. This is similar to using @samp{-q}, 339Start Emacs with minimum customizations. This is similar to using
331@samp{--no-site-file}, @samp{--no-site-lisp}, and @samp{--no-splash} 340@samp{-q}, @samp{--no-site-file}, @samp{--no-site-lisp},
332together. This also stops Emacs from processing X resources by 341@samp{--no-x-resources}, and @samp{--no-splash} together..
333setting @code{inhibit-x-resources} to @code{t} (@pxref{Resources}).
334 342
335@item -daemon 343@item -daemon
336@opindex -daemon 344@opindex -daemon
@@ -373,6 +381,8 @@ Enable expensive correctness checks when dealing with dynamically
373loadable modules. This is intended for module authors that wish to 381loadable modules. This is intended for module authors that wish to
374verify that their module conforms to the module API requirements. The 382verify that their module conforms to the module API requirements. The
375option makes Emacs abort if a module-related assertion triggers. 383option makes Emacs abort if a module-related assertion triggers.
384@xref{Writing Dynamic Modules,, Writing Dynamically-Loaded Modules,
385elisp, The GNU Emacs Lisp Reference Manual}.
376@end table 386@end table
377 387
378@node Command Example 388@node Command Example
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index 9f4c7821e98..6bbaae24b17 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -934,6 +934,10 @@ the initial frame, by customizing the variable
934specify colors and fonts don't affect menus and the menu bar, since 934specify colors and fonts don't affect menus and the menu bar, since
935those are drawn by the toolkit and not directly by Emacs. 935those are drawn by the toolkit and not directly by Emacs.
936 936
937 Frame appearance and behavior can also be customized through X
938resources (@pxref{X Resources}); these override the parameters of the
939initial frame specified in your init file.
940
937 Note that if you are using the desktop library to save and restore 941 Note that if you are using the desktop library to save and restore
938your sessions, the frames to be restored are recorded in the desktop 942your sessions, the frames to be restored are recorded in the desktop
939file, together with their parameters. When these frames are restored, 943file, together with their parameters. When these frames are restored,
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index 263c4c5dcca..c9f3ccc5481 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -99,10 +99,18 @@ text that matches the search string---using the @code{isearch} face
99that customize this highlighting. The current search string is also 99that customize this highlighting. The current search string is also
100displayed in the echo area. 100displayed in the echo area.
101 101
102 If you make a mistake typing the search string, type @key{DEL}. 102@cindex isearch input item
103Each @key{DEL} cancels the last character of the search string. 103@cindex input item, isearch
104@xref{Error in Isearch}, for more about dealing with unsuccessful 104@findex isearch-delete-char
105search. 105@kindex DEL @r{(Incremental search)}
106 If you make a mistake typing the search string, type @key{DEL}
107(@code{isearch-delete-char}). Each @key{DEL} cancels the last input
108item entered during the search. Emacs records a new @dfn{input item}
109whenever you type a command that changes the search string, the
110position of point, the success or failure of the search, the direction
111of the search, the position of the other end of the current search
112result, or the ``wrappedness'' of the search. @xref{Error in
113Isearch}, for more about dealing with unsuccessful search.
106 114
107@cindex exit incremental search 115@cindex exit incremental search
108@cindex incremental search, exiting 116@cindex incremental search, exiting
@@ -290,14 +298,15 @@ string that failed to match is highlighted using the face
290@code{isearch-fail}. 298@code{isearch-fail}.
291 299
292 At this point, there are several things you can do. If your string 300 At this point, there are several things you can do. If your string
293was mistyped, you can use @key{DEL} to erase some of it and correct 301was mistyped, use @key{DEL} to cancel a previous input item
294it, or you can type @kbd{M-e} and edit it. If you like the place you 302(@pxref{Basic Isearch}), @kbd{C-M-w} to erase one character at a time,
295have found, you can type @key{RET} to remain there. Or you can type 303or @kbd{M-e} to edit it. If you like the place you have found, you
296@kbd{C-g}, which removes from the search string the characters that 304can type @key{RET} to remain there. Or you can type @kbd{C-g}, which
297could not be found (the @samp{T} in @samp{FOOT}), leaving those that 305removes from the search string the characters that could not be found
298were found (the @samp{FOO} in @samp{FOOT}). A second @kbd{C-g} at 306(the @samp{T} in @samp{FOOT}), leaving those that were found (the
299that point cancels the search entirely, returning point to where it 307@samp{FOO} in @samp{FOOT}). A second @kbd{C-g} at that point cancels
300was when the search started. 308the search entirely, returning point to where it was when the search
309started.
301 310
302@cindex quitting (in search) 311@cindex quitting (in search)
303@kindex C-g @r{(Incremental search)} 312@kindex C-g @r{(Incremental search)}
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index db2c6ffafd2..903090f51a9 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -46,6 +46,11 @@ this file do not take effect immediately, because the X server stores
46its own list of resources; to update it, use the command 46its own list of resources; to update it, use the command
47@command{xrdb}---for instance, @samp{xrdb ~/.Xdefaults}. 47@command{xrdb}---for instance, @samp{xrdb ~/.Xdefaults}.
48 48
49 Settings specified via X resources in general override the
50equivalent settings in Emacs init files (@pxref{Init File}), in
51particular for parameters of the initial frame (@pxref{Frame
52Parameters}).
53
49@cindex registry, setting resources (MS-Windows) 54@cindex registry, setting resources (MS-Windows)
50 (MS-Windows systems do not support X resource files; on such systems, 55 (MS-Windows systems do not support X resource files; on such systems,
51Emacs looks for X resources in the Windows Registry, first under the 56Emacs looks for X resources in the Windows Registry, first under the
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index e1113e37f10..2afc6a33828 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -598,8 +598,8 @@ communication is only partially asynchronous: Emacs sends data to the
598process only when certain functions are called, and Emacs accepts data 598process only when certain functions are called, and Emacs accepts data
599from the process only while waiting for input or for a time delay. 599from the process only while waiting for input or for a time delay.
600 600
601@cindex pty 601@cindex pty, when to use for subprocess communications
602@cindex pipe 602@cindex pipe, when to use for subprocess communications
603 An asynchronous process is controlled either via a @dfn{pty} 603 An asynchronous process is controlled either via a @dfn{pty}
604(pseudo-terminal) or a @dfn{pipe}. The choice of pty or pipe is made 604(pseudo-terminal) or a @dfn{pipe}. The choice of pty or pipe is made
605when creating the process, by default based on the value of the 605when creating the process, by default based on the value of the
@@ -609,11 +609,13 @@ Shell mode, because they allow for job control (@kbd{C-c}, @kbd{C-z},
609etc.)@: between the process and its children, and because interactive 609etc.)@: between the process and its children, and because interactive
610programs treat ptys as terminal devices, whereas pipes don't support 610programs treat ptys as terminal devices, whereas pipes don't support
611these features. However, for subprocesses used by Lisp programs for 611these features. However, for subprocesses used by Lisp programs for
612internal purposes, it is often better to use a pipe, because pipes are 612internal purposes (i.e., with no user interaction), where significant
613amounts of data need to be exchanged between the subprocess and the
614Lisp program, it is often better to use a pipe, because pipes are
613more efficient, and because they are immune to stray character 615more efficient, and because they are immune to stray character
614injections that ptys introduce for large (around 500 byte) messages. 616injections that ptys introduce for large (around 500 byte) messages.
615Also, the total number of ptys is limited on many systems and it is 617Also, the total number of ptys is limited on many systems, and it is
616good not to waste them. 618good not to waste them unnecessarily.
617 619
618@defun make-process &rest args 620@defun make-process &rest args
619This function is the basic low-level primitive for starting 621This function is the basic low-level primitive for starting
@@ -666,7 +668,9 @@ pipe, or @code{nil} to use the default derived from the value of the
666@code{process-connection-type} variable. This parameter and the value 668@code{process-connection-type} variable. This parameter and the value
667of @code{process-connection-type} are ignored if a non-@code{nil} 669of @code{process-connection-type} are ignored if a non-@code{nil}
668value is specified for the @code{:stderr} parameter; in that case, the 670value is specified for the @code{:stderr} parameter; in that case, the
669type will always be @code{pipe}. 671type will always be @code{pipe}. On systems where ptys are not
672available (MS-Windows), this parameter is likewise ignored, and pipes
673are used unconditionally.
670 674
671@item :noquery @var{query-flag} 675@item :noquery @var{query-flag}
672Initialize the process query flag to @var{query-flag}. 676Initialize the process query flag to @var{query-flag}.
@@ -873,7 +877,8 @@ around the call to these functions.
873Note that the value of this variable is ignored when 877Note that the value of this variable is ignored when
874@code{make-process} is called with a non-@code{nil} value of the 878@code{make-process} is called with a non-@code{nil} value of the
875@code{:stderr} parameter; in that case, Emacs will communicate with 879@code{:stderr} parameter; in that case, Emacs will communicate with
876the process using pipes. 880the process using pipes. It is also ignored if ptys are unavailable
881(MS-Windows).
877 882
878@smallexample 883@smallexample
879@group 884@group
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index 83807c6fd28..f7b23d35471 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -35832,7 +35832,7 @@ keystrokes are not listed in this summary.
35832@r{ @: _ @:number @: @:-@:number} 35832@r{ @: _ @:number @: @:-@:number}
35833@r{ @: e @:number @: @:@:1e number} 35833@r{ @: e @:number @: @:@:1e number}
35834@r{ @: # @:number @: @:@:current-radix@tfn{#}number} 35834@r{ @: # @:number @: @:@:current-radix@tfn{#}number}
35835@r{ @: P @:(in number) @: @:+/-@:} 35835@r{ @: p @:(in number) @: @:+/-@:}
35836@r{ @: M @:(in number) @: @:mod@:} 35836@r{ @: M @:(in number) @: @:mod@:}
35837@r{ @: @@ ' " @: (in number)@: @:@:HMS form} 35837@r{ @: @@ ' " @: (in number)@: @:@:HMS form}
35838@r{ @: h m s @: (in number)@: @:@:HMS form} 35838@r{ @: h m s @: (in number)@: @:@:HMS form}
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 6805e8733d5..0cbcca4a8a5 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -2599,6 +2599,13 @@ please call support for your X-server and see if you can get a fix.
2599If you do, please send it to bug-gnu-emacs@gnu.org so we can list it here. 2599If you do, please send it to bug-gnu-emacs@gnu.org so we can list it here.
2600 2600
2601 2601
2602* Runtime problems specific to macOS
2603
2604** macOS doesn't come with libxpm, so only XPM3 is supported.
2605
2606Libxpm is available for macOS as part of the XQuartz project.
2607
2608
2602* Build-time problems 2609* Build-time problems
2603 2610
2604** Configuration 2611** Configuration
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 723cd5010df..b69a63b80f5 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -917,7 +917,7 @@ the current value of the variable, otherwise `symbol-value' is used.
917If optional COMMENT argument is non-nil, also prompt for a comment and return 917If optional COMMENT argument is non-nil, also prompt for a comment and return
918it as the third element in the list." 918it as the third element in the list."
919 (let* ((var (read-variable prompt-var)) 919 (let* ((var (read-variable prompt-var))
920 (minibuffer-help-form '(describe-variable var)) 920 (minibuffer-help-form `(describe-variable ',var))
921 (val 921 (val
922 (let ((prop (get var 'variable-interactive)) 922 (let ((prop (get var 'variable-interactive))
923 (type (get var 'custom-type)) 923 (type (get var 'custom-type))
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index afb7cbd1dd7..46199196024 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -839,6 +839,10 @@ by more than one line to cross a string literal."
839 (prog1 839 (prog1
840 (let (indent) 840 (let (indent)
841 (cond ((= (forward-line 1) 1) nil) 841 (cond ((= (forward-line 1) 1) nil)
842 ;; Negative depth, probably some kind of syntax error.
843 ((null indent-stack)
844 ;; Reset state.
845 (setq ppss (parse-partial-sexp (point) (point))))
842 ((car indent-stack)) 846 ((car indent-stack))
843 ((integerp (setq indent (calculate-lisp-indent ppss))) 847 ((integerp (setq indent (calculate-lisp-indent ppss)))
844 (setf (car indent-stack) indent)) 848 (setf (car indent-stack) indent))
diff --git a/lisp/epg.el b/lisp/epg.el
index 9d9bc9051da..c8f24eb39f7 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -655,7 +655,7 @@ callback data (if any)."
655 :command (cons (epg-context-program context) 655 :command (cons (epg-context-program context)
656 args) 656 args)
657 :connection-type 'pipe 657 :connection-type 'pipe
658 :coding '(binary . binary) 658 :coding 'raw-text
659 :filter #'epg--process-filter 659 :filter #'epg--process-filter
660 :stderr error-process 660 :stderr error-process
661 :noquery t))) 661 :noquery t)))
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index f56b822ac57..f9fae3792b1 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -83,12 +83,12 @@ If an unread article in the group refers to an older, already
83read (or just marked as read) article, the old article will not 83read (or just marked as read) article, the old article will not
84normally be displayed in the Summary buffer. If this variable is 84normally be displayed in the Summary buffer. If this variable is
85t, Gnus will attempt to grab the headers to the old articles, and 85t, Gnus will attempt to grab the headers to the old articles, and
86thereby build complete threads. If it has the value `some', all 86thereby build complete threads. If the value is the symbol `some',
87old headers will be fetched but only enough headers to connect 87all old headers will be fetched but only enough headers to connect
88otherwise loose threads will be displayed. This variable can 88otherwise loose threads will be displayed. This variable can
89also be a number. In that case, no more than that number of old 89also be a number. In that case, no more than that number of old
90headers will be fetched. If it has the value `invisible', all 90headers will be fetched. If the value is the symbol `invisible',
91old headers will be fetched, but none will be displayed. 91all old headers will be fetched, but none will be displayed.
92 92
93The server has to support NOV for any of this to work. 93The server has to support NOV for any of this to work.
94 94
@@ -203,9 +203,10 @@ Useful functions to put in this list include:
203 203
204(defcustom gnus-build-sparse-threads nil 204(defcustom gnus-build-sparse-threads nil
205 "If non-nil, fill in the gaps in threads. 205 "If non-nil, fill in the gaps in threads.
206If `some', only fill in the gaps that are needed to tie loose threads 206If set to the symbol `some', only fill in the gaps that are
207together. If `more', fill in all leaf nodes that Gnus can find. If 207needed to tie loose threads together. If the symbol `more', fill
208non-nil and non-`some', fill in all gaps that Gnus manages to guess." 208in all leaf nodes that Gnus can find. If t (or any other value),
209fill in all gaps that Gnus manages to guess."
209 :group 'gnus-thread 210 :group 'gnus-thread
210 :type '(choice (const :tag "off" nil) 211 :type '(choice (const :tag "off" nil)
211 (const some) 212 (const some)
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 25b156803a6..14a232f706a 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -827,7 +827,7 @@ decompressed data. The buffer's multibyteness must be turned off."
827 (insert-file-contents err-file) 827 (insert-file-contents err-file)
828 (buffer-string) 828 (buffer-string)
829 (erase-buffer)) 829 (erase-buffer))
830 t) 830 nil t)
831 " ") 831 " ")
832 "\n") 832 "\n")
833 (setq err-msg 833 (setq err-msg
diff --git a/lisp/help.el b/lisp/help.el
index 28288e57f6e..ad782f74cac 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1326,7 +1326,7 @@ puts the buffer specified by BUFFER-OR-NAME in `help-mode' and
1326displays a message about how to delete the help window when it's no 1326displays a message about how to delete the help window when it's no
1327longer needed. The help window will be selected if 1327longer needed. The help window will be selected if
1328`help-window-select' is non-nil. 1328`help-window-select' is non-nil.
1329Most of this is done by `help-window-setup', which see." 1329Most of this is done by `help-window-setup', which see."
1330 (declare (indent 1) (debug t)) 1330 (declare (indent 1) (debug t))
1331 `(progn 1331 `(progn
1332 ;; Make `help-window-point-marker' point nowhere. The only place 1332 ;; Make `help-window-point-marker' point nowhere. The only place
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 1e785a44c51..38110d09984 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1984,11 +1984,14 @@ and reads its face argument using `hi-lock-read-face-name'."
1984 1984
1985 1985
1986(defun isearch-delete-char () 1986(defun isearch-delete-char ()
1987 "Discard last input item and move point back. 1987 "Undo last input item during a search.
1988Last input means the last character or the last isearch command 1988
1989that added or deleted characters from the search string, 1989An input item is the result of a command that pushes a new state
1990moved point, toggled regexp mode or case-sensitivity, etc. 1990of isearch (as recorded by the `isearch--state' structure) to
1991If no previous match was done, just beep." 1991`isearch-cmds'. Info node `(emacs)Basic Isearch' explains when
1992Emacs records a new input item.
1993
1994If no input items have been entered yet, just beep."
1992 (interactive) 1995 (interactive)
1993 (if (null (cdr isearch-cmds)) 1996 (if (null (cdr isearch-cmds))
1994 (ding) 1997 (ding)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 956fe2ddb73..11ee0639988 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -4492,7 +4492,8 @@ means discard it)."
4492 (if (stringp output) (concat " >" output) "")))) 4492 (if (stringp output) (concat " >" output) ""))))
4493 4493
4494(defconst tramp-inline-compress-commands 4494(defconst tramp-inline-compress-commands
4495 '(("gzip" "gzip -d") 4495 '(;; Suppress warnings about obsolete environment variable GZIP.
4496 ("env GZIP= gzip" "env GZIP= gzip -d")
4496 ("bzip2" "bzip2 -d") 4497 ("bzip2" "bzip2 -d")
4497 ("xz" "xz -d") 4498 ("xz" "xz -d")
4498 ("compress" "compress -d")) 4499 ("compress" "compress -d"))
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 18a72324c65..7d0884389eb 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -8786,7 +8786,7 @@ do extra unwind via `cperl-unwind-to-safe'."
8786 (goto-char new-beg))) 8786 (goto-char new-beg)))
8787 (setq beg (point)) 8787 (setq beg (point))
8788 (goto-char end) 8788 (goto-char end)
8789 (while (and end 8789 (while (and end (< end (point-max))
8790 (progn 8790 (progn
8791 (or (bolp) (condition-case nil 8791 (or (bolp) (condition-case nil
8792 (forward-line 1) 8792 (forward-line 1)
diff --git a/lisp/simple.el b/lisp/simple.el
index 562a9124b5c..6a7d210e483 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1071,13 +1071,16 @@ instead of deleted."
1071 (filter-buffer-substring (region-beginning) (region-end) method))))) 1071 (filter-buffer-substring (region-beginning) (region-end) method)))))
1072 "Function to get the region's content. 1072 "Function to get the region's content.
1073Called with one argument METHOD which can be: 1073Called with one argument METHOD which can be:
1074- nil: return the content as a string. 1074- nil: return the content as a string (list of strings for
1075 non-contiguous regions).
1075- `delete-only': delete the region; the return value is undefined. 1076- `delete-only': delete the region; the return value is undefined.
1076- `bounds': return the boundaries of the region as a list of cons 1077- `bounds': return the boundaries of the region as a list of one
1077 cells of the form (START . END). 1078 or more cons cells of the form (START . END).
1078- anything else: delete the region and return its content 1079- anything else: delete the region and return its content
1079 as a string, after filtering it with `filter-buffer-substring', which 1080 as a string (or list of strings for non-contiguous regions),
1080 is called with METHOD as its 3rd argument.") 1081 after filtering it with `filter-buffer-substring', which
1082 is called, for each contiguous sub-region, with METHOD as its
1083 3rd argument.")
1081 1084
1082(defvar region-insert-function 1085(defvar region-insert-function
1083 (lambda (lines) 1086 (lambda (lines)
@@ -5527,8 +5530,10 @@ also checks the value of `use-empty-active-region'."
5527 (progn (cl-assert (mark)) t))) 5530 (progn (cl-assert (mark)) t)))
5528 5531
5529(defun region-bounds () 5532(defun region-bounds ()
5530 "Return the boundaries of the region as a pair of positions. 5533 "Return the boundaries of the region.
5531Value is a list of cons cells of the form (START . END)." 5534Value is a list of one or more cons cells of the form (START . END).
5535It will have more than one cons cell when the region is non-contiguous,
5536see `region-noncontiguous-p' and `extract-rectangle-bounds'."
5532 (funcall region-extract-function 'bounds)) 5537 (funcall region-extract-function 'bounds))
5533 5538
5534(defun region-noncontiguous-p () 5539(defun region-noncontiguous-p ()
@@ -7935,7 +7940,7 @@ With a prefix argument, set VARIABLE to VALUE buffer-locally."
7935 (read-variable (format "Set variable (default %s): " default-var) 7940 (read-variable (format "Set variable (default %s): " default-var)
7936 default-var) 7941 default-var)
7937 (read-variable "Set variable: "))) 7942 (read-variable "Set variable: ")))
7938 (minibuffer-help-form '(describe-variable var)) 7943 (minibuffer-help-form `(describe-variable ',var))
7939 (prop (get var 'variable-interactive)) 7944 (prop (get var 'variable-interactive))
7940 (obsolete (car (get var 'byte-obsolete-variable))) 7945 (obsolete (car (get var 'byte-obsolete-variable)))
7941 (prompt (format "Set %s %s to value: " var 7946 (prompt (format "Set %s %s to value: " var
diff --git a/src/image.c b/src/image.c
index 24decbc0997..ad4f95ba991 100644
--- a/src/image.c
+++ b/src/image.c
@@ -4309,7 +4309,7 @@ xpm_load_image (struct frame *f,
4309 return 1; 4309 return 1;
4310 4310
4311 failure: 4311 failure:
4312 image_error ("Invalid XPM file (%s)", img->spec); 4312 image_error ("Invalid XPM3 file (%s)", img->spec);
4313 x_destroy_x_image (ximg); 4313 x_destroy_x_image (ximg);
4314 x_destroy_x_image (mask_img); 4314 x_destroy_x_image (mask_img);
4315 x_clear_image (f, img); 4315 x_clear_image (f, img);
diff --git a/src/nsterm.m b/src/nsterm.m
index 1ef7f5ab516..bcc23ffeaff 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -279,7 +279,6 @@ long context_menu_value = 0;
279 279
280/* display update */ 280/* display update */
281static int ns_window_num = 0; 281static int ns_window_num = 0;
282static BOOL gsaved = NO;
283static BOOL ns_fake_keydown = NO; 282static BOOL ns_fake_keydown = NO;
284#ifdef NS_IMPL_COCOA 283#ifdef NS_IMPL_COCOA
285static BOOL ns_menu_bar_is_hidden = NO; 284static BOOL ns_menu_bar_is_hidden = NO;
@@ -1234,7 +1233,6 @@ ns_clip_to_rect (struct frame *f, NSRect *r, int n)
1234 NSRectClipList (r, 2); 1233 NSRectClipList (r, 2);
1235 else 1234 else
1236 NSRectClip (*r); 1235 NSRectClip (*r);
1237 gsaved = YES;
1238 1236
1239 return YES; 1237 return YES;
1240 } 1238 }
@@ -1258,11 +1256,7 @@ ns_reset_clipping (struct frame *f)
1258{ 1256{
1259 NSTRACE_WHEN (NSTRACE_GROUP_FOCUS, "ns_reset_clipping"); 1257 NSTRACE_WHEN (NSTRACE_GROUP_FOCUS, "ns_reset_clipping");
1260 1258
1261 if (gsaved) 1259 [[NSGraphicsContext currentContext] restoreGraphicsState];
1262 {
1263 [[NSGraphicsContext currentContext] restoreGraphicsState];
1264 gsaved = NO;
1265 }
1266} 1260}
1267 1261
1268 1262
@@ -1288,19 +1282,6 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
1288 return ns_clip_to_rect (f, &clip_rect, 1); 1282 return ns_clip_to_rect (f, &clip_rect, 1);
1289} 1283}
1290 1284
1291
1292static void
1293ns_flush_display (struct frame *f)
1294/* Force the frame to redisplay. If areas have previously been marked
1295 dirty by setNeedsDisplayInRect (in ns_clip_to_rect), then this will call
1296 draw_rect: which will "expose" those areas. */
1297{
1298 block_input ();
1299 [FRAME_NS_VIEW (f) displayIfNeeded];
1300 unblock_input ();
1301}
1302
1303
1304/* ========================================================================== 1285/* ==========================================================================
1305 1286
1306 Visible bell and beep. 1287 Visible bell and beep.
@@ -2837,6 +2818,8 @@ ns_clear_frame_area (struct frame *f, int x, int y, int width, int height)
2837static void 2818static void
2838ns_copy_bits (struct frame *f, NSRect src, NSRect dest) 2819ns_copy_bits (struct frame *f, NSRect src, NSRect dest)
2839{ 2820{
2821 NSSize delta = NSMakeSize (dest.origin.x - src.origin.x,
2822 dest.origin.y - src.origin.y)
2840 NSTRACE ("ns_copy_bits"); 2823 NSTRACE ("ns_copy_bits");
2841 2824
2842 if (FRAME_NS_VIEW (f)) 2825 if (FRAME_NS_VIEW (f))
@@ -2845,10 +2828,21 @@ ns_copy_bits (struct frame *f, NSRect src, NSRect dest)
2845 2828
2846 /* FIXME: scrollRect:by: is deprecated in macOS 10.14. There is 2829 /* FIXME: scrollRect:by: is deprecated in macOS 10.14. There is
2847 no obvious replacement so we may have to come up with our own. */ 2830 no obvious replacement so we may have to come up with our own. */
2848 [FRAME_NS_VIEW (f) scrollRect: src 2831 [FRAME_NS_VIEW (f) scrollRect: src by: delta];
2849 by: NSMakeSize (dest.origin.x - src.origin.x, 2832
2850 dest.origin.y - src.origin.y)]; 2833#ifdef NS_IMPL_COCOA
2851 [FRAME_NS_VIEW (f) setNeedsDisplay:YES]; 2834 /* As far as I can tell from the documentation, scrollRect:by:,
2835 above, should copy the dirty rectangles from our source
2836 rectangle to our destination, however it appears it clips the
2837 operation to src. As a result we need to use
2838 translateRectsNeedingDisplayInRect:by: below, and we have to
2839 union src and dest so it can pick up the dirty rectangles,
2840 and place them, as it also clips to the rectangle.
2841
2842 FIXME: We need a GNUstep equivalent. */
2843 [FRAME_NS_VIEW (f) translateRectsNeedingDisplayInRect:NSUnionRect (src, dest)
2844 by:delta];
2845#endif
2852 } 2846 }
2853} 2847}
2854 2848
@@ -3233,15 +3227,6 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row,
3233 else 3227 else
3234 [FRAME_CURSOR_COLOR (f) set]; 3228 [FRAME_CURSOR_COLOR (f) set];
3235 3229
3236#ifdef NS_IMPL_COCOA
3237 /* TODO: This makes drawing of cursor plus that of phys_cursor_glyph
3238 atomic. Cleaner ways of doing this should be investigated.
3239 One way would be to set a global variable DRAWING_CURSOR
3240 when making the call to draw_phys..(), don't focus in that
3241 case, then move the ns_reset_clipping() here after that call. */
3242 NSDisableScreenUpdates ();
3243#endif
3244
3245 switch (cursor_type) 3230 switch (cursor_type)
3246 { 3231 {
3247 case DEFAULT_CURSOR: 3232 case DEFAULT_CURSOR:
@@ -3275,10 +3260,6 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row,
3275 /* draw the character under the cursor */ 3260 /* draw the character under the cursor */
3276 if (cursor_type != NO_CURSOR) 3261 if (cursor_type != NO_CURSOR)
3277 draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR); 3262 draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR);
3278
3279#ifdef NS_IMPL_COCOA
3280 NSEnableScreenUpdates ();
3281#endif
3282 } 3263 }
3283} 3264}
3284 3265
@@ -5119,7 +5100,7 @@ static struct redisplay_interface ns_redisplay_interface =
5119 ns_after_update_window_line, 5100 ns_after_update_window_line,
5120 ns_update_window_begin, 5101 ns_update_window_begin,
5121 ns_update_window_end, 5102 ns_update_window_end,
5122 ns_flush_display, /* flush_display */ 5103 0, /* flush_display */
5123 x_clear_window_mouse_face, 5104 x_clear_window_mouse_face,
5124 x_get_glyph_overhangs, 5105 x_get_glyph_overhangs,
5125 x_fix_overlapping_area, 5106 x_fix_overlapping_area,
@@ -7114,7 +7095,6 @@ not_in_argv (NSString *arg)
7114 size_title = xmalloc (strlen (old_title) + 40); 7095 size_title = xmalloc (strlen (old_title) + 40);
7115 esprintf (size_title, "%s — (%d x %d)", old_title, cols, rows); 7096 esprintf (size_title, "%s — (%d x %d)", old_title, cols, rows);
7116 [window setTitle: [NSString stringWithUTF8String: size_title]]; 7097 [window setTitle: [NSString stringWithUTF8String: size_title]];
7117 [window display];
7118 xfree (size_title); 7098 xfree (size_title);
7119 } 7099 }
7120 } 7100 }
@@ -8164,8 +8144,8 @@ not_in_argv (NSString *arg)
8164 8144
8165- (void)drawRect: (NSRect)rect 8145- (void)drawRect: (NSRect)rect
8166{ 8146{
8167 int x = NSMinX (rect), y = NSMinY (rect); 8147 const NSRect *rectList;
8168 int width = NSWidth (rect), height = NSHeight (rect); 8148 NSInteger numRects;
8169 8149
8170 NSTRACE ("[EmacsView drawRect:" NSTRACE_FMT_RECT "]", 8150 NSTRACE ("[EmacsView drawRect:" NSTRACE_FMT_RECT "]",
8171 NSTRACE_ARG_RECT(rect)); 8151 NSTRACE_ARG_RECT(rect));
@@ -8173,9 +8153,23 @@ not_in_argv (NSString *arg)
8173 if (!emacsframe || !emacsframe->output_data.ns) 8153 if (!emacsframe || !emacsframe->output_data.ns)
8174 return; 8154 return;
8175 8155
8176 ns_clear_frame_area (emacsframe, x, y, width, height);
8177 block_input (); 8156 block_input ();
8178 expose_frame (emacsframe, x, y, width, height); 8157
8158 /* Get only the precise dirty rectangles to avoid redrawing
8159 potentially large areas of the frame that haven't changed.
8160
8161 I'm not sure this actually provides much of a performance benefit
8162 as it's hard to benchmark, but it certainly doesn't seem to
8163 hurt. */
8164 [self getRectsBeingDrawn:&rectList count:&numRects];
8165 for (int i = 0 ; i < numRects ; i++)
8166 {
8167 NSRect r = rectList[i];
8168 expose_frame (emacsframe,
8169 NSMinX (r), NSMinY (r),
8170 NSWidth (r), NSHeight (r));
8171 }
8172
8179 unblock_input (); 8173 unblock_input ();
8180 8174
8181 /* 8175 /*