Merge from emacs-24 branch

This commit is contained in:
Chong Yidong 2012-04-20 16:48:50 +08:00
commit c07a4c0b59
35 changed files with 1135 additions and 734 deletions

View file

@ -1,3 +1,11 @@
2012-04-20 Ludovic Courtès <ludo@gnu.org>
* configure.in: Don't use the -R option (Bug#11251).
2012-04-20 Teodor Zlatanov <tzz@lifelogs.com>
* info/dir, Makefile.in (INFO_FILES): Add emacs-gnutls.
2012-04-18 Paul Eggert <eggert@cs.ucla.edu> 2012-04-18 Paul Eggert <eggert@cs.ucla.edu>
configure: new option --enable-gcc-warnings (Bug#11207) configure: new option --enable-gcc-warnings (Bug#11207)

View file

@ -53,12 +53,17 @@ pt-br Rodrigo Real
ru Alex Ott ru Alex Ott
sk Miroslav Vaško sk Miroslav Vaško
** For a major release, add a "New in Emacs XX" section to faq.texi.
** Remove temporary +++/--- lines in NEWS. ** Remove temporary +++/--- lines in NEWS.
** Try to reorder NEWS: most important things first, related items together. ** Try to reorder NEWS: most important things first, related items together.
** Consider bumping customize-changed-options-previous-release. ** Consider bumping customize-changed-options-previous-release.
** cusver-check from admin.el cam help find new defcustoms missing
:version tags.
* BUGS * BUGS
** Check for modes which bind M-s that conflicts with a new global binding M-s ** Check for modes which bind M-s that conflicts with a new global binding M-s
@ -206,7 +211,7 @@ loading.texi cyd
macros.texi cyd macros.texi cyd
maps.texi rgm maps.texi rgm
markers.texi rgm markers.texi rgm
minibuf.texi minibuf.texi rgm
modes.texi cyd modes.texi cyd
nonascii.texi cyd nonascii.texi cyd
numbers.texi cyd numbers.texi cyd
@ -214,7 +219,7 @@ objects.texi cyd
os.texi cyd os.texi cyd
package.texi rgm package.texi rgm
positions.texi cyd positions.texi cyd
processes.texi processes.texi rgm
searching.texi rgm searching.texi rgm
sequences.texi cyd sequences.texi cyd
streams.texi cyd streams.texi cyd

2
autogen/configure vendored
View file

@ -22866,7 +22866,7 @@ case "$opsys" in
## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM
## had different values in configure (in ac_link) and src/Makefile.in. ## had different values in configure (in ac_link) and src/Makefile.in.
## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS.
gnu-linux) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX)" ;; gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX_RPATH)" ;;
*) LD_SWITCH_SYSTEM_TEMACS= ;; *) LD_SWITCH_SYSTEM_TEMACS= ;;
esac esac

View file

@ -3510,7 +3510,7 @@ case "$opsys" in
## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM
## had different values in configure (in ac_link) and src/Makefile.in. ## had different values in configure (in ac_link) and src/Makefile.in.
## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS.
gnu-linux) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX)" ;; gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX_RPATH)" ;;
*) LD_SWITCH_SYSTEM_TEMACS= ;; *) LD_SWITCH_SYSTEM_TEMACS= ;;
esac esac

View file

@ -1,3 +1,75 @@
2012-04-20 Chong Yidong <cyd@gnu.org>
* processes.texi (Asynchronous Processes): Mention nil argument to
start-process.
2012-04-20 Glenn Morris <rgm@gnu.org>
* minibuf.texi (Basic Completion): No need to describe obarrays here.
Don't mention obsolete `nospace' argument of all-completions.
(Minibuffer Completion, Completion Commands, Reading File Names)
(Completion Variables): Copyedits.
(Completion Commands): Mention parent keymaps.
Remove obsolete minibuffer-local-filename-must-match-map.
(High-Level Completion): Remove read-variable's almost
word-for-word duplication of read-command.
* elisp.texi, vol1.texi, vol2.texi, minibuf.texi (Completion):
Update "High-Level Completion" description.
2012-04-19 Glenn Morris <rgm@gnu.org>
* minibuf.texi (Minibuffers):
* elisp.texi, vol1.texi, vol2.texi: Fix minibuffer subsection order.
* minibuf.texi: Standardize metasyntactic variables ("history", etc).
Use Texinfo-recommended form of quote+punctuation.
(Intro to Minibuffers): First minibuffer is #1, not #0.
Mention minibuffer-inactive-mode.
(Text from Minibuffer): Copyedits.
(Minibuffer History, Programmed Completion): Fix @var usage.
(Object from Minibuffer): Remove overly pedantic para.
(Minibuffer History): Copyedits. Add face-name-history.
(Initial Input, Yes-or-No Queries, Multiple Queries)
(Minibuffer Windows, Minibuffer Misc): Copyedits.
(Yes-or-No Queries): Tweak example.
(Minibuffer Commands): Add next-complete-history-element.
(Minibuffer Misc): Mention minibuffer-message-timeout, and
minibuffer-inactive-mode.
2012-04-18 Glenn Morris <rgm@gnu.org>
* processes.texi (Serial Ports, Byte Packing, Bindat Spec)
(Bindat Functions): Copyedits.
2012-04-18 Christopher Schmidt <christopher@ch.ristopher.com>
* files.texi (Saving Buffers): Document `visit and `visit-save'
values of require-final-newline.
2012-04-18 Glenn Morris <rgm@gnu.org>
* processes.texi (Output from Processes, Filter Functions):
Mention waiting-for-user-input-p.
(Sentinels, Query Before Exit, System Processes, Transaction Queues):
(Network Servers, Datagrams, Network Processes, Network Options)
(Network Feature Testing, Serial Ports): Copyedits.
(Network): Add encrypted network overview paragraph.
Cross-reference the Emacs-GnuTLS manual. Use @acronym.
2012-04-17 Chong Yidong <cyd@gnu.org>
* help.texi (Keys in Documentation): Mention :advertised-binding.
* keymaps.texi (Menu Bar): Move most of the :advertised-binding
description to help.texi.
2012-04-16 Glenn Morris <rgm@gnu.org>
* processes.texi (Process Information, Input to Processes)
(Signals to Processes, Output from Processes, Process Buffers)
(Filter Functions, Decoding Output): Copyedits.
(Accepting Output): Discourage use of `millisec' argument.
2012-04-15 Glenn Morris <rgm@gnu.org> 2012-04-15 Glenn Morris <rgm@gnu.org>
* processes.texi (Processes, Subprocess Creation, Shell Arguments): * processes.texi (Processes, Subprocess Creation, Shell Arguments):

View file

@ -637,8 +637,8 @@ Minibuffers
* Multiple Queries:: Asking a series of similar questions. * Multiple Queries:: Asking a series of similar questions.
* Reading a Password:: Reading a password from the terminal. * Reading a Password:: Reading a password from the terminal.
* Minibuffer Commands:: Commands used as key bindings in minibuffers. * Minibuffer Commands:: Commands used as key bindings in minibuffers.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Minibuffer Windows:: Operating on the special minibuffer windows. * Minibuffer Windows:: Operating on the special minibuffer windows.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Recursive Mini:: Whether recursive entry to minibuffer is allowed.
* Minibuffer Misc:: Various customization hooks and variables. * Minibuffer Misc:: Various customization hooks and variables.
@ -648,7 +648,7 @@ Completion
* Minibuffer Completion:: Invoking the minibuffer with completion. * Minibuffer Completion:: Invoking the minibuffer with completion.
* Completion Commands:: Minibuffer commands that do completion. * Completion Commands:: Minibuffer commands that do completion.
* High-Level Completion:: Convenient special cases of completion * High-Level Completion:: Convenient special cases of completion
(reading buffer name, file name, etc.). (reading buffer names, variable names, etc.).
* Reading File Names:: Using completion to read file names and * Reading File Names:: Using completion to read file names and
shell commands. shell commands.
* Completion Variables:: Variables controlling completion behavior. * Completion Variables:: Variables controlling completion behavior.

View file

@ -489,11 +489,13 @@ in particular buffers.
@defopt require-final-newline @defopt require-final-newline
This variable determines whether files may be written out that do This variable determines whether files may be written out that do
@emph{not} end with a newline. If the value of the variable is @emph{not} end with a newline. If the value of the variable is
@code{t}, then @code{save-buffer} silently adds a newline at the end of @code{t}, then @code{save-buffer} silently adds a newline at the end
the file whenever the buffer being saved does not already end in one. of the buffer whenever it does not already end in one. If the value
If the value of the variable is non-@code{nil}, but not @code{t}, then is @code{visit}, Emacs adds a missing newline just after it visits the
@code{save-buffer} asks the user whether to add a newline each time the file. If the value is @code{visit-save}, Emacs adds a missing newline
case arises. both on visiting and on saving. For any other non-@code{nil} value,
@code{save-buffer} asks the user whether to add a newline each time
the case arises.
If the value of the variable is @code{nil}, then @code{save-buffer} If the value of the variable is @code{nil}, then @code{save-buffer}
doesn't add newlines at all. @code{nil} is the default value, but a few doesn't add newlines at all. @code{nil} is the default value, but a few

View file

@ -347,6 +347,21 @@ This function scans @var{string} for the above special sequences and
replaces them by what they stand for, returning the result as a string. replaces them by what they stand for, returning the result as a string.
This permits display of documentation that refers accurately to the This permits display of documentation that refers accurately to the
user's own customized key bindings. user's own customized key bindings.
@cindex advertised binding
If a command has multiple bindings, this function normally uses the
first one it finds. You can specify one particular key binding by
assigning an @code{:advertised-binding} symbol property to the
command, like this:
@smallexample
(put 'undo :advertised-binding [?\C-/])
@end smallexample
@noindent
The @code{:advertised-binding} property also affects the binding shown
in menu items (@pxref{Menu Bar}). The property is ignored if it
specifies a key binding that the command does not actually have.
@end defun @end defun
Here are examples of the special sequences: Here are examples of the special sequences:

View file

@ -2548,17 +2548,8 @@ the same command (if such a key binding exists). This serves as a
convenient hint for users who do not know the key binding. If a convenient hint for users who do not know the key binding. If a
command has multiple bindings, Emacs normally displays the first one command has multiple bindings, Emacs normally displays the first one
it finds. You can specify one particular key binding by assigning an it finds. You can specify one particular key binding by assigning an
@code{:advertised-binding} symbol property to the command. For @code{:advertised-binding} symbol property to the command. @xref{Keys
instance, the following tells Emacs to show @kbd{C-/} for the in Documentation}.
@code{undo} menu item:
@smallexample
(put 'undo :advertised-binding [?\C-/])
@end smallexample
@noindent
If the @code{:advertised-binding} property specifies a key binding
that the command does not actually have, it is ignored.
@node Tool Bar @node Tool Bar
@subsection Tool bars @subsection Tool bars

View file

@ -29,8 +29,8 @@ argument.
* Multiple Queries:: Asking a series of similar questions. * Multiple Queries:: Asking a series of similar questions.
* Reading a Password:: Reading a password from the terminal. * Reading a Password:: Reading a password from the terminal.
* Minibuffer Commands:: Commands used as key bindings in minibuffers. * Minibuffer Commands:: Commands used as key bindings in minibuffers.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Minibuffer Windows:: Operating on the special minibuffer windows. * Minibuffer Windows:: Operating on the special minibuffer windows.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Recursive Mini:: Whether recursive entry to minibuffer is allowed.
* Minibuffer Misc:: Various customization hooks and variables. * Minibuffer Misc:: Various customization hooks and variables.
@end menu @end menu
@ -59,8 +59,10 @@ boundary between the prompt and the actual text.
The minibuffer's window is normally a single line; it grows The minibuffer's window is normally a single line; it grows
automatically if the contents require more space. You can explicitly automatically if the contents require more space. You can explicitly
@c FIXME? Works in 23.4, not 24.0.95. (Bug#11276)
resize it temporarily with the window sizing commands; it reverts to resize it temporarily with the window sizing commands; it reverts to
its normal size when the minibuffer is exited. You can resize it its normal size when the minibuffer is exited. You can resize it
@c FIXME? Doesn't work in any version of Emacs?
permanently by using the window sizing commands in the frame's other permanently by using the window sizing commands in the frame's other
window, when the minibuffer is not active. If the frame contains just window, when the minibuffer is not active. If the frame contains just
a minibuffer, you can change the minibuffer's size by changing the a minibuffer, you can change the minibuffer's size by changing the
@ -72,9 +74,9 @@ of variables such as @code{this-command} and @code{last-command}
code that uses the minibuffer, if you do not want that to change them. code that uses the minibuffer, if you do not want that to change them.
Under some circumstances, a command can use a minibuffer even if Under some circumstances, a command can use a minibuffer even if
there is an active minibuffer; such minibuffers are called a there is an active minibuffer; such a minibuffer is called a
@dfn{recursive minibuffer}. The first minibuffer is named @dfn{recursive minibuffer}. The first minibuffer is named
@w{@samp{ *Minibuf-0*}}. Recursive minibuffers are named by @w{@samp{ *Minibuf-1*}}. Recursive minibuffers are named by
incrementing the number at the end of the name. (The names begin with incrementing the number at the end of the name. (The names begin with
a space so that they won't show up in normal buffer lists.) Of a space so that they won't show up in normal buffer lists.) Of
several recursive minibuffers, the innermost (or most recently several recursive minibuffers, the innermost (or most recently
@ -90,6 +92,12 @@ to be done. @xref{Text from Minibuffer}, for the non-completion
minibuffer local maps. @xref{Completion Commands}, for the minibuffer minibuffer local maps. @xref{Completion Commands}, for the minibuffer
local maps for completion. local maps for completion.
@cindex inactive minibuffer
When a minibuffer is inactive, its major mode is
@code{minibuffer-inactive-mode}, with keymap
@code{minibuffer-inactive-mode-map}. This is only really useful if
the minibuffer is in a separate frame. @xref{Minibuffers and Frames}.
When Emacs is running in batch mode, any request to read from the When Emacs is running in batch mode, any request to read from the
minibuffer actually reads a line from the standard input descriptor that minibuffer actually reads a line from the standard input descriptor that
was supplied when Emacs was started. was supplied when Emacs was started.
@ -110,7 +118,7 @@ middle of a Lisp function. Instead, do all minibuffer input as part of
reading the arguments for a command, in the @code{interactive} reading the arguments for a command, in the @code{interactive}
specification. @xref{Defining Commands}. specification. @xref{Defining Commands}.
@defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist default inherit-input-method @defun read-from-minibuffer prompt &optional initial keymap read history default inherit-input-method
This function is the most general way to get input from the This function is the most general way to get input from the
minibuffer. By default, it accepts arbitrary text and returns it as a minibuffer. By default, it accepts arbitrary text and returns it as a
string; however, if @var{read} is non-@code{nil}, then it uses string; however, if @var{read} is non-@code{nil}, then it uses
@ -118,8 +126,8 @@ string; however, if @var{read} is non-@code{nil}, then it uses
Functions}). Functions}).
The first thing this function does is to activate a minibuffer and The first thing this function does is to activate a minibuffer and
display it with @var{prompt-string} as the prompt. This value must be a display it with @var{prompt} (which must be a string) as the
string. Then the user can edit text in the minibuffer. prompt. Then the user can edit text in the minibuffer.
When the user types a command to exit the minibuffer, When the user types a command to exit the minibuffer,
@code{read-from-minibuffer} constructs the return value from the text in @code{read-from-minibuffer} constructs the return value from the text in
@ -131,7 +139,7 @@ reads the text and returns the resulting Lisp object, unevaluated.
The argument @var{default} specifies default values to make available The argument @var{default} specifies default values to make available
through the history commands. It should be a string, a list of through the history commands. It should be a string, a list of
strings, or @code{nil}. The string or strings become the minibuffer's strings, or @code{nil}. The string or strings become the minibuffer's
``future history,'' available to the user with @kbd{M-n}. ``future history'', available to the user with @kbd{M-n}.
If @var{read} is non-@code{nil}, then @var{default} is also used If @var{read} is non-@code{nil}, then @var{default} is also used
as the input to @code{read}, if the user enters empty input. as the input to @code{read}, if the user enters empty input.
@ -148,12 +156,13 @@ value of @code{minibuffer-local-map} is used as the keymap. Specifying
a keymap is the most important way to customize the minibuffer for a keymap is the most important way to customize the minibuffer for
various applications such as completion. various applications such as completion.
The argument @var{hist} specifies which history list variable to use The argument @var{history} specifies a history list variable to use
for saving the input and for history commands used in the minibuffer. for saving the input and for history commands used in the minibuffer.
It defaults to @code{minibuffer-history}. @xref{Minibuffer History}. It defaults to @code{minibuffer-history}. You can optionally specify
a starting position in the history list as well. @xref{Minibuffer History}.
If the variable @code{minibuffer-allow-text-properties} is If the variable @code{minibuffer-allow-text-properties} is
non-@code{nil}, then the string which is returned includes whatever text non-@code{nil}, then the string that is returned includes whatever text
properties were present in the minibuffer. Otherwise all the text properties were present in the minibuffer. Otherwise all the text
properties are stripped when the value is returned. properties are stripped when the value is returned.
@ -163,9 +172,9 @@ the setting of @code{enable-multibyte-characters} (@pxref{Text
Representations}) from whichever buffer was current before entering the Representations}) from whichever buffer was current before entering the
minibuffer. minibuffer.
Use of @var{initial-contents} is mostly deprecated; we recommend using Use of @var{initial} is mostly deprecated; we recommend using
a non-@code{nil} value only in conjunction with specifying a cons cell a non-@code{nil} value only in conjunction with specifying a cons cell
for @var{hist}. @xref{Initial Input}. for @var{history}. @xref{Initial Input}.
@end defun @end defun
@defun read-string prompt &optional initial history default inherit-input-method @defun read-string prompt &optional initial history default inherit-input-method
@ -178,11 +187,11 @@ The optional argument @var{default} is used as in
@code{read-from-minibuffer}, except that, if non-@code{nil}, it also @code{read-from-minibuffer}, except that, if non-@code{nil}, it also
specifies a default value to return if the user enters null input. As specifies a default value to return if the user enters null input. As
in @code{read-from-minibuffer} it should be a string, a list of in @code{read-from-minibuffer} it should be a string, a list of
strings, or @code{nil} which is equivalent to an empty string. When strings, or @code{nil}, which is equivalent to an empty string. When
@var{default} is a string, that string is the default value. When it @var{default} is a string, that string is the default value. When it
is a list of strings, the first string is the default value. (All is a list of strings, the first string is the default value. (All
these strings are available to the user in the ``future minibuffer these strings are available to the user in the ``future minibuffer
history.'') history''.)
This function works by calling the This function works by calling the
@code{read-from-minibuffer} function: @code{read-from-minibuffer} function:
@ -201,16 +210,16 @@ This function works by calling the
@end smallexample @end smallexample
@end defun @end defun
@defun read-regexp prompt &optional default-value @defun read-regexp prompt &optional default
This function reads a regular expression as a string from the This function reads a regular expression as a string from the
minibuffer and returns it. The argument @var{prompt} is used as in minibuffer and returns it. The argument @var{prompt} is used as in
@code{read-from-minibuffer}. The keymap used is @code{read-from-minibuffer}. The keymap used is
@code{minibuffer-local-map}, and @code{regexp-history} is used as the @code{minibuffer-local-map}, and @code{regexp-history} is used as the
history list (@pxref{Minibuffer History, regexp-history}). history list (@pxref{Minibuffer History, regexp-history}).
The optional argument @var{default-value} specifies a default value to The optional argument @var{default} specifies a default value to
return if the user enters null input; it should be a string, or return if the user enters null input; it should be a string, or
@code{nil} which is equivalent to an empty string. @code{nil}, which is equivalent to an empty string.
In addition, @code{read-regexp} collects a few useful candidates for In addition, @code{read-regexp} collects a few useful candidates for
input and passes them to @code{read-from-minibuffer}, to make them input and passes them to @code{read-from-minibuffer}, to make them
@ -234,9 +243,9 @@ function, after computing the list of defaults as described above.
@end defun @end defun
@defvar minibuffer-allow-text-properties @defvar minibuffer-allow-text-properties
If this variable is @code{nil}, then @code{read-from-minibuffer} strips If this variable is @code{nil}, then @code{read-from-minibuffer}
all text properties from the minibuffer input before returning it. and @code{read-string} strip all text properties from the minibuffer
This variable also affects @code{read-string}. However, input before returning it. However,
@code{read-no-blanks-input} (see below), as well as @code{read-no-blanks-input} (see below), as well as
@code{read-minibuffer} and related functions (@pxref{Object from @code{read-minibuffer} and related functions (@pxref{Object from
Minibuffer,, Reading Lisp Objects With the Minibuffer}), and all Minibuffer,, Reading Lisp Objects With the Minibuffer}), and all
@ -274,6 +283,12 @@ default, it makes the following bindings:
@item @kbd{M-r} @item @kbd{M-r}
@code{previous-matching-history-element} @code{previous-matching-history-element}
@ignore
@c Does not seem worth/appropriate mentioning.
@item @kbd{C-@key{TAB}}
@code{file-cache-minibuffer-complete}
@end ignore
@end table @end table
@end defvar @end defvar
@ -304,6 +319,8 @@ This function discards text properties, regardless of the value of
@end smallexample @end smallexample
@end defun @end defun
@c Slightly unfortunate name, suggesting it might be related to the
@c Nextstep port...
@defvar minibuffer-local-ns-map @defvar minibuffer-local-ns-map
This built-in variable is the keymap used as the minibuffer local keymap This built-in variable is the keymap used as the minibuffer local keymap
in the function @code{read-no-blanks-input}. By default, it makes the in the function @code{read-no-blanks-input}. By default, it makes the
@ -388,23 +405,16 @@ This function simply evaluates the result of a call to
@end defun @end defun
@defun edit-and-eval-command prompt form @defun edit-and-eval-command prompt form
This function reads a Lisp expression in the minibuffer, and then This function reads a Lisp expression in the minibuffer, evaluates it,
evaluates it. The difference between this command and then returns the result. The difference between this command and
@code{eval-minibuffer} is that here the initial @var{form} is not @code{eval-minibuffer} is that here the initial @var{form} is not
optional and it is treated as a Lisp object to be converted to printed optional and it is treated as a Lisp object to be converted to printed
representation rather than as a string of text. It is printed with representation rather than as a string of text. It is printed with
@code{prin1}, so if it is a string, double-quote characters (@samp{"}) @code{prin1}, so if it is a string, double-quote characters (@samp{"})
appear in the initial text. @xref{Output Functions}. appear in the initial text. @xref{Output Functions}.
The first thing @code{edit-and-eval-command} does is to activate the
minibuffer with @var{prompt} as the prompt. Then it inserts the printed
representation of @var{form} in the minibuffer, and lets the user edit it.
When the user exits the minibuffer, the edited text is read with
@code{read} and then evaluated. The resulting value becomes the value
of @code{edit-and-eval-command}.
In the following example, we offer the user an expression with initial In the following example, we offer the user an expression with initial
text which is a valid form already: text that is already a valid form:
@smallexample @smallexample
@group @group
@ -424,7 +434,6 @@ Please edit: (forward-word 1)@point{}
@noindent @noindent
Typing @key{RET} right away would exit the minibuffer and evaluate the Typing @key{RET} right away would exit the minibuffer and evaluate the
expression, thus moving point forward one word. expression, thus moving point forward one word.
@code{edit-and-eval-command} returns @code{nil} in this example.
@end defun @end defun
@node Minibuffer History @node Minibuffer History
@ -440,7 +449,7 @@ is a list of strings (previous inputs), most recent first.
kinds of inputs. It's the Lisp programmer's job to specify the right kinds of inputs. It's the Lisp programmer's job to specify the right
history list for each use of the minibuffer. history list for each use of the minibuffer.
You specify a minibuffer history list with the optional @var{hist} You specify a minibuffer history list with the optional @var{history}
argument to @code{read-from-minibuffer} or @code{completing-read}. argument to @code{read-from-minibuffer} or @code{completing-read}.
Here are the possible values for it: Here are the possible values for it:
@ -456,7 +465,7 @@ Specifying 0 for @var{startpos} is equivalent to just specifying the
symbol @var{variable}. @code{previous-history-element} will display symbol @var{variable}. @code{previous-history-element} will display
the most recent element of the history list in the minibuffer. If you the most recent element of the history list in the minibuffer. If you
specify a positive @var{startpos}, the minibuffer history functions specify a positive @var{startpos}, the minibuffer history functions
behave as if @code{(elt @var{variable} (1- @var{STARTPOS}))} were the behave as if @code{(elt @var{variable} (1- @var{startpos}))} were the
history element currently shown in the minibuffer. history element currently shown in the minibuffer.
For consistency, you should also specify that element of the history For consistency, you should also specify that element of the history
@ -464,7 +473,7 @@ as the initial minibuffer contents, using the @var{initial} argument
to the minibuffer input function (@pxref{Initial Input}). to the minibuffer input function (@pxref{Initial Input}).
@end table @end table
If you don't specify @var{hist}, then the default history list If you don't specify @var{history}, then the default history list
@code{minibuffer-history} is used. For other standard history lists, @code{minibuffer-history} is used. For other standard history lists,
see below. You can also create your own history list variable; just see below. You can also create your own history list variable; just
initialize it to @code{nil} before the first use. initialize it to @code{nil} before the first use.
@ -503,15 +512,15 @@ If the value of this variable is @code{nil}, standard functions that
read from the minibuffer don't add new elements to the history list. read from the minibuffer don't add new elements to the history list.
This lets Lisp programs explicitly manage input history by using This lets Lisp programs explicitly manage input history by using
@code{add-to-history}. By default, @code{history-add-new-input} is @code{add-to-history}. By default, @code{history-add-new-input} is
set to a non-@code{nil} value. non-@code{nil}.
@end defvar @end defvar
@defopt history-length @defopt history-length
The value of this variable specifies the maximum length for all The value of this variable specifies the maximum length for all
history lists that don't specify their own maximum lengths. If the history lists that don't specify their own maximum lengths. If the
value is @code{t}, that means there is no maximum (don't delete old value is @code{t}, that means there is no maximum (don't delete old
elements). The value of @code{history-length} property of the history elements). If a history list variable's symbol has a non-@code{nil}
list variable's symbol, if set, overrides this variable for that @code{history-length} property, it overrides this variable for that
particular history list. particular history list.
@end defopt @end defopt
@ -555,11 +564,19 @@ A history list for arguments that are shell commands.
A history list for arguments that are Lisp expressions to evaluate. A history list for arguments that are Lisp expressions to evaluate.
@end defvar @end defvar
@defvar face-name-history
A history list for arguments that are faces.
@end defvar
@c Less common: coding-system-history, input-method-history,
@c command-history, grep-history, grep-find-history,
@c read-envvar-name-history, setenv-history, yes-or-no-p-history.
@node Initial Input @node Initial Input
@section Initial Input @section Initial Input
Several of the functions for minibuffer input have an argument called Several of the functions for minibuffer input have an argument called
@var{initial} or @var{initial-contents}. This is a mostly-deprecated @var{initial}. This is a mostly-deprecated
feature for specifying that the minibuffer should start out with feature for specifying that the minibuffer should start out with
certain text, instead of empty as usual. certain text, instead of empty as usual.
@ -576,7 +593,7 @@ to offer useful default inputs to the user.
There is just one situation where you should specify a string for an There is just one situation where you should specify a string for an
@var{initial} argument. This is when you specify a cons cell for the @var{initial} argument. This is when you specify a cons cell for the
@var{hist} or @var{history} argument. @xref{Minibuffer History}. @var{history} argument. @xref{Minibuffer History}.
@var{initial} can also be a cons cell of the form @code{(@var{string} @var{initial} can also be a cons cell of the form @code{(@var{string}
. @var{position})}. This means to insert @var{string} in the . @var{position})}. This means to insert @var{string} in the
@ -588,11 +605,10 @@ inconsistently in different functions. In @code{completing-read},
of 0 means the beginning of the string, 1 means after the first of 0 means the beginning of the string, 1 means after the first
character, etc. In @code{read-minibuffer}, and the other character, etc. In @code{read-minibuffer}, and the other
non-completion minibuffer input functions that support this argument, non-completion minibuffer input functions that support this argument,
1 means the beginning of the string 2 means after the first character, 1 means the beginning of the string, 2 means after the first character,
etc. etc.
Use of a cons cell as the value for @var{initial} arguments is Use of a cons cell as the value for @var{initial} arguments is deprecated.
deprecated in user code.
@node Completion @node Completion
@section Completion @section Completion
@ -603,6 +619,7 @@ starting from an abbreviation for it. Completion works by comparing the
user's input against a list of valid names and determining how much of user's input against a list of valid names and determining how much of
the name is determined uniquely by what the user has typed. For the name is determined uniquely by what the user has typed. For
example, when you type @kbd{C-x b} (@code{switch-to-buffer}) and then example, when you type @kbd{C-x b} (@code{switch-to-buffer}) and then
@c "This is the sort of English up with which I will not put."
type the first few letters of the name of the buffer to which you wish type the first few letters of the name of the buffer to which you wish
to switch, and then type @key{TAB} (@code{minibuffer-complete}), Emacs to switch, and then type @key{TAB} (@code{minibuffer-complete}), Emacs
extends the name as far as it can. extends the name as far as it can.
@ -627,7 +644,7 @@ for reading certain kinds of names with completion.
* Minibuffer Completion:: Invoking the minibuffer with completion. * Minibuffer Completion:: Invoking the minibuffer with completion.
* Completion Commands:: Minibuffer commands that do completion. * Completion Commands:: Minibuffer commands that do completion.
* High-Level Completion:: Convenient special cases of completion * High-Level Completion:: Convenient special cases of completion
(reading buffer name, file name, etc.). (reading buffer names, variable names, etc.).
* Reading File Names:: Using completion to read file names and * Reading File Names:: Using completion to read file names and
shell commands. shell commands.
* Completion Variables:: Variables controlling completion behavior. * Completion Variables:: Variables controlling completion behavior.
@ -662,20 +679,14 @@ If @var{collection} is an alist (@pxref{Association Lists}), the
permissible completions are the elements of the alist that are either permissible completions are the elements of the alist that are either
strings, or conses whose @sc{car} is a string or symbol. strings, or conses whose @sc{car} is a string or symbol.
Symbols are converted to strings using @code{symbol-name}. Other Symbols are converted to strings using @code{symbol-name}. Other
elements of the alist are ignored. (Remember that in Emacs Lisp, the elements of the alist are ignored. (Remember that in Emacs Lisp, the
elements of alists do not @emph{have} to be conses.) In particular, a elements of alists do not @emph{have} to be conses.) In particular, a
list of strings is allowed, even though we usually do not list of strings is allowed, even though we usually do not
think of such lists as alists. think of such lists as alists.
@cindex obarray in completion @cindex obarray in completion
If @var{collection} is an obarray (@pxref{Creating Symbols}), the names If @var{collection} is an obarray (@pxref{Creating Symbols}), the names
of all symbols in the obarray form the set of permissible completions. The of all symbols in the obarray form the set of permissible completions.
global variable @code{obarray} holds an obarray containing the names of
all interned Lisp symbols.
Note that the only valid way to make a new obarray is to create it
empty and then add symbols to it one by one using @code{intern}.
Also, you cannot intern a given symbol in more than one obarray.
If @var{collection} is a hash table, then the keys that are strings If @var{collection} is a hash table, then the keys that are strings
are the possible completions. Other keys are ignored. are the possible completions. Other keys are ignored.
@ -756,16 +767,20 @@ too short). Both of those begin with the string @samp{foobar}.
@end smallexample @end smallexample
@end defun @end defun
@defun all-completions string collection &optional predicate nospace @c Removed obsolete argument nospace.
@defun all-completions string collection &optional predicate
This function returns a list of all possible completions of This function returns a list of all possible completions of
@var{string}. The arguments to this function (aside from @var{string}. The arguments to this function
@var{nospace}) are the same as those of @code{try-completion}. Also, @c (aside from @var{nospace})
this function uses @code{completion-regexp-list} in the same way that are the same as those of @code{try-completion}, and it
uses @code{completion-regexp-list} in the same way that
@code{try-completion} does. @code{try-completion} does.
@ignore
The optional argument @var{nospace} is obsolete. If it is The optional argument @var{nospace} is obsolete. If it is
non-@code{nil}, completions that start with a space are ignored unless non-@code{nil}, completions that start with a space are ignored unless
@var{string} starts with a space. @var{string} starts with a space.
@end ignore
If @var{collection} is a function, it is called with three arguments: If @var{collection} is a function, it is called with three arguments:
@var{string}, @var{predicate} and @code{t}; then @code{all-completions} @var{string}, @var{predicate} and @code{t}; then @code{all-completions}
@ -835,7 +850,7 @@ pertains to the area after @code{"/usr/"} and before @code{"/doc"}.
@end defun @end defun
If you store a completion alist in a variable, you should mark the If you store a completion alist in a variable, you should mark the
variable as ``risky'' with a non-@code{nil} variable as ``risky'' by giving it a non-@code{nil}
@code{risky-local-variable} property. @xref{File Local Variables}. @code{risky-local-variable} property. @xref{File Local Variables}.
@defvar completion-ignore-case @defvar completion-ignore-case
@ -864,7 +879,7 @@ proper value is done the first time you do completion using @var{var}.
It is done by calling @var{fun} with no arguments. The It is done by calling @var{fun} with no arguments. The
value @var{fun} returns becomes the permanent value of @var{var}. value @var{fun} returns becomes the permanent value of @var{var}.
Here is a usage example: Here is an example:
@smallexample @smallexample
(defvar foo (lazy-completion-table foo make-my-alist)) (defvar foo (lazy-completion-table foo make-my-alist))
@ -879,7 +894,7 @@ Here is a usage example:
This section describes the basic interface for reading from the This section describes the basic interface for reading from the
minibuffer with completion. minibuffer with completion.
@defun completing-read prompt collection &optional predicate require-match initial hist default inherit-input-method @defun completing-read prompt collection &optional predicate require-match initial history default inherit-input-method
This function reads a string in the minibuffer, assisting the user by This function reads a string in the minibuffer, assisting the user by
providing completion. It activates the minibuffer with prompt providing completion. It activates the minibuffer with prompt
@var{prompt}, which must be a string. @var{prompt}, which must be a string.
@ -934,13 +949,13 @@ The function @code{completing-read} uses
@code{minibuffer-local-must-match-map} if @var{require-match} is @code{minibuffer-local-must-match-map} if @var{require-match} is
non-@code{nil}. @xref{Completion Commands}. non-@code{nil}. @xref{Completion Commands}.
The argument @var{hist} specifies which history list variable to use for The argument @var{history} specifies which history list variable to use for
saving the input and for minibuffer history commands. It defaults to saving the input and for minibuffer history commands. It defaults to
@code{minibuffer-history}. @xref{Minibuffer History}. @code{minibuffer-history}. @xref{Minibuffer History}.
The argument @var{initial} is mostly deprecated; we recommend using a The argument @var{initial} is mostly deprecated; we recommend using a
non-@code{nil} value only in conjunction with specifying a cons cell non-@code{nil} value only in conjunction with specifying a cons cell
for @var{hist}. @xref{Initial Input}. For default input, use for @var{history}. @xref{Initial Input}. For default input, use
@var{default} instead. @var{default} instead.
If the argument @var{inherit-input-method} is non-@code{nil}, then the If the argument @var{inherit-input-method} is non-@code{nil}, then the
@ -949,7 +964,7 @@ Methods}) and the setting of @code{enable-multibyte-characters}
(@pxref{Text Representations}) from whichever buffer was current before (@pxref{Text Representations}) from whichever buffer was current before
entering the minibuffer. entering the minibuffer.
If the built-in variable @code{completion-ignore-case} is If the variable @code{completion-ignore-case} is
non-@code{nil}, completion ignores case when comparing the input non-@code{nil}, completion ignores case when comparing the input
against the possible matches. @xref{Basic Completion}. In this mode against the possible matches. @xref{Basic Completion}. In this mode
of operation, @var{predicate} must also ignore case, or you will get of operation, @var{predicate} must also ignore case, or you will get
@ -1082,8 +1097,8 @@ uses this to highlight text in the completion list for better visual
feedback. This is not needed in the minibuffer; for minibuffer feedback. This is not needed in the minibuffer; for minibuffer
completion, you can pass @code{nil}. completion, you can pass @code{nil}.
This function is called by @code{minibuffer-completion-help}. The This function is called by @code{minibuffer-completion-help}. A
most common way to use it is together with common way to use it is together with
@code{with-output-to-temp-buffer}, like this: @code{with-output-to-temp-buffer}, like this:
@example @example
@ -1117,7 +1132,7 @@ keymap makes the following bindings:
@end table @end table
@noindent @noindent
with other characters bound as in @code{minibuffer-local-map} and uses @code{minibuffer-local-map} as its parent keymap
(@pxref{Definition of minibuffer-local-map}). (@pxref{Definition of minibuffer-local-map}).
@end defvar @end defvar
@ -1129,15 +1144,6 @@ minibuffer unconditionally. By default, this keymap makes the following
bindings: bindings:
@table @asis @table @asis
@item @kbd{?}
@code{minibuffer-completion-help}
@item @key{SPC}
@code{minibuffer-complete-word}
@item @key{TAB}
@code{minibuffer-complete}
@item @kbd{C-j} @item @kbd{C-j}
@code{minibuffer-complete-and-exit} @code{minibuffer-complete-and-exit}
@ -1146,25 +1152,21 @@ bindings:
@end table @end table
@noindent @noindent
with other characters bound as in @code{minibuffer-local-map}. and uses @code{minibuffer-local-completion-map} as its parent keymap.
@end defvar @end defvar
@defvar minibuffer-local-filename-completion-map @defvar minibuffer-local-filename-completion-map
This is like @code{minibuffer-local-completion-map} This is a sparse keymap that simply unbinds @key{SPC}; because
except that it does not bind @key{SPC}. This keymap is used by the filenames can contain spaces. The function @code{read-file-name}
function @code{read-file-name}. combines this keymap with either @code{minibuffer-local-completion-map}
or @code{minibuffer-local-must-match-map}.
@end defvar @end defvar
@defvar minibuffer-local-filename-must-match-map
This is like @code{minibuffer-local-must-match-map}
except that it does not bind @key{SPC}. This keymap is used by the
function @code{read-file-name}.
@end defvar
@node High-Level Completion @node High-Level Completion
@subsection High-Level Completion Functions @subsection High-Level Completion Functions
This section describes the higher-level convenient functions for This section describes the higher-level convenience functions for
reading certain sorts of names with completion. reading certain sorts of names with completion.
In most cases, you should not call these functions in the middle of a In most cases, you should not call these functions in the middle of a
@ -1238,7 +1240,7 @@ for which @code{commandp} returns @code{t}. @xref{Interactive Call}.
The argument @var{default} specifies what to return if the user enters The argument @var{default} specifies what to return if the user enters
null input. It can be a symbol, a string or a list of strings. If it null input. It can be a symbol, a string or a list of strings. If it
is a string, @code{read-command} interns it before returning it. is a string, @code{read-command} interns it before returning it.
If it is a list, @code{read-command} returns the first element of this list. If it is a list, @code{read-command} interns the first element of this list.
If @var{default} is @code{nil}, that means no default has been If @var{default} is @code{nil}, that means no default has been
specified; then if the user enters null input, the return value is specified; then if the user enters null input, the return value is
@code{(intern "")}, that is, a symbol whose name is an empty string. @code{(intern "")}, that is, a symbol whose name is an empty string.
@ -1280,51 +1282,11 @@ complete in the set of extant Lisp symbols, and it uses the
@defun read-variable prompt &optional default @defun read-variable prompt &optional default
@anchor{Definition of read-variable} @anchor{Definition of read-variable}
This function reads the name of a user variable and returns it as a This function reads the name of a customizable variable and returns it
symbol. as a symbol. Its arguments have the same form as those of
@code{read-command}. It behaves just like @code{read-command}, except
The argument @var{default} specifies the default value to return if that it uses the predicate @code{custom-variable-p} instead of
the user enters null input. It can be a symbol, a string, or a list @code{commandp}.
of strings. If it is a string, @code{read-variable} interns it to
make the default value. If it is a list, @code{read-variable} interns
the first element. If @var{default} is @code{nil}, that means no
default has been specified; then if the user enters null input, the
return value is @code{(intern "")}.
@example
@group
(read-variable "Variable name? ")
;; @r{After evaluation of the preceding expression,}
;; @r{the following prompt appears,}
;; @r{with an empty minibuffer:}
@end group
@group
---------- Buffer: Minibuffer ----------
Variable name? @point{}
---------- Buffer: Minibuffer ----------
@end group
@end example
@noindent
If the user then types @kbd{fill-p @key{RET}}, @code{read-variable}
returns @code{fill-prefix}.
In general, @code{read-variable} is similar to @code{read-command},
but uses the predicate @code{custom-variable-p} instead of
@code{commandp}:
@cindex @code{custom-variable-p} example
@example
@group
(read-variable @var{prompt})
@equiv{}
(intern
(completing-read @var{prompt} obarray
'custom-variable-p t nil))
@end group
@end example
@end defun @end defun
@deffn Command read-color &optional prompt convert allow-empty display @deffn Command read-color &optional prompt convert allow-empty display
@ -1342,7 +1304,7 @@ minibuffer. However, when called interactively or if the optional
argument @var{convert} is non-@code{nil}, it converts any input color argument @var{convert} is non-@code{nil}, it converts any input color
name into the corresponding RGB value string and instead returns that. name into the corresponding RGB value string and instead returns that.
This function requires a valid color specification to be input. This function requires a valid color specification to be input.
Empty color names are allowed when @code{allow-empty} is Empty color names are allowed when @var{allow-empty} is
non-@code{nil} and the user enters null input. non-@code{nil} and the user enters null input.
Interactively, or when @var{display} is non-@code{nil}, the return Interactively, or when @var{display} is non-@code{nil}, the return
@ -1360,7 +1322,7 @@ and @code{read-input-method-name}, in @ref{Input Methods}.
The high-level completion functions @code{read-file-name}, The high-level completion functions @code{read-file-name},
@code{read-directory-name}, and @code{read-shell-command} are designed @code{read-directory-name}, and @code{read-shell-command} are designed
to read file names, directory names, and shell commands respectively. to read file names, directory names, and shell commands, respectively.
They provide special features, including automatic insertion of the They provide special features, including automatic insertion of the
default directory. default directory.
@ -1369,15 +1331,29 @@ This function reads a file name, prompting with @var{prompt} and
providing completion. providing completion.
As an exception, this function reads a file name using a graphical As an exception, this function reads a file name using a graphical
file dialog instead of the minibuffer, if (i) it is invoked via a file dialog instead of the minibuffer, if all of the following are
mouse command, and (ii) the selected frame is on a graphical display true:
supporting such dialogs, and (iii) the variable @code{use-dialog-box}
is non-@code{nil} (@pxref{Dialog Boxes,, Dialog Boxes, emacs, The GNU @enumerate
Emacs Manual}), and (iv) the @var{directory} argument, described @item
below, does not specify a remote file (@pxref{Remote Files,, Remote It is invoked via a mouse command.
Files, emacs, The GNU Emacs Manual}). The exact behavior when using a
graphical file dialog is platform-dependent. Here, we simply document @item
the behavior when using the minibuffer. The selected frame is on a graphical display supporting such dialogs.
@item
The variable @code{use-dialog-box} is non-@code{nil}.
@xref{Dialog Boxes,, Dialog Boxes, emacs, The GNU Emacs Manual}.
@item
The @var{directory} argument, described below, does not specify a
remote file. @xref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}.
@end enumerate
@noindent
The exact behavior when using a graphical file dialog is
platform-dependent. Here, we simply document the behavior when using
the minibuffer.
@code{read-file-name} does not automatically expand the returned file @code{read-file-name} does not automatically expand the returned file
name. You must call @code{expand-file-name} yourself if an absolute name. You must call @code{expand-file-name} yourself if an absolute
@ -1388,7 +1364,7 @@ The optional argument @var{require-match} has the same meaning as in
The argument @var{directory} specifies the directory to use for The argument @var{directory} specifies the directory to use for
completing relative file names. It should be an absolute directory completing relative file names. It should be an absolute directory
name. If @code{insert-default-directory} is non-@code{nil}, name. If the variable @code{insert-default-directory} is non-@code{nil},
@var{directory} is also inserted in the minibuffer as initial input. @var{directory} is also inserted in the minibuffer as initial input.
It defaults to the current buffer's value of @code{default-directory}. It defaults to the current buffer's value of @code{default-directory}.
@ -1396,9 +1372,9 @@ If you specify @var{initial}, that is an initial file name to insert
in the buffer (after @var{directory}, if that is inserted). In this in the buffer (after @var{directory}, if that is inserted). In this
case, point goes at the beginning of @var{initial}. The default for case, point goes at the beginning of @var{initial}. The default for
@var{initial} is @code{nil}---don't insert any file name. To see what @var{initial} is @code{nil}---don't insert any file name. To see what
@var{initial} does, try the command @kbd{C-x C-v}. @strong{Please @var{initial} does, try the command @kbd{C-x C-v} in a buffer visiting
note:} we recommend using @var{default} rather than @var{initial} in a file. @strong{Please note:} we recommend using @var{default} rather
most cases. than @var{initial} in most cases.
If @var{default} is non-@code{nil}, then the function returns If @var{default} is non-@code{nil}, then the function returns
@var{default} if the user exits the minibuffer with the same non-empty @var{default} if the user exits the minibuffer with the same non-empty
@ -1501,7 +1477,7 @@ use the code letters @samp{f} or @samp{F} in their interactive form.
@xref{Interactive Codes,, Code Characters for interactive}.) Its @xref{Interactive Codes,, Code Characters for interactive}.) Its
value controls whether @code{read-file-name} starts by placing the value controls whether @code{read-file-name} starts by placing the
name of the default directory in the minibuffer, plus the initial file name of the default directory in the minibuffer, plus the initial file
name if any. If the value of this variable is @code{nil}, then name, if any. If the value of this variable is @code{nil}, then
@code{read-file-name} does not place any initial input in the @code{read-file-name} does not place any initial input in the
minibuffer (unless you specify initial input with the @var{initial} minibuffer (unless you specify initial input with the @var{initial}
argument). In that case, the default directory is still used for argument). In that case, the default directory is still used for
@ -1544,17 +1520,17 @@ The file is @point{}
@end example @end example
@end defopt @end defopt
@defun read-shell-command prompt &optional initial-contents hist &rest args @defun read-shell-command prompt &optional initial history &rest args
This function reads a shell command from the minibuffer, prompting This function reads a shell command from the minibuffer, prompting
with @var{prompt} and providing intelligent completion. It completes with @var{prompt} and providing intelligent completion. It completes
the first word of the command using candidates that are appropriate the first word of the command using candidates that are appropriate
for command names, and the rest of the command words as file names. for command names, and the rest of the command words as file names.
This function uses @code{minibuffer-local-shell-command-map} as the This function uses @code{minibuffer-local-shell-command-map} as the
keymap for minibuffer input. The @var{hist} argument specifies the keymap for minibuffer input. The @var{history} argument specifies the
history list to use; if is omitted or @code{nil}, it defaults to history list to use; if is omitted or @code{nil}, it defaults to
@code{shell-command-history} (@pxref{Minibuffer History, @code{shell-command-history} (@pxref{Minibuffer History,
shell-command-history}). The optional argument @var{initial-contents} shell-command-history}). The optional argument @var{initial}
specifies the initial content of the minibuffer (@pxref{Initial specifies the initial content of the minibuffer (@pxref{Initial
Input}). The rest of @var{args}, if present, are used as the Input}). The rest of @var{args}, if present, are used as the
@var{default} and @var{inherit-input-method} arguments in @var{default} and @var{inherit-input-method} arguments in
@ -1563,20 +1539,22 @@ Input}). The rest of @var{args}, if present, are used as the
@defvar minibuffer-local-shell-command-map @defvar minibuffer-local-shell-command-map
This keymap is used by @code{read-shell-command} for completing This keymap is used by @code{read-shell-command} for completing
command and file names that are part of a shell command. command and file names that are part of a shell command. It uses
@code{minibuffer-local-map} as its parent keymap, and binds @key{TAB}
to @code{completion-at-point}.
@end defvar @end defvar
@node Completion Variables @node Completion Variables
@subsection Completion Variables @subsection Completion Variables
Here are some variables which can be used to alter the default Here are some variables that can be used to alter the default
completion behavior. completion behavior.
@cindex completion styles @cindex completion styles
@defopt completion-styles @defopt completion-styles
The value of this variable is a list of completion style (symbols) to The value of this variable is a list of completion style (symbols) to
use for performing completion. A @dfn{completion style} is a set of use for performing completion. A @dfn{completion style} is a set of
rules for generating completions. Each symbol in occurring this list rules for generating completions. Each symbol occurring this list
must have a corresponding entry in @code{completion-styles-alist}. must have a corresponding entry in @code{completion-styles-alist}.
@end defopt @end defopt
@ -1623,13 +1601,14 @@ description of the available completion styles.
@defopt completion-category-overrides @defopt completion-category-overrides
This variable specifies special completion styles and other completion This variable specifies special completion styles and other completion
behaviors to use when completing certain types of text. Its value behaviors to use when completing certain types of text. Its value
should be a list of the form @code{(@var{category} . @var{alist})}. should be an alist with elements of the form @code{(@var{category}
@var{category} is a symbol describing what is being completed; . @var{alist})}. @var{category} is a symbol describing what is being
currently, the @code{buffer} and @code{file} categories are defined, completed; currently, the @code{buffer}, @code{file}, and
but others can be defined via specialized completion functions @code{unicode-name} categories are defined, but others can be defined
(@pxref{Programmed Completion}). @var{alist} is an association list via specialized completion functions (@pxref{Programmed Completion}).
describing how completion should behave for the corresponding @var{alist} is an association list describing how completion should
category. The following alist keys are supported: behave for the corresponding category. The following alist keys are
supported:
@table @code @table @code
@item styles @item styles
@ -1662,7 +1641,7 @@ the completion.
The value should be a function to run after performing completion. The value should be a function to run after performing completion.
The function should accept two arguments, @var{string} and The function should accept two arguments, @var{string} and
@var{status}, where @var{string} is the text to which the field was @var{status}, where @var{string} is the text to which the field was
completed and @var{status} indicates what kind of operation happened: completed, and @var{status} indicates what kind of operation happened:
@code{finished} if text is now complete, @code{sole} if the text @code{finished} if text is now complete, @code{sole} if the text
cannot be further completed but completion is not finished, or cannot be further completed but completion is not finished, or
@code{exact} if the text is a valid completion but may be further @code{exact} if the text is a valid completion but may be further
@ -1726,9 +1705,10 @@ some completion alternative; @code{nil} otherwise.
@item (boundaries . @var{suffix}) @item (boundaries . @var{suffix})
This specifies a @code{completion-boundaries} operation. The function This specifies a @code{completion-boundaries} operation. The function
should return @code{(boundaries START . END)}, where START is the should return @code{(boundaries @var{start} . @var{end})}, where
position of the beginning boundary in the specified string, and END is @var{start} is the position of the beginning boundary in the specified
the position of the end boundary in SUFFIX. string, and @var{end} is the position of the end boundary in
@var{suffix}.
@item metadata @item metadata
This specifies a request for information about the state of the This specifies a request for information about the state of the
@ -1773,7 +1753,7 @@ the same as for @code{display-sort-function}.
@defun completion-table-dynamic function @defun completion-table-dynamic function
This function is a convenient way to write a function that can act as This function is a convenient way to write a function that can act as
programmed completion function. The argument @var{function} should be a programmed completion function. The argument @var{function} should be
a function that takes one argument, a string, and returns an alist of a function that takes one argument, a string, and returns an alist of
possible completions of it. You can think of possible completions of it. You can think of
@code{completion-table-dynamic} as a transducer between that interface @code{completion-table-dynamic} as a transducer between that interface
@ -1827,7 +1807,7 @@ satisfy.
@item :exclusive @item :exclusive
If the value is @code{no}, then if the completion table fails to match If the value is @code{no}, then if the completion table fails to match
the text at point, then @code{completion-at-point} moves on to the the text at point, @code{completion-at-point} moves on to the
next function in @code{completion-at-point-functions} instead of next function in @code{completion-at-point-functions} instead of
reporting a completion failure. reporting a completion failure.
@end table @end table
@ -1841,7 +1821,7 @@ old code to using @code{completion-at-point}.
The first function in @code{completion-at-point-functions} to return a The first function in @code{completion-at-point-functions} to return a
non-@code{nil} value is used by @code{completion-at-point}. The non-@code{nil} value is used by @code{completion-at-point}. The
remaining functions are not called. The exception to this is when remaining functions are not called. The exception to this is when
there is a @code{:exclusive} specification, as described above. there is an @code{:exclusive} specification, as described above.
@end defvar @end defvar
The following function provides a convenient way to perform The following function provides a convenient way to perform
@ -1879,7 +1859,7 @@ answer.
using the mouse---more precisely, if @code{last-nonmenu-event} using the mouse---more precisely, if @code{last-nonmenu-event}
(@pxref{Command Loop Info}) is either @code{nil} or a list---then it (@pxref{Command Loop Info}) is either @code{nil} or a list---then it
uses a dialog box or pop-up menu to ask the question. Otherwise, it uses a dialog box or pop-up menu to ask the question. Otherwise, it
uses keyboard input. You can force use of the mouse or use of keyboard uses keyboard input. You can force use either of the mouse or of keyboard
input by binding @code{last-nonmenu-event} to a suitable value around input by binding @code{last-nonmenu-event} to a suitable value around
the call. the call.
@ -1890,7 +1870,7 @@ the call.
This function asks the user a question, expecting input in the echo This function asks the user a question, expecting input in the echo
area. It returns @code{t} if the user types @kbd{y}, @code{nil} if the area. It returns @code{t} if the user types @kbd{y}, @code{nil} if the
user types @kbd{n}. This function also accepts @key{SPC} to mean yes user types @kbd{n}. This function also accepts @key{SPC} to mean yes
and @key{DEL} to mean no. It accepts @kbd{C-]} to mean ``quit,'' like and @key{DEL} to mean no. It accepts @kbd{C-]} to mean ``quit'', like
@kbd{C-g}, because the question might look like a minibuffer and for @kbd{C-g}, because the question might look like a minibuffer and for
that reason the user might try to use @kbd{C-]} to get out. The answer that reason the user might try to use @kbd{C-]} to get out. The answer
is a single character, with no @key{RET} needed to terminate it. Upper is a single character, with no @key{RET} needed to terminate it. Upper
@ -1914,12 +1894,16 @@ hardwired. The keymap @code{query-replace-map} specifies them.
In the following example, the user first types @kbd{q}, which is In the following example, the user first types @kbd{q}, which is
invalid. At the next prompt the user types @kbd{y}. invalid. At the next prompt the user types @kbd{y}.
@c Need an interactive example, because otherwise the return value
@c obscures the display of the valid answer.
@smallexample @smallexample
@group @group
(y-or-n-p "Do you need a lift? ") (defun ask ()
(interactive)
(y-or-n-p "Do you need a lift? "))
;; @r{After evaluation of the preceding expression,} ;; @r{After evaluation of the preceding definition, @kbd{M-x ask}}
;; @r{the following prompt appears in the echo area:} ;; @r{causes the following prompt to appear in the echo area:}
@end group @end group
@group @group
@ -1951,10 +1935,10 @@ We show successive lines of echo area messages, but only one actually
appears on the screen at a time. appears on the screen at a time.
@end defun @end defun
@defun y-or-n-p-with-timeout prompt seconds default-value @defun y-or-n-p-with-timeout prompt seconds default
Like @code{y-or-n-p}, except that if the user fails to answer within Like @code{y-or-n-p}, except that if the user fails to answer within
@var{seconds} seconds, this function stops waiting and returns @var{seconds} seconds, this function stops waiting and returns
@var{default-value}. It works by setting up a timer; see @ref{Timers}. @var{default}. It works by setting up a timer; see @ref{Timers}.
The argument @var{seconds} may be an integer or a floating point number. The argument @var{seconds} may be an integer or a floating point number.
@end defun @end defun
@ -2022,7 +2006,7 @@ single-character answer in the echo area for each one.
The value of @var{list} specifies the objects to ask questions about. The value of @var{list} specifies the objects to ask questions about.
It should be either a list of objects or a generator function. If it is It should be either a list of objects or a generator function. If it is
a function, it should expect no arguments, and should return either the a function, it should expect no arguments, and should return either the
next object to ask about, or @code{nil} meaning stop asking questions. next object to ask about, or @code{nil}, meaning to stop asking questions.
The argument @var{prompter} specifies how to ask each question. If The argument @var{prompter} specifies how to ask each question. If
@var{prompter} is a string, the question text is computed like this: @var{prompter} is a string, the question text is computed like this:
@ -2038,8 +2022,8 @@ where @var{object} is the next object to ask about (as obtained from
If not a string, @var{prompter} should be a function of one argument If not a string, @var{prompter} should be a function of one argument
(the next object to ask about) and should return the question text. If (the next object to ask about) and should return the question text. If
the value is a string, that is the question to ask the user. The the value is a string, that is the question to ask the user. The
function can also return @code{t} meaning do act on this object (and function can also return @code{t}, meaning do act on this object (and
don't ask the user), or @code{nil} meaning ignore this object (and don't don't ask the user), or @code{nil}, meaning ignore this object (and don't
ask the user). ask the user).
The argument @var{actor} says how to act on the answers that the user The argument @var{actor} says how to act on the answers that the user
@ -2080,7 +2064,7 @@ answer); @var{function} is a function of one argument (an object from
When the user responds with @var{char}, @code{map-y-or-n-p} calls When the user responds with @var{char}, @code{map-y-or-n-p} calls
@var{function}. If it returns non-@code{nil}, the object is considered @var{function}. If it returns non-@code{nil}, the object is considered
``acted upon,'' and @code{map-y-or-n-p} advances to the next object in ``acted upon'', and @code{map-y-or-n-p} advances to the next object in
@var{list}. If it returns @code{nil}, the prompt is repeated for the @var{list}. If it returns @code{nil}, the prompt is repeated for the
same object. same object.
@ -2092,12 +2076,14 @@ If @code{map-y-or-n-p} is called in a command that was invoked using the
mouse---more precisely, if @code{last-nonmenu-event} (@pxref{Command mouse---more precisely, if @code{last-nonmenu-event} (@pxref{Command
Loop Info}) is either @code{nil} or a list---then it uses a dialog box Loop Info}) is either @code{nil} or a list---then it uses a dialog box
or pop-up menu to ask the question. In this case, it does not use or pop-up menu to ask the question. In this case, it does not use
keyboard input or the echo area. You can force use of the mouse or use keyboard input or the echo area. You can force use either of the mouse or
of keyboard input by binding @code{last-nonmenu-event} to a suitable of keyboard input by binding @code{last-nonmenu-event} to a suitable
value around the call. value around the call.
The return value of @code{map-y-or-n-p} is the number of objects acted on. The return value of @code{map-y-or-n-p} is the number of objects acted on.
@end defun @end defun
@c FIXME An example of this would be more useful than all the
@c preceding examples of simple things.
@node Reading a Password @node Reading a Password
@section Reading a Password @section Reading a Password
@ -2160,6 +2146,19 @@ This command replaces the minibuffer contents with the value of the
regular expression). regular expression).
@end deffn @end deffn
@deffn Command previous-complete-history-element n
This command replaces the minibuffer contents with the value of the
@var{n}th previous (older) history element that completes the current
contents of the minibuffer before the point.
@end deffn
@deffn Command next-complete-history-element n
This command replaces the minibuffer contents with the value of the
@var{n}th next (newer) history element that completes the current
contents of the minibuffer before the point.
@end deffn
@node Minibuffer Windows @node Minibuffer Windows
@section Minibuffer Windows @section Minibuffer Windows
@cindex minibuffer windows @cindex minibuffer windows
@ -2169,7 +2168,7 @@ and test whether they are active.
@defun active-minibuffer-window @defun active-minibuffer-window
This function returns the currently active minibuffer window, or This function returns the currently active minibuffer window, or
@code{nil} if none is currently active. @code{nil} if there is none.
@end defun @end defun
@defun minibuffer-window &optional frame @defun minibuffer-window &optional frame
@ -2202,8 +2201,8 @@ there can be more than one minibuffer window if there is more than one
frame. frame.
@defun minibuffer-window-active-p window @defun minibuffer-window-active-p window
This function returns non-@code{nil} if @var{window}, assumed to be This function returns non-@code{nil} if @var{window} is the currently
a minibuffer window, is currently active. active minibuffer window.
@end defun @end defun
@node Minibuffer Contents @node Minibuffer Contents
@ -2318,7 +2317,7 @@ minibuffer, it scrolls this window.
@end defvar @end defvar
@defun minibuffer-selected-window @defun minibuffer-selected-window
This function returns the window which was selected when the This function returns the window that was selected when the
minibuffer was entered. If selected window is not a minibuffer minibuffer was entered. If selected window is not a minibuffer
window, it returns @code{nil}. window, it returns @code{nil}.
@end defun @end defun
@ -2329,10 +2328,19 @@ windows. If a float, it specifies a fraction of the height of the
frame. If an integer, it specifies a number of lines. frame. If an integer, it specifies a number of lines.
@end defopt @end defopt
@vindex minibuffer-message-timeout
@defun minibuffer-message string &rest args @defun minibuffer-message string &rest args
This function displays @var{string} temporarily at the end of the This function displays @var{string} temporarily at the end of the
minibuffer text, for two seconds, or until the next input event minibuffer text, for a few seconds, or until the next input event
arrives, whichever comes first. If @var{args} is non-@code{nil}, the arrives, whichever comes first. The variable
actual message is obtained by passing @var{string} and @var{args} @code{minibuffer-message-timeout} specifies the number of seconds to
through @code{format}. @xref{Formatting Strings}. wait in the absence of input. It defaults to 2. If @var{args} is
non-@code{nil}, the actual message is obtained by passing @var{string}
and @var{args} through @code{format}. @xref{Formatting Strings}.
@end defun @end defun
@deffn Command minibuffer-inactive-mode
This is the major mode used in inactive minibuffers. It uses
keymap @code{minibuffer-inactive-mode-map}. This can be useful
if the minibuffer is in a separate frame. @xref{Minibuffers and Frames}.
@end deffn

File diff suppressed because it is too large Load diff

View file

@ -658,8 +658,8 @@ Minibuffers
* Multiple Queries:: Asking a series of similar questions. * Multiple Queries:: Asking a series of similar questions.
* Reading a Password:: Reading a password from the terminal. * Reading a Password:: Reading a password from the terminal.
* Minibuffer Commands:: Commands used as key bindings in minibuffers. * Minibuffer Commands:: Commands used as key bindings in minibuffers.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Minibuffer Windows:: Operating on the special minibuffer windows. * Minibuffer Windows:: Operating on the special minibuffer windows.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Recursive Mini:: Whether recursive entry to minibuffer is allowed.
* Minibuffer Misc:: Various customization hooks and variables. * Minibuffer Misc:: Various customization hooks and variables.
@ -670,7 +670,7 @@ Completion
* Minibuffer Completion:: Invoking the minibuffer with completion. * Minibuffer Completion:: Invoking the minibuffer with completion.
* Completion Commands:: Minibuffer commands that do completion. * Completion Commands:: Minibuffer commands that do completion.
* High-Level Completion:: Convenient special cases of completion * High-Level Completion:: Convenient special cases of completion
(reading buffer name, file name, etc.). (reading buffer names, variable names, etc.).
* Reading File Names:: Using completion to read file names and * Reading File Names:: Using completion to read file names and
shell commands. shell commands.
* Completion Variables:: Variables controlling completion behavior. * Completion Variables:: Variables controlling completion behavior.

View file

@ -657,8 +657,8 @@ Minibuffers
* Multiple Queries:: Asking a series of similar questions. * Multiple Queries:: Asking a series of similar questions.
* Reading a Password:: Reading a password from the terminal. * Reading a Password:: Reading a password from the terminal.
* Minibuffer Commands:: Commands used as key bindings in minibuffers. * Minibuffer Commands:: Commands used as key bindings in minibuffers.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Minibuffer Windows:: Operating on the special minibuffer windows. * Minibuffer Windows:: Operating on the special minibuffer windows.
* Minibuffer Contents:: How such commands access the minibuffer text.
* Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Recursive Mini:: Whether recursive entry to minibuffer is allowed.
* Minibuffer Misc:: Various customization hooks and variables. * Minibuffer Misc:: Various customization hooks and variables.
@ -669,7 +669,7 @@ Completion
* Minibuffer Completion:: Invoking the minibuffer with completion. * Minibuffer Completion:: Invoking the minibuffer with completion.
* Completion Commands:: Minibuffer commands that do completion. * Completion Commands:: Minibuffer commands that do completion.
* High-Level Completion:: Convenient special cases of completion * High-Level Completion:: Convenient special cases of completion
(reading buffer name, file name, etc.). (reading buffer names, variable names, etc.).
* Reading File Names:: Using completion to read file names and * Reading File Names:: Using completion to read file names and
shell commands. shell commands.
* Completion Variables:: Variables controlling completion behavior. * Completion Variables:: Variables controlling completion behavior.

View file

@ -1,3 +1,23 @@
2012-04-20 Glenn Morris <rgm@gnu.org>
* faq.texi (New in Emacs 24): New section.
(Packages that do not come with Emacs): Mention M-x list-packages.
2012-04-20 Glenn Morris <rgm@gnu.org>
* Makefile.in: Replace non-portable use of $< in emacs-gnutls rules.
2012-04-20 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (INFO_TARGETS, DVI_TARGETS, clean): Add emacs-gnutls.
($(infodir)/emacs-gnutls, emacs-gnutls.dvi): New targets.
2012-04-20 Teodor Zlatanov <tzz@lifelogs.com>
* emacs-gnutls.texi: Add documentation for the GnuTLS integration.
* Makefile.in: Add emacs-gnutls.texi to build.
2012-04-20 Alan Mackenzie <acm@muc.de>
2012-04-14 Alan Mackenzie <acm@muc.de> 2012-04-14 Alan Mackenzie <acm@muc.de>
* cc-mode.texi (c-offsets-alist): Correct a typo. * cc-mode.texi (c-offsets-alist): Correct a typo.

View file

@ -942,6 +942,7 @@ status of its latest version.
@menu @menu
* Origin of the term Emacs:: * Origin of the term Emacs::
* Latest version of Emacs:: * Latest version of Emacs::
* New in Emacs 24::
* New in Emacs 23:: * New in Emacs 23::
* New in Emacs 22:: * New in Emacs 22::
* New in Emacs 21:: * New in Emacs 21::
@ -1009,12 +1010,84 @@ Emacs, type @kbd{C-h C-n} (@kbd{M-x view-emacs-news}). As of Emacs 22,
you can give this command a prefix argument to read about which features you can give this command a prefix argument to read about which features
were new in older versions. were new in older versions.
@node New in Emacs 24
@section What is different about Emacs 24?
@cindex Differences between Emacs 23 and Emacs 24
@cindex Emacs 24, new features in
@itemize
@cindex packages, installing more
@item
Emacs now includes a package manager. Type @kbd{M-x list-packages} to
get started. You can use this to download and automatically install
many more Lisp packages.
@cindex lexical binding
@item
Emacs Lisp now supports lexical binding on a per-file basis. In
@emph{lexical binding}, variable references must be located textually
within the binding construct. This contrasts with @emph{dynamic
binding}, where programs can refer to variables defined outside their
local textual scope. A Lisp file can use a local variable setting of
@code{lexical-binding: t} to indicate that the contents should be
interpreted using lexical binding. See the Emacs Lisp Reference
Manual for more details.
@cindex bidirectional display
@cindex right-to-left languages
@item
Some human languages, such as English, are written from left to right.
Others, such as Arabic, are written from right to left. Emacs now has
support for any mixture of these forms---this is ``bidirectional text''.
@item
Handling of text selections has been improved, and now integrates
better with external clipboards.
@cindex themes
@item
A new command @kbd{customize-themes} allows you to easily change the
appearance of your Emacs.
@item
Emacs can be compiled with the Gtk+ 3 toolkit.
@item
Support for several new external libraries can be included at compile
time:
@itemize
@item
``Security-Enhanced Linux'' (SELinux) is a Linux kernel feature that
provides more sophisticated file access controls than ordinary
``Unix-style'' file permissions.
@item
The ImageMagick display library. This allows you to display many more
image format in Emacs, as well as carry out transformations such as
rotations.
@item
The GnuTLS library for secure network communications. Emacs uses this
transparently for email if your mail server supports it.
@item
The libxml2 library for parsing XML structures.
@end itemize
@item
Much more flexibility in the handling of windows and buffer display.
@end itemize
As always, consult the @file{NEWS} file for more information.
@node New in Emacs 23 @node New in Emacs 23
@section What is different about Emacs 23? @section What is different about Emacs 23?
@cindex Differences between Emacs 22 and Emacs 23 @cindex Differences between Emacs 22 and Emacs 23
@cindex Emacs 23, new features in @cindex Emacs 23, new features in
@cindex Recently introduced features
@cindex Default features
@itemize @itemize
@ -1065,8 +1138,7 @@ Other changes include: support for serial port access; D-Bus bindings; a
new Visual Line mode for line-motion; improved completion; a new mode new Visual Line mode for line-motion; improved completion; a new mode
(@samp{DocView}) for viewing of PDF, PostScript, and DVI documents; nXML (@samp{DocView}) for viewing of PDF, PostScript, and DVI documents; nXML
mode (for editing XML documents) is included; VC has been updated for mode (for editing XML documents) is included; VC has been updated for
newer version control systems; etc. As always, consult the @file{NEWS} newer version control systems; etc.
file for more information.
@node New in Emacs 22 @node New in Emacs 22
@ -3225,6 +3297,14 @@ see @ref{Packages that do not come with Emacs}.
@cindex Emacs Lisp List @cindex Emacs Lisp List
@cindex Emacs Lisp Archive @cindex Emacs Lisp Archive
Your first port of call should be the @kbd{M-x list-packages} command.
This connects to the @uref{http:///elpa.gnu.org, GNU ELPA} (``Emacs
Lisp Package Archive'') server and fetches the list of additional
packages that it offers. These are GNU packages that are available
for use with Emacs, but are distributed separately. Select a package
to get more details about the features that it offers, and then if you
wish, Emacs can download and automatically install it for you.
@uref{http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html, The Emacs Lisp @uref{http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html, The Emacs Lisp
List (ELL)}, maintained by @email{S.J.Eglen@@damtp.cam.ac.uk, Stephen Eglen}, List (ELL)}, maintained by @email{S.J.Eglen@@damtp.cam.ac.uk, Stephen Eglen},
aims to provide one compact list with links to all of the current Emacs aims to provide one compact list with links to all of the current Emacs

View file

@ -1,4 +1,4 @@
Copyright (C) 2006-2012 Free Software Foundation, Inc. Copyright (C) 2006-2012 Free Software Foundation, Inc.
See end for license conditions. See end for license conditions.
@ -44,13 +44,24 @@ Ref: The "Tips" Appendix in the Emacs Lisp Reference.
* Copyright Assignment * Copyright Assignment
We can accept small changes (roughly, fewer than 15 lines) without The FSF (Free Software Foundation) is the copyright holder for GNU Emacs.
legal papers. Anything more substantial requires a copyright The FSF is a nonprofit with a worldwide mission to promote computer
disclaimer or assignment (the latter is preferred, especially for user freedom and to defend the rights of all free software users.
larger changes). Both of these involved filling out a short form and For general information, see the website http://www.fsf.org/ .
filing it with the FSF. The process is straightforward -- contact us
at emacs-devel@gnu.org to obtain the relevant forms.
Generally speaking, for non-trivial contributions to GNU Emacs we
require that the copyright be assigned to the FSF. For the reasons
behind this, see: http://www.gnu.org/licenses/why-assign.html .
Copyright assignment is a simple process. If you live in the US, you
can do it entirely electronically. We can help you get started, and
answer any questions you may have (or point you to the people with the
answers), at the emacs-devel@gnu.org mailing list.
A copyright disclaimer is also a possibility, but we prefer an assignment.
We can accept small changes (roughly, fewer than 15 lines) without
an assignment. This is a cumulative limit (e.g. three separate 5 line
patches) over all your contributions.
* Getting the Source Code * Getting the Source Code

View file

@ -1,3 +1,9 @@
2012-04-20 Glenn Morris <rgm@gnu.org>
* CONTRIBUTE: Expand a bit on copyright assignments.
* MORE.STUFF: General update. Mention list-packages.
Remove many old/outdated URLs.
2012-04-10 Lars Magne Ingebrigtsen <larsi@gnus.org> 2012-04-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* publicsuffix.txt: New file (bug#1401). * publicsuffix.txt: New file (bug#1401).

View file

@ -1,99 +1,87 @@
More Neat Stuff for your Emacs More Neat Stuff for your Emacs
Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc. Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc.
See the end of the file for license conditions. See the end of the file for license conditions.
This file describes GNU Emacs programs and resources that are The easiest way to add more features to your Emacs is to use the command
M-x list-packages. This contacts the server at <URL:http://elpa.gnu.org>,
where many Emacs Lisp packages are stored. These are distributed
separately from Emacs itself for reasons of space, etc. You can browse
the resulting *Packages* buffer to see what is available, and then
Emacs can automatically download and install the packages that you
select. See the section "Emacs Lisp Packages" in the Emacs manual
for more details.
Below we describe some GNU Emacs programs and resources that are
maintained by other people. Some of these may become part of the maintained by other people. Some of these may become part of the
Emacs distribution in the future. Others we unfortunately can't Emacs distribution, or GNU ELPA, in the future. Others we unfortunately
distribute, even though they are free software, because we lack legal can't distribute, even though they are free software, because we lack
papers for copyright purposes. Also included are sites where legal papers for copyright purposes.
development versions of some packages distributed with Emacs may be
found.
You might also look at the Emacs web page Also listed are sites where development versions of some packages
<URL:http://www.gnu.org/software/emacs/emacs.html>. If you use the distributed with Emacs may be found.
Windows-32 version of Emacs, see the NTEmacs sites listed in the FAQ.
Please submit a bug report if you find that any of the addresses It is difficult to keep this file up-to-date, and it only lists a fraction
listed here fail. of the Emacs modes that are available. If you are interested in
a particular feature, then after checking Emacs itself and GNU ELPA,
a web search is often the best way to find results.
* The gnu-emacs-sources mailing list
<URL:https://lists.gnu.org/mailman/listinfo/gnu-emacs-sources>
which is gatewayed to the gnu.emacs.sources newsgroup (although the
connection between the two can be unreliable) is an official
place where people can post or announce their extensions to Emacs.
* The `Emacs Lisp List' at * The `Emacs Lisp List' at
<URL:http://www.damtp.cam.ac.uk/user/eglen/emacs/ell.html> has pointers <URL:http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html> has pointers
to sources of a large number of packages. to sources of a large number of packages. Unfortunately, at the time
of writing it seems to no longer be updating.
* gnu.emacs.sources
Packages posted to the gnu.emacs.sources newsgroup (see
etc/MAILINGLISTS) might be archived specifically (try a web search
engine) or retrievable from general Usenet archive services.
* emacswiki.org * emacswiki.org
The Emacs Wiki has an area for storing elisp files
<URL:http://www.emacswiki.org/cgi-bin/wiki/ElispArea>.
The Emacs Wiki has an area for storing elisp files * WikEmacs
<URL:http://www.emacswiki.org/cgi-bin/wiki/ElispArea>. <URL:http://wikemacs.org> is an alternative wiki for Emacs.
* Emacs tutorials and manuals * Emacs slides and tutorials can be found here:
* Emacs slides and tutorials can be found here:
<URL:http://web.psung.name/emacs/> <URL:http://web.psung.name/emacs/>
* Maintenance versions of some packages distributed with Emacs * Maintenance versions of some packages distributed with Emacs
You might find bug-fixes or enhancements in these places. You might find bug-fixes or enhancements in these places.
In many cases, however, development of these packages has shifted to Emacs,
so you will find the latest version in Emacs.
* Ada-mode: <URL:http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html> * Ada-mode: <URL:http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html>
* Battery and Info Look: <URL:http://ralph-schleicher.de/emacs.html> * Battery and Info Look: <URL:http://ralph-schleicher.de/emacs.html>
* BS: <URL:http://www.geekware.de/software/emacs/index.html>
* Calculator: <URL:http://www.barzilay.org/misc/calculator.el>
* CC mode: <URL:http://cc-mode.sourceforge.net/> * CC mode: <URL:http://cc-mode.sourceforge.net/>
* CPerl: <URL:http://math.berkeley.edu/~ilya/software/emacs/> * CPerl: <URL:http://math.berkeley.edu/~ilya/software/emacs/>
* Ediff and Viper: <URL:http://www.cs.sunysb.edu/~kifer/emacs.html> * Ediff and Viper: <URL:http://www.cs.sunysb.edu/~kifer/emacs.html>
* Eldoc and Rlogin:
<URL:http://www.splode.com/~friedman/software/emacs-lisp/>
* ERC: <URL:http://savannah.gnu.org/projects/erc/> * ERC: <URL:http://savannah.gnu.org/projects/erc/>
* Etags: <URL:http://fly.isti.cnr.it/software/>
* Gnus: <URL:http://www.gnus.org/> * Gnus: <URL:http://www.gnus.org/>
* Ispell: <URL:http://www.kdstevens.com/stevens/ispell-page.html>
* MH-E: <URL:http://mh-e.sourceforge.net/> * MH-E: <URL:http://mh-e.sourceforge.net/>
* nXML: <URL:http://www.thaiopensource.com/nxml-mode/> * nXML: <URL:http://www.thaiopensource.com/nxml-mode/>
* Org mode: <URL:http://orgmode.org/> * Org mode: <URL:http://orgmode.org/>
* PS mode: <URL:http://odur.let.rug.nl/%7Ekleiweg/postscript/>
* PS-print: <URL:http://www.emacswiki.org/cgi-bin/wiki/PsPrintPackage>
* Python: <URL:http://www.loveshack.ukfsn.org/emacs/>
* QuickURL: <URL:http://www.davep.org/emacs/>
* RefTeX: <URL:http://www.gnu.org/software/auctex/reftex.html> * RefTeX: <URL:http://www.gnu.org/software/auctex/reftex.html>
* Remember: <URL:https://gna.org/p/remember-el> * Remember: <URL:https://gna.org/p/remember-el>
* Speedbar, Checkdoc etc: <URL:http://cedet.sourceforge.net/> * CEDET: <URL:http://cedet.sourceforge.net/>
* SQL: <URL:http://www.emacswiki.org/cgi-bin/wiki/sql.el>
* Tramp: Remote file access via rsh/ssh * Tramp: Remote file access via rsh/ssh
<URL:http://savannah.gnu.org/projects/tramp/> <URL:http://savannah.gnu.org/projects/tramp/>
* Webjump: <URL:http://www.neilvandyke.org/webjump>
* Auxiliary files * Auxiliary files
* (Tex)info files for use with Info-look that don't come from GNU * (Tex)info files for use with Info-look that don't come from GNU
@ -114,18 +102,16 @@ Emacs for various reasons, sometimes because their authors haven't made
a copyright assignment to the FSF. Some of them may be integrated in a copyright assignment to the FSF. Some of them may be integrated in
the future. the future.
You might like to check whether they are packaged for your system. Your operating system distribution may include several of these as optional
Several are for Debian GNU/Linux in particular. packages that you can install.
* AUCTeX: <URL:http://www.gnu.org/software/auctex/> * AUCTeX: <URL:http://www.gnu.org/software/auctex/>
An extensible package that supports writing and formatting TeX An extensible package that supports writing and formatting TeX
files (including AMS-TeX, LaTeX, Texinfo, ConTeXt, and docTeX). files (including AMS-TeX, LaTeX, Texinfo, ConTeXt, and docTeX).
Available from GNU ELPA.
* BBDB: personal Info Rolodex integrated with mail/news: * BBDB: personal Info Rolodex integrated with mail/news:
<URL:http://bbdb.sourceforge.net/> <URL:http://savannah.nongnu.org/projects/bbdb>
[You might want to set the coding system of your .bbdb file to
emacs-mule, say by adding `("\\.bbdb\\'" . emacs-mule)' to
`file-coding-system-alist' for non-ASCII characters.]
* Boxquote: <URL:http://www.davep.org/emacs/> * Boxquote: <URL:http://www.davep.org/emacs/>
@ -143,13 +129,6 @@ Several are for Debian GNU/Linux in particular.
* Ee: categorizing information manager: * Ee: categorizing information manager:
<URL:http://www.jurta.org/en/emacs/ee/> <URL:http://www.jurta.org/en/emacs/ee/>
* EFS: enhanced version of ange-ftp:
<URL:http://www-pu.informatik.uni-tuebingen.de/users/sperber/software/efs/>
* Elib library: <URL:http://www.gnu.org/software/elib/elib.html>
From GNU distribution mirrors. (Much of this functionality is now
in Emacs.)
* EMacro: <URL:http://emacro.sourceforge.net/> * EMacro: <URL:http://emacro.sourceforge.net/>
EMacro is a portable configuration file that configures itself. EMacro is a portable configuration file that configures itself.
@ -168,33 +147,19 @@ Several are for Debian GNU/Linux in particular.
* Emacs Wiki Mode: <URL:http://mwolson.org/projects/EmacsWikiMode.html> * Emacs Wiki Mode: <URL:http://mwolson.org/projects/EmacsWikiMode.html>
A wiki-like publishing tool and personal information manager A wiki-like publishing tool and personal information manager
* Gnuserv:
<URL:http://www.hpl.hp.com/personal/ange/gnuserv/home.html>
Alternative emacsclient/emacsserver. Also available from this Web
page: eiffel-mode.el.
* Go in a buffer: Go Text Protocol client: * Go in a buffer: Go Text Protocol client:
<URL:http://www.gnuvola.org/software/personal-elisp/dist/lisp/diversions/gnugo.el> <URL:http://www.gnuvola.org/software/personal-elisp/dist/lisp/diversions/gnugo.el>
A modified version is also bundled with GNU Go: A modified version is also bundled with GNU Go:
<URL:http://www.gnu.org/software/gnugo/gnugo.html> <URL:http://www.gnu.org/software/gnugo/gnugo.html>
* hm--html-menus:
<URL:ftp://sunsite.unc.edu/pub/Linux/apps/editors/emacs/>
HTML-specific editing. Can work with PSGML.
* Hyperbole: * Hyperbole:
<URL:http://directory.fsf.org/hyperbole.html> <URL:http://directory.fsf.org/wiki/Hyperbole>
Hyperbole is an open, efficient, programmable information Hyperbole is an open, efficient, programmable information
management and hypertext system. management and hypertext system.
* JDEE: <URL:http://jdee.sourceforge.net/> * JDEE: <URL:http://jdee.sourceforge.net/>
Provides a Java development environment for Emacs. Provides a Java development environment for Emacs.
* Mailcrypt:
<URL:http://mailcrypt.sourceforge.net/>
PGP and GPG support. PGP isn't free software, but GPG, the GNU
Privacy Guard, is a free replacement <URL:http://www.gnupg.org/>.
* Mew: <URL:http://www.mew.org/> * Mew: <URL:http://www.mew.org/>
A MIME mail reader for Emacs/XEmacs. A MIME mail reader for Emacs/XEmacs.
@ -208,9 +173,6 @@ Several are for Debian GNU/Linux in particular.
* Preview LaTeX: embed preview LaTeX images in source buffer. * Preview LaTeX: embed preview LaTeX images in source buffer.
<URL:http://www.gnu.org/software/auctex/preview-latex.html> <URL:http://www.gnu.org/software/auctex/preview-latex.html>
* PSGML: <URL:http://www.lysator.liu.se/projects/about_psgml.html>
DTD-aware serious SGML/XML editing.
* Quack: <URL:http://www.neilvandyke.org/quack/> * Quack: <URL:http://www.neilvandyke.org/quack/>
Quack enhances Emacs support for Scheme. Quack enhances Emacs support for Scheme.
@ -227,26 +189,17 @@ Several are for Debian GNU/Linux in particular.
* Tamago: Chinese/Japanese/Korean input method * Tamago: Chinese/Japanese/Korean input method
<URL:http://www.m17n.org/tamago/index.en.html> <URL:http://www.m17n.org/tamago/index.en.html>
Emacs Lisp package to provide input methods for CJK characters. Emacs Lisp package to provide input methods for CJK characters.
It can use these background conversion servers:
FreeWnn (jserver, cserver, tserver),
Wnn6,
SJ3 Ver.2
* Tiny Tools: <URL:http://freshmeat.net/projects/emacs-tiny-tools> * Tiny Tools: <URL:https://savannah.nongnu.org/projects/emacs-tiny-tools>
* VM (View Mail): Alternative mail reader * VM (View Mail): Alternative mail reader
<URL:http://launchpad.net/vm> <URL:http://launchpad.net/vm>
Previously hosted at: <URL:http://www.nongnu.org/viewmail/> Previously hosted at: <URL:http://www.nongnu.org/viewmail/>
There are VM newsgroups: <URL:news:gnu.emacs.vm.info>, and
<URL:news:gnu.emacs.vm.bug>.
* W3: <URL:http://savannah.gnu.org/projects/w3/> * W3 Web browser: <URL:http://savannah.gnu.org/projects/w3/>
Web browser. There's a W3 mail list/newsgroup
<URL:http://savannah.gnu.org/mail/?group=w3>.
* Wanderlust: <URL:http://www.gohome.org/wl/> * Wanderlust: <URL:http://www.gohome.org/wl/>
Yet Another Message Interface on Emacsen. Wanderlust is a mail/news Wanderlust is a mail/news reader for Emacs.
reader supporting IMAP4rev1 for emacsen.
* WhizzyTex: <URL:http://cristal.inria.fr/whizzytex/> * WhizzyTex: <URL:http://cristal.inria.fr/whizzytex/>
WhizzyTeX provides a minor mode for Emacs or XEmacs, a (bash) WhizzyTeX provides a minor mode for Emacs or XEmacs, a (bash)

View file

@ -1,3 +1,8 @@
2012-04-20 Chong Yidong <cyd@gnu.org>
* emacsclient.c (decode_options): Move -t -n corner case handling
into server.el (Bug#11102).
2012-04-18 Paul Eggert <eggert@cs.ucla.edu> 2012-04-18 Paul Eggert <eggert@cs.ucla.edu>
configure: new option --enable-gcc-warnings (Bug#11207) configure: new option --enable-gcc-warnings (Bug#11207)

View file

@ -638,32 +638,23 @@ decode_options (int argc, char **argv)
if (display && strlen (display) == 0) if (display && strlen (display) == 0)
display = NULL; display = NULL;
#ifdef WINDOWSNT
/* Emacs on Windows does not support GUI and console frames in the same
instance. So, it makes sense to treat the -t and -c options as
equivalent, and open a new frame regardless of whether the running
instance is GUI or console. Ideally, we would only set tty = 1 when
the instance is running in a console, but alas we don't know that.
The simplest workaround is to always ask for a tty frame, and let
server.el check whether it makes sense. */
if (tty || !current_frame)
{
display = (const char *) ttyname (0); /* Arg is ignored. */
current_frame = 0;
tty = 1;
}
#endif
/* If no display is available, new frames are tty frames. */ /* If no display is available, new frames are tty frames. */
if (!current_frame && !display) if (!current_frame && !display)
tty = 1; tty = 1;
/* --no-wait implies --current-frame on ttys when there are file
arguments or expressions given. */
if (nowait && tty && argc - optind > 0)
current_frame = 1;
#ifdef WINDOWSNT #ifdef WINDOWSNT
/* Emacs on Windows does not support graphical and text terminal
frames in the same instance. So, treat the -t and -c options as
equivalent, and open a new frame on the server's terminal.
Ideally, we would only set tty = 1 when the serve is running in a
console, but alas we don't know that. As a workaround, always
ask for a tty frame, and let server.el figure it out. */
if (!current_frame)
{
display = NULL;
tty = 1;
}
if (alternate_editor && alternate_editor[0] == '\0') if (alternate_editor && alternate_editor[0] == '\0')
{ {
message (TRUE, "--alternate-editor argument or ALTERNATE_EDITOR variable cannot be\n\ message (TRUE, "--alternate-editor argument or ALTERNATE_EDITOR variable cannot be\n\

View file

@ -1,3 +1,77 @@
2012-04-20 Dan Nicolaescu <dann@gnu.org>
* battery.el (battery-echo-area-format): Display remaining time
for sysfs backend too (Bug#11269).
(battery-linux-sysfs): Fix conditional for the charge.
2012-04-20 Chong Yidong <cyd@gnu.org>
* progmodes/gdb-mi.el (gdb): Revert previous change.
(gdb-inferior-io--init-proc): New function.
(gdb-init-1): Use it.
(gdb-inferior-io-sentinel): New sentinel for the gdb-inferior pty,
responsible for allocating a new pty and hooking it to gdb when
the old pty gets an EIO due to process exit.
(gdb-delchar-or-quit): New command. Bind it in gdb-mi buffers.
(gdb-tooltip-print): Don't use obsolete tooltip-use-echo-area.
(gdb-inferior-io--maybe-delete-pty): Move into gdb-reset.
2012-04-20 Eli Zaretskii <eliz@gnu.org>
* window.el (window-min-size, window-sizable, window-min-delta)
(window-max-delta, window--resizable, window-resizable)
(window-total-size, window-full-height-p, window-full-width-p)
(window-in-direction, window--resize-mini-window, window-resize)
(window--resize-child-windows-normal)
(window--resize-child-windows, window--resize-siblings)
(window--resize-this-window, adjust-window-trailing-edge)
(enlarge-window, shrink-window): Doc fixes.
2012-04-20 Chong Yidong <cyd@gnu.org>
* progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): New
function to call delete-process on the gdb-inferior buffer's pty.
(gdb-reset): Use it, instead of relying on kill-buffer to kill the
pty process (Bug#11273).
(gdb-update): New arg to suppress talking to the gdb process.
(gdb-done-or-error): Use it.
(gdb-stopped-functions): Rename from gdb-stopped-hooks.
(gdb): Call gdb-inferior-io--maybe-delete-pty as a workaround for
sentinel not being called.
* comint.el (make-comint-in-buffer, comint-exec): Doc fix.
* progmodes/grep.el (grep, rgrep): Doc fix (Bug#11268).
2012-04-20 Glenn Morris <rgm@gnu.org>
* net/network-stream.el (open-network-stream): Doc fix.
2012-04-20 Chong Yidong <cyd@gnu.org>
* emacs-lisp/tabulated-list.el (tabulated-list-print): Fix typos.
2012-04-20 Alan Mackenzie <acm@muc.de>
Ensure searching for keywords is case sensitive.
* progmodes/cc-cmds.el (c-electric-brace, c-electric-lt-gt)
(c-electric-paren, c-beginning-of-defun, c-end-of-defun)
(c-defun-name, c-mark-function, c-cpp-define-name)
(c-comment-indent, c-scan-conditionals, c-indent-defun)
(c-context-line-break): Bind case-fold-search to nil.
* progmodes/cc-mode.el (c-font-lock-fontify-region): Bind
case-fold-search to nil.
2012-04-20 Chong Yidong <cyd@gnu.org>
* mail/sendmail.el (mail-bury): Call return action with the right
Rmail buffer (Bug#11242).
* server.el (server-process-filter): Handle corner case where both
tty and nowait options are present (Bug#11102).
2012-04-20 Eli Zaretskii <eliz@gnu.org> 2012-04-20 Eli Zaretskii <eliz@gnu.org>
* version.el (emacs-bzr-version, emacs-bzr-get-version): Doc fixes. * version.el (emacs-bzr-version, emacs-bzr-get-version): Doc fixes.

View file

@ -78,7 +78,7 @@ introduced by a `%' character in a control string."
(cond ((eq battery-status-function 'battery-linux-proc-acpi) (cond ((eq battery-status-function 'battery-linux-proc-acpi)
"Power %L, battery %B at %r (%p%% load, remaining time %t)") "Power %L, battery %B at %r (%p%% load, remaining time %t)")
((eq battery-status-function 'battery-linux-sysfs) ((eq battery-status-function 'battery-linux-sysfs)
"Power %L, battery %B (%p%% load)") "Power %L, battery %B (%p%% load, remaining time %t)")
((eq battery-status-function 'battery-pmset) ((eq battery-status-function 'battery-pmset)
"%L power, battery %B (%p%% load, remaining time %t)") "%L power, battery %B (%p%% load, remaining time %t)")
(battery-status-function (battery-status-function
@ -509,7 +509,7 @@ The following %-sequences are provided:
"N/A")) "N/A"))
(cons ?d (or temperature "N/A")) (cons ?d (or temperature "N/A"))
(cons ?B (or charging-state "N/A")) (cons ?B (or charging-state "N/A"))
(cons ?p (cond ((> charge-full 0) (cons ?p (cond ((and (> charge-full 0) (> charge-now 0))
(format "%.1f" (format "%.1f"
(/ (* 100 charge-now) charge-full))) (/ (* 100 charge-now) charge-full)))
((> energy-full 0) ((> energy-full 0)

View file

@ -699,16 +699,21 @@ BUFFER can be either a buffer or the name of one."
(defun make-comint-in-buffer (name buffer program &optional startfile &rest switches) (defun make-comint-in-buffer (name buffer program &optional startfile &rest switches)
"Make a Comint process NAME in BUFFER, running PROGRAM. "Make a Comint process NAME in BUFFER, running PROGRAM.
If BUFFER is nil, it defaults to NAME surrounded by `*'s. If BUFFER is nil, it defaults to NAME surrounded by `*'s.
PROGRAM should be either a string denoting an executable program to create If there is a running process in BUFFER, it is not restarted.
via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting
a TCP connection to be opened via `open-network-stream'. If there is already PROGRAM should be one of the following:
a running process in that buffer, it is not restarted. Optional fourth arg - a string, denoting an executable program to create via
STARTFILE is the name of a file, whose contents are sent to the `start-file-process'
process as its initial input. - a cons pair of the form (HOST . SERVICE), denoting a TCP
connection to be opened via `open-network-stream'
- nil, denoting a newly-allocated pty.
Optional fourth arg STARTFILE is the name of a file, whose
contents are sent to the process as its initial input.
If PROGRAM is a string, any more args are arguments to PROGRAM. If PROGRAM is a string, any more args are arguments to PROGRAM.
Returns the (possibly newly created) process buffer." Return the (possibly newly created) process buffer."
(or (fboundp 'start-file-process) (or (fboundp 'start-file-process)
(error "Multi-processing is not supported for this system")) (error "Multi-processing is not supported for this system"))
(setq buffer (get-buffer-create (or buffer (concat "*" name "*")))) (setq buffer (get-buffer-create (or buffer (concat "*" name "*"))))
@ -752,9 +757,18 @@ See `make-comint' and `comint-exec'."
(defun comint-exec (buffer name command startfile switches) (defun comint-exec (buffer name command startfile switches)
"Start up a process named NAME in buffer BUFFER for Comint modes. "Start up a process named NAME in buffer BUFFER for Comint modes.
Runs the given COMMAND with SWITCHES, and initial input from STARTFILE. Runs the given COMMAND with SWITCHES, and initial input from STARTFILE.
Blasts any old process running in the buffer. Doesn't set the buffer mode.
You can use this to cheaply run a series of processes in the same Comint COMMAND should be one of the following:
buffer. The hook `comint-exec-hook' is run after each exec." - a string, denoting an executable program to create via
`start-file-process'
- a cons pair of the form (HOST . SERVICE), denoting a TCP
connection to be opened via `open-network-stream'
- nil, denoting a newly-allocated pty.
This function blasts any old process running in the buffer, and
does not set the buffer mode. You can use this to cheaply run a
series of processes in the same Comint buffer. The hook
`comint-exec-hook' is run after each exec."
(with-current-buffer buffer (with-current-buffer buffer
(let ((proc (get-buffer-process buffer))) ; Blast any old process. (let ((proc (get-buffer-process buffer))) ; Blast any old process.
(if proc (delete-process proc))) (if proc (delete-process proc)))

View file

@ -215,7 +215,7 @@ buffer and inserts the entries with `tabulated-list-printer'.
Optional argument REMEMBER-POS, if non-nil, means to move point Optional argument REMEMBER-POS, if non-nil, means to move point
to the entry with the same ID element as the current line." to the entry with the same ID element as the current line."
(let ((inhibit-read-only t) (let ((inhibit-read-only t)
(entries (if (functionp 'tabulated-list-entries) (entries (if (functionp tabulated-list-entries)
(funcall tabulated-list-entries) (funcall tabulated-list-entries)
tabulated-list-entries)) tabulated-list-entries))
entry-id saved-pt saved-col) entry-id saved-pt saved-col)
@ -246,7 +246,7 @@ to the entry with the same ID element as the current line."
(setq entries (sort entries sorter)) (setq entries (sort entries sorter))
(if (cdr tabulated-list-sort-key) (if (cdr tabulated-list-sort-key)
(setq entries (nreverse entries))) (setq entries (nreverse entries)))
(unless (functionp 'tabulated-list-entries) (unless (functionp tabulated-list-entries)
(setq tabulated-list-entries entries))))) (setq tabulated-list-entries entries)))))
;; Print the resulting list. ;; Print the resulting list.
(dolist (elt entries) (dolist (elt entries)

View file

@ -125,9 +125,8 @@ values:
certificate. This parameter will only be used when doing TLS certificate. This parameter will only be used when doing TLS
or STARTTLS connections. or STARTTLS connections.
If :use-starttls-if-possible is non-nil, do opportunistic :use-starttls-if-possible is a boolean that says to do opportunistic
STARTTLS upgrades even if Emacs doesn't have built-in TLS STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality.
functionality.
:nowait is a boolean that says the connection should be made :nowait is a boolean that says the connection should be made
asynchronously, if possible." asynchronously, if possible."

View file

@ -679,7 +679,7 @@ settings of `c-cleanup-list' are done."
;; We want to inhibit blinking the paren since this would be ;; We want to inhibit blinking the paren since this would be
;; most disruptive. We'll blink it ourselves later on. ;; most disruptive. We'll blink it ourselves later on.
(old-blink-paren blink-paren-function) (old-blink-paren blink-paren-function)
blink-paren-function) blink-paren-function case-fold-search)
(c-save-buffer-state () (c-save-buffer-state ()
(setq safepos (c-safe-position (point) (c-parse-state)) (setq safepos (c-safe-position (point) (c-parse-state))
@ -1086,7 +1086,7 @@ numeric argument is supplied, or the point is inside a literal."
(interactive "*P") (interactive "*P")
(let ((c-echo-syntactic-information-p nil) (let ((c-echo-syntactic-information-p nil)
final-pos close-paren-inserted found-delim) final-pos close-paren-inserted found-delim case-fold-search)
(self-insert-command (prefix-numeric-value arg)) (self-insert-command (prefix-numeric-value arg))
(setq final-pos (point)) (setq final-pos (point))
@ -1172,7 +1172,8 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'."
(interactive "*P") (interactive "*P")
(let ((literal (c-save-buffer-state () (c-in-literal))) (let ((literal (c-save-buffer-state () (c-in-literal)))
;; shut this up ;; shut this up
(c-echo-syntactic-information-p nil)) (c-echo-syntactic-information-p nil)
case-fold-search)
(self-insert-command (prefix-numeric-value arg)) (self-insert-command (prefix-numeric-value arg))
(if (and (not arg) (not literal)) (if (and (not arg) (not literal))
@ -1585,7 +1586,7 @@ defun."
; structure with other users of c-state-cache. ; structure with other users of c-state-cache.
(orig-point-min (point-min)) (orig-point-max (point-max)) (orig-point-min (point-min)) (orig-point-max (point-max))
lim ; Position of { which has been widened to. lim ; Position of { which has been widened to.
where pos) where pos case-fold-search)
(save-restriction (save-restriction
(if (eq c-defun-tactic 'go-outward) (if (eq c-defun-tactic 'go-outward)
@ -1709,7 +1710,8 @@ the open-parenthesis that starts a defun; see `beginning-of-defun'."
; structure with other users of c-state-cache. ; structure with other users of c-state-cache.
(orig-point-min (point-min)) (orig-point-max (point-max)) (orig-point-min (point-min)) (orig-point-max (point-max))
lim lim
where pos) where pos case-fold-search)
(save-restriction (save-restriction
(if (eq c-defun-tactic 'go-outward) (if (eq c-defun-tactic 'go-outward)
(setq lim (c-widen-to-enclosing-decl-scope ; e.g. class, namespace (setq lim (c-widen-to-enclosing-decl-scope ; e.g. class, namespace
@ -1769,8 +1771,8 @@ with a brace block."
(interactive) (interactive)
(c-save-buffer-state (c-save-buffer-state
(beginning-of-defun-function end-of-defun-function (beginning-of-defun-function end-of-defun-function
where pos name-end) where pos name-end case-fold-search)
(save-restriction (save-restriction
(widen) (widen)
(save-excursion (save-excursion
@ -1969,7 +1971,7 @@ As opposed to \\[c-beginning-of-defun] and \\[c-end-of-defun], this
function does not require the declaration to contain a brace block." function does not require the declaration to contain a brace block."
(interactive) (interactive)
(let (decl-limits) (let (decl-limits case-fold-search)
(c-save-buffer-state nil (c-save-buffer-state nil
;; We try to be line oriented, unless there are several ;; We try to be line oriented, unless there are several
;; declarations on the same line. ;; declarations on the same line.
@ -2001,11 +2003,12 @@ function does not require the declaration to contain a brace block."
(defun c-cpp-define-name () (defun c-cpp-define-name ()
"Return the name of the current CPP macro, or NIL if we're not in one." "Return the name of the current CPP macro, or NIL if we're not in one."
(interactive) (interactive)
(save-excursion (let (case-fold-search)
(and c-opt-cpp-macro-define-start (save-excursion
(c-beginning-of-macro) (and c-opt-cpp-macro-define-start
(looking-at c-opt-cpp-macro-define-start) (c-beginning-of-macro)
(match-string-no-properties 1)))) (looking-at c-opt-cpp-macro-define-start)
(match-string-no-properties 1)))))
;; Movement by statements. ;; Movement by statements.
@ -2888,7 +2891,8 @@ See `c-indent-comment-alist' for a description."
(eq (match-end 0) eot)) (eq (match-end 0) eot))
'cpp-end-block) 'cpp-end-block)
(t (t
'other)))) 'other)))
case-fold-search)
(if (and (memq line-type '(anchored-comment empty-line)) (if (and (memq line-type '(anchored-comment empty-line))
c-indent-comments-syntactically-p) c-indent-comments-syntactically-p)
(let ((c-syntactic-context (c-guess-basic-syntax))) (let ((c-syntactic-context (c-guess-basic-syntax)))
@ -3024,7 +3028,7 @@ are treated as conditional clause limits. Normally they are ignored."
(let* ((forward (> count 0)) (let* ((forward (> count 0))
(increment (if forward -1 1)) (increment (if forward -1 1))
(search-function (if forward 're-search-forward 're-search-backward)) (search-function (if forward 're-search-forward 're-search-backward))
new) new case-fold-search)
(unless (integerp target-depth) (unless (integerp target-depth)
(setq target-depth (if target-depth -1 0))) (setq target-depth (if target-depth -1 0)))
(save-excursion (save-excursion
@ -3226,7 +3230,7 @@ balanced expression is found."
In the macro case this also has the effect of realigning any line In the macro case this also has the effect of realigning any line
continuation backslashes, unless `c-auto-align-backslashes' is nil." continuation backslashes, unless `c-auto-align-backslashes' is nil."
(interactive "*") (interactive "*")
(let ((here (point-marker)) decl-limits) (let ((here (point-marker)) decl-limits case-fold-search)
(unwind-protect (unwind-protect
(progn (progn
(c-save-buffer-state nil (c-save-buffer-state nil
@ -4638,7 +4642,8 @@ inside a preprocessor directive."
(interactive "*") (interactive "*")
(let* (c-lit-limits c-lit-type (let* (c-lit-limits c-lit-type
(c-macro-start c-macro-start)) (c-macro-start c-macro-start)
case-fold-search)
(c-save-buffer-state () (c-save-buffer-state ()
(setq c-lit-limits (c-literal-limits nil nil t) (setq c-lit-limits (c-literal-limits nil nil t)

View file

@ -1170,10 +1170,10 @@ Note that the style variables are always made local to the buffer."
;; ;;
;; ;;
;; void myfunc(T* p) {} ;; void myfunc(T* p) {}
;; ;;
;; Type a space in the first blank line, and the fontification of the next ;; Type a space in the first blank line, and the fontification of the next
;; line was fouled up by context fontification. ;; line was fouled up by context fontification.
(let ((new-beg beg) (new-end end) new-region) (let ((new-beg beg) (new-end end) new-region case-fold-search)
(if c-in-after-change-fontification (if c-in-after-change-fontification
(setq c-in-after-change-fontification nil) (setq c-in-after-change-fontification nil)
(save-restriction (save-restriction

View file

@ -375,9 +375,8 @@ Emacs always switches to the thread which caused the stop."
:version "23.2" :version "23.2"
:link '(info-link "(gdb)GDB/MI Async Records")) :link '(info-link "(gdb)GDB/MI Async Records"))
(defcustom gdb-stopped-hooks nil (defcustom gdb-stopped-functions nil
"This variable holds a list of functions to be called whenever "List of functions called whenever GDB stops.
GDB stops.
Each function takes one argument, a parsed MI response, which Each function takes one argument, a parsed MI response, which
contains fields of corresponding MI *stopped async record: contains fields of corresponding MI *stopped async record:
@ -818,6 +817,8 @@ detailed description of this mode.
nil 'local) nil 'local)
(local-set-key "\C-i" 'completion-at-point) (local-set-key "\C-i" 'completion-at-point)
(local-set-key [remap comint-delchar-or-maybe-eof] 'gdb-delchar-or-quit)
(setq gdb-first-prompt t) (setq gdb-first-prompt t)
(setq gud-running nil) (setq gud-running nil)
@ -859,15 +860,8 @@ detailed description of this mode.
(gdb-get-buffer-create 'gdb-inferior-io) (gdb-get-buffer-create 'gdb-inferior-io)
(gdb-clear-inferior-io) (gdb-clear-inferior-io)
(set-process-filter (get-process "gdb-inferior") 'gdb-inferior-filter) (gdb-inferior-io--init-proc (get-process "gdb-inferior"))
(gdb-input
;; Needs GDB 6.4 onwards
(concat "-inferior-tty-set "
(or
;; The process can run on a remote host.
(process-get (get-process "gdb-inferior") 'remote-tty)
(process-tty-name (get-process "gdb-inferior"))))
'ignore)
(if (eq window-system 'w32) (if (eq window-system 'w32)
(gdb-input "-gdb-set new-console off" 'ignore)) (gdb-input "-gdb-set new-console off" 'ignore))
(gdb-input "-gdb-set height 0" 'ignore) (gdb-input "-gdb-set height 0" 'ignore)
@ -905,6 +899,25 @@ detailed description of this mode.
(setq gdb-non-stop nil) (setq gdb-non-stop nil)
(gdb-input "-gdb-set non-stop 0" 'ignore))) (gdb-input "-gdb-set non-stop 0" 'ignore)))
(defun gdb-delchar-or-quit (arg)
"Delete ARG characters or send a quit command to GDB.
Send a quit only if point is at the end of the buffer, there is
no input, and GDB is waiting for input."
(interactive "p")
(unless (and (eq (current-buffer) gud-comint-buffer)
(eq gud-minor-mode 'gdbmi))
(error "Not in a GDB-MI buffer"))
(let ((proc (get-buffer-process gud-comint-buffer)))
(if (and (eobp) proc (process-live-p proc)
(not gud-running)
(= (point) (marker-position (process-mark proc))))
;; Sending an EOF does not work with GDB-MI; submit an
;; explicit quit command.
(progn
(insert "quit")
(comint-send-input t t))
(delete-char arg))))
(defvar gdb-define-alist nil "Alist of #define directives for GUD tooltips.") (defvar gdb-define-alist nil "Alist of #define directives for GUD tooltips.")
(defun gdb-create-define-alist () (defun gdb-create-define-alist ()
@ -929,7 +942,6 @@ detailed description of this mode.
(push (cons name define) gdb-define-alist)))) (push (cons name define) gdb-define-alist))))
(declare-function tooltip-show "tooltip" (text &optional use-echo-area)) (declare-function tooltip-show "tooltip" (text &optional use-echo-area))
(defvar tooltip-use-echo-area)
(defun gdb-tooltip-print (expr) (defun gdb-tooltip-print (expr)
(with-current-buffer (gdb-get-buffer 'gdb-partial-output-buffer) (with-current-buffer (gdb-get-buffer 'gdb-partial-output-buffer)
@ -937,7 +949,7 @@ detailed description of this mode.
(if (re-search-forward ".*value=\\(\".*\"\\)" nil t) (if (re-search-forward ".*value=\\(\".*\"\\)" nil t)
(tooltip-show (tooltip-show
(concat expr " = " (read (match-string 1))) (concat expr " = " (read (match-string 1)))
(or gud-tooltip-echo-area tooltip-use-echo-area (or gud-tooltip-echo-area
(not (display-graphic-p))))))) (not (display-graphic-p)))))))
;; If expr is a macro for a function don't print because of possible dangerous ;; If expr is a macro for a function don't print because of possible dangerous
@ -1510,6 +1522,31 @@ DOC is an optional documentation string."
(gdb-display-buffer (gdb-display-buffer
(gdb-get-buffer-create 'gdb-inferior-io) t)) (gdb-get-buffer-create 'gdb-inferior-io) t))
(defun gdb-inferior-io--init-proc (proc)
;; Set up inferior I/O. Needs GDB 6.4 onwards.
(set-process-filter proc 'gdb-inferior-filter)
(set-process-sentinel proc 'gdb-inferior-io-sentinel)
(gdb-input
(concat "-inferior-tty-set "
;; The process can run on a remote host.
(or (process-get proc 'remote-tty)
(process-tty-name proc)))
'ignore))
(defun gdb-inferior-io-sentinel (proc str)
(when (eq (process-status proc) 'failed)
;; When the debugged process exits, Emacs gets an EIO error on
;; read from the pty, and stops listening to it. If the gdb
;; process is still running, remove the pty, make a new one, and
;; pass it to gdb.
(let ((gdb-proc (get-buffer-process gud-comint-buffer))
(io-buffer (process-buffer proc)))
(when (and gdb-proc (process-live-p gdb-proc)
(buffer-live-p io-buffer))
;; `comint-exec' deletes the original process as a side effect.
(comint-exec io-buffer "gdb-inferior" nil nil nil)
(gdb-inferior-io--init-proc (get-buffer-process io-buffer))))))
(defconst gdb-frame-parameters (defconst gdb-frame-parameters
'((height . 14) (width . 80) '((height . 14) (width . 80)
(unsplittable . t) (unsplittable . t)
@ -1746,24 +1783,27 @@ If `gdb-thread-number' is nil, just wrap NAME in asterisks."
(setq gdb-output-sink 'user) (setq gdb-output-sink 'user)
(setq gdb-pending-triggers nil)) (setq gdb-pending-triggers nil))
(defun gdb-update () (defun gdb-update (&optional no-proc)
"Update buffers showing status of debug session." "Update buffers showing status of debug session.
If NO-PROC is non-nil, do not try to contact the GDB process."
(when gdb-first-prompt (when gdb-first-prompt
(gdb-force-mode-line-update (gdb-force-mode-line-update
(propertize "initializing..." 'face font-lock-variable-name-face)) (propertize "initializing..." 'face font-lock-variable-name-face))
(gdb-init-1) (gdb-init-1)
(setq gdb-first-prompt nil)) (setq gdb-first-prompt nil))
(gdb-get-main-selected-frame) (unless no-proc
(gdb-get-main-selected-frame))
;; We may need to update gdb-threads-list so we can use ;; We may need to update gdb-threads-list so we can use
(gdb-get-buffer-create 'gdb-threads-buffer) (gdb-get-buffer-create 'gdb-threads-buffer)
;; gdb-break-list is maintained in breakpoints handler ;; gdb-break-list is maintained in breakpoints handler
(gdb-get-buffer-create 'gdb-breakpoints-buffer) (gdb-get-buffer-create 'gdb-breakpoints-buffer)
(gdb-emit-signal gdb-buf-publisher 'update) (unless no-proc
(gdb-emit-signal gdb-buf-publisher 'update))
(gdb-get-changed-registers) (gdb-get-changed-registers)
(when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
(dolist (var gdb-var-list) (dolist (var gdb-var-list)
(setcar (nthcdr 5 var) nil)) (setcar (nthcdr 5 var) nil))
@ -2045,7 +2085,7 @@ current thread and update GDB buffers."
;; In all-stop this updates gud-running properly as well. ;; In all-stop this updates gud-running properly as well.
(gdb-update) (gdb-update)
(setq gdb-first-done-or-error nil)) (setq gdb-first-done-or-error nil))
(run-hook-with-args 'gdb-stopped-hooks result))) (run-hook-with-args 'gdb-stopped-functions result)))
;; Remove the trimmings from log stream containing debugging messages ;; Remove the trimmings from log stream containing debugging messages
;; being produced by GDB's internals, use warning face and send to GUD ;; being produced by GDB's internals, use warning face and send to GUD
@ -2085,23 +2125,28 @@ current thread and update GDB buffers."
(setq gdb-output-sink 'emacs)) (setq gdb-output-sink 'emacs))
(gdb-clear-partial-output) (gdb-clear-partial-output)
(when gdb-first-done-or-error
(unless (or token-number gud-running)
(setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name)))
(gdb-update)
(setq gdb-first-done-or-error nil))
(setq gdb-filter-output ;; The process may already be dead (e.g. C-d at the gdb prompt).
(gdb-concat-output gdb-filter-output output-field)) (let* ((proc (get-buffer-process gud-comint-buffer))
(no-proc (or (null proc)
(memq (process-status proc) '(exit signal)))))
(if token-number (when gdb-first-done-or-error
(progn (unless (or token-number gud-running no-proc)
(with-current-buffer (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name)))
(gdb-get-buffer-create 'gdb-partial-output-buffer) (gdb-update no-proc)
(funcall (setq gdb-first-done-or-error nil))
(cdr (assoc (string-to-number token-number) gdb-handler-alist))))
(setq gdb-handler-alist (setq gdb-filter-output
(assq-delete-all token-number gdb-handler-alist))))) (gdb-concat-output gdb-filter-output output-field))
(when token-number
(with-current-buffer
(gdb-get-buffer-create 'gdb-partial-output-buffer)
(funcall
(cdr (assoc (string-to-number token-number) gdb-handler-alist))))
(setq gdb-handler-alist
(assq-delete-all token-number gdb-handler-alist)))))
(defun gdb-concat-output (so-far new) (defun gdb-concat-output (so-far new)
(cond (cond
@ -4105,9 +4150,15 @@ This arrangement depends on the value of `gdb-many-windows'."
(gud-find-file gdb-main-file))) (gud-find-file gdb-main-file)))
(setq gdb-source-window win))))) (setq gdb-source-window win)))))
;; Called from `gud-sentinel' in gud.el:
(defun gdb-reset () (defun gdb-reset ()
"Exit a debugging session cleanly. "Exit a debugging session cleanly.
Kills the gdb buffers, and resets variables and the source buffers." Kills the gdb buffers, and resets variables and the source buffers."
;; The gdb-inferior buffer has a pty hooked up to the main gdb
;; process. This pty must be deleted explicitly.
(let ((pty (get-process "gdb-inferior")))
(if pty (delete-process pty)))
;; Find gdb-mi buffers and kill them.
(dolist (buffer (buffer-list)) (dolist (buffer (buffer-list))
(unless (eq buffer gud-comint-buffer) (unless (eq buffer gud-comint-buffer)
(with-current-buffer buffer (with-current-buffer buffer

View file

@ -728,9 +728,9 @@ This function is called from `compilation-filter-hook'."
(defun grep (command-args) (defun grep (command-args)
"Run grep, with user-specified args, and collect output in a buffer. "Run grep, with user-specified args, and collect output in a buffer.
While grep runs asynchronously, you can use \\[next-error] (M-x next-error), While grep runs asynchronously, you can use \\[next-error] (M-x next-error),
or \\<grep-mode-map>\\[compile-goto-error] in the grep \ or \\<grep-mode-map>\\[compile-goto-error] in the *grep* \
output buffer, to go to the lines where grep buffer, to go to the lines where grep found
found matches. matches. To kill the grep job before it finishes, type \\[kill-compilation].
For doing a recursive `grep', see the `rgrep' command. For running For doing a recursive `grep', see the `rgrep' command. For running
`grep' in a specific directory, see `lgrep'. `grep' in a specific directory, see `lgrep'.
@ -957,10 +957,11 @@ With \\[universal-argument] prefix, you can edit the constructed shell command l
before it is executed. before it is executed.
With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'. With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'.
Collect output in a buffer. While find runs asynchronously, you Collect output in a buffer. While the recursive grep is running,
can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \ you can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \
in the grep output buffer, in the grep output buffer,
to go to the lines where grep found matches. to visit the lines where matches were found. To kill the job
before it finishes, type \\[kill-compilation].
This command shares argument histories with \\[lgrep] and \\[grep-find]. This command shares argument histories with \\[lgrep] and \\[grep-find].

View file

@ -1174,6 +1174,13 @@ The following commands are accepted by the client:
;; Unknown command. ;; Unknown command.
(arg (error "Unknown command: %s" arg)))) (arg (error "Unknown command: %s" arg))))
;; If both -no-wait and -tty are given with file or sexp
;; arguments, use an existing frame.
(and nowait
(not (eq tty-name 'window-system))
(or files commands)
(setq use-current-frame t))
(setq frame (setq frame
(cond (cond
((and use-current-frame ((and use-current-frame

View file

@ -1888,8 +1888,7 @@ Used from `delayed-warnings-hook' (which see)."
(push warning collapsed))) (push warning collapsed)))
(setq delayed-warnings-list (nreverse collapsed)))) (setq delayed-warnings-list (nreverse collapsed))))
;; At present this is only really useful for Emacs internals. ;; At present this is only used for Emacs internals.
;; Document in the lispref if it becomes generally useful.
;; Ref http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00085.html ;; Ref http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00085.html
(defvar delayed-warnings-hook '(collapse-delayed-warnings (defvar delayed-warnings-hook '(collapse-delayed-warnings
display-delayed-warnings) display-delayed-warnings)
@ -2308,6 +2307,8 @@ is nil and `use-dialog-box' is non-nil."
(discard-input)))) (discard-input))))
(let ((ret (eq answer 'act))) (let ((ret (eq answer 'act)))
(unless noninteractive (unless noninteractive
;; FIXME this prints one too many spaces, since prompt
;; already ends in a space. Eg "... (y or n) y".
(message "%s %s" prompt (if ret "y" "n"))) (message "%s %s" prompt (if ret "y" "n")))
ret))) ret)))

View file

@ -514,17 +514,19 @@ window).")
(if (window-valid-p ignore) (eq window ignore) ignore)) (if (window-valid-p ignore) (eq window ignore) ignore))
(defun window-min-size (&optional window horizontal ignore) (defun window-min-size (&optional window horizontal ignore)
"Return the minimum number of lines of WINDOW. "Return the minimum size of WINDOW.
WINDOW can be an arbitrary window and defaults to the selected WINDOW can be an arbitrary window and defaults to the selected
one. Optional argument HORIZONTAL non-nil means return the one. Optional argument HORIZONTAL non-nil means return the
minimum number of columns of WINDOW. minimum number of columns of WINDOW; otherwise return the minimum
number of WINDOW's lines.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE, if non-nil, means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE equal `safe' means live `window-min-width' settings. If IGNORE equals `safe', live
windows may get as small as `window-safe-min-height' lines and windows may get as small as `window-safe-min-height' lines and
`window-safe-min-width' columns. IGNORE a window means ignore `window-safe-min-width' columns. If IGNORE is a window, ignore
restrictions for that window only." restrictions for that window only. Any other non-nil value
means ignore all of the above restrictions for all windows."
(window--min-size-1 (window--min-size-1
(window-normalize-window window) horizontal ignore)) (window-normalize-window window) horizontal ignore))
@ -614,12 +616,13 @@ columns. If WINDOW cannot be shrunk by -DELTA lines or columns,
return the minimum value in the range DELTA..0 by which WINDOW return the minimum value in the range DELTA..0 by which WINDOW
can be shrunk. can be shrunk.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE equal `safe' means live `window-min-width' settings. If IGNORE equals `safe', live
windows may get as small as `window-safe-min-height' lines and windows may get as small as `window-safe-min-height' lines and
`window-safe-min-width' columns. IGNORE any window means ignore `window-safe-min-width' columns. If IGNORE is a window, ignore
restrictions for that window only." restrictions for that window only. Any other non-nil value means
ignore all of the above restrictions for all windows."
(setq window (window-normalize-window window)) (setq window (window-normalize-window window))
(cond (cond
((< delta 0) ((< delta 0)
@ -734,20 +737,21 @@ window. Return zero if WINDOW cannot be shrunk.
Optional argument HORIZONTAL non-nil means return number of Optional argument HORIZONTAL non-nil means return number of
columns by which WINDOW can be shrunk. columns by which WINDOW can be shrunk.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE a window means ignore `window-min-width' settings. If IGNORE is a window, ignore
restrictions for that window only. IGNORE equal `safe' means restrictions for that window only. If IGNORE equals `safe',
live windows may get as small as `window-safe-min-height' lines live windows may get as small as `window-safe-min-height' lines
and `window-safe-min-width' columns. and `window-safe-min-width' columns. Any other non-nil value
means ignore all of the above restrictions for all windows.
Optional argument TRAIL `before' means only windows to the left Optional argument TRAIL restricts the windows that can be enlarged.
of or above WINDOW can be enlarged. Optional argument TRAIL If its value is `before', only windows to the left of or above WINDOW
`after' means only windows to the right of or below WINDOW can be can be enlarged. If it is `after', only windows to the right of or
enlarged. below WINDOW can be enlarged.
Optional argument NOUP non-nil means don't go up in the window Optional argument NOUP non-nil means don't go up in the window
tree but try to enlarge windows within WINDOW's combination only. tree, but try to enlarge windows within WINDOW's combination only.
Optional argument NODOWN non-nil means don't check whether WINDOW Optional argument NODOWN non-nil means don't check whether WINDOW
itself (and its child windows) can be shrunk; check only whether itself (and its child windows) can be shrunk; check only whether
@ -808,24 +812,25 @@ at least one other window can be enlarged appropriately."
(window--max-delta-1 parent delta horizontal ignore trail)))))) (window--max-delta-1 parent delta horizontal ignore trail))))))
(defun window-max-delta (&optional window horizontal ignore trail noup nodown) (defun window-max-delta (&optional window horizontal ignore trail noup nodown)
"Return maximum number of lines WINDOW by which WINDOW can be enlarged. "Return maximum number of lines by which WINDOW can be enlarged.
WINDOW can be an arbitrary window and defaults to the selected WINDOW can be an arbitrary window and defaults to the selected
window. The return value is zero if WINDOW cannot be enlarged. window. The return value is zero if WINDOW cannot be enlarged.
Optional argument HORIZONTAL non-nil means return maximum number Optional argument HORIZONTAL non-nil means return maximum number
of columns by which WINDOW can be enlarged. of columns by which WINDOW can be enlarged.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE a window means ignore `window-min-width' settings. If IGNORE is a window, ignore
restrictions for that window only. IGNORE equal `safe' means restrictions for that window only. If IGNORE equals `safe',
live windows may get as small as `window-safe-min-height' lines live windows may get as small as `window-safe-min-height' lines
and `window-safe-min-width' columns. and `window-safe-min-width' columns. Any other non-nil value means
ignore all of the above restrictions for all windows.
Optional argument TRAIL `before' means only windows to the left Optional argument TRAIL restricts the windows that can be enlarged.
of or below WINDOW can be shrunk. Optional argument TRAIL If its value is `before', only windows to the left of or above WINDOW
`after' means only windows to the right of or above WINDOW can be can be enlarged. If it is `after', only windows to the right of or
shrunk. below WINDOW can be enlarged.
Optional argument NOUP non-nil means don't go up in the window Optional argument NOUP non-nil means don't go up in the window
tree but try to obtain the entire space from windows within tree but try to obtain the entire space from windows within
@ -860,12 +865,13 @@ columns. If WINDOW cannot be shrunk by -DELTA lines or columns,
return the minimum value in the range DELTA..0 that can be used return the minimum value in the range DELTA..0 that can be used
for shrinking WINDOW. for shrinking WINDOW.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE a window means ignore `window-min-width' settings. If IGNORE is a window, ignore
restrictions for that window only. IGNORE equal `safe' means restrictions for that window only. If IGNORE equals `safe',
live windows may get as small as `window-safe-min-height' lines live windows may get as small as `window-safe-min-height' lines
and `window-safe-min-width' columns. and `window-safe-min-width' columns. Any other non-nil value
means ignore all of the above restrictions for all windows.
Optional argument TRAIL `before' means only windows to the left Optional argument TRAIL `before' means only windows to the left
of or below WINDOW can be shrunk. Optional argument TRAIL of or below WINDOW can be shrunk. Optional argument TRAIL
@ -916,17 +922,18 @@ columns. If WINDOW cannot be shrunk by -DELTA lines or columns,
return the minimum value in the range DELTA..0 that can be used return the minimum value in the range DELTA..0 that can be used
for shrinking WINDOW. for shrinking WINDOW.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE a window means ignore `window-min-width' settings. If IGNORE is a window, ignore
restrictions for that window only. IGNORE equal `safe' means restrictions for that window only. If IGNORE equals `safe',
live windows may get as small as `window-safe-min-height' lines live windows may get as small as `window-safe-min-height' lines
and `window-safe-min-width' columns." and `window-safe-min-width' columns. Any other non-nil value
means ignore all of the above restrictions for all windows."
(setq window (window-normalize-window window)) (setq window (window-normalize-window window))
(window--resizable window delta horizontal ignore)) (window--resizable window delta horizontal ignore))
(defun window-total-size (&optional window horizontal) (defun window-total-size (&optional window horizontal)
"Return the total height or width of window WINDOW. "Return the total height or width of WINDOW.
If WINDOW is omitted or nil, it defaults to the selected window. If WINDOW is omitted or nil, it defaults to the selected window.
If HORIZONTAL is omitted or nil, return the total height of If HORIZONTAL is omitted or nil, return the total height of
@ -941,7 +948,7 @@ the total width, in columns, like `window-total-width'."
;; See discussion in bug#4543. ;; See discussion in bug#4543.
(defun window-full-height-p (&optional window) (defun window-full-height-p (&optional window)
"Return t if WINDOW is as high as the containing frame. "Return t if WINDOW is as high as its containing frame.
More precisely, return t if and only if the total height of More precisely, return t if and only if the total height of
WINDOW equals the total height of the root window of WINDOW's WINDOW equals the total height of the root window of WINDOW's
frame. WINDOW can be any window and defaults to the selected frame. WINDOW can be any window and defaults to the selected
@ -951,7 +958,7 @@ one."
(window-total-size (frame-root-window window)))) (window-total-size (frame-root-window window))))
(defun window-full-width-p (&optional window) (defun window-full-width-p (&optional window)
"Return t if WINDOW is as wide as the containing frame. "Return t if WINDOW is as wide as its containing frame.
More precisely, return t if and only if the total width of WINDOW More precisely, return t if and only if the total width of WINDOW
equals the total width of the root window of WINDOW's frame. equals the total width of the root window of WINDOW's frame.
WINDOW can be any window and defaults to the selected one." WINDOW can be any window and defaults to the selected one."
@ -1115,7 +1122,7 @@ SIDE can be any of the symbols `left', `top', `right' or
"Return window in DIRECTION as seen from WINDOW. "Return window in DIRECTION as seen from WINDOW.
DIRECTION must be one of `above', `below', `left' or `right'. DIRECTION must be one of `above', `below', `left' or `right'.
WINDOW must be a live window and defaults to the selected one. WINDOW must be a live window and defaults to the selected one.
IGNORE, when non-nil means a window can be returned even if its IGNORE non-nil means a window can be returned even if its
`no-other-window' parameter is non-nil." `no-other-window' parameter is non-nil."
(setq window (window-normalize-window window t)) (setq window (window-normalize-window window t))
(unless (memq direction '(above below left right)) (unless (memq direction '(above below left right))
@ -1420,7 +1427,7 @@ windows."
(defun window--resize-mini-window (window delta) (defun window--resize-mini-window (window delta)
"Resize minibuffer window WINDOW by DELTA lines. "Resize minibuffer window WINDOW by DELTA lines.
If WINDOW cannot be resized by DELTA lines make it as large (or If WINDOW cannot be resized by DELTA lines make it as large (or
as small) as possible but don't signal an error." as small) as possible, but don't signal an error."
(when (window-minibuffer-p window) (when (window-minibuffer-p window)
(let* ((frame (window-frame window)) (let* ((frame (window-frame window))
(root (frame-root-window frame)) (root (frame-root-window frame))
@ -1461,12 +1468,13 @@ horizontally by DELTA columns. In this case a positive DELTA
means enlarge WINDOW by DELTA columns. DELTA negative means means enlarge WINDOW by DELTA columns. DELTA negative means
WINDOW shall be shrunk by -DELTA columns. WINDOW shall be shrunk by -DELTA columns.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE any window means ignore `window-min-width' settings. If IGNORE is a window, ignore
restrictions for that window only. IGNORE equal `safe' means restrictions for that window only. If IGNORE equals `safe',
live windows may get as small as `window-safe-min-height' lines live windows may get as small as `window-safe-min-height' lines
and `window-safe-min-width' columns. and `window-safe-min-width' columns. Any other non-nil value
means ignore all of the above restrictions for all windows.
This function resizes other windows proportionally and never This function resizes other windows proportionally and never
deletes any windows. If you want to move only the low (right) deletes any windows. If you want to move only the low (right)
@ -1516,9 +1524,9 @@ HORIZONTAL non-nil means set the new normal width of these
windows. WINDOW specifies a child window of PARENT that has been windows. WINDOW specifies a child window of PARENT that has been
resized by THIS-DELTA lines (columns). resized by THIS-DELTA lines (columns).
Optional argument TRAIL either 'before or 'after means set values Optional argument TRAIL either `before' or `after' means set values
for windows before or after WINDOW only. Optional argument only for windows before or after WINDOW. Optional argument
OTHER-DELTA a number specifies that this many lines (columns) OTHER-DELTA, a number, specifies that this many lines (columns)
have been obtained from (or returned to) an ancestor window of have been obtained from (or returned to) an ancestor window of
PARENT in order to resize WINDOW." PARENT in order to resize WINDOW."
(let* ((delta-normal (let* ((delta-normal
@ -1618,12 +1626,13 @@ be a horizontally combined internal window.
WINDOW, if specified, must denote a child window of PARENT that WINDOW, if specified, must denote a child window of PARENT that
is resized by DELTA lines. is resized by DELTA lines.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE equal `safe' means live `window-min-width' settings. If IGNORE equals `safe', live
windows may get as small as `window-safe-min-height' lines and windows may get as small as `window-safe-min-height' lines and
`window-safe-min-width' columns. IGNORE any window means ignore `window-safe-min-width' columns. If IGNORE is a window, ignore
restrictions for that window only. restrictions for that window only. Any other non-nil value means
ignore all of the above restrictions for all windows.
Optional arguments TRAIL and EDGE, when non-nil, restrict the set Optional arguments TRAIL and EDGE, when non-nil, restrict the set
of windows that shall be resized. If TRAIL equals `before', of windows that shall be resized. If TRAIL equals `before',
@ -1790,12 +1799,13 @@ Optional argument HORIZONTAL non-nil means resize other windows
when WINDOW is resized horizontally by DELTA columns. WINDOW when WINDOW is resized horizontally by DELTA columns. WINDOW
itself is not resized by this function. itself is not resized by this function.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE equal `safe' means live `window-min-width' settings. If IGNORE equals `safe', live
windows may get as small as `window-safe-min-height' lines and windows may get as small as `window-safe-min-height' lines and
`window-safe-min-width' columns. IGNORE any window means ignore `window-safe-min-width' columns. If IGNORE is a window, ignore
restrictions for that window only. restrictions for that window only. Any other non-nil value means
ignore all of the above restrictions for all windows.
Optional arguments TRAIL and EDGE, when non-nil, refine the set Optional arguments TRAIL and EDGE, when non-nil, refine the set
of windows that shall be resized. If TRAIL equals `before', of windows that shall be resized. If TRAIL equals `before',
@ -1891,12 +1901,13 @@ preferably only resize windows adjacent to EDGE."
Optional argument HORIZONTAL non-nil means resize WINDOW Optional argument HORIZONTAL non-nil means resize WINDOW
horizontally by DELTA columns. horizontally by DELTA columns.
Optional argument IGNORE non-nil means ignore any restrictions Optional argument IGNORE non-nil means ignore restrictions
imposed by fixed size windows, `window-min-height' or imposed by fixed size windows, `window-min-height' or
`window-min-width' settings. IGNORE equal `safe' means live `window-min-width' settings. If IGNORE equals `safe', live
windows may get as small as `window-safe-min-height' lines and windows may get as small as `window-safe-min-height' lines and
`window-safe-min-width' columns. IGNORE any window means ignore `window-safe-min-width' columns. If IGNORE is a window, ignore
restrictions for that window only. restrictions for that window only. Any other non-nil value
means ignore all of the above restrictions for all windows.
Optional argument ADD non-nil means add DELTA to the new total Optional argument ADD non-nil means add DELTA to the new total
size of WINDOW. size of WINDOW.
@ -1986,7 +1997,7 @@ any windows."
Optional argument HORIZONTAL non-nil means move WINDOW's right Optional argument HORIZONTAL non-nil means move WINDOW's right
edge by DELTA columns. WINDOW defaults to the selected window. edge by DELTA columns. WINDOW defaults to the selected window.
If DELTA is greater zero, then move the edge downwards or to the If DELTA is greater than zero, move the edge downwards or to the
right. If DELTA is less than zero, move the edge upwards or to right. If DELTA is less than zero, move the edge upwards or to
the left. If the edge can't be moved by DELTA lines or columns, the left. If the edge can't be moved by DELTA lines or columns,
move it as far as possible in the desired direction." move it as far as possible in the desired direction."
@ -2091,7 +2102,7 @@ move it as far as possible in the desired direction."
(error "Failed adjusting window %s" window))))))) (error "Failed adjusting window %s" window)))))))
(defun enlarge-window (delta &optional horizontal) (defun enlarge-window (delta &optional horizontal)
"Make selected window DELTA lines taller. "Make the selected window DELTA lines taller.
Interactively, if no argument is given, make the selected window Interactively, if no argument is given, make the selected window
one line taller. If optional argument HORIZONTAL is non-nil, one line taller. If optional argument HORIZONTAL is non-nil,
make selected window wider by DELTA columns. If DELTA is make selected window wider by DELTA columns. If DELTA is
@ -2112,7 +2123,7 @@ Return nil."
horizontal)))) horizontal))))
(defun shrink-window (delta &optional horizontal) (defun shrink-window (delta &optional horizontal)
"Make selected window DELTA lines smaller. "Make the selected window DELTA lines smaller.
Interactively, if no argument is given, make the selected window Interactively, if no argument is given, make the selected window
one line smaller. If optional argument HORIZONTAL is non-nil, one line smaller. If optional argument HORIZONTAL is non-nil,
make selected window narrower by DELTA columns. If DELTA is make selected window narrower by DELTA columns. If DELTA is

View file

@ -1,3 +1,30 @@
2012-04-20 Chong Yidong <cyd@gnu.org>
* process.c (wait_reading_process_output): If EIO occurs on a pty,
set the status to "failed" and ensure that sentinel is run.
2012-04-20 Glenn Morris <rgm@gnu.org>
* process.c (Fset_process_inherit_coding_system_flag)
(Fset_process_query_on_exit_flag): Doc fix (mention return value).
(Fmake_network_process, Fmake_serial_process): Doc fix.
2012-04-20 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (string_buffer_position_lim): Limit starting position to
BEGV.
(set_cursor_from_row): If called for a mode-line or header-line
row, return zero immediately.
(try_cursor_movement): If inside continuation line, don't back up
farther than the first row after the header line, if any. Don't
consider the header-line row as "partially visible", even if
MATRIX_ROW_PARTIALLY_VISIBLE_P returns non-zero. (Bug#11261)
2012-04-20 Atsuo Ohki <ohki@gssm.otsuka.tsukuba.ac.jp> (tiny change)
* lread.c (lisp_file_lexically_bound_p): Fix hang at ";-*-\n" (bug#11238).
2012-04-20 Teodor Zlatanov <tzz@lifelogs.com>
2012-04-18 Paul Eggert <eggert@cs.ucla.edu> 2012-04-18 Paul Eggert <eggert@cs.ucla.edu>
configure: new option --enable-gcc-warnings (Bug#11207) configure: new option --enable-gcc-warnings (Bug#11207)

View file

@ -1077,7 +1077,9 @@ is more appropriate for saving the process buffer.
Binding the variable `inherit-process-coding-system' to non-nil before Binding the variable `inherit-process-coding-system' to non-nil before
starting the process is an alternative way of setting the inherit flag starting the process is an alternative way of setting the inherit flag
for the process which will run. */) for the process which will run.
This function returns FLAG. */)
(register Lisp_Object process, Lisp_Object flag) (register Lisp_Object process, Lisp_Object flag)
{ {
CHECK_PROCESS (process); CHECK_PROCESS (process);
@ -1090,7 +1092,8 @@ DEFUN ("set-process-query-on-exit-flag",
2, 2, 0, 2, 2, 0,
doc: /* Specify if query is needed for PROCESS when Emacs is exited. doc: /* Specify if query is needed for PROCESS when Emacs is exited.
If the second argument FLAG is non-nil, Emacs will query the user before If the second argument FLAG is non-nil, Emacs will query the user before
exiting or killing a buffer if PROCESS is running. */) exiting or killing a buffer if PROCESS is running. This function
returns FLAG. */)
(register Lisp_Object process, Lisp_Object flag) (register Lisp_Object process, Lisp_Object flag)
{ {
CHECK_PROCESS (process); CHECK_PROCESS (process);
@ -2532,7 +2535,7 @@ could be "COM1", or "\\\\.\\COM10" for ports higher than COM9 (double
the backslashes in strings). the backslashes in strings).
:speed SPEED -- (mandatory) is handled by `serial-process-configure', :speed SPEED -- (mandatory) is handled by `serial-process-configure',
which is called by `make-serial-process'. which this function calls.
:name NAME -- NAME is the name of the process. If NAME is not given, :name NAME -- NAME is the name of the process. If NAME is not given,
the value of PORT is used. the value of PORT is used.
@ -2561,13 +2564,12 @@ but you can send outgoing data. The stopped state is cleared by
:plist PLIST -- Install PLIST as the initial plist of the process. :plist PLIST -- Install PLIST as the initial plist of the process.
:speed
:bytesize :bytesize
:parity :parity
:stopbits :stopbits
:flowcontrol :flowcontrol
-- These arguments are handled by `serial-process-configure', which is -- This function calls `serial-process-configure' to handle these
called by `make-serial-process'. arguments.
The original argument list, possibly modified by later configuration, The original argument list, possibly modified by later configuration,
is available via the function `process-contact'. is available via the function `process-contact'.
@ -2801,7 +2803,7 @@ The stopped state is cleared by `continue-process' and set by
:filter-multibyte BOOL -- If BOOL is non-nil, strings given to the :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
process filter are multibyte, otherwise they are unibyte. process filter are multibyte, otherwise they are unibyte.
If this keyword is not specified, the strings are multibyte if If this keyword is not specified, the strings are multibyte if
`default-enable-multibyte-characters' is non-nil. the default value of `enable-multibyte-characters' is non-nil.
:sentinel SENTINEL -- Install SENTINEL as the process sentinel. :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
@ -4898,16 +4900,23 @@ wait_reading_process_output (int time_limit, int microsecs, int read_kbd,
It can't hurt. */ It can't hurt. */
else if (nread == -1 && errno == EIO) else if (nread == -1 && errno == EIO)
{ {
/* Don't do anything if only a pty, with no associated struct Lisp_Process *p = XPROCESS (proc);
process (bug#10933). */
if (XPROCESS (proc)->pid != -2) { /* Clear the descriptor now, so we only raise the
/* Clear the descriptor now, so we only raise the signal signal once. */
once. */ FD_CLR (channel, &input_wait_mask);
FD_CLR (channel, &input_wait_mask); FD_CLR (channel, &non_keyboard_wait_mask);
FD_CLR (channel, &non_keyboard_wait_mask);
if (p->pid == -2)
kill (getpid (), SIGCHLD); {
} /* If the EIO occurs on a pty, sigchld_handler's
wait3() will not find the process object to
delete. Do it here. */
p->tick = ++process_tick;
p->status = Qfailed;
}
else
kill (getpid (), SIGCHLD);
} }
#endif /* HAVE_PTYS */ #endif /* HAVE_PTYS */
/* If we can detect process termination, don't consider the /* If we can detect process termination, don't consider the

View file

@ -4979,7 +4979,7 @@ string_buffer_position_lim (Lisp_Object string,
Lisp_Object limit, prop, pos; Lisp_Object limit, prop, pos;
int found = 0; int found = 0;
pos = make_number (from); pos = make_number (max (from, BEGV));
if (!back_p) /* looking forward */ if (!back_p) /* looking forward */
{ {
@ -13690,6 +13690,13 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
comes from a text property, not from an overlay. */ comes from a text property, not from an overlay. */
int string_from_text_prop = 0; int string_from_text_prop = 0;
/* Don't even try doing anything if called for a mode-line or
header-line row, since the rest of the code isn't prepared to
deal with such calamities. */
xassert (!row->mode_line_p);
if (row->mode_line_p)
return 0;
/* Skip over glyphs not having an object at the start and the end of /* Skip over glyphs not having an object at the start and the end of
the row. These are special glyphs like truncation marks on the row. These are special glyphs like truncation marks on
terminal frames. */ terminal frames. */
@ -14910,6 +14917,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
else if (rc != CURSOR_MOVEMENT_SUCCESS else if (rc != CURSOR_MOVEMENT_SUCCESS
&& !NILP (BVAR (XBUFFER (w->buffer), bidi_display_reordering))) && !NILP (BVAR (XBUFFER (w->buffer), bidi_display_reordering)))
{ {
struct glyph_row *row1;
/* If rows are bidi-reordered and point moved, back up /* If rows are bidi-reordered and point moved, back up
until we find a row that does not belong to a until we find a row that does not belong to a
continuation line. This is because we must consider continuation line. This is because we must consider
@ -14920,24 +14929,28 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
/* FIXME: Revisit this when glyph ``spilling'' in /* FIXME: Revisit this when glyph ``spilling'' in
continuation lines' rows is implemented for continuation lines' rows is implemented for
bidi-reordered rows. */ bidi-reordered rows. */
while (MATRIX_ROW_CONTINUATION_LINE_P (row)) for (row1 = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
MATRIX_ROW_CONTINUATION_LINE_P (row);
--row)
{ {
/* If we hit the beginning of the displayed portion /* If we hit the beginning of the displayed portion
without finding the first row of a continued without finding the first row of a continued
line, give up. */ line, give up. */
if (row <= w->current_matrix->rows) if (row <= row1)
{ {
rc = CURSOR_MOVEMENT_MUST_SCROLL; rc = CURSOR_MOVEMENT_MUST_SCROLL;
break; break;
} }
xassert (row->enabled_p); xassert (row->enabled_p);
--row;
} }
} }
if (must_scroll) if (must_scroll)
; ;
else if (rc != CURSOR_MOVEMENT_SUCCESS else if (rc != CURSOR_MOVEMENT_SUCCESS
&& MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row) && MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
/* Make sure this isn't a header line by any chance, since
then MATRIX_ROW_PARTIALLY_VISIBLE_P might yield non-zero. */
&& !row->mode_line_p
&& make_cursor_line_fully_visible_p) && make_cursor_line_fully_visible_p)
{ {
if (PT == MATRIX_ROW_END_CHARPOS (row) if (PT == MATRIX_ROW_END_CHARPOS (row)