mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-18 10:57:34 +00:00
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs into feature/pgtk
This commit is contained in:
commit
565d8f57d3
273 changed files with 12022 additions and 7080 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
85
admin/emake
Executable 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
|
||||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
1223
doc/misc/org.texi
1223
doc/misc/org.texi
File diff suppressed because it is too large
Load diff
|
|
@ -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
|
||||
|
|
|
|||
76
etc/NEWS
76
etc/NEWS
|
|
@ -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
|
||||
|
||||
|
|
|
|||
593
etc/ORG-NEWS
593
etc/ORG-NEWS
|
|
@ -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
|
||||
|
|
|
|||
36
etc/TODO
36
etc/TODO
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'"
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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>))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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 "")
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
13
lisp/ido.el
13
lisp/ido.el
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
18
lisp/info.el
18
lisp/info.el
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 "")
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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'."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
155
lisp/net/dictionary-connection.el
Normal file
155
lisp/net/dictionary-connection.el
Normal 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
1355
lisp/net/dictionary.el
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in a new issue