Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs into feature/pgtk

This commit is contained in:
Yuuki Harano 2020-12-21 01:53:07 +09:00
commit 565d8f57d3
273 changed files with 12022 additions and 7080 deletions

View file

@ -9,6 +9,7 @@
(c-noise-macro-names . ("INLINE" "ATTRIBUTE_NO_SANITIZE_UNDEFINED" "UNINIT" "CALLBACK" "ALIGN_STACK"))
(electric-quote-comment . nil)
(electric-quote-string . nil)
(indent-tabs-mode . t)
(mode . bug-reference-prog)))
(objc-mode . ((c-file-style . "GNU")
(electric-quote-comment . nil)

View file

@ -467,7 +467,12 @@ Changes to files matching one of the regexps in this list are not listed.")
"notes/font-backend"
;; ada-mode has been deleted, now in GNU ELPA
"ada-mode.texi"
"doc/misc/ada-mode.texi"
"lisp/progmodes/ada-mode.el"
"lisp/progmodes/ada-prj.el"
"lisp/progmodes/ada-xref.el"
"GNUS-NEWS"
"etc/GNUS-NEWS"
"doc/misc/gnus-news.el"
"src/fingerprint-dummy.c"
"src/fingerprint.h"
@ -878,6 +883,7 @@ Changes to files in this list are not listed.")
"lisp/obsolete/spell.el"
"lisp/obsolete/swedish.el"
"lisp/obsolete/sym-comp.el"
"obsolete/sym-comp.el"
"library-of-babel.org"
"flymake-elisp.el"
"flymake-ui.el"
@ -999,7 +1005,8 @@ in the repository.")
("nxml/test.invalid.xml" . "test-invalid.xml")
("nxml/test.valid.xml" . "test-valid.xml")
("automated/Makefile.in" . "test/Makefile.in")
("test/rmailmm.el" . "rmailmm.el")
("test/rmailmm.el" . "test/manual/rmailmm.el")
("rmailmm.el" . "test/manual/rmailmm.el")
;; The one in lisp is eshell/eshell.el.
("eshell.el" . "eshell-tests.el")
("automated/eshell.el" . "eshell-tests.el")
@ -1123,10 +1130,13 @@ in the repository.")
("lisp/net/starttls.el" . "lisp/obsolete/starttls.el")
("url-ns.el" . "lisp/obsolete/url-ns.el")
("gnus-news.texi" . "doc/misc/gnus.texi")
("lisp/multifile.el". "lisp/fileloop.el")
("lisp/emacs-lisp/thread.el". "lisp/thread.el")
("lisp/multifile.el" . "lisp/fileloop.el")
("lisp/emacs-lisp/thread.el" . "lisp/thread.el")
("lisp/emacs-lisp/cl.el" . "lisp/emacs-lisp/cl-lib.el")
("lisp/progmodes/mantemp.el" . "lisp/obsolete/mantemp.el")
("src/mini-gmp.c" . "lib/mini-gmp.c")
("src/mini-gmp.h" . "lib/mini-gmp.h")
("sysdep.c" . "src/sysdep.c")
)
"Alist of files which have been renamed during their lifetime.
Elements are (OLDNAME . NEWNAME).")
@ -1600,7 +1610,7 @@ and a buffer *Authors Errors* containing references to unknown files."
;; the versioned ChangeLog.N rather than the unversioned ChangeLog.
(zerop (call-process "make" nil nil nil
"-C" root "change-history-nocommit"))
(error "Problem updating ChangeLog"))
(error "Problem updating ChangeLog, try \"C-u M-x authors RET\""))
(let ((logs (process-lines find-program root "-name" "ChangeLog*"))
(table (make-hash-table :test 'equal))
(buffer-name "*Authors*")

85
admin/emake Executable file
View file

@ -0,0 +1,85 @@
#!/bin/bash
# This script is meant to be used as ./admin/emake, and will compile
# the Emacs tree with virtually all of the informational messages
# removed, and with errors/warnings highlighted in red. It'll give a
# quick overview to confirm that nothing has broken, for instance
# after doing a "git pull". It's not meant to be used during actual
# development, because it removes so much information that commands
# like `next-error' won't be able to jump to the source code where
# errors are.
cores=1
# Determine the number of cores.
if [ -f /proc/cpuinfo ]; then
cores=$(($(egrep "^physical id|^cpu cores" /proc/cpuinfo |\
awk '{ print $4; }' |\
sed '$!N;s/\n/ /' |\
uniq |\
sed 's/^[0-9]*/+/')))
fi
make -j$cores "$@" 2>&1 | \
sed -u 's# \.\./\.\./# #
s# \.\./# #
s#^Configuring local git # Configuring local git #
s#^Installing git hooks...# Installing git hooks...#
s#^Running # Running #
s#^Configured for # Configured for #
s#^./temacs # ./temacs #
s#^Dumping under the name# Dumping under the name#
' | \
egrep --line-buffered -v "^make|\
^Loading|\
SCRAPE|\
INFO.*Scraping.*[.]\$|\
^Waiting for git|\
^Finding pointers|\
^Using load-path|\
^Adding name|\
^Dump mode|\
^Dumping finger|\
^Byte counts|\
^Reloc counts|\
^Pure-hashed|\
^cp -f temacs|\
^rm -f bootstrap|\
^Dump complete|\
^rm -f emacs|\
mkdir -p etc|\
mkdir -p info|\
mkdir -p lisp|\
^LC_ALL.*pdump|\
^cp -f emacs.p|\
GEN.*loaddefs|\
^Reloading stale|\
^Source file.*newer than|\
^Directories for loaddefs|\
^./autogen.sh|\
^[Cc]hecking |\
^.Read INSTALL.REPO for more|\
^Your system has the required tools.|\
^Building aclocal.m4|\
^ Running 'autoreconf|\
^You can now run './configure'|\
^./configure|\
^configure: creating|\
^\"configure\" file built.|\
^There seems to be no|\
^config.status:|\
^ *$|\
^Makefile built|\
The GNU allocators don't work|\
^git config |\
^'\.git/|\
^\^\(\(|\
^'build-aux/git-hooks\
" | \
while read
do
C=""
[[ "X${REPLY:0:1}" != "X " ]] && C="\033[1;31m"
[[ "X${REPLY:0:3}" == "X " ]] && C="\033[1;31m"
[[ "X$C" == "X" ]] && printf "%s\n" "$REPLY" || printf "$C%s\033[0m\n" "$REPLY"
done

View file

@ -33,17 +33,32 @@ General steps (for each step, check for possible errors):
or some form of "git clean -x". It's probably simpler and safer to
make a new working directory exclusively for the release branch.
Make sure the tree is built, or at least configured. That's
because some of the commands below run Make, so they need
Makefiles to be present.
2. Regenerate the etc/AUTHORS file:
M-: (require 'authors) RET
M-x authors RET
(This first updates the current versioned ChangeLog.N)
If there is an "*Authors Errors*" buffer, address the issues.
If there was a ChangeLog typo, fix the relevant entry.
If a file was deleted or renamed, consider adding an appropriate
entry to authors-ignored-files, authors-valid-file-names, or
authors-renamed-files-alist.
If this says "Problem updating ChangeLog", find the reason for the
failure of the command it runs, viz.:
make -C ROOT change-history-nocommit
(where ROOT is the top-level directory where you run this). It
could be because there are uncommitted changes in ChangeLog.N, for
example. One possible way forward is to invoke "C-u M-x authors",
which will skip updating the versioned ChangeLog.N file.
After "M-x authors" finishes, if there is an "*Authors Errors*"
buffer, address the issues. If there was a ChangeLog typo, fix
the relevant entry. If a file was deleted or renamed, consider
adding an appropriate entry to variables authors-ignored-files,
authors-valid-file-names, or authors-renamed-files-alist in
authors.el.
If necessary, repeat 'C-u M-x authors' after making those changes.
Save the "*Authors*" buffer as etc/AUTHORS.

View file

@ -310,7 +310,10 @@ Scroll one screen backward, and move point onscreen if necessary
@kindex M-g c
@findex goto-char
Read a number @var{n} and move point to buffer position @var{n}.
Position 1 is the beginning of the buffer.
Position 1 is the beginning of the buffer. If point is on or just
after a number in the buffer, that is the default for @var{n}. Just
type @key{RET} in the minibuffer to use it. You can also specify
@var{n} by giving @kbd{M-g c} a numeric prefix argument.
@item M-g M-g
@itemx M-g g

View file

@ -255,7 +255,7 @@ indentation; otherwise, it inserts a tab character.
indent can be further customized via the @code{tab-first-completion}
variable. For instance, if that variable is @code{eol}, only complete
if point is at the end of a line. @xref{Mode-Specific Indent,,,
elisp, The Emacs Lisp Reference Manual} for further details.
elisp, The Emacs Lisp Reference Manual}, for further details.
@cindex Electric Indent mode
@cindex mode, Electric Indent

View file

@ -1709,6 +1709,7 @@ connections. A setup to use this functionality could be:
@example
[Socket]
ListenStream=/path/to/.emacs.socket
DirectoryMode=0700
[Install]
WantedBy=sockets.target

View file

@ -1591,6 +1591,14 @@ value is used.
Otherwise, Rmail will ask you for the password to use.
@end enumerate
On some mail servers the usernames include domain information, which
can mean they contain the @samp{@@} character. The inbox specifier
string uses @samp{@@} to signal the start of the mailserver name.
This creates confusion for movemail. If your username contains
@samp{@@} and you're using Mailutils @command{movemail} then you can
fix this: Replace @code{@@} in the user name with its @acronym{URL}
encoding @samp{%40}.
@vindex rmail-movemail-flags
If you need to pass additional command-line flags to @command{movemail},
set the variable @code{rmail-movemail-flags} a list of the flags you

View file

@ -1771,6 +1771,7 @@ occurrence of @var{string}. When done, exit the recursive editing level
with @kbd{C-M-c} to proceed to the next occurrence.
@item e
@itemx E
to edit the replacement string in the minibuffer. When you exit the
minibuffer by typing @key{RET}, the minibuffer contents replace the
current occurrence of the pattern. They also become the new

View file

@ -928,6 +928,13 @@ remapping), and @code{this-original-command} gives the command that
was specified to run but remapped into another command.
@end defvar
@defvar current-minibuffer-command
This has the same value as @code{this-command}, but is bound
recursively when entering a minibuffer. This variable can be used
from minibuffer hooks and the like to determine what command opened
the current minibuffer session.
@end defvar
@defun this-command-keys
This function returns a string or vector containing the key sequence
that invoked the present command. Any events read by the command

View file

@ -129,9 +129,18 @@ This is a subcategory of @code{file-error}. @xref{Modification Time}.
This is a subcategory of @code{file-error}. It happens, when a file
could not be watched for changes. @xref{File Notifications}.
@item remote-file-error
This is a subcategory of @code{file-error}, which results from
problems in accessing a remote file. @xref{Remote Files,,, emacs, The
GNU Emacs Manual}. Often, this error appears when timers, process
filters, process sentinels or special events in general try to access
a remote file, and collide with another remote file operation. In
general it is a good idea to write a bug report.
@xref{Bugs,,, emacs, The GNU Emacs Manual}.
@c net/ange-ftp.el
@item ftp-error
This is a subcategory of @code{file-error}, which results from
This is a subcategory of @code{remote-file-error}, which results from
problems in accessing a remote file using ftp. @xref{Remote Files,,,
emacs, The GNU Emacs Manual}.

View file

@ -625,7 +625,7 @@ All the data here is approximate, because there's really no consistent
way to compute the size of a variable. For instance, two variables
may share parts of a data structure, and this will be counted twice,
but this command may still give a useful high-level overview of which
parts of Emacs is using memory.
parts of Emacs are using memory.
@end defun
@node Stack-allocated Objects

View file

@ -2812,6 +2812,11 @@ the shift modifier:
@xref{Function Keys}, for more information about how to add modifiers to
function keys.
If you have functions that change whether a tool bar item is enabled
or not, this status is not necessarily updated visually immediately.
To force recalculation of the tool bar, call
@code{force-mode-line-update} (@pxref{Mode Line Format}).
@node Modifying Menus
@subsection Modifying Menus
@cindex menu modification

View file

@ -1803,7 +1803,8 @@ The value should be a function to add prefixes and suffixes to
completions. This function must accept one argument, a list of
completions, and should return such a list of completions where
each element contains a list of three elements: a completion,
a prefix string, and a suffix string.
a prefix string, and a suffix string. This function takes priority
over @code{:annotation-function}.
@item :exit-function
The value should be a function to run after performing completion.
@ -1911,7 +1912,8 @@ completions. The function should take one argument,
return such a list of @var{completions} where each element contains a list
of three elements: a completion, a prefix which is displayed before
the completion string in the @file{*Completions*} buffer, and
a suffix displayed after the completion string.
a suffix displayed after the completion string. This function
takes priority over @code{annotation-function}.
@item display-sort-function
The value should be a function for sorting completions. The function

View file

@ -2106,6 +2106,19 @@ run while waiting. If a timer function needs to perform an action
after a certain time has elapsed, it can do this by scheduling a new
timer.
If a timer function performs a remote file operation, it can be in
conflict with an already running remote file operation of the same
connection. Such conflicts are detected, and they result in a
@code{remote-file-error} error (@pxref{Standard Errors}). This should
be protected by wrapping the timer function body with
@lisp
@group
(ignore-error 'remote-file-error
@dots{})
@end group
@end lisp
If a timer function calls functions that can change the match data,
it should save and restore the match data. @xref{Saving Match Data}.

View file

@ -1287,7 +1287,7 @@ be used.)
@subsubheading Cross-file variable checking
@strong{Note:} This is an experimental feature that may change or
@strong{Caution:} This is an experimental feature that may change or
disappear without prior notice.
The byte-compiler can also warn about lexical variables that are

View file

@ -594,11 +594,11 @@ You can get a printed reference card listing commands and keys to
invoke them. You can order one from the FSF for $2 (or 10 for $18),
or you can print your own from the @file{etc/refcards/refcard.tex} or
@file{etc/refcards/refcard.pdf} files in the Emacs distribution.
Beginning with version 21.1, the Emacs distribution comes with
translations of the reference card into several languages; look for
files named @file{etc/refcards/@var{lang}-refcard.*}, where @var{lang}
is a two-letter code of the language. For example, the German version
of the reference card is in the files @file{etc/refcards/de-refcard.tex}
The Emacs distribution comes with translations of the reference card
into several languages; look for files named
@file{etc/refcards/@var{lang}-refcard.*}, where @var{lang} is a
two-letter code of the language. For example, the German version of
the reference card is in the files @file{etc/refcards/de-refcard.tex}
and @file{etc/refcards/de-refcard.pdf}.
@item
@ -1672,8 +1672,6 @@ would use with @code{display-line-numbers}.
There is also the @samp{linum} package (distributed with Emacs since
version 23.1) which will henceforth become obsolete. Users and
developers are encouraged to use @samp{display-line-numbers} instead.
The packages @samp{setnu} and @samp{wb-line-number} (not distributed
with Emacs) also implement this feature.
@node Displaying the current file name in the titlebar
@section How can I modify the titlebar to contain the current file name?
@ -1694,7 +1692,7 @@ machine at which Emacs was invoked. This is done by setting
@code{frame-title-format} to the default value of
@lisp
(multiple-frames "%b" ("" invocation-name "@@" (system-name)))
(multiple-frames "%b" ("" "%b - GNU Emacs at " system-name))
@end lisp
To modify the behavior such that frame titlebars contain the buffer's
@ -3322,7 +3320,7 @@ the main GNU distribution site, sources are available as
@c Don't include VER in the file name, because pretests are not there.
@uref{https://ftp.gnu.org/pub/gnu/emacs/emacs-VERSION.tar.gz}
(Replace @samp{VERSION} with the relevant version number, e.g., @samp{23.1}.)
(Replace @samp{VERSION} with the relevant version number, e.g., @samp{28.1}.)
@item
Next uncompress and extract the source files. This requires
@ -3392,7 +3390,7 @@ problem (@pxref{Reporting bugs}).
* Packages that do not come with Emacs::
* Spell-checkers::
* Current GNU distributions::
* Difference between Emacs and XEmacs::
* What was XEmacs?::
* Emacs for minimalists::
* Emacs for MS-DOS::
* Emacs for MS-Windows::
@ -3528,35 +3526,21 @@ A list of sites mirroring @samp{ftp.gnu.org} can be found at
@uref{https://www.gnu.org/prep/ftp}
@node Difference between Emacs and XEmacs
@section What is the difference between Emacs and XEmacs (formerly Lucid Emacs)?
@node What was XEmacs?
@section What was XEmacs?
@cindex XEmacs
@cindex Difference Emacs and XEmacs
@cindex Lucid Emacs
@cindex Epoch
XEmacs was a branch version of Emacs that is no longer actively
developed. XEmacs was first called Lucid Emacs, and was initially
derived from a prerelease version of Emacs 19. In this FAQ, we use
the name ``Emacs'' only for the official version.
developed. XEmacs last released a new version on January 30, 2009,
and it lacks many important features that exist in Emacs. Since its
development has stopped, we do not expect to see any new releases.
XEmacs last released a new version on January 30, 2009, and it lacks
many important features that exists in Emacs. In the past, it was not
uncommon for Emacs packages to include code for compatibility with
XEmacs. Nowadays, although some packages still maintain such
compatibility code, several of the more popular built-in and third
party packages have either stopped supporting XEmacs or were developed
In the past, it was not uncommon for Emacs packages to include code
for compatibility with XEmacs. Nowadays, most built-in and third party
packages have either stopped supporting XEmacs or were developed
exclusively for Emacs.
Some XEmacs code has been contributed to Emacs, and we would like to
use other parts, but the earlier XEmacs maintainers did not always
keep track of the authors of contributed code, which makes it
impossible for the FSF to get copyright papers signed for that code.
(The FSF requires these papers for all the code included in the Emacs
release, aside from generic C support packages that retain their
separate identity and are not integrated into the code of Emacs
proper.)
XEmacs was initially derived from a prerelease version of Emacs 19.
If you want to talk about these two versions and distinguish them,
please call them ``Emacs'' and ``XEmacs.'' To contrast ``XEmacs''
with ``GNU Emacs'' would be misleading, since XEmacs too has its
@ -3622,8 +3606,8 @@ For MS-DOS, @pxref{Emacs for MS-DOS}.
@section Where can I get Emacs for GNUstep?
@cindex GNUstep, Emacs for
Beginning with version 23.1, Emacs supports GNUstep natively.
See the file @file{nextstep/INSTALL} in the distribution.
Emacs supports GNUstep natively. See the file @file{nextstep/INSTALL}
in the distribution.
@node Emacs for macOS
@section Where can I get Emacs for macOS?
@ -3631,8 +3615,8 @@ See the file @file{nextstep/INSTALL} in the distribution.
@cindex Macintosh, Emacs for
@cindex macOS, Emacs for
Beginning with version 22.1, Emacs supports macOS natively.
See the file @file{nextstep/INSTALL} in the distribution.
Emacs supports macOS natively. See the file @file{nextstep/INSTALL}
in the distribution.
@c ------------------------------------------------------------
@node Key bindings

View file

@ -581,7 +581,8 @@ can use the following function:
Compute @var{buffer}'s region (@var{beg} . @var{end}) corresponding
to @var{line} and @var{col}. If @var{col} is @code{nil}, return a
region just for @var{line}. Return @code{nil} if the region is
invalid.
invalid. This function saves match data (@pxref{Saving Match Data,,,
elisp, The Emacs Lisp Reference Manual}).
@end deffn
@cindex add a log message

File diff suppressed because it is too large Load diff

View file

@ -2508,7 +2508,7 @@ whatever shell is installed on the device with this setting:
@lisp
@group
(add-to-list 'tramp-connection-properties
(list (regexp-quote "192.168.0.26") "remote-shell" "sh"))
(list (regexp-quote "192.168.0.26") "remote-shell" "sh"))
@end group
@end lisp
@ -2560,7 +2560,7 @@ the previous example, fix the connection properties as follows:
@lisp
@group
(add-to-list 'tramp-connection-properties
(list (regexp-quote "android") "remote-shell" "sh"))
(list (regexp-quote "android") "remote-shell" "sh"))
@end group
@end lisp
@ -4341,9 +4341,9 @@ configure @file{~/.ssh/config} on the proxy host:
@example
@group
Host *
ControlMaster auto
ControlPath tramp.%C
ControlPersist no
ControlMaster auto
ControlPath tramp.%C
ControlPersist no
@end group
@end example
@ -4877,6 +4877,25 @@ In case you have installed it from its Git repository, @ref{Recompilation}.
@end ifset
@item
I get an error @samp{Remote file error: Forbidden reentrant call of Tramp}
Timers, process filters and sentinels, and other event based functions
can run at any time, when a remote file operation is still running.
This can cause @value{tramp} to block. When such a situation is
detected, this error is triggered. It shall be fixed in the
respective function (an error report will help), but for the time
being you can suppress this error by the following code in your
@file{~/.emacs}:
@lisp
@group
(setq debug-ignored-errors
(cons 'remote-file-error debug-ignored-errors))
@end group
@end lisp
@item
How to disable other packages from calling @value{tramp}?
@ -4982,7 +5001,7 @@ handlers.
@node External packages
@section Integrating with external Lisp packages
@subsection File name completion.
@subsection File name completion
@vindex non-essential
Sometimes, it is not convenient to open a new connection to a remote
@ -5000,7 +5019,7 @@ bind it to non-@code{nil} value.
@end lisp
@subsection File attributes cache.
@subsection File attributes cache
Keeping a local cache of remote file attributes in sync with the
remote host is a time-consuming operation. Flushing and re-querying
@ -5040,6 +5059,25 @@ root-directory, it is most likely sufficient to make the
@code{default-directory} of the process buffer as the root directory.
@subsection Timers
Timers run asynchronously at any time when Emacs is waiting for
sending a string to a process, or waiting for process output. They
can run any remote file operation, which would conflict with the
already running remote file operation, if the same connection is
affected. @value{tramp} detects this situation, and raises the
@code{remote-file-error} error. A timer function shall avoid this
situation. At least, it shall protect itself against this error, by
wrapping the timer function body with
@lisp
@group
(ignore-error 'remote-file-error
@dots{})
@end group
@end lisp
@node Traces and Profiles
@chapter How to Customize Traces
@vindex tramp-verbose

View file

@ -89,7 +89,7 @@ useful on systems such as FreeBSD which ships only with "etc/termcap".
This is controlled by the new variable 'scroll-minibuffer-conservatively'.
In addition, there is a new variable
`redisplay-adhoc-scroll-in-resize-mini-windows` to disable the
'redisplay-adhoc-scroll-in-resize-mini-windows' to disable the
ad-hoc auto-scrolling when resizing minibuffer windows. It has been
found that its heuristic can be counter productive in some corner
cases, tho the cure may be worse than the disease. This said, the
@ -257,6 +257,10 @@ When 'widen-automatically' is non-nil, 'goto-line' widens the narrowed
buffer to be able to move point to the inaccessible portion.
'goto-line-relative' is bound to 'C-x n g'.
+++
** When called interactively, 'goto-char' now offers the number at
point as default.
+++
** When 'suggest-key-bindings' is non-nil, the completion list of 'M-x'
shows equivalent key bindings for all commands that have them.
@ -299,8 +303,8 @@ the buffer cycles the whole buffer between "only top-level headings",
* Changes in Specialized Modes and Packages in Emacs 28.1
** Loading dunnet.el in batch mode doesn't start the game any more
Instead you need to do 'emacs -f dun-batch' to start the game in
** Loading dunnet.el in batch mode doesn't start the game any more.
Instead you need to do "emacs -f dun-batch" to start the game in
batch mode.
** Emacs Server
@ -519,21 +523,20 @@ tags to be considered as well.
+++
*** New user option 'gnus-registry-register-all'.
If non-nil (the default), create registry entries for all messages.
If nil, don't automatically create entries, they must be created
manually.
+++
*** New user options to customise the summary line specs %[ and %].
*** New user options to customise the summary line specs "%[" and "%]".
Four new options introduced in customisation group
'gnus-summary-format'. These are 'gnus-sum-opening-bracket',
'gnus-sum-closing-bracket', 'gnus-sum-opening-bracket-adopted', and
'gnus-sum-closing-bracket-adopted'. Their default values are '[', ']',
'<', '>' respectively. These variables control the appearance of '%['
and '%]' specs in the summary line format. '%[' will normally display
'gnus-sum-closing-bracket-adopted'. Their default values are "[", "]",
"<", ">" respectively. These options control the appearance of "%["
and "%]" specs in the summary line format. "%[" will normally display
the value of 'gnus-sum-opening-bracket', but can also be
'gnus-sum-opening-bracket-adopted' for the adopted articles. '%]' will
'gnus-sum-opening-bracket-adopted' for the adopted articles. "%]" will
normally display the value of 'gnus-sum-closing-bracket', but can also
be 'gnus-sum-closing-bracket-adopted' for the adopted articles.
@ -1126,13 +1129,13 @@ If 'shr-width' is non-nil, it overrides this variable.
** Images
---
** Can explicitly specify base_uri for svg images.
*** You can explicitly specify base_uri for svg images.
':base-uri' image property can be used to explicitly specify base_uri
for embedded images into svg. ':base-uri' is supported for both file
for embedded images into svg. ':base-uri' is supported for both file
and data svg images.
+++
** 'svg-embed-base-uri-image' added to embed images
*** 'svg-embed-base-uri-image' added to embed images.
'svg-embed-base-uri-image' can be used to embed images located
relatively to 'file-name-directory' of the ':base-uri' svg image property.
This works much faster then 'svg-embed'.
@ -1252,8 +1255,8 @@ project's root directory, respectively.
So typing 'C-u RET' in the "*xref*" buffer quits its window
before navigating to the selected location.
*** New options xref-search-program and xref-search-program-alist.
So far Grep and ripgrep are supported. ripgrep seems to offer better
*** New user options 'xref-search-program' and 'xref-search-program-alist'.
So far 'grep' and 'ripgrep' are supported. 'ripgrep' seems to offer better
performance in certain cases, in particular for case-insensitive
searches.
@ -1437,6 +1440,11 @@ that makes it a valid button.
** Miscellaneous
+++
*** New variable 'current-minibuffer-command'.
This is like 'this-command', but it is bound recursively when entering
the minibuffer.
+++
*** New function 'object-intervals'.
This function returns a copy of the list of intervals (i.e., text
@ -1473,6 +1481,10 @@ completions with more information in completion prefix and suffix.
This new option allows the user to customize how case is converted
when unifying entries.
---
*** The user option `bibtex-maintain-sorted-entries' now permits
user-defined sorting schemes.
+++
*** 'format-seconds' can now be used for sub-second times.
The new optional "," parameter has been added, and
@ -1553,12 +1565,6 @@ both modes are on).
This works like 'report-emacs-bug', but is more geared towards sending
patches to the Emacs issue tracker.
---
*** 'icomplete-show-matches-on-no-input' behavior change.
Previously, choosing a different completion with commands like 'C-.'
and then hitting 'RET' would choose the default completion. Doing
this will now choose the completion under point.
+++
*** The user can now customize how "default" values are prompted for.
The new utility function 'format-prompt' has been added which uses the
@ -1609,7 +1615,9 @@ horizontally and vertically, respectively.
*** Change in meaning of 'icomplete-show-matches-on-no-input'.
Previously, choosing a different completion with commands like 'C-.'
and then hitting 'RET' would choose the default completion. Doing this
will now choose the completion under point instead.
will now choose the completion under point instead. Also when this option
is nil, completions are not shown when the minibuffer reads a file name
with initial input as the default directory.
---
*** The width of the buffer-name column in 'list-buffers' is now dynamic.
@ -1757,14 +1765,12 @@ used instead.
* New Modes and Packages in Emacs 28.1
** Lisp Data mode
The new command 'lisp-data-mode' enables a major mode for buffers
composed of Lisp symbolic expressions that do not form a computer
program. The ".dir-locals.el" file is automatically set to use this
mode, as are other data files produced by Emacs.
** hierarchy.el
It's a library to create, query, navigate and display hierarchy structures.
** New themes 'modus-vivendi' and 'modus-operandi'.
@ -1774,6 +1780,14 @@ using 'M-x customize-themes' or 'load-theme' from your init file.
Consult the Modus Themes Info manual for more information on the user
options they provide.
** Dictionary mode
This is a mode for searching a RFC 2229 dictionary server.
'dictionary' opens a buffer for starting operations.
'dictionary-search' performs a lookup for a word. It also supports a
'dictionary-tooltip-mode' which performs a lookup of the word under
the mouse in 'dictionary-tooltip-dictionary' (which must be customized
first).
* Incompatible Editing Changes in Emacs 28.1
@ -1924,7 +1938,7 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
* Lisp Changes in Emacs 28.1
** New function `garbage-collect-maybe` to trigger GC early
** New function 'garbage-collect-maybe' to trigger GC early.
---
** 'defvar' detects the error of defining a variable currently lexically bound.
@ -2149,6 +2163,20 @@ and 'play-sound-file'.
If this variable is non-nil, character syntax is used for printing
numbers when this makes sense, such as '?A' for 65.
** New error 'remote-file-error', a subcategory of 'file-error'.
It is signaled if a remote file operation fails due to internal
reasons, and could block Emacs. It does not replace 'file-error'
signals for the usual cases. Timers, process filters and process
functions, which run remote file operations, shall protect themselves
against this error.
If such an error occurs, please report this as bug via 'M-x report-emacs-bug'.
Until it is solved you could ignore such errors by performing
(setq debug-ignored-errors (cons 'remote-file-error debug-ignored-errors))
** The error 'ftp-error' belongs also to category 'remote-file-error'.
* Changes in Emacs 28.1 on Non-Free Operating Systems

View file

@ -10,6 +10,546 @@ See the end of the file for license conditions.
Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
* Version 9.4
** Incompatible changes
*** Possibly broken internal file links: please check and fix
A bug has been affecting internal links to headlines, like
: [[*Headline][A link to a headline]]
Storing a link to a headline may have been broken in your setup and
those links may appear as
: [[*TODO Headline][A link to a headline]]
Following the link above will result in an error: the TODO keyword
should not be part of internal file links.
You can use the following command to fix links in an Org buffer:
#+begin_src emacs-lisp
(defun org-fix-links ()
"Fix ill-formatted internal links.
E.g. replace [[*TODO Headline][headline]] by [[*Headline][headline]].
Go through the buffer and ask for the replacement."
(interactive)
(visible-mode 1)
(save-excursion
(goto-char (point-min))
(let ((regexp (format "\\[\\[\\*%s\\s-+"
(regexp-opt org-todo-keywords-1 t))))
(while (re-search-forward regexp nil t)
(when (and (save-excursion
(goto-char (match-beginning 0))
(looking-at-p org-link-bracket-re))
(y-or-n-p "Fix link (remove TODO keyword)? "))
(replace-match "[[*")))))
(visible-mode -1))
#+end_src
*** Calling conventions changes when opening or exporting custom links
This changes affects export back-ends, and libraries providing new
link types.
Function used in ~:follow~ link parameter is required to accept a
second argument. Likewise, function used in ~:export~ parameter needs
to accept a fourth argument. See ~org-link-set-parameters~ for
details.
Eventually, the function ~org-export-custom-protocol-maybe~ is now
called with a fourth argument. Even though the 3-arguments definition
is still supported, at least for now, we encourage back-end developers
to switch to the new signature.
*** Python session return values must be top-level expression statements
Python blocks with ~:session :results value~ header arguments now only
return a value if the last line is a top-level expression statement.
Also, when a None value is returned, "None" will be printed under
"#+RESULTS:", as it already did with ~:results value~ for non-session
blocks.
*** In HTML export, change on how outline-container-* is set
When the headline has a =CUSTOM_ID=, use this custom id to build the
div id. For example, if you have =:CUSTOM_ID: my-headline= then the
resulting <div> will be ~<div id="outline-container-my-headline">~.
You may want to check whether your HTML files are rendered differently
after this change.
*** New keybinding =<C-c C-TAB>= for ~org-force-cycle-archived~
~org-force-cycle-archived~ used to be associated with =<C-TAB>= but
this keybinding is used in Emacs for navigating tabs in Emacs. The
new keybinding is =<C-c C-TAB>=.
** New default settings for some options
These options now default to =t=:
- ~org-loop-over-headlines-in-active-region~
- ~org-fontify-done-headline~
- ~org-src-tab-acts-natively~
You may want to read the docstrings of these options to understand the
consequences of this change.
Also, ~org-startup-folded~ now defaults to ~showeverything~.
** New features
*** Looping agenda commands over headlines
~org-agenda-loop-over-headlines-in-active-region~ allows you to loop
agenda commands over the active region.
When set to =t= (the default), loop over all headlines. When set to
='start-level=, loop over headlines with the same level as the first
headline in the region. When set to a string, loop over lines
matching this regular expression.
*** New minor mode ~org-table-header-line-mode~
Turn on the display of the first data row of the table at point in the
window header line when this first row is not visible anymore in the
buffer.
You can activate this minor mode by default by setting the option
~org-table-header-line-p~ to =t=. You can also change the face for
the header line by customizing the ~org-table-header~ face.
*** New minor mode ~org-list-checkbox-radio-mode~
When this minor mode is on, checkboxes behave as radio buttons: if a
checkbox is turned on, other checkboxes at the same level are turned
off.
If you want to occasionally toggle a checkbox as a radio button
without turning this minor mode on, you can use =<C-c C-x C-r>= to
call ~org-toggle-radio-button~.
You can also add =#+ATTR_ORG: :radio t= right before the list to tell
Org to use radio buttons for this list only.
*** New allowed value for ~org-adapt-indentation~
~org-adapt-indentation~ now accepts a new value, ='headline-data=.
When set to this value, Org will only adapt indentation of headline
data lines, such as planning/clock lines and property/logbook drawers.
Also, with this setting, =org-indent-mode= will keep these data lines
correctly aligned with the headline above.
*** Numeric priorities are now allowed (up to 65)
You can now set ~org-priority-highest/lowest/default~ to integers to
use numeric priorities globally or set, for example
#+PRIORITIES: 1 10 5
to define a buffer-local range and default for priorities. Priority
commands should work as usual. You cannot use numbers superior to 64
for numeric priorities, as it would clash with priorities like [#A]
where the "A" is internally converted to its numeric value of 65.
*** Property drawers allowed before first headline
Property drawers are now allowed before the first headline.
Org mode is moving more towards making things before the first
headline behave just as if it was at outline level 0. Inheritance for
properties will work also for this level. In other words: defining
things in a property drawer before the first headline will make them
"inheritable" for all headlines.
*** Refinement in window behavior on exiting Org source buffer
After editing a source block, Org will restore the window layout when
~org-src-window-setup~ is set to a value that modifies the layout.
*** Display remote inline images
Org now knows how to display remote images inline.
Whether the images are actually displayed is controlled by the new
option ~org-display-remote-inline-images~.
*** New option to resolve open clock at a provided time
~org-resolve-clocks~ now has a `t' option, which works just like the
`k' option, but the user specifies a time of day, not a number of
minutes.
*** New step value =semimonth= accepted for clock tables
*** Allow text rescaling in column view
You can now use =C-x C-+= in column view: the columns face size will
increase or decrease, together with the column header size.
*** New startup option =#+startup: num=
When this startup option is set, display headings as numerated.
Use =#+startup: nonum= to turn this off.
*** New tool for custom links
Org provides a new tool ~org-link-open-as-file~, useful when defining
new link types similar to "file"-type links. See docstring for
details.
*** New optional numeric argument for ~org-return~
In situations where ~org-return~ calls ~newline~, multiple newlines
can now be inserted with this prefix argument.
*** New source code block header argument =:file-mode=
Source code block header argument =:file-mode= can set file
permissions if =:file= argument is provided.
*** =RET= and =C-j= now obey ~electric-indent-mode~
Since Emacs 24.4, ~electric-indent-mode~ is enabled by default. In
most major modes, this causes =RET= to reindent the current line and
indent the new line, and =C-j= to insert a newline without indenting.
Org mode now obeys this minor mode: when ~electric-indent-mode~ is
enabled, and point is neither in a table nor on a timestamp or a link:
- =RET= (bound to ~org-return~) reindents the current line and indents
the new line;
- =C-j= (bound to the new command ~org-return-and-maybe-indent~)
merely inserts a newline.
To get the previous behaviour back, disable ~electric-indent-mode~
explicitly:
#+begin_src emacs-lisp
(add-hook 'org-mode-hook (lambda () (electric-indent-local-mode -1)))
#+end_src
Alternatively, if you wish to keep =RET= as the "smart-return" key,
but dislike Org's default indentation of sections, you may prefer to
customize ~org-adapt-indentation~ to either =nil= or ='headline-data=.
*** =ob-C.el= allows the inclusion of non-system header files
In C and C++ blocks, ~:includes~ arguments that do not start with a
~<~ character will now be formatted as double-quoted ~#include~
statements.
*** =ob-clojure.el= supports inf-clojure.el and ClojureScript evaluation
You can now set ~(setq org-babel-clojure-backend 'inf-clojure)~ and
evaluate Clojure source blocks using [[https://github.com/clojure-emacs/inf-clojure][inf-clojure]]. With a header
argument like =:alias "alias"= the Clojure REPL will boot with
=clojure -Aalias=. Otherwise Clojure will boot with =lein=, =boot= or
=tools.deps=, depending on whether the current directory contains a
=project.clj=, =build.boot= or =deps.edn=, falling back on
~inf-clojure-generic-cmd~ in case no such file is present.
Also, when using [[https://github.com/clojure-emacs/cider][cider]], you can now use =#+begin_src clojurescript= to
execute ClojureScript code from Org files. Note that this works only
if your Org file is associated with a cider session that knows how to
run ClojureScript code. A bare =lein repl= session outside of a
directory configured for ClojureScript will /not/ work.
*** =ob-java.el= supports Java command line arguments
Babel Java blocks recognize header argument =:cmdargs= and pass its
value in call to =java=.
*** =ob-screen.el= now accepts =:screenrc= header argument
Screen blocks now recognize the =:screenrc= header argument and pass
its value to the screen command via the "-c" option. The default
remains =/dev/null= (i.e. a clean screen session)
*** =ob-plantuml=: now supports using PlantUML executable to generate diagrams
Set =org-plantuml-exec-mode= to ='plantuml= in order to use the
executable instead of JAR. When using an executable it is also
possible to configure executable location as well as arguments via:
=org-plantuml-executable-path= and =org-plantuml-executable-args=.
** New commands
*** ~org-table-header-line-mode~
Turn on a minor mode to display the first data row of the table at
point in the header-line when the beginning of the table is invisible.
*** ~org-agenda-ctrl-c-ctrl-c~
Hitting =<C-c C-c>= in an agenda view now calls ~org-agenda-set-tags~.
*** ~org-hide-entry~
This command is the counterpart of ~org-show-entry~.
*** ~org-columns-toggle-or-columns-quit~
=<C-c C-c>= bound to ~org-columns-toggle-or-columns-quit~ replaces the
recent ~org-columns-set-tags-or-toggle~. Tag setting is still
possible via column view value edit or with =<C-c C-q>=.
*** ~org-datetree-find-month-create~
Find or create a month entry for a date.
** New options and settings
*** New option ~org-html-prefer-user-labels~
When non-nil, use =NAME= affiliated keyword, or raw target values, to
generate anchor's ID. Otherwise, consistently use internal naming
scheme.
=CUSTOM_ID= values are still always used, when available.
*** New option for using tabs in ~org-agenda-window-setup~
Choosing ~other-tab~ for ~org-agenda-window-setup~ will open the
agenda view in a new tab. This will work with versions of Emacs since
27.1 when ~tab-bar-mode~ was introduced.
*** New option ~org-table-header-line-p~
Setting this option to =t= will activate ~org-table-header-line-mode~
in org-mode buffers.
*** New option ~org-startup-numerated~
When this option is =t=, Org files will start using ~(org-num-mode 1)~
and headings will be visually numerated.
You can turn this on/off on a per-file basis with =#+startup: num= or
=#+startup: nonum=.
*** New option ~org-clock-auto-clockout-timer~
When this option is set to a number and the user configuration
contains =(org-clock-auto-clockout-insinuate)=, Org will clock out the
currently clocked in task after that number of seconds of idle time.
This is useful when you often forget to clock out before being idle
and don't want to have to manually set the clocking time to take into
account.
*** New option to group captured datetime entries by month
A new `:tree-type month' option was added to org-capture-templates to
group new datetime entries by month.
*** New option to show source buffers using "plain" display-buffer
There is a new option ~plain~ to ~org-src-window-setup~ to show source
buffers using ~display-buffer~. This allows users to control how
source buffers are displayed by modifying ~display-buffer-alist~ or
~display-buffer-base-action~.
*** New option ~org-archive-subtree-save-file-p~
Archiving a subtree used to always save the target archive buffer.
Commit [[https://code.orgmode.org/bzg/org-mode/commit/b186d1d7][b186d1d7]] changed this behavior by always not saving the target
buffer, because batch archiving from agenda could take too much time.
This new option ~org-archive-subtree-save-file-p~ defaults to the
value =from-org= so that archiving a subtree will save the target
buffer when done from an org-mode buffer, but not from the agenda.
You can also set this option to =t= or to =from-agenda=.
*** New option ~org-show-notification-timeout~
This option will add a timeout to notifications.
*** New option ~org-latex-to-html-convert-command~
This new option allows you to convert a LaTeX fragment directly into
HTML.
*** New option ~org-babel-shell-results-defaults-to-output~
By default, source code blocks are executed in "functional mode": it
means that the results of executing them are the value of their last
statement (see [[https://orgmode.org/manual/Results-of-Evaluation.html][the documentation]].)
The value of a shell script's execution is its exit code. But most
users expect the results of executing a shell script to be its output,
not its exit code.
So we introduced this option, that you can set to =nil= if you want
to stick using ~:results value~ as the implicit header.
In all Babel libraries, the absence of a ~:results~ header should
produce the same result than setting ~:results value~, unless there is
an option to explicitly create an exception.
See [[https://orgmode.org/list/CA+A2iZaziAfMeGpBqL6qGrzrWEVvLvC0DUw++T4gCF3NGuW-DQ@mail.gmail.com/][this thread]] for more context.
*** New option in ~org-attach-store-link-p~
~org-attach-store-link-p~ has a new option to store a file link to the
attachment.
*** New option ~org-fontify-todo-headline~
This feature is the same as ~org-fontify-done-headline~, but for TODO
headlines instead. This allows you to distinguish TODO headlines from
normal headlines. The face can be customized via ~org-headline-todo~.
*** New default value for ~org-file-apps~
The new value uses Emacs as the application for opening directory.
*** New hook ~org-agenda-filter-hook~
Functions in this hook are run after ~org-agenda-filter~ is called.
** Removed or renamed functions and variables
*** Deprecated ~org-flag-drawer~ function
Use ~org-hide-drawer-toggle~ instead.
*** Deprecated ~org-hide-block-toggle-maybe~ function
Use ~org-hide-block-toggle~ instead.
*** Deprecated ~org-hide-block-toggle-all~ function
This function was not used in the code base, and has no clear use
either. It has been marked for future removal. Please contact the
mailing list if you use this function.
*** Deprecated ~org-return-indent~ function
In Elisp code, use ~(org-return t)~ instead. Interactively, =C-j= is
now bound to ~org-return-and-maybe-indent~, which indents the new line
when ~electric-indent-mode~ is disabled.
*** Removed ~org-maybe-keyword-time-regexp~
The variable was not used in the code base.
*** Removed ~org-export-special-keywords~
The variable was not used in the code base.
*** Renamed ~org-at-property-block-p~
The new name is ~org-at-property-drawer-p~, which is less confusing.
*** Renamed ~org-columns-set-tags-or-toggle~
See [[*~org-columns-toggle-or-columns-quit~]].
*** Renamed priority options
From ~org-lowest-priority~ to ~org-priority-lowest~.
From ~org-default-priority~ to ~org-priority-default~.
From ~org-highest-priority~ to ~org-priority-highest~.
From ~org-enable-priority-commands~ to ~org-priority-enable-commands~.
From ~org-show-priority~ to ~org-priority-show~.
** Miscellaneous
*** =ob-screen.el= now respects screen =:session= name
Screen babel session are now named based on the =:session= header
argument (defaults to ~default~).
Previously all session names had ~org-babel-session-~ prepended.
*** Forward/backward paragraph functions in line with the rest of Emacs
~org-forward-paragraph~ and ~org-backward-paragraph~, bound to
~<C-UP>~ and ~<C-DOWN>~ functions mimic more closely behaviour of
~forward-paragraph~ and ~backward-paragraph~ functions when
available.
They also accept an optional argument for multiple calls.
See their docstring for details.
*** ~org-table-to-lisp~ no longer checks if point is at a table
The caller is now responsible for the check. It can use, e.g.,
~org-at-table-p~.
The function is also much more efficient than it used to be, even on
very large tables.
*** New function ~org-collect-keywords~
*** Drawers' folding use an API similar to block's
Tooling for folding drawers interactively or programmatically is now
on par with block folding. In particular, ~org-hide-drawer-toggle~,
a new function, is the central place for drawer folding.
*** Duration can be read and written in compact form
~org-duration-to-minutes~ understands =1d3h5min= as a duration,
whereas ~org-duration-from-minutes~ can output this compact form if
the duration format contains the symbol ~compact~.
*** C-n, C-p, SPC and DEL in agenda commands dispatch window
You can now use =<C-n>=, =<C-p>=, =<SPC>= and =<DEL>= key to scroll up
and down the agenda and attach dispatch window.
*** =<C-c C-c>= in agenda calls ~org-agenda-set-tags~
Both =<C-c C-q>= and =<C-c C-c>= set the tags of the headline in the
Org buffer. Both keybindings are now available from the agenda too.
*** Allow to use an empty HTML extension
Using =(setq org-html-extension "")= or setting the HTML extension in
any fashion will produce the expected output, with no trailing period
to the resulting HTML file.
*** Handle repeated tasks with =.+= type and hours step
A task using a =.+= repeater and hours step is repeated starting from
now. E.g.,
#+begin_example
,,** TODO Wash my hands
DEADLINE: <2019-04-05 08:00 Sun .+1h>
Marking this DONE shifts the date to exactly one hour from now.
#+end_example
*** The format of equation reference in HTML export can now be specified
By default, HTML (via MathJax) and LaTeX export equation references
using different commands. LaTeX must use ~\ref{%s}~ because it is used
for all labels; however, HTML (via MathJax) uses ~\eqref{%s}~ for
equations producing inconsistent output. New option
~org-html-equation-reference-format~ sets the command used in HTML
export.
*** =ob-haskell.el= supports compilation with =:compile= header argument
By default, Haskell blocks are interpreted. By adding =:compile yes=
to a Haskell source block, it will be compiled, executed and the
results will be displayed.
*** Support for ~org-edit-special~ with LaTeX fragments
Calling ~org-edit-special~ on an inline LaTeX fragment calls a new
function, ~org-edit-latex-fragment~. This functions in a comparable
manner to editing inline source blocks, bringing up a minibuffer set
to LaTeX mode. The math-mode deliminators are read only.
*** ~org-capture-current-plist~ is now accessible during ~org-capture-mode-hook~
*** New =org-refile.el= file
Org refile variables and functions have been moved to a new file.
*** The end of a 7 years old bug
This bug [[https://lists.gnu.org/archive/html/emacs-orgmode/2013-08/msg00072.html][originally reported]] by Matt Lundin and investigated by Andrew
Hyatt has been fixed. Thanks to both of them.
* Version 9.3
** Incompatible changes
@ -19,15 +559,11 @@ Org used to percent-encode sensitive characters in the URI part of the
bracket links.
Now, escaping mechanism uses the usual backslash character, according
to the following rules, applied in order:
to the following rules:
1. All consecutive =\= characters at the end of the link must be
escaped;
2. Any =]= character at the very end of the link must be escaped;
3. All consecutive =\= characters preceding =][= or =]]= patterns must
be escaped;
4. Any =]= character followed by either =[= or =]= must be escaped;
5. Others =]= and =\= characters need not be escaped.
1. All =[= and =]= characters in the URI must be escaped;
2. Every =\= character preceding either =[= or =]= must be escaped;
3. Every =\= character at the end of the URI must be escaped.
When in doubt, use the function ~org-link-escape~ in order to turn
a link string into its properly escaped form.
@ -141,7 +677,7 @@ Export ignore done tasks with a deadline when
Likewise, scheduled done tasks are also ignored when
~org-icalendar-use-scheduled~ contains the same symbol.
*** Add split-window-right option for src block edit window placement
*** Add ~split-window-right~ option for src block edit window placement
Given the increasing popularity of wide screen monitors, splitting
horizontally may make more sense than splitting vertically. An
@ -364,7 +900,6 @@ the headline to use for making the table of contents.
,* Another section
,#+TOC: headlines 1 :target "#TargetSection"
#+end_example
** New functions
*** ~org-dynamic-block-insert-dblock~
@ -474,6 +1009,16 @@ I.e. treat the whole file as if it was a subtree.
*** Respect narrowing when agenda command is restricted to buffer
*** ~org-table-insert-column~ inserts the column at point position
Before, the new column was inserted to the right of the column at
point position.
*** Table column deletion now consistent with row deletion
Point stays in the column at deletion, except when deleting the
rightmost column.
* Version 9.2
** Incompatible changes
*** Removal of OrgStruct mode mode and radio lists
@ -484,7 +1029,7 @@ and ~org-list-radio-lists-templates~) are removed from the code base.
Note that only radio /lists/ have been removed, not radio tables.
If you want to manipulate lists like in Org in other modes, we suggest
to use orgalist.el, which you can install from GNU ELPA.
to use =orgalist.el=, which you can install from GNU ELPA.
If you want to use Org folding outside of Org buffers, you can have a
look at the outshine package in the MELPA repository.
@ -1276,9 +1821,9 @@ removed from Gnus circa September 2010.
*** ~org-agenda-repeating-timestamp-show-all~ is removed.
For an equivalent to a ~nil~ value, set
For an equivalent to a =nil= value, set
~org-agenda-show-future-repeats~ to nil and
~org-agenda-prefer-last-repeat~ to ~t~.
~org-agenda-prefer-last-repeat~ to =t=.
*** ~org-gnus-nnimap-query-article-no-from-file~ is removed.
@ -1296,7 +1841,7 @@ equivalent to the removed format string.
*** ~org-enable-table-editor~ is removed.
Setting it to a ~nil~ value broke some other features (e.g., speed
Setting it to a =nil= value broke some other features (e.g., speed
keys).
*** ~org-export-use-babel~ cannot be set to ~inline-only~
@ -1377,16 +1922,20 @@ is now obsolete.
Now ~=...=~ markup uses ~@samp{}~ instead of ~@verb{}~. You can use
~@verb{}~ again by customizing the variable.
*** Texinfo exports example blocks as ~@example~
*** Texinfo exports inline source blocks as ~@code{}~
*** Texinfo default table markup is ~@asis~
It used to be ~@samp~ but ~@asis~ is neutral and, therefore, more
suitable as a default value.
*** Texinfo default process includes ~--no-split~ option
*** New entities : ~\dollar~ and ~\USD~
*** Support for date style URLs in =org-protocol://open-source=
URLs like =https://cool-blog.com/2017/05/20/cool-post/= are
covered by rewrite rules.
URLs like =https://cool-blog.com/2017/05/20/cool-post/= are covered by
rewrite rules.
*** Add (C) =COMMENT= support to ~org-structure-template-alist~
@ -1476,7 +2025,7 @@ Moreover, ~:export-block~ keyword used in ~org-export-define-backend~ and
~org-export-define-derived-backend~ is no longer used and needs to be
removed.
*** Footnotes
*** Footnotes changes
**** [1]-like constructs are not valid footnotes
@ -2216,7 +2765,7 @@ without changing the headline.
*** Hierarchies of tags
The functionality of nesting tags in hierarchies is added to org-mode.
The functionality of nesting tags in hierarchies is added to Org mode.
This is the generalization of what was previously called "Tag groups"
in the manual. That term is now changed to "Tag hierarchy".
@ -4105,7 +4654,7 @@ See https://orgmode.org/elpa/
You can temporarily activate continuous clocking with =C-u C-u
C-u M-x= [[doc::org-clock-in][org-clock-in]] =RET= (three universal prefix arguments)
and =C-u C-u M-x= [[org-clock-in-last][org-clock-in-last]] =RET= (two universal prefix
and =C-u C-u M-x= [[doc::org-clock-in-last][org-clock-in-last]] =RET= (two universal prefix
arguments).
@ -4581,7 +5130,7 @@ that Calc formulas can operate on them.
The new system has a technically cleaner implementation and more
possibilities for capturing different types of data. See
[[http://thread.gmane.org/gmane.emacs.orgmode/26441/focus%3D26441][Carsten's announcement]] for more details.
[[https://orgmode.org/list/C46F10DC-DE51-43D4-AFFE-F71E440D1E1F@gmail.com][Carsten's announcement]] for more details.
To switch over to the new system:
@ -4712,7 +5261,7 @@ that Calc formulas can operate on them.
**** Modified link escaping
David Maus worked on `org-link-escape'. See [[http://article.gmane.org/gmane.emacs.orgmode/37888][his message]]:
David Maus worked on `org-link-escape'. See [[https://orgmode.org/list/87k4gysacq.wl%dmaus@ictsoc.de][his message]]:
: Percent escaping is used in Org mode to escape certain characters
: in links that would either break the parser (e.g. square brackets
@ -5151,7 +5700,7 @@ that Calc formulas can operate on them.
Thanks to Nicolas Goaziou for coding these changes.
**** A property value of "nil" now means to unset a property
**** A property value of =nil= now means to unset a property
This can be useful in particular with property inheritance, if
some upper level has the property, and some grandchild of it

View file

@ -536,6 +536,42 @@ This should go with point, so that motion commands can also move
through tall images. This value would be to point as window-vscroll
is to window-start.
** Make redisplay smarter about which parts to redraw
Currently, redisplay has only 2 levels of redrawing: either it
redisplays only the selected window on the selected frame, or it
redisplays all the windows on all the frames. This doesn't scale well
when the number of visible frames is large.
Currently, two variables are used to make the decision what to
redisplay: update_mode_lines and windows_or_buffers_changed. These
are set by various functions called from Lisp, and if redisplay finds
one of them to be non-zero, it considers all the windows on all the
frames for redisplay.
The idea is to make the decision which parts need to be redrawn more
fine-grained. Instead of simple boolean variables, we could have a
bitmapped variable which records the kinds of changes done by Lisp
since the previous redisplay cycle. Then the decision what exactly
needs to be redrawn could be made based on the bits that are set.
For example, one reason to consider all frames is that some scrolling
command sets the update_mode_lines variable non-zero. This is done
because the frame title, which doesn't belong to any window, needs to
be reconsidered when the selected window is scrolled. But considering
the frame title doesn't have to redisplay all the other windows on the
frame, doesn't need to recompute the menu items and the tool-bar
buttons, and doesn't need to consider frames other than the selected
one. Being selective about what parts of the Emacs display need to be
reconsidered and redrawn given the changes since the last redisplay
will go along way towards making redisplay more scalable.
One way of making this change is to go through all the places that set
update_mode_lines and windows_or_buffers_changed, figure out which
portions of the Emacs display could be affected by each change, and
then implement the bitmap which will record each of these affected
display portions. The logic in redisplay_internal will then need to
be restructured so as to support this fine-grained redisplay.
** Address internationalization of symbols names
Essentially as if they were documentation, e.g. in command names and
Custom.

View file

@ -9,7 +9,11 @@ Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
[Service]
Type=notify
ExecStart=emacs --fg-daemon
ExecStop=emacsclient --eval "(kill-emacs)"
# Emacs will exit with status 15 after having received SIGTERM, which
# is the default "KillSignal" value systemd uses to stop services.
SuccessExitStatus=15
# The location of the SSH auth socket varies by distribution, and some
# set it from PAM, so don't override by default.
# Environment=SSH_AUTH_SOCK=%t/keyring/ssh

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode
\def\orgversionnumber{9.3}
\def\orgversionnumber{9.4.2}
\def\versionyear{2019} % latest update
\input emacsver.tex
@ -17,7 +17,7 @@
\pdflayout=(0l)
% Nothing else needs to be changed below this line.
% Copyright (C) 1987, 1993, 1996--1997, 2001--2020 Free Software
% Copyright (C) 1987, 1993, 1996-1997, 2001-2020 Free Software
% Foundation, Inc.
% This document is free software: you can redistribute it and/or modify
@ -79,6 +79,9 @@
\centerline{Released under the terms of the GNU General Public License}
\centerline{version 3 or later.}
\centerline{For more Emacs documentation, and the \TeX{} source for this card, see}
\centerline{the Emacs distribution, or {\tt https://www.gnu.org/software/emacs}}
\endgroup}
% make \bye not \outer so that the \def\bye in the \else clause below
@ -515,7 +518,7 @@ \section{Properties and Column View}
\key{special commands in property lines}{C-c C-c}
\key{next/previous allowed value}{S-LEFT/RIGHT}
\key{turn on column view}{C-c C-x C-c}
\key{capture columns view in dynamic block}{C-c C-x i}
\key{capture columns view in dynamic block}{C-c C-x x}
\key{quit column view}{q}
\key{show full value}{v}
@ -558,7 +561,7 @@ \section{Timestamps}
\key{stop/cancel clock on current item}{C-c C-x C-o/x}
\key{display total subtree times}{C-c C-x C-d}
\key{remove displayed times}{C-c C-c}
\key{insert/update table with clock report}{C-c C-x C-r}
\key{insert/update table with clock report}{C-c C-x C-x}
\section{Agenda Views}

View file

@ -254,7 +254,7 @@ or deleted while this variable is nil.")
(defvar allout-widgets-mode-inhibit) ; defined below
;;;_ > allout-widgets-tally-string
(defun allout-widgets-tally-string ()
"Return a string giving the number of tracked widgets, or empty string if not tracking.
"Return a string with number of tracked widgets, or empty string if not tracking.
The string is formed for appending to the allout-mode mode-line lighter.

View file

@ -817,14 +817,16 @@ The variables are:
Variables you assign:
array-max-row: The number of rows in the array.
array-max-column: The number of columns in the array.
array-columns-per-line: The number of columns in the array per line of buffer.
array-columns-per-line: The number of columns in the array
per line of buffer.
array-field-width: The width of each field, in characters.
array-rows-numbered: A logical variable describing whether to ignore
row numbers in the buffer.
row numbers in the buffer.
Variables which are calculated:
array-line-length: The number of characters in a buffer line.
array-lines-per-row: The number of buffer lines used to display each row.
array-lines-per-row: The number of buffer lines used to
display each row.
The following commands are available (an asterisk indicates it may
take a numeric prefix argument):
@ -834,17 +836,17 @@ take a numeric prefix argument):
* \\[array-next-row] Move down one row.
* \\[array-previous-row] Move up one row.
* \\[array-copy-forward] Copy the current field into the column to the right.
* \\[array-copy-backward] Copy the current field into the column to the left.
* \\[array-copy-down] Copy the current field into the row below.
* \\[array-copy-up] Copy the current field into the row above.
* \\[array-copy-forward] Copy current field into the column to the right.
* \\[array-copy-backward] Copy current field into the column to the left.
* \\[array-copy-down] Copy current field into the row below.
* \\[array-copy-up] Copy current field into the row above.
* \\[array-copy-column-forward] Copy the current column into the column to the right.
* \\[array-copy-column-backward] Copy the current column into the column to the left.
* \\[array-copy-column-forward] Copy current column into the column to the right.
* \\[array-copy-column-backward] Copy current column into the column to the left.
* \\[array-copy-row-down] Copy the current row into the row below.
* \\[array-copy-row-up] Copy the current row into the row above.
\\[array-fill-rectangle] Copy the field at mark into every cell with row and column
\\[array-fill-rectangle] Copy field at mark into every cell with row and column
between that of point and mark.
\\[array-what-position] Display the current array row and column.
@ -855,7 +857,7 @@ take a numeric prefix argument):
\\[array-expand-rows] Expand the array (remove row numbers and
newlines inside rows)
\\[array-display-local-variables] Display the current values of local variables.
\\[array-display-local-variables] Display current values of local variables.
Entering array mode calls the function `array-mode-hook'."
(make-local-variable 'array-buffer-line)

View file

@ -26,7 +26,8 @@
;; This package is for setting "bookmarks" in files. A bookmark
;; associates a string with a location in a certain file. Thus, you
;; can navigate your way to that location by providing the string.
;; See the "User Variables" section for customizations.
;;
;; Type `M-x customize-group RET boomark RET' for user options.
;;; Code:

View file

@ -2157,7 +2157,7 @@ If non-nil, return a list consisting of the note and the cents coefficient."
(calc-unary-op "midi" 'calcFunc-midi arg)))
(defun calc-spn (arg)
"Return the scientific pitch notation corresponding to the expression on the stack."
"Return scientific pitch notation corresponding to the expression on the stack."
(interactive "P")
(calc-slow-wrapper
(calc-unary-op "spn" 'calcFunc-spn arg)))

View file

@ -266,18 +266,18 @@
(sgml-mode . "<!-- Embed -->\n\\(<!-- .* -->\n\\)*")
(xml-mode . "<!-- Embed -->\n\\(<!-- .* -->\n\\)*")
(texinfo-mode . "@c Embed\n\\(@c .*\n\\)*"))
"Alist of major modes with appropriate values for `calc-embedded-announce-formula'."
"Alist of major modes for `calc-embedded-announce-formula'."
:type '(alist :key-type (symbol :tag "Major mode")
:value-type (regexp :tag "Regexp to announce formula")))
(defcustom calc-embedded-open-formula
"\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n"
"A regular expression for the opening delimiter of a formula used by calc-embedded."
"Regexp for the opening delimiter of a formula used by `calc-embedded'."
:type '(regexp))
(defcustom calc-embedded-close-formula
"\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n"
"A regular expression for the closing delimiter of a formula used by calc-embedded."
"Regexp for the closing delimiter of a formula used by calc-embedded."
:type '(regexp))
(defcustom calc-embedded-open-close-formula-alist
@ -721,7 +721,8 @@ If nil, computations on numbers always yield numbers where possible.")
(defcalcmodevar calc-matrix-mode nil
"If `matrix', variables are assumed to be matrix-valued.
If a number, variables are assumed to be NxN matrices.
If `sqmatrix', variables are assumed to be square matrices of an unspecified size.
If `sqmatrix', variables are assumed to be square matrices of an
unspecified size.
If `scalar', variables are assumed to be scalar-valued.
If nil, symbolic math routines make no assumptions about variables.")

View file

@ -258,8 +258,8 @@ If one doesn't exist, create a new one for this directory."
INTERNAL-NAME is obsolete and ignored.
EXTERNAL-NAME is a human readable name to describe the project; it
must be unique among all autoloaded projects.
PROJECTFILE is a file name that identifies a project of this type to EDE, such as
a Makefile, or SConstruct file.
PROJECTFILE is a file name that identifies a project of this type to EDE, such
as a Makefile, or SConstruct file.
CLASS is the EIEIO class that is used to track this project. It should subclass
`ede-generic-project'."
(ede-add-project-autoload

View file

@ -235,7 +235,8 @@ scoped. These are not local variables, but symbols available in a structure
which doesn't need to be dereferenced.
Optional argument TYPERETURN is a symbol in which the types of all found
will be stored. If nil, that data is thrown away.
Optional argument THROWSYM specifies a symbol the throw on non-recoverable error.
Optional argument THROWSYM specifies a symbol the throw on non-recoverable
error.
Remaining arguments FLAGS are additional flags to apply when searching.")
(defun semantic-analyze-find-tag-sequence-default
@ -246,7 +247,8 @@ Remaining arguments FLAGS are additional flags to apply when searching.")
SCOPE are extra tags which are in scope.
TYPERETURN is a symbol in which to place a list of tag classes that
are found in SEQUENCE.
Optional argument THROWSYM specifies a symbol the throw on non-recoverable error.
Optional argument THROWSYM specifies a symbol the throw on non-recoverable
error.
Remaining arguments FLAGS are additional flags to apply when searching.
This function knows of flags:
`mustbeclassvariable'"

View file

@ -368,7 +368,8 @@ Take the first interesting thing and convert it."
(defun semantic-c-evaluate-symbol-for-hideif (spp-symbol)
"Lookup the symbol SPP-SYMBOL (a string) to something hideif can use.
Pulls out the symbol list, and call `semantic-c-convert-spp-value-to-hideif-value'."
Pull out the symbol list, and call
`semantic-c-convert-spp-value-to-hideif-value'."
(interactive "sSymbol name: ")
(when (symbolp spp-symbol) (setq spp-symbol (symbol-name spp-symbol)))

View file

@ -50,7 +50,8 @@
nil)
(define-lex-regex-analyzer semantic-lex-make-command
"A command in a Makefile consists of a line starting with TAB, and ending at the newline."
"Regexp for a command in a Makefile.
It consists of a line starting with TAB, and ending at the newline."
"^\\(\t\\)"
(let ((start (match-end 0)))
(while (progn (end-of-line)

View file

@ -343,7 +343,7 @@ all included files."
nil)
(cl-defmethod semanticdb-typecache-include-tags ((table semanticdb-table))
"Update the typecache for TABLE, and return the merged types from the include tags.
"Update typecache for TABLE, and return the merged types from the include tags.
Include-tags are the tags brought in via includes, all merged together into
a master list."
(let* ((cache (semanticdb-get-typecache table))

View file

@ -40,7 +40,7 @@ TAG might have DOCUMENTATION set in it already. If not, there may be
some documentation in a comment preceding TAG's definition which we
can look for. When appropriate, this can be overridden by a language specific
enhancement.
Optional argument NOSNARF means to only return the lexical analyzer token for it.
Optional argument NOSNARF means return only the lexical analyzer token for it.
If NOSNARF is `lex', then only return the lex token."
(if (not tag) (setq tag (semantic-current-tag)))
(save-excursion

View file

@ -99,7 +99,8 @@ Overridden to nil if `semantic-imenu-bucketize-file' is nil."
(defcustom semantic-imenu-sort-bucket-function nil
"Function to use when sorting tags in the buckets of functions.
See `semantic-bucketize' and the FILTER argument for more details on this function."
See `semantic-bucketize' and the FILTER argument for more details
on this function."
:group 'semantic-imenu
:type '(radio (const :tag "No Sorting" nil)
(const semantic-sort-tags-by-name-increasing)

View file

@ -810,7 +810,7 @@ if available."
(defun senator-lazy-highlight-update ()
"Force lazy highlight update."
(lazy-highlight-cleanup t)
(set 'isearch-lazy-highlight-last-string nil)
(setq isearch-lazy-highlight-last-string nil)
(setq isearch-adjusted t)
(isearch-update))

View file

@ -93,8 +93,9 @@ for a given mode at a more granular level.
Note that :type, :name, and anything in IGNORABLE-ATTRIBUTES will
not be passed to this function.
Modes that override this function can call `semantic--tag-attribute-similar-p-default'
to do the default equality tests if ATTR is not special for that mode.")
Modes that override this function can call
`semantic--tag-attribute-similar-p-default' to do the default equality tests if
ATTR is not special for that mode.")
(defun semantic--tag-attribute-similar-p-default (attr value1 value2 ignorable-attributes)
"For ATTR, VALUE1, VALUE2 and IGNORABLE-ATTRIBUTES, test for similarity."

View file

@ -837,7 +837,8 @@ Argument EVENT describes the event that caused this function to be called."
"Keymap for highlight-func minor mode.")
(defvar semantic-highlight-func-popup-menu nil
"Menu used if the user clicks on the header line used by `semantic-highlight-func-mode'.")
"Menu used if the user clicks on the header line.
Used by `semantic-highlight-func-mode'.")
(easy-menu-define
semantic-highlight-func-popup-menu

View file

@ -432,6 +432,7 @@ Typically \"page-%s.png\".")
(define-key map "P" 'doc-view-fit-page-to-window)
(define-key map "F" 'doc-view-fit-window-to-page) ;F = frame
;; Killing the buffer (and the process)
(define-key map (kbd "k") 'image-kill-buffer)
(define-key map (kbd "K") 'doc-view-kill-proc)
;; Slicing the image
(define-key map (kbd "c s") 'doc-view-set-slice)

View file

@ -2405,8 +2405,9 @@ as if they had been supplied to a function with TARGET-ARGLIST directly.
Excess source arguments will be neglected, missing source arguments will be
supplied as nil. Returns a `funcall' or `apply' form with the second element
being `function' which has to be replaced by an actual function argument.
Example: (ad-map-arglists \\='(a &rest args) \\='(w x y z)) will return
(funcall ad--addoit-function a (car args) (car (cdr args)) (nth 2 args))."
Example:
(ad-map-arglists \\='(a &rest args) \\='(w x y z)) will return
(funcall ad--addoit-function a (car args) (car (cdr args)) (nth 2 args))."
(let* ((parsed-source-arglist (ad-parse-arglist source-arglist))
(source-reqopt-args (append (nth 0 parsed-source-arglist)
(nth 1 parsed-source-arglist)))

View file

@ -707,7 +707,8 @@ Each element is (INDEX . VALUE)")
;; These store their argument in the next two bytes
(byte-defop 129 1 byte-constant2
"for reference to a constant with vector index >= byte-constant-limit")
"for reference to a constant with vector
index >= byte-constant-limit")
(byte-defop 130 0 byte-goto "for unconditional jump")
(byte-defop 131 -1 byte-goto-if-nil "to pop value and jump if it's nil")
(byte-defop 132 -1 byte-goto-if-not-nil "to pop value and jump if it's not nil")
@ -727,11 +728,14 @@ otherwise pop it")
(byte-defop 139 0 byte-save-window-excursion-OBSOLETE
"to make a binding to record entire window configuration")
(byte-defop 140 0 byte-save-restriction
"to make a binding to record the current buffer clipping restrictions")
"to make a binding to record the current buffer clipping
restrictions")
(byte-defop 141 -1 byte-catch-OBSOLETE ; Not generated since Emacs 25.
"for catch. Takes, on stack, the tag and an expression for the body")
"for catch. Takes, on stack, the tag and an expression for
the body")
(byte-defop 142 -1 byte-unwind-protect
"for unwind-protect. Takes, on stack, an expression for the unwind-action")
"for unwind-protect. Takes, on stack, an expression for
the unwind-action")
;; For condition-case. Takes, on stack, the variable to bind,
;; an expression for the body, and a list of clauses.
@ -791,8 +795,8 @@ otherwise pop it")
(defconst byte-discardN-preserve-tos byte-discardN)
(byte-defop 183 -2 byte-switch
"to take a hash table and a value from the stack, and jump to the address
the value maps to, if any.")
"to take a hash table and a value from the stack, and jump to
the address the value maps to, if any.")
;; unused: 182-191
@ -1967,7 +1971,11 @@ See also `emacs-lisp-byte-compile-and-load'."
;; We attempt to create a temporary file in the
;; target directory, so the target directory must be
;; writable.
(file-writable-p (file-name-directory target-file)))
(file-writable-p
(file-name-directory
;; Need to expand in case TARGET-FILE doesn't
;; include a directory (Bug#45287).
(expand-file-name target-file))))
;; We must disable any code conversion here.
(let* ((coding-system-for-write 'no-conversion)
;; Write to a tempfile so that if another Emacs

View file

@ -811,8 +811,8 @@ It should return a function that expects the same arguments as the methods, and
GENERIC is the generic function (mostly used for its name).
METHODS is the list of the selected methods.
The METHODS list is sorted from most specific first to most generic last.
The function can use `cl-generic-call-method' to create functions that call those
methods.")
The function can use `cl-generic-call-method' to create functions that call
those methods.")
(unless (ignore-errors (cl-generic-generalizers t))
;; Temporary definition to let the next defmethod succeed.

View file

@ -867,11 +867,7 @@ the docstrings eventually produced, using
eldoc--last-request-state))
(let ((non-essential t))
(setq eldoc--last-request-state token)
;; Only keep looking for the info as long as the user hasn't
;; requested our attention. This also locally disables
;; inhibit-quit.
(while-no-input
(eldoc--invoke-strategy nil)))))))
(eldoc--invoke-strategy nil))))))
;; This section only affects ElDoc output to the echo area, as in

View file

@ -521,7 +521,7 @@ Return nil if there are no more forms, t otherwise."
"The currently linted top form, or nil.")
(defvar elint-top-form-logged nil
"The value t if the currently linted top form has been mentioned in the log buffer.")
"Non-nil if the currently linted top form has been mentioned in the log buffer.")
(defun elint-top-form (form)
"Lint a top FORM."

View file

@ -103,7 +103,7 @@ Please send improvements and fixes to the maintainer."
(defcustom find-feature-regexp
(concat ";;; Code:")
"The regexp used by `xref-find-definitions' when searching for a feature definition.
"Regexp used by `xref-find-definitions' when searching for a feature definition.
Note it may contain up to one `%s' at the place where `format'
should insert the feature name."
;; We search for ";;; Code" rather than (feature '%s) because the

View file

@ -504,6 +504,11 @@ The return value is the last VAL in the list.
(funcall do `(funcall (car ,gv))
(lambda (v) `(funcall (cdr ,gv) ,v))))))))
(put 'error 'gv-expander
(lambda (do &rest args)
(funcall do `(error . ,args)
(lambda (v) `(progn ,v (error . ,args))))))
(defmacro gv-synthetic-place (getter setter)
"Special place described by its setter and getter.
GETTER and SETTER (typically obtained via `gv-letplace') get and

View file

@ -232,11 +232,11 @@ by counted more than once."
(defun memory-report--format (bytes)
(setq bytes (/ bytes 1024.0))
(let ((units '("kB" "MB" "GB" "TB")))
(let ((units '("KiB" "MiB" "GiB" "TiB")))
(while (>= bytes 1024)
(setq bytes (/ bytes 1024.0))
(setq units (cdr units)))
(format "%6.1f%s" bytes (car units))))
(format "%6.1f %s" bytes (car units))))
(defun memory-report--gc-elem (elems type)
(* (nth 1 (assq type elems))

View file

@ -1615,18 +1615,22 @@ that code in the early init-file."
"Activate all installed packages.
The variable `package-load-list' controls which packages to load."
(setq package--activated t)
(if (file-readable-p package-quickstart-file)
;; Skip load-source-file-function which would slow us down by a factor
;; 2 (this assumes we were careful to save this file so it doesn't need
;; any decoding).
(let ((load-source-file-function nil))
(load package-quickstart-file nil 'nomessage))
(dolist (elt (package--alist))
(condition-case err
(package-activate (car elt))
;; Don't let failure of activation of a package arbitrarily stop
;; activation of further packages.
(error (message "%s" (error-message-string err)))))))
(let* ((elc (concat package-quickstart-file "c"))
(qs (if (file-readable-p elc) elc
(if (file-readable-p package-quickstart-file)
package-quickstart-file))))
(if qs
;; Skip load-source-file-function which would slow us down by a factor
;; 2 when loading the .el file (this assumes we were careful to
;; save this file so it doesn't need any decoding).
(let ((load-source-file-function nil))
(load qs nil 'nomessage))
(dolist (elt (package--alist))
(condition-case err
(package-activate (car elt))
;; Don't let failure of activation of a package arbitrarily stop
;; activation of further packages.
(error (message "%s" (error-message-string err))))))))
;;;; Populating `package-archive-contents' from archives
;; This subsection populates the variables listed above from the
@ -4041,6 +4045,7 @@ activations need to be changed, such as when `package-load-list' is modified."
;; FIXME: Delay refresh in case we're installing/deleting
;; several packages!
(package-quickstart-refresh)
(delete-file (concat package-quickstart-file "c"))
(delete-file package-quickstart-file)))
(defun package-quickstart-refresh ()
@ -4095,10 +4100,10 @@ activations need to be changed, such as when `package-load-list' is modified."
(insert "
;; Local\sVariables:
;; version-control: never
;;\sno-byte-compile: t
;; no-update-autoloads: t
;; End:
"))))
"))
(byte-compile-file package-quickstart-file)))
(defun package--imenu-prev-index-position-function ()
"Move point to previous line in package-menu buffer.

View file

@ -317,7 +317,7 @@ list."
;;;###autoload
(cl-defgeneric seq-filter (pred sequence)
"Return a list of all the elements for which (PRED element) is non-nil in SEQUENCE."
"Return a list of all elements for which (PRED element) is non-nil in SEQUENCE."
(let ((exclude (make-symbol "exclude")))
(delq exclude (seq-map (lambda (elt)
(if (funcall pred elt)
@ -411,7 +411,8 @@ Equality is defined by TESTFN if non-nil or by `equal' if nil."
nil))
(cl-defgeneric seq-set-equal-p (sequence1 sequence2 &optional testfn)
"Return non-nil if SEQUENCE1 and SEQUENCE2 contain the same elements, regardless of order.
"Return non-nil if SEQUENCE1 and SEQUENCE2 contain the same elements.
This does not depend on the order of the elements.
Equality is defined by TESTFN if non-nil or by `equal' if nil."
(and (seq-every-p (lambda (item1) (seq-contains-p sequence2 item1 testfn)) sequence1)
(seq-every-p (lambda (item2) (seq-contains-p sequence1 item2 testfn)) sequence2)))
@ -444,7 +445,7 @@ The result is a sequence of type TYPE, or a list if TYPE is nil."
(seq-map function sequence)))
(cl-defgeneric seq-partition (sequence n)
"Return a list of the elements of SEQUENCE grouped into sub-sequences of length N.
"Return list of elements of SEQUENCE grouped into sub-sequences of length N.
The last sequence may contain less than N elements. If N is a
negative integer or 0, nil is returned."
(unless (< n 1)

View file

@ -67,6 +67,7 @@ Level :debug is ignored by default (see `warning-minimum-level').")
Each element looks like (ALIAS . LEVEL) and defines ALIAS as
equivalent to LEVEL. LEVEL must be defined in `warning-levels';
it may not itself be an alias.")
(make-obsolete-variable 'warning-level-aliases 'warning-levels "28.1")
(define-obsolete-variable-alias 'display-warning-minimum-level
'warning-minimum-level "28.1")
@ -256,8 +257,10 @@ entirely by setting `warning-suppress-types' or
(setq level :warning))
(unless buffer-name
(setq buffer-name "*Warnings*"))
(if (assq level warning-level-aliases)
(setq level (cdr (assq level warning-level-aliases))))
(with-suppressed-warnings ((obsolete warning-level-aliases))
(when-let ((new (cdr (assq level warning-level-aliases))))
(warn "Warning level `%s' is obsolete; use `%s' instead" level new)
(setq level new)))
(or (< (warning-numeric-level level)
(warning-numeric-level warning-minimum-log-level))
(warning-suppress-p type warning-suppress-log-types)

View file

@ -375,11 +375,11 @@ managers, so try setting this to nil, if prefix override doesn't work."
(defcustom cua-paste-pop-rotate-temporarily nil
"If non-nil, \\[cua-paste-pop] only rotates the kill-ring temporarily.
This means that both \\[yank] and the first \\[yank-pop] in a sequence always insert
the most recently killed text. Each immediately following \\[cua-paste-pop] replaces
the previous text with the next older element on the `kill-ring'.
With prefix arg, \\[universal-argument] \\[yank-pop] inserts the same text as the most
recent \\[yank-pop] (or \\[yank]) command."
This means that both \\[yank] and the first \\[yank-pop] in a sequence always
insert the most recently killed text. Each immediately following \\[cua-paste-pop]
replaces the previous text with the next older element on the `kill-ring'.
With prefix arg, \\[universal-argument] \\[yank-pop] inserts the same text as the
most recent \\[yank-pop] (or \\[yank]) command."
:type 'boolean
:group 'cua)

View file

@ -691,7 +691,7 @@ Optional argument FIND is t if this function is called from `edt-find'."
(defun edt-find ()
"Find first occurrence of string in current direction and save it."
(interactive)
(set 'edt-find-last-text (read-string "Search: "))
(setq edt-find-last-text (read-string "Search: "))
(if (equal edt-direction-string edt-forward-string)
(edt-find-forward t)
(edt-find-backward t)))
@ -1321,8 +1321,8 @@ Definition is stored in `edt-last-replaced-key-definition'."
(if edt-last-replaced-key-definition
(progn
(let (edt-key-definition)
(set 'edt-key-definition
(read-key-sequence "Press the key to be restored: "))
(setq edt-key-definition
(read-key-sequence "Press the key to be restored: "))
(if (string-equal "\C-m" edt-key-definition)
(message "Key not restored")
(progn
@ -1639,12 +1639,12 @@ Argument NUM is the number of times to duplicate the line."
(progn
(end-kbd-macro nil)
(let (edt-key-definition)
(set 'edt-key-definition
(read-key-sequence "Enter key for binding: "))
(setq edt-key-definition
(read-key-sequence "Enter key for binding: "))
(if (string-equal "\C-m" edt-key-definition)
(message "Key sequence not remembered")
(progn
(set 'edt-learn-macro-count (+ edt-learn-macro-count 1))
(setq edt-learn-macro-count (+ edt-learn-macro-count 1))
(setq edt-last-replaced-key-definition
(lookup-key (current-global-map)
edt-key-definition))

View file

@ -475,7 +475,8 @@ text."
;; Fast keyseq and ESC keyseq timeouts
(defcustom viper-fast-keyseq-timeout 200
"Key sequence separated by no more than this many milliseconds is viewed as a Vi-style macro, if such a macro is defined.
"Max milliseconds for a key sequence to be regarded as a Vi-style macro.
Only regard key sequence as a macro if it is defined.
Setting this too high may slow down your typing. Setting this value too low
will make it hard to use Vi-style timeout macros."
:type 'integer
@ -705,7 +706,7 @@ If nil, the cursor will move backwards without deleting anything."
(viper-deflocalvar viper-related-files-and-buffers-ring nil "")
(defcustom viper-related-files-and-buffers-ring nil
"List of file and buffer names that are considered to be related to the current buffer.
"List of file and buffer names to consider related to the current buffer.
Related buffers can be cycled through via :R and :P commands."
:type 'boolean
:group 'viper-misc)

View file

@ -69,7 +69,7 @@ major mode in effect."
:group 'viper)
(defcustom viper-want-ctl-h-help nil
"If non-nil, C-h gets bound to help-command; otherwise, C-h gets the usual Vi bindings."
"If non-nil, bind C-h to help-command; otherwise, C-h gets the usual Vi bindings."
:type 'boolean
:group 'viper)

View file

@ -242,7 +242,6 @@ global-level ERC button keys yet.")
(defun erc-button-setup ()
"Add ERC mode-level button movement keys. This is only done once."
;; Make XEmacs use `erc-button-face'.
;; Add keys.
(unless erc-button-keys-added
(define-key erc-mode-map (kbd "<backtab>") 'erc-button-previous)

View file

@ -83,7 +83,8 @@ All values of the list must be uppercase strings.")
(defvar erc-dcc-list nil
"List of DCC connections. Looks like:
((:nick \"nick!user@host\" :type GET :peer proc :parent proc :size size :file file)
((:nick \"nick!user@host\" :type GET :peer proc
:parent proc :size size :file file)
(:nick \"nick!user@host\" :type CHAT :peer proc :parent proc)
(:nick \"nick\" :type SEND :peer server-proc :parent parent-proc :file
file :sent <marker> :confirmed <marker>))

View file

@ -274,9 +274,9 @@ instead."
(font-lock-mode -1)
(setq font-lock-defaults nil)
(if (boundp 'font-lock-buffers)
(set 'font-lock-buffers
(delq (current-buffer)
(symbol-value 'font-lock-buffers)))))
(setq font-lock-buffers
(delq (current-buffer)
(symbol-value 'font-lock-buffers)))))
(require 'em-glob)
(let* ((insert-func 'insert)
(error-func 'insert)

View file

@ -290,7 +290,7 @@ If ARG is omitted, point is placed at the end of the expanded text."
(defvar expand-list nil "Temporary variable used by the Expand package.")
(defvar expand-pos nil
"If non-nil, stores a vector containing markers to positions defined by the last expansion.")
"If non-nil, store a vector with position markers defined by the last expansion.")
(make-variable-buffer-local 'expand-pos)
(defvar expand-index 0

View file

@ -272,7 +272,7 @@ of a face name is the same for all frames."
(defun face-equal (face1 face2 &optional frame)
"Non-nil if faces FACE1 and FACE2 are equal.
Faces are considered equal if all their attributes are equal.
If the optional argument FRAME is given, report on FACE1 and FACE2 in that frame.
If optional argument FRAME is given, report on FACE1 and FACE2 in that frame.
If FRAME is t, report on the defaults for FACE1 and FACE2 (for new frames).
If FRAME is omitted or nil, use the selected frame."
(internal-lisp-face-equal-p face1 face2 frame))
@ -484,7 +484,7 @@ FACES may be either a single face or a list of faces.
(defmacro face-attribute-specified-or (value &rest body)
"Return VALUE, unless it's `unspecified', in which case evaluate BODY and return the result."
"Return VALUE or, if it's `unspecified', the result of evaluating BODY."
(let ((temp (make-symbol "value")))
`(let ((,temp ,value))
(if (not (eq ,temp 'unspecified))

View file

@ -2280,8 +2280,8 @@ This function could be MATCHER in a MATCH-ANCHORED `font-lock-keywords' item."
;; "ifndef" "import" "include" "line" "pragma" "undef" "warning")))
;;
(defconst cpp-font-lock-keywords-source-depth 0
"An integer representing regular expression depth of `cpp-font-lock-keywords-source-directives'.
Used in `cpp-font-lock-keywords'.")
"Regular expression depth of `cpp-font-lock-keywords-source-directives'.
This should be an integer. Used in `cpp-font-lock-keywords'.")
(defconst cpp-font-lock-keywords
(let* ((directives cpp-font-lock-keywords-source-directives)

View file

@ -250,21 +250,25 @@
:group 'gnus-outlook-deuglify)
(defcustom gnus-outlook-deuglify-unwrap-stop-chars nil ;; ".?!" or nil
"Characters that inhibit unwrapping if they are the last one on the cited line above the possible wrapped line."
"Characters that, when at end of cited line, inhibit unwrapping.
When one of these characters is the last one on the cited line
above the possibly wrapped line, it disallows unwrapping."
:version "22.1"
:type '(radio (const :format "None " nil)
(string :value ".?!"))
:group 'gnus-outlook-deuglify)
(defcustom gnus-outlook-deuglify-no-wrap-chars "`"
"Characters that inhibit unwrapping if they are the first one in the possibly wrapped line."
"Characters that, when at beginning of line, inhibit unwrapping.
When one of these characters is the first one in the possibly
wrapped line, it disallows unwrapping."
:version "22.1"
:type 'string
:group 'gnus-outlook-deuglify)
(defcustom gnus-outlook-deuglify-attrib-cut-regexp
"\\(On \\|Am \\)?\\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\|Sun\\),[^,]+, "
"Regular expression matching the beginning of an attribution line that should be cut off."
"Regexp matching beginning of attribution line that should be cut off."
:version "22.1"
:type 'regexp
:group 'gnus-outlook-deuglify)

View file

@ -289,7 +289,9 @@ asynchronously. The compressed face will be piped to this command."
(defcustom gnus-article-banner-alist nil
"Banner alist for stripping.
For example,
((egroups . \"^[ \\t\\n]*-------------------+\\\\( \\\\(e\\\\|Yahoo! \\\\)Groups Sponsor -+\\\\)?....\\n\\\\(.+\\n\\\\)+\"))"
((egroups . (concat \"^[ \\t\\n]*-------------------+\\\\\"
\"( \\\\(e\\\\|Yahoo! \\\\)Groups Sponsor -+\\\\)?\"
\"....\\n\\\\(.+\\n\\\\)+\")))"
:version "21.1"
:type '(repeat (cons symbol regexp))
:group 'gnus-article-washing)

View file

@ -60,7 +60,7 @@
:type 'string)
(defcustom gnus-keep-same-level nil
"Non-nil means that the next newsgroup after the current will be on the same level.
"Non-nil means that the newsgroup after this one will be on the same level.
When you type, for instance, `n' after reading the last article in the
current newsgroup, you will go to the next newsgroup. If this variable
is nil, the next newsgroup will be the next from the group

View file

@ -163,7 +163,7 @@ nnmairix groups are specifically excluded because they are ephemeral."
(const :tag "Always Install" t)
(const :tag "Ask Me" ask)))
(defcustom gnus-registry-register-all nil
(defcustom gnus-registry-register-all t
"If non-nil, register all articles in the registry."
:type 'boolean
:version "28.1")
@ -1094,7 +1094,7 @@ only the last one's marks are returned."
(defun gnus-registry-get-or-make-entry (id &optional no-create)
"Return registry entry for ID.
If entry is not found, create a new one, unless NO-create is
If entry is not found, create a new one, unless NO-CREATE is
non-nil."
(let* ((db gnus-registry-db)
;; safe if not found

View file

@ -248,7 +248,7 @@ If you use score decays, you might want to set values higher than
(integer :tag "Score"))))))
(defcustom gnus-adaptive-word-length-limit nil
"Words of a length lesser than this limit will be ignored when doing adaptive scoring."
"Words shorter than this limit will be ignored when doing adaptive scoring."
:version "22.1"
:group 'gnus-score-adapt
:type '(radio (const :format "Unlimited " nil)

View file

@ -1071,7 +1071,7 @@ Responsible for handling and, or, and parenthetical expressions.")
;; A bit of backward-compatibility slash convenience: if the
;; query string doesn't start with any known IMAP search
;; keyword, assume it is a "TEXT" search.
(unless (and (string-match "\\`[[:word:]]+" q-string)
(unless (and (string-match "\\`[^ [:blank:]]+" q-string)
(memql (intern-soft (downcase
(match-string 0 q-string)))
gnus-search-imap-search-keys))
@ -1252,44 +1252,41 @@ means (usually the \"mark\" keyword)."
(gnus-search-imap-handle-string engine (cdr expr))))))))))
(cl-defmethod gnus-search-imap-handle-date ((_engine gnus-search-imap)
(date list))
(date list))
"Turn DATE into a date string recognizable by IMAP.
While other search engines can interpret partially-qualified
dates such as a plain \"January\", IMAP requires an absolute
date.
DATE is a list of (dd mm yyyy), any element of which could be
nil. Massage those numbers into the most recent past occurrence
of whichever date elements are present."
(let ((now (decode-time (current-time))))
;; Set nil values to 1, current-month, current-year, or else 1, 1,
;; current-year, depending on what we think the user meant.
(unless (seq-elt date 1)
(setf (seq-elt date 1)
(if (seq-elt date 0)
(seq-elt now 4)
1)))
(unless (seq-elt date 0)
(setf (seq-elt date 0) 1))
(unless (seq-elt date 2)
(setf (seq-elt date 2)
(seq-elt now 5)))
;; Fiddle with the date until it's in the past. There
;; must be a way to combine all these steps.
(unless (< (seq-elt date 2)
(seq-elt now 5))
(when (< (seq-elt now 3)
(seq-elt date 0))
(cl-decf (seq-elt date 1)))
(cond ((zerop (seq-elt date 1))
(setf (seq-elt date 1) 1)
(cl-decf (seq-elt date 2)))
((< (seq-elt now 4)
(seq-elt date 1))
(cl-decf (seq-elt date 2))))))
(format-time-string "%e-%b-%Y" (apply #'encode-time
(append '(0 0 0)
date))))
nil (except that (dd nil yyyy) is not allowed). Massage those
numbers into the most recent past occurrence of whichever date
elements are present."
(pcase-let ((`(,nday ,nmonth ,nyear)
(seq-subseq (decode-time (current-time))
3 6))
(`(,dday ,dmonth ,dyear) date))
(unless (and dday dmonth dyear)
(unless dday (setq dday 1))
(if dyear
;; If we have a year, then leave everything else as is or set
;; to 1.
(setq dmonth (or dmonth 1))
(if dmonth
(setq dyear
(if (or (> dmonth nmonth)
(and (= dmonth nmonth)
(> dday nday)))
;; If our day/month combo is ahead of "now",
;; move the year back.
(1- nyear)
nyear))
(setq dmonth 1))))
(format-time-string
"%e-%b-%Y"
(apply #'encode-time
(append '(0 0 0)
(list dday dmonth dyear))))))
(cl-defmethod gnus-search-imap-handle-string ((engine gnus-search-imap)
(str string))

View file

@ -744,7 +744,8 @@ string with the suggested prefix."
:type '(repeat character))
(defcustom gnus-inhibit-user-auto-expire t
"If non-nil, user marking commands will not mark an article as expirable, even if the group has auto-expire turned on."
"If non-nil, user marking commands will not mark an article as expirable.
This is true even if the group has auto-expire turned on."
:version "21.1"
:group 'gnus-summary
:type 'boolean)
@ -1399,7 +1400,7 @@ the normal Gnus MIME machinery."
(defvar gnus-thread-indent-array nil)
(defvar gnus-thread-indent-array-level gnus-thread-indent-level)
(defvar gnus-sort-gathered-threads-function #'gnus-thread-sort-by-number
"Function called to sort the articles within a thread after it has been gathered together.")
"Function to sort articles within a thread after it has been gathered together.")
(defvar gnus-summary-save-parts-type-history nil)
(defvar gnus-summary-save-parts-last-directory mm-default-directory)
@ -1525,7 +1526,7 @@ the type of the variable (string, integer, character, etc).")
"Default shell command on article.")
(defvar gnus-newsgroup-agentized nil
"Locally bound in each summary buffer to indicate whether the server has been agentized.")
"Locally bound in each summary buffer to indicate if server has been agentized.")
(defvar gnus-newsgroup-begin nil)
(defvar gnus-newsgroup-end nil)
(defvar gnus-newsgroup-last-rmail nil)
@ -1555,7 +1556,7 @@ the type of the variable (string, integer, character, etc).")
(defvar gnus-newsgroup-expunged-tally nil)
(defvar gnus-newsgroup-marked nil
"Sorted list of ticked articles in the current newsgroup (a subset of unread art).")
"Sorted list of ticked articles in current newsgroup (a subset of unread art).")
(defvar gnus-newsgroup-spam-marked nil
"List of ranges of articles that have been marked as spam.")
@ -4100,8 +4101,6 @@ If SELECT-ARTICLES, only select those articles from GROUP."
;; The group was successfully selected.
(t
(gnus-set-global-variables)
(when (boundp 'gnus-pick-line-number)
(setq gnus-pick-line-number 0))
(when (boundp 'spam-install-hooks)
(spam-initialize))
;; Save the active value in effect when the group was entered.
@ -4226,6 +4225,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
gnus-newsgroup-data-reverse nil)
(gnus-run-hooks 'gnus-summary-generate-hook)
;; Generate the buffer, either with threads or without.
(when (boundp 'gnus-pick-line-number)
(setq gnus-pick-line-number 0))
(when gnus-newsgroup-headers
(gnus-summary-prepare-threads
(if gnus-show-threads

View file

@ -162,7 +162,7 @@ Note that this variable can be used in conjunction with the
(regexp :format "%v")))
(defcustom gnus-uu-ignore-files-by-type nil
"A regular expression saying what files that shouldn't be viewed, based on MIME file type.
"Regexp matching files that shouldn't be viewed, based on MIME file type.
If, for instance, you want gnus-uu to ignore all audio files and all mpegs,
you could say something like
@ -224,7 +224,7 @@ Default is \"/tmp/\"."
:type 'directory)
(defcustom gnus-uu-do-not-unpack-archives nil
"Non-nil means that gnus-uu won't peek inside archives looking for files to display.
"If non-nil, gnus-uu won't peek inside archives looking for files to display.
Default is nil."
:group 'gnus-extract-archive
:type 'boolean)
@ -265,19 +265,19 @@ it nil."
:type 'boolean)
(defcustom gnus-uu-unmark-articles-not-decoded nil
"Non-nil means that gnus-uu will mark articles that were unsuccessfully decoded as unread.
"If non-nil, gnus-uu will mark unsuccessfully decoded articles as unread.
Default is nil."
:group 'gnus-extract
:type 'boolean)
(defcustom gnus-uu-correct-stripped-uucode nil
"Non-nil means that gnus-uu will *try* to fix uuencoded files that have had trailing spaces deleted.
"If non-nil, *try* to fix uuencoded files that have had trailing spaces deleted.
Default is nil."
:group 'gnus-extract
:type 'boolean)
(defcustom gnus-uu-save-in-digest nil
"Non-nil means that gnus-uu, when asked to save without decoding, will save in digests.
"If non-nil, gnus-uu, when asked to save without decoding, will save in digests.
If this variable is nil, gnus-uu will just save everything in a
file without any embellishments. The digesting almost conforms to RFC1153 -
no easy way to specify any meaningful volume and issue numbers were found,
@ -1858,7 +1858,7 @@ uuencode and adds MIME headers."
(function :tag "Other")))
(defcustom gnus-uu-post-include-before-composing nil
"Non-nil means that gnus-uu will ask for a file to encode before you compose the article.
"If non-nil, gnus-uu asks for a file to encode before you compose the article.
If this variable is t, you can either include an encoded file with
\\[gnus-uu-post-insert-binary-in-article] or have one included for you when you post the article."
:group 'gnus-extract-post

View file

@ -1195,7 +1195,7 @@ Also see `gnus-large-ephemeral-newsgroup'."
integer))
(defcustom gnus-use-long-file-name (not (memq system-type '(usg-unix-v)))
"Non-nil means that the default name of a file to save articles in is the group name.
"Non-nil means that the default file name to save articles in is the group name.
If it's nil, the directory form of the group name is used instead.
If this variable is a list, and the list contains the element
@ -1545,7 +1545,7 @@ Use with caution.")
("\\(^\\|:\\)soc.culture.vietnamese\\>" vietnamese-viqr)
("\\(^\\|:\\)\\(comp\\|rec\\|alt\\|sci\\|soc\\|news\\|gnu\\|bofh\\)\\>" iso-8859-1))
:variable-document
"Alist of regexps (to match group names) and default charsets to be used when reading."
"Alist of regexps (to match group names) and charsets to be used when reading."
:variable-group gnus-charset
:variable-type '(repeat (list (regexp :tag "Group")
(symbol :tag "Charset")))
@ -1618,7 +1618,8 @@ total number of articles in the group.")
;; group parameters for spam processing added by Ted Zlatanov <tzz@lifelogs.com>
(defcustom gnus-install-group-spam-parameters t
"Disable the group parameters for spam detection.
Enable if `G c' in XEmacs is giving you trouble, and make sure to submit a bug report."
Enable if `G c' in XEmacs is giving you trouble, and make sure to
submit a bug report."
:version "22.1"
:type 'boolean
:group 'gnus-start)

View file

@ -1172,7 +1172,8 @@ Presets to impersonate popular mail agents are found in the
message-cite-style-* variables. This variable is intended for
use in `gnus-posting-styles', such as:
((posting-from-work-p) (eval (setq-local message-cite-style message-cite-style-outlook)))"
((posting-from-work-p) (eval (setq-local message-cite-style
message-cite-style-outlook)))"
:version "24.1"
:group 'message-insertion
:type '(choice (const :tag "Do not override variables" :value nil)
@ -1199,7 +1200,8 @@ use in `gnus-posting-styles', such as:
(message-yank-cited-prefix ">")
(message-yank-empty-prefix ">")
(message-citation-line-format "On %D %R %p, %N wrote:"))
"Message citation style used by Mozilla Thunderbird. Use with `message-cite-style'.")
"Message citation style used by Mozilla Thunderbird.
Use with `message-cite-style'.")
(defconst message-cite-style-gmail
'((message-cite-function 'message-cite-original)

View file

@ -115,7 +115,7 @@ If nil, the first match found will be used."
:type 'boolean)
(defcustom nnmail-split-fancy-with-parent-ignore-groups nil
"Regexp that matches group names to be ignored when applying `nnmail-split-fancy-with-parent'.
"Regexp matching group names ignored by `nnmail-split-fancy-with-parent'.
This can also be a list of regexps."
:version "22.1"
:group 'nnmail-split
@ -124,7 +124,8 @@ This can also be a list of regexps."
(repeat :value (".*") regexp)))
(defcustom nnmail-cache-ignore-groups nil
"Regexp that matches group names to be ignored when inserting message ids into the cache (`nnmail-cache-insert').
"Regexp matching group ignored when inserting message ids into the cache.
This is used by `nnmail-cache-insert'.
This can also be a list of regexps."
:version "22.1"
:group 'nnmail-split

View file

@ -46,7 +46,7 @@
"Hook run narrowed to an article before saving.")
(defvoo nnmh-be-safe nil
"If non-nil, nnmh will check all articles to make sure whether they are new or not.
"If non-nil, nnmh will check all articles to make sure if they are new or not.
Go through the .nnmh-articles file and compare with the actual
articles in this folder. The articles that are \"new\" will be marked
as unread by Gnus.")

View file

@ -1751,7 +1751,8 @@ If SEND-IF-FORCE, only send authinfo to the server if the
;; ==========================================================================
(defvoo nntp-open-telnet-envuser nil
"If non-nil, telnet session (client and server both) will support the ENVIRON option and not prompt for login name.")
"If non-nil, telnet session supports the ENVIRON option.
Don't prompt for login name. This applies to both client and server.")
(defvoo nntp-telnet-shell-prompt "bash\\|[$>] *\r?$"
"Regular expression to match the shell prompt on the remote machine.")

View file

@ -61,22 +61,27 @@ component group will show up when you enter the virtual group.")
(defvoo nnvirtual-current-group nil)
(defvoo nnvirtual-mapping-table nil
"Table of rules on how to map between component group and article number to virtual article number.")
"Table of rules for mapping groups and articles to virtual article numbers.
These rules determine how to map between component group and article number
on the one hand, and virtual article number on the other hand.")
(defvoo nnvirtual-mapping-offsets nil
"Table indexed by component group to an offset to be applied to article numbers in that group.")
"Table of mapping offsets to be applied to article numbers in a group.
The table is indexed by component group number of the group.")
(defvoo nnvirtual-mapping-len 0
"Number of articles in this virtual group.")
(defvoo nnvirtual-mapping-reads nil
"Compressed sequence of read articles on the virtual group as computed from the unread status of individual component groups.")
"Compressed sequence of read articles on the virtual group.
It is computed from the unread status of individual component groups.")
(defvoo nnvirtual-mapping-marks nil
"Compressed marks alist for the virtual group as computed from the marks of individual component groups.")
"Compressed marks alist for the virtual group.
It is computed from the marks of individual component groups.")
(defvoo nnvirtual-info-installed nil
"T if we have already installed the group info for this group, and shouldn't blast over it again.")
"t if the group info for this group is already installed.")
(defvoo nnvirtual-status-string "")

View file

@ -653,7 +653,7 @@ FILE is the file where FUNCTION was probably defined."
;; of the *packages* in which the function is defined.
(let* ((name (symbol-name symbol))
(re (concat "\\_<" (regexp-quote name) "\\_>"))
(news (directory-files data-directory t "\\`NEWS\\($\\|\\.\\)"))
(news (directory-files data-directory t "\\`NEWS\\(\\'\\|\\.\\)"))
(place nil)
(first nil))
(with-temp-buffer

View file

@ -75,7 +75,9 @@ everything preceding the ~/ is discarded so the interactive
selection process starts again from the user's $HOME.")
(defcustom icomplete-show-matches-on-no-input nil
"When non-nil, show completions when the minibuffer is empty.
"When non-nil, show completions when first prompting for input.
This means to show completions even when the current minibuffer contents
is the same as was the initial input after minibuffer activation.
This also means that if you traverse the list of completions with
commands like `C-.' and just hit RET without typing any
characters, the match under point will be chosen instead of the
@ -146,6 +148,10 @@ icompletion is occurring."
(defvar icomplete-overlay (make-overlay (point-min) (point-min) nil t t)
"Overlay used to display the list of completions.")
(defvar icomplete--initial-input nil
"Initial input in the minibuffer when icomplete-mode was activated.
Used to implement the option `icomplete-show-matches-on-no-input'.")
(defun icomplete-pre-command-hook ()
(let ((non-essential t))
(icomplete-tidy)))
@ -169,7 +175,7 @@ icompletion is occurring."
(interactive)
(if (and icomplete-show-matches-on-no-input
(car completion-all-sorted-completions)
(eql (icomplete--field-end) (icomplete--field-beg)))
(equal (icomplete--field-string) icomplete--initial-input))
(icomplete-force-complete-and-exit)
(minibuffer-complete-and-exit)))
@ -189,7 +195,7 @@ the default otherwise."
(if (or
;; there's some input, meaning the default in off the table by
;; definition; OR
(> (icomplete--field-end) (icomplete--field-beg))
(not (equal (icomplete--field-string) icomplete--initial-input))
;; there's no input, but there's also no minibuffer default
;; (and the user really wants to see completions on no input,
;; meaning he expects a "force" to be at least attempted); OR
@ -441,6 +447,7 @@ Conditions are:
"Run in minibuffer on activation to establish incremental completion.
Usually run by inclusion in `minibuffer-setup-hook'."
(when (and icomplete-mode (icomplete-simple-completing-p))
(setq-local icomplete--initial-input (icomplete--field-string))
(setq-local completion-show-inline-help nil)
(use-local-map (make-composed-keymap icomplete-minibuffer-map
(current-local-map)))
@ -486,7 +493,7 @@ Usually run by inclusion in `minibuffer-setup-hook'."
;; `completing-read' invocations, described below:
for fn in (cond ((and minibuffer-default
(stringp minibuffer-default) ; bug#38992
(= (icomplete--field-end) (icomplete--field-beg)))
(equal (icomplete--field-string) icomplete--initial-input))
;; Here, we have a non-nil string default and
;; no input whatsoever. We want to make sure
;; that the default is bubbled to the top so
@ -579,7 +586,8 @@ See `icomplete-mode' and `minibuffer-setup-hook'."
(goto-char (point-max))
; Insert the match-status information:
(when (and (or icomplete-show-matches-on-no-input
(> (icomplete--field-end) (icomplete--field-beg)))
(not (equal (icomplete--field-string)
icomplete--initial-input)))
(or
;; Don't bother with delay after certain number of chars:
(> (- (point) (icomplete--field-beg))
@ -602,7 +610,7 @@ See `icomplete-mode' and `minibuffer-setup-hook'."
(or (>= (- (point) (overlay-end rfn-eshadow-overlay)) 2)
(eq ?/ (char-before (- (point) 2)))))
(delete-region (overlay-start rfn-eshadow-overlay)
(overlay-end rfn-eshadow-overlay)) )
(overlay-end rfn-eshadow-overlay)))
(let* ((field-string (icomplete--field-string))
;; Not sure why, but such requests seem to come
;; every once in a while. It's not fully

View file

@ -842,7 +842,7 @@ variables:
max-width - the max width of the resulting dirname; nil means no limit
prompt - the basic prompt (e.g. \"Find File: \")
literal - the string shown if doing \"literal\" find; set to nil to omit
vc-off - the string shown if version control is inhibited; set to nil to omit
vc-off - the string shown if version control is inhibited; use nil to omit
prefix - either nil or a fixed prefix for the dirname
The following variables are available, but should not be changed:
@ -2367,7 +2367,16 @@ If cursor is not at the end of the user input, move to end of input."
(read-file-name-function nil))
(setq this-command (or ido-fallback fallback 'find-file))
(run-hook-with-args 'ido-before-fallback-functions this-command)
(call-interactively this-command)))
(if (eq this-command 'write-file)
(write-file (read-file-name
"Write file: "
default-directory
(and buffer-file-name
(expand-file-name
(file-name-nondirectory buffer-file-name)
default-directory)))
t)
(call-interactively this-command))))
((eq ido-exit 'switch-to-buffer)
(ido-buffer-internal

View file

@ -942,6 +942,9 @@ Otherwise, display the image by calling `image-mode'."
(get-buffer-window-list (current-buffer) 'nomini 'visible))
(image-toggle-display-image)))
(defvar image-auto-resize-timer nil
"Timer for `image-auto-resize-on-window-resize' option.")
(defun image--window-state-change (window)
;; Wait for a bit of idle-time before actually performing the change,
;; so as to batch together sequences of closely consecutive size changes.
@ -950,8 +953,14 @@ Otherwise, display the image by calling `image-mode'."
;; consecutive calls happen without any redisplay between them,
;; the costly operation of image resizing should happen only once.
(when (numberp image-auto-resize-on-window-resize)
(run-with-idle-timer image-auto-resize-on-window-resize nil
#'image-fit-to-window window)))
(when image-auto-resize-timer
(cancel-timer image-auto-resize-timer))
(setq image-auto-resize-timer
(run-with-idle-timer image-auto-resize-on-window-resize nil
#'image-fit-to-window window))))
(defvar image-fit-to-window-lock nil
"Lock for `image-fit-to-window' timer function.")
(defun image-fit-to-window (window)
"Adjust size of image to display it exactly in WINDOW boundaries."
@ -968,7 +977,13 @@ Otherwise, display the image by calling `image-mode'."
(when (and image-width image-height
(or (not (= image-width window-width))
(not (= image-height window-height))))
(image-toggle-display-image)))))))))
(unless image-fit-to-window-lock
(unwind-protect
(progn
(setq-local image-fit-to-window-lock t)
(ignore-error 'remote-file-error
(image-toggle-display-image)))
(setq image-fit-to-window-lock nil)))))))))))
;;; Animated images

View file

@ -3105,9 +3105,11 @@ See `Info-scroll-down'."
(defun Info-next-reference-or-link (pat prop)
"Move point to the next pattern-based cross-reference or property-based link.
The next cross-reference is searched using the regexp PAT, and the next link
is searched using the text property PROP. Move point to the closest found position
of either a cross-reference found by `re-search-forward' or a link found by
`next-single-char-property-change'. Return the new position of point, or nil."
is searched using the text property PROP. Move point to the closest found
position of either a cross-reference found by `re-search-forward' or a link
found by `next-single-char-property-change'.
Return the new position of point, or nil."
(let ((pxref (save-excursion (re-search-forward pat nil t)))
(plink (next-single-char-property-change (point) prop)))
(when (and (< plink (point-max)) (not (get-char-property plink prop)))
@ -3120,10 +3122,12 @@ of either a cross-reference found by `re-search-forward' or a link found by
(defun Info-prev-reference-or-link (pat prop)
"Move point to the previous pattern-based cross-reference or property-based link.
The previous cross-reference is searched using the regexp PAT, and the previous link
is searched using the text property PROP. Move point to the closest found position
of either a cross-reference found by `re-search-backward' or a link found by
`previous-single-char-property-change'. Return the new position of point, or nil."
The previous cross-reference is searched using the regexp PAT, and the previous
link is searched using the text property PROP. Move point to the closest found
position of either a cross-reference found by `re-search-backward' or a link
found by `previous-single-char-property-change'.
Return the new position of point, or nil."
(let ((pxref (save-excursion (re-search-backward pat nil t)))
(plink (previous-single-char-property-change (point) prop)))
(when (and (> plink (point-min)) (not (get-char-property plink prop)))

View file

@ -55,7 +55,6 @@
(interactive)
(let ((overriding-terminal-local-map nil))
(activate-transient-input-method))
(setq isearch-input-method-function input-method-function)
(setq-local input-method-function nil)
(isearch-update))

View file

@ -1356,7 +1356,7 @@ This is the input method activated by the command
:version "28.1")
(defvar current-transient-input-method nil
"The current input method temporarily enabled by `activate-transient-input-method'.
"Current input method temporarily enabled by `activate-transient-input-method'.
If nil, that means no transient input method is active now.")
(make-variable-buffer-local 'current-transient-input-method)
(put 'current-transient-input-method 'permanent-local t)

View file

@ -1603,7 +1603,8 @@ If this is set inside code wrapped by the macro
"Exit Isearch mode, run BODY, and reinvoke the pending search.
You can update the global isearch variables by setting new values to
`isearch-new-string', `isearch-new-message', `isearch-new-forward',
`isearch-new-regexp-function', `isearch-new-case-fold', `isearch-new-nonincremental'."
`isearch-new-regexp-function', `isearch-new-case-fold',
`isearch-new-nonincremental'."
;; This code is very hairy for several reasons, explained in the code.
;; Mainly, isearch-mode must be terminated while editing and then restarted.
;; If there were a way to catch any change of buffer from the minibuffer,

View file

@ -289,7 +289,8 @@ the last increment."
(defun kmacro-set-counter (arg)
"Set the value of `kmacro-counter' to ARG, or prompt for value if no argument.
With \\[universal-argument] prefix, reset counter to its value prior to this iteration of the macro."
With \\[universal-argument] prefix, reset counter to its value prior to this iteration of the
macro."
(interactive "NMacro counter value: ")
(if (not (or defining-kbd-macro executing-kbd-macro))
(kmacro-display-counter (setq kmacro-initial-counter-value arg))
@ -1272,7 +1273,8 @@ following additional answers: `insert', `insert-1', `replace', `replace-1',
(defun kmacro-step-edit-macro ()
"Step edit and execute last keyboard macro.
To customize possible responses, change the \"bindings\" in `kmacro-step-edit-map'."
To customize possible responses, change the \"bindings\" in
`kmacro-step-edit-map'."
(interactive)
(let ((kmacro-step-edit-active t)
(kmacro-step-edit-new-macro "")

View file

@ -113,17 +113,21 @@ vertically stacked dots. All SERA <--> FIDEL converters refer this
variable.")
(defvar ethio-use-three-dot-question nil
"Non-nil means associate ASCII question mark with Ethiopic old style question mark (three vertically stacked dots).
"If non-nil, associate ASCII question mark with Ethiopic question mark.
The Ethiopic old style question mark is three vertically stacked dots.
If nil, associate ASCII question mark with Ethiopic stylized question
mark. All SERA <--> FIDEL converters refer this variable.")
(defvar ethio-quote-vowel-always nil
"Non-nil means always put an apostrophe before an isolated vowel (except at word initial) in FIDEL --> SERA conversion.
"Non-nil means always put an apostrophe before an isolated vowel.
This happens in FIDEL --> SERA conversions. Isolated vowels at
word beginning do not get an apostrophe put before them.
If nil, put an apostrophe only between a 6th-form consonant and an
isolated vowel.")
(defvar ethio-W-sixth-always nil
"Non-nil means convert the Wu-form of a 12-form consonant to \"W'\" instead of \"Wu\" in FIDEL --> SERA conversion.")
"Non-nil means convert the Wu-form of a 12-form consonant to \"W'\".
This is instead of \"Wu\" in FIDEL --> SERA conversion.")
(defvar ethio-numeric-reduction 0
"Degree of reduction in converting Ethiopic digits into Arabic digits.

View file

@ -622,7 +622,7 @@ to arrange for the message to get a From: line."
(defcustom feedmail-sendmail-f-doesnt-sell-me-out nil
"Says whether the sendmail program issues a warning header if called with \"-f\".
"Whether sendmail should issue a warning header if called with \"-f\".
The sendmail program has a useful feature to let you set the envelope FROM
address via a command line option, \"-f\". Unfortunately, it also has a widely
disliked default behavior of selling you out if you do that by inserting
@ -807,7 +807,8 @@ fiddle-plex.
feedmail will use this list of fiddle-plexes to manipulate user-specified
message header fields. It does this after it has completed all normal
message header field manipulation and before calling `feedmail-last-chance-hook'.
message header field manipulation and before calling
`feedmail-last-chance-hook'.
For an explanation of fiddle-plexes, see the documentation for the
variable `feedmail-fiddle-plex-blurb'. In contrast to some other fiddle-plex
@ -889,13 +890,14 @@ called and will consult `feedmail-spray-this-address' to find the
stripped envelope email address (no comments or angle brackets). The
function should return an embellished form of the address.
The recipe for sending form letters is: (1) create a message with all
addressees on Bcc: headers; (2) tell feedmail to remove Bcc: headers
before sending the message; (3) create a function which will embellish
stripped addresses, if desired; (4) define `feedmail-spray-address-fiddle-plex-list'
appropriately; (5) send the message with `feedmail-enable-spray' set
non-nil; (6) stand back and watch co-workers wonder at how efficient
you are at accomplishing inherently inefficient things."
The recipe for sending form letters is: (1) create a message with
all addressees on Bcc: headers; (2) tell feedmail to remove Bcc:
headers before sending the message; (3) create a function which
will embellish stripped addresses, if desired; (4) define
`feedmail-spray-address-fiddle-plex-list' appropriately; (5) send
the message with `feedmail-enable-spray' set non-nil; (6) stand
back and watch co-workers wonder at how efficient you are at
accomplishing inherently inefficient things."
:group 'feedmail-spray
:type 'sexp ; too complex to be described accurately
)

View file

@ -3182,7 +3182,7 @@ folder, which is also available in `mh-current-folder'."
:package-version '(MH-E . "8.0"))
(defcustom-mh mh-annotate-msg-hook nil
"Hook run whenever a message is sent and after the scan lines and message are annotated.
"Hook run when a message is sent and after annotating the scan lines and message.
Hook functions can access the current folder name with
`mh-current-folder' and obtain the message numbers of the
annotated messages with `mh-annotate-list'."

View file

@ -123,7 +123,8 @@ This metadata is an alist. Currently understood keys are:
- `affixation-function': function to prepend/append a prefix/suffix to
entries. Takes one argument (COMPLETIONS) and should return a list
of completions with a list of three elements: completion, its prefix
and suffix.
and suffix. This function takes priority over `annotation-function'
when both are provided, so only this function is used.
- `display-sort-function': function to sort entries in *Completions*.
Takes one argument (COMPLETIONS) and should return a new list
of completions. Can operate destructively.
@ -1926,6 +1927,8 @@ These include:
completions. The function must accept one argument, a list of
completions, and return a list where each element is a list of
three elements: a completion, a prefix and a suffix.
This function takes priority over `:annotation-function'
when both are provided, so only this function is used.
`:exit-function': Function to run after completion is performed.
@ -2056,15 +2059,16 @@ variables.")
(if sort-fun
(funcall sort-fun completions)
(sort completions 'string-lessp))))
(when ann-fun
(cond
(aff-fun
(setq completions
(funcall aff-fun completions)))
(ann-fun
(setq completions
(mapcar (lambda (s)
(let ((ann (funcall ann-fun s)))
(if ann (list s ann) s)))
completions)))
(when aff-fun
(setq completions
(funcall aff-fun completions)))
completions))))
(with-current-buffer standard-output
(setq-local completion-base-position

View file

@ -1080,7 +1080,7 @@ All HOST values should be in lower case.")
(defvar ange-ftp-trample-marker)
;; New error symbols.
(define-error 'ftp-error nil 'file-error) ;"FTP error"
(define-error 'ftp-error nil '(remote-file-error file-error)) ;"FTP error"
;;; ------------------------------------------------------------
;;; Enhanced message support.

View file

@ -0,0 +1,155 @@
;;; dictionary-connection.el --- TCP-based client connection for dictionary -*- lexical-binding:t -*-
;; Author: Torsten Hilbrich <torsten.hilbrich@gmx.net>
;; Keywords: network
;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; dictionary-connection allows to handle TCP-based connections in
;; client mode where text-based information are exchanged. There is
;; special support for handling CR LF (and the usual CR LF . CR LF
;; terminater).
;;; Code:
(defsubst dictionary-connection-p (connection)
"Returns non-nil if CONNECTION is a connection object."
(get connection 'connection))
(defsubst dictionary-connection-read-point (connection)
"Return the read point of the CONNECTION object."
(get connection 'dictionary-connection-read-point))
(defsubst dictionary-connection-process (connection)
"Return the process of the CONNECTION object."
(get connection 'dictionary-connection-process))
(defsubst dictionary-connection-buffer (connection)
"Return the buffer of the CONNECTION object."
(get connection 'dictionary-connection-buffer))
(defsubst dictionary-connection-set-read-point (connection point)
"Set the read-point for CONNECTION to POINT."
(put connection 'dictionary-connection-read-point point))
(defsubst dictionary-connection-set-process (connection process)
"Set the process for CONNECTION to PROCESS."
(put connection 'dictionary-connection-process process))
(defsubst dictionary-connection-set-buffer (connection buffer)
"Set the buffer for CONNECTION to BUFFER."
(put connection 'dictionary-connection-buffer buffer))
(defun dictionary-connection-create-data (buffer process point)
"Create a new connection data based on BUFFER, PROCESS, and POINT."
(let ((connection (make-symbol "connection")))
(put connection 'connection t)
(dictionary-connection-set-read-point connection point)
(dictionary-connection-set-process connection process)
(dictionary-connection-set-buffer connection buffer)
connection))
(defun dictionary-connection-open (server port)
"Open a connection to SERVER at PORT.
A data structure identifing the connection is returned"
(let ((process-buffer (generate-new-buffer (format " connection to %s:%s"
server
port)))
(process))
(with-current-buffer process-buffer
(setq process (open-network-stream "connection" process-buffer
server port))
(dictionary-connection-create-data process-buffer process (point-min)))))
(defun dictionary-connection-status (connection)
"Return the status of the CONNECTION.
Possible return values are the symbols:
nil: argument is no connection object
'none: argument has no connection
'up: connection is open and buffer is existing
'down: connection is closed
'alone: connection is not associated with a buffer"
(when (dictionary-connection-p connection)
(let ((process (dictionary-connection-process connection))
(buffer (dictionary-connection-buffer connection)))
(if (not process)
'none
(if (not (buffer-live-p buffer))
'alone
(if (not (eq (process-status process) 'open))
'down
'up))))))
(defun dictionary-connection-close (connection)
"Force closing of the CONNECTION."
(when (dictionary-connection-p connection)
(let ((buffer (dictionary-connection-buffer connection))
(process (dictionary-connection-process connection)))
(if process
(delete-process process))
(if buffer
(kill-buffer buffer))
(dictionary-connection-set-process connection nil)
(dictionary-connection-set-buffer connection nil))))
(defun dictionary-connection-send (connection data)
"Send DATA to the process stored in CONNECTION."
(unless (eq (dictionary-connection-status connection) 'up)
(error "Connection is not up"))
(with-current-buffer (dictionary-connection-buffer connection)
(goto-char (point-max))
(dictionary-connection-set-read-point connection (point))
(process-send-string (dictionary-connection-process connection) data)))
(defun dictionary-connection-send-crlf (connection data)
"Send DATA together with CRLF to the process found in CONNECTION."
(dictionary-connection-send connection (concat data "\r\n")))
(defun dictionary-connection-read (connection delimiter)
"Read data from CONNECTION until DELIMITER is found inside the buffer."
(unless (eq (dictionary-connection-status connection) 'up)
(error "Connection is not up"))
(let ((case-fold-search nil)
match-end)
(with-current-buffer (dictionary-connection-buffer connection)
(goto-char (dictionary-connection-read-point connection))
;; Wait until there is enough data
(while (not (search-forward-regexp delimiter nil t))
(accept-process-output (dictionary-connection-process connection) 3)
(goto-char (dictionary-connection-read-point connection)))
(setq match-end (point))
;; Return the result
(let ((result (buffer-substring (dictionary-connection-read-point connection)
match-end)))
(dictionary-connection-set-read-point connection match-end)
result))))
(defun dictionary-connection-read-crlf (connection)
"Read from CONNECTION until a line is completed with CRLF."
(dictionary-connection-read connection "\015?\012"))
(defun dictionary-connection-read-to-point (connection)
"Read from CONNECTION until an end of entry is encountered.
End of entry is a decimal point found on a line by itself.
"
(dictionary-connection-read connection "\015?\012[.]\015?\012"))
(provide 'dictionary-connection)
;;; dictionary-connection.el ends here

1355
lisp/net/dictionary.el Normal file

File diff suppressed because it is too large Load diff

View file

@ -190,7 +190,7 @@ until a successful connection is made."
:type '(repeat string))
(defcustom imap-process-connection-type nil
"Value for `process-connection-type' to use for Kerberos4, GSSAPI, shell, and SSL.
"Value for `process-connection-type' to use for Kerberos4, GSSAPI, shell and SSL.
The `process-connection-type' variable controls the type of device
used to communicate with subprocesses. Values are nil to use a
pipe, or t or `pty' to use a pty. The value has no effect if the

View file

@ -1507,7 +1507,7 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
(make-variable-buffer-local 'rcirc-last-sender)
(defcustom rcirc-omit-threshold 100
"Number of lines since last activity from a nick before `rcirc-omit-responses' are omitted."
"Lines since last activity from a nick before `rcirc-omit-responses' are omitted."
:type 'integer)
(defcustom rcirc-log-process-buffers nil

View file

@ -929,7 +929,7 @@ alternative implementation will be used."
(unless (or (null sentinel) (functionp sentinel))
(signal 'wrong-type-argument (list #'functionp sentinel)))
(unless (or (null stderr) (bufferp stderr) (stringp stderr))
(signal 'wrong-type-argument (list #'stringp stderr)))
(signal 'wrong-type-argument (list #'bufferp stderr)))
(when (and (stringp stderr) (tramp-tramp-file-p stderr)
(not (tramp-equal-remote default-directory stderr)))
(signal 'file-error (list "Wrong stderr" stderr)))
@ -981,7 +981,11 @@ alternative implementation will be used."
;; otherwise we might be interrupted by
;; `verify-visited-file-modtime'.
(let ((buffer-undo-list t)
(inhibit-read-only t))
(inhibit-read-only t)
(coding-system-for-write
(if (symbolp coding) coding (car coding)))
(coding-system-for-read
(if (symbolp coding) coding (cdr coding))))
(clear-visited-file-modtime)
(narrow-to-region (point-max) (point-max))
;; We call `tramp-adb-maybe-open-connection',

View file

@ -159,9 +159,6 @@ When called interactively, a Tramp connection has to be selected."
This includes password cache, file cache, connection cache, buffers."
(interactive)
;; Unlock Tramp.
(setq tramp-locked nil)
;; Flush password cache.
(password-reset)

View file

@ -348,6 +348,11 @@ A nil value for either argument stands for the current time."
(lambda (fromstring tostring instring)
(replace-regexp-in-string (regexp-quote fromstring) tostring instring))))
;; Error symbol `remote-file-error' is defined in Emacs 28.1. We use
;; an adapted error message in order to see that compatible symbol.
(unless (get 'remote-file-error 'error-conditions)
(define-error 'remote-file-error "Remote file error (compat)" 'file-error))
(add-hook 'tramp-unload-hook
(lambda ()
(unload-feature 'tramp-loaddefs 'force)

View file

@ -58,8 +58,7 @@ If it is nil, no compression at all will be applied."
;;;###tramp-autoload
(defcustom tramp-copy-size-limit 10240
"The maximum file size where inline copying is preferred over an \
out-of-the-band copy.
"Maximum file size where inline copying is preferred to an out-of-the-band copy.
If it is nil, out-of-the-band copy will be used without a check."
:group 'tramp
:type '(choice (const nil) integer))
@ -2871,7 +2870,7 @@ implementation will be used."
(unless (or (null sentinel) (functionp sentinel))
(signal 'wrong-type-argument (list #'functionp sentinel)))
(unless (or (null stderr) (bufferp stderr) (stringp stderr))
(signal 'wrong-type-argument (list #'stringp stderr)))
(signal 'wrong-type-argument (list #'bufferp stderr)))
(when (and (stringp stderr) (tramp-tramp-file-p stderr)
(not (tramp-equal-remote default-directory stderr)))
(signal 'file-error (list "Wrong stderr" stderr)))
@ -2944,7 +2943,8 @@ implementation will be used."
(mapconcat
#'tramp-shell-quote-argument uenv " "))
"")
(if heredoc (format "<<'%s'" tramp-end-of-heredoc) "")
(if heredoc
(format "<<'%s'" tramp-end-of-heredoc) "")
(if tmpstderr (format "2>'%s'" tmpstderr) "")
(mapconcat #'tramp-shell-quote-argument env " ")
(if heredoc
@ -2984,7 +2984,11 @@ implementation will be used."
;; `verify-visited-file-modtime'.
(let ((buffer-undo-list t)
(inhibit-read-only t)
(mark (point-max)))
(mark (point-max))
(coding-system-for-write
(if (symbolp coding) coding (car coding)))
(coding-system-for-read
(if (symbolp coding) coding (cdr coding))))
(clear-visited-file-modtime)
(narrow-to-region (point-max) (point-max))
;; We call `tramp-maybe-open-connection', in
@ -3562,7 +3566,7 @@ implementation will be used."
;; Make `last-coding-system-used' have the right value.
(when coding-system-used
(set 'last-coding-system-used coding-system-used))))
(setq last-coding-system-used coding-system-used))))
(tramp-flush-file-properties v localname)
@ -4914,7 +4918,8 @@ Goes through the list `tramp-inline-compress-commands'."
(defun tramp-timeout-session (vec)
"Close the connection VEC after a session timeout.
If there is just some editing, retry it after 5 seconds."
(if (and tramp-locked tramp-locker
(if (and (tramp-get-connection-property
(tramp-get-connection-process vec) "locked" nil)
(tramp-file-name-equal-p vec (car tramp-current-connection)))
(progn
(tramp-message
@ -6137,4 +6142,9 @@ function cell is returned to be applied on a buffer."
;;
;; * Implement `:stderr' of `make-process' as pipe process.
;; * One interesting solution (with other applications as well) would
;; be to stipulate, as a directory or connection-local variable, an
;; additional rc file on the remote machine that is sourced every
;; time Tramp connects. <https://emacs.stackexchange.com/questions/62306>
;;; tramp-sh.el ends here

View file

@ -1022,8 +1022,8 @@ See `tramp-file-name-structure'."
5 6 7 8 1))
(defvar tramp-file-name-structure nil ;Initialized when defining `tramp-syntax'!
"List of six elements (REGEXP METHOD USER HOST FILE HOP), detailing \
the Tramp file name structure.
"List detailing the Tramp file name structure.
This is a list of six elements (REGEXP METHOD USER HOST FILE HOP).
The first element REGEXP is a regular expression matching a Tramp file
name. The regex should contain parentheses around the method name,
@ -2349,33 +2349,6 @@ Must be handled by the callers."
res (cdr elt))))
res)))
;; In Emacs, there is some concurrency due to timers. If a timer
;; interrupts Tramp and wishes to use the same connection buffer as
;; the "main" Emacs, then garbage might occur in the connection
;; buffer. Therefore, we need to make sure that a timer does not use
;; the same connection buffer as the "main" Emacs. We implement a
;; cheap global lock, instead of locking each connection buffer
;; separately. The global lock is based on two variables,
;; `tramp-locked' and `tramp-locker'. `tramp-locked' is set to true
;; (with setq) to indicate a lock. But Tramp also calls itself during
;; processing of a single file operation, so we need to allow
;; recursive calls. That's where the `tramp-locker' variable comes in
;; -- it is let-bound to t during the execution of the current
;; handler. So if `tramp-locked' is t and `tramp-locker' is also t,
;; then we should just proceed because we have been called
;; recursively. But if `tramp-locker' is nil, then we are a timer
;; interrupting the "main" Emacs, and then we signal an error.
(defvar tramp-locked nil
"If non-nil, then Tramp is currently busy.
Together with `tramp-locker', this implements a locking mechanism
preventing reentrant calls of Tramp.")
(defvar tramp-locker nil
"If non-nil, then a caller has locked Tramp.
Together with `tramp-locked', this implements a locking mechanism
preventing reentrant calls of Tramp.")
;; Main function.
(defun tramp-file-name-handler (operation &rest args)
"Invoke Tramp file name handler for OPERATION and ARGS.
@ -2429,17 +2402,7 @@ Fall back to normal file name handler if no Tramp file name handler exists."
(setq result
(catch 'non-essential
(catch 'suppress
(when (and tramp-locked (not tramp-locker))
(setq tramp-locked nil)
(tramp-error
v 'file-error
"Forbidden reentrant call of Tramp"))
(let ((tl tramp-locked))
(setq tramp-locked t)
(unwind-protect
(let ((tramp-locker t))
(apply foreign operation args))
(setq tramp-locked tl))))))
(apply foreign operation args))))
;; (tramp-message
;; v 4 "Running `%s'...`%s'" (cons operation args) result)
(cond
@ -3825,7 +3788,16 @@ It does not support `:stderr'."
(unless (or (null sentinel) (functionp sentinel))
(signal 'wrong-type-argument (list #'functionp sentinel)))
(unless (or (null stderr) (bufferp stderr))
(signal 'wrong-type-argument (list #'stringp stderr)))
(signal 'wrong-type-argument (list #'bufferp stderr)))
;; Quote shell command.
(when (and (= (length command) 3)
(stringp (nth 0 command))
(string-match-p "sh$" (nth 0 command))
(stringp (nth 1 command))
(string-equal "-c" (nth 1 command))
(stringp (nth 2 command)))
(setcar (cddr command) (tramp-shell-quote-argument (nth 2 command))))
(let* ((buffer
(if buffer
@ -4499,6 +4471,32 @@ performed successfully. Any other value means an error."
;;; Utility functions:
;; In Emacs, there is some concurrency due to timers. If a timer
;; interrupts Tramp and wishes to use the same connection buffer as
;; the "main" Emacs, then garbage might occur in the connection
;; buffer. Therefore, we need to make sure that a timer does not use
;; the same connection buffer as the "main" Emacs. We lock each
;; connection process separately by a connection property.
(defmacro with-tramp-locked-connection (proc &rest body)
"Lock PROC for other communication, and run BODY.
Mostly useful to protect BODY from being interrupted by timers."
(declare (indent 1) (debug t))
`(if (tramp-get-connection-property ,proc "locked" nil)
;; Be kind for older Emacsen.
(if (member 'remote-file-error debug-ignored-errors)
(throw 'non-essential 'non-essential)
(tramp-error
,proc 'remote-file-error "Forbidden reentrant call of Tramp"))
(unwind-protect
(progn
(tramp-set-connection-property ,proc "locked" t)
,@body)
(tramp-flush-connection-property ,proc "locked"))))
(font-lock-add-keywords
'emacs-lisp-mode '("\\<with-tramp-locked-connection\\>"))
(defun tramp-accept-process-output (proc &optional timeout)
"Like `accept-process-output' for Tramp processes.
This is needed in order to hide `last-coding-system-used', which is set
@ -4508,15 +4506,17 @@ If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'."
(let ((inhibit-read-only t)
last-coding-system-used
result)
;; JUST-THIS-ONE is set due to Bug#12145. `with-local-quit'
;; returns t in order to report success.
(if (with-local-quit
(setq result (accept-process-output proc timeout nil t)) t)
(tramp-message
proc 10 "%s %s %s %s\n%s"
proc timeout (process-status proc) result (buffer-string))
;; Propagate quit.
(keyboard-quit))
;; This must be protected by the "locked" property.
(with-tramp-locked-connection proc
;; JUST-THIS-ONE is set due to Bug#12145. `with-local-quit'
;; returns t in order to report success.
(if (with-local-quit
(setq result (accept-process-output proc timeout nil t)) t)
(tramp-message
proc 10 "%s %s %s %s\n%s"
proc timeout (process-status proc) result (buffer-string))
;; Propagate quit.
(keyboard-quit)))
result)))
(defun tramp-search-regexp (regexp)
@ -4633,19 +4633,21 @@ the remote host use line-endings as defined in the variable
(unless (or (string-empty-p string)
(string-equal (substring string -1) tramp-rsh-end-of-line))
(setq string (concat string tramp-rsh-end-of-line)))
;; Send the string.
(with-local-quit
(if (and chunksize (not (zerop chunksize)))
(let ((pos 0)
(end (length string)))
(while (< pos end)
(tramp-message
vec 10 "Sending chunk from %s to %s"
pos (min (+ pos chunksize) end))
(process-send-string
p (substring string pos (min (+ pos chunksize) end)))
(setq pos (+ pos chunksize))))
(process-send-string p string))))))
;; This must be protected by the "locked" property.
(with-tramp-locked-connection p
;; Send the string.
(with-local-quit
(if (and chunksize (not (zerop chunksize)))
(let ((pos 0)
(end (length string)))
(while (< pos end)
(tramp-message
vec 10 "Sending chunk from %s to %s"
pos (min (+ pos chunksize) end))
(process-send-string
p (substring string pos (min (+ pos chunksize) end)))
(setq pos (+ pos chunksize))))
(process-send-string p string)))))))
(defun tramp-process-sentinel (proc event)
"Flush file caches and remove shell prompt."

View file

@ -107,8 +107,10 @@ and when the encoding declaration specifies `UTF-16'."
(defcustom nxml-default-buffer-file-coding-system nil
"Default value for `buffer-file-coding-system' for a buffer for a new file.
A value of nil means use the default value of `buffer-file-coding-system' as normal.
A buffer's `buffer-file-coding-system' affects what \\[nxml-insert-xml-declaration] inserts."
A value of nil means use the default value of
`buffer-file-coding-system' as normal.
A buffer's `buffer-file-coding-system' affects what
\\[nxml-insert-xml-declaration] inserts."
:group 'nxml
:type 'coding-system)

Some files were not shown because too many files have changed in this diff Show more