Merge branch 'master' into harfbuzz
This commit is contained in:
commit
b40dde705a
603 changed files with 8316 additions and 6499 deletions
|
@ -21,7 +21,7 @@
|
|||
# any particular service that uses that protocol. Also, it is intended for
|
||||
# evaluation purposes, thus possibly temporary.
|
||||
|
||||
# Maintainer: tzz@lifelogs.com
|
||||
# Maintainer: Ted Zlatanov <tzz@lifelogs.com>
|
||||
# URL: https://emba.gnu.org/emacs/emacs
|
||||
|
||||
image: debian:stretch
|
||||
|
|
41
INSTALL
41
INSTALL
|
@ -34,11 +34,12 @@ some of the steps manually. The more detailed description in the other
|
|||
sections of this guide will help you do that, so please refer to those
|
||||
sections if you need to.
|
||||
|
||||
1. Unpacking the Emacs release requires about 200 MB of free
|
||||
disk space. Building Emacs uses about another 200 MB of space.
|
||||
The final installed Emacs uses about 150 MB of disk space.
|
||||
This includes the space-saving that comes from automatically
|
||||
compressing the Lisp source files on installation.
|
||||
1. Obtain and unpack the Emacs release, with commands like this:
|
||||
|
||||
wget https://ftp.gnu.org/gnu/emacs/emacs-VERSION.tar.xz
|
||||
tar -xf emacs-VERSION.tar.xz
|
||||
|
||||
where VERSION is the Emacs version number.
|
||||
|
||||
2a. 'cd' to the directory where you unpacked Emacs and invoke the
|
||||
'configure' script:
|
||||
|
@ -81,13 +82,17 @@ sections if you need to.
|
|||
|
||||
src/emacs -Q
|
||||
|
||||
To test Emacs further (intended mostly to help developers):
|
||||
|
||||
make check
|
||||
|
||||
6. Assuming that the program 'src/emacs' starts and displays its
|
||||
opening screen, you can install the program and its auxiliary
|
||||
files into their installation directories:
|
||||
|
||||
make install
|
||||
|
||||
You are now ready to use Emacs. If you wish to conserve disk space,
|
||||
You are now ready to use Emacs. If you wish to conserve space,
|
||||
you may remove the program binaries and object files from the
|
||||
directory where you built Emacs:
|
||||
|
||||
|
@ -118,7 +123,7 @@ packages. Note that if there is a separate 'dev' or 'devel' package,
|
|||
for use at compilation time rather than run time, you will need that
|
||||
as well as the corresponding run time package; typically the dev
|
||||
package will contain header files and a library archive. Otherwise,
|
||||
you can download the libraries from <http://www.nongnu.org/m17n/>.
|
||||
you can download the libraries from <https://www.nongnu.org/m17n/>.
|
||||
|
||||
Note that Emacs cannot support complex scripts on a TTY, unless the
|
||||
terminal includes such a support.
|
||||
|
@ -162,14 +167,14 @@ can be found (in the unlikely event that your distribution does not
|
|||
provide them). By default, libraries marked with an X are required if
|
||||
X11 is being used.
|
||||
|
||||
libXaw3d https://directory.fsf.org/project/xaw3d/
|
||||
X libxpm for XPM: http://www.x.org/releases/current/src/lib/
|
||||
libXaw3d https://directory.fsf.org/project/Xaw3d
|
||||
X libxpm for XPM: https://www.x.org/releases/current/src/lib/
|
||||
X libpng for PNG: http://www.libpng.org/
|
||||
libz (for PNG): http://www.zlib.net/
|
||||
X libjpeg for JPEG: http://www.ijg.org/
|
||||
X libtiff for TIFF: http://www.remotesensing.org/libtiff/
|
||||
X libgif for GIF: http://sourceforge.net/projects/giflib/
|
||||
librsvg2 for SVG: http://wiki.gnome.org/action/show/Projects/LibRsvg
|
||||
libz (for PNG): https://www.zlib.net/
|
||||
X libjpeg for JPEG: https://www.ijg.org/
|
||||
X libtiff for TIFF: http://www.simplesystems.org/libtiff/
|
||||
X libgif for GIF: http://giflib.sourceforge.net/
|
||||
librsvg2 for SVG: https://wiki.gnome.org/Projects/LibRsvg
|
||||
|
||||
If you supply the appropriate --without-LIB option, 'configure' will
|
||||
omit the corresponding library from Emacs, even if that makes for a
|
||||
|
@ -213,7 +218,7 @@ DETAILED BUILDING AND INSTALLATION:
|
|||
see nextstep/INSTALL. For non-ancient versions of MS Windows, see
|
||||
the file nt/INSTALL. For MS-DOS and MS Windows 3.X, see msdos/INSTALL.)
|
||||
|
||||
1) See the basic installation summary above for the disk space requirements.
|
||||
1) See BASIC INSTALLATION above for getting and configuring Emacs.
|
||||
|
||||
2) In the unlikely event that 'configure' does not detect your system
|
||||
type correctly, consult './etc/MACHINES' to see what --host, --build
|
||||
|
@ -294,7 +299,9 @@ or more of these options:
|
|||
--without-gif for GIF image support
|
||||
--without-png for PNG image support
|
||||
--without-rsvg for SVG image support
|
||||
--without-imagemagick for Imagemagick support
|
||||
|
||||
Although ImageMagick support is disabled by default due to security
|
||||
and stability concerns, you can enable it with --with-imagemagick.
|
||||
|
||||
Use --without-toolkit-scroll-bars to disable Motif or Xaw3d scroll bars.
|
||||
|
||||
|
@ -352,7 +359,7 @@ Use --enable-link-time-optimization to enable link-time optimization.
|
|||
With GCC, you need GCC 4.5.0 and later, and 'configure' arranges for
|
||||
linking to be parallelized if possible. With Clang, you need GNU
|
||||
binutils with the gold linker and plugin support, along with the LLVM
|
||||
gold plugin <http://llvm.org/docs/GoldPlugin.html>. Link time
|
||||
gold plugin <https://llvm.org/docs/GoldPlugin.html>. Link time
|
||||
optimization is not the default as it tends to cause crashes and to
|
||||
make Emacs slower.
|
||||
|
||||
|
|
|
@ -32,8 +32,8 @@ can invoke './configure -C'. After configuring, build Emacs as follows:
|
|||
|
||||
$ make
|
||||
|
||||
If you want to install Emacs, type 'make install' instead of 'make' in
|
||||
the last command.
|
||||
You can also type 'make check' to test and 'make install' to install
|
||||
Emacs.
|
||||
|
||||
Occasionally the file 'lisp/loaddefs.el' (and similar automatically
|
||||
generated files, such as 'esh-groups.el', and '*-loaddefs.el' in some
|
||||
|
|
21
Makefile.in
21
Makefile.in
|
@ -320,7 +320,8 @@ SUBDIR_MAKEFILES = $(patsubst ${srcdir}/%,%,${SUBDIR_MAKEFILES_IN:.in=})
|
|||
# Non-makefile files created by config.status.
|
||||
CONFIG_STATUS_FILES_IN = \
|
||||
${srcdir}/nt/emacs.rc.in ${srcdir}/nt/emacsclient.rc.in \
|
||||
${srcdir}/doc/man/emacs.1.in ${srcdir}/src/emacs-module.h.in
|
||||
${srcdir}/doc/man/emacs.1.in ${srcdir}/src/emacs-module.h.in \
|
||||
${srcdir}/src/module-env-*.h
|
||||
|
||||
# Subdirectories to install, and where they'll go. lib-src's and nt's
|
||||
# makefiles know how to install them, so we don't do that here.
|
||||
|
@ -949,17 +950,15 @@ extraclean: $(extraclean_dirs:=_extraclean)
|
|||
TAGS tags: lib lib-src # src
|
||||
$(MAKE) -C src tags
|
||||
|
||||
.PHONY: have-tests
|
||||
have-tests:
|
||||
@if test ! -d test; then \
|
||||
echo "You do not seem to have the test/ directory."; \
|
||||
echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
.PHONY: check check-maybe check-expensive check-all
|
||||
check check-maybe check-expensive check-all: have-tests all
|
||||
CHECK_TARGETS = check check-maybe check-expensive check-all
|
||||
.PHONY: $(CHECK_TARGETS)
|
||||
$(CHECK_TARGETS): all
|
||||
ifeq ($(wildcard test),test)
|
||||
$(MAKE) -C test $@
|
||||
else
|
||||
@echo "You do not seem to have the test/ directory."
|
||||
@echo "Maybe you used a release tarfile that lacks tests."
|
||||
endif
|
||||
|
||||
dist:
|
||||
cd ${srcdir}; ./make-dist
|
||||
|
|
|
@ -138,10 +138,10 @@ Root must be the root of an Emacs source tree."
|
|||
(if (eq 2 (length newversion)) 0 1))))
|
||||
(majorbump (and oldversion (not (equal oldmajor newmajor))))
|
||||
(minorbump (and oldversion (not majorbump)
|
||||
(or (not (equal (cadr oldversion)
|
||||
(cadr newversion)))
|
||||
(and (equal (cadr oldversion) (cadr newversion))
|
||||
(equal (nth 2 newversion) 50)))))
|
||||
(or (not (equal (cadr oldversion) (cadr newversion)))
|
||||
;; Eg 26.2 -> 26.2.50.
|
||||
(and (> (length newversion)
|
||||
(length oldversion))))))
|
||||
(newsfile (expand-file-name "etc/NEWS" root))
|
||||
(oldnewsfile (expand-file-name (format "etc/NEWS.%s" oldmajor) root)))
|
||||
(unless (> (length newversion) 2) ; pretest or release candidate?
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
|
||||
;;; authors.el --- utility for maintaining Emacs's AUTHORS file
|
||||
|
||||
;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Gerd Moellmann <gerd@gnu.org>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: maint
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Thien-Thi Nguyen <ttn@gnu.org>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: maint
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ General steps (for each step, check for possible errors):
|
|||
results against the new tar contents.
|
||||
|
||||
7. tar -xf emacs-NEW.tar; cd emacs-NEW
|
||||
./configure --prefix=/tmp/emacs && make && make install
|
||||
./configure --prefix=/tmp/emacs && make check && make install
|
||||
Use 'script' or M-x compile to save the compilation log in
|
||||
compile-NEW.log and compare it against an old one. The easiest way
|
||||
to do that is to visit the old log in Emacs, change the version
|
||||
|
|
|
@ -50,6 +50,7 @@ repo_files=$(git ls-files) &&
|
|||
# Do not update the copyright of files that have one or more of the
|
||||
# following problems:
|
||||
# . They are license files, maintained by the FSF, with their own dates.
|
||||
# . They are GMP files, maintained by the GMP project, with their own dates.
|
||||
# . Their format cannot withstand changing the contents of copyright strings.
|
||||
|
||||
updatable_files=$(find $repo_files \
|
||||
|
@ -70,6 +71,7 @@ updatable_files=$(find $repo_files \
|
|||
! -name hand.cur \
|
||||
! -name key.pub \
|
||||
! -name key.sec \
|
||||
! -name 'mini-gmp.[ch]' \
|
||||
-print) &&
|
||||
|
||||
build-aux/update-copyright $updatable_files
|
||||
|
|
13
autogen.sh
13
autogen.sh
|
@ -4,7 +4,6 @@
|
|||
## Copyright (C) 2011-2019 Free Software Foundation, Inc.
|
||||
|
||||
## Author: Glenn Morris <rgm@gnu.org>
|
||||
## Maintainer: emacs-devel@gnu.org
|
||||
|
||||
## This file is part of GNU Emacs.
|
||||
|
||||
|
@ -316,8 +315,16 @@ git_config transfer.fsckObjects true
|
|||
|
||||
# Configure 'git diff' hunk header format.
|
||||
|
||||
# This xfuncname is based on Git's built-in 'cpp' pattern.
|
||||
# The first line rejects jump targets and access declarations.
|
||||
# The second line matches top-level functions and methods.
|
||||
# The third line matches preprocessor and DEFUN macros.
|
||||
git_config diff.cpp.xfuncname \
|
||||
'!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:[[:space:]]*($|/[/*])
|
||||
^((::[[:space:]]*)?[A-Za-z_][A-Za-z_0-9]*[[:space:]]*\(.*)$
|
||||
^((#define[[:space:]]|DEFUN).*)$'
|
||||
git_config diff.elisp.xfuncname \
|
||||
'^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
|
||||
'^\([^[:space:]]*def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
|
||||
git_config 'diff.m4.xfuncname' '^((m4_)?define|A._DEFUN(_ONCE)?)\([^),]*'
|
||||
git_config 'diff.make.xfuncname' \
|
||||
'^([$.[:alnum:]_].*:|[[:alnum:]_]+[[:space:]]*([*:+]?[:?]?|!?)=|define .*)'
|
||||
|
@ -332,7 +339,7 @@ git_config diff.texinfo.xfuncname \
|
|||
tailored_hooks=
|
||||
sample_hooks=
|
||||
|
||||
for hook in commit-msg pre-commit; do
|
||||
for hook in commit-msg pre-commit prepare-commit-msg; do
|
||||
cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
|
||||
tailored_hooks="$tailored_hooks $hook"
|
||||
done
|
||||
|
|
27
build-aux/config.guess
vendored
27
build-aux/config.guess
vendored
|
@ -2,7 +2,7 @@
|
|||
# Attempt to guess a canonical system name.
|
||||
# Copyright 1992-2019 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2019-03-04'
|
||||
timestamp='2019-04-28'
|
||||
|
||||
# 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
|
||||
|
@ -1468,6 +1468,14 @@ cat > "$dummy.c" <<EOF
|
|||
#include <sys/types.h>
|
||||
#include <sys/utsname.h>
|
||||
#endif
|
||||
#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
|
||||
#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
|
||||
#include <signal.h>
|
||||
#if defined(_SIZE_T_) || defined(SIGLOST)
|
||||
#include <sys/utsname.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
main ()
|
||||
{
|
||||
#if defined (sony)
|
||||
|
@ -1554,19 +1562,24 @@ main ()
|
|||
#else
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
#endif
|
||||
#else
|
||||
#if defined(_SIZE_T_) || defined(SIGLOST)
|
||||
struct utsname un;
|
||||
uname (&un);
|
||||
printf ("vax-dec-ultrix%s\n", un.release); exit (0);
|
||||
#else
|
||||
printf ("vax-dec-ultrix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
|
||||
#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
|
||||
#include <signal.h>
|
||||
#if defined(_SIZE_T_) /* >= ULTRIX4 */
|
||||
printf ("mips-dec-ultrix4\n"); exit (0);
|
||||
#if defined(_SIZE_T_) || defined(SIGLOST)
|
||||
struct utsname *un;
|
||||
uname (&un);
|
||||
printf ("mips-dec-ultrix%s\n", un.release); exit (0);
|
||||
#else
|
||||
#if defined(ULTRIX3) || defined(ultrix3) || defined(SIGLOST)
|
||||
printf ("mips-dec-ultrix3\n"); exit (0);
|
||||
#endif
|
||||
printf ("mips-dec-ultrix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
|
45
build-aux/git-hooks/prepare-commit-msg
Executable file
45
build-aux/git-hooks/prepare-commit-msg
Executable file
|
@ -0,0 +1,45 @@
|
|||
#!/bin/sh
|
||||
# Check the format of GNU Emacs change log entries.
|
||||
|
||||
# Copyright 2019 Free Software Foundation, Inc.
|
||||
|
||||
# This file is part of GNU Emacs.
|
||||
|
||||
# GNU Emacs 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 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# GNU Emacs 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. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
COMMIT_MSG_FILE=$1
|
||||
COMMIT_SOURCE=$2
|
||||
SHA1=$3
|
||||
|
||||
# Prefer gawk if available, as it handles NUL bytes properly.
|
||||
if type gawk >/dev/null 2>&1; then
|
||||
awk=gawk
|
||||
else
|
||||
awk=awk
|
||||
fi
|
||||
|
||||
exec $awk '
|
||||
# Catch the case when someone ran git-commit with -s option,
|
||||
# which automatically adds Signed-off-by.
|
||||
/^Signed-off-by: / {
|
||||
print "'\''Signed-off-by:'\'' in commit message"
|
||||
status = 1
|
||||
}
|
||||
END {
|
||||
if (status != 0) {
|
||||
print "Commit aborted; please see the file 'CONTRIBUTE'"
|
||||
}
|
||||
exit status
|
||||
}
|
||||
' <"$COMMIT_MSG_FILE"
|
|
@ -5,7 +5,6 @@
|
|||
## Copyright (C) 2013-2019 Free Software Foundation, Inc.
|
||||
|
||||
## Author: Glenn Morris <rgm@gnu.org>
|
||||
## Maintainer: emacs-devel@gnu.org
|
||||
|
||||
## This file is part of GNU Emacs.
|
||||
|
||||
|
|
|
@ -432,7 +432,7 @@ OPTION_DEFAULT_ON([lcms2],[don't compile with Little CMS support])
|
|||
OPTION_DEFAULT_ON([libsystemd],[don't compile with libsystemd support])
|
||||
OPTION_DEFAULT_OFF([cairo],[compile with Cairo drawing (experimental)])
|
||||
OPTION_DEFAULT_ON([xml2],[don't compile with XML parsing support])
|
||||
OPTION_DEFAULT_ON([imagemagick],[don't compile with ImageMagick image support])
|
||||
OPTION_DEFAULT_OFF([imagemagick],[compile with ImageMagick image support])
|
||||
OPTION_DEFAULT_ON([json], [don't compile with native JSON support])
|
||||
|
||||
OPTION_DEFAULT_ON([xft],[don't use XFT for anti aliased fonts])
|
||||
|
@ -3708,6 +3708,8 @@ AC_SUBST_FILE([module_env_snippet_27])
|
|||
module_env_snippet_25="$srcdir/src/module-env-25.h"
|
||||
module_env_snippet_26="$srcdir/src/module-env-26.h"
|
||||
module_env_snippet_27="$srcdir/src/module-env-27.h"
|
||||
emacs_major_version="${PACKAGE_VERSION%%.*}"
|
||||
AC_SUBST(emacs_major_version)
|
||||
|
||||
### Use -lpng if available, unless '--with-png=no'.
|
||||
HAVE_PNG=no
|
||||
|
@ -5736,9 +5738,8 @@ m4_define([subdir_makefiles],
|
|||
SUBDIR_MAKEFILES="subdir_makefiles"
|
||||
AC_CONFIG_FILES(subdir_makefiles)
|
||||
|
||||
dnl test/ is not present in release tarfiles.
|
||||
dnl The test/ directory is missing if './make-dist --no-tests' was used.
|
||||
opt_makefile=test/Makefile
|
||||
|
||||
if test -f "$srcdir/$opt_makefile.in"; then
|
||||
SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES $opt_makefile"
|
||||
dnl Again, it's best not to use a variable. Though you can add
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
@c
|
||||
@c This file is included either in emacs-xtra.texi (when producing the
|
||||
@c printed version) or in the main Emacs manual (for the on-line version).
|
||||
@node Autorevert
|
||||
@section Auto Reverting Non-File Buffers
|
||||
|
||||
@node Non-File Buffers
|
||||
@subsection Auto Reverting Non-File Buffers
|
||||
|
||||
Global Auto Revert Mode normally only reverts file buffers. There are
|
||||
two ways to auto-revert certain non-file buffers: by enabling Auto
|
||||
|
@ -34,6 +35,14 @@ the Buffer Menu.) In this case, Auto Revert does not print any
|
|||
messages while reverting, even when @code{auto-revert-verbose} is
|
||||
non-@code{nil}.
|
||||
|
||||
@vindex buffer-auto-revert-by-notification
|
||||
Some non-file buffers can be updated reliably by file notification on
|
||||
their default directory; Dired buffers is an example. The major mode
|
||||
can indicate this by setting @code{buffer-auto-revert-by-notification}
|
||||
to a non-@code{nil} value in that buffer, allowing Auto Revert to
|
||||
avoid periodic polling. Such notification does not include changes to
|
||||
files in that directory, only to the directory itself.
|
||||
|
||||
The details depend on the particular types of buffers and are
|
||||
explained in the corresponding sections.
|
||||
|
||||
|
@ -43,7 +52,7 @@ explained in the corresponding sections.
|
|||
@end menu
|
||||
|
||||
@node Auto Reverting the Buffer Menu
|
||||
@subsection Auto Reverting the Buffer Menu
|
||||
@subsubsection Auto Reverting the Buffer Menu
|
||||
|
||||
If auto-reverting of non-file buffers is enabled, the Buffer Menu
|
||||
@iftex
|
||||
|
@ -65,7 +74,7 @@ adding marks sets the buffer's modified flag prevents Auto Revert from
|
|||
automatically erasing the marks.
|
||||
|
||||
@node Auto Reverting Dired
|
||||
@subsection Auto Reverting Dired buffers
|
||||
@subsubsection Auto Reverting Dired buffers
|
||||
|
||||
Dired buffers only auto-revert when the file list of the buffer's main
|
||||
directory changes (e.g., when a new file is added or deleted). They
|
||||
|
|
|
@ -568,10 +568,10 @@ mode in this buffer, as long as it is not marked modified. Global
|
|||
Auto Revert mode applies to the @file{*Buffer List*} buffer only if
|
||||
@code{global-auto-revert-non-file-buffers} is non-@code{nil}.
|
||||
@iftex
|
||||
@inforef{Autorevert,, emacs-xtra}, for details.
|
||||
@inforef{Auto Reverting the Buffer Menu,, emacs-xtra}, for details.
|
||||
@end iftex
|
||||
@ifnottex
|
||||
@xref{Autorevert, global-auto-revert-non-file-buffers}, for details.
|
||||
@xref{Auto Reverting the Buffer Menu, global-auto-revert-non-file-buffers}, for details.
|
||||
@end ifnottex
|
||||
|
||||
@node Indirect Buffers
|
||||
|
|
|
@ -1521,6 +1521,12 @@ library lets Emacs properly set up the hyperlinks in the @file{*Help*}
|
|||
buffer). To disable this feature, change the variable
|
||||
@code{help-enable-auto-load} to @code{nil}.
|
||||
|
||||
@vindex help-enable-completion-auto-load
|
||||
Automatic loading also occurs when completing names for
|
||||
@code{describe-variable} and @code{describe-function}, based on the
|
||||
prefix being completed. To disable this feature, change the variable
|
||||
@code{help-enable-completion-auto-load} to @code{nil}.
|
||||
|
||||
@vindex load-dangerous-libraries
|
||||
@cindex Lisp files byte-compiled by XEmacs
|
||||
By default, Emacs refuses to load compiled Lisp files which were
|
||||
|
|
|
@ -39,7 +39,7 @@ corresponding long form.
|
|||
|
||||
The long forms with @samp{--} are easier to remember, but longer to
|
||||
type. However, you don't have to spell out the whole option name; any
|
||||
unambiguous abbreviation is enough. When a long option takes an
|
||||
unambiguous abbreviation is enough. When a long option requires an
|
||||
argument, you can use either a space or an equal sign to separate the
|
||||
option name and the argument. Thus, for the option @samp{--display},
|
||||
you can write either @samp{--display sugar-bombs:0.0} or
|
||||
|
@ -347,13 +347,15 @@ Start Emacs with minimum customizations. This is similar to using
|
|||
@itemx --bg-daemon[=@var{name}]
|
||||
@itemx --fg-daemon[=@var{name}]
|
||||
Start Emacs as a daemon: after Emacs starts up, it starts the Emacs
|
||||
server without opening any frames.
|
||||
(Optionally, you can specify an explicit @var{name} for the server.)
|
||||
You can then use the @command{emacsclient} command to connect to Emacs
|
||||
for editing. @xref{Emacs Server}, for information about using Emacs
|
||||
as a daemon. A ``background'' daemon disconnects from the terminal
|
||||
and runs in the background (@samp{--daemon} is an alias for
|
||||
@samp{--bg-daemon}).
|
||||
server without opening any frames. You can then use the
|
||||
@command{emacsclient} command to connect to Emacs for editing.
|
||||
(Optionally, you can specify an explicit @var{name} for the server; if
|
||||
you do, you will need to specify the same @var{name} when you invoke
|
||||
@command{emacsclient}, via its @option{--socket-name} option, see
|
||||
@ref{emacsclient Options}.) @xref{Emacs Server}, for information
|
||||
about using Emacs as a daemon. A ``background'' daemon disconnects
|
||||
from the terminal and runs in the background (@samp{--daemon} is an
|
||||
alias for @samp{--bg-daemon}).
|
||||
|
||||
@item --no-desktop
|
||||
@opindex --no-desktop
|
||||
|
|
|
@ -801,6 +801,7 @@ Its value is 70
|
|||
Automatically becomes buffer-local when set.
|
||||
This variable is safe as a file local variable if its value
|
||||
satisfies the predicate ‘integerp’.
|
||||
Probably introduced at or before Emacs version 18.
|
||||
|
||||
Documentation:
|
||||
Column beyond which automatic line-wrapping should happen.
|
||||
|
@ -1331,7 +1332,7 @@ On MS-DOS, the name of this file should be @file{_dir-locals.el}, due
|
|||
to limitations of the DOS filesystems. If the filesystem is limited
|
||||
to 8+3 file names, the name of the file will be truncated by the OS to
|
||||
@file{_dir-loc.el}.
|
||||
}in a directory. Whenever Emacs visits any file in that directory or
|
||||
} in a directory. Whenever Emacs visits any file in that directory or
|
||||
any of its subdirectories, it will apply the directory-local variables
|
||||
specified in @file{.dir-locals.el}, as though they had been defined as
|
||||
file-local variables for that file (@pxref{File Variables}). Emacs
|
||||
|
@ -1377,6 +1378,28 @@ be applied in the current directory, not in any subdirectories.
|
|||
Finally, it specifies a different @file{ChangeLog} file name for any
|
||||
file in the @file{src/imported} subdirectory.
|
||||
|
||||
If the @file{.dir-locals.el} file contains multiple different values
|
||||
for a variable using different mode names or directories, the values
|
||||
will be applied in an order such that the values for more specific
|
||||
modes take priority over more generic modes. Values specified under a
|
||||
directory have even more priority. For example:
|
||||
|
||||
@example
|
||||
((nil . ((fill-column . 40)))
|
||||
(c-mode . ((fill-column . 50)))
|
||||
(prog-mode . ((fill-column . 60)))
|
||||
("narrow-files" . ((nil . ((fill-column . 20))))))
|
||||
@end example
|
||||
|
||||
Files that use @code{c-mode} also match @code{prog-mode} because the
|
||||
former inherits from the latter. The value used for
|
||||
@code{fill-column} in C files will however be @code{50} because the
|
||||
mode name is more specific than @code{prog-mode}. Files using other
|
||||
modes inheriting from @code{prog-mode} will use @code{60}. Any file
|
||||
under the directory @file{narrow-files} will use the value @code{20}
|
||||
even if they use @code{c-mode} because directory entries have priority
|
||||
over mode entries.
|
||||
|
||||
You can specify the variables @code{mode}, @code{eval}, and
|
||||
@code{unibyte} in your @file{.dir-locals.el}, and they have the same
|
||||
meanings as they would have in file local variables. @code{coding}
|
||||
|
|
|
@ -1141,6 +1141,55 @@ right-to-left paragraphs.
|
|||
@node Displaying Boundaries
|
||||
@section Displaying Boundaries
|
||||
|
||||
@cindex mode, display-fill-column-indicator
|
||||
@findex display-fill-column-indicator-mode
|
||||
@findex global-display-fill-column-indicator-mode
|
||||
Emacs can add an indicator to display a fill column position. The
|
||||
fill column indicator is a useful functionality specially in
|
||||
prog-mode to indicate the position of an specific column.
|
||||
|
||||
You can set the buffer-local variables @code{display-fill-column-indicator}
|
||||
and @code{display-fill-column-indicator-character} to activate the
|
||||
indicator and controls how the indicator looks.
|
||||
|
||||
Alternatively you can type @w{@kbd{M-x display-fill-column-indicator-mode}}
|
||||
or @w{@kbd{M-x global-display-fill-column-indicator-mode}} which enables the
|
||||
indicator locally and globally respectively and also chooses the
|
||||
character to use if none is set already. It is possible to use the
|
||||
first one to activate the indicator in a hook or the second one to
|
||||
enable it globally.
|
||||
|
||||
There are 2 buffer local variables and 1 face to customize this mode:
|
||||
|
||||
@table @code
|
||||
@item display-fill-column-indicator-column
|
||||
@vindex display-fill-column-indicator-column
|
||||
Specifies the column number where the indicator should be set. It can
|
||||
take positive numerical values for the column or the special value
|
||||
@code{t} which means that the variable @code{fill-column} will be
|
||||
used.
|
||||
|
||||
Any other value disables the indicator. The default value is @code{t}.
|
||||
|
||||
@item display-fill-column-indicator-char
|
||||
@vindex display-fill-column-indicator-char
|
||||
Specifies the character used for the indicator. This character can be
|
||||
any valid char including unicode ones if the actual font supports
|
||||
them.
|
||||
|
||||
When the mode is enabled through the functions
|
||||
@code{display-fill-column-indicator-mode} or
|
||||
@code{global-display-fill-column-indicator-mode}, the initialization
|
||||
functions check if this variable is @code{non-nil}, otherwise the
|
||||
initialization tries to set it to U+2502 or @samp{|}.
|
||||
|
||||
@item fill-column-indicator
|
||||
@vindex fill-column-indicator
|
||||
Specifies the face used to display the indicator. It inherits its
|
||||
default values from shadow but without background color. To change
|
||||
the indicator color you need to set only the foreground color of this face.
|
||||
@end table
|
||||
|
||||
@vindex indicate-buffer-boundaries
|
||||
On graphical displays, Emacs can indicate the buffer boundaries in
|
||||
the fringes. If you enable this feature, the first line and the last
|
||||
|
|
|
@ -59,7 +59,7 @@ modify this GNU manual.''
|
|||
* Picture Mode:: Editing pictures made up of characters using
|
||||
the quarter-plane screen model.
|
||||
|
||||
* Autorevert:: Auto Reverting non-file buffers.
|
||||
* Non-File Buffers:: Auto Reverting non-file buffers.
|
||||
* Subdir Switches:: Subdirectory switches in Dired.
|
||||
* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization.
|
||||
* Emerge:: A convenient way of merging two versions of a program.
|
||||
|
|
|
@ -443,9 +443,7 @@ File Handling
|
|||
* Visiting:: Visiting a file prepares Emacs to edit the file.
|
||||
* Saving:: Saving makes your changes permanent.
|
||||
* Reverting:: Reverting cancels all the changes not saved.
|
||||
@ifnottex
|
||||
* Autorevert:: Auto Reverting non-file buffers.
|
||||
@end ifnottex
|
||||
* Auto Revert:: Keeping buffers automatically up-to-date.
|
||||
* Auto Save:: Auto Save periodically protects against loss of data.
|
||||
* File Aliases:: Handling multiple names for one file.
|
||||
* Directories:: Creating, deleting, and listing file directories.
|
||||
|
|
|
@ -25,9 +25,7 @@ on file directories.
|
|||
* Visiting:: Visiting a file prepares Emacs to edit the file.
|
||||
* Saving:: Saving makes your changes permanent.
|
||||
* Reverting:: Reverting cancels all the changes not saved.
|
||||
@ifnottex
|
||||
* Autorevert:: Auto Reverting non-file buffers.
|
||||
@end ifnottex
|
||||
* Auto Revert:: Keeping buffers automatically up-to-date.
|
||||
* Auto Save:: Auto Save periodically protects against loss of data.
|
||||
* File Aliases:: Handling multiple names for one file.
|
||||
* Directories:: Creating, deleting, and listing file directories.
|
||||
|
@ -955,6 +953,11 @@ revert it automatically if it has changed---provided the buffer itself
|
|||
is not modified. (If you have edited the text, it would be wrong to
|
||||
discard your changes.)
|
||||
|
||||
You can also tell Emacs to revert buffers automatically when their
|
||||
visited files change on disk; @pxref{Auto Revert}.
|
||||
|
||||
@node Auto Revert
|
||||
@section Auto Revert: Keeping buffers automatically up-to-date
|
||||
@cindex Global Auto Revert mode
|
||||
@cindex mode, Global Auto Revert
|
||||
@cindex Auto Revert mode
|
||||
|
@ -962,22 +965,39 @@ discard your changes.)
|
|||
@findex global-auto-revert-mode
|
||||
@findex auto-revert-mode
|
||||
@findex auto-revert-tail-mode
|
||||
@vindex auto-revert-interval
|
||||
@vindex auto-revert-remote-files
|
||||
|
||||
A buffer can get out of sync with respect to its visited file on
|
||||
disk if that file is changed by another program. To keep it up to
|
||||
date, you can enable Auto Revert mode by typing @kbd{M-x auto-revert-mode}.
|
||||
This automatically reverts the buffer when its visited file changes on
|
||||
disk. To do the same for all file buffers, type
|
||||
@kbd{M-x global-auto-revert-mode} to enable Global Auto Revert mode.
|
||||
|
||||
Auto Revert will not revert a buffer if it has unsaved changes, or if
|
||||
its file on disk is deleted or renamed.
|
||||
|
||||
One use of Auto Revert mode is to ``tail'' a file such as a system
|
||||
log, so that changes made to that file by other programs are
|
||||
continuously displayed. To do this, just move the point to the end of
|
||||
the buffer, and it will stay there as the file contents change.
|
||||
However, if you are sure that the file will only change by growing at
|
||||
the end, use Auto Revert Tail mode instead
|
||||
(@code{auto-revert-tail-mode}). It is more efficient for this.
|
||||
Auto Revert Tail mode also works for remote files.
|
||||
|
||||
@vindex auto-revert-verbose
|
||||
You can also tell Emacs to revert buffers periodically. To do this
|
||||
for a specific buffer, enable the minor mode Auto-Revert mode by
|
||||
typing @kbd{M-x auto-revert-mode}. This automatically reverts the
|
||||
current buffer when its visited file changes on disk. To do the same
|
||||
for all file buffers, type @kbd{M-x global-auto-revert-mode} to enable
|
||||
Global Auto-Revert mode. These minor modes do not check or revert
|
||||
remote files, because that is usually too slow. This behavior can be
|
||||
changed by setting the variable @code{auto-revert-remote-files} to
|
||||
non-@code{nil}.
|
||||
When a buffer is auto-reverted, a message is generated. This can be
|
||||
suppressed by setting @code{auto-revert-verbose} to @code{nil}.
|
||||
|
||||
@vindex auto-revert-remote-files
|
||||
The Auto Revert modes do not check or revert remote files, because
|
||||
that is usually too slow. This behavior can be changed by setting the
|
||||
variable @code{auto-revert-remote-files} to non-@code{nil}.
|
||||
|
||||
@cindex file notifications
|
||||
@vindex auto-revert-use-notify
|
||||
By default, Auto-Revert mode works using @dfn{file notifications},
|
||||
@vindex auto-revert-interval
|
||||
By default, Auto Revert mode works using @dfn{file notifications},
|
||||
whereby changes in the filesystem are reported to Emacs by the OS.
|
||||
You can disable use of file notifications by customizing the variable
|
||||
@code{auto-revert-use-notify} to a @code{nil} value, then Emacs will
|
||||
|
@ -988,19 +1008,22 @@ the polling interval through the variable @code{auto-revert-interval}.
|
|||
supported, @code{auto-revert-use-notify} will be @code{nil} by
|
||||
default.
|
||||
|
||||
One use of Auto-Revert mode is to ``tail'' a file such as a system
|
||||
log, so that changes made to that file by other programs are
|
||||
continuously displayed. To do this, just move the point to the end of
|
||||
the buffer, and it will stay there as the file contents change.
|
||||
However, if you are sure that the file will only change by growing at
|
||||
the end, use Auto-Revert Tail mode instead
|
||||
(@code{auto-revert-tail-mode}). It is more efficient for this.
|
||||
Auto-Revert Tail mode works also for remote files.
|
||||
@vindex auto-revert-avoid-polling
|
||||
@vindex auto-revert-notify-exclude-dir-regexp
|
||||
By default, Auto Revert mode will poll files for changes
|
||||
periodically even when file notifications are used. Polling is
|
||||
unnecessary in many cases, and turning it off may save power by
|
||||
relying on notifications only. To do so, set the variable
|
||||
@code{auto-revert-avoid-polling} to non-@code{nil}. However,
|
||||
notification is ineffective on certain file systems; mainly network
|
||||
file system on Unix-like machines, where files can be altered from
|
||||
other machines. For such file systems, polling may be necessary.
|
||||
To force polling when
|
||||
@code{auto-revert-avoid-polling} is non-@code{nil}, set
|
||||
@code{auto-revert-notify-exclude-dir-regexp} to match files that
|
||||
should be excluded from using notification.
|
||||
|
||||
When a buffer is auto-reverted, a message is generated. This can be
|
||||
suppressed by setting @code{auto-revert-verbose} to @code{nil}.
|
||||
|
||||
In Dired buffers (@pxref{Dired}), Auto-Revert mode refreshes the
|
||||
In Dired buffers (@pxref{Dired}), Auto Revert mode refreshes the
|
||||
buffer when a file is created or deleted in the buffer's directory.
|
||||
|
||||
@xref{VC Undo}, for commands to revert to earlier versions of files
|
||||
|
@ -1008,6 +1031,9 @@ under version control. @xref{VC Mode Line}, for Auto Revert
|
|||
peculiarities when visiting files under version control.
|
||||
|
||||
@ifnottex
|
||||
@menu
|
||||
* Non-File Buffers:: Auto Reverting Non-File Buffers.
|
||||
@end menu
|
||||
@include arevert-xtra.texi
|
||||
@end ifnottex
|
||||
|
||||
|
|
|
@ -1033,6 +1033,7 @@ systems support modifying change comments.
|
|||
Visit the revision indicated at the current line.
|
||||
|
||||
@item d
|
||||
@itemx =
|
||||
Display a diff between the revision at point and the next earlier
|
||||
revision, for the specific file.
|
||||
|
||||
|
@ -1047,6 +1048,16 @@ L}), toggle between showing and hiding the full log entry for the
|
|||
revision at point.
|
||||
@end table
|
||||
|
||||
To compare two arbitrary revisions, activate the region: set the
|
||||
beginning of the region to the line with the first revision and the
|
||||
end of the region to the line with the second revision to compare,
|
||||
then type @kbd{d} or @kbd{=}. When the beginning of the region is on
|
||||
the top line that has no revision, it uses the current working revision
|
||||
as the first revision to compare. When the end of the region is on
|
||||
the bottom non-revision line after the last revision line, then it
|
||||
uses the next earlier revision after the last displayed revision as
|
||||
the second revision to compare.
|
||||
|
||||
@vindex vc-log-show-limit
|
||||
Because fetching many log entries can be slow, the
|
||||
@file{*vc-change-log*} buffer displays no more than 2000 revisions by
|
||||
|
|
|
@ -775,6 +775,13 @@ documentation for more possibilities.
|
|||
displayed only when the command generates output, set
|
||||
@code{async-shell-command-display-buffer} to @code{nil}.
|
||||
|
||||
@vindex async-shell-command-width
|
||||
The option @code{async-shell-command-width} defines the number of display
|
||||
columns available for output of asynchronous shell commands.
|
||||
A positive integer tells the shell to use that number of columns for
|
||||
command output. The default value is @code{nil} that means to use
|
||||
the same number of columns as provided by the shell.
|
||||
|
||||
@kindex M-|
|
||||
@findex shell-command-on-region
|
||||
@kbd{M-|} (@code{shell-command-on-region}) is like @kbd{M-!}, but
|
||||
|
@ -1976,6 +1983,9 @@ omitted, @command{emacsclient} connects to the first server it finds.
|
|||
If you set @code{server-name} of the Emacs server to an absolute file
|
||||
name, give the same absolute file name as @var{server-name} to this
|
||||
option to instruct @command{emacsclient} to connect to that server.
|
||||
You need to use this option if you started Emacs as daemon
|
||||
(@pxref{Initial Options}) and specified the name for the server
|
||||
started by the daemon.
|
||||
|
||||
Alternatively, you can set the @env{EMACS_SOCKET_NAME} environment
|
||||
variable to point to the server socket. (The command-line option
|
||||
|
@ -2475,10 +2485,13 @@ automatically back to binary.
|
|||
into hex. This is useful if you visit a file normally and then discover
|
||||
it is a binary file.
|
||||
|
||||
Ordinary text characters overwrite in Hexl mode. This is to reduce
|
||||
Inserting text always overwrites in Hexl mode. This is to reduce
|
||||
the risk of accidentally spoiling the alignment of data in the file.
|
||||
There are special commands for insertion. Here is a list of the
|
||||
commands of Hexl mode:
|
||||
Ordinary text characters insert themselves (i.e., overwrite with
|
||||
themselves). There are commands for insertion of special characters
|
||||
by their code. Most cursor motion keys, as well as @kbd{C-x C-s}, are
|
||||
bound in Hexl mode to commands that produce the same effect. Here is
|
||||
a list of other important commands special to Hexl mode:
|
||||
|
||||
@c I don't think individual index entries for these commands are useful--RMS.
|
||||
@table @kbd
|
||||
|
@ -2491,6 +2504,12 @@ Insert a byte with a code typed in octal.
|
|||
@item C-M-x
|
||||
Insert a byte with a code typed in hex.
|
||||
|
||||
@item C-M-a
|
||||
Move to the beginning of a 512-byte page.
|
||||
|
||||
@item C-M-e
|
||||
Move to the end of a 512-byte page.
|
||||
|
||||
@item C-x [
|
||||
Move to the beginning of a 1k-byte page.
|
||||
|
||||
|
|
|
@ -1298,8 +1298,11 @@ count as blocks.
|
|||
@findex hs-show-block
|
||||
@findex hs-show-region
|
||||
@findex hs-hide-level
|
||||
@findex hs-toggle-hiding
|
||||
@findex hs-mouse-toggle-hiding
|
||||
@kindex C-c @@ C-h
|
||||
@kindex C-c @@ C-s
|
||||
@kindex C-c @@ C-c
|
||||
@kindex C-c @@ C-M-h
|
||||
@kindex C-c @@ C-M-s
|
||||
@kindex C-c @@ C-r
|
||||
|
@ -1312,7 +1315,7 @@ Hide the current block (@code{hs-hide-block}).
|
|||
@item C-c @@ C-s
|
||||
Show the current block (@code{hs-show-block}).
|
||||
@item C-c @@ C-c
|
||||
@itemx C-x @@ C-e
|
||||
@itemx C-c @@ C-e
|
||||
Either hide or show the current block (@code{hs-toggle-hiding}).
|
||||
@item S-mouse-2
|
||||
Toggle hiding for the block you click on (@code{hs-mouse-toggle-hiding}).
|
||||
|
|
|
@ -644,6 +644,10 @@ or before @samp{)}, @samp{:} or @samp{?}); and
|
|||
@code{fill-polish-nobreak-p} (don't break after a one letter word,
|
||||
even if preceded by a non-whitespace character).
|
||||
|
||||
Emacs can display an indicator in the @code{fill-column} position
|
||||
using the Display fill column indicator mode
|
||||
(@pxref{Displaying Boundaries, display-fill-column-indicator}).
|
||||
|
||||
@node Fill Prefix
|
||||
@subsection The Fill Prefix
|
||||
|
||||
|
|
|
@ -21858,14 +21858,17 @@ MENU ENTRY: NODE NAME.
|
|||
@end ifnottex
|
||||
|
||||
@quotation
|
||||
Robert J. Chassell has worked with GNU Emacs since 1985. He writes
|
||||
and edits, teaches Emacs and Emacs Lisp, and speaks throughout the
|
||||
Robert J. Chassell (1946--2017) started working with GNU Emacs in 1985. He wrote
|
||||
and edited, taught Emacs and Emacs Lisp, and spoke throughout the
|
||||
world on software freedom. Chassell was a founding Director and
|
||||
Treasurer of the Free Software Foundation, Inc. He is co-author of
|
||||
the @cite{Texinfo} manual, and has edited more than a dozen other
|
||||
books. He graduated from Cambridge University, in England. He has an
|
||||
abiding interest in social and economic history and flies his own
|
||||
Treasurer of the Free Software Foundation, Inc. He was co-author of
|
||||
the @cite{Texinfo} manual, and edited more than a dozen other
|
||||
books. He graduated from Cambridge University, in England. He had an
|
||||
abiding interest in social and economic history and flew his own
|
||||
airplane.
|
||||
|
||||
@uref{https://www.fsf.org/blogs/community/goodbye-to-bob-chassell,
|
||||
"Goodbye to Bob Chassell"}
|
||||
@end quotation
|
||||
|
||||
@c @page
|
||||
|
|
|
@ -1047,12 +1047,9 @@ and meaning of input events in detail.
|
|||
This function returns non-@code{nil} if @var{object} is an input event
|
||||
or event type.
|
||||
|
||||
Note that any symbol might be used as an event or an event type.
|
||||
@code{eventp} cannot distinguish whether a symbol is intended by Lisp
|
||||
code to be used as an event. Instead, it distinguishes whether the
|
||||
symbol has actually been used in an event that has been read as input in
|
||||
the current Emacs session. If a symbol has not yet been so used,
|
||||
@code{eventp} returns @code{nil}.
|
||||
Note that any non-@code{nil} symbol might be used as an event or an
|
||||
event type; @code{eventp} cannot distinguish whether a symbol is
|
||||
intended by Lisp code to be used as an event.
|
||||
@end defun
|
||||
|
||||
@menu
|
||||
|
|
|
@ -251,6 +251,7 @@ I thought did not need to be mentioned here:
|
|||
|
||||
Lisp:
|
||||
after-load-functions
|
||||
after-set-visited-file-name-hook
|
||||
auto-coding-functions
|
||||
choose-completion-string-functions
|
||||
completing-read-function
|
||||
|
|
|
@ -1191,6 +1191,17 @@ grow with new Emacs releases. Given the version of Emacs, the module
|
|||
can use only the parts of the module @acronym{API} that existed in
|
||||
that version, since those parts are identical in later versions.
|
||||
|
||||
@file{emacs-module.h} defines a preprocessor macro
|
||||
@code{EMACS_MAJOR_VERSION}. It expands to an integer literal which is
|
||||
the latest major version of Emacs supported by the header.
|
||||
@xref{Version Info}. Note that the value of
|
||||
@code{EMACS_MAJOR_VERSION} is a compile-time constant and does not
|
||||
represent the version of Emacs that is currently running and has
|
||||
loaded your module. If you want your module to be compatible with
|
||||
various versions of @file{emacs-module.h} as well as various versions
|
||||
of Emacs, you can use conditional compilation based on
|
||||
@code{EMACS_MAJOR_VERSION}.
|
||||
|
||||
We recommend that modules always perform the compatibility
|
||||
verification, unless they do their job entirely in the initialization
|
||||
function, and don't access any Lisp objects or use any Emacs functions
|
||||
|
|
|
@ -466,9 +466,11 @@ first call to the function automatically loads the proper library, in
|
|||
order to install the real definition and other associated code, then
|
||||
runs the real definition as if it had been loaded all along.
|
||||
Autoloading can also be triggered by looking up the documentation of
|
||||
the function or macro (@pxref{Documentation Basics}).
|
||||
the function or macro (@pxref{Documentation Basics}), and completion
|
||||
of variable and function names (@pxref{Autoload by Prefix} below).
|
||||
|
||||
@menu
|
||||
* Autoload by Prefix:: Autoload by Prefix.
|
||||
* When to Autoload:: When to Use Autoload.
|
||||
@end menu
|
||||
|
||||
|
@ -703,6 +705,25 @@ symbol's new function value. If the value of the optional argument
|
|||
function, only a macro.
|
||||
@end defun
|
||||
|
||||
@node Autoload by Prefix
|
||||
@subsection Autoload by Prefix
|
||||
@cindex autoload by prefix
|
||||
|
||||
@vindex definition-prefixes
|
||||
@findex register-definition-prefixes
|
||||
@vindex autoload-compute-prefixes
|
||||
During completion for the commands @code{describe-variable} and
|
||||
@code{describe-function}, Emacs will try to load files which may
|
||||
contain definitions matching the prefix being completed. The variable
|
||||
@code{definition-prefixes} holds a hashtable which maps a prefix to
|
||||
the corresponding list of files to load for it. Entries to this
|
||||
mapping are added by calls to @code{register-definition-prefixes}
|
||||
which are generated by @code{update-file-autoloads}
|
||||
(@pxref{Autoload}). Files which don't contain any definitions worth
|
||||
loading (test files, for examples), should set
|
||||
@code{autoload-compute-prefixes} to @code{nil} as a file-local
|
||||
variable.
|
||||
|
||||
@node When to Autoload
|
||||
@subsection When to Use Autoload
|
||||
@cindex autoload, when to use
|
||||
|
|
|
@ -3238,7 +3238,12 @@ is disabled, @code{font-lock-face} has no effect on the display.
|
|||
It is ok for a mode to use @code{font-lock-face} for some text and
|
||||
also use the normal Font Lock machinery. But if the mode does not use
|
||||
the normal Font Lock machinery, it should not set the variable
|
||||
@code{font-lock-defaults}.
|
||||
@code{font-lock-defaults}. In this case the @code{face} property will
|
||||
not be overriden, so using the @code{face} property could work too.
|
||||
However, using @code{font-lock-face} is generally preferable as it
|
||||
allows the user to control the fontification by toggling
|
||||
@code{font-lock-mode}, and lets the code work regardless of whether
|
||||
the mode uses Font Lock machinery or not.
|
||||
|
||||
@node Faces for Font Lock
|
||||
@subsection Faces for Font Lock
|
||||
|
|
|
@ -1049,7 +1049,7 @@ is like @code{undecided}, but it prefers to choose @code{utf-8} when
|
|||
possible.
|
||||
|
||||
In general, a coding system doesn't guarantee roundtrip identity:
|
||||
decoding a byte sequence using coding system, then encoding the
|
||||
decoding a byte sequence using a coding system, then encoding the
|
||||
resulting text in the same coding system, can produce a different byte
|
||||
sequence. But some coding systems do guarantee that the byte sequence
|
||||
will be the same as what you originally decoded. Here are a few
|
||||
|
|
|
@ -2197,7 +2197,7 @@ is the character Emacs currently uses for quitting, usually @kbd{C-g}.
|
|||
@subsection Recording Input
|
||||
@cindex recording input
|
||||
|
||||
@defun recent-keys
|
||||
@defun recent-keys &optional include-cmds
|
||||
This function returns a vector containing the last 300 input events from
|
||||
the keyboard or mouse. All input events are included, whether or not
|
||||
they were used as parts of key sequences. Thus, you always get the last
|
||||
|
@ -2205,6 +2205,11 @@ they were used as parts of key sequences. Thus, you always get the last
|
|||
(These are excluded because they are less interesting for debugging; it
|
||||
should be enough to see the events that invoked the macros.)
|
||||
|
||||
If @var{include-cmds} is non-@code{nil}, complete key sequences in the
|
||||
result vector are interleaved with pseudo-events of the form
|
||||
@code{(nil . @var{COMMAND})}, where @var{COMMAND} is the binding of
|
||||
the key sequence (@pxref{Command Overview}).
|
||||
|
||||
A call to @code{clear-this-command-keys} (@pxref{Command Loop Info})
|
||||
causes this function to return an empty vector immediately afterward.
|
||||
@end defun
|
||||
|
|
|
@ -1688,7 +1688,7 @@ how to do these things:
|
|||
(save-excursion
|
||||
;; @r{Insert the text, advancing the process marker.}
|
||||
(goto-char (process-mark proc))
|
||||
(insert string)
|
||||
(insert-before-markers string)
|
||||
(set-marker (process-mark proc) (point)))
|
||||
(if moving (goto-char (process-mark proc)))))))
|
||||
@end group
|
||||
|
|
|
@ -1070,6 +1070,13 @@ list of characters @var{chars}.
|
|||
|
||||
@c Internal functions: regexp-opt-group
|
||||
|
||||
@defvar regexp-unmatchable
|
||||
This variable contains a regexp that is guaranteed not to match any
|
||||
string at all. It is particularly useful as default value for
|
||||
variables that may be set to a pattern that actually matches
|
||||
something.
|
||||
@end defvar
|
||||
|
||||
@node Regexp Search
|
||||
@section Regular Expression Searching
|
||||
@cindex regular expression searching
|
||||
|
|
|
@ -601,7 +601,7 @@ returned value is a list.
|
|||
@defun seq-mapn function &rest sequences
|
||||
This function returns the result of applying @var{function} to each
|
||||
element of @var{sequences}. The arity (@pxref{What Is a Function,
|
||||
sub-arity}) of @var{function} must match the number of sequences.
|
||||
subr-arity}) of @var{function} must match the number of sequences.
|
||||
Mapping stops at the end of the shortest sequence, and the returned
|
||||
value is a list.
|
||||
|
||||
|
|
|
@ -2252,9 +2252,11 @@ If it is impossible to move to column @var{column} because that is in
|
|||
the middle of a multicolumn character such as a tab, point moves to the
|
||||
end of that character. However, if @var{force} is non-@code{nil}, and
|
||||
@var{column} is in the middle of a tab, then @code{move-to-column}
|
||||
converts the tab into spaces so that it can move precisely to column
|
||||
@var{column}. Other multicolumn characters can cause anomalies despite
|
||||
@var{force}, since there is no way to split them.
|
||||
either converts the tab into spaces (when @code{indent-tabs-mode} is
|
||||
@code{nil}), or inserts enough spaces before it (otherwise), so that
|
||||
point can move precisely to column @var{column}. Other multicolumn
|
||||
characters can cause anomalies despite @var{force}, since there is no
|
||||
way to split them.
|
||||
|
||||
The argument @var{force} also has an effect if the line isn't long
|
||||
enough to reach column @var{column}; if it is @code{t}, that means to
|
||||
|
|
|
@ -2009,7 +2009,7 @@ all files in those directories. The list in @var{variables} can be of
|
|||
one of the two forms: @code{(@var{major-mode} . @var{alist})} or
|
||||
@code{(@var{directory} . @var{list})}. With the first form, if the
|
||||
file's buffer turns on a mode that is derived from @var{major-mode},
|
||||
then the all the variables in the associated @var{alist} are applied;
|
||||
then all the variables in the associated @var{alist} are applied;
|
||||
@var{alist} should be of the form @code{(@var{name} . @var{value})}.
|
||||
A special value @code{nil} for @var{major-mode} means the settings are
|
||||
applicable to any mode. In @var{alist}, you can use a special
|
||||
|
|
|
@ -2601,6 +2601,63 @@ window and displaying the buffer in that window. It can fail if all
|
|||
windows are dedicated to other buffers (@pxref{Dedicated Windows}).
|
||||
@end defun
|
||||
|
||||
@defun display-buffer-in-direction buffer alist
|
||||
This function tries to display @var{buffer} at a location specified by
|
||||
@var{alist}. For this purpose, @var{alist} should contain a
|
||||
@code{direction} entry whose value is one of @code{left}, @code{above}
|
||||
(or @code{up}), @code{right} and @code{below} (or @code{down}). Other
|
||||
values are usually interpreted as @code{below}.
|
||||
|
||||
If @var{alist} also contains a @code{window} entry, its value
|
||||
specifies a reference window. That value can be a special symbol like
|
||||
@code{main} which stands for the selected frame's main window
|
||||
(@pxref{Side Window Options and Functions}) or @code{root} standing
|
||||
for the selected frame's root window (@pxref{Windows and Frames}). It
|
||||
can also specify an arbitrary valid window. Any other value (or
|
||||
omitting the @code{window} entry entirely) means to use the selected
|
||||
window as reference window.
|
||||
|
||||
This function first tries to reuse a window in the specified direction
|
||||
that already shows @var{buffer}. If no such window exists, it tries
|
||||
to split the reference window in order to produce a new window in the
|
||||
specified direction. If this fails as well, it will try to display
|
||||
@var{buffer} in an existing window in the specified direction. In
|
||||
either case, the window chosen will appear on the side of the
|
||||
reference window specified by the @code{direction} entry, sharing at
|
||||
least one edge with the reference window.
|
||||
|
||||
If the reference window is live, the edge the chosen window will share
|
||||
with it is always the opposite of the one specified by the
|
||||
@code{direction} entry. For example, if the value of the
|
||||
@code{direction} entry is @code{left}, the chosen window's right edge
|
||||
coordinate (@pxref{Coordinates and Windows}) will equal the reference
|
||||
window's left edge coordinate.
|
||||
|
||||
If the reference window is internal, a reused window must share with
|
||||
it the edge specified by the @code{direction} entry. Hence if, for
|
||||
example, the reference window is the frame's root window and the value
|
||||
of the @code{direction} entry is @code{left}, a reused window must be
|
||||
on the left of the frame. This means that the left edge coordinate of
|
||||
the chosen window and that of the reference window are the same.
|
||||
|
||||
A new window, however, will be created by splitting the reference
|
||||
window such that the chosen window will share the opposite edge with
|
||||
the reference window. In our example, a new root window would be
|
||||
created with a new live window and the reference window as its
|
||||
children. The chosen window's right edge coordinate would then equal
|
||||
the left edge coordinate of the reference window. Its left edge
|
||||
coordinate would equal the left edge coordinate of the frame's new
|
||||
root window.
|
||||
|
||||
Four special values for @code{direction} entries allow to implicitly
|
||||
specify the selected frame's main window as the reference window:
|
||||
@code{leftmost}, @code{top}, @code{rightmost} and @code{bottom}. This
|
||||
means that instead of, for example, @w{@code{(direction . left)
|
||||
(window . main)}} one can just specify @w{@code{(direction
|
||||
. leftmost)}}. An existing @code{window} @var{alist} entry is ignored
|
||||
in such cases.
|
||||
@end defun
|
||||
|
||||
@defun display-buffer-below-selected buffer alist
|
||||
This function tries to display @var{buffer} in a window below the
|
||||
selected window. If there is a window below the selected one and that
|
||||
|
@ -2934,12 +2991,20 @@ If non-@code{nil}, the value specifies the slot of the side window
|
|||
supposed to display the buffer. This entry is used only by
|
||||
@code{display-buffer-in-side-window}.
|
||||
|
||||
@vindex direction@r{, a buffer display action alist entry}
|
||||
@item direction
|
||||
The value specifies a direction which, together with a @code{window}
|
||||
entry, allows @code{display-buffer-in-direction} to determine the
|
||||
location of the window to display the buffer.
|
||||
|
||||
@vindex window@r{, a buffer display action alist entry}
|
||||
@item window
|
||||
The value specifies a window that is in some way related to the window
|
||||
chosen by @code{display-buffer}. This entry is currently used by
|
||||
@code{display-buffer-in-atom-window} to indicate the window on whose
|
||||
side the new window shall be created.
|
||||
side the new window shall be created. It is also used by
|
||||
@code{display-buffer-in-direction} to specify the reference window on
|
||||
whose side the resulting window shall appear.
|
||||
|
||||
@vindex allow-no-window@r{, a buffer display action alist entry}
|
||||
@item allow-no-window
|
||||
|
|
|
@ -87,10 +87,6 @@ Syntax check is done ``on-the-fly''. It is started whenever
|
|||
the buffer is saved, unless @code{flymake-start-on-save-buffer} is
|
||||
nil;
|
||||
|
||||
@item
|
||||
a newline character is added to the buffer, unless
|
||||
@code{flymake-start-syntax-check-on-newline} is nil;
|
||||
|
||||
@item
|
||||
some changes were made to the buffer more than @code{0.5} seconds ago
|
||||
(the delay is configurable in @code{flymake-no-changes-timeout}).
|
||||
|
@ -222,10 +218,6 @@ If any changes are made to the buffer, syntax check is automatically
|
|||
started after this many seconds, unless the user makes another change,
|
||||
which resets the timer.
|
||||
|
||||
@item flymake-start-syntax-check-on-newline
|
||||
A boolean flag indicating whether to start syntax check immediately
|
||||
after a newline character is inserted into the buffer.
|
||||
|
||||
@item flymake-start-on-flymake-mode
|
||||
A boolean flag indicating whether to start syntax check immediately
|
||||
after enabling @code{flymake-mode}.
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
% Load plain if necessary, i.e., if running under initex.
|
||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||
%
|
||||
\def\texinfoversion{2019-03-03.15}
|
||||
|
||||
\def\texinfoversion{2019-04-12.13}
|
||||
%
|
||||
% Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc.
|
||||
%
|
||||
|
@ -387,14 +386,8 @@
|
|||
% take effect in \write's, yet the group defined by the \vbox ends
|
||||
% before the \shipout runs.
|
||||
%
|
||||
\indexdummies % don't expand commands in the output.
|
||||
\normalturnoffactive % \ in index entries must not stay \, e.g., if
|
||||
% the page break happens to be in the middle of an example.
|
||||
% We don't want .vr (or whatever) entries like this:
|
||||
% \entry{{\indexbackslash }acronym}{32}{\code {\acronym}}
|
||||
% "\acronym" won't work when it's read back in;
|
||||
% it needs to be
|
||||
% {\code {{\backslashcurfont }acronym}
|
||||
\atdummies % don't expand commands in the output.
|
||||
\turnoffactive
|
||||
\shipout\vbox{%
|
||||
% Do this early so pdf references go to the beginning of the page.
|
||||
\ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
|
||||
|
@ -455,11 +448,10 @@
|
|||
}%
|
||||
}
|
||||
|
||||
% First remove any @comment, then any @c comment. Also remove a @texinfoc
|
||||
% comment (see \scanmacro for details). Pass the result on to \argcheckspaces.
|
||||
% First remove any @comment, then any @c comment. Pass the result on to
|
||||
% \argcheckspaces.
|
||||
\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
|
||||
\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm}
|
||||
\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
|
||||
\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
|
||||
|
||||
% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
|
||||
%
|
||||
|
@ -1131,6 +1123,16 @@
|
|||
\fi
|
||||
\fi
|
||||
|
||||
\newif\ifpdforxetex
|
||||
\pdforxetexfalse
|
||||
\ifpdf
|
||||
\pdforxetextrue
|
||||
\fi
|
||||
\ifx\XeTeXrevision\thisisundefined\else
|
||||
\pdforxetextrue
|
||||
\fi
|
||||
|
||||
|
||||
% PDF uses PostScript string constants for the names of xref targets,
|
||||
% for display in the outlines, and in other places. Thus, we have to
|
||||
% double any backslashes. Otherwise, a name like "\node" will be
|
||||
|
@ -2173,7 +2175,7 @@
|
|||
% A few fonts for @defun names and args.
|
||||
\setfont\defbf\bfshape{10}{\magstep1}{OT1}
|
||||
\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
|
||||
\setfont\defsl\slshape{10}{\magstep1}{OT1TT}
|
||||
\setfont\defsl\slshape{10}{\magstep1}{OT1}
|
||||
\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
|
||||
\def\df{\let\ttfont=\deftt \let\bffont = \defbf
|
||||
\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
|
||||
|
@ -2321,7 +2323,7 @@
|
|||
% A few fonts for @defun names and args.
|
||||
\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
|
||||
\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
|
||||
\setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
|
||||
\setfont\defsl\slshape{10}{\magstephalf}{OT1}
|
||||
\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
|
||||
\def\df{\let\ttfont=\deftt \let\bffont = \defbf
|
||||
\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
|
||||
|
@ -2844,7 +2846,7 @@
|
|||
|
||||
% @t, explicit typewriter.
|
||||
\def\t#1{%
|
||||
{\tt \rawbackslash \plainfrenchspacing #1}%
|
||||
{\tt \plainfrenchspacing #1}%
|
||||
\null
|
||||
}
|
||||
|
||||
|
@ -2871,7 +2873,6 @@
|
|||
% Turn off hyphenation.
|
||||
\nohyphenation
|
||||
%
|
||||
\rawbackslash
|
||||
\plainfrenchspacing
|
||||
#1%
|
||||
}%
|
||||
|
@ -3097,9 +3098,9 @@
|
|||
% Allow a ragged right output to aid breaking long URL's. Putting stretch in
|
||||
% between characters of the URL doesn't look good.
|
||||
\def\urefallowbreak{%
|
||||
\hskip 0pt plus 1fil\relax
|
||||
\hskip 0pt plus 4 em\relax
|
||||
\allowbreak
|
||||
\hskip 0pt plus -1fil\relax
|
||||
\hskip 0pt plus -4 em\relax
|
||||
}
|
||||
|
||||
\urefbreakstyle after
|
||||
|
@ -3112,7 +3113,7 @@
|
|||
% So now @email is just like @uref, unless we are pdf.
|
||||
%
|
||||
%\def\email#1{\angleleft{\tt #1}\angleright}
|
||||
\ifpdf
|
||||
\ifpdforxetex
|
||||
\def\email#1{\doemail#1,,\finish}
|
||||
\def\doemail#1,#2,#3\finish{\begingroup
|
||||
\unsepspaces
|
||||
|
@ -3122,18 +3123,7 @@
|
|||
\endlink
|
||||
\endgroup}
|
||||
\else
|
||||
\ifx\XeTeXrevision\thisisundefined
|
||||
\let\email=\uref
|
||||
\else
|
||||
\def\email#1{\doemail#1,,\finish}
|
||||
\def\doemail#1,#2,#3\finish{\begingroup
|
||||
\unsepspaces
|
||||
\pdfurl{mailto:#1}%
|
||||
\setbox0 = \hbox{\ignorespaces #2}%
|
||||
\ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
|
||||
\endlink
|
||||
\endgroup}
|
||||
\fi
|
||||
\let\email=\uref
|
||||
\fi
|
||||
|
||||
% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
|
||||
|
@ -4667,19 +4657,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
% We have this subroutine so that we can handle at least some @value's
|
||||
% properly in indexes (we call \makevalueexpandable in \indexdummies).
|
||||
% The command has to be fully expandable (if the variable is set), since
|
||||
% the result winds up in the index file. This means that if the
|
||||
% variable's value contains other Texinfo commands, it's almost certain
|
||||
% it will fail (although perhaps we could fix that with sufficient work
|
||||
% to do a one-level expansion on the result, instead of complete).
|
||||
%
|
||||
% Unfortunately, this has the consequence that when _ is in the *value*
|
||||
% of an @set, it does not print properly in the roman fonts (get the cmr
|
||||
% dot accent at position 126 instead). No fix comes to mind, and it's
|
||||
% been this way since 2003 or earlier, so just ignore it.
|
||||
%
|
||||
\def\expandablevalue#1{%
|
||||
\expandafter\ifx\csname SET#1\endcsname\relax
|
||||
{[No value for ``#1'']}%
|
||||
|
@ -4708,7 +4685,7 @@
|
|||
% if possible, otherwise sort late.
|
||||
\def\indexnofontsvalue#1{%
|
||||
\expandafter\ifx\csname SET#1\endcsname\relax
|
||||
ZZZZZZZ
|
||||
ZZZZZZZ%
|
||||
\else
|
||||
\csname SET#1\endcsname
|
||||
\fi
|
||||
|
@ -4858,23 +4835,8 @@
|
|||
\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
|
||||
|
||||
|
||||
% Used when writing an index entry out to an index file to prevent
|
||||
% expansion of Texinfo commands that can appear in an index entry.
|
||||
%
|
||||
\def\indexdummies{%
|
||||
\escapechar = `\\ % use backslash in output files.
|
||||
\definedummyletter\@%
|
||||
\definedummyletter\ %
|
||||
%
|
||||
% For texindex which always views { and } as separators.
|
||||
\def\{{\lbracechar{}}%
|
||||
\def\}{\rbracechar{}}%
|
||||
%
|
||||
% Do the redefinitions.
|
||||
\definedummies
|
||||
}
|
||||
|
||||
% Used for the aux and toc files, where @ is the escape character.
|
||||
% Used for the aux, toc and index files to prevent expansion of Texinfo
|
||||
% commands.
|
||||
%
|
||||
\def\atdummies{%
|
||||
\definedummyletter\@%
|
||||
|
@ -4904,8 +4866,7 @@
|
|||
\def\definedummyletter#1{\def#1{\string#1}}%
|
||||
\let\definedummyaccent\definedummyletter
|
||||
|
||||
% Called from \indexdummies and \atdummies, to effectively prevent
|
||||
% the expansion of commands.
|
||||
% Called from \atdummies to prevent the expansion of commands.
|
||||
%
|
||||
\def\definedummies{%
|
||||
%
|
||||
|
@ -4954,6 +4915,7 @@
|
|||
% Assorted special characters.
|
||||
\definedummyword\atchar
|
||||
\definedummyword\arrow
|
||||
\definedummyword\backslashchar
|
||||
\definedummyword\bullet
|
||||
\definedummyword\comma
|
||||
\definedummyword\copyright
|
||||
|
@ -5070,11 +5032,10 @@
|
|||
\commondummyword\xref
|
||||
}
|
||||
|
||||
% This does nothing, but for a time it was recommended to use
|
||||
% \usebracesinindexestrue to be able to use braces in index entries.
|
||||
|
||||
\let\indexlbrace\relax
|
||||
\let\indexrbrace\relax
|
||||
\let\indexatchar\relax
|
||||
\let\indexbackslash\relax
|
||||
|
||||
{\catcode`\@=0
|
||||
\catcode`\\=13
|
||||
|
@ -5108,10 +5069,8 @@
|
|||
}
|
||||
|
||||
\gdef\indexnonalnumreappear{%
|
||||
\useindexbackslash
|
||||
\let-\normaldash
|
||||
\let<\normalless
|
||||
\def\@{@}%
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5222,8 +5181,6 @@
|
|||
|
||||
|
||||
|
||||
\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
|
||||
|
||||
% #1 is the index name, #2 is the entry text.
|
||||
\def\doind#1#2{%
|
||||
\iflinks
|
||||
|
@ -5255,13 +5212,6 @@
|
|||
\fi}
|
||||
\def\indexisfl{fl}
|
||||
|
||||
% Output \ as {\indexbackslash}, because \ is an escape character in
|
||||
% the index files.
|
||||
\let\indexbackslash=\relax
|
||||
{\catcode`\@=0 \catcode`\\=\active
|
||||
@gdef@useindexbackslash{@def\{{@indexbackslash}}}
|
||||
}
|
||||
|
||||
% Definition for writing index entry sort key.
|
||||
{
|
||||
\catcode`\-=13
|
||||
|
@ -5273,14 +5223,31 @@
|
|||
\xdef\indexsortkey{#1}\endgroup}
|
||||
}
|
||||
|
||||
\def\indexwriteseealso#1{
|
||||
\gdef\pagenumbertext{@seealso{#1}}%
|
||||
}
|
||||
\def\indexwriteseeentry#1{
|
||||
\gdef\pagenumbertext{@seeentry{#1}}%
|
||||
}
|
||||
|
||||
% The default definitions
|
||||
\def\sortas#1{}%
|
||||
\def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only
|
||||
\def\putwordSeeAlso{See also}
|
||||
\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only
|
||||
|
||||
|
||||
% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}":
|
||||
% * Set \bracedtext to "{aaa}{bbb}"
|
||||
% * Set \fullindexsortkey to "aaa @subentry ZZZ"
|
||||
% * If @seealso occurs, set \pagenumbertext
|
||||
%
|
||||
\def\splitindexentry#1{%
|
||||
\gdef\fullindexsortkey{}%
|
||||
\xdef\bracedtext{}%
|
||||
\def\sep{}%
|
||||
\def\seealso##1{}%
|
||||
\def\seeentry##1{}%
|
||||
\expandafter\doindexsegment#1\subentry\finish\subentry
|
||||
}
|
||||
|
||||
|
@ -5292,7 +5259,6 @@
|
|||
%
|
||||
% Fully expand the segment, throwing away any @sortas directives, and
|
||||
% trim spaces.
|
||||
\def\sortas##1{}%
|
||||
\edef\trimmed{\segment}%
|
||||
\edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
|
||||
%
|
||||
|
@ -5302,16 +5268,23 @@
|
|||
% font commands turned off.
|
||||
\bgroup
|
||||
\let\sortas\indexwritesortas
|
||||
\let\seealso\indexwriteseealso
|
||||
\let\seeentry\indexwriteseeentry
|
||||
\indexnofonts
|
||||
% The braces around the commands are recognized by texindex.
|
||||
\def\lbracechar{{\indexlbrace}}%
|
||||
\def\rbracechar{{\indexrbrace}}%
|
||||
\def\lbracechar{{\string\indexlbrace}}%
|
||||
\def\rbracechar{{\string\indexrbrace}}%
|
||||
\let\{=\lbracechar
|
||||
\let\}=\rbracechar
|
||||
\def\@{{\string\indexatchar}}%
|
||||
\def\atchar##1{\@}%
|
||||
\def\backslashchar{{\string\indexbackslash}}%
|
||||
\uccode`\~=`\\ \uppercase{\let~\backslashchar}%
|
||||
%
|
||||
\let\indexsortkey\empty
|
||||
\global\let\pagenumbertext\empty
|
||||
% Execute the segment and throw away the typeset output. This executes
|
||||
% any @sortas commands in this segment.
|
||||
% any @sortas or @seealso commands in this segment.
|
||||
\setbox\dummybox = \hbox{\segment}%
|
||||
\ifx\indexsortkey\empty{%
|
||||
\indexnonalnumdisappear
|
||||
|
@ -5332,21 +5305,31 @@
|
|||
\fi
|
||||
}
|
||||
\def\isfinish{\finish}%
|
||||
\newbox\dummybox % used above
|
||||
|
||||
\let\subentry\relax
|
||||
|
||||
% Write the entry in \toks0 to the index file.
|
||||
% Use \ instead of @ in index files. To support old texi2dvi and texindex.
|
||||
% This works without changing the escape character used in the toc or aux
|
||||
% files because the index entries are fully expanded here, and \string uses
|
||||
% the current value of \escapechar.
|
||||
\def\escapeisbackslash{\escapechar=`\\}
|
||||
|
||||
% Write the entry in \indextext to the index file.
|
||||
%
|
||||
\def\doindwrite{%
|
||||
% Put the index entry in the margin if desired.
|
||||
\ifx\SETmarginindex\relax\else
|
||||
\insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
|
||||
\maybemarginindex
|
||||
%
|
||||
\atdummies
|
||||
%
|
||||
\expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else
|
||||
\escapeisbackslash
|
||||
\fi
|
||||
%
|
||||
% Remember, we are within a group.
|
||||
\indexdummies % Must do this here, since \bf, etc expand at this stage
|
||||
\useindexbackslash % \indexbackslash isn't defined now so it will be output
|
||||
% as is; and it will print as backslash.
|
||||
% For texindex which always views { and } as separators.
|
||||
\def\{{\lbracechar{}}%
|
||||
\def\}{\rbracechar{}}%
|
||||
\uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
|
||||
%
|
||||
% Split the entry into primary entry and any subentries, and get the index
|
||||
% sort key.
|
||||
|
@ -5360,11 +5343,21 @@
|
|||
%
|
||||
\edef\temp{%
|
||||
\write\writeto{%
|
||||
\string\entry{\fullindexsortkey}{\noexpand\folio}\bracedtext}%
|
||||
\string\entry{\fullindexsortkey}%
|
||||
{\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}%
|
||||
\bracedtext}%
|
||||
}%
|
||||
\temp
|
||||
}
|
||||
\newbox\dummybox % used above
|
||||
|
||||
% Put the index entry in the margin if desired (undocumented).
|
||||
\def\maybemarginindex{%
|
||||
\ifx\SETmarginindex\relax\else
|
||||
\insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}%
|
||||
\fi
|
||||
}
|
||||
\let\SETmarginindex=\relax
|
||||
|
||||
|
||||
% Take care of unwanted page breaks/skips around a whatsit:
|
||||
%
|
||||
|
@ -5452,9 +5445,14 @@
|
|||
% \entry {topic}{pagelist}
|
||||
% for a topic that is used without subtopics
|
||||
% \primary {topic}
|
||||
% \entry {topic}{}
|
||||
% for the beginning of a topic that is used with subtopics
|
||||
% \secondary {subtopic}{pagelist}
|
||||
% for each subtopic.
|
||||
% \secondary {subtopic}{}
|
||||
% for a subtopic with sub-subtopics
|
||||
% \tertiary {subtopic}{subsubtopic}{pagelist}
|
||||
% for each sub-subtopic.
|
||||
|
||||
% Define the user-accessible indexing commands
|
||||
% @findex, @vindex, @kindex, @cindex.
|
||||
|
@ -5479,14 +5477,10 @@
|
|||
\plainfrenchspacing
|
||||
\everypar = {}% don't want the \kern\-parindent from indentation suppression.
|
||||
%
|
||||
% See if the index file exists and is nonempty.
|
||||
% Change catcode of @ here so that if the index file contains
|
||||
% \initial {@}
|
||||
% as its first line, TeX doesn't complain about mismatched braces
|
||||
% (because it thinks @} is a control sequence).
|
||||
\catcode`\@ = 12
|
||||
% See comment in \requireopenindexfile.
|
||||
\def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
|
||||
%
|
||||
% See if the index file exists and is nonempty.
|
||||
\openin 1 \jobname.\indexname s
|
||||
\ifeof 1
|
||||
% \enddoublecolumns gets confused if there is no text in the index,
|
||||
|
@ -5496,8 +5490,6 @@
|
|||
\putwordIndexNonexistent
|
||||
\typeout{No file \jobname.\indexname s.}%
|
||||
\else
|
||||
\catcode`\\ = 0
|
||||
%
|
||||
% If the index file exists but is empty, then \openin leaves \ifeof
|
||||
% false. We have to make TeX try to read something from the file, so
|
||||
% it can discover if there is anything in it.
|
||||
|
@ -5505,47 +5497,52 @@
|
|||
\ifeof 1
|
||||
\putwordIndexIsEmpty
|
||||
\else
|
||||
% Index files are almost Texinfo source, but we use \ as the escape
|
||||
% character. It would be better to use @, but that's too big a change
|
||||
% to make right now.
|
||||
\def\indexbackslash{\ttbackslash}%
|
||||
\let\indexlbrace\{ % Likewise, set these sequences for braces
|
||||
\let\indexrbrace\} % used in the sort key.
|
||||
\begindoublecolumns
|
||||
\let\dotheinsertentrybox\dotheinsertentryboxwithpenalty
|
||||
%
|
||||
% Read input from the index file line by line.
|
||||
\loopdo
|
||||
\ifeof1 \else
|
||||
\read 1 to \nextline
|
||||
\fi
|
||||
%
|
||||
\indexinputprocessing
|
||||
\thisline
|
||||
%
|
||||
\ifeof1\else
|
||||
\let\thisline\nextline
|
||||
\repeat
|
||||
%%
|
||||
\enddoublecolumns
|
||||
\expandafter\printindexzz\thisline\relax\relax\finish%
|
||||
\fi
|
||||
\fi
|
||||
\closein 1
|
||||
\endgroup}
|
||||
\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
|
||||
\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
|
||||
|
||||
\def\indexinputprocessing{%
|
||||
\ifeof1
|
||||
\let\firsttoken\relax
|
||||
% If the index file starts with a backslash, forgo reading the index
|
||||
% file altogether. If somebody upgrades texinfo.tex they may still have
|
||||
% old index files using \ as the escape character. Reading this would
|
||||
% at best lead to typesetting garbage, at worst a TeX syntax error.
|
||||
\def\printindexzz#1#2\finish{%
|
||||
\expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax
|
||||
\uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
|
||||
\expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
|
||||
\errmessage{%
|
||||
ERROR: A sorted index file in an obsolete format was skipped.
|
||||
To fix this problem, please upgrade your version of 'texi2dvi'
|
||||
or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
|
||||
If you are using an old version of 'texindex' (part of the Texinfo
|
||||
distribution), you may also need to upgrade to a newer version (at least 6.0).
|
||||
You may be able to typeset the index if you run
|
||||
'texindex \jobname.\indexname' yourself.
|
||||
You could also try setting the 'txiindexescapeisbackslash' flag by
|
||||
running a command like
|
||||
'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do
|
||||
this, Texinfo will try to use index files in the old format.
|
||||
If you continue to have problems, deleting the index files and starting again
|
||||
might help (with 'rm \jobname.?? \jobname.??s')%
|
||||
}%
|
||||
\else
|
||||
(Skipped sorted index file in obsolete format)
|
||||
\fi
|
||||
\else
|
||||
\begindoublecolumns
|
||||
\input \jobname.\indexname s
|
||||
\enddoublecolumns
|
||||
\fi
|
||||
\else
|
||||
\edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
|
||||
\act
|
||||
\message{trying to print index \indexname}%
|
||||
\begindoublecolumns
|
||||
\catcode`\\=0\relax
|
||||
\catcode`\@=12\relax
|
||||
\input \jobname.\indexname s
|
||||
\enddoublecolumns
|
||||
\fi
|
||||
}
|
||||
\def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken}
|
||||
\long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1}
|
||||
|
||||
|
||||
% These macros are used by the sorted index file itself.
|
||||
% Change them to control the appearance of the index.
|
||||
|
@ -5554,12 +5551,19 @@
|
|||
\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
|
||||
\catcode`\$=3
|
||||
\gdef\initialglyphs{%
|
||||
% special control sequences used in the index sort key
|
||||
\let\indexlbrace\{%
|
||||
\let\indexrbrace\}%
|
||||
\let\indexatchar\@%
|
||||
\def\indexbackslash{\math{\backslash}}%
|
||||
%
|
||||
% Some changes for non-alphabetic characters. Using the glyphs from the
|
||||
% math fonts looks more consistent than the typewriter font used elsewhere
|
||||
% for these characters.
|
||||
\def\indexbackslash{\math{\backslash}}%
|
||||
\let\\=\indexbackslash
|
||||
\uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}}
|
||||
%
|
||||
% In case @\ is used for backslash
|
||||
\uppercase{\let\\=~}
|
||||
% Can't get bold backslash so don't use bold forward slash
|
||||
\catcode`\/=13
|
||||
\def/{{\secrmnotbold \normalslash}}%
|
||||
|
@ -5618,12 +5622,6 @@
|
|||
%
|
||||
\def\entry{%
|
||||
\begingroup
|
||||
%
|
||||
% For pdfTeX and XeTeX.
|
||||
% The redefinition of \domark stops marks being added in \pdflink to
|
||||
% preserve coloured links across page boundaries. Otherwise the marks
|
||||
% would get in the way of \lastbox in \insertentrybox.
|
||||
\let\domark\relax
|
||||
%
|
||||
% Start a new paragraph if necessary, so our assignments below can't
|
||||
% affect previous text.
|
||||
|
@ -5657,35 +5655,31 @@
|
|||
\gdef\finishentry#1{%
|
||||
\egroup % end box A
|
||||
\dimen@ = \wd\boxA % Length of text of entry
|
||||
\global\setbox\boxA=\hbox\bgroup\unhbox\boxA
|
||||
% #1 is the page number.
|
||||
%
|
||||
% Get the width of the page numbers, and only use
|
||||
% leaders if they are present.
|
||||
\global\setbox\boxB = \hbox{#1}%
|
||||
\ifdim\wd\boxB = 0pt
|
||||
\null\nobreak\hfill\ %
|
||||
\else
|
||||
\global\setbox\boxA=\hbox\bgroup
|
||||
\unhbox\boxA
|
||||
% #1 is the page number.
|
||||
%
|
||||
\null\nobreak\indexdotfill % Have leaders before the page number.
|
||||
%
|
||||
\ifpdf
|
||||
\pdfgettoks#1.%
|
||||
\hskip\skip\thinshrinkable\the\toksA
|
||||
% Get the width of the page numbers, and only use
|
||||
% leaders if they are present.
|
||||
\global\setbox\boxB = \hbox{#1}%
|
||||
\ifdim\wd\boxB = 0pt
|
||||
\null\nobreak\hfill\ %
|
||||
\else
|
||||
\ifx\XeTeXrevision\thisisundefined
|
||||
\hskip\skip\thinshrinkable #1%
|
||||
\else
|
||||
%
|
||||
\null\nobreak\indexdotfill % Have leaders before the page number.
|
||||
%
|
||||
\ifpdforxetex
|
||||
\pdfgettoks#1.%
|
||||
\hskip\skip\thinshrinkable\the\toksA
|
||||
\else
|
||||
\hskip\skip\thinshrinkable #1%
|
||||
\fi
|
||||
\fi
|
||||
\fi
|
||||
\egroup % end \boxA
|
||||
\ifdim\wd\boxB = 0pt
|
||||
\global\setbox\entrybox=\vbox{\unhbox\boxA}%
|
||||
\else
|
||||
\global\setbox\entrybox=\vbox\bgroup
|
||||
\noindent\unhbox\boxA\par
|
||||
\nobreak
|
||||
\else\bgroup
|
||||
% We want the text of the entries to be aligned to the left, and the
|
||||
% page numbers to be aligned to the right.
|
||||
%
|
||||
|
@ -5751,55 +5745,11 @@
|
|||
\egroup % The \vbox
|
||||
\fi
|
||||
\endgroup
|
||||
\dotheinsertentrybox
|
||||
}}
|
||||
|
||||
\newskip\thinshrinkable
|
||||
\skip\thinshrinkable=.15em minus .15em
|
||||
|
||||
\newbox\entrybox
|
||||
\def\insertentrybox{%
|
||||
\ourunvbox\entrybox
|
||||
}
|
||||
|
||||
% default definition
|
||||
\let\dotheinsertentrybox\insertentrybox
|
||||
|
||||
% Use \lastbox to take apart vbox box by box, and add each sub-box
|
||||
% to the current vertical list.
|
||||
\def\ourunvbox#1{%
|
||||
\bgroup % for local binding of \delayedbox
|
||||
% Remove the last box from box #1
|
||||
\global\setbox#1=\vbox{%
|
||||
\unvbox#1%
|
||||
\unskip % remove any glue
|
||||
\unpenalty
|
||||
\global\setbox\interbox=\lastbox
|
||||
}%
|
||||
\setbox\delayedbox=\box\interbox
|
||||
\ifdim\ht#1=0pt\else
|
||||
\ourunvbox#1 % Repeat on what's left of the box
|
||||
\nobreak
|
||||
\fi
|
||||
\box\delayedbox
|
||||
\egroup
|
||||
}
|
||||
\newbox\delayedbox
|
||||
\newbox\interbox
|
||||
|
||||
% Used from \printindex. \firsttoken should be the first token
|
||||
% after the \entry. If it's not another \entry, we are at the last
|
||||
% line of a group of index entries, so insert a penalty to discourage
|
||||
% widowed index entries.
|
||||
\def\dotheinsertentryboxwithpenalty{%
|
||||
\ifx\firsttoken\isentry
|
||||
\else
|
||||
\penalty 9000
|
||||
\fi
|
||||
\insertentrybox
|
||||
}
|
||||
\def\isentry{\entry}%
|
||||
|
||||
% Like plain.tex's \dotfill, except uses up at least 1 em.
|
||||
% The filll stretch here overpowers both the fil and fill stretch to push
|
||||
% the page number to the right.
|
||||
|
@ -5809,24 +5759,15 @@
|
|||
|
||||
\def\primary #1{\line{#1\hfil}}
|
||||
|
||||
\newskip\secondaryindent \secondaryindent=0.5cm
|
||||
\def\secondary#1#2{{%
|
||||
\parfillskip=0in
|
||||
\parskip=0in
|
||||
\hangindent=1in
|
||||
\hangafter=1
|
||||
\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
|
||||
\ifpdf
|
||||
\pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
|
||||
\else
|
||||
\ifx\XeTeXrevision\thisisundefined
|
||||
#2
|
||||
\else
|
||||
\pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
|
||||
\fi
|
||||
\fi
|
||||
\par
|
||||
}}
|
||||
\def\secondary{\indententry{0.5cm}}
|
||||
\def\tertiary{\indententry{1cm}}
|
||||
|
||||
\def\indententry#1#2#3{%
|
||||
\bgroup
|
||||
\leftskip=#1
|
||||
\entry{#2}{#3}%
|
||||
\egroup
|
||||
}
|
||||
|
||||
% Define two-column mode, which we use to typeset indexes.
|
||||
% Adapted from the TeXbook, page 416, which is to say,
|
||||
|
@ -5844,17 +5785,6 @@
|
|||
\output = {%
|
||||
\savetopmark
|
||||
%
|
||||
% Here is a possibility not foreseen in manmac: if we accumulate a
|
||||
% whole lot of material, we might end up calling this \output
|
||||
% routine twice in a row (see the doublecol-lose test, which is
|
||||
% essentially a couple of indexes with @setchapternewpage off). In
|
||||
% that case we just ship out what is in \partialpage with the normal
|
||||
% output routine. Generally, \partialpage will be empty when this
|
||||
% runs and this will be a no-op. See the indexspread.tex test case.
|
||||
\ifvoid\partialpage \else
|
||||
\onepageout{\pagecontents\partialpage}%
|
||||
\fi
|
||||
%
|
||||
\global\setbox\partialpage = \vbox{%
|
||||
% Unvbox the main output page.
|
||||
\unvbox\PAGE
|
||||
|
@ -6134,11 +6064,9 @@
|
|||
|
||||
% @raisesections: treat @section as chapter, @subsection as section, etc.
|
||||
\def\raisesections{\global\advance\secbase by -1}
|
||||
\let\up=\raisesections % original BFox name
|
||||
|
||||
% @lowersections: treat @chapter as section, @section as subsection, etc.
|
||||
\def\lowersections{\global\advance\secbase by 1}
|
||||
\let\down=\lowersections % original BFox name
|
||||
|
||||
% we only have subsub.
|
||||
\chardef\maxseclevel = 3
|
||||
|
@ -6790,13 +6718,8 @@
|
|||
% 1 and 2 (the page numbers aren't printed), and so are the first
|
||||
% two pages of the document. Thus, we'd have two destinations named
|
||||
% `1', and two named `2'.
|
||||
\ifpdf
|
||||
\ifpdforxetex
|
||||
\global\pdfmakepagedesttrue
|
||||
\else
|
||||
\ifx\XeTeXrevision\thisisundefined
|
||||
\else
|
||||
\global\pdfmakepagedesttrue
|
||||
\fi
|
||||
\fi
|
||||
}
|
||||
|
||||
|
@ -7159,11 +7082,7 @@
|
|||
|
||||
% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
|
||||
% environment contents.
|
||||
\font\circle=lcircle10
|
||||
\newdimen\circthick
|
||||
\newdimen\cartouter\newdimen\cartinner
|
||||
\newskip\normbskip\newskip\normpskip\newskip\normlskip
|
||||
\circthick=\fontdimen8\circle
|
||||
|
||||
%
|
||||
\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
|
||||
\def\ctr{{\hskip 6pt\circle\char'010}}
|
||||
|
@ -7178,7 +7097,18 @@
|
|||
%
|
||||
\newskip\lskip\newskip\rskip
|
||||
|
||||
% only require the font if @cartouche is actually used
|
||||
\def\cartouchefontdefs{%
|
||||
\font\circle=lcircle10\relax
|
||||
\circthick=\fontdimen8\circle
|
||||
}
|
||||
\newdimen\circthick
|
||||
\newdimen\cartouter\newdimen\cartinner
|
||||
\newskip\normbskip\newskip\normpskip\newskip\normlskip
|
||||
|
||||
|
||||
\envdef\cartouche{%
|
||||
\cartouchefontdefs
|
||||
\ifhmode\par\fi % can't be in the midst of a paragraph.
|
||||
\startsavinginserts
|
||||
\lskip=\leftskip \rskip=\rightskip
|
||||
|
@ -8050,36 +7980,18 @@
|
|||
}
|
||||
\fi
|
||||
|
||||
% alias because \c means cedilla in @tex or @math
|
||||
\let\texinfoc=\c
|
||||
|
||||
\newcount\savedcatcodeone
|
||||
\newcount\savedcatcodetwo
|
||||
|
||||
% Used at the time of macro expansion.
|
||||
% Argument is macro body with arguments substituted
|
||||
\def\scanmacro#1{%
|
||||
\newlinechar`\^^M
|
||||
\def\xeatspaces{\eatspaces}%
|
||||
%
|
||||
% Temporarily undo catcode changes of \printindex. Set catcode of @ to
|
||||
% 0 so that @-commands in macro expansions aren't printed literally when
|
||||
% formatting an index file, where \ is used as the escape character.
|
||||
\savedcatcodeone=\catcode`\@
|
||||
\savedcatcodetwo=\catcode`\\
|
||||
\catcode`\@=0
|
||||
\catcode`\\=\active
|
||||
%
|
||||
% Process the macro body under the current catcode regime.
|
||||
\scantokens{#1@texinfoc}%
|
||||
\scantokens{#1@comment}%
|
||||
%
|
||||
\catcode`\@=\savedcatcodeone
|
||||
\catcode`\\=\savedcatcodetwo
|
||||
%
|
||||
% The \texinfoc is to remove the \newlinechar added by \scantokens, and
|
||||
% can be noticed by \parsearg.
|
||||
% We avoid surrounding the call to \scantokens with \bgroup and \egroup
|
||||
% to allow macros to open or close groups themselves.
|
||||
% The \comment is to remove the \newlinechar added by \scantokens, and
|
||||
% can be noticed by \parsearg. Note \c isn't used because this means cedilla
|
||||
% in math mode.
|
||||
}
|
||||
|
||||
% Used for copying and captions
|
||||
|
@ -8180,12 +8092,14 @@
|
|||
\def\macroargctxt{%
|
||||
\scanctxt
|
||||
\catcode`\ =\active
|
||||
\catcode`\@=\other
|
||||
\catcode`\^^M=\other
|
||||
\catcode`\\=\active
|
||||
}
|
||||
|
||||
\def\macrolineargctxt{% used for whole-line arguments without braces
|
||||
\scanctxt
|
||||
\catcode`\@=\other
|
||||
\catcode`\{=\other
|
||||
\catcode`\}=\other
|
||||
}
|
||||
|
@ -8749,9 +8663,29 @@
|
|||
% also remove a trailing comma, in case of something like this:
|
||||
% @node Help-Cross, , , Cross-refs
|
||||
\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
|
||||
\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
|
||||
\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode}
|
||||
|
||||
% Used so that the @top node doesn't have to be wrapped in an @ifnottex
|
||||
% conditional.
|
||||
% \doignore goes to more effort to skip nested conditionals but we don't need
|
||||
% that here.
|
||||
\def\omittopnode{%
|
||||
\ifx\lastnode\wordTop
|
||||
\expandafter\ignorenode\fi
|
||||
}
|
||||
\def\wordTop{Top}
|
||||
|
||||
% Until the next @node or @bye command, divert output to a box that is not
|
||||
% output.
|
||||
\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
|
||||
\ignorenodebye
|
||||
}
|
||||
|
||||
{\let\bye\relax
|
||||
\gdef\ignorenodebye{\let\bye\ignorenodebyedef}
|
||||
\gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}}
|
||||
% The redefinition of \bye here is because it is declared \outer
|
||||
|
||||
\let\nwnode=\node
|
||||
\let\lastnode=\empty
|
||||
|
||||
% Write a cross-reference definition for the current node. #1 is the
|
||||
|
@ -9226,19 +9160,6 @@
|
|||
\catcode`\^^]=\other
|
||||
\catcode`\^^^=\other
|
||||
\catcode`\^^_=\other
|
||||
% It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
|
||||
% in xref tags, i.e., node names. But since ^^e4 notation isn't
|
||||
% supported in the main text, it doesn't seem desirable. Furthermore,
|
||||
% that is not enough: for node names that actually contain a ^
|
||||
% character, we would end up writing a line like this: 'xrdef {'hat
|
||||
% b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
|
||||
% argument, and \hat is not an expandable control sequence. It could
|
||||
% all be worked out, but why? Either we support ^^ or we don't.
|
||||
%
|
||||
% The other change necessary for this was to define \auxhat:
|
||||
% \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
|
||||
% and then to call \auxhat in \setq.
|
||||
%
|
||||
\catcode`\^=\other
|
||||
%
|
||||
% Special characters. Should be turned off anyway, but...
|
||||
|
@ -9256,14 +9177,7 @@
|
|||
\catcode`\%=\other
|
||||
\catcode`+=\other % avoid \+ for paranoia even though we've turned it off
|
||||
%
|
||||
% This is to support \ in node names and titles, since the \
|
||||
% characters end up in a \csname. It's easier than
|
||||
% leaving it active and making its active definition an actual \
|
||||
% character. What I don't understand is why it works in the *value*
|
||||
% of the xrdef. Seems like it should be a catcode12 \, and that
|
||||
% should not typeset properly. But it works, so I'm moving on for
|
||||
% now. --karl, 15jan04.
|
||||
\catcode`\\=\other
|
||||
\catcode`\\=\active
|
||||
%
|
||||
% @ is our escape character in .aux files, and we need braces.
|
||||
\catcode`\{=1
|
||||
|
@ -11534,11 +11448,9 @@
|
|||
% \backslashcurfont outputs one backslash character in current font,
|
||||
% as in \char`\\.
|
||||
\global\chardef\backslashcurfont=`\\
|
||||
\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
|
||||
|
||||
% \realbackslash is an actual character `\' with catcode other, and
|
||||
% \doublebackslash is two of them (for the pdf outlines).
|
||||
{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
|
||||
% \realbackslash is an actual character `\' with catcode other.
|
||||
{\catcode`\\=\other @gdef@realbackslash{\}}
|
||||
|
||||
% In Texinfo, backslash is an active character; it prints the backslash
|
||||
% in fixed width font.
|
||||
|
@ -11556,10 +11468,8 @@
|
|||
@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
|
||||
@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
|
||||
|
||||
% \rawbackslash defines an active \ to do \backslashcurfont.
|
||||
% \otherbackslash defines an active \ to be a literal `\' character with
|
||||
% catcode other. We switch back and forth between these.
|
||||
@gdef@rawbackslash{@let\=@backslashcurfont}
|
||||
% catcode other.
|
||||
@gdef@otherbackslash{@let\=@realbackslash}
|
||||
|
||||
% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
|
||||
|
@ -11631,7 +11541,7 @@
|
|||
@ifx\@eatinput @let\ = @ttbackslash @fi
|
||||
@catcode13=5 % regular end of line
|
||||
@enableemergencynewline
|
||||
@let@c=@texinfoc
|
||||
@let@c=@comment
|
||||
@let@parsearg@originalparsearg
|
||||
% Also turn back on active characters that might appear in the input
|
||||
% file name, in case not using a pre-dumped format.
|
||||
|
|
|
@ -545,7 +545,7 @@ file system), @file{@trampfn{dav,user@@host,/path/to/file}} and
|
|||
@cindex google drive
|
||||
@cindex method @option{nextcloud}
|
||||
@cindex @option{nextcloud} method
|
||||
@cindex owncloud
|
||||
@cindex nextcloud
|
||||
|
||||
GVFS-based methods include also @acronym{GNOME} Online Accounts, which
|
||||
support the @option{Files} service. These are the Google Drive file
|
||||
|
@ -1208,7 +1208,7 @@ directory have the same @code{display-name}, such a situation must be avoided.
|
|||
@cindex @acronym{GNOME} Online Accounts
|
||||
@cindex method @option{nextcloud}
|
||||
@cindex @option{nextcloud} method
|
||||
@cindex owncloud
|
||||
@cindex nextcloud
|
||||
|
||||
As the name indicates, the method @option{nextcloud} allows you to
|
||||
access OwnCloud or NextCloud hosted files and directories. Like the
|
||||
|
@ -3083,6 +3083,8 @@ host. Example:
|
|||
@kbd{M-x auto-revert-tail-mode @key{RET}} runs similarly showing
|
||||
continuous output.
|
||||
|
||||
@vindex shell-file-name
|
||||
@vindex shell-command-switch
|
||||
@code{shell-command} uses the variables @code{shell-file-name} and
|
||||
@code{shell-command-switch} in order to determine which shell to run.
|
||||
For remote hosts, their default values are @file{/bin/sh} and
|
||||
|
@ -3091,6 +3093,15 @@ uses @file{/system/bin/sh}). Like the variables in the previous
|
|||
section, these variables can be changed via connection-local
|
||||
variables.
|
||||
|
||||
@vindex async-shell-command-width
|
||||
@vindex COLUMNS@r{, environment variable}
|
||||
If Emacs supports the variable @code{async-shell-command-width} (since Emacs
|
||||
27.1), @value{tramp} cares about its value for asynchronous shell
|
||||
commands. It specifies the number of display columns for command
|
||||
output. For synchronous shell commands, a similar effect can be
|
||||
achieved by adding the environment variable @env{COLUMNS} to
|
||||
@code{tramp-remote-process-environment}.
|
||||
|
||||
|
||||
@subsection Running @code{eshell} on a remote host
|
||||
@cindex @code{eshell}
|
||||
|
|
337
etc/NEWS
337
etc/NEWS
|
@ -43,11 +43,15 @@ functions 'json-serialize', 'json-insert', 'json-parse-string', and
|
|||
'json-parse-buffer' are typically much faster than their Lisp
|
||||
counterparts from json.el.
|
||||
|
||||
** Emacs no longer defaults to using ImageMagick to display images,
|
||||
due to security and stability concerns. To override the default, use
|
||||
'configure --with-imagemagick'.
|
||||
|
||||
** Several configure options now accept an option-argument 'ifavailable'.
|
||||
For example, './configure --with-xpm=ifavailable' now configures Emacs
|
||||
to attempt to use libxpm but to continue building even if libxpm is absent.
|
||||
The other affected options are --with-gif, --with-gnutls, --with-jpeg,
|
||||
--with-png, and --with-tiff.
|
||||
to attempt to use libxpm but to continue building even if libxpm is
|
||||
absent. The other affected options are '--with-gif', '--with-gnutls',
|
||||
'--with-jpeg', '--with-png', and '--with-tiff'.
|
||||
|
||||
** The etags program now uses the C library's regular expression matcher
|
||||
when possible, and a compatible regex substitute otherwise. This will
|
||||
|
@ -103,6 +107,10 @@ option was useful with modern debugging tools such as AddressSanitizer.
|
|||
(See etc/DEBUG for the details of using the modern replacements of the
|
||||
removed configure options.)
|
||||
|
||||
+++
|
||||
** The distribution tarball now has test cases; 'make check' runs them.
|
||||
This is intended mostly to help developers.
|
||||
|
||||
---
|
||||
** Emacs now requires GTK 2.24 and GTK 3.10 for the GTK 2 and GTK 3
|
||||
builds respectively.
|
||||
|
@ -134,13 +142,14 @@ file, which was previously done when Emacs was started. As a result
|
|||
of this change, it is no longer necessary to call 'package-initialize'
|
||||
in your init file.
|
||||
|
||||
However, if your init file changes the values of 'package-load-list' or
|
||||
'package-user-dir', or sets 'package-enable-at-startup' to nil then it won't
|
||||
work right without some adjustment:
|
||||
- you can move that code to the early init file (see above), so those settings
|
||||
apply before Emacs tries to activate the packages.
|
||||
- you can use the new 'package-quickstart' so activation of packages does not
|
||||
need to pay attention to 'package-load-list' or 'package-user-dir' any more.
|
||||
However, if your init file changes the values of 'package-load-list'
|
||||
or 'package-user-dir', or sets 'package-enable-at-startup' to nil then
|
||||
it won't work right without some adjustment:
|
||||
- You can move that code to the early init file (see above), so those
|
||||
settings apply before Emacs tries to activate the packages.
|
||||
- You can use the new 'package-quickstart' so activation of packages
|
||||
does not need to pay attention to 'package-load-list' or
|
||||
'package-user-dir' any more.
|
||||
|
||||
---
|
||||
** Emacs now notifies systemd when startup finishes or shutdown begins.
|
||||
|
@ -150,6 +159,12 @@ after Emacs has finished initialization and is ready for use.
|
|||
emacs.service file to eg "~/.config/systemd/user/", you will need to copy
|
||||
the new version of the file again.)
|
||||
|
||||
+++
|
||||
** New option 'help-enable-completion-auto-load'.
|
||||
This allows disabling the new feature introduced in Emacs 26.1 which
|
||||
loads files during completion of 'C-h f' and 'C-h v' according to
|
||||
'definition-prefixes'.
|
||||
|
||||
|
||||
* Changes in Emacs 27.1
|
||||
|
||||
|
@ -159,16 +174,16 @@ the new version of the file again.)
|
|||
*** emacsclient now supports the 'EMACS_SOCKET_NAME' environment variable.
|
||||
The behavior is identical to 'EMACS_SERVER_FILE', in that the
|
||||
command-line value specified via '--socket-name' will override the
|
||||
environment, and the natural default to TMPDIR, then "/tmp", continues
|
||||
environment, and the natural default to 'TMPDIR', then "/tmp", continues
|
||||
to apply.
|
||||
|
||||
+++
|
||||
*** Emacs and emacsclient now default to $XDG_RUNTIME_DIR/emacs
|
||||
*** Emacs and emacsclient now default to "$XDG_RUNTIME_DIR/emacs"
|
||||
as the directory for client/server sockets, if Emacs is running
|
||||
under an X Window System desktop that sets the XDG_RUNTIME_DIR
|
||||
under an X Window System desktop that sets the 'XDG_RUNTIME_DIR'
|
||||
environment variable to indicate where session sockets should go.
|
||||
To get the old, less-secure behavior, you can set the
|
||||
EMACS_SOCKET_NAME environment variable to an appropriate value.
|
||||
'EMACS_SOCKET_NAME' environment variable to an appropriate value.
|
||||
|
||||
---
|
||||
*** When run by root, emacsclient no longer connects to non-root sockets.
|
||||
|
@ -182,11 +197,11 @@ be controlled via the new variable 'face-near-same-color-threshold'.
|
|||
The default value is 30000, as the previously hard-coded threshold.
|
||||
|
||||
+++
|
||||
** The function 'read-passwd' uses '*' as default character to hide passwords.
|
||||
** The function 'read-passwd' uses "*" as default character to hide passwords.
|
||||
|
||||
** Lexical binding is now used when evaluating interactive Elisp forms
|
||||
More specifically, lexical-binding is now used for M-:, --eval, as well
|
||||
as in the *scratch* and *ielm* buffers.
|
||||
** Lexical binding is now used when evaluating interactive Elisp forms.
|
||||
More specifically, lexical-binding is now used for 'M-:', '--eval', as
|
||||
well as in the "*scratch*" and "*ielm*" buffers.
|
||||
|
||||
---
|
||||
** The new option 'tooltip-resize-echo-area' avoids truncating tooltip text
|
||||
|
@ -221,7 +236,7 @@ indirectly, e.g., by checking that functions like
|
|||
'libxml-parse-html-region' return nil.
|
||||
|
||||
+++
|
||||
** 'libxml-parse-xml-region' and 'libxml-parse-html' region take
|
||||
** 'libxml-parse-xml-region' and 'libxml-parse-html-region' take
|
||||
a parameter that's called DISCARD-COMMENTS, but it really only
|
||||
discards the top-level comment. Therefore this parameter is now
|
||||
obsolete, and the new utility function 'xml-remove-comments' can be
|
||||
|
@ -247,7 +262,7 @@ security level (assuming you use the 'medium' level).
|
|||
+++
|
||||
** Native GnuTLS connections can now use client certificates.
|
||||
Previously, this support was only available when using the external
|
||||
gnutls-cli command. Call 'open-network-stream' with
|
||||
'gnutls-cli' command. Call 'open-network-stream' with
|
||||
':client-certificate t' to trigger looking up of per-server
|
||||
certificates via 'auth-source'.
|
||||
|
||||
|
@ -327,25 +342,40 @@ and directory-local variables.
|
|||
|
||||
+++
|
||||
*** The macro 'with-connection-local-variables' has been renamed from
|
||||
'with-connection-local-profiles'. No argument 'profiles' needed any
|
||||
longer.
|
||||
'with-connection-local-profiles'. No argument PROFILES needed any longer.
|
||||
|
||||
---
|
||||
** New variable next-error-verbose controls when `next-error' outputs
|
||||
a message about the error locus.
|
||||
** New variable 'next-error-verbose' controls when 'next-error' outputs
|
||||
a message about the error locus.
|
||||
|
||||
---
|
||||
** New variable grep-search-path defines the directories searched for
|
||||
grep hits (this used to be controlled by compilation-search-path).
|
||||
** New variable 'grep-search-path' defines the directories searched for
|
||||
grep hits (this used to be controlled by 'compilation-search-path').
|
||||
|
||||
---
|
||||
** New variable emacs-lisp-compilation-search-path defines the
|
||||
directories searched for byte-compiler error messages (this used to
|
||||
be controlled by compilation-search-path).
|
||||
** New variable 'emacs-lisp-compilation-search-path' defines the
|
||||
directories searched for byte-compiler error messages (this used to
|
||||
be controlled by 'compilation-search-path').
|
||||
|
||||
** Multicolor fonts such as "Noto Color Emoji" can be displayed on
|
||||
Emacs configured with Cairo drawing and linked with cairo >= 1.16.0.
|
||||
|
||||
+++
|
||||
** Emacs now optionally displays a fill column indicator.
|
||||
|
||||
This is similar to what 'fill-column-indicator' package provides, but
|
||||
much faster and compatible with 'show-trailing-whitespace'.
|
||||
|
||||
Customize the buffer-local variables 'display-fill-column-indicator'
|
||||
and 'display-fill-column-indicator-character' to activate the
|
||||
indicator.
|
||||
|
||||
The indicator is not displayed at all in minibuffer windows and
|
||||
in tooltips, as it is not useful there.
|
||||
|
||||
There are 2 new buffer local variables and 1 face to customize this
|
||||
mode they are described in the manual "(emacs) Display".
|
||||
|
||||
|
||||
* Editing Changes in Emacs 27.1
|
||||
|
||||
|
@ -405,39 +435,41 @@ syntax that you can see in the example of a ".dir-locals.el" file in
|
|||
the node "(emacs) Directory Variables" of the user manual.
|
||||
|
||||
+++
|
||||
** Network connections using 'local can now use IPv6.
|
||||
** Network connections using 'local' can now use IPv6.
|
||||
'make-network-process' now uses the correct loopback address when
|
||||
asked to use :host 'local and :family 'ipv6.
|
||||
asked to use ':host 'local' and ':family 'ipv6'.
|
||||
|
||||
+++
|
||||
** The new function `replace-region-contents' replaces the current
|
||||
** The new function 'replace-region-contents' replaces the current
|
||||
region using a given replacement-function in a non-destructive manner
|
||||
(in terms of `replace-buffer-contents').
|
||||
(in terms of 'replace-buffer-contents').
|
||||
|
||||
+++
|
||||
** The command `replace-buffer-contents' now has two optional
|
||||
** The command 'replace-buffer-contents' now has two optional
|
||||
arguments mitigating performance issues when operating on huge
|
||||
buffers.
|
||||
|
||||
+++
|
||||
** The command 'delete-indentation' now operates on the active region.
|
||||
If the region is active, the command joins all the lines in the
|
||||
region. When there's no active region, the command works on the
|
||||
current and the previous or the next line, as before.
|
||||
|
||||
+++
|
||||
|
||||
* Changes in Specialized Modes and Packages in Emacs 27.1
|
||||
|
||||
** compile.el
|
||||
---
|
||||
*** In compilation-error-regexp-alist, 'line' (and 'end-line') can be functions
|
||||
*** In 'compilation-error-regexp-alist', 'line' (and 'end-line') can
|
||||
be functions.
|
||||
|
||||
** cl-lib
|
||||
** cl-lib.el
|
||||
+++
|
||||
*** cl-defstruct has a new :noinline argument to prevent inlining its functions
|
||||
*** 'cl-defstruct' has a new ':noinline' argument to prevent inlining
|
||||
its functions.
|
||||
|
||||
** doc-view-mode
|
||||
*** New commands doc-view-presentation and doc-view-fit-window-to-page
|
||||
** doc-view.el
|
||||
*** New commands 'doc-view-presentation' and 'doc-view-fit-window-to-page'.
|
||||
*** Added support for password-protected PDF files
|
||||
|
||||
** Ido
|
||||
|
@ -479,10 +511,10 @@ that display the next buffer in the window at the specified direction.
|
|||
This is like 'windmove-default-keybindings' that binds keys to commands
|
||||
that select the window in the specified direction, but additionally it
|
||||
displays the buffer from the next command in that window. For example,
|
||||
'S-M-right C-h i' displays the *Info* buffer in the right window,
|
||||
'S-M-right C-h i' displays the "*Info*" buffer in the right window,
|
||||
creating the window if necessary. A special key can be customized to
|
||||
display the buffer in the same window, for example, 'S-M-0 C-h e'
|
||||
displays the *Messages* buffer in the same window.
|
||||
displays the "*Messages*" buffer in the same window.
|
||||
|
||||
*** Windmove also supports directional window deletion.
|
||||
The new command 'windmove-delete-default-keybindings' binds default
|
||||
|
@ -502,8 +534,11 @@ The mode is automatically enabled in files that start with the
|
|||
'function' keyword.
|
||||
|
||||
** project.el
|
||||
|
||||
*** New commands 'project-search' and 'project-query-replace-regexp'.
|
||||
|
||||
*** New customizable variable 'project-read-file-name-function'.
|
||||
|
||||
** Etags
|
||||
|
||||
+++
|
||||
|
@ -547,7 +582,7 @@ With non-nil, 'vc-find-revision' doesn't write the created buffer to file.
|
|||
This new variable allows customizing the default arguments passed to
|
||||
'git-grep' when 'vc-git-grep' is used.
|
||||
|
||||
*** Command 'vc-git-stash' now respects marks in the '*vc-dir*' buffer.
|
||||
*** Command 'vc-git-stash' now respects marks in the "*vc-dir*" buffer.
|
||||
When some files are marked, only those are stashed.
|
||||
When no files are marked, all modified files are stashed, as before.
|
||||
|
||||
|
@ -565,7 +600,7 @@ values.
|
|||
and compares their entire trees.
|
||||
|
||||
*** New user option 'vc-hg-revert-switches' specifies switches to pass
|
||||
to hg revert.
|
||||
to Hg revert.
|
||||
|
||||
*** 'C-x v M D' ('vc-diff-mergebase') and 'C-x v M L' ('vc-log-mergebase')
|
||||
print diffs and logs between the merge base (common ancestor) of two
|
||||
|
@ -574,9 +609,10 @@ given revisions.
|
|||
** Diff mode
|
||||
+++
|
||||
*** Hunks are now automatically refined by font-lock.
|
||||
To disable refinement, set the new defcustom 'diff-refine' to nil.
|
||||
To disable refinement, set the new user option 'diff-refine' to nil.
|
||||
To get back the old behavior where hunks are refined as you navigate
|
||||
through a diff, set 'diff-refine' to the symbol 'navigate'.
|
||||
|
||||
+++
|
||||
*** 'diff-auto-refine-mode' is deprecated in favor of 'diff-refine'.
|
||||
It is no longer enabled by default and binding it no longer has any
|
||||
|
@ -589,7 +625,7 @@ according to the appropriate major mode. Customize the new option
|
|||
'diff-font-lock-syntax' to nil to disable this.
|
||||
|
||||
*** File headers can be shortened, mimicking Magit's diff format.
|
||||
To enable it, set the new defcustom 'diff-font-lock-prettify' to t.
|
||||
To enable it, set the new user option 'diff-font-lock-prettify' to t.
|
||||
|
||||
+++
|
||||
*** Prefix arg of 'diff-goto-source' means jump to the old revision
|
||||
|
@ -599,11 +635,11 @@ or to the new revision of the file otherwise.
|
|||
** Texinfo
|
||||
|
||||
+++
|
||||
*** New function for inserting @pxref, @xref, or @ref commands.
|
||||
*** New function for inserting '@pxref', '@xref', or '@ref' commands.
|
||||
The function 'texinfo-insert-dwim-@ref', bound to 'C-c C-c r' by
|
||||
default, inserts one of three types of references based on the text
|
||||
surrounding point, namely @pxref near a parenthesis, @xref at the
|
||||
start of a sentence or at (point-min), else @ref.
|
||||
surrounding point, namely '@pxref' near a parenthesis, '@xref' at the
|
||||
start of a sentence or at '(point-min)', else '@ref'.
|
||||
|
||||
** Browse-url
|
||||
|
||||
|
@ -637,7 +673,6 @@ end.
|
|||
** SQL
|
||||
|
||||
*** SQL Indent Minor Mode
|
||||
|
||||
SQL Mode now supports the ELPA 'sql-indent' package for assisting
|
||||
sophisticated SQL indenting rules. Note, however, that SQL is not
|
||||
like other programming languages like C, Java, or Python where code is
|
||||
|
@ -659,7 +694,6 @@ default values. If you have existing customizations to these variables,
|
|||
you should make sure that the new default entry is included.
|
||||
|
||||
*** Connection Wallet
|
||||
|
||||
Database passwords can now by stored in NETRC or JSON data files that
|
||||
may optionally be encrypted. When establishing an interactive session
|
||||
with the database via 'sql-connect' or a product specific function,
|
||||
|
@ -669,9 +703,9 @@ searched for the password. The 'sql-product', 'sql-server',
|
|||
appropriate authorization. This eliminates the discouraged practice of
|
||||
embedding database passwords in your Emacs initialization.
|
||||
|
||||
See the `auth-source' module for complete documentation on the file
|
||||
See the 'auth-source' module for complete documentation on the file
|
||||
formats. By default, the wallet file is expected to be in the
|
||||
`user-emacs-directory', named 'sql-wallet' or '.sql-wallet', with
|
||||
'user-emacs-directory', named 'sql-wallet' or '.sql-wallet', with
|
||||
'.json' (JSON) or no (NETRC) suffix. Both file formats can optionally
|
||||
be encrypted with GPG by adding an additional '.gpg' suffix.
|
||||
|
||||
|
@ -694,6 +728,10 @@ Control whether Flymake starts checking the buffer on save.
|
|||
This enables more efficient backends. See the docstring of
|
||||
'flymake-diagnostic-functions' or the Flymake manual for details.
|
||||
|
||||
+++
|
||||
*** 'flymake-start-syntax-check-on-newline' is now obsolete,
|
||||
use 'post-self-insert-hook' to check on newline.
|
||||
|
||||
** Ruby
|
||||
|
||||
*** The Rubocop Flymake diagnostic function will only run Lint cops if
|
||||
|
@ -703,16 +741,23 @@ it can't find the config file.
|
|||
|
||||
** Package
|
||||
|
||||
*** Change of 'package-check-signature' for packages with multiple sigs
|
||||
In previous Emacsen, 't' checked that all signatures are valid.
|
||||
Now 't' only checks that at least one signature is valid and the new 'all'
|
||||
value needs to be used if you want to enforce that all signatures
|
||||
are valid. This only affects packages with multiple signatures.
|
||||
|
||||
*** New function 'package-get-version' lets packages query their own version.
|
||||
Example use in auctex.el: '(defconst auctex-version (package-get-version))'
|
||||
|
||||
*** New 'package-quickstart' feature.
|
||||
When 'package-quickstart' is non-nil, package.el precomputes a big autoloads
|
||||
file so that activation of packages can be done much faster, which can speed up
|
||||
your startup significantly.
|
||||
It also causes variables like 'package-user-dir' and 'package-load-list' to be
|
||||
consulted when 'package-quickstart-refresh' is run rather than at startup so
|
||||
you don't need to set them in your early init file.
|
||||
When 'package-quickstart' is non-nil, package.el precomputes a big
|
||||
autoloads file so that activation of packages can be done much faster,
|
||||
which can speed up your startup significantly.
|
||||
It also causes variables like 'package-user-dir' and
|
||||
'package-load-list' to be consulted when 'package-quickstart-refresh'
|
||||
is run rather than at startup so you don't need to set them in your
|
||||
early init file.
|
||||
|
||||
*** New function 'package-activate-all'.
|
||||
|
||||
|
@ -738,19 +783,19 @@ Previously, setting 'xref-marker-ring-length' would only take effect
|
|||
if set before 'xref.el' was loaded.
|
||||
|
||||
---
|
||||
*** xref-find-definitions now sets the mark at the buffer position
|
||||
where it was invoked
|
||||
*** 'xref-find-definitions' now sets the mark at the buffer position
|
||||
where it was invoked.
|
||||
|
||||
---
|
||||
*** New xref faces 'xref-file-header', 'xref-line-number', 'xref-match'
|
||||
*** New xref faces 'xref-file-header', 'xref-line-number', 'xref-match'.
|
||||
|
||||
** Ecomplete
|
||||
|
||||
*** The ecomplete sorting has changed to a decay-based algorithm.
|
||||
This can be controlled by the new 'ecomplete-sort-predicate' variable.
|
||||
|
||||
*** The 'ecompleterc' file is now placed in ~/.emacs.d/ecompleterc by default.
|
||||
Of course it will still find it if you have it in ~/.ecompleterc
|
||||
*** The 'ecompleterc' file is now placed in '~/.emacs.d/ecompleterc' by default.
|
||||
Of course it will still find it if you have it in '~/.ecompleterc'.
|
||||
|
||||
** Gnus
|
||||
|
||||
|
@ -797,7 +842,7 @@ This option controls whether and how to use Gnus search groups as
|
|||
** erc
|
||||
|
||||
---
|
||||
*** 'erc-button-google-url' has been renamed 'erc-button-search-url'
|
||||
*** 'erc-button-google-url' has been renamed to 'erc-button-search-url'
|
||||
and its value has been changed to Duck Duck Go.
|
||||
|
||||
** EUDC
|
||||
|
@ -889,7 +934,7 @@ directories in the destination.
|
|||
** Help
|
||||
|
||||
---
|
||||
*** Description of variables and functions give an estimated first release
|
||||
*** Description of variables and functions give an estimated first release.
|
||||
|
||||
---
|
||||
*** Output format of 'C-h l' ('view-lossage') has changed.
|
||||
|
@ -968,7 +1013,7 @@ and case-sensitivity together with search strings in the search ring.
|
|||
*** Isearch now has its own tool-bar and menu-bar menu.
|
||||
|
||||
+++
|
||||
*** flush-lines prints and returns the number of deleted matching lines.
|
||||
*** 'flush-lines' prints and returns the number of deleted matching lines.
|
||||
|
||||
** Debugger
|
||||
|
||||
|
@ -1011,7 +1056,7 @@ by default.
|
|||
** Grep
|
||||
|
||||
+++
|
||||
*** rgrep, lgrep and zrgrep now hide part of the command line
|
||||
*** 'rgrep', 'lgrep' and 'zrgrep' now hide part of the command line
|
||||
that contains a list of ignored directories and files.
|
||||
Clicking on the button with ellipsis unhides it.
|
||||
The abbreviation can be disabled by the new option
|
||||
|
@ -1070,10 +1115,10 @@ default, and not just the opening element.
|
|||
|
||||
** Eshell
|
||||
|
||||
*** TAB completion uses the standard completion-at-point rather than pcomplete
|
||||
Its UI is slightly different but can be customized to behave similarly,
|
||||
e.g. Pcomplete's default cycling can be obtained with
|
||||
(setq completion-cycle-threshold 5).
|
||||
*** TAB completion uses the standard 'completion-at-point' rather than
|
||||
'pcomplete'. Its UI is slightly different but can be customized to
|
||||
behave similarly, e.g. Pcomplete's default cycling can be obtained
|
||||
with '(setq completion-cycle-threshold 5)'.
|
||||
|
||||
---
|
||||
*** Expansion of history event designators is disabled by default.
|
||||
|
@ -1108,9 +1153,9 @@ variable for remote shells. It still defaults to "/bin/sh".
|
|||
|
||||
** Single shell commands
|
||||
|
||||
---
|
||||
*** 'shell-command-width' defines the number of display columns
|
||||
available for output of asynchronous or remote shell commands.
|
||||
+++
|
||||
*** 'async-shell-command-width' defines the number of display columns
|
||||
available for output of asynchronous shell commands.
|
||||
|
||||
** Pcomplete
|
||||
|
||||
|
@ -1172,6 +1217,7 @@ Setting this option to an integer causes URLs displayed in Rcirc
|
|||
buffers to be truncated to that many characters.
|
||||
|
||||
** Register
|
||||
|
||||
---
|
||||
*** The return value of method 'register-val-describe' includes the
|
||||
names of buffers shown by the windows of a window configuration.
|
||||
|
@ -1253,11 +1299,18 @@ automatically updates. In the buffer, you can use 's q' or 's e' to
|
|||
signal a thread with quit or error respectively, or get a snapshot
|
||||
backtrace with 'b'.
|
||||
|
||||
|
||||
** thingatpt.el
|
||||
|
||||
---
|
||||
** thingatpt.el supports a new "thing" called 'uuid'.
|
||||
*** 'thing-at-point' supports a new "thing" called 'uuid'.
|
||||
A symbol 'uuid' can be passed to 'thing-at-point' and it returns the
|
||||
UUID at point.
|
||||
|
||||
---
|
||||
*** 'word-at-point' and 'sentence-at-point' accept NO-PROPERTIES.
|
||||
Just like 'thing-at-point' itself.
|
||||
|
||||
** Interactive automatic highlighting
|
||||
|
||||
+++
|
||||
|
@ -1280,6 +1333,12 @@ when given in a string. Previously, '(any "\x80-\xff")' would match
|
|||
characters U+0080...U+00FF. Now the expression matches raw bytes in
|
||||
the 128...255 range, as expected.
|
||||
|
||||
*** The rx 'or' and 'seq' forms no longer require any arguments.
|
||||
(or) produces a regexp that never matches anything, while (seq)
|
||||
matches the empty string, each being an identity for the operation.
|
||||
This also works for their aliases: '|' for 'or'; ':', 'and' and
|
||||
'sequence' for 'seq'.
|
||||
|
||||
** Frames
|
||||
|
||||
+++
|
||||
|
@ -1294,7 +1353,7 @@ frame when making a frame.
|
|||
*** New predicates 'display-blink-cursor-p' and 'display-symbol-keys-p'.
|
||||
These predicates are to be preferred over 'display-graphic-p' when
|
||||
testing for blinking cursor capability and the capability to have
|
||||
symbols (e.g., [return], [tab], [backspace]) as keys respectively.
|
||||
symbols (e.g., '[return]', '[tab]', '[backspace]') as keys respectively.
|
||||
|
||||
** Tabulated List mode
|
||||
|
||||
|
@ -1315,8 +1374,8 @@ near the current column in Tabulated Lists (see variables
|
|||
** CUA mode
|
||||
|
||||
---
|
||||
*** New defcustom 'cua-rectangle-terminal-modifier-key'.
|
||||
This defcustom allows for the customization of the modifier key used
|
||||
*** New user option 'cua-rectangle-terminal-modifier-key'.
|
||||
This user option allows for the customization of the modifier key used
|
||||
in a terminal frame.
|
||||
|
||||
** JS mode
|
||||
|
@ -1329,11 +1388,11 @@ will be supported in 'js-mode' and derivative modes. ('js-jsx-mode'
|
|||
no longer needs to be enabled.)
|
||||
|
||||
---
|
||||
*** New defcustom 'js-jsx-detect-syntax' disables automatic detection.
|
||||
*** New user option 'js-jsx-detect-syntax' disables automatic detection.
|
||||
This is turned on by default.
|
||||
|
||||
---
|
||||
*** New defcustom 'js-jsx-syntax' enables JSX syntax unconditionally.
|
||||
*** New user option 'js-jsx-syntax' enables JSX syntax unconditionally.
|
||||
This is off by default.
|
||||
|
||||
---
|
||||
|
@ -1353,7 +1412,7 @@ of the React developer community (see 'js-jsx-align->-with-<'),
|
|||
otherwise still adhering to SGML conventions.
|
||||
|
||||
---
|
||||
*** New defcustom 'js-jsx-align->-with-<' controls '>' indents.
|
||||
*** New user option 'js-jsx-align->-with-<' controls '>' indents.
|
||||
Commonly in JSX code, a '>' on its own line is indented at the same
|
||||
level as its opening '<'. This is the new default for JSX. This
|
||||
behavior is slightly different than that used by SGML in Emacs, where
|
||||
|
@ -1376,12 +1435,12 @@ The old behavior can be emulated by controlling JSX indentation
|
|||
independently of JS, by setting 'js-jsx-indent-level'.
|
||||
|
||||
---
|
||||
*** New defcustom 'js-jsx-indent-level' for different JSX indentation.
|
||||
*** New user option 'js-jsx-indent-level' for different JSX indentation.
|
||||
If you wish to indent JSX by a different number of spaces than JS, set
|
||||
this variable to the desired number.
|
||||
this user option to the desired number.
|
||||
|
||||
---
|
||||
*** New defcustom 'js-jsx-attribute-offset' for JSX attribute indents.
|
||||
*** New user option 'js-jsx-attribute-offset' for JSX attribute indents.
|
||||
|
||||
---
|
||||
*** New variable 'js-syntactic-mode-name' controls mode name display.
|
||||
|
@ -1395,6 +1454,22 @@ Packages deriving from 'js-mode' with 'define-derived-mode' should
|
|||
call this function to add enabled syntax extensions to their mode
|
||||
name, too.
|
||||
|
||||
** Autorevert
|
||||
|
||||
*** New variable 'auto-revert-avoid-polling' for saving power.
|
||||
When set to a non-nil value, buffers in Auto Revert mode are no longer
|
||||
polled for changes periodically. This reduces the power consumption
|
||||
of an idle Emacs, but may fail on some network file systems; set
|
||||
'auto-revert-notify-exclude-dir-regexp' to match files where
|
||||
notification is not supported. The default value is nil.
|
||||
|
||||
*** New variable 'buffer-auto-revert-by-notification'
|
||||
A major mode can declare that notification on the buffer's default
|
||||
directory is sufficient to know when updates are required, by setting
|
||||
the new variable 'buffer-auto-revert-by-notification' to a non-nil
|
||||
value. Auto Revert mode can use this information to avoid polling the
|
||||
buffer periodically when 'auto-revert-avoid-polling' is non-nil.
|
||||
|
||||
|
||||
* New Modes and Packages in Emacs 27.1
|
||||
|
||||
|
@ -1425,8 +1500,8 @@ documentation of the new mode and its commands.
|
|||
|
||||
* Incompatible Lisp Changes in Emacs 27.1
|
||||
|
||||
** In compilation-error-regexp-alist the old undocumented feature where 'line'
|
||||
could be a function of 2 arguments has been dropped.
|
||||
** In 'compilation-error-regexp-alist' the old undocumented feature
|
||||
where 'line' could be a function of 2 arguments has been dropped.
|
||||
|
||||
** 'define-fringe-bitmap' is always defined, even when Emacs is built
|
||||
without any GUI support.
|
||||
|
@ -1449,11 +1524,11 @@ its default value changed in Emacs 27.1.
|
|||
|
||||
** The REPETITIONS argument of 'benchmark-run' can now also be a variable.
|
||||
|
||||
** Interpretation of relative HOME directory has changed.
|
||||
If $HOME is set to a relative file name, 'expand-file-name' now
|
||||
** Interpretation of relative 'HOME' directory has changed.
|
||||
If "$HOME" is set to a relative file name, 'expand-file-name' now
|
||||
interprets it relative to the directory where Emacs was started, not
|
||||
relative to the 'default-directory' of the current buffer. We recommend
|
||||
always setting $HOME to an absolute file name, so that its meaning is
|
||||
always setting "$HOME" to an absolute file name, so that its meaning is
|
||||
independent of where Emacs was started.
|
||||
|
||||
** The FILENAME argument to 'file-name-base' is now mandatory and no
|
||||
|
@ -1479,7 +1554,7 @@ old-style backquotes as new-style, bind the new variable
|
|||
integer, Emacs now signals an error if the number is too large for the
|
||||
implementation to format.
|
||||
|
||||
** logb now returns infinity when given an infinite or zero argument,
|
||||
** 'logb' now returns infinity when given an infinite or zero argument,
|
||||
and returns a NaN when given a NaN. Formerly, it returned an extreme
|
||||
fixnum for such arguments.
|
||||
|
||||
|
@ -1530,11 +1605,11 @@ they are now allocated like any other pseudovector. As a result, the
|
|||
removed.
|
||||
|
||||
+++
|
||||
** Reversed character ranges are no longer permitted in rx.
|
||||
** Reversed character ranges are no longer permitted in 'rx'.
|
||||
Previously, ranges where the starting character is greater than the
|
||||
ending character were silently omitted.
|
||||
For example, '(rx (any "@z-a" (?9 . ?0)))' would match '@' only.
|
||||
Now, such rx expressions generate an error.
|
||||
Now, such 'rx' expressions generate an error.
|
||||
|
||||
+++
|
||||
** 'text-mode' no longer sets the value of 'indent-line-function'.
|
||||
|
@ -1543,16 +1618,21 @@ The global value of 'indent-line-function', which defaults to
|
|||
'text-mode'.
|
||||
|
||||
To get back the old behavior, add a function to 'text-mode-hook' which
|
||||
performs (setq-local indent-line-function #'indent-relative).
|
||||
performs '(setq-local indent-line-function #'indent-relative)'.
|
||||
|
||||
** 'make-process' no longer accepts a non-nil ':stop' key. This has
|
||||
never worked reliably, and now causes an error.
|
||||
|
||||
+++
|
||||
** 'eventp' no longer returns non-nil for lists whose car is nil.
|
||||
This is consistent with the fact that nil, though a symbol, is not a
|
||||
valid event type.
|
||||
|
||||
|
||||
* Lisp Changes in Emacs 27.1
|
||||
|
||||
** New 'help-fns-describe-variable-functions' hook.
|
||||
Makes it possible to add metadata information to describe-variable.
|
||||
Makes it possible to add metadata information to 'describe-variable'.
|
||||
|
||||
** i18n (internationalization)
|
||||
|
||||
|
@ -1560,7 +1640,7 @@ Makes it possible to add metadata information to describe-variable.
|
|||
according to the given numeric value.
|
||||
|
||||
+++
|
||||
** inhibit-null-byte-detection is renamed to inhibit-nul-byte-detection
|
||||
** 'inhibit-null-byte-detection' is renamed to 'inhibit-nul-byte-detection'.
|
||||
|
||||
+++
|
||||
** 'self-insert-command' takes the char to insert as (optional) argument.
|
||||
|
@ -1604,8 +1684,10 @@ like 'file-attributes' that compute file sizes and other attributes,
|
|||
functions like 'process-id' that compute process IDs, and functions like
|
||||
'user-uid' and 'group-gid' that compute user and group IDs.
|
||||
|
||||
** Time values
|
||||
|
||||
+++
|
||||
** Although the default timestamp format is still (HI LO US PS),
|
||||
*** Although the default timestamp format is still '(HI LO US PS)',
|
||||
it is planned to change in a future Emacs version, to exploit bignums.
|
||||
The documentation has been updated to mention that the timestamp
|
||||
format may change and that programs should use functions like
|
||||
|
@ -1614,22 +1696,22 @@ probing the innards of a timestamp directly, or creating a timestamp
|
|||
by hand.
|
||||
|
||||
+++
|
||||
** 'encode-time' supports a new API '(encode-time TIME &optional FORM)'.
|
||||
*** 'encode-time' supports a new API '(encode-time TIME &optional FORM)'.
|
||||
This can convert decoded times and Lisp time values to Lisp timestamps
|
||||
of various forms, including a new timestamp form '(TICKS . HZ)', where
|
||||
TICKS is an integer and HZ is a positive integer denoting a clock
|
||||
frequency. The old 'encode-time' API is still supported.
|
||||
|
||||
+++
|
||||
** 'time-add', 'time-subtract', and 'time-less-p' now accept
|
||||
*** 'time-add', 'time-subtract', and 'time-less-p' now accept
|
||||
infinities and NaNs too, and propagate them or return nil like
|
||||
floating-point operators do.
|
||||
|
||||
+++
|
||||
** New function 'time-equal-p' compares time values for equality.
|
||||
*** New function 'time-equal-p' compares time values for equality.
|
||||
|
||||
+++
|
||||
** 'format-time-string' supports a new conversion specifier flag '+'
|
||||
*** 'format-time-string' supports a new conversion specifier flag '+'
|
||||
that acts like the '0' flag but also puts a '+' before nonnegative
|
||||
years containing more than four digits. This is for compatibility
|
||||
with POSIX.1-2017.
|
||||
|
@ -1682,7 +1764,6 @@ of the Emacs Lisp Reference manual for more detail.
|
|||
|
||||
+++
|
||||
** Window change functions have been redesigned.
|
||||
|
||||
Hooks reacting to window changes run now only when redisplay detects
|
||||
that a change has actually occurred. Six hooks are now provided:
|
||||
'window-buffer-change-functions' (run after window buffers have
|
||||
|
@ -1710,10 +1791,15 @@ See the section "(elisp) Window Hooks" in the Elisp manual for a
|
|||
detailed explanation of the new behavior.
|
||||
|
||||
+++
|
||||
*** New option 'resize-mini-frames'.
|
||||
** New option 'resize-mini-frames'.
|
||||
This option allows to automatically resize minibuffer-only frames
|
||||
similarly to how minibuffer windows are resized on "normal" frames.
|
||||
|
||||
+++
|
||||
** New buffer display action function 'display-buffer-in-direction'.
|
||||
This function allows to specify the location of the window chosen by
|
||||
'display-buffer' in various ways.
|
||||
|
||||
+++
|
||||
** New buffer display action alist entry 'dedicated'.
|
||||
Such an entry allows to specify the dedicated status of a window
|
||||
|
@ -1725,6 +1811,16 @@ Such an entry allows to specify a minimum height of the window used
|
|||
for displaying a buffer. 'display-buffer-below-selected' is the only
|
||||
action function to respect it at the moment.
|
||||
|
||||
+++
|
||||
** New buffer display action alist entry 'direction'.
|
||||
This entry is used to specify the location of the window chosen by
|
||||
'display-buffer-in-direction'.
|
||||
|
||||
+++
|
||||
** Additional meaning of display action alist entry 'window'.
|
||||
A 'window' entry can now also specify a reference window for
|
||||
'display-buffer-in-direction'.
|
||||
|
||||
+++
|
||||
** The function 'assoc-delete-all' now takes an optional predicate argument.
|
||||
|
||||
|
@ -1741,7 +1837,7 @@ This avoids problems in calls like '(read (format "#x%x" -1))', and is
|
|||
more compatible with bignums. To get the traditional machine-dependent
|
||||
behavior, set the experimental variable 'binary-as-unsigned' to t,
|
||||
and if the new behavior breaks your code please email
|
||||
32252@debbugs.gnu.org. Because '%o' and '%x' can now format signed
|
||||
<32252@debbugs.gnu.org>. Because '%o' and '%x' can now format signed
|
||||
integers, they now support the '+' and space flags.
|
||||
|
||||
** To avoid confusion caused by "smart quotes", the reader signals an
|
||||
|
@ -1870,16 +1966,31 @@ some years back. It now respects 'imagemagick-types-inhibit' as a way
|
|||
to disable that.
|
||||
|
||||
---
|
||||
*** Some image-mode variables are now buffer-local.
|
||||
*** Some 'image-mode' variables are now buffer-local.
|
||||
The image parameters 'image-transform-rotation',
|
||||
'image-transform-scale' and 'image-transform-resize' are now declared
|
||||
buffer-local, so each buffer could have its own values for these
|
||||
parameters.
|
||||
|
||||
** The function 'load' now behaves correctly when loading modules.
|
||||
** Modules
|
||||
|
||||
*** The function 'load' now behaves correctly when loading modules.
|
||||
Specifically, it puts the module name into 'load-history', prints
|
||||
loading messages if requested, and protects against recursive loads.
|
||||
|
||||
*** New module environment function 'process_input' to process user
|
||||
input while module code is running.
|
||||
|
||||
*** New module environment functions 'make_time' and 'extract_time' to
|
||||
convert between timespec structures and Emacs Lisp time values.
|
||||
|
||||
*** New module environment functions 'make_big_integer' and
|
||||
'extract_big_integer' to create and extract arbitrary-size integer
|
||||
values.
|
||||
|
||||
*** emacs-module.h now defines a macro 'EMACS_MAJOR_VERSION' that expands
|
||||
to the major version of the latest Emacs supported by the header.
|
||||
|
||||
+++
|
||||
** The function 'read-variable' now uses its own history list.
|
||||
The history of variable names read by 'read-variable' is recorded in
|
||||
|
@ -1912,13 +2023,10 @@ The new function 'image-scaling-p' can be used to test whether any
|
|||
given frame supports resizing.
|
||||
|
||||
+++
|
||||
** (locale-info 'paper) now returns the paper size on systems that support it.
|
||||
** '(locale-info 'paper)' now returns the paper size on systems that support it.
|
||||
This is currently supported on GNUish hosts and on modern versions of
|
||||
MS-Windows.
|
||||
|
||||
** New module environment function 'process_input' to process user
|
||||
input while module code is running.
|
||||
|
||||
+++
|
||||
** The function 'regexp-opt' accepts an additional optional argument.
|
||||
By default, the regexp returned by 'regexp-opt' may match the strings
|
||||
|
@ -1932,12 +2040,9 @@ returns a regexp that never matches anything, which is an identity for
|
|||
this operation. Previously, the empty string was returned in this
|
||||
case.
|
||||
|
||||
** New module environment functions 'make_time' and 'extract_time' to
|
||||
convert between timespec structures and Emacs Lisp time values.
|
||||
|
||||
** New module environment functions 'make_big_integer' and
|
||||
'extract_big_integer' to create and extract arbitrary-size integer
|
||||
values.
|
||||
** New constant 'regexp-unmatchable' contains a never-matching regexp.
|
||||
It is a convenient and readable way to specify a regexp that should
|
||||
not match anything, and is as fast as any such regexp can be.
|
||||
|
||||
|
||||
* Changes in Emacs 27.1 on Non-Free Operating Systems
|
||||
|
|
|
@ -1117,6 +1117,8 @@ a non-nil `interactive-only' property.
|
|||
The value, if non-nil, is a regexp that specifies what to trim from
|
||||
the start and end of each substring.
|
||||
|
||||
** New function `delete-consecutive-dups'.
|
||||
|
||||
** Completion
|
||||
|
||||
*** The separator used by `completing-read-multiple' is now a regexp.
|
||||
|
|
9
etc/TODO
9
etc/TODO
|
@ -143,15 +143,6 @@ See the 'test' directory for examples.
|
|||
|
||||
* Small but important fixes needed in existing features:
|
||||
|
||||
** Flymake's customization mechanism needs to be both simpler (fewer
|
||||
levels of indirection) and better documented, so it is easier to
|
||||
understand. I find it quite hard to figure out what compilation
|
||||
command it will use.
|
||||
|
||||
I suggest totally rewriting that part of Flymake, using the simplest
|
||||
mechanism that suffices for the specific needs. That will be easy
|
||||
for users to customize.
|
||||
|
||||
** Distribute a bar cursor of width > 1 evenly between the two glyphs
|
||||
on each side of the bar (what to do at the edges?).
|
||||
|
||||
|
|
|
@ -41,8 +41,8 @@ Maintainer: Alfredo Finelli <alfredofnl@tiscali.it>
|
|||
Italian GNU Translation Group <tp@lists.linux.it>
|
||||
|
||||
* TUTORIAL.ja:
|
||||
Author: Kenichi Handa <handa@m17n.org>
|
||||
Maintainer: Kenichi Handa <handa@m17n.org>
|
||||
Author: Kenichi Handa <handa@gnu.org>
|
||||
Maintainer: Kenichi Handa <handa@gnu.org>
|
||||
|
||||
* TUTORIAL.ko:
|
||||
Author: Koaunghi Un <koaunghi@ling.cnu.ac.kr>
|
||||
|
@ -94,4 +94,3 @@ Maintainer: Chao-Hong Liu <chliu@gnu.org>
|
|||
;;; Local Variables:
|
||||
;;; coding: utf-8
|
||||
;;; End:
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
This directory contains a copy of the following file:
|
||||
This directory contains an uncompressed copy of the following file:
|
||||
|
||||
http://openlab.ring.gr.jp/skk/skk/dic/SKK-JISYO.L
|
||||
https://skk-dev.github.io/dict/SKK-JISYO.L.gz
|
||||
|
||||
This file is free software distributed under the terms
|
||||
of the GNU General Public License.
|
||||
|
||||
For more information about this file, please see:
|
||||
|
||||
http://openlab.ring.gr.jp/skk/dic.html
|
||||
https://skk-dev.github.io/dict/
|
||||
https://github.com/skk-dev/dict
|
||||
|
|
Binary file not shown.
|
@ -84,10 +84,7 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
|
|||
# undef DEBUG
|
||||
# define DEBUG true
|
||||
#else
|
||||
# define DEBUG false
|
||||
# ifndef NDEBUG
|
||||
# define NDEBUG /* disable assert */
|
||||
# endif
|
||||
# define DEBUG false
|
||||
#endif
|
||||
|
||||
#include <config.h>
|
||||
|
@ -131,11 +128,6 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
|
|||
#include <c-strcase.h>
|
||||
|
||||
#include <assert.h>
|
||||
#ifdef NDEBUG
|
||||
# undef assert /* some systems have a buggy assert.h */
|
||||
# define assert(x) ((void) 0)
|
||||
#endif
|
||||
|
||||
#include <getopt.h>
|
||||
#include <regex.h>
|
||||
|
||||
|
|
|
@ -140,31 +140,27 @@ main (int argc, char **argv)
|
|||
}
|
||||
else
|
||||
{
|
||||
char *finger = memmem (buf, chunksz, fingerprint, sizeof fingerprint);
|
||||
if (!finger)
|
||||
bool fingered = false;
|
||||
|
||||
for (char *finger = buf;
|
||||
(finger = memmem (finger, buf + chunksz - finger,
|
||||
fingerprint, sizeof fingerprint));
|
||||
finger++)
|
||||
{
|
||||
if (! (fseeko (f, finger - buf, SEEK_SET) == 0
|
||||
&& fwrite (digest, 1, sizeof digest, f) == sizeof digest))
|
||||
{
|
||||
perror (file);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
fingered = true;
|
||||
}
|
||||
|
||||
if (!fingered)
|
||||
{
|
||||
fprintf (stderr, "%s: %s: missing fingerprint\n", prog, file);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
else if (memmem (finger + 1, buf + chunksz - (finger + 1),
|
||||
fingerprint, sizeof fingerprint))
|
||||
{
|
||||
fprintf (stderr, "%s: %s: two occurrences of fingerprint\n",
|
||||
prog, file);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (fseeko (f, finger - buf, SEEK_SET) != 0)
|
||||
{
|
||||
perror (file);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (fwrite (digest, 1, sizeof digest, f) != sizeof digest)
|
||||
{
|
||||
perror (file);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
if (fclose (f) != 0)
|
||||
|
|
|
@ -1046,6 +1046,7 @@ datadir = @datadir@
|
|||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
emacs_major_version = @emacs_major_version@
|
||||
etcdir = @etcdir@
|
||||
etcdocdir = @etcdocdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
|
|
@ -1,40 +1,56 @@
|
|||
/* mktime variant that also uses an offset guess
|
||||
|
||||
/* Internals of mktime and related functions
|
||||
Copyright 2016-2019 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Paul Eggert <eggert@cs.ucla.edu>.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
The GNU C Library 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 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
The GNU C Library 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 this program; if not, see
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <time.h>
|
||||
#ifndef _LIBC
|
||||
# include <time.h>
|
||||
#endif
|
||||
|
||||
/* mktime_offset_t is a signed type wide enough to hold a UTC offset
|
||||
in seconds, and used as part of the type of the offset-guess
|
||||
argument to mktime_internal. Use time_t on platforms where time_t
|
||||
argument to mktime_internal. In Glibc, it is always long int.
|
||||
When in Gnulib, use time_t on platforms where time_t
|
||||
is signed, to be compatible with platforms like BeOS that export
|
||||
this implementation detail of mktime. On platforms where time_t is
|
||||
unsigned, GNU and POSIX code can assume 'int' is at least 32 bits
|
||||
which is wide enough for a UTC offset. */
|
||||
|
||||
#if TIME_T_IS_SIGNED
|
||||
#ifdef _LIBC
|
||||
typedef long int mktime_offset_t;
|
||||
#elif defined TIME_T_IS_SIGNED
|
||||
typedef time_t mktime_offset_t;
|
||||
#else
|
||||
typedef int mktime_offset_t;
|
||||
#endif
|
||||
|
||||
time_t mktime_internal (struct tm *,
|
||||
struct tm * (*) (time_t const *, struct tm *),
|
||||
mktime_offset_t *);
|
||||
/* The source code uses identifiers like __time64_t for glibc
|
||||
timestamps that can contain 64-bit values even when time_t is only
|
||||
32 bits. These are just macros for the ordinary identifiers unless
|
||||
compiling within glibc when time_t is 32 bits. */
|
||||
#if ! (defined _LIBC && __TIMESIZE != 64)
|
||||
# undef __time64_t
|
||||
# define __time64_t time_t
|
||||
# define __gmtime64_r __gmtime_r
|
||||
# define __localtime64_r __localtime_r
|
||||
# define __mktime64 mktime
|
||||
# define __timegm64 timegm
|
||||
#endif
|
||||
|
||||
#ifndef _LIBC
|
||||
|
||||
/* Although glibc source code uses leading underscores, Gnulib wants
|
||||
ordinary names.
|
||||
|
@ -45,9 +61,19 @@ time_t mktime_internal (struct tm *,
|
|||
Similarly for gmtime_r. See the gnulib time_r module for one way
|
||||
to implement this. */
|
||||
|
||||
#undef __gmtime_r
|
||||
#undef __localtime_r
|
||||
#define __gmtime_r gmtime_r
|
||||
#define __localtime_r localtime_r
|
||||
# undef __gmtime_r
|
||||
# undef __localtime_r
|
||||
# define __gmtime_r gmtime_r
|
||||
# define __localtime_r localtime_r
|
||||
|
||||
#define __mktime_internal mktime_internal
|
||||
# define __mktime_internal mktime_internal
|
||||
|
||||
#endif
|
||||
|
||||
/* Subroutine of mktime. Return the time_t representation of TP and
|
||||
normalize TP, given that a struct tm * maps to a time_t as performed
|
||||
by FUNC. Record next guess for localtime-gmtime offset in *OFFSET. */
|
||||
extern __time64_t __mktime_internal (struct tm *tp,
|
||||
struct tm *(*func) (__time64_t const *,
|
||||
struct tm *),
|
||||
mktime_offset_t *offset) attribute_hidden;
|
||||
|
|
71
lib/mktime.c
71
lib/mktime.c
|
@ -112,11 +112,11 @@ my_tzset (void)
|
|||
added to them, and then with another timestamp added, without
|
||||
worrying about overflow.
|
||||
|
||||
Much of the code uses long_int to represent time_t values, to
|
||||
lessen the hassle of dealing with platforms where time_t is
|
||||
Much of the code uses long_int to represent __time64_t values, to
|
||||
lessen the hassle of dealing with platforms where __time64_t is
|
||||
unsigned, and because long_int should suffice to represent all
|
||||
time_t values that mktime can generate even on platforms where
|
||||
time_t is excessively wide. */
|
||||
__time64_t values that mktime can generate even on platforms where
|
||||
__time64_t is wider than the int components of struct tm. */
|
||||
|
||||
#if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60
|
||||
typedef long int long_int;
|
||||
|
@ -144,16 +144,15 @@ shr (long_int a, int b)
|
|||
: a / (one << b) - (a % (one << b) < 0));
|
||||
}
|
||||
|
||||
/* Bounds for the intersection of time_t and long_int. */
|
||||
/* Bounds for the intersection of __time64_t and long_int. */
|
||||
|
||||
static long_int const mktime_min
|
||||
= ((TYPE_SIGNED (time_t) && TYPE_MINIMUM (time_t) < TYPE_MINIMUM (long_int))
|
||||
? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (time_t));
|
||||
= ((TYPE_SIGNED (__time64_t)
|
||||
&& TYPE_MINIMUM (__time64_t) < TYPE_MINIMUM (long_int))
|
||||
? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (__time64_t));
|
||||
static long_int const mktime_max
|
||||
= (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (time_t)
|
||||
? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (time_t));
|
||||
|
||||
verify (TYPE_IS_INTEGER (time_t));
|
||||
= (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (__time64_t)
|
||||
? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (__time64_t));
|
||||
|
||||
#define EPOCH_YEAR 1970
|
||||
#define TM_YEAR_BASE 1900
|
||||
|
@ -252,23 +251,23 @@ tm_diff (long_int year, long_int yday, int hour, int min, int sec,
|
|||
}
|
||||
|
||||
/* Use CONVERT to convert T to a struct tm value in *TM. T must be in
|
||||
range for time_t. Return TM if successful, NULL (setting errno) on
|
||||
range for __time64_t. Return TM if successful, NULL (setting errno) on
|
||||
failure. */
|
||||
static struct tm *
|
||||
convert_time (struct tm *(*convert) (const time_t *, struct tm *),
|
||||
convert_time (struct tm *(*convert) (const __time64_t *, struct tm *),
|
||||
long_int t, struct tm *tm)
|
||||
{
|
||||
time_t x = t;
|
||||
__time64_t x = t;
|
||||
return convert (&x, tm);
|
||||
}
|
||||
|
||||
/* Use CONVERT to convert *T to a broken down time in *TP.
|
||||
If *T is out of range for conversion, adjust it so that
|
||||
it is the nearest in-range value and then convert that.
|
||||
A value is in range if it fits in both time_t and long_int.
|
||||
A value is in range if it fits in both __time64_t and long_int.
|
||||
Return TP on success, NULL (setting errno) on failure. */
|
||||
static struct tm *
|
||||
ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
|
||||
ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *),
|
||||
long_int *t, struct tm *tp)
|
||||
{
|
||||
long_int t1 = (*t < mktime_min ? mktime_min
|
||||
|
@ -310,7 +309,7 @@ ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
|
|||
}
|
||||
|
||||
|
||||
/* Convert *TP to a time_t value, inverting
|
||||
/* Convert *TP to a __time64_t value, inverting
|
||||
the monotonic and mostly-unit-linear conversion function CONVERT.
|
||||
Use *OFFSET to keep track of a guess at the offset of the result,
|
||||
compared to what the result would be for UTC without leap seconds.
|
||||
|
@ -318,9 +317,9 @@ ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
|
|||
If successful, set *TP to the canonicalized struct tm;
|
||||
otherwise leave *TP alone, return ((time_t) -1) and set errno.
|
||||
This function is external because it is used also by timegm.c. */
|
||||
time_t
|
||||
__time64_t
|
||||
__mktime_internal (struct tm *tp,
|
||||
struct tm *(*convert) (const time_t *, struct tm *),
|
||||
struct tm *(*convert) (const __time64_t *, struct tm *),
|
||||
mktime_offset_t *offset)
|
||||
{
|
||||
struct tm tm;
|
||||
|
@ -520,9 +519,9 @@ __mktime_internal (struct tm *tp,
|
|||
|
||||
#if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS
|
||||
|
||||
/* Convert *TP to a time_t value. */
|
||||
time_t
|
||||
mktime (struct tm *tp)
|
||||
/* Convert *TP to a __time64_t value. */
|
||||
__time64_t
|
||||
__mktime64 (struct tm *tp)
|
||||
{
|
||||
/* POSIX.1 8.1.1 requires that whenever mktime() is called, the
|
||||
time zone names contained in the external variable 'tzname' shall
|
||||
|
@ -531,7 +530,7 @@ mktime (struct tm *tp)
|
|||
|
||||
# if defined _LIBC || NEED_MKTIME_WORKING
|
||||
static mktime_offset_t localtime_offset;
|
||||
return __mktime_internal (tp, __localtime_r, &localtime_offset);
|
||||
return __mktime_internal (tp, __localtime64_r, &localtime_offset);
|
||||
# else
|
||||
# undef mktime
|
||||
return mktime (tp);
|
||||
|
@ -539,11 +538,29 @@ mktime (struct tm *tp)
|
|||
}
|
||||
#endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS */
|
||||
|
||||
#ifdef weak_alias
|
||||
weak_alias (mktime, timelocal)
|
||||
#if defined _LIBC && __TIMESIZE != 64
|
||||
|
||||
libc_hidden_def (__mktime64)
|
||||
|
||||
time_t
|
||||
mktime (struct tm *tp)
|
||||
{
|
||||
struct tm tm = *tp;
|
||||
__time64_t t = __mktime64 (&tm);
|
||||
if (in_time_t_range (t))
|
||||
{
|
||||
*tp = tm;
|
||||
return t;
|
||||
}
|
||||
else
|
||||
{
|
||||
__set_errno (EOVERFLOW);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
weak_alias (mktime, timelocal)
|
||||
libc_hidden_def (mktime)
|
||||
libc_hidden_weak (timelocal)
|
||||
#endif
|
||||
|
|
32
lib/timegm.c
32
lib/timegm.c
|
@ -18,17 +18,41 @@
|
|||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _LIBC
|
||||
# include <config.h>
|
||||
# include <libc-config.h>
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "mktime-internal.h"
|
||||
|
||||
__time64_t
|
||||
__timegm64 (struct tm *tmp)
|
||||
{
|
||||
static mktime_offset_t gmtime_offset;
|
||||
tmp->tm_isdst = 0;
|
||||
return __mktime_internal (tmp, __gmtime64_r, &gmtime_offset);
|
||||
}
|
||||
|
||||
#if defined _LIBC && __TIMESIZE != 64
|
||||
|
||||
libc_hidden_def (__timegm64)
|
||||
|
||||
time_t
|
||||
timegm (struct tm *tmp)
|
||||
{
|
||||
static mktime_offset_t gmtime_offset;
|
||||
tmp->tm_isdst = 0;
|
||||
return __mktime_internal (tmp, __gmtime_r, &gmtime_offset);
|
||||
struct tm tm = *tmp;
|
||||
__time64_t t = __timegm64 (&tm);
|
||||
if (in_time_t_range (t))
|
||||
{
|
||||
*tmp = tm;
|
||||
return t;
|
||||
}
|
||||
else
|
||||
{
|
||||
__set_errno (EOVERFLOW);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1985-1987, 1992, 2001-2019 Free Software Foundation,
|
||||
;; Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: abbrev convenience
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: John Wiegley <johnw@gnu.org>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience languages lisp
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -415,7 +415,11 @@ this."
|
|||
;; if the rest of the region should have a face, put it there
|
||||
(funcall ansi-color-apply-face-function
|
||||
start-marker end-marker (ansi-color--find-face codes))
|
||||
(setq ansi-color-context-region (if codes (list codes)))))))
|
||||
(setq ansi-color-context-region (if codes (list codes)))))
|
||||
;; Clean up our temporary markers.
|
||||
(unless (eq start-marker (cadr ansi-color-context-region))
|
||||
(set-marker start-marker nil))
|
||||
(set-marker end-marker nil)))
|
||||
|
||||
(defun ansi-color-apply-overlay-face (beg end face)
|
||||
"Make an overlay from BEG to END, and apply face FACE.
|
||||
|
@ -425,6 +429,12 @@ If FACE is nil, do nothing."
|
|||
(ansi-color-make-extent beg end)
|
||||
face)))
|
||||
|
||||
(defun ansi-color-apply-text-property-face (beg end face)
|
||||
"Set the `font-lock-face' property to FACE in region BEG..END.
|
||||
If FACE is nil, do nothing."
|
||||
(when face
|
||||
(put-text-property beg end 'font-lock-face face)))
|
||||
|
||||
;; This function helps you look for overlapping overlays. This is
|
||||
;; useful in comint-buffers. Overlapping overlays should not happen!
|
||||
;; A possible cause for bugs are the markers. If you create an overlay
|
||||
|
|
209
lisp/arc-mode.el
209
lisp/arc-mode.el
|
@ -417,70 +417,66 @@ file. Archive and member name will be added."
|
|||
(substitute-key-definition 'advertised-undo 'archive-undo map global-map)
|
||||
(substitute-key-definition 'undo 'archive-undo map global-map))
|
||||
|
||||
(define-key map
|
||||
(if (featurep 'xemacs) 'button2 [mouse-2]) 'archive-extract)
|
||||
(define-key map [mouse-2] 'archive-extract)
|
||||
|
||||
(if (featurep 'xemacs)
|
||||
() ; out of luck
|
||||
(define-key map [menu-bar immediate]
|
||||
(cons "Immediate" (make-sparse-keymap "Immediate")))
|
||||
(define-key map [menu-bar immediate alternate]
|
||||
'(menu-item "Alternate Display" archive-alternate-display
|
||||
:enable (boundp (archive-name "alternate-display"))
|
||||
:help "Toggle alternate file info display"))
|
||||
(define-key map [menu-bar immediate view]
|
||||
'(menu-item "View This File" archive-view
|
||||
:help "Display file at cursor in View Mode"))
|
||||
(define-key map [menu-bar immediate display]
|
||||
'(menu-item "Display in Other Window" archive-display-other-window
|
||||
:help "Display file at cursor in another window"))
|
||||
(define-key map [menu-bar immediate find-file-other-window]
|
||||
'(menu-item "Find in Other Window" archive-extract-other-window
|
||||
:help "Edit file at cursor in another window"))
|
||||
(define-key map [menu-bar immediate find-file]
|
||||
'(menu-item "Find This File" archive-extract
|
||||
:help "Extract file at cursor and edit it"))
|
||||
|
||||
(define-key map [menu-bar immediate]
|
||||
(cons "Immediate" (make-sparse-keymap "Immediate")))
|
||||
(define-key map [menu-bar immediate alternate]
|
||||
'(menu-item "Alternate Display" archive-alternate-display
|
||||
:enable (boundp (archive-name "alternate-display"))
|
||||
:help "Toggle alternate file info display"))
|
||||
(define-key map [menu-bar immediate view]
|
||||
'(menu-item "View This File" archive-view
|
||||
:help "Display file at cursor in View Mode"))
|
||||
(define-key map [menu-bar immediate display]
|
||||
'(menu-item "Display in Other Window" archive-display-other-window
|
||||
:help "Display file at cursor in another window"))
|
||||
(define-key map [menu-bar immediate find-file-other-window]
|
||||
'(menu-item "Find in Other Window" archive-extract-other-window
|
||||
:help "Edit file at cursor in another window"))
|
||||
(define-key map [menu-bar immediate find-file]
|
||||
'(menu-item "Find This File" archive-extract
|
||||
:help "Extract file at cursor and edit it"))
|
||||
(define-key map [menu-bar mark]
|
||||
(cons "Mark" (make-sparse-keymap "Mark")))
|
||||
(define-key map [menu-bar mark unmark-all]
|
||||
'(menu-item "Unmark All" archive-unmark-all-files
|
||||
:help "Unmark all marked files"))
|
||||
(define-key map [menu-bar mark deletion]
|
||||
'(menu-item "Flag" archive-flag-deleted
|
||||
:help "Flag file at cursor for deletion"))
|
||||
(define-key map [menu-bar mark unmark]
|
||||
'(menu-item "Unflag" archive-unflag
|
||||
:help "Unmark file at cursor"))
|
||||
(define-key map [menu-bar mark mark]
|
||||
'(menu-item "Mark" archive-mark
|
||||
:help "Mark file at cursor"))
|
||||
|
||||
(define-key map [menu-bar mark]
|
||||
(cons "Mark" (make-sparse-keymap "Mark")))
|
||||
(define-key map [menu-bar mark unmark-all]
|
||||
'(menu-item "Unmark All" archive-unmark-all-files
|
||||
:help "Unmark all marked files"))
|
||||
(define-key map [menu-bar mark deletion]
|
||||
'(menu-item "Flag" archive-flag-deleted
|
||||
:help "Flag file at cursor for deletion"))
|
||||
(define-key map [menu-bar mark unmark]
|
||||
'(menu-item "Unflag" archive-unflag
|
||||
:help "Unmark file at cursor"))
|
||||
(define-key map [menu-bar mark mark]
|
||||
'(menu-item "Mark" archive-mark
|
||||
:help "Mark file at cursor"))
|
||||
|
||||
(define-key map [menu-bar operate]
|
||||
(cons "Operate" (make-sparse-keymap "Operate")))
|
||||
(define-key map [menu-bar operate chown]
|
||||
'(menu-item "Change Owner..." archive-chown-entry
|
||||
:enable (fboundp (archive-name "chown-entry"))
|
||||
:help "Change owner of marked files"))
|
||||
(define-key map [menu-bar operate chgrp]
|
||||
'(menu-item "Change Group..." archive-chgrp-entry
|
||||
:enable (fboundp (archive-name "chgrp-entry"))
|
||||
:help "Change group ownership of marked files"))
|
||||
(define-key map [menu-bar operate chmod]
|
||||
'(menu-item "Change Mode..." archive-chmod-entry
|
||||
:enable (fboundp (archive-name "chmod-entry"))
|
||||
:help "Change mode (permissions) of marked files"))
|
||||
(define-key map [menu-bar operate rename]
|
||||
'(menu-item "Rename to..." archive-rename-entry
|
||||
:enable (fboundp (archive-name "rename-entry"))
|
||||
:help "Rename marked files"))
|
||||
;;(define-key map [menu-bar operate copy]
|
||||
;; '(menu-item "Copy to..." archive-copy))
|
||||
(define-key map [menu-bar operate expunge]
|
||||
'(menu-item "Expunge Marked Files" archive-expunge
|
||||
:help "Delete all flagged files from archive"))
|
||||
map))
|
||||
(define-key map [menu-bar operate]
|
||||
(cons "Operate" (make-sparse-keymap "Operate")))
|
||||
(define-key map [menu-bar operate chown]
|
||||
'(menu-item "Change Owner..." archive-chown-entry
|
||||
:enable (fboundp (archive-name "chown-entry"))
|
||||
:help "Change owner of marked files"))
|
||||
(define-key map [menu-bar operate chgrp]
|
||||
'(menu-item "Change Group..." archive-chgrp-entry
|
||||
:enable (fboundp (archive-name "chgrp-entry"))
|
||||
:help "Change group ownership of marked files"))
|
||||
(define-key map [menu-bar operate chmod]
|
||||
'(menu-item "Change Mode..." archive-chmod-entry
|
||||
:enable (fboundp (archive-name "chmod-entry"))
|
||||
:help "Change mode (permissions) of marked files"))
|
||||
(define-key map [menu-bar operate rename]
|
||||
'(menu-item "Rename to..." archive-rename-entry
|
||||
:enable (fboundp (archive-name "rename-entry"))
|
||||
:help "Rename marked files"))
|
||||
;;(define-key map [menu-bar operate copy]
|
||||
;; '(menu-item "Copy to..." archive-copy))
|
||||
(define-key map [menu-bar operate expunge]
|
||||
'(menu-item "Expunge Marked Files" archive-expunge
|
||||
:help "Delete all flagged files from archive"))
|
||||
map)
|
||||
"Local keymap for archive mode listings.")
|
||||
(defvar archive-file-name-indent nil "Column where file names start.")
|
||||
|
||||
|
@ -516,17 +512,12 @@ Each descriptor is a vector of the form
|
|||
;; -------------------------------------------------------------------------
|
||||
;;; Section: Support functions.
|
||||
|
||||
(eval-when-compile
|
||||
(defsubst byte-after (pos)
|
||||
"Like char-after but an eight-bit char is converted to unibyte."
|
||||
(multibyte-char-to-unibyte (char-after pos)))
|
||||
(defsubst insert-unibyte (&rest args)
|
||||
"Like insert but don't make unibyte string and eight-bit char multibyte."
|
||||
(dolist (elt args)
|
||||
(if (integerp elt)
|
||||
(insert (if (< elt 128) elt (decode-char 'eight-bit elt)))
|
||||
(insert (string-to-multibyte elt)))))
|
||||
)
|
||||
(defun arc-insert-unibyte (&rest args)
|
||||
"Like insert but don't make unibyte string and eight-bit char multibyte."
|
||||
(dolist (elt args)
|
||||
(if (integerp elt)
|
||||
(insert (if (< elt 128) elt (decode-char 'eight-bit elt)))
|
||||
(insert elt))))
|
||||
|
||||
(defsubst archive-name (suffix)
|
||||
(intern (concat "archive-" (symbol-name archive-subtype) "-" suffix)))
|
||||
|
@ -538,7 +529,8 @@ in which case a second argument, length LEN, should be supplied."
|
|||
(if (stringp str)
|
||||
(setq len (length str))
|
||||
(setq str (buffer-substring str (+ str len))))
|
||||
(setq str (string-as-unibyte str))
|
||||
(if (multibyte-string-p str)
|
||||
(setq str (encode-coding-string str 'utf-8-emacs-unix)))
|
||||
(let ((result 0)
|
||||
(i 0))
|
||||
(while (< i len)
|
||||
|
@ -842,13 +834,11 @@ when parsing the archive."
|
|||
;; Using `concat' here copies the text also, so we can add
|
||||
;; properties without problems.
|
||||
(let ((text (concat (aref fil 0) "\n")))
|
||||
(if (featurep 'xemacs)
|
||||
() ; out of luck
|
||||
(add-text-properties
|
||||
(aref fil 1) (aref fil 2)
|
||||
'(mouse-face highlight
|
||||
help-echo "mouse-2: extract this file into a buffer")
|
||||
text))
|
||||
(add-text-properties
|
||||
(aref fil 1) (aref fil 2)
|
||||
'(mouse-face highlight
|
||||
help-echo "mouse-2: extract this file into a buffer")
|
||||
text)
|
||||
text))
|
||||
files)))
|
||||
(setq archive-file-list-end (point-marker)))
|
||||
|
@ -1492,8 +1482,8 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
files
|
||||
visual)
|
||||
(while (and (< (+ p 29) (point-max))
|
||||
(= (byte-after p) ?\C-z)
|
||||
(> (byte-after (1+ p)) 0))
|
||||
(= (get-byte p) ?\C-z)
|
||||
(> (get-byte (1+ p)) 0))
|
||||
(let* ((namefld (buffer-substring (+ p 2) (+ p 2 13)))
|
||||
(fnlen (or (string-match "\0" namefld) 13))
|
||||
(efnname (decode-coding-string (substring namefld 0 fnlen)
|
||||
|
@ -1546,7 +1536,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(widen)
|
||||
(goto-char (+ archive-proper-file-start (aref descr 4) 2))
|
||||
(delete-char 13)
|
||||
(insert-unibyte name)))))
|
||||
(arc-insert-unibyte name)))))
|
||||
;; -------------------------------------------------------------------------
|
||||
;;; Section: Lzh Archives
|
||||
|
||||
|
@ -1558,13 +1548,13 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
visual)
|
||||
(while (progn (goto-char p) ;beginning of a base header.
|
||||
(looking-at "\\(.\\|\n\\)\\(.\\|\n\\)-l[hz][0-9ds]-"))
|
||||
(let* ((hsize (byte-after p)) ;size of the base header (level 0 and 1)
|
||||
(let* ((hsize (get-byte p)) ;size of the base header (level 0 and 1)
|
||||
(csize (archive-l-e (+ p 7) 4)) ;size of a compressed file to follow (level 0 and 2),
|
||||
;size of extended headers + the compressed file to follow (level 1).
|
||||
(ucsize (archive-l-e (+ p 11) 4)) ;size of an uncompressed file.
|
||||
(time1 (archive-l-e (+ p 15) 2)) ;date/time (MSDOS format in level 0, 1 headers
|
||||
(time2 (archive-l-e (+ p 17) 2)) ;and UNIX format in level 2 header.)
|
||||
(hdrlvl (byte-after (+ p 20))) ;header level
|
||||
(hdrlvl (get-byte (+ p 20))) ;header level
|
||||
thsize ;total header size (base + extensions)
|
||||
fnlen efnname osid fiddle ifnname width p2
|
||||
neh ;beginning of next extension header (level 1 and 2)
|
||||
|
@ -1572,7 +1562,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
gname uname modtime moddate)
|
||||
(if (= hdrlvl 3) (error "can't handle lzh level 3 header type"))
|
||||
(when (or (= hdrlvl 0) (= hdrlvl 1))
|
||||
(setq fnlen (byte-after (+ p 21))) ;filename length
|
||||
(setq fnlen (get-byte (+ p 21))) ;filename length
|
||||
(setq efnname (let ((str (buffer-substring (+ p 22) (+ p 22 fnlen)))) ;filename from offset 22
|
||||
(decode-coding-string
|
||||
str archive-file-name-coding-system)))
|
||||
|
@ -1583,19 +1573,19 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(setq neh (+ p 24)))) ;specific to level 2 header
|
||||
(if neh ;if level 1 or 2 we expect extension headers to follow
|
||||
(let* ((ehsize (archive-l-e neh 2)) ;size of the extension header
|
||||
(etype (byte-after (+ neh 2)))) ;extension type
|
||||
(etype (get-byte (+ neh 2)))) ;extension type
|
||||
(while (not (= ehsize 0))
|
||||
(cond
|
||||
((= etype 1) ;file name
|
||||
(let ((i (+ neh 3)))
|
||||
(while (< i (+ neh ehsize))
|
||||
(setq efnname (concat efnname (char-to-string (byte-after i))))
|
||||
(setq efnname (concat efnname (char-to-string (get-byte i))))
|
||||
(setq i (1+ i)))))
|
||||
((= etype 2) ;directory name
|
||||
(let ((i (+ neh 3)))
|
||||
(while (< i (+ neh ehsize))
|
||||
(setq dir (concat dir
|
||||
(if (= (byte-after i)
|
||||
(if (= (get-byte i)
|
||||
255)
|
||||
"/"
|
||||
(char-to-string
|
||||
|
@ -1619,7 +1609,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
)
|
||||
(setq neh (+ neh ehsize))
|
||||
(setq ehsize (archive-l-e neh 2))
|
||||
(setq etype (byte-after (+ neh 2))))
|
||||
(setq etype (get-byte (+ neh 2))))
|
||||
;;get total header size for level 1 and 2 headers
|
||||
(setq thsize (- neh p))))
|
||||
(if (= hdrlvl 0) ;total header size
|
||||
|
@ -1706,7 +1696,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(let ((sum 0))
|
||||
(while (> count 0)
|
||||
(setq count (1- count)
|
||||
sum (+ sum (byte-after p))
|
||||
sum (+ sum (get-byte p))
|
||||
p (1+ p)))
|
||||
(logand sum 255)))
|
||||
|
||||
|
@ -1715,8 +1705,8 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(save-excursion
|
||||
(widen)
|
||||
(let* ((p (+ archive-proper-file-start (aref descr 4)))
|
||||
(oldhsize (byte-after p))
|
||||
(oldfnlen (byte-after (+ p 21)))
|
||||
(oldhsize (get-byte p))
|
||||
(oldfnlen (get-byte (+ p 21)))
|
||||
(newfnlen (length newname))
|
||||
(newhsize (+ oldhsize newfnlen (- oldfnlen)))
|
||||
(inhibit-read-only t))
|
||||
|
@ -1724,10 +1714,10 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(error "The file name is too long"))
|
||||
(goto-char (+ p 21))
|
||||
(delete-char (1+ oldfnlen))
|
||||
(insert-unibyte newfnlen newname)
|
||||
(arc-insert-unibyte newfnlen newname)
|
||||
(goto-char p)
|
||||
(delete-char 2)
|
||||
(insert-unibyte newhsize (archive-lzh-resum p newhsize))))))
|
||||
(arc-insert-unibyte newhsize (archive-lzh-resum p newhsize))))))
|
||||
|
||||
(defun archive-lzh-ogm (newval files errtxt ofs)
|
||||
(save-excursion
|
||||
|
@ -1735,10 +1725,10 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(widen)
|
||||
(dolist (fil files)
|
||||
(let* ((p (+ archive-proper-file-start (aref fil 4)))
|
||||
(hsize (byte-after p))
|
||||
(fnlen (byte-after (+ p 21)))
|
||||
(hsize (get-byte p))
|
||||
(fnlen (get-byte (+ p 21)))
|
||||
(p2 (+ p 22 fnlen))
|
||||
(creator (if (>= (- hsize fnlen) 24) (byte-after (+ p2 2)) 0))
|
||||
(creator (if (>= (- hsize fnlen) 24) (get-byte (+ p2 2)) 0))
|
||||
(inhibit-read-only t))
|
||||
(if (= creator ?U)
|
||||
(progn
|
||||
|
@ -1746,10 +1736,10 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(setq newval (funcall newval (archive-l-e (+ p2 ofs) 2))))
|
||||
(goto-char (+ p2 ofs))
|
||||
(delete-char 2)
|
||||
(insert-unibyte (logand newval 255) (ash newval -8))
|
||||
(arc-insert-unibyte (logand newval 255) (ash newval -8))
|
||||
(goto-char (1+ p))
|
||||
(delete-char 1)
|
||||
(insert-unibyte (archive-lzh-resum (1+ p) hsize)))
|
||||
(arc-insert-unibyte (archive-lzh-resum (1+ p) hsize)))
|
||||
(message "Member %s does not have %s field"
|
||||
(aref fil 1) errtxt)))))))
|
||||
|
||||
|
@ -1821,7 +1811,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(setq p (archive-l-e (+ p 48) 8)))
|
||||
(setq p (+ p (point-min)))
|
||||
(while (string= "PK\001\002" (buffer-substring p (+ p 4)))
|
||||
(let* ((creator (byte-after (+ p 5)))
|
||||
(let* ((creator (get-byte (+ p 5)))
|
||||
;; (method (archive-l-e (+ p 10) 2))
|
||||
(modtime (archive-l-e (+ p 12) 2))
|
||||
(moddate (archive-l-e (+ p 14) 2))
|
||||
|
@ -1841,7 +1831,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(logior ?\444
|
||||
(if isdir (logior 16384 ?\111) 0)
|
||||
(if (zerop
|
||||
(logand 1 (byte-after (+ p 38))))
|
||||
(logand 1 (get-byte (+ p 38))))
|
||||
?\222 0)))
|
||||
(t nil)))
|
||||
(modestr (if mode (archive-int-to-mode mode) "??????????"))
|
||||
|
@ -1918,18 +1908,19 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(widen)
|
||||
(dolist (fil files)
|
||||
(let* ((p (+ archive-proper-file-start (car (aref fil 4))))
|
||||
(creator (byte-after (+ p 5)))
|
||||
(creator (get-byte (+ p 5)))
|
||||
(oldmode (aref fil 3))
|
||||
(newval (archive-calc-mode oldmode newmode t))
|
||||
(inhibit-read-only t))
|
||||
(cond ((memq creator '(2 3)) ; Unix
|
||||
(goto-char (+ p 40))
|
||||
(delete-char 2)
|
||||
(insert-unibyte (logand newval 255) (ash newval -8)))
|
||||
(arc-insert-unibyte (logand newval 255) (ash newval -8)))
|
||||
((memq creator '(0 5 6 7 10 11 15)) ; Dos etc.
|
||||
(goto-char (+ p 38))
|
||||
(insert-unibyte (logior (logand (byte-after (point)) 254)
|
||||
(logand (logxor 1 (ash newval -7)) 1)))
|
||||
(arc-insert-unibyte
|
||||
(logior (logand (get-byte (point)) 254)
|
||||
(logand (logxor 1 (ash newval -7)) 1)))
|
||||
(delete-char 1))
|
||||
(t (message "Don't know how to change mode for this member"))))
|
||||
))))
|
||||
|
@ -1949,9 +1940,9 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
|
|||
(modtime (archive-l-e (+ p 16) 2))
|
||||
(ucsize (archive-l-e (+ p 20) 4))
|
||||
(namefld (buffer-substring (+ p 38) (+ p 38 13)))
|
||||
(dirtype (byte-after (+ p 4)))
|
||||
(lfnlen (if (= dirtype 2) (byte-after (+ p 56)) 0))
|
||||
(ldirlen (if (= dirtype 2) (byte-after (+ p 57)) 0))
|
||||
(dirtype (get-byte (+ p 4)))
|
||||
(lfnlen (if (= dirtype 2) (get-byte (+ p 56)) 0))
|
||||
(ldirlen (if (= dirtype 2) (get-byte (+ p 57)) 0))
|
||||
(fnlen (or (string-match "\0" namefld) 13))
|
||||
(efnname (let ((str
|
||||
(concat
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1987, 2000-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: David M. Brown
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: extensions
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
;; Author: Charlie Martin <crm@cs.duke.edu>
|
||||
;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org>
|
||||
;; Keywords: convenience
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
|
||||
;; Dependencies:
|
||||
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
(require 'cl-lib)
|
||||
(require 'timer)
|
||||
(require 'filenotify)
|
||||
|
||||
|
@ -126,8 +126,6 @@ Global Auto-Revert Mode does so in all buffers."
|
|||
|
||||
;; Variables:
|
||||
|
||||
;;; What's this?: ;; Autoload for the benefit of `make-mode-line-mouse-sensitive'.
|
||||
;;; What's this?: ;;;###autoload
|
||||
(defvar auto-revert-mode nil
|
||||
"Non-nil when Auto-Revert Mode is active.
|
||||
Never set this variable directly, use the command `auto-revert-mode' instead.")
|
||||
|
@ -302,6 +300,27 @@ You should set this variable through Custom."
|
|||
:type 'regexp
|
||||
:version "24.4")
|
||||
|
||||
(defcustom auto-revert-avoid-polling nil
|
||||
"Non-nil to avoid polling files when notification is available.
|
||||
|
||||
Set this variable to a non-nil value to save power by avoiding
|
||||
polling when possible. Files on file-systems that do not support
|
||||
change notifications must match `auto-revert-notify-exclude-dir-regexp'
|
||||
for Auto-Revert to work properly in this case. This typically
|
||||
includes files on network file systems on Unix-like machines,
|
||||
when those files are modified from another computer.
|
||||
|
||||
When nil, buffers in Auto-Revert Mode will always be polled for
|
||||
changes to their files on disk every `auto-revert-interval'
|
||||
seconds, in addition to using notification for those files."
|
||||
:group 'auto-revert
|
||||
:type 'boolean
|
||||
:set (lambda (variable value)
|
||||
(set-default variable value)
|
||||
(when (fboundp 'auto-revert-set-timer)
|
||||
(auto-revert-set-timer)))
|
||||
:version "27.1")
|
||||
|
||||
;; Internal variables:
|
||||
|
||||
(defvar auto-revert-buffer-list ()
|
||||
|
@ -313,6 +332,9 @@ buffers to this list.
|
|||
The timer function `auto-revert-buffers' is responsible for purging
|
||||
the list of old buffers.")
|
||||
|
||||
(defvar-local auto-revert--global-mode nil
|
||||
"Non-nil if buffer is handled by Global Auto-Revert mode.")
|
||||
|
||||
(defvar auto-revert-remaining-buffers ()
|
||||
"Buffers not checked when user input stopped execution.")
|
||||
|
||||
|
@ -341,6 +363,9 @@ buffer.")
|
|||
"Non-nil when file has been modified on the file system.
|
||||
This has been reported by a file notification event.")
|
||||
|
||||
(defvar auto-revert-debug nil
|
||||
"Use for debug messages.")
|
||||
|
||||
;; Functions:
|
||||
|
||||
(defun auto-revert-remove-current-buffer (&optional buffer)
|
||||
|
@ -476,11 +501,107 @@ specifies in the mode line."
|
|||
:global t :group 'auto-revert :lighter global-auto-revert-mode-text
|
||||
(auto-revert-set-timer)
|
||||
(if global-auto-revert-mode
|
||||
(auto-revert-buffers)
|
||||
;; Turn global-auto-revert-mode ON.
|
||||
(progn
|
||||
(dolist (buf (buffer-list))
|
||||
(with-current-buffer buf
|
||||
(auto-revert--global-add-current-buffer)))
|
||||
;; Make sure future buffers are added as well.
|
||||
(add-hook 'find-file-hook #'auto-revert--global-adopt-current-buffer)
|
||||
(add-hook 'after-set-visited-file-name-hook
|
||||
#'auto-revert--global-set-visited-file-name)
|
||||
;; To track non-file buffers, we need to listen in to buffer
|
||||
;; creation in general. Listening to major-mode changes is
|
||||
;; suitable, since we then know whether it's a mode that is tracked.
|
||||
(when global-auto-revert-non-file-buffers
|
||||
(add-hook 'after-change-major-mode-hook
|
||||
#'auto-revert--global-adopt-current-buffer))
|
||||
(auto-revert-buffers))
|
||||
;; Turn global-auto-revert-mode OFF.
|
||||
(remove-hook 'after-change-major-mode-hook
|
||||
#'auto-revert--global-adopt-current-buffer)
|
||||
(remove-hook 'after-set-visited-file-name-hook
|
||||
#'auto-revert--global-set-visited-file-name)
|
||||
(remove-hook 'find-file-hook #'auto-revert--global-adopt-current-buffer)
|
||||
(dolist (buf (buffer-list))
|
||||
(with-current-buffer buf
|
||||
(when auto-revert-notify-watch-descriptor
|
||||
(auto-revert-notify-rm-watch))))))
|
||||
(when auto-revert--global-mode
|
||||
(setq auto-revert--global-mode nil)
|
||||
(when (and auto-revert-notify-watch-descriptor
|
||||
(not (or auto-revert-mode auto-revert-tail-mode)))
|
||||
(auto-revert-notify-rm-watch)))))))
|
||||
|
||||
(defun auto-revert--global-add-current-buffer ()
|
||||
"Set current buffer to be tracked by Global Auto-Revert if appropriate."
|
||||
(when (and (not auto-revert--global-mode)
|
||||
(or buffer-file-name
|
||||
(and global-auto-revert-non-file-buffers
|
||||
(not (string-prefix-p " " (buffer-name)))
|
||||
;; Any non-file buffer must have a custom
|
||||
;; `buffer-stale-function' to be tracked, since
|
||||
;; we wouldn't know when to revert it otherwise.
|
||||
(not (eq buffer-stale-function
|
||||
#'buffer-stale--default-function))))
|
||||
(not (memq 'major-mode global-auto-revert-ignore-modes))
|
||||
(not global-auto-revert-ignore-buffer))
|
||||
(setq auto-revert--global-mode t)))
|
||||
|
||||
(defun auto-revert--global-adopt-current-buffer ()
|
||||
"Consider tracking current buffer in a running Global Auto-Revert mode."
|
||||
(auto-revert--global-add-current-buffer)
|
||||
(auto-revert-set-timer))
|
||||
|
||||
(defun auto-revert--global-set-visited-file-name ()
|
||||
"Update Global Auto-Revert management of the current buffer.
|
||||
Called after `set-visited-file-name'."
|
||||
;; Remove any existing notifier first so that we don't track the
|
||||
;; wrong file in case the file name was changed.
|
||||
(when auto-revert-notify-watch-descriptor
|
||||
(auto-revert-notify-rm-watch))
|
||||
(auto-revert--global-adopt-current-buffer))
|
||||
|
||||
(defun auto-revert--polled-buffers ()
|
||||
"List of buffers that need to be polled."
|
||||
(cond (global-auto-revert-mode
|
||||
(mapcan (lambda (buffer)
|
||||
(and (not (and auto-revert-avoid-polling
|
||||
(buffer-local-value
|
||||
'auto-revert-notify-watch-descriptor
|
||||
buffer)))
|
||||
(or (buffer-local-value
|
||||
'auto-revert--global-mode buffer)
|
||||
(buffer-local-value 'auto-revert-mode buffer)
|
||||
(buffer-local-value 'auto-revert-tail-mode buffer))
|
||||
(list buffer)))
|
||||
(buffer-list)))
|
||||
(auto-revert-avoid-polling
|
||||
(mapcan (lambda (buffer)
|
||||
(and (not (buffer-local-value
|
||||
'auto-revert-notify-watch-descriptor buffer))
|
||||
(list buffer)))
|
||||
auto-revert-buffer-list))
|
||||
(t auto-revert-buffer-list)))
|
||||
|
||||
;; Same as above in a boolean context, but cheaper.
|
||||
(defun auto-revert--need-polling-p ()
|
||||
"Whether periodic polling is required."
|
||||
(cond (global-auto-revert-mode
|
||||
(or (not auto-revert-avoid-polling)
|
||||
(cl-some
|
||||
(lambda (buffer)
|
||||
(and (not (buffer-local-value
|
||||
'auto-revert-notify-watch-descriptor buffer))
|
||||
(or (buffer-local-value 'auto-revert--global-mode buffer)
|
||||
(buffer-local-value 'auto-revert-mode buffer)
|
||||
(buffer-local-value 'auto-revert-tail-mode buffer))))
|
||||
(buffer-list))))
|
||||
(auto-revert-avoid-polling
|
||||
(not (cl-every
|
||||
(lambda (buffer)
|
||||
(buffer-local-value
|
||||
'auto-revert-notify-watch-descriptor buffer))
|
||||
auto-revert-buffer-list)))
|
||||
(t auto-revert-buffer-list)))
|
||||
|
||||
(defun auto-revert-set-timer ()
|
||||
"Restart or cancel the timer used by Auto-Revert Mode.
|
||||
|
@ -492,10 +613,10 @@ will use an up-to-date value of `auto-revert-interval'"
|
|||
(if (timerp auto-revert-timer)
|
||||
(cancel-timer auto-revert-timer))
|
||||
(setq auto-revert-timer
|
||||
(if (or global-auto-revert-mode auto-revert-buffer-list)
|
||||
(run-with-timer auto-revert-interval
|
||||
auto-revert-interval
|
||||
'auto-revert-buffers))))
|
||||
(and (auto-revert--need-polling-p)
|
||||
(run-with-timer auto-revert-interval
|
||||
auto-revert-interval
|
||||
'auto-revert-buffers))))
|
||||
|
||||
(defun auto-revert-notify-rm-watch ()
|
||||
"Disable file notification for current buffer's associated file."
|
||||
|
@ -558,24 +679,20 @@ will use an up-to-date value of `auto-revert-interval'"
|
|||
;; often, we want to skip some revert operations so that we don't spend all our
|
||||
;; time reverting the buffer.
|
||||
;;
|
||||
;; We do this by reverting immediately in response to the first in a flurry of
|
||||
;; notifications. We suppress subsequent notifications until the next time
|
||||
;; `auto-revert-buffers' is called (this happens on a timer with a period set by
|
||||
;; `auto-revert-interval').
|
||||
(defvar auto-revert-buffers-counter 1
|
||||
"Incremented each time `auto-revert-buffers' is called")
|
||||
(defvar-local auto-revert-buffers-counter-lockedout 0
|
||||
"Buffer-local value to indicate whether we should immediately
|
||||
update the buffer on a notification event or not. If
|
||||
;; We do this by reverting immediately in response to the first in a
|
||||
;; flurry of notifications. Any notifications during the following
|
||||
;; `auto-revert-lockout-interval' seconds are noted but not acted upon
|
||||
;; until the end of that interval.
|
||||
|
||||
(= auto-revert-buffers-counter-lockedout
|
||||
auto-revert-buffers-counter)
|
||||
(defconst auto-revert--lockout-interval 2.5
|
||||
"Duration, in seconds, of the Auto-Revert Mode notification lockout.
|
||||
This is the quiescence after each notification of a file being
|
||||
changed during which no automatic reverting takes place, to
|
||||
prevent many updates in rapid succession from overwhelming the
|
||||
system.")
|
||||
|
||||
then the updates are locked out, and we wait until the next call
|
||||
of `auto-revert-buffers' to revert the buffer. If no lockout is
|
||||
present, then we revert immediately and set the lockout, so that
|
||||
no more reverts are possible until the next call of
|
||||
`auto-revert-buffers'")
|
||||
(defvar-local auto-revert--lockout-timer nil
|
||||
"Timer awaiting the end of the notification lockout interval, or nil.")
|
||||
|
||||
(defun auto-revert-notify-handler (event)
|
||||
"Handle an EVENT returned from file notification."
|
||||
|
@ -591,6 +708,8 @@ no more reverts are possible until the next call of
|
|||
;; Since we watch a directory, a file name must be returned.
|
||||
(cl-assert (stringp file))
|
||||
(when (eq action 'renamed) (cl-assert (stringp file1)))
|
||||
(when auto-revert-debug
|
||||
(message "auto-revert-notify-handler %S" event))
|
||||
|
||||
(if (eq action 'stopped)
|
||||
;; File notification has stopped. Continue with polling.
|
||||
|
@ -604,7 +723,10 @@ no more reverts are possible until the next call of
|
|||
(file-name-nondirectory buffer-file-name)))
|
||||
;; A buffer w/o a file, like dired.
|
||||
(null buffer-file-name))
|
||||
(auto-revert-notify-rm-watch))))
|
||||
(auto-revert-notify-rm-watch)
|
||||
;; Restart the timer if it wasn't running.
|
||||
(unless auto-revert-timer)
|
||||
(auto-revert-set-timer))))
|
||||
|
||||
;; Loop over all buffers, in order to find the intended one.
|
||||
(cl-dolist (buffer buffers)
|
||||
|
@ -630,19 +752,27 @@ no more reverts are possible until the next call of
|
|||
(setq auto-revert-notify-modified-p t)
|
||||
|
||||
;; Revert the buffer now if we're not locked out.
|
||||
(when (/= auto-revert-buffers-counter-lockedout
|
||||
auto-revert-buffers-counter)
|
||||
(unless auto-revert--lockout-timer
|
||||
(auto-revert-handler)
|
||||
(setq auto-revert-buffers-counter-lockedout
|
||||
auto-revert-buffers-counter))))))))))
|
||||
(setq auto-revert--lockout-timer
|
||||
(run-with-timer
|
||||
auto-revert--lockout-interval nil
|
||||
#'auto-revert--end-lockout buffer)))))))))))
|
||||
|
||||
(defun auto-revert--end-lockout (buffer)
|
||||
"End the lockout period after a notification.
|
||||
If the buffer needs to be reverted, do it now."
|
||||
(when (buffer-live-p buffer)
|
||||
(with-current-buffer buffer
|
||||
(setq auto-revert--lockout-timer nil)
|
||||
(when auto-revert-notify-modified-p
|
||||
(auto-revert-handler)))))
|
||||
|
||||
(defun auto-revert-active-p ()
|
||||
"Check if auto-revert is active (in current buffer or globally)."
|
||||
"Check if auto-revert is active in current buffer."
|
||||
(or auto-revert-mode
|
||||
auto-revert-tail-mode
|
||||
(and global-auto-revert-mode
|
||||
(not global-auto-revert-ignore-buffer)
|
||||
(not (memq major-mode global-auto-revert-ignore-modes)))))
|
||||
auto-revert--global-mode))
|
||||
|
||||
(defun auto-revert-handler ()
|
||||
"Revert current buffer, if appropriate.
|
||||
|
@ -755,13 +885,8 @@ This function is also responsible for removing buffers no longer in
|
|||
Auto-Revert Mode from `auto-revert-buffer-list', and for canceling
|
||||
the timer when no buffers need to be checked."
|
||||
|
||||
(setq auto-revert-buffers-counter
|
||||
(1+ auto-revert-buffers-counter))
|
||||
|
||||
(save-match-data
|
||||
(let ((bufs (if global-auto-revert-mode
|
||||
(buffer-list)
|
||||
auto-revert-buffer-list))
|
||||
(let ((bufs (auto-revert--polled-buffers))
|
||||
remaining new)
|
||||
;; Buffers with remote contents shall be reverted only if the
|
||||
;; connection is established already.
|
||||
|
@ -803,15 +928,18 @@ the timer when no buffers need to be checked."
|
|||
(auto-revert-remove-current-buffer))
|
||||
(when (auto-revert-active-p)
|
||||
;; Enable file notification.
|
||||
;; Don't bother creating a notifier for non-file buffers
|
||||
;; unless it explicitly indicates that this works.
|
||||
(when (and auto-revert-use-notify
|
||||
(not auto-revert-notify-watch-descriptor))
|
||||
(not auto-revert-notify-watch-descriptor)
|
||||
(or buffer-file-name
|
||||
buffer-auto-revert-by-notification))
|
||||
(auto-revert-notify-add-watch))
|
||||
(auto-revert-handler)))))
|
||||
(setq bufs (cdr bufs)))
|
||||
(setq auto-revert-remaining-buffers bufs)
|
||||
;; Check if we should cancel the timer.
|
||||
(when (and (not global-auto-revert-mode)
|
||||
(null auto-revert-buffer-list))
|
||||
(unless (auto-revert--need-polling-p)
|
||||
(if (timerp auto-revert-timer)
|
||||
(cancel-timer auto-revert-timer))
|
||||
(setq auto-revert-timer nil)))))
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1985-1987, 1992-1996, 1999-2019 Free Software
|
||||
;; Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: internal
|
||||
;; Package: emacs
|
||||
|
||||
|
|
19
lisp/bs.el
19
lisp/bs.el
|
@ -2,7 +2,6 @@
|
|||
|
||||
;; Copyright (C) 1998-2019 Free Software Foundation, Inc.
|
||||
;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
@ -181,12 +180,7 @@ return a string representing the column's value."
|
|||
(list (bs--make-header-match-string)
|
||||
'(1 font-lock-type-face append) '(1 'bold append))
|
||||
;; Buffername embedded by *
|
||||
(list "^\\(.*\\*.*\\*.*\\)$"
|
||||
1
|
||||
;; problem in XEmacs with font-lock-constant-face
|
||||
(if (facep 'font-lock-constant-face)
|
||||
'font-lock-constant-face
|
||||
'font-lock-comment-face))
|
||||
(list "^\\(.*\\*.*\\*.*\\)$" 1 'font-lock-constant-face)
|
||||
;; Dired-Buffers
|
||||
'("^..\\(.*Dired .*\\)$" 1 font-lock-function-name-face)
|
||||
;; the star for modified buffers
|
||||
|
@ -343,11 +337,6 @@ configuration.
|
|||
A value of `never' means to never show the buffer.
|
||||
A value of `always' means to show buffer regardless of the configuration.")
|
||||
|
||||
;; Make face named region (for XEmacs)
|
||||
(unless (facep 'region)
|
||||
(make-face 'region)
|
||||
(set-face-background 'region "gray75"))
|
||||
|
||||
(defun bs--sort-by-name (b1 b2)
|
||||
"Compare buffers B1 and B2 by buffer name."
|
||||
(string< (buffer-name b1)
|
||||
|
@ -448,8 +437,7 @@ Used internally, only.")
|
|||
(define-key map "f" 'bs-select)
|
||||
(define-key map "v" 'bs-view)
|
||||
(define-key map "!" 'bs-select-in-one-window)
|
||||
(define-key map [mouse-2] 'bs-mouse-select) ;; for GNU EMACS
|
||||
(define-key map [button2] 'bs-mouse-select) ;; for XEmacs
|
||||
(define-key map [mouse-2] 'bs-mouse-select)
|
||||
(define-key map "F" 'bs-select-other-frame)
|
||||
(let ((key ?1))
|
||||
(while (<= key ?9)
|
||||
|
@ -459,10 +447,7 @@ Used internally, only.")
|
|||
(define-key map "\e-" 'negative-argument)
|
||||
(define-key map "o" 'bs-select-other-window)
|
||||
(define-key map "\C-o" 'bs-tmp-select-other-window)
|
||||
;; for GNU EMACS
|
||||
(define-key map [mouse-3] 'bs-mouse-select-other-frame)
|
||||
;; for XEmacs
|
||||
(define-key map [button3] 'bs-mouse-select-other-frame)
|
||||
(define-key map [up] 'bs-up)
|
||||
(define-key map "n" 'bs-down)
|
||||
(define-key map "p" 'bs-up)
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1985-1987, 1993-1995, 2000-2019 Free Software
|
||||
;; Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ If DATE lacks timezone information, GMT is assumed."
|
|||
(let ((overflow-error '(error "Specified time is not representable")))
|
||||
(if (equal err overflow-error)
|
||||
(signal (car err) (cdr err))
|
||||
(condition-case-unless-debug err
|
||||
(condition-case err
|
||||
(encode-time (parse-time-string
|
||||
(timezone-make-date-arpa-standard date)))
|
||||
(error
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1988, 1994, 2001-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Howard Gayle
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: i18n
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Ata Etemadi <ATAE@spva.physics.imperial.ac.uk>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: data
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: David Ponce <david@dponce.com>
|
||||
;; Maintainer: Eric M. Ludlam <zappo@gnu.org>
|
||||
;; Maintainer: Eric M. Ludlam <zappo@gnu.org>
|
||||
;; Version: 2.0
|
||||
;; Keywords: OO, lisp
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
;; Foundation, Inc.
|
||||
|
||||
;; Author: Eric M. Ludlam <zappo@gnu.org>
|
||||
;; Maintainer: Eric Ludlam
|
||||
;; Maintainer: Eric M. Ludlam <zappo@gnu.org>
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: David Ponce <david@dponce.com>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Created: 10 Nov 2000
|
||||
;; Keywords: syntax
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Richard Kim <emacs18@gmail.com>
|
||||
;; Maintainer: Richard Kim <emacs18@gmail.com>
|
||||
;; Author: Richard Kim <emacs18@gmail.com>
|
||||
;; Maintainer: Richard Kim <emacs18@gmail.com>
|
||||
;; Created: June 2002
|
||||
;; Keywords: syntax
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: matching
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: K. Shane Hartman
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
;; Inc.
|
||||
|
||||
;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: processes, lisp
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
;; Author: Olin Shivers <shivers@cs.cmu.edu>
|
||||
;; Simon Marshall <simon@gnu.org>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: processes
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2019 Free Software
|
||||
;; Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: abbrev convenience
|
||||
;; Author: Jim Salem <alem@bbnplanet.com> of Thinking Machines Inc.
|
||||
;; (ideas suggested by Brewster Kahle)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;; National Institute of Advanced Industrial Science and Technology (AIST)
|
||||
;; Registration Number H14PRO021
|
||||
|
||||
;; Author: Kenichi HANDA <handa@etl.go.jp>
|
||||
;; Author: Kenichi Handa <handa@gnu.org>
|
||||
;; (according to ack.texi)
|
||||
;; Keywords: mule, multilingual, character composition
|
||||
;; Package: emacs
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1996-1997, 1999-2019 Free Software Foundation, Inc.
|
||||
;;
|
||||
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: help, faces
|
||||
;; Package: emacs
|
||||
|
||||
|
@ -1827,20 +1826,9 @@ item in another window.\n\n"))
|
|||
(" `-" "bottom")))
|
||||
|
||||
(defun custom-browse-insert-prefix (prefix)
|
||||
"Insert PREFIX. On XEmacs convert it to line graphics."
|
||||
;; Fixme: do graphics.
|
||||
(if nil ; (featurep 'xemacs)
|
||||
(progn
|
||||
(insert "*")
|
||||
(while (not (string-equal prefix ""))
|
||||
(let ((entry (substring prefix 0 3)))
|
||||
(setq prefix (substring prefix 3))
|
||||
(let ((overlay (make-overlay (1- (point)) (point) nil t nil))
|
||||
(name (nth 1 (assoc entry custom-browse-alist))))
|
||||
(overlay-put overlay 'end-glyph (widget-glyph-find name entry))
|
||||
(overlay-put overlay 'start-open t)
|
||||
(overlay-put overlay 'end-open t)))))
|
||||
(insert prefix)))
|
||||
"Insert PREFIX."
|
||||
(declare (obsolete insert "27.1"))
|
||||
(insert prefix))
|
||||
|
||||
;;; Modification of Basic Widgets.
|
||||
;;
|
||||
|
@ -4043,7 +4031,7 @@ If GROUPS-ONLY is non-nil, return only those members that are groups."
|
|||
(cond ((and (eq custom-buffer-style 'tree)
|
||||
(eq state 'hidden)
|
||||
(or members (custom-unloaded-widget-p widget)))
|
||||
(custom-browse-insert-prefix prefix)
|
||||
(insert prefix)
|
||||
(push (widget-create-child-and-convert
|
||||
widget 'custom-browse-visibility
|
||||
:tag "+")
|
||||
|
@ -4056,19 +4044,17 @@ If GROUPS-ONLY is non-nil, return only those members that are groups."
|
|||
(widget-put widget :buttons buttons))
|
||||
((and (eq custom-buffer-style 'tree)
|
||||
(zerop (length members)))
|
||||
(custom-browse-insert-prefix prefix)
|
||||
(insert "[ ]-- ")
|
||||
(insert prefix "[ ]-- ")
|
||||
(push (widget-create-child-and-convert
|
||||
widget 'custom-browse-group-tag)
|
||||
buttons)
|
||||
(insert " " tag "\n")
|
||||
(widget-put widget :buttons buttons))
|
||||
((eq custom-buffer-style 'tree)
|
||||
(custom-browse-insert-prefix prefix)
|
||||
(insert prefix)
|
||||
(if (zerop (length members))
|
||||
(progn
|
||||
(custom-browse-insert-prefix prefix)
|
||||
(insert "[ ]-- ")
|
||||
(insert prefix "[ ]-- ")
|
||||
;; (widget-glyph-insert nil "[ ]" "empty")
|
||||
;; (widget-glyph-insert nil "-- " "horizontal")
|
||||
(push (widget-create-child-and-convert
|
||||
|
|
|
@ -648,6 +648,19 @@ since it could result in memory overflow and make Emacs crash."
|
|||
(const :tag "Count lines from beginning of narrowed region"
|
||||
:value nil))
|
||||
"26.1")
|
||||
|
||||
(display-fill-column-indicator display-fill-column-indicator
|
||||
boolean "27.1")
|
||||
(display-fill-column-indicator-column display-fill-column-indicator
|
||||
(choice
|
||||
(const :tag "Use fill-column variable"
|
||||
:value t)
|
||||
(const :tag "Fixed column number"
|
||||
:value 70
|
||||
:format "%v"))
|
||||
integer "27.1")
|
||||
(display-fill-column-indicator-character display-fill-column-indicator
|
||||
character "27.1")
|
||||
;; xfaces.c
|
||||
(scalable-fonts-allowed display boolean "22.1")
|
||||
;; xfns.c
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 2001-2019 Free Software Foundation, Inc.
|
||||
;;
|
||||
;; Author: Alex Schroeder <alex@gnu.org>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: help, faces
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
;; Inc.
|
||||
;;
|
||||
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: help, faces
|
||||
;; Package: emacs
|
||||
|
||||
|
@ -56,8 +55,14 @@ Otherwise, if symbol has a `saved-value' property, it will evaluate
|
|||
the car of that and use it as the default binding for symbol.
|
||||
Otherwise, EXP will be evaluated and used as the default binding for
|
||||
symbol."
|
||||
(eval `(defvar ,symbol ,(let ((sv (get symbol 'saved-value)))
|
||||
(if sv (car sv) exp)))))
|
||||
(condition-case nil
|
||||
(default-toplevel-value symbol) ;Test presence of default value.
|
||||
(void-variable
|
||||
;; The var is not initialized yet.
|
||||
(set-default-toplevel-value
|
||||
symbol (eval (let ((sv (get symbol 'saved-value)))
|
||||
(if sv (car sv) exp))
|
||||
t)))))
|
||||
|
||||
(defun custom-initialize-set (symbol exp)
|
||||
"Initialize SYMBOL based on EXP.
|
||||
|
@ -188,18 +193,13 @@ set to nil, as the value is no longer rogue."
|
|||
(t
|
||||
(custom-handle-keyword symbol keyword value
|
||||
'custom-variable))))))
|
||||
;; Set the docstring, record the var on load-history, as well
|
||||
;; as set the special-variable-p flag.
|
||||
(internal--define-uninitialized-variable symbol doc)
|
||||
(put symbol 'custom-requests requests)
|
||||
;; Do the actual initialization.
|
||||
(unless custom-dont-initialize
|
||||
(funcall initialize symbol default)))
|
||||
;; Use defvar to set the docstring as well as the special-variable-p flag.
|
||||
;; FIXME: We should reproduce more of `defvar's behavior, such as the warning
|
||||
;; when the var is currently let-bound.
|
||||
(if (not (default-boundp symbol))
|
||||
;; Don't use defvar to avoid setting a default-value when undesired.
|
||||
(when doc (put symbol 'variable-documentation doc))
|
||||
(eval `(defvar ,symbol nil ,@(when doc (list doc)))))
|
||||
(push symbol current-load-list)
|
||||
(run-hooks 'custom-define-hook)
|
||||
symbol)
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
;; Author: Don Morrison
|
||||
;; Lars Lindberg
|
||||
;; (according to ack.texi)
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Created: 16 Mars 1992
|
||||
;; Lindberg's last update version: 5.7
|
||||
;; Keywords: abbrev expand completion convenience
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
;;; delim-col.el --- prettify all columns in a region or rectangle
|
||||
;;; delim-col.el --- prettify all columns in a region or rectangle -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
|
||||
;; Maintainer: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
|
||||
;; Version: 2.1
|
||||
;; Keywords: internal
|
||||
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
|
||||
;; Keywords: convenience text
|
||||
;; X-URL: https://www.emacswiki.org/emacs/ViniciusJoseLatorre
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
|
@ -27,11 +27,6 @@
|
|||
|
||||
;; delim-col helps to prettify columns in a text region or rectangle.
|
||||
;;
|
||||
;; To use it, make sure that this file is in load-path and insert in your
|
||||
;; .emacs:
|
||||
;;
|
||||
;; (require 'delim-col)
|
||||
;;
|
||||
;; If you have, for example, the following columns:
|
||||
;;
|
||||
;; a b c d
|
||||
|
@ -91,9 +86,9 @@
|
|||
;; aaa [ <bbb>, <cccc> ] dddd
|
||||
;; aa [ <bb> , <ccccccc> ] ddd
|
||||
;;
|
||||
;; Note that `delimit-columns-region' operates over all text region
|
||||
;; selected, extending the region start to the beginning of line and the
|
||||
;; region end to the end of line. While `delimit-columns-rectangle'
|
||||
;; Note that `delimit-columns-region' operates over the entire selected
|
||||
;; text region, extending the region start to the beginning of line and
|
||||
;; the region end to the end of line. While `delimit-columns-rectangle'
|
||||
;; operates over the text rectangle selected which rectangle diagonal is
|
||||
;; given by the region start and end.
|
||||
;;
|
||||
|
@ -117,6 +112,7 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(require 'rect)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; User Options:
|
||||
|
@ -125,6 +121,7 @@
|
|||
"Prettify columns."
|
||||
:link '(emacs-library-link :tag "Source Lisp File" "delim-col.el")
|
||||
:prefix "delimit-columns-"
|
||||
:group 'convenience
|
||||
:group 'text)
|
||||
|
||||
(defcustom delimit-columns-str-before ""
|
||||
|
@ -213,10 +210,11 @@ See also `delimit-columns-end' for documentation.
|
|||
The following relation must hold:
|
||||
0 <= delimit-columns-start <= delimit-columns-end
|
||||
|
||||
The column number start from 0 and it's relative to the beginning of selected
|
||||
region. So if you selected a text region, the first column (column 0) is
|
||||
located at beginning of line. If you selected a text rectangle, the first
|
||||
column (column 0) is located at left corner."
|
||||
The column number starts at 0 and is relative to the beginning of
|
||||
the selected region. So if you select a text region, the first
|
||||
column (column 0) is located at the beginning of line. If you
|
||||
select a text rectangle, the first column (column 0) is located
|
||||
at the left corner."
|
||||
:type '(integer :tag "Column Start")
|
||||
:group 'columns)
|
||||
|
||||
|
@ -228,10 +226,11 @@ See also `delimit-columns-start' for documentation.
|
|||
The following relation must hold:
|
||||
0 <= delimit-columns-start <= delimit-columns-end
|
||||
|
||||
The column number start from 0 and it's relative to the beginning of selected
|
||||
region. So if you selected a text region, the first column (column 0) is
|
||||
located at beginning of line. If you selected a text rectangle, the first
|
||||
column (column 0) is located at left corner."
|
||||
The column number starts at 0 and is relative to the beginning of
|
||||
the selected region. So if you select a text region, the first
|
||||
column (column 0) is located at the beginning of line. If you
|
||||
select a text rectangle, the first column (column 0) is located
|
||||
at the left corner."
|
||||
:type '(integer :tag "Column End")
|
||||
:group 'columns)
|
||||
|
||||
|
@ -247,20 +246,20 @@ column (column 0) is located at left corner."
|
|||
|
||||
;;;###autoload
|
||||
(defun delimit-columns-customize ()
|
||||
"Customization of `columns' group."
|
||||
"Customize the `columns' group."
|
||||
(interactive)
|
||||
(customize-group 'columns))
|
||||
|
||||
|
||||
(defmacro delimit-columns-str (str)
|
||||
`(if (stringp ,str) ,str ""))
|
||||
(defun delimit-columns-str (str)
|
||||
(if (stringp str) str ""))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun delimit-columns-region (start end)
|
||||
"Prettify all columns in a text region.
|
||||
|
||||
START and END delimits the text region."
|
||||
START and END delimit the text region."
|
||||
(interactive "*r")
|
||||
(let ((delimit-columns-str-before
|
||||
(delimit-columns-str delimit-columns-str-before))
|
||||
|
@ -273,8 +272,7 @@ START and END delimits the text region."
|
|||
(delimit-columns-after
|
||||
(delimit-columns-str delimit-columns-after))
|
||||
(delimit-columns-start
|
||||
(if (and (integerp delimit-columns-start)
|
||||
(>= delimit-columns-start 0))
|
||||
(if (natnump delimit-columns-start)
|
||||
delimit-columns-start
|
||||
0))
|
||||
(delimit-columns-end
|
||||
|
@ -309,14 +307,11 @@ START and END delimits the text region."
|
|||
(set-marker the-end nil)))))
|
||||
|
||||
|
||||
(require 'rect)
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun delimit-columns-rectangle (start end)
|
||||
"Prettify all columns in a text rectangle.
|
||||
|
||||
START and END delimits the corners of text rectangle."
|
||||
START and END delimit the corners of the text rectangle."
|
||||
(interactive "*r")
|
||||
(let ((delimit-columns-str-before
|
||||
(delimit-columns-str delimit-columns-str-before))
|
||||
|
@ -329,8 +324,7 @@ START and END delimits the corners of text rectangle."
|
|||
(delimit-columns-after
|
||||
(delimit-columns-str delimit-columns-after))
|
||||
(delimit-columns-start
|
||||
(if (and (integerp delimit-columns-start)
|
||||
(>= delimit-columns-start 0))
|
||||
(if (natnump delimit-columns-start)
|
||||
delimit-columns-start
|
||||
0))
|
||||
(delimit-columns-end
|
||||
|
@ -344,11 +338,11 @@ START and END delimits the corners of text rectangle."
|
|||
;; get maximum length for each column
|
||||
(and delimit-columns-format
|
||||
(save-excursion
|
||||
(operate-on-rectangle 'delimit-columns-rectangle-max
|
||||
(operate-on-rectangle #'delimit-columns-rectangle-max
|
||||
start the-end nil)))
|
||||
;; prettify columns
|
||||
(save-excursion
|
||||
(operate-on-rectangle 'delimit-columns-rectangle-line
|
||||
(operate-on-rectangle #'delimit-columns-rectangle-line
|
||||
start the-end nil))
|
||||
;; nullify markers
|
||||
(set-marker delimit-columns-limit nil)
|
||||
|
@ -359,7 +353,7 @@ START and END delimits the corners of text rectangle."
|
|||
;; Internal Variables and Functions:
|
||||
|
||||
|
||||
(defun delimit-columns-rectangle-max (startpos &optional _ignore1 _ignore2)
|
||||
(defun delimit-columns-rectangle-max (startpos &optional _begextra _endextra)
|
||||
(set-marker delimit-columns-limit (point))
|
||||
(goto-char startpos)
|
||||
(let ((ncol 1)
|
||||
|
@ -392,7 +386,7 @@ START and END delimits the corners of text rectangle."
|
|||
(setq values (cdr values)))))
|
||||
|
||||
|
||||
(defun delimit-columns-rectangle-line (startpos &optional _ignore1 _ignore2)
|
||||
(defun delimit-columns-rectangle-line (startpos &optional _begextra _endextra)
|
||||
(let ((len (length delimit-columns-max))
|
||||
(ncol 0)
|
||||
origin)
|
||||
|
@ -442,8 +436,7 @@ START and END delimits the corners of text rectangle."
|
|||
((eq delimit-columns-format 'padding)
|
||||
(insert spaces delimit-columns-after delimit-columns-str-after))
|
||||
(t
|
||||
(insert delimit-columns-after spaces delimit-columns-str-after))
|
||||
))
|
||||
(insert delimit-columns-after spaces delimit-columns-str-after))))
|
||||
(goto-char (max (point) delimit-columns-limit))))
|
||||
|
||||
|
||||
|
@ -466,8 +459,7 @@ START and END delimits the corners of text rectangle."
|
|||
(insert delimit-columns-after
|
||||
delimit-columns-str-separator
|
||||
spaces
|
||||
delimit-columns-before))
|
||||
))
|
||||
delimit-columns-before))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
;; Inc.
|
||||
|
||||
;; Author: Matthieu Devin <devin@lucid.com>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Created: 14 Jul 92
|
||||
;; Keywords: convenience emulations
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1994-1996, 2001-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Boris Goldowsky <boris@gnu.org>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: faces, i18n, Unicode, multilingual
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
;; Foundation, Inc.
|
||||
|
||||
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>.
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: files
|
||||
;; Package: emacs
|
||||
|
||||
|
@ -246,9 +245,11 @@ Examples of PREDICATE:
|
|||
(lambda ()
|
||||
(dired-mark-if
|
||||
(member (dired-get-filename nil t) file-list2) nil)))
|
||||
(message "Marked in dir1: %s files, in dir2: %s files"
|
||||
(length file-list1)
|
||||
(length file-list2))))
|
||||
(message "Marked in dir1: %s, in dir2: %s"
|
||||
(format-message (ngettext "%d file" "%d files" (length file-list1))
|
||||
(length file-list1))
|
||||
(format-message (ngettext "%d file" "%d files" (length file-list2))
|
||||
(length file-list2)))))
|
||||
|
||||
(defun dired-file-set-difference (list1 list2 predicate)
|
||||
"Combine LIST1 and LIST2 using a set-difference operation.
|
||||
|
@ -1065,7 +1066,9 @@ and `dired-compress-files-alist'."
|
|||
(shell-quote-argument (file-name-nondirectory
|
||||
file-desc)))
|
||||
in-files " "))))))
|
||||
(message "Compressed %d file(s) to %s"
|
||||
(message (ngettext "Compressed %d file to %s"
|
||||
"Compressed %d files to %s"
|
||||
(length in-files))
|
||||
(length in-files)
|
||||
(file-name-nondirectory out-file)))))))
|
||||
|
||||
|
@ -1193,12 +1196,14 @@ Return nil if no change in files."
|
|||
(string (if (eq op-symbol 'compress) "Compress or uncompress"
|
||||
(capitalize (symbol-name op-symbol)))))
|
||||
(if (not failures)
|
||||
(message "%s: %d file%s."
|
||||
string total (dired-plural-s total))
|
||||
(message (ngettext "%s: %d file." "%s: %d files." total)
|
||||
string total)
|
||||
;; end this bunch of errors:
|
||||
(dired-log-summary
|
||||
(format "Failed to %s %d of %d file%s"
|
||||
(downcase string) count total (dired-plural-s total))
|
||||
(format (ngettext "Failed to %s %d of %d file"
|
||||
"Failed to %s %d of %d files"
|
||||
total)
|
||||
(downcase string) count total)
|
||||
failures)))))
|
||||
|
||||
;;;###autoload
|
||||
|
@ -1798,32 +1803,36 @@ ESC or `q' to not overwrite any of the remaining files,
|
|||
(progn
|
||||
(push (dired-make-relative from)
|
||||
failures)
|
||||
(dired-log "%s `%s' to `%s' failed:\n%s\n"
|
||||
(dired-log "%s: `%s' to `%s' failed:\n%s\n"
|
||||
operation from to err))))))))
|
||||
(cond
|
||||
(dired-create-files-failures
|
||||
(setq failures (nconc failures dired-create-files-failures))
|
||||
(dired-log-summary
|
||||
(format "%s failed for %d file%s in %d requests"
|
||||
operation (length failures)
|
||||
(dired-plural-s (length failures))
|
||||
total)
|
||||
(format (ngettext "%s failed for %d file in %d requests"
|
||||
"%s failed for %d files in %d requests"
|
||||
(length failures))
|
||||
operation (length failures) total)
|
||||
failures))
|
||||
(failures
|
||||
(dired-log-summary
|
||||
(format "%s failed for %d of %d file%s"
|
||||
operation (length failures)
|
||||
total (dired-plural-s total))
|
||||
(format (ngettext "%s: %d of %d file failed"
|
||||
"%s: %d of %d files failed"
|
||||
total)
|
||||
operation (length failures) total)
|
||||
failures))
|
||||
(skipped
|
||||
(dired-log-summary
|
||||
(format "%s: %d of %d file%s skipped"
|
||||
operation (length skipped) total
|
||||
(dired-plural-s total))
|
||||
(format (ngettext "%s: %d of %d file skipped"
|
||||
"%s: %d of %d files skipped"
|
||||
total)
|
||||
operation (length skipped) total)
|
||||
skipped))
|
||||
(t
|
||||
(message "%s: %s file%s"
|
||||
operation success-count (dired-plural-s success-count)))))
|
||||
(message (ngettext "%s: %d file done"
|
||||
"%s: %d files done"
|
||||
success-count)
|
||||
operation success-count))))
|
||||
(dired-move-to-filename))
|
||||
|
||||
(defun dired-do-create-files (op-symbol file-creator operation arg
|
||||
|
@ -2839,6 +2848,8 @@ is part of a file name (i.e., has the text property `dired-filename')."
|
|||
(multi-isearch-files-regexp
|
||||
(dired-get-marked-files nil nil 'dired-nondirectory-p nil t)))
|
||||
|
||||
(declare-function fileloop-continue "fileloop" ())
|
||||
|
||||
;;;###autoload
|
||||
(defun dired-do-search (regexp)
|
||||
"Search through all marked files for a match for REGEXP.
|
||||
|
|
|
@ -159,7 +159,7 @@ See Info node `(dired-x) Omitting Variables' for more information."
|
|||
|
||||
(put 'dired-omit-mode 'safe-local-variable 'booleanp)
|
||||
|
||||
(defcustom dired-omit-files "^\\.?#\\|^\\.$\\|^\\.\\.$"
|
||||
(defcustom dired-omit-files "\\`[.]?#\\|\\`[.][.]?\\'"
|
||||
"Filenames matching this regexp will not be displayed.
|
||||
This only has effect when `dired-omit-mode' is t. See interactive function
|
||||
`dired-omit-mode' (\\[dired-omit-mode]) and variable
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
;; Foundation, Inc.
|
||||
|
||||
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: files
|
||||
;; Package: emacs
|
||||
|
||||
|
@ -2148,6 +2147,7 @@ Keybindings:
|
|||
(setq buffer-invisibility-spec (list t)))
|
||||
(setq-local revert-buffer-function #'dired-revert)
|
||||
(setq-local buffer-stale-function #'dired-buffer-stale-p)
|
||||
(setq-local buffer-auto-revert-by-notification t)
|
||||
(setq-local page-delimiter "\n\n")
|
||||
(setq-local dired-directory (or dirname default-directory))
|
||||
;; list-buffers uses this to display the dir being edited in this buffer.
|
||||
|
@ -3212,9 +3212,10 @@ non-empty directories is allowed."
|
|||
(if (not failures)
|
||||
(progress-reporter-done progress-reporter)
|
||||
(dired-log-summary
|
||||
(format "%d of %d deletion%s failed"
|
||||
(length failures) count
|
||||
(dired-plural-s count))
|
||||
(format (ngettext "%d of %d deletion failed"
|
||||
"%d of %d deletions failed"
|
||||
count)
|
||||
(length failures) count)
|
||||
failures)))))
|
||||
(message "(No deletions performed)")))
|
||||
(dired-move-to-filename))
|
||||
|
@ -3267,8 +3268,9 @@ confirmation. To disable the confirmation, see
|
|||
(let ((buf-list (dired-buffers-for-dir (expand-file-name fn))))
|
||||
(and buf-list
|
||||
(and dired-clean-confirm-killing-deleted-buffers
|
||||
(y-or-n-p (format "Kill Dired buffer%s of %s, too? "
|
||||
(dired-plural-s (length buf-list))
|
||||
(y-or-n-p (format (ngettext "Kill Dired buffer of %s, too? "
|
||||
"Kill Dired buffers of %s, too? "
|
||||
(length buf-list))
|
||||
(file-name-nondirectory fn))))
|
||||
(dolist (buf buf-list)
|
||||
(kill-buffer buf))))))
|
||||
|
|
|
@ -179,8 +179,6 @@ and ends with a forward slash."
|
|||
dir))
|
||||
|
||||
|
||||
(define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1")
|
||||
(define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1")
|
||||
;;;###autoload
|
||||
(define-minor-mode dirtrack-mode
|
||||
"Toggle directory tracking in shell buffers (Dirtrack mode).
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
;; Author: Erik Naggum <erik@naggum.no>
|
||||
;; Based on a previous version by Howard Gayle
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: i18n
|
||||
;; Package: emacs
|
||||
|
||||
|
|
77
lisp/display-fill-column-indicator.el
Normal file
77
lisp/display-fill-column-indicator.el
Normal file
|
@ -0,0 +1,77 @@
|
|||
;;; display-fill-column-indicator.el --- interface for display-fill-column-indicator -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs 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 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs 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. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Provides a minor mode interface for `display-fill-column-indicator'.
|
||||
;;
|
||||
;; Toggle display of the column indicator with M-x
|
||||
;; display-fill-column-indicator-mode. To enable the indicator in
|
||||
;; all buffers, use M-x global-display-fill-column-indicator-mode.
|
||||
|
||||
|
||||
;; NOTE: Customization variables for
|
||||
;; `display-fill-column-indicator-column' and
|
||||
;; `display-fill-column-indicator-char' itself are defined in
|
||||
;; cus-start.el.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defgroup display-fill-column-indicator nil
|
||||
"Display a fill column indicator in the buffer."
|
||||
:group 'convenience
|
||||
:group 'display)
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode display-fill-column-indicator-mode
|
||||
"Toggle display of fill-column indicator.
|
||||
This uses `display-fill-column-indicator' internally.
|
||||
|
||||
To change the position of the column displayed by default
|
||||
customize `display-fill-column-indicator-column'. You can change the
|
||||
character for the indicator setting `display-fill-column-indicator-character'."
|
||||
:lighter nil
|
||||
(if display-fill-column-indicator-mode
|
||||
(progn
|
||||
(setq display-fill-column-indicator t)
|
||||
(unless display-fill-column-indicator-character
|
||||
(if (and (char-displayable-p ?\u2502)
|
||||
(or (not (display-graphic-p))
|
||||
(eq (aref (query-font (car (internal-char-font nil ?\u2502))) 0)
|
||||
(face-font 'default))))
|
||||
(setq display-fill-column-indicator-character ?\u2502)
|
||||
(setq display-fill-column-indicator-character ?|))))
|
||||
(setq display-fill-column-indicator nil)))
|
||||
|
||||
(defun display-fill-column-indicator--turn-on ()
|
||||
"Turn on `display-fill-column-indicator-mode'."
|
||||
(unless (or (minibufferp)
|
||||
(and (daemonp) (null (frame-parameter nil 'client))))
|
||||
(display-fill-column-indicator-mode)))
|
||||
|
||||
;;;###autoload
|
||||
(define-globalized-minor-mode global-display-fill-column-indicator-mode
|
||||
display-fill-column-indicator-mode display-fill-column-indicator--turn-on)
|
||||
|
||||
(provide 'display-fill-column-indicator)
|
||||
|
||||
;;; display-fill-column-indicator.el ends here
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 2005-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Jan Djärv <jan.h.d@swipnet.se>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: window, drag, drop
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 1991, 1993, 1995-1996, 2001-2019 Free Software
|
||||
;; Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: internal
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
;; Copyright (C) 1998, 2001-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: internal
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
;; Copyright (C) 2009-2019 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Jan Djärv <jan.h.d@swipnet.se>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: font, system-font, tool-bar-style
|
||||
;; Package: emacs
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
;; Inc.
|
||||
|
||||
;; Author: Richard Mlynarik <mly@ai.mit.edu>
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue