+2014-02-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge from gnulib, incorporating:
+ 2014-02-21 timer: fix uClibc detection of threading
+ 2014-02-21 maintainer-makefiles: provide AC_PROG_SED for older autoconf
+
2014-02-18 Mirek Kaim <mirek.kaim@outlook.com> (tiny change)
* configure.ac [HAVE_W32]: Test for ImageMagick. (Bug#16754)
+2014-02-23 Glenn Morris <rgm@gnu.org>
+
+ * rmail.texi (Rmail Inbox): Mention rmail-mbox-format.
+
2014-02-20 Glenn Morris <rgm@gnu.org>
* search.texi (Special Isearch): Mention invisible text.
@end enumerate
@c FIXME remove this in Emacs 25; won't be relevant any more.
+@cindex Babyl files
+@cindex mbox files
Rmail was originally written to use the Babyl format as its internal
format. Since then, we have recognized that the usual inbox format
(@samp{mbox}) on Unix and GNU systems is adequate for the job, and so
since Emacs 23 Rmail uses that as its internal format. The Rmail file
is still separate from the inbox file, even though their format is the
same.
+@c But this bit should stay in some form.
+@vindex rmail-mbox-format
+(In fact, there are a few slightly different mbox formats.
+The differences are not very important, but you can set the variable
+@code{rmail-mbox-format} to tell Rmail which form your system uses.
+See that variable's documentation for more details.)
@vindex rmail-preserve-inbox
When getting new mail, Rmail first copies the new mail from the
+2014-02-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * functions.texi (Declare Form): Document gv-expander, gv-setter, and
+ compiler-macro (bug#16829).
+
+2014-02-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * windows.texi (Window Configurations): Doc fix.
+ (Windows and Frames): Fix typo.
+
+2014-02-21 Glenn Morris <rgm@gnu.org>
+
+ * internals.texi (Process Internals):
+ * processes.texi (Subprocess Creation, Deleting Processes)
+ (Output from Processes, Process Buffers, Filter Functions)
+ (Accepting Output, Sentinels, Network, Network Servers):
+ Filters and sentinels can no longer be nil.
+ * elisp.texi (Top): Menu update.
+
2014-02-20 Glenn Morris <rgm@gnu.org>
* functions.texi (Defining Functions): Mention defalias-fset-function.
+2014-02-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuf.texi (Completion Commands): Don't document obsolete
+ `common-substring' arg of display-completion-list.
+
2014-02-17 Glenn Morris <rgm@gnu.org>
* minibuf.texi (Text from Minibuffer): Update read-regexp details.
2014-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- * text.texi (User-Level Deletion): Document
- `delete-trailing-whitespace' (bug#15309).
+ * text.texi (User-Level Deletion):
+ Document `delete-trailing-whitespace' (bug#15309).
2014-02-09 Lars Ingebrigtsen <larsi@gnus.org>
2013-12-24 Tassilo Horn <tsdh@gnu.org>
* control.texi (Pattern matching case statement): Fix missing
- argument in simple expression language sample (Bug#16238). Add
- some sample programs written in that language. Mention that
+ argument in simple expression language sample (Bug#16238).
+ Add some sample programs written in that language. Mention that
`pcase' requires lexical binding.
2013-12-23 Xue Fuqiao <xfq.free@gmail.com>
2013-12-23 Chong Yidong <cyd@gnu.org>
- * keymaps.texi (Controlling Active Maps): Renamed
- set-temporary-overlay-map to set-transient map. Doc fixes.
+ * keymaps.texi (Controlling Active Maps):
+ Rename set-temporary-overlay-map to set-transient map. Doc fixes.
(Searching Keymaps): The transient keymap takes precedence.
2013-12-23 Glenn Morris <rgm@gnu.org>
2013-10-08 Eli Zaretskii <eliz@gnu.org>
Support menus on text-mode terminals.
- * keymaps.texi (Defining Menus, Mouse Menus, Menu Bar): Modify
- wording to the effect that menus are supported on TTYs.
+ * keymaps.texi (Defining Menus, Mouse Menus, Menu Bar):
+ Modify wording to the effect that menus are supported on TTYs.
* frames.texi (Pop-Up Menus, Dialog Boxes)
(Display Feature Testing): Update for menu support on TTYs.
2013-07-22 Michael Albinus <michael.albinus@gmx.de>
* files.texi (Magic File Names): Add file-notify-add-watch,
- file-notify-rm-watch and file-notify-supported-p. Move
- file-remote-p down.
+ file-notify-rm-watch and file-notify-supported-p.
+ Move file-remote-p down.
* errors.texi (Standard Errors): Add file-notify-error.
Receiving Output from Processes
-* Process Buffers:: If no filter, output is put in a buffer.
+* Process Buffers:: By default, output is put in a buffer.
* Filter Functions:: Filter functions accept output from the process.
* Decoding Output:: Filters can get unibyte or multibyte strings.
* Accepting Output:: How to wait until process output arrives.
This acts like a call to @code{set-advertised-calling-convention}
(@pxref{Obsolete Functions}); @var{signature} specifies the correct
argument list for calling the function or macro, and @var{when} should
-be a string indicating when the variable was first made obsolete.
+be a string indicating when the old argument list was first made obsolete.
@item (debug @var{edebug-form-spec})
This is valid for macros only. When stepping through the macro with
Edebug, use @var{edebug-form-spec}. @xref{Instrumenting Macro Calls}.
@item (doc-string @var{n})
-Use element number @var{n}, if any, as the documentation string.
+This is used when defining a function or macro which itself will be used to
+define entities like functions, macros, or variables. It indicates that
+the @var{n}th argument, if any, should be considered
+as a documentation string.
@item (indent @var{indent-spec})
Indent calls to this function or macro according to @var{indent-spec}.
which case the warning message gives no extra details). @var{when}
should be a string indicating when the function or macro was first
made obsolete.
+
+@item (compiler-macro @var{expander})
+This can only be used for functions, and tells the compiler to use
+@var{expander} as an optimization function. When encountering a call to the
+function, of the form @code{(@var{function} @var{args}@dots{})}, the macro
+expander will call @var{expander} with that form as well as with
+@var{args}@dots{}, and @var{expander} can either return a new expression to use
+instead of the function call, or it can return just the form unchanged,
+to indicate that the function call should be left alone. @var{expander} can
+be a symbol, or it can be a form @code{(lambda (@var{arg}) @var{body})} in
+which case @var{arg} will hold the original function call expression, and the
+(unevaluated) arguments to the function can be accessed using the function's
+formal arguments.
+
+@item (gv-expander @var{expander})
+Declare @var{expander} to be the function to handle calls to the macro (or
+function) as a generalized variable, similarly to @code{gv-define-expander}.
+@var{expander} can be a symbol or it can be of the form @code{(lambda
+(@var{arg}) @var{body})} in which case that function will additionally have
+access to the macro (or function)'s arguments.
+
+@item (gv-setter @var{setter})
+Declare @var{setter} to be the function to handle calls to the macro (or
+function) as a generalized variable. @var{setter} can be a symbol in which
+case it will be passed to @code{gv-define-simple-setter}, or it can be of the
+form @code{(lambda (@var{arg}) @var{body})} in which case that function will
+additionally have access to the macro (or function)'s arguments and it will
+passed to @code{gv-define-setter}.
+
@end table
+
@end defmac
@node Declaring Functions
process is running or @code{t} if the process is stopped.
@item filter
-If non-@code{nil}, a function used to accept output from the process
-instead of a buffer.
+A function used to accept output from the process.
@item sentinel
-If non-@code{nil}, a function called whenever the state of the process
-changes.
+A function called whenever the state of the process changes.
@item buffer
The associated buffer of the process.
argument that specifies where the standard output from the program will
go. It should be a buffer or a buffer name; if it is a buffer name,
that will create the buffer if it does not already exist. It can also
-be @code{nil}, which says to discard the output unless a filter function
+be @code{nil}, which says to discard the output, unless a custom filter function
handles it. (@xref{Filter Functions}, and @ref{Read and Print}.)
Normally, you should avoid having multiple processes send output to the
same buffer because their output would be intermixed randomly.
at any time. If you explicitly delete a terminated process before it
is deleted automatically, no harm results. Deleting a running
process sends a signal to terminate it (and its child processes, if
-any), and calls the process sentinel if it has one. @xref{Sentinels}.
+any), and calls the process sentinel. @xref{Sentinels}.
When a process is deleted, the process object itself continues to
exist as long as other Lisp objects point to it. All the Lisp
buffer, or the name of a buffer. (A buffer or buffer-name stands for
the process that @code{get-buffer-process} returns.) Calling
@code{delete-process} on a running process terminates it, updates the
-process status, and runs the sentinel (if any) immediately. If the
+process status, and runs the sentinel immediately. If the
process has already terminated, calling @code{delete-process} has no
effect on its status, or on the running of its sentinel (which will
happen sooner or later).
@cindex process output
@cindex output from processes
- There are two ways to receive the output that a subprocess writes to
-its standard output stream. The output can be inserted in a buffer,
-which is called the associated buffer of the process (@pxref{Process
-Buffers}), or a function called the @dfn{filter function} can be
-called to act on the output. If the process has no buffer and no
-filter function, its output is discarded.
+ The output that a subprocess writes to its standard output stream
+is passed to a function called the @dfn{filter function}. The default
+filter function simply inserts the output into a buffer, which is
+called the associated buffer of the process (@pxref{Process
+Buffers}). If the process has no buffer then the default filter
+discards the output.
When a subprocess terminates, Emacs reads any pending output,
then stops reading output from that subprocess. Therefore, if the
shell command.
@menu
-* Process Buffers:: If no filter, output is put in a buffer.
+* Process Buffers:: By default, output is put in a buffer.
* Filter Functions:: Filter functions accept output from the process.
* Decoding Output:: Filters can get unibyte or multibyte strings.
* Accepting Output:: How to wait until process output arrives.
Many applications of processes also use the buffer for editing input to
be sent to the process, but this is not built into Emacs Lisp.
- Unless the process has a filter function (@pxref{Filter Functions}),
-its output is inserted in the associated buffer. The position to insert
-the output is determined by the @code{process-mark}, which is then
-updated to point to the end of the text just inserted. Usually, but not
-always, the @code{process-mark} is at the end of the buffer.
+ By default, process output is inserted in the associated buffer.
+(You can change this by defining a custom filter function,
+@pxref{Filter Functions}.) The position to insert the output is
+determined by the @code{process-mark}, which is then updated to point
+to the end of the text just inserted. Usually, but not always, the
+@code{process-mark} is at the end of the buffer.
@findex process-kill-buffer-query-function
Killing the associated buffer of a process also kills the process.
If @var{process} does not have a buffer, @code{process-mark} returns a
marker that points nowhere.
-Insertion of process output in a buffer uses this marker to decide where
-to insert, and updates it to point after the inserted text. That is why
-successive batches of output are inserted consecutively.
+The default filter function uses this marker to decide where to
+insert process output, and updates it to point after the inserted text.
+That is why successive batches of output are inserted consecutively.
-Filter functions normally should use this marker in the same fashion
-as is done by direct insertion of output in the buffer. For an
-example of a filter function that uses @code{process-mark},
+Custom filter functions normally should use this marker in the same fashion.
+For an example of a filter function that uses @code{process-mark},
@pxref{Process Filter Example}.
When the user is expected to enter input in the process buffer for
@cindex process filter
A process @dfn{filter function} is a function that receives the
-standard output from the associated process. If a process has a filter,
-then @emph{all} output from that process is passed to the filter. The
-process buffer is used directly for output from the process only when
-there is no filter.
+standard output from the associated process. @emph{All} output from
+that process is passed to the filter. The default filter simply
+outputs directly to the process buffer.
The filter function can only be called when Emacs is waiting for
something, because process output arrives only at such times. Emacs
filter function. @xref{Debugger}.
Many filter functions sometimes (or always) insert the output in the
-process's buffer, mimicking the actions of Emacs when there is no
-filter. Such filter functions need to make sure that they save the
+process's buffer, mimicking the actions of the default filter.
+Such filter functions need to make sure that they save the
current buffer, select the correct buffer (if different) before
inserting output, and then restore the original buffer.
They should also check whether the buffer is still alive, update the
@defun set-process-filter process filter
This function gives @var{process} the filter function @var{filter}. If
-@var{filter} is @code{nil}, it gives the process no filter.
+@var{filter} is @code{nil}, it gives the process the default filter,
+which inserts the process output into the process buffer.
@end defun
@defun process-filter process
-This function returns the filter function of @var{process}, or @code{nil}
-if it has none.
+This function returns the filter function of @var{process}.
@end defun
Here is an example of the use of a filter function:
@ignore @c The code in this example doesn't show the right way to do things.
Here is another, more realistic example, which demonstrates how to use
-the process mark to do insertion in the same fashion as is done when
-there is no filter function:
+the process mark to do insertion in the same fashion as the default filter:
@smallexample
@group
@defun accept-process-output &optional process seconds millisec just-this-one
This function allows Emacs to read pending output from processes. The
-output is inserted in the associated buffers or given to their filter
-functions. If @var{process} is non-@code{nil} then this function does
-not return until some output has been received from @var{process}.
+output is given to their filter functions. If @var{process} is
+non-@code{nil} then this function does not return until some output
+has been received from @var{process}.
The arguments @var{seconds} and @var{millisec} let you specify timeout
periods. The former specifies a period measured in seconds and the
@defun set-process-sentinel process sentinel
This function associates @var{sentinel} with @var{process}. If
-@var{sentinel} is @code{nil}, then the process will have no sentinel.
-The default behavior when there is no sentinel is to insert a message in
-the process's buffer when the process status changes.
+@var{sentinel} is @code{nil}, then the process will have the default
+sentinel, which inserts a message in the process's buffer when the
+process status changes.
Changes in process sentinels take effect immediately---if the sentinel
is slated to be run but has not been called yet, and you specify a new
@end defun
@defun process-sentinel process
-This function returns the sentinel of @var{process}, or @code{nil} if it
-has none.
+This function returns the sentinel of @var{process}.
@end defun
@defun waiting-for-user-input-p
The @var{buffer} argument is the buffer to associate with the
connection. Output from the connection is inserted in the buffer,
-unless you specify a filter function to handle the output. If
+unless you specify your own filter function to handle the output. If
@var{buffer} is @code{nil}, it means that the connection is not
associated with any buffer.
is unique for each connection in the Emacs session.
@item
-If the server's filter is non-@code{nil}, the connection process does
+If the server has a non-default filter, the connection process does
not get a separate process buffer; otherwise, Emacs creates a new
buffer for the purpose. The buffer name is the server's buffer name
or process name, concatenated with the client identification string.
window @var{W2} and the internal window @var{W3}. The child windows
of @var{W3} form a vertical combination, consisting of the live
windows @var{W4} and @var{W5}. Hence, the live windows in this
-window tree are @var{W2} @var{W4}, and @var{W5}.
+window tree are @var{W2}, @var{W4}, and @var{W5}.
The following functions can be used to retrieve a child window of an
internal window, and the siblings of a child window.
This function puts the window state @var{state} into @var{window}. The
argument @var{state} should be the state of a window returned by an
earlier invocation of @code{window-state-get}, see above. The optional
-argument @var{window} must specify a live window and defaults to the
-selected one.
+argument @var{window} must specify a valid window and defaults to the
+selected one. If @var{window} is not live, it is replaced by a live
+window before putting @var{state} into it.
If the optional argument @var{ignore} is non-@code{nil}, it means to ignore
minimum window sizes and fixed-size restrictions. If @var{ignore}
+2014-02-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * texinfo.tex: Update from gnulib.
+
+2014-02-22 Xue Fuqiao <xfq@gnu.org>
+
+ * remember.texi (Quick Start): Add an index.
+ (Function Reference, Quick Start): Add cross-references.
+
+2014-02-21 Glenn Morris <rgm@gnu.org>
+
+ * flymake.texi (Starting the syntax check process): Grammar fix.
+
+ * tramp.texi (External packages): Grammar fix.
+ Reword for default sentinel not being nil any more.
+
2014-02-19 Michael Albinus <michael.albinus@gmx.de>
* trampver.texi: Update release number.
The command line (command name and the list of arguments) for launching a process is returned by the
initialization function. Flymake then just calls @code{start-process}
-to start an asynchronous process and configures process filter and
-sentinel which is used for processing the output of the syntax check
+to start an asynchronous process and configures a process filter and
+sentinel, which are used for processing the output of the syntax check
tool.
@node Parsing the output
@node Preface
@chapter Preface
-This document describes remember-el, which was written by John Wiegley,
+This document describes remember.el, which was written by John Wiegley,
was once maintained by Sacha Chua, and is now maintained by the Emacs
developers.
You can also store remembered data in other backends. @xref{Backends}.
-Here is one way to map the remember functions in your init file to
-very accessible keystrokes facilities using the mode:
+Here is one way to map the remember functions in your init file
+(@pxref{Init File, , The Emacs Initialization File, emacs, GNU Emacs
+Manual}) to very accessible keystrokes facilities using the mode:
@lisp
(define-key global-map (kbd "<f9> r") 'remember)
(define-key global-map (kbd "<f9> R") 'remember-region)
@end lisp
+@cindex annotation
By default, remember uses the first annotation returned by
@code{remember-annotation-functions}. To include all of the annotations,
set @code{remember-run-all-annotation-functions-flag} to a
@end defun
@defun remember-mode
-This enters the major mode for output from @code{remember}. This
-buffer is used to collect data that you want remember. Just hit
-@kbd{C-c C-c} when you're done entering, and it will go ahead and file
-the data for latter retrieval, and possible indexing.
+This enters the major mode (@pxref{Major Modes, , Major Modes, emacs,
+GNU Emacs Manual}) for output from @code{remember}. This buffer is
+used to collect data that you want remember. Just hit @kbd{C-c C-c}
+when you're done entering, and it will go ahead and file the data for
+latter retrieval, and possible indexing.
@end defun
@defun remember-notes &optional switch-to
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2014-02-09.15}
+\def\texinfoversion{2014-02-16.16}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
% complicated, when \tex is in effect and \{ is a \delimiter again.
% We can't use \lbracecmd and \rbracecmd because texindex assumes
% braces and backslashes are used only as delimiters. Perhaps we
- % should define @lbrace and @rbrace commands a la @comma.
+ % should use @lbracechar and @rbracechar?
\def\{{{\tt\char123}}%
\def\}{{\tt\char125}}%
%
% @end macro
% ...
% @funindex commtest
- %
- % The above is not enough to reproduce the bug, but it gives the flavor.
+ % This is not enough to reproduce the bug, but it gives the flavor.
%
% Sample whatsit resulting:
% .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
\let\xeatspaces = \eatspaces
}
+% For testing: output @{ and @} in index sort strings as \{ and \}.
+\newif\ifusebracesinindexes
+
% \indexnofonts is used when outputting the strings to sort the index
% by, and when constructing control sequence names. It eliminates all
% control sequences and just writes whatever the best ASCII sort string
% Unfortunately, texindex is not prepared to handle braces in the
% content at all. So for index sorting, we map @{ and @} to strings
% starting with |, since that ASCII character is between ASCII { and }.
- \def\{{|a}%
- \def\lbracechar{|a}%
+ \ifusebracesinindexes
+ \def\lbracechar{\lbracecmd}%
+ \def\rbracechar{\rbracecmd}%
+ \else
+ \def\lbracechar{|a}%
+ \def\rbracechar{|b}%
+ \fi
+ \let\{=\lbracechar
+ \let\}=\rbracechar
%
- \def\}{|b}%
- \def\rbracechar{|b}%
%
% Non-English letters.
\def\AA{AA}%
it has seen so far.
This is a performance degradation, because the lost file attributes
-must be recomputed when needed again. In cases the caller of
+must be recomputed when needed again. In cases where the caller of
@code{process-file} knows that there are no file attribute changes, it
-shall let-bind the variable @code{process-file-side-effects} to
-@code{nil}. @value{tramp} wouldn't flush the file attributes cache then.
+should let-bind the variable @code{process-file-side-effects} to
+@code{nil}. Then @value{tramp} won't flush the file attributes cache.
@lisp
(let (process-file-side-effects)
For asynchronous processes, @value{tramp} flushes the file attributes
cache via a process sentinel. If the caller of
@code{start-file-process} knows that there are no file attribute
-changes, it shall set the process sentinel to @code{nil}. In case the
-caller defines an own process sentinel, @value{tramp}'s process
+changes, it should set the process sentinel to the default. In cases
+where the caller defines its own process sentinel, @value{tramp}'s process
sentinel is overwritten. The caller can still flush the file
attributes cache in its process sentinel with this code:
+2014-02-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * NEWS: Fix references to ?« and ?» that got mangled somehow.
+
2014-02-09 Lars Ingebrigtsen <larsi@gnus.org>
* NEWS: Mention all the Apropos face options that have been
./configure CC='/usr/sfw/bin/gcc -m64' # GCC
./configure CC='cc -m64' # Solaris Studio
+** Irix 6.5
+
+ It *may* be possible to build Emacs on Irix 6.5 with an old version
+ (3.1) of gcc. Newer versions of gcc may not work. None of the
+ current Emacs developers use Irix, though. If you want to help
+ make Emacs on Irix work, see <http://debbugs.gnu.org/9684>.
+
\f
* Obsolete platforms
*** New hooks `focus-in-hook', `focus-out-hook'.
These are normal hooks run when an Emacs frame gains or loses input focus.
----
-*** Emacs can now draw dividers between adjacent windows.
-To put dividers between side-by-side/vertically stacked windows
-customize the frame parameter `right-divider-width'/`bottom-divider-width'
-to some positive integer. You can drag dividers with the mouse
-(they show a corresponding cursor when the mouse hovers over them).
-You can change the appearance of dividers by customizing the faces
-`window-divider', `window-divider-first-pixel', and
-`window-divider-last-pixel'. The last two are useful to provide a 3D
-effect, or to better distinguish dividers from surrounding display objects.
+*** Emacs can now change frame sizes in units of pixels, rather than
+text rows or columns. When maximizing a frame or making it fullscreen,
+remaining extra pixels are no longer given to the minibuffer, the rightmost
+fringe, or other unusable space, but are distributed among the text
+areas of the frame's windows. If the new option `frame-resize-pixelwise'
+is non-nil, all frame size changes happen pixelwise and set the
+corresponding size hints for the window manager.
+
+*** Emacs can now change window sizes in units of pixels.
+Mouse-dragging a mode line or window divider now changes the size of
+adjacent windows pixelwise. If the new option `window-resize-pixelwise'
+is non-nil, functions like `balance-windows-area' and `fit-window-to-buffer'
+resize windows pixelwise. Most functions for changing or accessing
+window sizes now have an additional argument that allows changes to apply,
+or values to be returned, in pixels instead of lines/columns.
+
+*** Emacs can now draw dividers between adjacent windows. To put
+dividers between side-by-side/vertically stacked windows customize the
+frame parameters `right-divider-width' and `bottom-divider-width' to
+some positive integer. You can drag dividers with the mouse (they show
+a corresponding cursor when the mouse hovers over them). You can change
+the appearance of dividers by customizing the faces `window-divider',
+`window-divider-first-pixel', and `window-divider-last-pixel'. The last
+two are useful to provide a 3D effect, or to better distinguish dividers
+from surrounding display objects.
+
+*** New functions are provided to return the pixel sizes of window
+components, namely `window-scroll-bar-width', `window-mode-line-height'
+`window-header-line-height', `window-right-divider-width' and
+`window-bottom-divider-width'.
+
+*** The new function `window-text-pixel-size' returns the size of the
+text of a window's buffer in pixels. This allows functions like
+`fit-frame-to-buffer' and `fit-window-to-buffer' to accurately fit a
+window to its buffer as it will be displayed.
+
+*** `fit-window-to-buffer' can now resize windows horizontally.
+This behavior is controlled by the new option
+`fit-window-to-buffer-horizontally'.
+
+*** `fit-frame-to-buffer' can now fit frames in both directions.
+This behavior is controlled by the option `fit-frame-to-buffer' which
+tells in which direction(s) the frame shall be fit. The new options
+`fit-frame-to-buffer-margins' and `fit-frame-to-buffer-sizes' allow to
+control the size of the frame and its position on screen.
+
+*** Temp Buffer Resize Mode can now adjust height and width of windows
+and frames. `temp-buffer-resize-mode' is now able to adjust the height
+and the width of a window displaying a temporary buffer. The new option
+`temp-buffer-max-width' allows to control the width of temporary buffer
+windows. Moreover, if the new option `fit-frame-to-buffer' is non-nil
+and the buffer appears in the root window of a frame, Temp Buffer Resize
+Mode will try to adjust width and/or height of the frame.
---
*** `split-window' is now a non-interactive function, not a command.
and as such superfluous. After being reimplemented in Lisp, its
interactive form was mistakenly retained.
+*** The functions `window-size' and `window-total-size' now have an
+optional argument to return a rounded size value.
+
+*** `window-state-put' now allows to put a window state into internal
+windows too.
+
+++
*** New option `scroll-bar-adjust-thumb-portion'.
Available only on X, this option allows to control over-scrolling
using the scroll bar (i.e. dragging the thumb down even when the end
of the buffer is visible).
+*** New basic action function `display-buffer-in-previous-window' has
+`display-buffer' display a buffer in a window previously showing that
+buffer.
+
+*** New basic action function `display-buffer-at-bottom' has
+`display-buffer' choose or make a window at the bottom of the selected
+frame.
+
** Lisp evaluation changes
+++
*** `eval-defun' on an already defined defcustom calls the :set function,
Interactive commands that read registers and want to make use of this
should use `register-read-with-preview' to read register names.
++++
*** New command `frameset-to-register' bound to `C-x r f', replacing
`frame-configuration-to-register'. It offers similar functionality,
plus enhancements like the ability to restore deleted frames.
*** New option `hi-lock-auto-select-face'. When non-nil, hi-lock commands
will cycle through faces in `hi-lock-face-defaults' without prompting.
+---
** New Imenu option `imenu-generic-skip-comments-and-strings'.
** Info
** Rmail
++++
*** Customize `rmail-mbox-format' to influence some minor aspects of
how Rmail displays non-MIME messages.
with an indented sample file.
---
-** SQL
-Improved login monitoring and appropriate response to login failures.
-Includes `sql-login-delay' to define maximum wait for a connection.
+** SQL mode
+
+*** Improved login monitoring and appropriate response to login failures.
+New variable `sql-login-delay' defines maximum wait time for a connection.
-*** Oracle support
+*** Oracle support.
SQL*Plus script placeholders are properly highlighted and identified
-in `sql-placeholders-filter' correctly. When SQL*Plus is started,
-options specified in `sql-oracle-options' are passed before the logon
-parameter, as SQL*Plus expects. The default setting for
-`sql-oracle-options' has been altered to pass the `-L' option to limit
-the number of logon attempts per invocation.
+in `sql-placeholders-filter'. When starting SQL*Plus, `sql-oracle-options'
+are passed before the logon parameter, as required. The default now
+includes `-L', to limit the number of logon attempts per invocation.
---
** New Term mode option `term-suppress-hard-newline'.
** `defvar' and `defcustom' in a let-binding affect the "external" default.
---
-** The syntax of ?» and ?« is now punctuation instead of matched parens.
-Some languages match those as »...«, and others as «...», so it is
+** The syntax of ?» and ?« is now punctuation instead of matched parens.
+Some languages match those as »...«, and others as «...», so it is
better for Emacs to stay neutral by default.
---
It used to disable the minor mode, major mode, and text-property keymaps,
whereas now it simply has higher precedence.
++++
** Default process filters and sentinels are not nil any more.
Instead they default to a function that does what the nil value used to do.
* Runtime problems specific to MS-Windows
+** Emacs on Windows 9X requires UNICOWS.DLL
+
+If that DLL is not available, Emacs will display an error dialog
+stating its absence, and refuse to run.
+
+This is because Emacs 24.4 and later uses functions whose non-stub
+implementation is only available in UNICOWS.DLL, which implements the
+Microsoft Layer for Unicode on Windows 9X, or "MSLU". This article on
+MSDN:
+
+ http://msdn.microsoft.com/en-us/goglobal/bb688166.aspx
+
+includes a short description of MSLU and a link where it can be
+downloaded.
+
+** A few seconds delay is seen at startup and for many file operations
+
+This happens when the Net Logon service is enabled. During Emacs
+startup, this service issues many DNS requests looking up for the
+Windows Domain Controller. When Emacs accesses files on networked
+drives, it automatically logs on the user into those drives, which
+again causes delays when Net Logon is running.
+
+The solution seems to be to disable Net Logon with this command typed
+at the Windows shell prompt:
+
+ net stop netlogon
+
+To start the service again, type "net start netlogon". (You can also
+stop and start the service from the Computer Management application,
+accessible by right-clicking "My Computer" or "Computer", selecting
+"Manage", then clicking on "Services".)
+
+** Emacs crashes when exiting the Emacs session
+
+This was reported to happen when some optional DLLs, such as those
+used for displaying images or the GnuTLS library, which are loaded
+on-demand, have a runtime dependency on the libgcc DLL,
+libgcc_s_dw2-1.dll. The reason seems to be a bug in libgcc which
+rears its ugly head whenever the libgcc DLL is loaded after Emacs has
+started.
+
+One solution for this problem is to find an alternative build of the
+same optional library that does not depend on the libgcc DLL.
+
+Another possibility is to rebuild Emacs with the -shared-libgcc
+switch, which will force Emacs to load libgcc_s_dw2-1.dll on startup,
+ahead of any optional DLLs loaded on-demand later in the session.
+
** PATH can contain unexpanded environment variables
Old releases of TCC (version 9) and 4NT (up to version 8) do not correctly
** Windows 95 and networking.
-To support server sockets, Emacs 22.1 loads ws2_32.dll. If this file
-is missing, all Emacs networking features are disabled.
+To support server sockets, Emacs loads ws2_32.dll. If this file is
+missing, all Emacs networking features are disabled.
Old versions of Windows 95 may not have the required DLL. To use
Emacs's networking features on Windows 95, you must install the
rails-mode that avoids this crash, or avoid using UNC paths if using
rails-mode.
-** Known problems with the MS-Windows port of Emacs 22.3
+** M-x term does not work on MS-Windows.
-M-x term does not work on MS-Windows. TTY emulation on Windows is
-undocumented, and programs such as stty which are used on posix platforms
-to control tty emulation do not exist for native windows terminals.
+TTY emulation on Windows is undocumented, and programs such as stty
+which are used on posix platforms to control tty emulation do not
+exist for native windows terminals.
-Using create-fontset-from-ascii-font or the --font startup parameter
+** Using create-fontset-from-ascii-font or the --font startup parameter
with a Chinese, Japanese or Korean font leads to display problems.
Use a Latin-only font as your default font. If you want control over
which font is used to display Chinese, Japanese or Korean character,
use create-fontset-from-fontset-spec to define a fontset.
-Frames are not refreshed while the File or Font dialog or a pop-up menu
-is displayed. This also means help text for pop-up menus is not
-displayed at all. This is because message handling under Windows is
-synchronous, so we cannot handle repaint (or any other) messages while
-waiting for a system function to return the result of the dialog or
-pop-up menu interaction.
+** Frames are not refreshed while dialogs or menus are displayed
+
+This means no redisplay while the File or Font dialog or a pop-up menu
+is displayed. This also means tooltips with help text for pop-up
+menus is not displayed at all (except in a TTY session, where the help
+text is shown in the echo area). This is because message handling
+under Windows is synchronous, so we cannot handle repaint (or any
+other) messages while waiting for a system function, which popped up
+the menu/dialog, to return the result of the dialog or pop-up menu
+interaction.
+
+** Help text in tooltips does not work on old Windows versions
Windows 95 and Windows NT up to version 4.0 do not support help text
for menus. Help text is only available in later versions of Windows.
+** Display problems with ClearType method of smoothing
+
When "ClearType" method is selected as the "method to smooth edges of
screen fonts" (in Display Properties, Appearance tab, under
"Effects"), there are various problems related to display of
this display feature needs more changes to get it 100% right. A
workaround is to disable ClearType.
+** Problems with mouse-tracking and focus management
+
There are problems with display if mouse-tracking is enabled and the
mouse is moved off a frame, over another frame then back over the first
frame. A workaround is to click the left mouse button inside the frame
An inactive cursor remains in an active window after the Windows
Manager driven switch of the focus, until a key is pressed.
-Windows input methods are not recognized by Emacs. However, some
-of these input methods cause the keyboard to send characters encoded
-in the appropriate coding system (e.g., ISO 8859-1 for Latin-1
-characters, ISO 8859-8 for Hebrew characters, etc.). To make these
-input methods work with Emacs, set the keyboard coding system to the
-appropriate value after you activate the Windows input method. For
-example, if you activate the Hebrew input method, type this:
+** Problems with Windows input methods
+
+Some of the Windows input methods cause the keyboard to send
+characters encoded in the appropriate coding system (e.g., ISO 8859-1
+for Latin-1 characters, ISO 8859-8 for Hebrew characters, etc.). To
+make these input methods work with Emacs on Windows 9X, you might need
+to set the keyboard coding system to the appropriate value after you
+activate the Windows input method. For example, if you activate the
+Hebrew input method, type this:
C-x RET k hebrew-iso-8bit RET
-(Emacs ought to recognize the Windows language-change event and set up
-the appropriate keyboard encoding automatically, but it doesn't do
-that yet.) In addition, to use these Windows input methods, you
-should set your "Language for non-Unicode programs" (on Windows XP,
-this is on the Advanced tab of Regional Settings) to the language of
-the input method.
+In addition, to use these Windows input methods, you might need to set
+your "Language for non-Unicode programs" (on Windows XP, this is on
+the Advanced tab of Regional Settings) to the language of the input
+method.
To bind keys that produce non-ASCII characters with modifiers, you
must specify raw byte codes. For instance, if you want to bind
of the encoded a-grave is 340 octal. For other environments, use the
encoding appropriate to that environment.
+** Problems with the %b format specifier for format-time-string
+
The %b specifier for format-time-string does not produce abbreviated
month names with consistent widths for some locales on some versions
of Windows. This is caused by a deficiency in the underlying system
library function.
+** Problems with set-time-zone-rule function
+
The function set-time-zone-rule gives incorrect results for many
non-US timezones. This is due to over-simplistic handling of
daylight savings switchovers by the Windows libraries.
+** Files larger than 4GB report wrong size
+
Files larger than 4GB cause overflow in the size (represented as a
32-bit integer) reported by `file-attributes'. This affects Dired as
well, since the Windows port uses a Lisp emulation of `ls' that relies
on `file-attributes'.
+** Playing sound doesn't support the :data method
+
Sound playing is not supported with the `:data DATA' key-value pair.
You _must_ use the `:file FILE' method.
+2014-02-24 Leo Liu <sdl.web@gmail.com>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Fix debug spec.
+
+2014-02-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * apropos.el (apropos-print): Avoid formatting error when
+ apropos-do-all and apropos-compact-layout are both t.
+
+2014-02-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * apropos.el (apropos-property, apropos-all-words-regexp)
+ (apropos-true-hit, apropos-variable, apropos-print):
+ Fix docstring typos, and remove obsolete comment.
+
+2014-02-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-sh-handle-file-truename):
+ Preserve trailing "/". (Bug#16851)
+
+2014-02-23 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-smie-rules): Don't indent specially
+ after `=>' (bug#16811).
+ (ruby-smie-rules): Handle the inconsistent second element of the
+ list returned by `smie-indent--parent'.
+ (ruby-font-lock-keywords): Disqualify any identifier before `=' as
+ method call.
+
+2014-02-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * elec-pair.el (electric-pair-text-syntax-table)
+ (electric-pair-syntax-info, electric-pair--syntax-ppss)
+ (electric-pair--balance-info, electric-pair-mode): Fix docstring typos.
+ (electric-pair--looking-at-unterminated-string-p): Doc fix.
+ (electric-pair--inside-string-p): Doc fix. Use `let', not `let*'.
+
+2014-02-22 Glenn Morris <rgm@gnu.org>
+
+ * imenu.el (imenu--generic-function): Doc fix.
+
+ * register.el (frame-configuration-to-register): Make obsolete.
+
+2014-02-22 Juanma Barranquero <lekktu@gmail.com>
+
+ * desktop.el (desktop-save-buffer-p): Do not fail when
+ desktop-files-not-to-save is nil. Return t for true result
+ as the doc says.
+
+2014-02-22 Daniel Colascione <dancol@dancol.org>
+
+ * net/secrets.el (secrets-create-item,secrets-search-items): Check
+ that attribute values are strings, avoiding the construction of
+ invalid dbus messages.
+
+2014-02-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/gv.el: Avoid duplicating gv-expander and gv-setter in
+ defun-declarations-alist.
+
+2014-02-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/cl-macs.el (cl-define-compiler-macro): Add indent rule
+ (bug#16829).
+
+2014-02-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * whitespace.el (whitespace-space, whitespace-hspace, whitespace-tab)
+ (whitespace-newline, whitespace-trailing, whitespace-line)
+ (whitespace-space-before-tab, whitespace-indentation, whitespace-empty)
+ (whitespace-space-after-tab): Fix typo in docstrings.
+
+2014-02-21 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (auto-mode-alist): Add missing "or".
+
+ * electric.el (electric-indent-functions-without-reindent):
+ Add `yaml-indent-line'.
+
+2014-02-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32-vars.el (w32-enable-synthesized-fonts): Mark as obsolete.
+ It has done nothing for years; should be removed after the release.
+
+ * simple.el (choose-completion): Fix docstring typo.
+ (read-quoted-char-radix): Remove unneeded * in docstring.
+ (process-file, kill-whole-line, pop-to-mark-command, set-mark-command):
+ Don't escape parentheses unnecessarily in docstrings.
+
+2014-02-21 Martin Rudalics <rudalics@gmx.at>
+
+ Fix handling of window-min-height/-width (Bug#16738).
+ * window.el (window--dump-window, window--dump-frame):
+ New functions.
+ (window--min-size-1): Account for window dividers.
+ When window-resize-pixelwise is nil, delay rounding till after the
+ sum of the window components has been calculated.
+ (window--min-delta-1, window--max-delta-1): When PIXELWISE is
+ nil make sure at least one text line and two text columns remain
+ fully visible.
+ (window-resize): Signal an error when window-resize-apply fails.
+ (window--resize-child-windows): Fix calculation of by how many
+ pixels a window can still be shrunk via window-new-normal.
+ (adjust-window-trailing-edge): Call window--resizable with
+ correct TRAIL argument.
+
+ (with-temp-buffer-window): Don't evaluate BODY within
+ with-current-buffer (Bug#16816).
+
+2014-02-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-check-cached-permissions):
+ Call `file-attributes' with `suffix' being a symbol but a string.
+
+2014-02-21 Daniel Colascione <dancol@dancol.org>
+
+ * net/dbus.el (dbus-init-bus-1): Declare new subr.
+ (dbus-init-bus): New function: call into dbus-init-bus-1
+ and installs a handler for the disconnect signal.
+ (dbus-call-method): Rewrite to look for result in cons.
+ (dbus-call-method-handler): Store result in cons.
+ (dbus-check-event): Recognize events with nil sender as valid.
+ (dbus-handle-bus-disconnect): New function. React to bus
+ disconnection signal by synthesizing dbus error for each
+ pending synchronous or asynchronous call.
+ (dbus-notice-synchronous-call-errors): New function.
+ (dbus-handle-event): Raise errors directly only when `dbus-debug'
+ is true, not all the time.
+
+2014-02-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32-fns.el (w32-enable-italics, w32-charset-to-codepage-alist):
+ Remove obsolescence declarations, these variables do not exist anymore.
+
+ * savehist.el (savehist-save-minibuffer-history)
+ (savehist-additional-variables, savehist-file, savehist-mode-hook)
+ (savehist-save-hook, savehist-coding-system, savehist-loaded)
+ (savehist-load, savehist-install, savehist-autosave): Fix typos;
+ mostly, refer to "Savehist mode" when talking about the mode,
+ and not the function.
+
+ * saveplace.el (save-place): Remove redundant info in docstring.
+ (save-place-forget-unreadable-files, toggle-save-place)
+ (save-place-forget-unreadable-files, save-place-dired-hook):
+ Fix typos and remove unneeded backslashes.
+
2014-02-20 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (ls-lisp-use-insert-directory-program): Declare.
(tramp-handle-insert-directory): New defun, taken from tramp-gvfs.el.
* net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist)
- [insert-directory]: Use `tramp-handle-insert-directory.
+ <insert-directory>: Use `tramp-handle-insert-directory'.
(tramp-gvfs-handle-insert-directory): Remove function.
* net/tramp-sh.el (tramp-sh-handle-insert-directory):
cache is empty.
* net/tramp-adb.el (tramp-adb-file-name-handler-alist)
- [make-symbolic-link]: Use `tramp-handle-make-symbolic-link'.
+ <make-symbolic-link>: Use `tramp-handle-make-symbolic-link'.
* net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist)
- [make-symbolic-link]: Use `tramp-handle-make-symbolic-link'.
+ <make-symbolic-link>: Use `tramp-handle-make-symbolic-link'.
(tramp-gvfs-maybe-open-connection): Set always connection
properties, even if target is mounted already.
* net/tramp-smb.el (tramp-smb-acl-program): New customer option.
(tramp-smb-errors): Add error messages.
(tramp-smb-actions-with-acl): New defconst.
- (tramp-smb-file-name-handler-alist) [set-file-acl]: Add handler.
+ (tramp-smb-file-name-handler-alist) <set-file-acl>: Add handler.
(tramp-smb-action-with-acl, tramp-smb-handle-set-file-acl): New defuns.
(tramp-smb-handle-file-acl): Rewrite, using "smbcacls".
(tramp-smb-handle-file-attributes): Simplify test for "stat" capability.
* net/tramp-adb.el (tramp-adb-file-name-handler-alist):
Order alphabetically.
- [access-file, add-name-to-file, dired-call-process]:
- [dired-compress-file, file-acl, file-notify-rm-watch]:
- [file-ownership-preserved-p, file-selinux-context]:
- [make-directory-internal, make-symbolic-link, set-file-acl]:
- [set-file-selinux-context, set-visited-file-modtime]:
- [verify-visited-file-modtime]: Add handler.
+ <access-file, add-name-to-file, dired-call-process>:
+ <dired-compress-file, file-acl, file-notify-rm-watch>:
+ <file-ownership-preserved-p, file-selinux-context>:
+ <make-directory-internal, make-symbolic-link, set-file-acl>:
+ <set-file-selinux-context, set-visited-file-modtime>:
+ <verify-visited-file-modtime>: Add handler.
(tramp-adb-handle-write-region): Apply `set-visited-file-modtime'.
* net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist)
- [file-notify-add-watch, file-notify-rm-watch]:
- [set-file-times, set-visited-file-modtime]:
- [verify-visited-file-modtime]: Add handler.
+ <file-notify-add-watch, file-notify-rm-watch>:
+ <set-file-times, set-visited-file-modtime>:
+ <verify-visited-file-modtime>: Add handler.
(with-tramp-gvfs-error-message)
(tramp-gvfs-handle-set-visited-file-modtime)
(tramp-gvfs-fuse-file-name): Remove.
* net/tramp-sh.el (tramp-sh-file-name-handler-alist):
Order alphabetically.
- [file-notify-rm-watch ]: Use default Tramp handler.
- [executable-find]: Remove private handler.
+ <file-notify-rm-watch>: Use default Tramp handler.
+ <executable-find>: Remove private handler.
(tramp-do-copy-or-rename-file-out-of-band): Do not bind
`default-directory'.
(tramp-sh-handle-executable-find)
Do not use `format' in `tramp-message'.
* net/tramp-smb.el (tramp-smb-file-name-handler-alist)
- [file-notify-rm-watch, set-visited-file-modtime]:
- [verify-visited-file-modtime]: Add handler.
+ <file-notify-rm-watch, set-visited-file-modtime>:
+ <verify-visited-file-modtime>: Add handler.
(tramp-smb-call-winexe): Do not bind `default-directory'.
2013-08-01 Xue Fuqiao <xfq.free@gmail.com>
* net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
* net/tramp-sh.el (tramp-maybe-open-connection):
Use `tramp-connection-timeout'.
- (tramp-methods) [su, sudo, ksu]: Add method specific timeouts.
+ (tramp-methods) <su, sudo, ksu>: Add method specific timeouts.
(Bug#14808)
2013-07-11 Leo Liu <sdl.web@gmail.com>
(defface apropos-property
'((t (:inherit font-lock-builtin-face)))
- "Face for property name in apropos output, or nil for none."
+ "Face for property name in Apropos output, or nil for none."
:group 'apropos
:version "24.3")
"Regexp used in current apropos run.")
(defvar apropos-all-words-regexp nil
- "Regexp matching apropos-all-words.")
+ "Regexp matching `apropos-all-words'.")
(defvar apropos-files-scanned ()
"List of elc files already scanned in current run of `apropos-documentation'.")
apropos-pattern pattern
apropos-regexp pattern)))
-
(defun apropos-calc-scores (str words)
"Return apropos scores for string STR matching WORDS.
Value is a list of offsets of the words into the string."
(defun apropos-true-hit (str words)
"Return t if STR is a genuine hit.
This may fail if only one of the keywords is matched more than once.
-This requires that at least 2 keywords (unless only one was given)."
+This requires at least two keywords (unless only one was given)."
(or (not str)
(not words)
(not (cdr words))
;;;###autoload
(defun apropos-variable (pattern &optional do-not-all)
"Show variables that match PATTERN.
-When DO-NOT-ALL is not-nil, show user options only, i.e. behave
+When DO-NOT-ALL is non-nil, show user options only, i.e. behave
like `apropos-user-option'."
(interactive (list (apropos-read-pattern
(if current-prefix-arg "user option" "variable"))
`apropos-accumulator' to nil before returning.
If SPACING is non-nil, it should be a string; separate items with that string.
-If non-nil TEXT is a string that will be printed as a heading."
+If non-nil, TEXT is a string that will be printed as a heading."
(if (null apropos-accumulator)
(message "No apropos matches for `%s'" apropos-pattern)
(setq apropos-accumulator
(sort apropos-accumulator
(lambda (a b)
- ;; Don't sort by score if user can't see the score.
- ;; It would be confusing. -- rms.
(if apropos-sort-by-scores
(or (> (cadr a) (cadr b))
(and (= (cadr a) (cadr b))
(let ((p apropos-accumulator)
(old-buffer (current-buffer))
(inhibit-read-only t)
+ (button-end 0)
symbol item)
(set-buffer standard-output)
(apropos-mode)
(setq apropos-item
(cons (car apropos-item)
(cons nil (cdr apropos-item)))))
+ (when (= (point) button-end) (terpri))
(insert-text-button (symbol-name symbol)
'type 'apropos-symbol
'skip apropos-multi-type
'face 'apropos-symbol)
+ (setq button-end (point))
(if (and (eq apropos-sort-by-scores 'verbose)
(cadr apropos-item))
(insert " (" (number-to-string (cadr apropos-item)) ") "))
MODE is the major mode.
\n\(fn FILENAME BUFNAME MODE)"
(let ((case-fold-search nil)
- dired-skip)
- (and (not (and (stringp desktop-buffers-not-to-save)
- (not filename)
- (string-match-p desktop-buffers-not-to-save bufname)))
- (not (memq mode desktop-modes-not-to-save))
- ;; FIXME this is broken if desktop-files-not-to-save is nil.
- (or (and filename
- (stringp desktop-files-not-to-save)
- (not (string-match-p desktop-files-not-to-save filename)))
- (and (memq mode '(dired-mode vc-dir-mode))
- (with-current-buffer bufname
- (not (setq dired-skip
- (string-match-p desktop-files-not-to-save
- default-directory)))))
- (and (null filename)
- (null dired-skip) ; bug#5755
- (with-current-buffer bufname desktop-save-buffer))))))
+ (no-regexp-to-check (not (stringp desktop-files-not-to-save)))
+ dired-skip)
+ (and (or filename
+ (not (stringp desktop-buffers-not-to-save))
+ (not (string-match-p desktop-buffers-not-to-save bufname)))
+ (not (memq mode desktop-modes-not-to-save))
+ (or (and filename
+ (or no-regexp-to-check
+ (not (string-match-p desktop-files-not-to-save filename))))
+ (and (memq mode '(dired-mode vc-dir-mode))
+ (or no-regexp-to-check
+ (not (setq dired-skip
+ (with-current-buffer bufname
+ (string-match-p desktop-files-not-to-save
+ default-directory))))))
+ (and (null filename)
+ (null dired-skip) ; bug#5755
+ (with-current-buffer bufname desktop-save-buffer)))
+ t)))
;; ----------------------------------------------------------------------------
(defun desktop-file-name (filename dirname)
"Syntax table used when pairing inside comments and strings.
`electric-pair-mode' considers this syntax table only when point in inside
-quotes or comments. If lookup fails here, `electric-pair-text-pairs' will
+quotes or comments. If lookup fails here, `electric-pair-text-pairs' will
be considered.")
(defun electric-pair-backward-delete-char (n &optional killflag untabify)
COMMAND-EVENT's pair. UNCONDITIONAL indicates the variables
`electric-pair-pairs' or `electric-pair-text-pairs' were used to
lookup syntax. STRING-OR-COMMENT-START indicates that point is
-inside a comment of string."
+inside a comment or string."
(let* ((pre-string-or-comment (or (bobp)
(nth 8 (save-excursion
(syntax-ppss (1- (point)))))))
(defun electric-pair--syntax-ppss (&optional pos where)
"Like `syntax-ppss', but sometimes fallback to `parse-partial-sexp'.
-WHERE is list defaulting to '(string comment) and indicates
+WHERE is a list defaulting to '(string comment) and indicates
when to fallback to `parse-partial-sexp'."
(let* ((pos (or pos (point)))
(where (or where '(string comment)))
(parse-partial-sexp (point-min) pos)
quick-ppss-at-pos))))
-;; Balancing means controlling pairing and skipping of parentheses so
-;; that, if possible, the buffer ends up at least as balanced as
-;; before, if not more. The algorithm is slightly complex because some
-;; situations like "()))" need pairing to occur at the end but not at
-;; the beginning. Balancing should also happen independently for
-;; different types of parentheses, so that having your {}'s unbalanced
-;; doesn't keep `electric-pair-mode' from balancing your ()'s and your
-;; []'s.
+;; Balancing means controlling pairing and skipping of parentheses
+;; so that, if possible, the buffer ends up at least as balanced as
+;; before, if not more. The algorithm is slightly complex because
+;; some situations like "()))" need pairing to occur at the end but
+;; not at the beginning. Balancing should also happen independently
+;; for different types of parentheses, so that having your {}'s
+;; unbalanced doesn't keep `electric-pair-mode' from balancing your
+;; ()'s and your []'s.
(defun electric-pair--balance-info (direction string-or-comment)
"Examine lists forward or backward according to DIRECTION's sign.
STRING-OR-COMMENT is info suitable for running `parse-partial-sexp'.
Return a cons of two descriptions (MATCHED-P . PAIR) for the
-innermost and outermost lists that enclose point. The outermost
+innermost and outermost lists that enclose point. The outermost
list enclosing point is either the first top-level or first
mismatched list found by listing up.
-If the outermost list is matched, don't rely on its PAIR. If
-point is not enclosed by any lists, return ((T) . (T))."
+If the outermost list is matched, don't rely on its PAIR.
+If point is not enclosed by any lists, return ((t) . (t))."
(let* (innermost
outermost
(table (if string-or-comment
electric-pair-text-syntax-table
(syntax-table)))
(at-top-level-or-equivalent-fn
- ;; called when `scan-sexps' ran perfectly, when when it
- ;; found a parenthesis pointing in the direction of
- ;; travel. Also when travel started inside a comment and
- ;; exited it
+ ;; called when `scan-sexps' ran perfectly, when it found
+ ;; a parenthesis pointing in the direction of travel.
+ ;; Also when travel started inside a comment and exited it.
#'(lambda ()
(setq outermost (list t))
(unless innermost
(setq innermost (list t)))))
(ended-prematurely-fn
;; called when `scan-sexps' crashed against a parenthesis
- ;; pointing opposite the direction of travel. After
+ ;; pointing opposite the direction of travel. After
;; traversing that character, the idea is to travel one sexp
;; in the opposite direction looking for a matching
;; delimiter.
(cons innermost outermost)))
(defun electric-pair--looking-at-unterminated-string-p (char)
- "Say if following string starts with CHAR and is unterminated."
+ "Return non-nil if following string starts with CHAR and is unterminated."
;; FIXME: ugly/naive
(save-excursion
(skip-chars-forward (format "^%c" char))
(scan-error t)))))
(defun electric-pair--inside-string-p (char)
- "Say if point is inside a string started by CHAR.
+ "Return non-nil if point is inside a string started by CHAR.
A comments text is parsed with `electric-pair-text-syntax-table'.
Also consider strings within comments, but not strings within
strings."
;; FIXME: could also consider strings within strings by examining
;; delimiters.
- (let* ((ppss (electric-pair--syntax-ppss (point) '(comment))))
+ (let ((ppss (electric-pair--syntax-ppss (point) '(comment))))
(memq (nth 3 ppss) (list t char))))
(defun electric-pair-inhibit-if-helps-balance (char)
Electric Pair mode is a global minor mode. When enabled, typing
an open parenthesis automatically inserts the corresponding
-closing parenthesis. \(Likewise for brackets, etc.)."
+closing parenthesis. (Likewise for brackets, etc.)."
:global t :group 'electricity
(if electric-pair-mode
(progn
(defvar electric-indent-functions-without-reindent
'(indent-relative indent-to-left-margin indent-relative-maybe
- py-indent-line coffee-indent-line org-indent-line
+ py-indent-line coffee-indent-line org-indent-line yaml-indent-line
haskell-indentation-indent-line haskell-indent-cycle haskell-simple-indent)
"List of indent functions that can't reindent.
If `line-indent-function' is one of those, then `electric-indent-mode' will
possible. Unlike regular macros, BODY can decide to \"punt\" and leave the
original function call alone by declaring an initial `&whole foo' parameter
and then returning foo."
- (declare (debug cl-defmacro))
+ (declare (debug cl-defmacro) (indent 2))
(let ((p args) (res nil))
(while (consp p) (push (pop p) res))
(setq args (nconc (nreverse res) (and p (list '&rest p)))))
:lighter \" Foo\" :require 'foo :global t :group 'hassle :version \"27.5\"
...BODY CODE...)"
(declare (doc-string 2)
- (debug (&define name stringp
+ (debug (&define name string-or-null-p
[&optional [¬ keywordp] sexp
&optional [¬ keywordp] sexp
&optional [¬ keywordp] sexp]
(_ (message "Unknown %s declaration %S" symbol handler) nil))))
;;;###autoload
-(push `(gv-expander ,(apply-partially #'gv--defun-declaration 'gv-expander))
- defun-declarations-alist)
+(or (assq 'gv-expander defun-declarations-alist)
+ (push `(gv-expander ,(apply-partially #'gv--defun-declaration 'gv-expander))
+ defun-declarations-alist))
;;;###autoload
-(push `(gv-setter ,(apply-partially #'gv--defun-declaration 'gv-setter))
- defun-declarations-alist)
+(or (assq 'gv-setter defun-declarations-alist)
+ (push `(gv-setter ,(apply-partially #'gv--defun-declaration 'gv-setter))
+ defun-declarations-alist))
;; (defmacro gv-define-expand (name expander)
;; "Use EXPANDER to handle NAME as a generalized var.
+2014-02-22 Daniel Colascione <dancol@dancol.org>
+
+ * auth-source.el (auth-source-secrets-listify-pattern): New function.
+ (auth-source-secrets-search): Don't pass invalid patterns to secrets.el;
+ instead, build list of patterns.
+
2014-02-13 Teodor Zlatanov <tzz@lifelogs.com>
* auth-source.el (auth-sources): Add pointer to what the .gpg extension
;; (let ((auth-sources '("secrets:Login"))) (auth-source-search :max 1))
;; (let ((auth-sources '("secrets:Login"))) (auth-source-search :max 1 :signon_realm "https://git.gnus.org/Git"))
+(defun auth-source-secrets-listify-pattern (pattern)
+ "Convert a pattern with lists to a list of string patterns.
+
+auth-source patterns can have values of the form :foo (\"bar\"
+\"qux\"), which means to match any secret with :foo equal to
+\"bar\" or :foo equal to \"qux\". The secrets backend supports
+only string values for patterns, so this routine returns a list
+of patterns that is equivalent to the single original pattern
+when interpreted such that if a secret matches any pattern in the
+list, it matches the original pattern."
+ (if (null pattern)
+ '(nil)
+ (let* ((key (pop pattern))
+ (value (pop pattern))
+ (tails (auth-source-secrets-listify-pattern pattern))
+ (heads (if (stringp value)
+ (list (list key value))
+ (mapcar (lambda (v) (list key v)) value))))
+ (cl-loop
+ for h in heads
+ nconc
+ (cl-loop
+ for tl in tails
+ collect (append h tl))))))
+
(defun* auth-source-secrets-search (&rest
spec
&key backend create delete label
collect (nth i spec)))
;; build a search spec without the ignored keys
;; if a search key is nil or t (match anything), we skip it
- (search-spec (apply 'append (mapcar
+ (search-specs (auth-source-secrets-listify-pattern
+ (apply 'append (mapcar
(lambda (k)
(if (or (null (plist-get spec k))
(eq t (plist-get spec k)))
nil
(list k (plist-get spec k))))
- search-keys)))
+ search-keys))))
;; needed keys (always including host, login, port, and secret)
(returned-keys (mm-delete-duplicates (append
'(:host :login :port :secret)
search-keys)))
- (items (loop for item in (apply 'secrets-search-items coll search-spec)
- unless (and (stringp label)
- (not (string-match label item)))
- collect item))
+ (items
+ (loop for search-spec in search-specs
+ nconc
+ (loop for item in (apply 'secrets-search-items coll search-spec)
+ unless (and (stringp label)
+ (not (string-match label item)))
+ collect item)))
;; TODO: respect max in `secrets-search-items', not after the fact
(items (butlast items (- (length items) max)))
;; convert the item name to a full plist
;; so it needs to be careful never to loop!
(defun imenu--generic-function (patterns)
"Return an index alist of the current buffer based on PATTERNS.
-PATTERNS should be an alist which has the same form as
-`imenu-generic-expression'.
+PATTERNS should be an alist with the same form as `imenu-generic-expression'.
+
+If `imenu-generic-skip-comments-and-strings' is non-nil, this ignores
+text inside comments and strings.
+
+If `imenu-case-fold-search' is non-nil, this ignores case.
The return value is an alist of the form
(INDEX-NAME . INDEX-POSITION)
;; Declare used subroutines and variables.
(declare-function dbus-message-internal "dbusbind.c")
-(declare-function dbus-init-bus "dbusbind.c")
+(declare-function dbus-init-bus-1 "dbusbind.c")
(defvar dbus-message-type-invalid)
(defvar dbus-message-type-method-call)
(defvar dbus-message-type-method-return)
(define-obsolete-variable-alias 'dbus-event-error-hooks
'dbus-event-error-functions "24.3")
-(defvar dbus-event-error-functions nil
+(defvar dbus-event-error-functions '(dbus-notice-synchronous-call-errors)
"Functions to be called when a D-Bus error happens in the event handler.
Every function must accept two arguments, the event and the error variable
caught in `condition-case' by `dbus-error'.")
"Handler for reply messages of asynchronous D-Bus message calls.
It calls the function stored in `dbus-registered-objects-table'.
The result will be made available in `dbus-return-values-table'."
- (puthash (list :serial
- (dbus-event-bus-name last-input-event)
- (dbus-event-serial-number last-input-event))
- (if (= (length args) 1) (car args) args)
- dbus-return-values-table))
+ (let* ((key (list :serial
+ (dbus-event-bus-name last-input-event)
+ (dbus-event-serial-number last-input-event)))
+ (result (gethash key dbus-return-values-table)))
+ (when (consp result)
+ (setcar result :complete)
+ (setcdr result (if (= (length args) 1) (car args) args)))))
+
+(defun dbus-notice-synchronous-call-errors (ev er)
+ "Detect errors resulting from pending synchronous calls."
+ (let* ((key (list :serial
+ (dbus-event-bus-name ev)
+ (dbus-event-serial-number ev)))
+ (result (gethash key dbus-return-values-table)))
+ (when (consp result)
+ (setcar result :error)
+ (setcdr result er))))
(defun dbus-call-method (bus service path interface method &rest args)
"Call METHOD on the D-Bus BUS.
(key
(apply
'dbus-message-internal dbus-message-type-method-call
- bus service path interface method 'dbus-call-method-handler args)))
+ bus service path interface method 'dbus-call-method-handler args))
+ (result (cons :pending nil)))
;; Wait until `dbus-call-method-handler' has put the result into
;; `dbus-return-values-table'. If no timeout is given, use the
;; hurts when reading D-Bus events asynchronously.
;; Work around bug#16775 by busy-waiting with gradual backoff for
- ;; dbus calls to complete. A better aproach would involve either
+ ;; dbus calls to complete. A better approach would involve either
;; adding arbitrary wait condition support to read-event or
;; restructuring dbus as a kind of process object. Poll at most
;; about once per second for completion.
- (with-timeout ((if timeout (/ timeout 1000.0) 25))
- (while (eq (gethash key dbus-return-values-table :ignore) :ignore)
- (let ((event (let ((inhibit-redisplay t) unread-command-events)
- (read-event nil nil check-interval))))
- (when event
- (setf unread-command-events
- (nconc unread-command-events
- (cons event nil))))
- (when (< check-interval 1)
- (setf check-interval (* check-interval 1.05))))))
-
- ;; Cleanup `dbus-return-values-table'. Return the result.
- (prog1
- (gethash key dbus-return-values-table)
+ (puthash key result dbus-return-values-table)
+ (unwind-protect
+ (progn
+ (with-timeout ((if timeout (/ timeout 1000.0) 25)
+ (signal 'dbus-error (list "call timed out")))
+ (while (eq (car result) :pending)
+ (let ((event (let ((inhibit-redisplay t) unread-command-events)
+ (read-event nil nil check-interval))))
+ (when event
+ (setf unread-command-events
+ (nconc unread-command-events
+ (cons event nil))))
+ (when (< check-interval 1)
+ (setf check-interval (* check-interval 1.05))))))
+ (when (eq (car result) :error)
+ (signal (cadr result) (cddr result)))
+ (cdr result))
(remhash key dbus-return-values-table))))
;; `dbus-call-method' works non-blocking now.
;; Service.
(or (= dbus-message-type-method-return (nth 2 event))
(= dbus-message-type-error (nth 2 event))
- (stringp (nth 4 event)))
+ (or (stringp (nth 4 event))
+ (null (nth 4 event))))
;; Object path.
(or (= dbus-message-type-method-return (nth 2 event))
(= dbus-message-type-error (nth 2 event))
(nth 1 event) (nth 4 event) (nth 3 event) (cadr err))))
;; Propagate D-Bus error messages.
(run-hook-with-args 'dbus-event-error-functions event err)
- (when (or dbus-debug (= dbus-message-type-error (nth 2 event)))
+ (when dbus-debug
(signal (car err) (cdr err))))))
(defun dbus-event-bus-name (event)
result)
'(:signature "{oa{sa{sv}}}"))))))
+(defun dbus-handle-bus-disconnect ()
+ "React to a bus disconnection.
+BUS is the bus that disconnected. This routine unregisters all
+handlers on the given bus and causes all synchronous calls
+pending at the time of disconnect to fail."
+ (let ((bus (dbus-event-bus-name last-input-event))
+ (keys-to-remove))
+ (maphash
+ (lambda (key value)
+ (when (and (eq (nth 0 key) :serial)
+ (eq (nth 1 key) bus))
+ (run-hook-with-args
+ 'dbus-event-error-functions
+ (list 'dbus-event
+ bus
+ dbus-message-type-error
+ (nth 2 key)
+ nil
+ nil
+ nil
+ nil
+ value)
+ '(dbus-error "Bus disconnected"))
+ (push key keys-to-remove)))
+ dbus-registered-objects-table)
+ (dolist (key keys-to-remove)
+ (remhash key dbus-registered-objects-table))))
+
+(defun dbus-init-bus (bus &optional private)
+ "Establish the connection to D-Bus BUS.
+
+BUS can be either the symbol `:system' or the symbol `:session', or it
+can be a string denoting the address of the corresponding bus. For
+the system and session buses, this function is called when loading
+`dbus.el', there is no need to call it again.
+
+The function returns a number, which counts the connections this Emacs
+session has established to the BUS under the same unique name (see
+`dbus-get-unique-name'). It depends on the libraries Emacs is linked
+with, and on the environment Emacs is running. For example, if Emacs
+is linked with the gtk toolkit, and it runs in a GTK-aware environment
+like Gnome, another connection might already be established.
+
+When PRIVATE is non-nil, a new connection is established instead of
+reusing an existing one. It results in a new unique name at the bus.
+This can be used, if it is necessary to distinguish from another
+connection used in the same Emacs process, like the one established by
+GTK+. It should be used with care for at least the `:system' and
+`:session' buses, because other Emacs Lisp packages might already use
+this connection to those buses.
+"
+ (dbus-init-bus-1 bus private)
+ (dbus-register-signal bus nil
+ "/org/freedesktop/DBus/Local"
+ "org.freedesktop.DBus.Local"
+ "Disconnected"
+ #'dbus-handle-bus-disconnect))
+
\f
;; Initialize `:system' and `:session' buses. This adds their file
;; descriptors to input_wait_mask, in order to detect incoming
(while (consp (cdr attributes))
(unless (keywordp (car attributes))
(error 'wrong-type-argument (car attributes)))
+ (unless (stringp (cadr attributes))
+ (error 'wrong-type-argument (cadr attributes)))
(setq props (add-to-list
'props
(list :dict-entry
(while (consp (cdr attributes))
(unless (keywordp (car attributes))
(error 'wrong-type-argument (car attributes)))
+ (unless (stringp (cadr attributes))
+ (error 'wrong-type-argument (cadr attributes)))
(setq props (add-to-list
'props
(list :dict-entry
(setq result (concat result "/"))))))
(tramp-message v 4 "True name of `%s' is `%s'" localname result)
- result)))))
+ (if (string-equal (file-name-nondirectory localname) "")
+ (file-name-as-directory result) result))))))
;; Basic functions.
(tramp-file-name-user vec)
(tramp-file-name-host vec)
(tramp-file-name-localname vec))
- suffix)))
+ (intern suffix))))
(remote-uid
(tramp-get-connection-property
vec (concat "uid-" suffix) nil))
(save-excursion
;; Traverse up the parents until the parent is "." at
;; indentation, or any other token.
- (while (and (progn
- (goto-char (1- (cadr (smie-indent--parent))))
- (not (ruby-smie--bosp)))
+ (while (and (let ((parent (smie-indent--parent)))
+ (goto-char (cadr parent))
+ (save-excursion
+ (unless (integerp (car parent)) (forward-char -1))
+ (not (ruby-smie--bosp))))
(progn
(setq smie--parent nil)
(smie-rule-parent-p "."))))
(if (smie-rule-sibling-p)
(and ruby-align-chained-calls 0)
ruby-indent-level))
- (`(:after . "=>") ruby-indent-level)
(`(:before . ,(or `"else" `"then" `"elsif" `"rescue" `"ensure"))
(smie-rule-parent))
(`(:before . "when")
"refine"
"using")
'symbols))
- (1 (unless (looking-at " *\\(?:[]|,.)}]\\|$\\)")
+ (1 (unless (looking-at " *\\(?:[]|,.)}=]\\|$\\)")
font-lock-builtin-face)))
;; Kernel methods that have no required arguments.
(,(concat
"\\|jbuilder\\|gemspec\\|podspec"
"\\|/"
"\\(?:Gem\\|Rake\\|Cap\\|Thor"
- "Vagrant\\|Guard\\|Pod\\)file"
+ "\\|Vagrant\\|Guard\\|Pod\\)file"
"\\)\\'")) 'ruby-mode))
;;;###autoload
(set-advertised-calling-convention 'frame-configuration-to-register
'(register) "24.4")
+(make-obsolete 'frame-configuration-to-register 'frameset-to-register' "24.4")
+
(defalias 'register-to-point 'jump-to-register)
(defun jump-to-register (register &optional delete)
"Move point to location stored in a register.
(defcustom savehist-save-minibuffer-history t
"If non-nil, save all recorded minibuffer histories.
-If you want to save only specific histories, use `savehist-save-hook' to
-modify the value of `savehist-minibuffer-history-variables'."
+If you want to save only specific histories, use `savehist-save-hook'
+to modify the value of `savehist-minibuffer-history-variables'."
:type 'boolean
:group 'savehist)
(defcustom savehist-additional-variables ()
"List of additional variables to save.
Each element is a symbol whose value will be persisted across Emacs
-sessions that use savehist. The contents of variables should be
+sessions that use Savehist. The contents of variables should be
printable with the Lisp printer. You don't need to add minibuffer
history variables to this list, all minibuffer histories will be
saved automatically as long as `savehist-save-minibuffer-history' is
non-nil.
-User options should be saved with the customize interface. This
+User options should be saved with the Customize interface. This
list is useful for saving automatically updated variables that are not
minibuffer histories, such as `compile-command' or `kill-ring'."
:type '(repeat variable)
(locate-user-emacs-file "history" ".emacs-history")
"File name where minibuffer history is saved to and loaded from.
The minibuffer history is a series of Lisp expressions loaded
-automatically when `savehist-mode' is turned on. See `savehist-mode'
+automatically when Savehist mode is turned on. See `savehist-mode'
for more details.
If you want your minibuffer history shared between Emacs and XEmacs,
:group 'savehist)
(defcustom savehist-mode-hook nil
- "Hook called when `savehist-mode' is turned on."
+ "Hook called when Savehist mode is turned on."
:type 'hook
:group 'savehist)
(defcustom savehist-save-hook nil
"Hook called by `savehist-save' before saving the variables.
-You can use this hook to influence choice and content of variables to
-save."
+You can use this hook to influence choice and content of variables
+to save."
:type 'hook
:group 'savehist)
(<= emacs-major-version 21)
(< emacs-minor-version 5))
'iso-2022-8 'utf-8-unix)
- "The coding system savehist uses for saving the minibuffer history.
+ "The coding system Savehist uses for saving the minibuffer history.
Changing this value while Emacs is running is supported, but considered
unwise, unless you know what you are doing.")
(defvar savehist-loaded nil
"Whether the history has already been loaded.
-This prevents toggling `savehist-mode' from destroying existing
+This prevents toggling Savehist mode from destroying existing
minibuffer history.")
(when (featurep 'xemacs)
(savehist-install)))
(defun savehist-load ()
- "Load the variables stored in `savehist-file' and turn on `savehist-mode'.
+ "Load the variables stored in `savehist-file' and turn on Savehist mode.
If `savehist-file' is in the old format that doesn't record
the value of `savehist-minibuffer-history-variables', that
value is deducted from the contents of the file."
vars)))))
(defun savehist-install ()
- "Hook savehist into Emacs.
+ "Hook Savehist into Emacs.
Normally invoked by calling `savehist-mode' to set the minor mode.
Installs `savehist-autosave' in `kill-emacs-hook' and on a timer.
To undo this, call `savehist-uninstall'."
(defun savehist-autosave ()
"Save the minibuffer history if it has been modified since the last save.
-Does nothing if `savehist-mode' is off."
+Does nothing if Savehist mode is off."
(when savehist-mode
(savehist-save t)))
"Non-nil means automatically save place in each file.
This means when you visit a file, point goes to the last place
where it was when you previously visited the same file.
-This variable is automatically buffer-local.
If you wish your place in any file to always be automatically
saved, set this to t using the Customize facility, or put the
The filenames in `save-place-alist' that do not match
`save-place-skip-check-regexp' are filtered through
-`file-readable-p'. if nil, their alist entries are removed.
+`file-readable-p'. If nil, their alist entries are removed.
You may do this anytime by calling the complementary function,
`save-place-forget-unreadable-files'. When this option is turned on,
To save places automatically in all files, put this in your init
file:
-\(setq-default save-place t\)"
+\(setq-default save-place t)"
(interactive "P")
(if (not (or buffer-file-name (and (derived-mode-p 'dired-mode)
dired-directory)))
(defun save-place-forget-unreadable-files ()
"Remove unreadable files from `save-place-alist'.
For each entry in the alist, if `file-readable-p' returns nil for the
-filename, remove the entry. Save the new alist \(as the first pair
-may have changed\) back to `save-place-alist'."
+filename, remove the entry. Save the new alist (as the first pair
+may have changed) back to `save-place-alist'."
(interactive)
;; the following was adapted from an in-place filtering function,
;; `filter-mod', used in the original.
(declare-function dired-goto-file "dired" (file))
(defun save-place-dired-hook ()
- "Position the point in a dired buffer."
+ "Position the point in a Dired buffer."
(or save-place-loaded (load-save-place-alist-from-file))
(let ((cell (assoc (and (derived-mode-p 'dired-mode)
dired-directory
(indent-according-to-mode)))
(defcustom read-quoted-char-radix 8
- "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
+ "Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
Legitimate radix values are 8, 10 and 16."
:type '(choice (const 8) (const 10) (const 16))
:group 'editing-basics)
File names in INFILE and BUFFER are handled normally, but file
names in ARGS should be relative to `default-directory', as they
-are passed to the process verbatim. \(This is a difference to
+are passed to the process verbatim. (This is a difference to
`call-process' which does not support file handlers for INFILE
-and BUFFER.\)
+and BUFFER.)
Some file handlers might not support all variants, for example
they might behave as if DISPLAY was nil, regardless of the actual
"Kill current line.
With prefix ARG, kill that many lines starting from the current line.
If ARG is negative, kill backward. Also kill the preceding newline.
-\(This is meant to make \\[repeat] work well with negative arguments.\)
+\(This is meant to make \\[repeat] work well with negative arguments.)
If ARG is zero, kill current line but exclude the trailing newline."
(interactive "p")
(or arg (setq arg 1))
(defun pop-to-mark-command ()
"Jump to mark, and pop a new position for mark off the ring.
-\(Does not affect global mark ring\)."
+\(Does not affect global mark ring)."
(interactive)
(if (null (mark t))
(error "No mark set in this buffer")
When Transient Mark Mode is off, immediately repeating this
command activates `transient-mark-mode' temporarily.
-With prefix argument \(e.g., \\[universal-argument] \\[set-mark-command]\), \
+With prefix argument (e.g., \\[universal-argument] \\[set-mark-command]), \
jump to the mark, and set the mark from
-position popped off the local mark ring \(this does not affect the global
-mark ring\). Use \\[pop-global-mark] to jump to a mark popped off the global
-mark ring \(see `pop-global-mark'\).
+position popped off the local mark ring (this does not affect the global
+mark ring). Use \\[pop-global-mark] to jump to a mark popped off the global
+mark ring (see `pop-global-mark').
If `set-mark-command-repeat-pop' is non-nil, repeating
the \\[set-mark-command] command with no prefix argument pops the next position
;; the middle of a continued line. When we get to
;; line-move-finish, point is at the start of a new *screen*
;; line but the same text line; then line-move-to-column would
- ;; move us backwards. Test using C-n with point on the "x" in
+ ;; move us backwards. Test using C-n with point on the "x" in
;; (insert "a" (propertize "x" 'field t) (make-string 89 ?y))
(and forward
(< (point) old)
(defun choose-completion (&optional event)
"Choose the completion at point.
-If EVENT, use EVENTs position to determine the starting position."
+If EVENT, use EVENT's position to determine the starting position."
(interactive (list last-nonmenu-event))
;; In case this is run via the mouse, give temporary modes such as
;; isearch a chance to turn off.
(w32-add-charset-info "tis620-0" 'w32-charset-thai 874)
(w32-add-charset-info "iso8859-1" 'w32-charset-ansi 1252)
-(make-obsolete-variable 'w32-enable-italics
- 'w32-enable-synthesized-fonts "21.1")
-(make-obsolete-variable 'w32-charset-to-codepage-alist
- 'w32-charset-info-alist "21.1")
-
\f
;;;; Support for build process
(string :tag "Font")))))))
:group 'w32)
+(make-obsolete-variable 'w32-enable-synthesized-fonts nil "24.4")
+
(provide 'w32-vars)
;;; w32-vars.el ends here
(defvar whitespace-space 'whitespace-space
"Symbol face used to visualize SPACE.
Used when `whitespace-style' includes the value `spaces'.")
-(make-obsolete-variable 'whitespace-space "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-space "use the face instead." "24.4")
(defface whitespace-space
(defvar whitespace-hspace 'whitespace-hspace
"Symbol face used to visualize HARD SPACE.
Used when `whitespace-style' includes the value `spaces'.")
-(make-obsolete-variable 'whitespace-hspace "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-hspace "use the face instead." "24.4")
(defface whitespace-hspace ; 'nobreak-space
'((((class color) (background dark))
(defvar whitespace-tab 'whitespace-tab
"Symbol face used to visualize TAB.
Used when `whitespace-style' includes the value `tabs'.")
-(make-obsolete-variable 'whitespace-tab "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-tab "use the face instead." "24.4")
(defface whitespace-tab
'((((class color) (background dark))
See `whitespace-display-mappings'.
Used when `whitespace-style' includes the values `newline-mark'
and `newline'.")
-(make-obsolete-variable 'whitespace-newline "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-newline "use the face instead." "24.4")
(defface whitespace-newline
'((default :weight normal)
(defvar whitespace-trailing 'whitespace-trailing
"Symbol face used to visualize trailing blanks.
Used when `whitespace-style' includes the value `trailing'.")
-(make-obsolete-variable 'whitespace-trailing "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-trailing "use the face instead." "24.4")
(defface whitespace-trailing ; 'trailing-whitespace
'((default :weight bold)
"Symbol face used to visualize \"long\" lines.
See `whitespace-line-column'.
Used when `whitespace-style' includes the value `line'.")
-(make-obsolete-variable 'whitespace-line "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-line "use the face instead." "24.4")
(defface whitespace-line
'((((class mono)) :inverse-video t :weight bold :underline t)
"Symbol face used to visualize SPACEs before TAB.
Used when `whitespace-style' includes the value `space-before-tab'.")
(make-obsolete-variable 'whitespace-space-before-tab
- "use the face instead" "24.4")
+ "use the face instead." "24.4")
(defface whitespace-space-before-tab
'((((class mono)) :inverse-video t :weight bold :underline t)
(defvar whitespace-indentation 'whitespace-indentation
"Symbol face used to visualize 8 or more SPACEs at beginning of line.
Used when `whitespace-style' includes the value `indentation'.")
-(make-obsolete-variable 'whitespace-indentation "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-indentation "use the face instead." "24.4")
(defface whitespace-indentation
'((((class mono)) :inverse-video t :weight bold :underline t)
(defvar whitespace-empty 'whitespace-empty
"Symbol face used to visualize empty lines at beginning and/or end of buffer.
Used when `whitespace-style' includes the value `empty'.")
-(make-obsolete-variable 'whitespace-empty "use the face instead" "24.4")
+(make-obsolete-variable 'whitespace-empty "use the face instead." "24.4")
(defface whitespace-empty
'((((class mono)) :inverse-video t :weight bold :underline t)
"Symbol face used to visualize 8 or more SPACEs after TAB.
Used when `whitespace-style' includes the value `space-after-tab'.")
(make-obsolete-variable 'whitespace-space-after-tab
- "use the face instead" "24.4")
+ "use the face instead." "24.4")
(defface whitespace-space-after-tab
'((((class mono)) :inverse-video t :weight bold :underline t)
`(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name))
(standard-output ,buffer)
,window ,value)
+ (setq ,value (progn ,@body))
(with-current-buffer ,buffer
- (setq ,value (progn ,@body))
(setq ,window (temp-buffer-window-show ,buffer ,action)))
(if (functionp ,quit-function)
(window--side-check frame)
(window--atom-check frame))
+;; Dumping frame/window contents.
+(defun window--dump-window (&optional window erase)
+ "Dump WINDOW to buffer *window-frame-dump*.
+WINDOW must be a valid window and defaults to the selected one.
+Optional argument ERASE non-nil means erase *window-frame-dump*
+before writing to it."
+ (setq window (window-normalize-window window))
+ (with-current-buffer (get-buffer-create "*window-frame-dump*")
+ (when erase (erase-buffer))
+ (insert
+ (format "%s parent: %s\n" window (window-parent window))
+ (format "pixel left: %s top: %s size: %s x %s new: %s\n"
+ (window-pixel-left window) (window-pixel-top window)
+ (window-size window t t) (window-size window nil t)
+ (window-new-pixel window))
+ (format "char left: %s top: %s size: %s x %s new: %s\n"
+ (window-left-column window) (window-top-line window)
+ (window-total-size window t) (window-total-size window)
+ (window-new-total window))
+ (format "normal: %s x %s new: %s\n"
+ (window-normal-size window t) (window-normal-size window)
+ (window-new-normal window)))
+ (when (window-live-p window)
+ (let ((fringes (window-fringes window))
+ (margins (window-margins window)))
+ (insert
+ (format "body pixel: %s x %s char: %s x %s\n"
+ (window-body-width window t) (window-body-height window t)
+ (window-body-width window) (window-body-height window))
+ (format "width left fringe: %s left margin: %s right margin: %s\n"
+ (car fringes) (or (car margins) 0) (or (cdr margins) 0))
+ (format "width right fringe: %s scroll-bar: %s divider: %s\n"
+ (cadr fringes)
+ (window-scroll-bar-width window)
+ (window-right-divider-width window))
+ (format "height header-line: %s mode-line: %s divider: %s\n"
+ (window-header-line-height window)
+ (window-mode-line-height window)
+ (window-bottom-divider-width window)))))
+ (insert "\n")))
+
+(defun window--dump-frame (&optional window-or-frame)
+ "Dump WINDOW-OR-FRAME to buffer *window-frame-dump*.
+WINDOW-OR-FRAME can be a frame or a window and defaults to the
+selected frame. When WINDOW-OR-FRAME is a window, dump that
+window's frame. The buffer *window-frame-dump* is erased before
+dumping to it."
+ (interactive)
+ (let* ((window
+ (cond
+ ((or (not window-or-frame)
+ (frame-live-p window-or-frame))
+ (frame-root-window window-or-frame))
+ ((or (window-live-p window-or-frame)
+ (window-child window-or-frame))
+ window-or-frame)
+ (t
+ (frame-root-window))))
+ (frame (window-frame window)))
+ (with-current-buffer (get-buffer-create "*window-frame-dump*")
+ (erase-buffer)
+ (insert
+ (format "frame pixel: %s x %s cols/lines: %s x %s units: %s x %s\n"
+ (frame-pixel-width frame) (frame-pixel-height frame)
+ (frame-total-cols frame) (frame-text-lines frame) ; (frame-total-lines frame)
+ (frame-char-width frame) (frame-char-height frame))
+ (format "frame text pixel: %s x %s cols/lines: %s x %s\n"
+ (frame-text-width frame) (frame-text-height frame)
+ (frame-text-cols frame) (frame-text-lines frame))
+ (format "tool: %s scroll: %s fringe: %s border: %s right: %s bottom: %s\n\n"
+ (tool-bar-height frame t)
+ (frame-scroll-bar-width frame)
+ (frame-fringe-width frame)
+ (frame-border-width frame)
+ (frame-right-divider-width frame)
+ (frame-bottom-divider-width frame)))
+ (walk-window-tree 'window--dump-window frame t t))))
+
;;; Window sizes.
(defun window-total-size (&optional window horizontal round)
"Return the total height or width of WINDOW.
;; windows such that the new (or resized) windows can get a
;; size less than the user-specified `window-min-height' and
;; `window-min-width'.
- (let ((frame (window-frame window))
- (fringes (window-fringes window))
- (scroll-bars (window-scroll-bars window)))
+ (let* ((char-size (frame-char-size window t))
+ (fringes (window-fringes window))
+ (pixel-width
+ (+ (window-safe-min-size window t t)
+ (car fringes) (cadr fringes)
+ (window-scroll-bar-width window)
+ (window-right-divider-width window))))
(if pixelwise
(max
- (+ (window-safe-min-size window t t)
- (car fringes) (cadr fringes)
- (cond
- ((memq (nth 2 scroll-bars) '(left right))
- (nth 1 scroll-bars))
- ((memq (frame-parameter frame 'vertical-scroll-bars)
- '(left right))
- (frame-parameter frame 'scroll-bar-width))
- (t 0)))
+ (if window-resize-pixelwise
+ pixel-width
+ ;; Round up to next integral of columns.
+ (* (ceiling pixel-width char-size) char-size))
(if (window--size-ignore-p window ignore)
0
(window-min-pixel-width)))
(max
- (+ window-safe-min-width
- (ceiling (car fringes) (frame-char-width frame))
- (ceiling (cadr fringes) (frame-char-width frame))
- (cond
- ((memq (nth 2 scroll-bars) '(left right))
- (nth 1 scroll-bars))
- ((memq (frame-parameter frame 'vertical-scroll-bars)
- '(left right))
- (ceiling (or (frame-parameter frame 'scroll-bar-width) 14)
- (frame-char-width)))
- (t 0)))
+ (ceiling pixel-width char-size)
(if (window--size-ignore-p window ignore)
0
window-min-width)))))
- (pixelwise
- (max
- (+ (window-safe-min-size window nil t)
- (window-header-line-height window)
- (window-mode-line-height window))
- (if (window--size-ignore-p window ignore)
- 0
- (window-min-pixel-height))))
- (t
- ;; For the minimum height of a window take any mode- or
- ;; header-line into account.
- (max (+ window-safe-min-height
- (if header-line-format 1 0)
- (if mode-line-format 1 0))
- (if (window--size-ignore-p window ignore)
- 0
- window-min-height))))))))
+ ((let ((char-size (frame-char-size window))
+ (pixel-height
+ (+ (window-safe-min-size window nil t)
+ (window-header-line-height window)
+ (window-mode-line-height window)
+ (window-bottom-divider-width window))))
+ (if pixelwise
+ (max
+ (if window-resize-pixelwise
+ pixel-height
+ ;; Round up to next integral of lines.
+ (* (ceiling pixel-height char-size) char-size))
+ (if (window--size-ignore-p window ignore)
+ 0
+ (window-min-pixel-height)))
+ (max (ceiling pixel-height char-size)
+ (if (window--size-ignore-p window ignore)
+ 0
+ window-min-height))))))))))
(defun window-sizable (window delta &optional horizontal ignore pixelwise)
"Return DELTA if DELTA lines can be added to WINDOW.
(unless (eq sub window)
(setq delta
(min delta
- (- (window-size sub horizontal pixelwise 'floor)
- (window-min-size
- sub horizontal ignore pixelwise)))))
+ (max (- (window-size sub horizontal pixelwise 'ceiling)
+ (window-min-size
+ sub horizontal ignore pixelwise))
+ 0))))
(setq sub (window-right sub))))
(if noup
delta
(t
(setq delta
(+ delta
- (- (window-size sub horizontal pixelwise 'floor)
- (window-min-size
- sub horizontal ignore pixelwise))))))
+ (max
+ (- (window-size sub horizontal pixelwise 'ceiling)
+ (window-min-size
+ sub horizontal ignore pixelwise))
+ 0)))))
(setq sub (window-right sub))))
;; For an ortho-combination throw DELTA when at least one
;; child window is fixed-size.
;; Otherwise, resize all other windows in the same combination.
(window--resize-siblings window delta horizontal ignore))
(when (window--resize-apply-p frame horizontal)
- (window-resize-apply frame horizontal)
- (window--pixel-to-total frame horizontal)
- (run-window-configuration-change-hook frame)))
+ (if (window-resize-apply frame horizontal)
+ (progn
+ (window--pixel-to-total frame horizontal)
+ (run-window-configuration-change-hook frame))
+ (error "Failed to apply resizing %s" window))))
(t
(error "Cannot resize window %s" window)))))
(setq best-value most-negative-fixnum)
(while sub
(when (and (consp (window-new-normal sub))
- (not (zerop (car (window-new-normal sub))))
+ (not (<= (car (window-new-normal sub)) 0))
(> (cdr (window-new-normal sub)) best-value))
(setq best-window sub)
(setq best-value (cdr (window-new-normal sub))))
best-window
(if (= (car (window-new-normal best-window)) best-delta)
'skip ; We can't shrink best-window any further.
- (cons (1- (car (window-new-normal best-window)))
+ (cons (- (car (window-new-normal best-window)) best-delta)
(- (/ (float (window-new-pixel best-window))
parent-total)
(window-normal-size best-window horizontal))))))))
(window--resize-reset frame horizontal)
;; Try to enlarge LEFT first.
(setq this-delta (window--resizable
- left delta horizontal nil nil nil nil pixelwise))
+ left delta horizontal nil 'after nil nil pixelwise))
(unless (zerop this-delta)
(window--resize-this-window
left this-delta horizontal nil t 'before
;; Try to enlarge RIGHT.
(setq this-delta
(window--resizable
- right (- delta) horizontal nil nil nil nil pixelwise))
+ right (- delta) horizontal nil 'before nil nil pixelwise))
(unless (zerop this-delta)
(window--resize-this-window
right this-delta horizontal nil t 'after
# AS_VAR_COPY was added in autoconf 2.63b
m4_define_default([AS_VAR_COPY],
[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])
+
+# AC_PROG_SED was added in autoconf 2.59b
+m4_ifndef([AC_PROG_SED],
+[AC_DEFUN([AC_PROG_SED],
+[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
+ [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
+ dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ AS_UNSET([ac_script])
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ _AS_PATH_WALK([], [
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ AS_EXECUTABLE_P(["$ac_path_SED"]) || continue
+ case `"$ac_path_SED" --version 2>&1` in
+ *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;;
+ *)
+ ac_count=0
+ _AS_ECHO_N([0123456789]) >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >> conftest.nl
+ "$ac_path_SED" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best so far, but keep looking for better
+ ac_cv_path_SED=$ac_path_SED
+ ac_path_SED_max=$ac_count
+ fi
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+ esac
+ $ac_path_SED_found && break 3
+ done
+ done])
+ if test -z "$ac_cv_path_SED"; then
+ AC_ERROR([no acceptable sed could be found in \$PATH])
+ fi
+ else
+ ac_cv_path_SED=$SED
+ fi
+ SED="$ac_cv_path_SED"
+ AC_SUBST([SED])dnl
+ rm -f conftest.sed
+])])])
#include <features.h>
#ifdef __GNU_LIBRARY__
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || (__GLIBC__ > 2)) \
- && !defined __UCLIBC__
+ && !(__UCLIBC__ && __HAS_NO_THREADS__)
Thread emulation available
#endif
#endif
+2014-02-24 Daniel Colascione <dancol@dancol.org>
+
+ * keyboard.c (read_char): Close race that resulted in lost events.
+
+2014-02-22 Glenn Morris <rgm@gnu.org>
+
+ * frame.c (frame-alpha-lower-limit, frame-resize-pixelwise):
+ * window.c (window-resize-pixelwise): Doc fixes.
+
+ * process.c (Finternal_default_process_filter)
+ (Finternal_default_process_sentinel): Doc tweaks.
+
+2014-02-21 Glenn Morris <rgm@gnu.org>
+
+ * process.c (Fprocess_buffer, Faccept_process_output)
+ (Finternal_default_process_filter, Finternal_default_process_sentinel):
+ Doc fixes.
+
+2014-02-21 Martin Rudalics <rudalics@gmx.at>
+
+ * window.c (Fwindow_scroll_bar_width): New function.
+
+2014-02-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ Pacify GCC when configuring with --enable-gcc-warnings.
+ * xdisp.c (move_it_in_display_line_to) [lint]:
+ Initialize recently-added local.
+
+2014-02-21 Daniel Colascione <dancol@dancol.org>
+
+ * dbusbind.c: Rename dbus-init-bus to dbus-init-bus-1.
+
2014-02-20 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (init_iterator): Don't dereference a bogus face
\f
/* Subroutines. */
-static Lisp_Object Qdbus_init_bus;
+static Lisp_Object Qdbus_init_bus_1;
static Lisp_Object Qdbus_get_unique_name;
static Lisp_Object Qdbus_message_internal;
return;
}
-DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 2, 0,
+DEFUN ("dbus-init-bus-1", Fdbus_init_bus_1, Sdbus_init_bus_1, 1, 2, 0,
doc: /* Establish the connection to D-Bus BUS.
+This function is dbus-internal. You almost certainly want to use
+dbus-init-bus.
+
BUS can be either the symbol `:system' or the symbol `:session', or it
can be a string denoting the address of the corresponding bus. For
the system and session buses, this function is called when loading
syms_of_dbusbind (void)
{
- DEFSYM (Qdbus_init_bus, "dbus-init-bus");
- defsubr (&Sdbus_init_bus);
+ DEFSYM (Qdbus_init_bus_1, "dbus-init-bus-1");
+ defsubr (&Sdbus_init_bus_1);
DEFSYM (Qdbus_get_unique_name, "dbus-get-unique-name");
defsubr (&Sdbus_get_unique_name);
DEFVAR_LISP ("frame-alpha-lower-limit", Vframe_alpha_lower_limit,
doc: /* The lower limit of the frame opacity (alpha transparency).
The value should range from 0 (invisible) to 100 (completely opaque).
-You can also use a floating number between 0.0 and 1.0.
-The default is 20. */);
+You can also use a floating number between 0.0 and 1.0. */);
Vframe_alpha_lower_limit = make_number (20);
#endif
by one pixel.
With some window managers you have to set this to non-nil in order to
-fully maximize frames. The default of this option is nil. To resize
-your initial frame pixelwise, set this option in your init file. */);
+fully maximize frames. To resize your initial frame pixelwise,
+set this option to a non-nil value in your init file. */);
frame_resize_pixelwise = 0;
staticpro (&Vframe_list);
{
c = read_decoded_event_from_main_queue (end_time, local_getcjmp,
prev_event, used_mouse_menu);
- if (end_time && timespec_cmp (*end_time, current_timespec ()) <= 0)
- goto exit;
+ if (NILP(c) && end_time &&
+ timespec_cmp (*end_time, current_timespec ()) <= 0)
+ {
+ goto exit;
+ }
+
if (EQ (c, make_number (-2)))
{
/* This is going to exit from read_char
/* Asynchronous subprocess control for GNU Emacs.
-Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2014 Free Software
-Foundation, Inc.
+Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2014
+ Free Software Foundation, Inc.
This file is part of GNU Emacs.
DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
1, 1, 0,
doc: /* Return the buffer PROCESS is associated with.
-Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
+The default process filter inserts output from PROCESS into this buffer. */)
(register Lisp_Object process)
{
CHECK_PROCESS (process);
The filter gets two arguments: the process and the string of output.
The string argument is normally a multibyte string, except:
-- if the process' input coding system is no-conversion or raw-text,
+- if the process's input coding system is no-conversion or raw-text,
it is a unibyte string (the non-converted input), or else
- if `default-enable-multibyte-characters' is nil, it is a unibyte
string (the result of converting the decoded input multibyte
CHECK_PROCESS (process);
p = XPROCESS (process);
- /* Don't signal an error if the process' input file descriptor
+ /* Don't signal an error if the process's input file descriptor
is closed. This could make debugging Lisp more difficult,
for example when doing something like
is the server process, CLIENT is the new process for the connection,
and MESSAGE is a string.
-:plist PLIST -- Install PLIST as the new process' initial plist.
+:plist PLIST -- Install PLIST as the new process's initial plist.
:server QLEN -- if QLEN is non-nil, create a server process for the
specified FAMILY, SERVICE, and connection type (stream or datagram).
for the connection with the following parameters:
- The client's process name is constructed by concatenating the server
-process' NAME and a client identification string.
+process's NAME and a client identification string.
- If the FILTER argument is non-nil, the client process will not get a
separate process buffer; otherwise, the client's process buffer is a newly
-created buffer named after the server process' BUFFER name or process
+created buffer named after the server process's BUFFER name or process
NAME concatenated with the client identification string.
- The connection type and the process filter and sentinel parameters are
-inherited from the server process' TYPE, FILTER and SENTINEL.
-- The client process' contact info is set according to the client's
+inherited from the server process's TYPE, FILTER and SENTINEL.
+- The client process's contact info is set according to the client's
addressing information (typically an IP address and a port number).
-- The client process' plist is initialized from the server's plist.
+- The client process's plist is initialized from the server's plist.
Notice that the FILTER and SENTINEL args are never used directly by
the server process. Also, the BUFFER argument is not used directly by
the server process, but via the optional :log function, accepted (and
-failed) connections may be logged in the server process' buffer.
+failed) connections may be logged in the server process's buffer.
The original argument list, modified with the actual connection
information, is available via the `process-contact' function.
DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
0, 4, 0,
doc: /* Allow any pending output from subprocesses to be read by Emacs.
-It is read into the process' buffers or given to their filter functions.
+It is given to their filter functions.
Non-nil arg PROCESS means do not return until some output has been received
from PROCESS.
DEFUN ("internal-default-process-filter", Finternal_default_process_filter,
Sinternal_default_process_filter, 2, 2, 0,
- doc: /* Function used as default process filter. */)
+ doc: /* Function used as default process filter.
+This inserts the process's output into its buffer, if there is one.
+Otherwise it discards the output. */)
(Lisp_Object proc, Lisp_Object text)
{
struct Lisp_Process *p;
DEFUN ("internal-default-process-sentinel", Finternal_default_process_sentinel,
Sinternal_default_process_sentinel, 2, 2, 0,
- doc: /* Function used as default sentinel for processes. */)
+ doc: /* Function used as default sentinel for processes.
+This inserts a status message into the process's buffer, if there is one. */)
(Lisp_Object proc, Lisp_Object msg)
{
Lisp_Object buffer, symbol;
return (make_number (WINDOW_BOTTOM_DIVIDER_WIDTH (decode_live_window (window))));
}
+DEFUN ("window-scroll-bar-width", Fwindow_scroll_bar_width,
+ Swindow_scroll_bar_width, 0, 1, 0,
+ doc: /* Return the width in pixels of WINDOW's vertical scrollbar.
+WINDOW must be a live window and defaults to the selected one. */)
+ (Lisp_Object window)
+{
+ return (make_number (WINDOW_SCROLL_BAR_AREA_WIDTH (decode_live_window (window))));
+}
+
DEFUN ("window-hscroll", Fwindow_hscroll, Swindow_hscroll, 0, 1, 0,
doc: /* Return the number of columns by which WINDOW is scrolled from left margin.
WINDOW must be a live window and defaults to the selected one. */)
Vwindow_persistent_parameters = list1 (Fcons (Qclone_of, Qt));
DEFVAR_BOOL ("window-resize-pixelwise", window_resize_pixelwise,
- doc: /* Non-nil means resizing windows works pixelwise.
-Functions currently affected by this option are `split-window',
-`maximize-window', `minimize-window', `fit-window-to-buffer' and
-`fit-frame-to-buffer' and all functions symmetrically resizing a
-parent window.
+ doc: /* Non-nil means resize windows pixelwise.
+This currently affects the functions: `split-window', `maximize-window',
+`minimize-window', `fit-window-to-buffer' and `fit-frame-to-buffer', and
+all functions that symmetrically resize a parent window.
Note that when a frame's pixel size is not a multiple of the
frame's character size, at least one window may get resized
defsubr (&Swindow_header_line_height);
defsubr (&Swindow_right_divider_width);
defsubr (&Swindow_bottom_divider_width);
+ defsubr (&Swindow_scroll_bar_width);
defsubr (&Swindow_inside_edges);
defsubr (&Swindow_inside_pixel_edges);
defsubr (&Swindow_inside_absolute_pixel_edges);
void *ppos_data = NULL;
int may_wrap = 0;
enum it_method prev_method = it->method;
- ptrdiff_t closest_pos, prev_pos = IT_CHARPOS (*it);
+ ptrdiff_t closest_pos IF_LINT (= 0), prev_pos = IT_CHARPOS (*it);
int saw_smaller_pos = prev_pos < to_charpos;
/* Don't produce glyphs in produce_glyphs. */
+2014-02-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * automated/tramp-tests.el
+ (tramp-test19-directory-files-and-attributes): Do not include
+ directories in comparison; they might have changed their
+ timestamps already.
+
2014-02-20 Michael Albinus <michael.albinus@gmx.de>
* automated/tramp-tests.el (tramp--instrument-test-case): New macro.
(setq attr (directory-files-and-attributes tmp-name))
(should (consp attr))
(dolist (elt attr)
- (should
- (equal (file-attributes (expand-file-name (car elt) tmp-name))
- (cdr elt))))
+ ;; We cannot include "." and "..". They might have
+ ;; changed their timestamp already.
+ (when (string-match "foo$\\|bar$\\|baz$" (car elt))
+ (should
+ (equal (file-attributes (expand-file-name (car elt) tmp-name))
+ (cdr elt)))))
(setq attr (directory-files-and-attributes tmp-name 'full))
(dolist (elt attr)
- (should
- (equal (file-attributes (car elt)) (cdr elt))))
+ ;; We cannot include "." and "..". They might have
+ ;; changed their timestamp already.
+ (when (string-match "foo$\\|bar$\\|baz$" (car elt))
+ (should
+ (equal (file-attributes (car elt)) (cdr elt)))))
(setq attr (directory-files-and-attributes tmp-name nil "^b"))
(should (equal (mapcar 'car attr) '("bar" "boz"))))
(ignore-errors (delete-directory tmp-name 'recursive))))))
.lose(
q, p)
+a.records().map(&:b).zip(
+ foo)
+
+# FIXME: This is not consistent with the example below it, but this
+# ofset only happens if the colon is at eol, which wouldn't be often.
+# Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
+# distinguish from a variable reference inside a ternary operator.
foo(bar:
tee)
foo(:bar =>
- tee)
+ tee)
+
+{'a' => {
+ 'b' => 'c',
+ 'd' => %w(e f)
+ }
+}