1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

Merge remote-tracking branch 'savannah/master' into feature/tree-sitter

This commit is contained in:
Yuan Fu 2022-06-14 15:59:46 -07:00
commit 98bfb24081
No known key found for this signature in database
GPG key ID: 56E19BC57664A442
547 changed files with 36984 additions and 22924 deletions

View file

@ -1293,7 +1293,7 @@
Don't bug out on certain empty elements with ids
* lisp/net/shr.el (shr-descend): Fix empty-element #id targetting
* lisp/net/shr.el (shr-descend): Fix empty-element #id targeting
(bug#52391).
2021-12-09 Paul Eggert <eggert@cs.ucla.edu>

View file

@ -965,6 +965,7 @@ bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
[ ! -f config.log ] || mv -f config.log config.log~
rm -rf ${srcdir}/info
rm -f ${srcdir}/etc/refcards/emacsver.tex
rm -rf native-lisp/ lisp/leim/ja-dic/
${top_bootclean}
### 'maintainer-clean'

View file

@ -275,14 +275,6 @@ Vibhav Pant
lisp/net/browse-url.el
lisp/erc/*
Alan Third
The NS port:
nextstep/*
src/ns*
src/*.m
lisp/term/ns-win.el
doc/emacs/macos.texi
Amin Bandali
Eshell
lisp/eshell/*
@ -313,7 +305,9 @@ Tramp
Modus themes
Maintainer: Protesilaos Stavrou
Repository and issue tracker: https://gitlab.com/protesilaos/modus-themes
Repository: https://git.sr.ht/~protesilaos
Mailing list: https://lists.sr.ht/~protesilaos/modus-themes
Bug Reports: M-x modus-themes-report-bug
doc/misc/modus-themes.org
etc/themes/modus*.el

View file

@ -351,11 +351,13 @@ Optional argument TYPE is type of output (nil means all)."
\"https://www.w3.org/TR/html4/loose.dtd\">\n\n")
(defconst manual-meta-string
"<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">
<link rev=\"made\" href=\"mailto:bug-gnu-emacs@gnu.org\">
"<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n")
(defconst manual-links-string
"<link rev=\"made\" href=\"mailto:bug-gnu-emacs@gnu.org\">
<link rel=\"icon\" type=\"image/png\" href=\"/graphics/gnu-head-mini.png\">
<meta name=\"ICBM\" content=\"42.256233,-71.006581\">
<meta name=\"DC.title\" content=\"gnu.org\">\n\n")
<meta name=\"DC.title\" content=\"gnu.org\">\n")
(defconst manual-style-string "<style type=\"text/css\">
@import url('/software/emacs/manual.css');\n</style>\n")
@ -486,6 +488,12 @@ the @import directive."
(delete-region opoint (point))
(search-forward "<meta http-equiv=\"Content-Style")
(setq opoint (match-beginning 0)))
(search-forward "</title>\n")
(delete-region opoint (point))
(search-forward "<link href=")
(goto-char (match-beginning 0))
(insert manual-links-string)
(setq opoint (point))
(search-forward "</head>")
(goto-char (match-beginning 0))
(delete-region opoint (point))

View file

@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
void
fatal (const char *fmt, ...)

View file

@ -334,6 +334,9 @@ looks like this:
</div>
</div>
Also, make sure the copyright years at the bottom of emacs.html are
up-to-date.
The file download.html may need to be updated, for example if the
MS-Windows binaries will be signed by a different person/key than
those mentioned there.

View file

@ -89,6 +89,7 @@
;; PROPn: string representing the nth property value
(eval-when-compile (require 'cl-lib))
(require 'generate-lisp-file)
(defvar unidata-list nil)
@ -1422,13 +1423,13 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(or elt (user-error "Unknown output file: %s" basename))
(or noninteractive (message "Generating %s..." file))
(with-temp-file file
(insert ";;; " basename " -*- lexical-binding:t -*-
;; " copyright "
;; Generated from Unicode data files by unidata-gen.el.
;; The sources for this file are found in the admin/unidata/ directory in
;; the Emacs sources. The Unicode data files are used under the
;; Unicode Terms of Use, as contained in the file copyright.html in that
;; same directory.\n")
(generate-lisp-file-heading
basename 'unidata-gen-file
:commentary (concat copyright " \
The sources for this file are found in the admin/unidata/ directory in \
the Emacs sources. The Unicode data files are used under the \
Unicode Terms of Use, as contained in the file copyright.html in that \
same directory."))
(dolist (proplist (cdr elt))
(let ((prop (unidata-prop-prop proplist))
(index (unidata-prop-index proplist))
@ -1446,21 +1447,15 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(set-char-table-extra-slot table 3 describer))
(insert (format "(define-char-code-property '%S\n %S\n %S)\n"
prop table docstring))))
(insert ";; Local Variables:\n"
";; coding: utf-8\n"
";; version-control: never\n"
";; no-byte-compile: t\n"
";; no-update-autoloads: t\n"
";; End:\n\n"
(format ";;; %s ends here\n" basename)))))
(generate-lisp-file-trailer basename :inhibit-provide t))))
(or noninteractive (message "Generating %s...done" file)))
(defun unidata-gen-charprop (&optional charprop-file text)
(or charprop-file (setq charprop-file (pop command-line-args-left)))
(with-temp-file charprop-file
(insert ";; Automatically generated by unidata-gen.el."
" -*- lexical-binding: t -*-\n"
";; See the admin/unidata/ directory in the Emacs sources.\n")
(generate-lisp-file-heading
charprop-file 'unidata-gen-charprop
:commentary "See the admin/unidata/ directory in the Emacs sources.")
(if text
(insert text)
(dolist (elt unidata-file-alist)
@ -1469,19 +1464,7 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(unidata-prop-prop proplist) (car elt)
(unidata-prop-docstring proplist))))))
(or noninteractive (message "Writing %s..." charprop-file))
(insert "\n"
(format "(provide '%s)\n"
(file-name-sans-extension
(file-name-nondirectory charprop-file)))
" \n"
";; Local Variables:\n"
";; coding: utf-8\n"
";; version-control: never\n"
";; no-byte-compile: t\n"
";; no-update-autoloads: t\n"
";; End:\n\n"
(format ";;; %s ends here\n"
(file-name-nondirectory charprop-file)))))
(generate-lisp-file-trailer charprop-file)))
(defun unidata-gen-scripts (&optional file)
;; Running from Makefile.

View file

@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2022-01-09'
timestamp='2022-05-08'
# 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
@ -1151,16 +1151,27 @@ EOF
;;
x86_64:Linux:*:*)
set_cc_for_build
CPU=$UNAME_MACHINE
LIBCABI=$LIBC
if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_X32 >/dev/null
then
LIBCABI=${LIBC}x32
ABI=64
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __i386__
ABI=x86
#else
#ifdef __ILP32__
ABI=x32
#endif
#endif
EOF
cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
eval "$cc_set_abi"
case $ABI in
x86) CPU=i686 ;;
x32) LIBCABI=${LIBC}x32 ;;
esac
fi
fi
GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
GUESS=$CPU-pc-linux-$LIBCABI
;;
xtensa*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC

View file

@ -310,7 +310,7 @@ rm -f makefile.tmp
sed -f ../msdos/sedlibcf.inp < gnulib.mk-in > gnulib.tmp
sed -f ../msdos/sedlibmk.inp < gnulib.tmp > gnulib.mk
rm -f gnulib.tmp
Rem Create directorys in lib/ that MKDIR_P is supposed to create
Rem Create directories in lib/ that MKDIR_P is supposed to create
Rem but I have no idea how to do that on MS-DOS.
mkdir sys
Rem Create .d files for new files in lib/ and lib/malloc/

View file

@ -492,6 +492,7 @@ OPTION_DEFAULT_ON([threads],[don't compile with elisp threading support])
OPTION_DEFAULT_OFF([native-compilation],[compile with Emacs Lisp native compiler support])
OPTION_DEFAULT_OFF([cygwin32-native-compilation],[use native compilation on 32-bit Cygwin])
OPTION_DEFAULT_ON([xinput2],[don't use version 2 of the X Input Extension for input])
OPTION_DEFAULT_OFF([small-ja-dic],[generate a smaller-size Japanese dictionary])
AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB],
[use a file notification library (LIB one of: yes, inotify, kqueue, gfile, w32, no)])],
@ -1025,6 +1026,7 @@ AS_IF([test $gl_gcc_warnings = no],
gl_WARN_ADD([-Wno-pointer-sign])
gl_WARN_ADD([-Wno-string-plus-int])
gl_WARN_ADD([-Wno-unknown-attributes])
gl_WARN_ADD([-Wno-unknown-pragmas])
])
],[
isystem='-isystem '
@ -1080,8 +1082,12 @@ AS_IF([test $gl_gcc_warnings = no],
# option problematic.
nw="$nw -Wsuggest-attribute=pure"
# Emacs doesn't need this paranoia.
nw="$nw -Wbidi-chars=any,ucn"
if test "$emacs_cv_clang" = yes; then
nw="$nw -Wdouble-promotion"
nm="$nm -Wunknown-pragmas"
fi
# This causes too much noise in the MinGW build.
@ -1101,6 +1107,7 @@ AS_IF([test $gl_gcc_warnings = no],
gl_WARN_ADD([-Wno-type-limits]) # Too many warnings for now
gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
gl_WARN_ADD([-Wno-format-nonliteral])
gl_WARN_ADD([-Wno-bidi-chars])
# clang is unduly picky about some things.
if test "$emacs_cv_clang" = yes; then
@ -1618,16 +1625,63 @@ AC_DEFUN([AC_TYPE_SIZE_T])
# Likewise for obsolescent test for uid_t, gid_t; Emacs assumes them.
AC_DEFUN([AC_TYPE_UID_T])
# sqrt and other floating-point functions such as fmod and frexp
# are found in -lm on many systems.
OLD_LIBS=$LIBS
AC_SEARCH_LIBS([sqrt], [m])
if test "X$LIBS" = "X$OLD_LIBS"; then
LIB_MATH=
else
LIB_MATH=$ac_cv_search_sqrt
fi
LIBS=$OLD_LIBS
# Check for all math.h functions that Emacs uses; on some platforms,
# -lm is needed for some of these functions.
AC_CACHE_CHECK([for math library],
[emacs_cv_lib_math],
[OLD_LIBS=$LIBS
AC_LINK_IFELSE(
[AC_LANG_SOURCE([[
#include <math.h>
int
main (int argc, char **argv)
{
double d = argc;
float f = argc;
int i = argc;
long l = argc;
d = acos (d);
d = asin (d);
d = atan (d);
d = atan2 (d, d);
d = ceil (d);
d = copysign (d, d);
d = cos (d);
d = exp (d);
d = fabs (d);
d = floor (d);
d = fmod (d, d);
d = frexp (d, &i);
d = ldexp (d, i);
d = log (d);
d = log2 (d);
d = log10 (d);
d = pow (d, d);
d = rint (d);
d = scalbn (d, l);
d = sin (d);
d = sqrt (d);
d = tan (d);
d = trunc (d);
f = fabsf (f);
f = powf (f, f);
i = ilogb (d);
i = signbit (d);
l = lrint (d);
l = lround (d);
return d == f && i == l;
}
]])],
[emacs_cv_lib_math='none required'],
[LIBS="-lm $LIBS"
AC_LINK_IFELSE([],
[emacs_cv_lib_math=-lm],
[AC_MSG_ERROR([Math library (-lm) not found])])])
LIBS=$OLD_LIBS])
case $emacs_cv_lib_math in
-*) LIB_MATH=$emacs_cv_lib_math;;
*) LIB_MATH=;;
esac
dnl Current possibilities handled by sed (aix4-2 -> aix,
dnl gnu-linux -> gnu/linux, etc.):
@ -2031,6 +2085,16 @@ Either fix this, or re-configure with the option '--without-ns'.])])
fi
fi
AC_CACHE_CHECK([for Mac OS X 12.0 or later],
[emacs_cv_macosx_12_0],
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <AvailabilityMacros.h>
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 120000
Mac OS X 12.x or later.
#endif
]])], [emacs_cv_macosx_12_0=no],
[emacs_cv_macosx_12_0=yes]))
if test "${with_native_image_api}" = yes; then
AC_DEFINE(HAVE_NATIVE_IMAGE_API, 1, [Define to use native OS APIs for images.])
NATIVE_IMAGE_API="yes (ns)"
@ -6203,6 +6267,9 @@ case "$opsys" in
if test "$NS_IMPL_COCOA" = "yes"; then
libs_nsgui="$libs_nsgui -framework IOKit -framework Carbon \
-framework IOSurface -framework QuartzCore"
if test "$emacs_cv_macosx_12_0" = "yes"; then
libs_nsgui="$libs_nsgui -framework UniformTypeIdentifiers"
fi
fi
else
libs_nsgui=
@ -6465,6 +6532,7 @@ AS_ECHO([" Does Emacs use -lXaw3d? ${HAVE_XAW3D
Which dumping strategy does Emacs use? ${with_dumping}
Does Emacs have native lisp compiler? ${HAVE_NATIVE_COMP}
Does Emacs use version 2 of the the X Input Extension? ${HAVE_XINPUT2}
Does Emacs generate a smaller-size Japanese dictionary? ${with_small_ja_dic}
"])
if test -n "${EMACSDATA}"; then
@ -6563,6 +6631,9 @@ SUBDIR_MAKEFILES_IN=`echo " ${SUBDIR_MAKEFILES}" | sed -e 's| | $(srcdir)/|g' -e
AC_SUBST(SUBDIR_MAKEFILES_IN)
SMALL_JA_DIC=$with_small_ja_dic
AC_SUBST(SMALL_JA_DIC)
dnl You might wonder (I did) why epaths.h is generated by running make,
dnl rather than just letting configure generate it from epaths.in.
dnl One reason is that the various paths are not fully expanded (see above);

View file

@ -411,10 +411,13 @@ away in the buffer to search for an expansion.
@vindex dabbrev-check-all-buffers
@vindex dabbrev-check-other-buffers
@vindex dabbrev-ignored-buffer-modes
After scanning the current buffer, @kbd{M-/} normally searches other
buffers. The variables @code{dabbrev-check-all-buffers} and
@code{dabbrev-check-other-buffers} can be used to determine which
other buffers, if any, are searched.
other buffers, if any, are searched. Buffers that have major modes
derived from any of the modes in @code{dabbrev-ignored-buffer-modes}
are ignored.
@vindex dabbrev-ignored-buffer-names
@vindex dabbrev-ignored-buffer-regexps

View file

@ -347,11 +347,11 @@ move to the column number specified by the argument's numeric value.
@kindex C-x C-n
@findex set-goal-column
Use the current column of point as the @dfn{semipermanent goal column}
for @kbd{C-n} and @kbd{C-p} (@code{set-goal-column}) in the current
buffer. When a semipermanent goal column is in effect, those commands
always try to move to this column, or as close as possible to it,
after moving vertically. The goal column remains in effect until
canceled.
(@code{set-goal-column}) in the current buffer. When a semipermanent
goal column is in effect, @kbd{C-n}, @kbd{C-p}, @kbd{<prior>} and
@kbd{<next>} always try to move to this column, or as close as
possible to it, after moving vertically. The goal column remains in
effect until canceled.
@item C-u C-x C-n
Cancel the goal column. Henceforth, @kbd{C-n} and @kbd{C-p} try to
@ -653,14 +653,14 @@ Toggle automatic display of the current line number or column number.
displayed before each line, see @ref{Display Custom}.
@item M-=
Display the number of lines, words, and characters that are present in
the region (@code{count-words-region}). @xref{Mark}, for information
about the region.
Display the number of lines, sentences, words, and characters that are
present in the region (@code{count-words-region}). @xref{Mark}, for
information about the region.
@item M-x count-words
Display the number of lines, words, and characters that are present in
the buffer. If the region is active (@pxref{Mark}), display the
numbers for the region instead.
Display the number of lines, sentences, words, and characters that are
present in the buffer. If the region is active (@pxref{Mark}),
display the numbers for the region instead.
@item C-x =
Display the character code of character after point, character position of
@ -689,7 +689,7 @@ narrowed region and the line number relative to the whole buffer.
@kindex M-=
@findex count-words-region
@kbd{M-=} (@code{count-words-region}) displays a message reporting
the number of lines, words, and characters in the region
the number of lines, sentences, words, and characters in the region
(@pxref{Mark}, for an explanation of the region). With a prefix
argument, @kbd{C-u M-=}, the command displays a count for the entire
buffer.

View file

@ -178,7 +178,9 @@ list of customization variables and faces.
If you change the variable
@code{compilation-auto-jump-to-first-error} to a non-@code{nil} value,
Emacs automatically visits the locus of the first error message that
appears in the @file{*compilation*} buffer.
appears in the @file{*compilation*} buffer. (This variable can also
have the values @code{if-location-known} and @code{first-known}, which
modify the conditions for automatically visiting the error locus.)
Compilation mode provides the following additional commands. These
commands can also be used in @file{*grep*} buffers, where the
@ -287,6 +289,19 @@ window so that the current error message is @var{n} lines from the
top, whether or not there is a fringe; the default value, @code{nil},
gives the behavior described above.
@vindex compilation-hidden-output
Compilation output can sometimes be very verbose, and much of it isn't
of particular interest to a user. The
@code{compilation-hidden-output} user option should either be a regexp
or a list of regexps, and output that matches will be made invisible.
For instance, to hide the verbose output from recursive makefiles, you
can say something like:
@lisp
(setq compilation-hidden-output
'("^make[^\n]+\n"))
@end lisp
@vindex compilation-error-regexp-alist
@vindex grep-regexp-alist
To parse messages from the compiler, Compilation mode uses the

View file

@ -800,29 +800,45 @@ changing any environment or registry settings.
@pindex addpm, MS-Windows installation program
@cindex registry, setting environment variables (MS-Windows)
On MS-Windows, the installation program @command{addpm.exe} adds
values for @env{emacs_dir}, @env{EMACSLOADPATH}, @env{EMACSDATA},
@env{EMACSPATH}, @env{EMACSDOC}, @env{SHELL} and @env{TERM} to the
@file{HKEY_LOCAL_MACHINE} section of the system registry, under
@file{/Software/GNU/Emacs}. It does this because there is no standard
place to set environment variables across different versions of
Windows. Running @command{addpm.exe} is no longer strictly necessary
in recent versions of Emacs, but if you are upgrading from an older
version, running @command{addpm.exe} ensures that you do not have
older registry entries from a previous installation, which may not be
compatible with the latest version of Emacs.
When Emacs starts, as well as checking the environment, it also checks
the System Registry for those variables and for @env{HOME}, @env{LANG}
and @env{PRELOAD_WINSOCK}.
On MS-Windows, the environment variables @env{emacs_dir},
@env{EMACSLOADPATH}, @env{EMACSDATA}, @env{EMACSPATH}, @env{EMACSDOC},
@env{SHELL}, @env{TERM}, @env{HOME}, @env{LANG}, and
@env{PRELOAD_WINSOCK} can also be set in the @file{HKEY_CURRENT_USER}
or the @file{HKEY_LOCAL_MACHINE} section of the system registry, under
the @file{/Software/GNU/Emacs} key. When Emacs starts, as well as
checking the environment, it also checks the system registry for those
variables.
To determine the value of those variables, Emacs goes through the
following procedure. First, the environment is checked. If the
variable is not found there, Emacs looks for registry keys by that
name under @file{/Software/GNU/Emacs}; first in the
following procedure. First, it checks the environment. If the
variable is not found there, Emacs looks for a registry key by the
name of the variable under @file{/Software/GNU/Emacs}; first in the
@file{HKEY_CURRENT_USER} section of the registry, and if not found
there, in the @file{HKEY_LOCAL_MACHINE} section. Finally, if Emacs
still cannot determine the values, compiled-in defaults are used.
still cannot determine the values, it uses the compiled-in defaults.
Note that the registry settings have global system-wide effect: they
will affect all Emacs sessions run on the system. Thus, if you run
different Emacs versions, or use both installed and un-installed Emacs
executables, or build newer versions of Emacs, the settings in the
registry will cause all of them to use the same directories, which is
probably not what you want. For this reason, @emph{we recommend
against setting these variables in the registry}. If you have such
settings in the registry, we recommend that you remove them.
If you run the Emacs MS-Windows installation program
@command{addpm.exe}, it will update any existing registry settings of
the @env{emacs_dir}, @env{EMACSLOADPATH}, @env{EMACSDATA},
@env{EMACSPATH}, @env{EMACSDOC}, @env{SHELL}, and @env{TERM} variables
to have the values suitable for the installed Emacs version with which
@command{addpm.exe} came. Note that @command{addpm.exe} will
@emph{not} create any registry setting that didn't exist, it will only
update existing settings, which are most probably inherited from an
old Emacs installation, so that they are compatible with the newly
installed Emacs version. Running @command{addpm.exe} is no longer
necessary when installing recent versions of Emacs, so we only
recommend doing that if you are upgrading from an older version, and
cannot remove these settings from the registry for some reason.
In addition to the environment variables above, you can also add
settings to the @file{/Software/GNU/Emacs} registry key to specify X

View file

@ -122,7 +122,7 @@ listing. As an exception, if you type @kbd{C-x C-j} in a Dired
buffer, Emacs displays the directory listing of the parent directory
and places point on the line that corresponds to the directory where
you invoked @code{dired-jump}. Typing @kbd{C-x 4 C-j}
(@code{dired-jump-other-window} has the same effect, but displays the
(@code{dired-jump-other-window}) has the same effect, but displays the
Dired buffer in a new window.
The variable @code{dired-listing-switches} specifies the options to
@ -1711,6 +1711,9 @@ the originating program. Dragging files out of a Dired buffer is also
supported, by enabling the user option @code{dired-mouse-drag-files},
the mouse can be used to drag files onto other programs. When set to
@code{link}, it will make the other program (typically a file manager)
create a symbolic link to the file, and setting it to any other
non-@code{nil} value will make the other program open or create a copy
of the file.
create a symbolic link to the file; when set to @code{move}, it will
make the other program move the file to a new location, and setting it
to any other non-@code{nil} value will make the other program open or
create a copy of the file. The keyboard modifiers pressed during the
drag-and-drop operation can also control what action the other program
takes towards the file.

View file

@ -1594,7 +1594,9 @@ charge on the mode-line, by using the command
@code{battery-mode-line-format} determines the way the battery charge
is displayed; the exact mode-line message depends on the operating
system, and it usually shows the current battery charge as a
percentage of the total charge.
percentage of the total charge. The functions in
@code{battery-update-functions} are run after updating the mode line,
and can be used to trigger actions based on the battery status.
@cindex mode line, 3D appearance
@cindex attributes of mode line, changing
@ -1980,7 +1982,7 @@ The command @kbd{M-x display-line-numbers-mode} provides a
convenient way to turn on display of line numbers. This mode has a globalized
variant, @code{global-display-line-numbers-mode}. The user option
@code{display-line-numbers-type} controls which sub-mode of
line-number display, described above, will these modes activate.
line-number display, described above, these modes will activate.
@noindent
Note that line numbers are not displayed in the minibuffer and in the

View file

@ -326,6 +326,48 @@ of @code{require-final-newline} (@pxref{Customize Save}). If you have
already visited the same file in the usual (non-literal) manner, this
command asks you whether to visit it literally instead.
@findex find-sibling-file
@vindex find-sibling-rules
Files are sometimes (loosely) tied to other files, and you could call
these files @dfn{sibling files}. For instance, when editing C files,
if you have a file called @samp{"foo.c"}, you often also have a file
called @samp{"foo.h"}, and that could be its sibling file. Or you may
have different versions of a file, for instance
@samp{"src/emacs/emacs-27/lisp/allout.el"} and
@samp{"src/emacs/emacs-28/lisp/allout.el"} might be considered
siblings. Emacs provides the @code{find-sibling-file} command to jump
between sibling files, but it's impossible to guess at which files a
user might want to be considered siblings, so Emacs lets you configure
this freely by altering the @code{find-sibling-rules} user option.
This is a list of match/expansion elements.
For instance, to do the @samp{".c"} to @samp{".h"} mapping, you could
say:
@lisp
(setq find-sibling-rules
'(("\\([^/]+\\)\\.c\\'" "\\1.h")))
@end lisp
(@code{ff-find-related-file} offers similar functionality especially
geared towards C files, @pxref{Other C Commands}.)
Or, if you want to consider all files under
@samp{"src/emacs/DIR/file-name"} to be siblings of other @var{dir}s,
you could say:
@lisp
(setq find-sibling-rules
'(("src/emacs/[^/]+/\\(.*\\)\\'" "src/emacs/.*/\\1")))
@end lisp
As you can see, this is a list of @var{(MATCH EXPANSION...)} elements.
The @var{match} is a regular expression that matches the visited file
name, and each @var{expansion} may refer to match groups by using
@samp{\\1} and so on. The resulting expansion string is then applied
to the file system to see if any files match this expansion
(interpreted as a regexp).
@vindex find-file-hook
@vindex find-file-not-found-functions
Two special hook variables allow extensions to modify the operation

View file

@ -128,6 +128,12 @@ In addition, the text in the region becomes the primary selection
non-@code{nil} value, dragging the mouse over a stretch of text also
adds the text to the kill ring. The default is @code{nil}.
If this variable is @code{non-empty}, only copy to the kill ring if
the region is non-empty. For instance, if you mouse drag an area that
is less than a half a character, you'd normally get the empty string
in your kill ring, but with @code{non-empty}, this short mouse drag
won't affect the kill ring.
@vindex mouse-scroll-min-lines
If you move the mouse off the top or bottom of the window while
dragging, the window scrolls at a steady rate until you move the mouse
@ -136,6 +142,12 @@ entirely on the screen. The number of lines scrolled per step depends
on how far away from the window edge the mouse has gone; the variable
@code{mouse-scroll-min-lines} specifies a minimum step size.
@vindex mouse-drag-mode-line-buffer
If you enable the option @code{mouse-drag-mode-line-buffer} and
dragging files is supported by the window system, then dragging the
mouse on the buffer name portion of the mode line will drag that
buffer's file to another program or frame.
@findex mouse-yank-primary
@findex mouse-yank-at-click
Clicking with the middle mouse button, @kbd{mouse-2}, moves point to
@ -1651,11 +1663,15 @@ For additional customization options for displaying tooltips, use
@kbd{M-x customize-group @key{RET} tooltip @key{RET}}.
@vindex use-system-tooltips
If Emacs is built with the GTK+ toolkit or Haiku windowing support,
it displays tooltips via the toolkit, using the default appearance of
the toolkit's tooltips. To disable this, change the variable
If Emacs is built with the GTK+ toolkit, Nextstep windowing, or
Haiku windowing support, it displays tooltips via the toolkit, using
the default appearance of the toolkit's tooltips.@footnote{The
foreground and background colors of toolkit-created tooltips on
Nextstep can also be customized by setting the @code{foreground} and
@code{background} frame parameters that are part of
@code{tooltip-frame-parameters}.} To disable this, change the variable
@code{use-system-tooltips} to @code{nil}. If you do this, or if Emacs
is built without GTK+ or Haiku windowing support, most attributes of
is built without the appropriate windowing support, most attributes of
the tooltip text are specified by the @code{tooltip} face, and by X
resources (@pxref{X Resources}).

View file

@ -229,9 +229,11 @@ from a variety of coding systems when reading or writing it.
@item Command
A command is a Lisp function specially defined to be able to serve as
a key binding in Emacs or to be invoked by its name
(@pxref{Glossary---Command Name}). When you type a key sequence
(q.v.), its binding (q.v.@:) is looked up in the relevant keymaps
(q.v.@:) to find the command to run. @xref{Commands}.
(@pxref{Glossary---Command Name}). (Another term for @dfn{command} is
@dfn{interactive function}---they are used interchangeably.) When you
type a key sequence (q.v.), its binding (q.v.@:) is looked up in the
relevant keymaps (q.v.@:) to find the command to run.
@xref{Commands}.
@item Command History
@xref{Glossary---Minibuffer History}.
@ -775,6 +777,14 @@ typing sequences of @acronym{ASCII} characters (q.v.). @xref{Input Methods}.
Insertion means adding text into the buffer, either from the keyboard
or from some other place in Emacs.
@item Interactive Function
A different term for @dfn{command} (q.v.).
@item Interactive Invocation
A function can be called from Lisp code, or called as a user level
command (via @kbd{M-x}, a key binding or a menu). In the latter case,
the function is said to be @dfn{called interactively}.
@item Interlocking
@xref{Glossary---File Locking}.

View file

@ -111,24 +111,27 @@ active (@pxref{Using Region}).
@kindex M-\
@findex delete-horizontal-space
@kindex M-SPC
@findex just-one-space
@findex cycle-spacing
The other delete commands are those that delete only whitespace
characters: spaces, tabs and newlines. @kbd{M-\}
(@code{delete-horizontal-space}) deletes all the spaces and tab
characters before and after point. With a prefix argument, this only
deletes spaces and tab characters before point. @kbd{M-@key{SPC}}
(@code{just-one-space}) does likewise but leaves a single space before
deletes spaces and tab characters before point.
@findex just-one-space
@code{just-one-space} does likewise but leaves a single space before
point, regardless of the number of spaces that existed previously
(even if there were none before). With a numeric argument @var{n}, it
leaves @var{n} spaces before point if @var{n} is positive; if @var{n}
is negative, it deletes newlines in addition to spaces and tabs,
leaving @minus{}@var{n} spaces before point. The command @code{cycle-spacing}
acts like a more flexible version of @code{just-one-space}. It
does different things if you call it repeatedly in succession.
The first call acts like @code{just-one-space}, the next removes
all whitespace, and a third call restores the original whitespace.
leaving @minus{}@var{n} spaces before point.
@kindex M-SPC
@findex cycle-spacing
@vindex cycle-spacing-actions
The command @code{cycle-spacing} (@kbd{M-@key{SPC}}) acts like a more
flexible version of @code{just-one-space}. It performs different
space cleanup actions defined by @code{cycle-spacing-actions}, in a
cyclic manner, if you call it repeatedly in succession.
@kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines
after the current line. If the current line is blank, it deletes all

View file

@ -179,7 +179,7 @@ itself counts as the first repetition, since it is executed as you
define it, so @kbd{C-u 4 C-x )} executes the macro immediately 3
additional times.
@findex kdb-macro-redisplay
@findex kmacro-redisplay
@kindex C-x C-k d
While executing a long-running keyboard macro, it can sometimes be
useful to trigger a redisplay (to show how far we've gotten). The

View file

@ -223,6 +223,7 @@ keystrokes. Here is a list of these events.
@table @key
@item ns-open-file
@cindex ns-open-file event
@vindex ns-pop-up-frames
This event occurs when another Nextstep application requests that
Emacs open a file. A typical reason for this would be a user
@ -239,44 +240,29 @@ means to always visit the file in a new frame. A value of @code{nil}
means to always visit the file in the selected frame.
@item ns-open-temp-file
@cindex ns-open-temp-file event
This event occurs when another application requests that Emacs open a
temporary file. By default, this is handled by just generating a
@code{ns-open-file} event, the results of which are described above.
@item ns-open-file-line
@cindex ns-open-file-line event
Some applications, such as ProjectBuilder and gdb, request not only a
particular file, but also a particular line or sequence of lines in
the file. Emacs handles this by visiting that file and highlighting
the requested line (@code{ns-open-file-select-line}).
@item ns-drag-n-drop
This event occurs when a user drags an object from another application
into an Emacs frame. The default behavior is to open a file in the
window under the mouse, or to insert text at point of the window under
the mouse.
The sending application has some limited ability to decide how Emacs
handles the sent object, but the user may override the default
behavior by holding one or more modifier key.
@table @kbd
@item control
Insert as text in the current buffer. If the object is a file, this
will insert the filename.
@item alt/option
Attempt to open the object as though it is a file or URL.
@item super/command
Perform the default action for the type. This can be useful when an
application is overriding the default behavior.
@end table
The modifier keys listed above are defined by macOS and are unaffected
by user changes to the modifiers in Emacs.
@item ns-power-off
@cindex ns-power-off event
This event occurs when the user logs out and Emacs is still running, or when
``Quit Emacs'' is chosen from the application menu.
The default behavior is to save all file-visiting buffers.
@item ns-show-prefs
@cindex ns-show-prefs event
This event occurs when the user selects ``Preferences'' from the
application menu. By default, it is bound to the command
@code{customize}.
@end table
@cindex using Nextstep services (macOS)

View file

@ -1316,6 +1316,12 @@ point is on a directory entry, mark all files in that directory tree
(@code{vc-dir-mark-all-files}). With a prefix argument, mark all
listed files and directories.
@findex vc-dir-mark-by-regexp
@item %
You can use this command to mark files by regexp
(@code{vc-dir-mark-by-regexp}). If given a prefix, unmark files
instead.
@item G
Add the file under point to the list of files that the VC should
ignore (@code{vc-dir-ignore}). For instance, if the VC is Git, it
@ -1660,6 +1666,9 @@ support additional types of projects.
Which files do or don't belong to a project is also determined by
the project back-end. For example, the VC back-end doesn't consider
``ignored'' files (@pxref{VC Ignore}) to be part of the project.
Also, the VC Project back-end considers ``untracked'' files by default.
That behavior is controllable with the variable
@code{project-vc-include-untracked}.
@menu
* Project File Commands:: Commands for handling project files.
@ -2817,6 +2826,13 @@ place of a file name on the command line. @command{etags} will read from
standard input and mark the produced tags as belonging to the file
@var{file}.
For C and C++, if the source files don't observe the GNU Coding
Standards' convention if having braces (@samp{@{} and @samp{@}}) in
column zero only for top-level definitions, like functions and
@code{struct} definitions, we advise that you use the
@samp{--ignore-indentation} option, to prevent @command{etags} from
incorrectly interpreting closing braces in column zero.
@samp{etags --help} outputs the list of the languages @command{etags}
knows, and the file name rules for guessing the language. It also prints
a list of all the available @command{etags} options, together with a short

View file

@ -291,12 +291,23 @@ instead signal an error if the mark is inactive.
@cindex Delete Selection mode
@cindex mode, Delete Selection
@findex delete-selection-mode
@vindex delete-selection-temporary-region
By default, text insertion occurs normally even if the mark is
active---for example, typing @kbd{a} inserts the character @samp{a},
then deactivates the mark. Delete Selection mode, a minor mode,
modifies this behavior: if you enable that mode, then inserting text
while the mark is active causes the text in the region to be deleted
first. To toggle Delete Selection mode on or off, type @kbd{M-x
first. However, you can tune this behavior by customizing the
@code{delete-selection-temporary-region} option. Its default value is
@code{nil}, but you can set it to @code{t}, in which case only
temporarily-active regions will be replaced: those which are set by
dragging the mouse (@pxref{Setting Mark}) or by shift-selection
(@pxref{Shift Selection}), as well as by @kbd{C-u C-x C-x} when
Transient Mark Mode is disabled. You can further tune the behavior by
setting @code{delete-selection-temporary-region} to @code{selection}:
then temporary regions by @kbd{C-u C-x C-x} won't be replaced, only
the ones activated by dragging the mouse or shift-selection. To
toggle Delete Selection mode on or off, type @kbd{M-x
delete-selection-mode}.
@node Mark Ring

View file

@ -381,16 +381,16 @@ used with the completion list:
@vindex minibuffer-completion-auto-choose
@item M-@key{DOWN}
@itemx M-@key{UP}
These keys will navigate through the completions displayed in the
completions buffer. When @code{minibuffer-completion-auto-choose} is
non-@code{nil} (which is the default), using these commands will
automatically insert the current completion candidate in the
minibuffer. If this user option is @code{nil}, the keys will navigate
the same way as before, but won't automatically insert the candidate
in the minibuffer. Instead you have to use the @kbd{M-@key{RET}} command to
do that. With a prefix argument, @kbd{C-u M-@key{RET}} inserts the
currently active candidate to the minibuffer, but doesn't exit the
minibuffer.
While in the minibuffer, these keys navigate through the completions
displayed in the completions buffer. When
@code{minibuffer-completion-auto-choose} is non-@code{nil} (which is
the default), using these commands also inserts the current completion
candidate into the minibuffer. If
@code{minibuffer-completion-auto-choose} is @code{nil}, you can use
the @kbd{M-@key{RET}} command to insert the completion candidates into
the minibuffer. By default, that exits the minibuffer, but with a
prefix argument, @kbd{C-u M-@key{RET}} inserts the currently active
candidate without exiting the minibuffer.
@findex switch-to-completions
@item M-v
@ -407,7 +407,10 @@ ways (@pxref{Windows}).
@itemx mouse-1
@itemx mouse-2
While in the completion list buffer, this chooses the completion at
point (@code{choose-completion}).
point (@code{choose-completion}). With a prefix argument, @kbd{C-u
@key{RET}} inserts the completion at point into the minibuffer, but
doesn't exit the minibuffer---thus, you can change your mind and
choose another candidate.
@findex next-completion
@item @key{TAB}
@ -682,17 +685,20 @@ behavior only when there are @var{n} or fewer alternatives.
@vindex completions-format
When displaying completions, Emacs will normally pop up a new buffer
to display the completions. The completions will (by default) be
sorted in columns horizontally in alphabetical order, but this can be
changed by changing the @code{completions-format} user option. If
@code{vertical}, sort the completions vertically in columns instead,
and if @code{one-column}, just use a single column.
to display the completions. The completions will by default be sorted
horizontally, using as many columns as will fit in the window-width,
but this can be changed by customizing the @code{completions-format}
user option. If its value is @code{vertical}, Emacs will sort the
completions vertically instead, and if it's @code{one-column}, Emacs
will use just one column.
@vindex completions-sort
This user option controls how completions are sorted in the
@samp{*Completions*} buffer. The default is @code{alphabetical}, but
it can also be a function which will be called with the list of
completions, and should return the list in the desired order.
The @code{completions-sort} user option controls the order in which
the completions are sorted in the @samp{*Completions*} buffer. The
default is @code{alphabetical}, which sorts in alphabetical order.
The value @code{nil} disables sorting. The value can also be a
function, which will be called with the list of completions, and
should return the list in the desired order.
@vindex completions-max-height
When @code{completions-max-height} is non-@code{nil}, it limits the

View file

@ -89,6 +89,11 @@ list of available packages from package archive servers. If the
network is unavailable, it falls back on the most recently retrieved
list.
The main command to use in the package list buffer is the @key{x}
command. If the package under point isn't installed already, this
command will install it. If the package under point is already
installed, this command will delete it.
The following commands are available in the package menu:
@table @kbd
@ -162,7 +167,10 @@ installed versions (marked with status @samp{obsolete}).
@findex package-menu-execute
Download and install all packages marked with @kbd{i}, and their
dependencies; also, delete all packages marked with @kbd{d}
(@code{package-menu-execute}). This also removes the marks.
(@code{package-menu-execute}). This also removes the marks. If no
packages are marked, this command will install the package under point
(if it isn't installed already), or delete the package under point (if
it's already installed).
@item g
@item r
@ -321,12 +329,14 @@ version of the package, a newer version is also installed.
@findex package-install
@findex package-update
@findex package-update-all
Packages are most conveniently installed using the package menu
(@pxref{Package Menu}), but you can also use the command @kbd{M-x
package-install}. This prompts for the name of a package with the
@samp{available} status, then downloads and installs it. Similarly,
if you want to update a package, you can use the @kbd{M-x
package-update} command.
package-update} command, and if you just want to update all the
packages, you can use the @kbd{M-x package-update-all} command.
@cindex package requirements
A package may @dfn{require} certain other packages to be installed,

View file

@ -250,10 +250,10 @@ where it treats each chapter, section, etc., as a definition.
together.)
@findex imenu
If you type @kbd{M-g i}, it reads the name of a definition using the
minibuffer, then moves point to that definition. You can use
completion to specify the name; the command always displays the whole
list of valid names.
If you type @kbd{M-g i} (@code{imenu}), it reads the name of a
definition using the minibuffer, then moves point to that definition.
You can use completion to specify the name; the command always
displays the whole list of valid names.
@findex imenu-add-menubar-index
Alternatively, you can bind the command @code{imenu} to a mouse
@ -1439,9 +1439,13 @@ performs completion using the function, variable, or property names
defined in the current Emacs session.
In all other respects, in-buffer symbol completion behaves like
minibuffer completion. For instance, if Emacs cannot complete to a
unique symbol, it displays a list of completion alternatives in
another window. @xref{Completion}.
minibuffer completion. For instance, if Emacs cannot complete to
a unique symbol, it displays a list of completion alternatives in
another window. Then you can use the keys @kbd{M-@key{DOWN}} and
@kbd{M-@key{UP}} to navigate through the completions displayed
in the completions buffer without leaving the original buffer,
and the key @kbd{M-@key{RET}} to insert the currently highlighted
completion to the buffer. @xref{Completion}.
In Text mode and related modes, @kbd{M-@key{TAB}} completes words
based on the spell-checker's dictionary. @xref{Spelling}.

View file

@ -1027,24 +1027,11 @@ you search for @samp{a.*?$} against the text @samp{abbab} followed by
a newline, it matches the whole string. Since it @emph{can} match
starting at the first @samp{a}, it does.
@item @kbd{\@{@var{n}\@}}
is a postfix operator specifying @var{n} repetitions---that is, the
preceding regular expression must match exactly @var{n} times in a
row. For example, @samp{x\@{4\@}} matches the string @samp{xxxx} and
nothing else.
@item @kbd{\@{@var{n},@var{m}\@}}
is a postfix operator specifying between @var{n} and @var{m}
repetitions---that is, the preceding regular expression must match at
least @var{n} times, but no more than @var{m} times. If @var{m} is
omitted, then there is no upper limit, but the preceding regular
expression must match at least @var{n} times.@* @samp{\@{0,1\@}} is
equivalent to @samp{?}. @* @samp{\@{0,\@}} is equivalent to
@samp{*}. @* @samp{\@{1,\@}} is equivalent to @samp{+}.
@cindex set of alternative characters, in regular expressions
@cindex character set, in regular expressions
@item @kbd{[ @dots{} ]}
is a @dfn{character set}, beginning with @samp{[} and terminated by
@samp{]}.
is a @dfn{set of alternative characters}, or a @dfn{character set},
beginning with @samp{[} and terminated by @samp{]}.
In the simplest case, the characters between the two brackets are what
this set can match. Thus, @samp{[ad]} matches either one @samp{a} or
@ -1061,9 +1048,10 @@ which matches any lower-case @acronym{ASCII} letter or @samp{$}, @samp{%} or
period. As another example, @samp{[α-ωί]} matches all lower-case
Greek letters.
@cindex character classes, in regular expressions
You can also include certain special @dfn{character classes} in a
character set. A @samp{[:} and balancing @samp{:]} enclose a
character class inside a character alternative. For instance,
character class inside a set of alternative characters. For instance,
@samp{[[:alnum:]]} matches any letter or digit. @xref{Char Classes,,,
elisp, The Emacs Lisp Reference Manual}, for a list of character
classes.
@ -1131,13 +1119,13 @@ no preceding expression on which the @samp{*} can act. It is poor practice
to depend on this behavior; it is better to quote the special character anyway,
regardless of where it appears.
As a @samp{\} is not special inside a character alternative, it can
never remove the special meaning of @samp{-} or @samp{]}. So you
should not quote these characters when they have no special meaning
either. This would not clarify anything, since backslashes can
legitimately precede these characters where they @emph{have} special
meaning, as in @samp{[^\]} (@code{"[^\\]"} for Lisp string syntax),
which matches any single character except a backslash.
As a @samp{\} is not special inside a set of alternative characters, it can
never remove the special meaning of @samp{-}, @samp{^} or @samp{]}.
You should not quote these characters when they have no special
meaning. This would not clarify anything, since backslashes
can legitimately precede these characters where they @emph{have}
special meaning, as in @samp{[^\]} (@code{"[^\\]"} for Lisp string
syntax), which matches any single character except a backslash.
@node Regexp Backslash
@section Backslash in Regular Expressions
@ -1202,11 +1190,11 @@ matches the same text that matched the @var{d}th occurrence of a
@samp{\( @dots{} \)} construct. This is called a @dfn{back
reference}.
After the end of a @samp{\( @dots{} \)} construct, the matcher remembers
the beginning and end of the text matched by that construct. Then,
later on in the regular expression, you can use @samp{\} followed by the
digit @var{d} to mean ``match the same text matched the @var{d}th time
by the @samp{\( @dots{} \)} construct''.
After the end of a @samp{\( @dots{} \)} construct, the matcher
remembers the beginning and end of the text matched by that construct.
Then, later on in the regular expression, you can use @samp{\}
followed by the digit @var{d} to mean ``match the same text matched
the @var{d}th @samp{\( @dots{} \)} construct''.
The strings matching the first nine @samp{\( @dots{} \)} constructs
appearing in a regular expression are assigned numbers 1 through 9 in
@ -1223,6 +1211,21 @@ If a particular @samp{\( @dots{} \)} construct matches more than once
(which can easily happen if it is followed by @samp{*}), only the last
match is recorded.
@item @kbd{\@{@var{m}\@}}
is a postfix operator specifying @var{m} repetitions---that is, the
preceding regular expression must match exactly @var{m} times in a
row. For example, @samp{x\@{4\@}} matches the string @samp{xxxx} and
nothing else.
@item @kbd{\@{@var{m},@var{n}\@}}
is a postfix operator specifying between @var{m} and @var{n}
repetitions---that is, the preceding regular expression must match at
least @var{m} times, but no more than @var{n} times. If @var{n} is
omitted, then there is no upper limit, but the preceding regular
expression must match at least @var{m} times.@* @samp{\@{0,1\@}} is
equivalent to @samp{?}. @* @samp{\@{0,\@}} is equivalent to
@samp{*}. @* @samp{\@{1,\@}} is equivalent to @samp{+}.
@item \`
matches the empty string, but only at the beginning of the string or
buffer (or its accessible portion) being matched against.
@ -1824,12 +1827,18 @@ occurrence of @var{string}. When done, exit the recursive editing level
with @kbd{C-M-c} to proceed to the next occurrence.
@item e
@itemx E
to edit the replacement string in the minibuffer. When you exit the
minibuffer by typing @key{RET}, the minibuffer contents replace the
current occurrence of the pattern. They also become the new
replacement string for any further occurrences.
@item E
is like @kbd{e}, but the next replacement will be done with exact
case. I.e., if you have a @code{query-replace} from @samp{foo} to
@samp{bar}, a text like @samp{Foo} will be normally be replaced with
@samp{Bar}. Use this command to do the current replacement with exact
case.
@item C-l
to redisplay the screen. Then you must type another character to
specify what to do with this occurrence.

View file

@ -659,6 +659,7 @@ such as MIME support. Another available mode is MH-E
(@pxref{Top,,MH-E,mh-e, The Emacs Interface to MH}).
@vindex mail-user-agent
@findex define-mail-user-agent
You can choose any of these @dfn{mail user agents} as your preferred
method for editing and sending mail. The commands @kbd{C-x m},
@kbd{C-x 4 m} and @kbd{C-x 5 m} use whichever agent you have
@ -667,7 +668,10 @@ the bug reporter (@pxref{Bugs}). To specify a mail user agent,
customize the variable @code{mail-user-agent}. Currently, legitimate
values include @code{message-user-agent} (Message mode)
@code{sendmail-user-agent} (Mail mode), @code{gnus-user-agent}, and
@code{mh-e-user-agent}.
@code{mh-e-user-agent}. Additional options may be available; check
in the manual of your mail user agent package for details. You may
also define another mail user agent using
@code{define-mail-user-agent}.
If you select a different mail-composition method, the information
in this chapter about the mail buffer and Message mode does not apply;

View file

@ -269,7 +269,7 @@ with the file's version control type.
@vindex vc-handled-backends
The variable @code{vc-handled-backends} determines which version
control systems VC should handle. The default value is @code{(RCS CVS
SVN SCCS SRC Bzr Git Hg Mtn)}, so it contains all the version systems
SVN SCCS SRC Bzr Git Hg)}, so it contains all the version systems
that are currently supported. If you want VC to ignore one or more of
these systems, exclude its name from the list. To disable VC
entirely, set this variable to @code{nil}.

View file

@ -541,10 +541,12 @@ file formerly visited.
@ref{Text}.
@defun buffer-modified-p &optional buffer
This function returns @code{t} if the buffer @var{buffer} has been modified
since it was last read in from a file or saved, or @code{nil}
otherwise. If @var{buffer} is not supplied, the current buffer
is tested.
This function returns non-@code{nil} if @var{buffer} has
been modified since it was last read in from a file or saved, or
@code{nil} otherwise. If @var{buffer} has been auto-saved since the
time it was last modified, this function returns the symbol
@code{autosaved}. If @var{buffer} is @code{nil} or omitted, it
defaults to the current buffer.
@end defun
@defun set-buffer-modified-p flag
@ -563,8 +565,10 @@ function @code{force-mode-line-update} works by doing this:
@end defun
@defun restore-buffer-modified-p flag
Like @code{set-buffer-modified-p}, but does not force redisplay
of mode lines.
Like @code{set-buffer-modified-p}, but does not force redisplay of
mode lines. This function also allows @var{flag}'s value to be
the symbol @code{autosaved}, which marks the buffer as modified and
auto-saved after the last modification.
@end defun
@deffn Command not-modified &optional arg

View file

@ -2615,7 +2615,7 @@ POSITION is assumed to lie in a window text area."
@end example
@end defun
@defun posn-col-row position
@defun posn-col-row position &optional use-window
This function returns a cons cell @w{@code{(@var{col} . @var{row})}},
containing the estimated column and row corresponding to buffer
position described by @var{position}. The return value is given in
@ -2623,7 +2623,11 @@ units of the frame's default character width and default line height
(including spacing), as computed from the @var{x} and @var{y} values
corresponding to @var{position}. (So, if the actual characters have
non-default sizes, the actual row and column may differ from these
computed values.)
computed values.) If the optional @var{window} argument is
non-@code{nil}, use the default character width in the window
indicated by @var{position} instead of the frame. (This makes a
difference if that window is showing a buffer with a non-default
zooming level, for instance.)
Note that @var{row} is counted from the top of the text area. If the
window given by @var{position} possesses a header line (@pxref{Header

View file

@ -525,7 +525,7 @@ core pattern can have the following forms:
@table @code
@item _
@item _@r{ (underscore)}
Matches any @var{expval}.
This is also known as @dfn{don't care} or @dfn{wildcard}.
@ -629,7 +629,10 @@ Attempts to match @var{pattern1}, @var{pattern2}, @dots{}, in order,
until one of them succeeds. In that case, @code{or} likewise matches,
and the rest of the sub-patterns are not tested.
To present a consistent environment (@pxref{Intro Eval})
To present a consistent environment
@ifnottex
(@pxref{Intro Eval})
@end ifnottex
to @var{body-forms} (thus avoiding an evaluation error on match),
the set of variables bound by the pattern is the union of the
variables bound by each sub-pattern. If a variable is not bound by

View file

@ -376,7 +376,7 @@ name) and the new value, and should do whatever is necessary to update
the value properly for this option (which may not mean simply setting
the option as a Lisp variable); preferably, though, it should not
modify its value argument destructively. The default for
@var{setfunction} is @code{set-default}.
@var{setfunction} is @code{set-default-toplevel-value}.
If you specify this keyword, the variable's documentation string
should describe how to do the same job in hand-written Lisp code.
@ -387,7 +387,7 @@ Specify @var{getfunction} as the way to extract the value of this
option. The function @var{getfunction} should take one argument, a
symbol, and should return whatever customize should use as the
current value for that symbol (which need not be the symbol's Lisp
value). The default is @code{default-value}.
value). The default is @code{default-toplevel-value}.
You have to really understand the workings of Custom to use
@code{:get} correctly. It is meant for values that are treated in
@ -409,11 +409,11 @@ do not reinitialize it if it is already non-void.
@item custom-initialize-default
Like @code{custom-initialize-set}, but use the function
@code{set-default} to set the variable, instead of the variable's
@code{:set} function. This is the usual choice for a variable whose
@code{:set} function enables or disables a minor mode; with this choice,
defining the variable will not call the minor mode function, but
customizing the variable will do so.
@code{set-default-toplevel-value} to set the variable, instead of the
variable's @code{:set} function. This is the usual choice for a
variable whose @code{:set} function enables or disables a minor mode;
with this choice, defining the variable will not call the minor mode
function, but customizing the variable will do so.
@item custom-initialize-reset
Always use the @code{:set} function to initialize the variable. If
@ -424,7 +424,7 @@ This is the default @code{:initialize} function.
@item custom-initialize-changed
Use the @code{:set} function to initialize the variable, if it is
already set or has been customized; otherwise, just use
@code{set-default}.
@code{set-default-toplevel-value}.
@item custom-initialize-delay
This function behaves like @code{custom-initialize-set}, but it

View file

@ -2010,6 +2010,11 @@ Tables}). The width of a tab character is usually @code{tab-width}
(@pxref{Usual Display}).
@end defun
@defun char-uppercase-p char
Return non-@code{nil} if @var{char} is an uppercase character
according to Unicode.
@end defun
@defun string-width string &optional from to
This function returns the width in columns of the string @var{string},
if it were displayed in the current buffer and the selected window.
@ -2252,20 +2257,6 @@ This is a convenience function that uses @code{window-text-pixel-size}
to compute the width of @var{string} (in pixels).
@end defun
@defun window-char-pixel-width &optional window face
Return the average character width for the font used by @var{face} in
@var{window}. If @var{face} is @code{nil} or omitted, the
@code{default} face is used. If @var{windows} is @code{nil} or
omitted, the currently selected window is used.
@end defun
@defun window-char-pixel-height &optional window face
Return the average character height for the font used by @var{face} in
@var{window}. If @var{face} is @code{nil} or omitted, the
@code{default} face is used. If @var{windows} is @code{nil} or
omitted, the currently selected window is used.
@end defun
@defun line-pixel-height
This function returns the height in pixels of the line at point in the
selected window. The value includes the line spacing of the line
@ -5066,7 +5057,7 @@ which are evaluated at display time. This could be unsafe in certain
situations, e.g., when the display specification was generated by some
external program/agent. Wrapping a display specification in a list
that begins with the special symbol @code{disable-eval}, as in
@w{@code{('disable-eval @var{spec})}}, will disable evaluation of any
@w{@code{(disable-eval @var{spec})}}, will disable evaluation of any
Lisp in @var{spec}, while still supporting all the other display
property features.
@ -8228,7 +8219,10 @@ help buffer.
The window's display table, if there is one, takes precedence over the
buffer's display table. If neither exists, Emacs tries to use the
standard display table; if that is @code{nil}, Emacs uses the usual
character display conventions (@pxref{Usual Display}).
character display conventions (@pxref{Usual Display}). (Emacs does
not ``merge'' display tables: For instance, if the window has a
display table, the buffer's display table and the standard display
table are completely ignored.)
Note that display tables affect how the mode line is displayed, so
if you want to force redisplay of the mode line using a new display

View file

@ -593,6 +593,7 @@ Advising Emacs Lisp Functions
* Advising Named Functions:: Advising named functions.
* Advice Combinators:: Ways to compose advice.
* Porting Old Advice:: Adapting code using the old defadvice.
* Advice and Byte Code:: Not all functions can be advised.
Macros
@ -739,6 +740,7 @@ Reading and Printing Lisp Objects
* Output Functions:: Functions to print Lisp objects as text.
* Output Variables:: Variables that control what the printing
functions do.
* Output Overrides:: Overriding output variables.
Minibuffers

View file

@ -435,7 +435,7 @@ expansion.
@cindex forms, special
@cindex evaluation of special forms
A @dfn{special form} is a primitive function specially marked so that
A @dfn{special form} is a primitive specially marked so that
its arguments are not all evaluated. Most special forms define control
structures or perform variable bindings---things which functions cannot
do.

View file

@ -581,9 +581,12 @@ contents of the file. This is better than simply deleting the buffer
contents and inserting the whole file, because (1) it preserves some
marker positions and (2) it puts less data in the undo list.
It is possible to read a special file (such as a FIFO or an I/O device)
with @code{insert-file-contents}, as long as @var{replace} and
@var{visit} are @code{nil}.
It is possible to read a special file (such as a FIFO or an I/O
device) with @code{insert-file-contents}, as long as @var{replace},
and @var{visit} and @var{beg} are @code{nil}. However, you should
normally use an @var{end} argument for these files to avoid inserting
(potentially) unlimited data into the buffer (for instance, when
inserting data from @file{/dev/urandom}).
@end defun
@defun insert-file-contents-literally filename &optional visit beg end replace
@ -3112,10 +3115,16 @@ except those two. It is useful as the @var{match-regexp} argument to
returns @code{nil}, if directory @samp{/foo} is empty.
@end defvr
@defun file-expand-wildcards pattern &optional full
@defun file-expand-wildcards pattern &optional full regexp
This function expands the wildcard pattern @var{pattern}, returning
a list of file names that match it.
@var{pattern} is, by default, a ``glob''/wildcard string, e.g.,
@samp{"/tmp/*.png"} or @samp{"/*/*/foo.png"}, but can also be a
regular expression if the optional @var{regexp} parameter is non-nil.
In any case, the matches are applied per sub-directory, so a match
can't span a parent/sub directory.
If @var{pattern} is written as an absolute file name,
the values are absolute also.

View file

@ -458,6 +458,18 @@ monitor, the same string as returned by the function
@var{display} should be the name of an X display (a string).
@end deffn
@cindex monitor change functions
@defvar display-monitors-changed-functions
This variable is an abnormal hook run when the monitor configuration
changes, which can happen if a monitor is rotated, moved, added or
removed from a multiple-monitor setup, if the primary monitor changes,
or if the resolution of a monitor changes. It is called with a single
argument consisting of the terminal on which the monitor configuration
changed. Programs should call @code{display-monitor-attributes-list}
with the terminal as the argument to retrieve the new monitor
configuration on that terminal.
@end defvar
@node Frame Geometry
@section Frame Geometry
@cindex frame geometry
@ -683,9 +695,9 @@ The position of the top left corner of the native frame specifies the
indicate that position for the various builds:
@itemize @w{}
@item (1) non-toolkit and terminal frames
@item (1) non-toolkit, Haiku, and terminal frames
@item (2) Lucid, Motif, MS-Windows, and Haiku frames
@item (2) Lucid, Motif, and MS-Windows frames
@item (3) GTK+ and NS frames
@end itemize
@ -1734,16 +1746,14 @@ fit will be clipped by the window manager.
@item fullscreen
This parameter specifies whether to maximize the frame's width, height
or both. Its value can be @code{fullwidth}, @code{fullheight},
@code{fullboth}, or @code{maximized}.@footnote{On Haiku, setting
@code{fullscreen} to @code{fullwidth} or @code{fullheight} has no
effect.} A @dfn{fullwidth} frame is as
@code{fullboth}, or @code{maximized}. A @dfn{fullwidth} frame is as
wide as possible, a @dfn{fullheight} frame is as tall as possible, and
a @dfn{fullboth} frame is both as wide and as tall as possible. A
@dfn{maximized} frame is like a ``fullboth'' frame, except that it usually
keeps its title bar and the buttons for resizing
and closing the frame. Also, maximized frames typically avoid hiding
any task bar or panels displayed on the desktop. A ``fullboth'' frame,
on the other hand, usually omits the title bar and occupies the entire
@dfn{maximized} frame is like a ``fullboth'' frame, except that it
usually keeps its title bar and the buttons for resizing and closing
the frame. Also, maximized frames typically avoid hiding any task bar
or panels displayed on the desktop. A ``fullboth'' frame, on the
other hand, usually omits the title bar and occupies the entire
available screen space.
Full-height and full-width frames are more similar to maximized
@ -3877,8 +3887,9 @@ in the buffer. The default is to use the @code{arrow} (non-text)
pointer style.
@end defopt
When using X, you can specify what the @code{text} pointer style
really looks like by setting the variable @code{x-pointer-shape}.
When using some window systems, you can specify what the @code{text}
pointer style really looks like by setting the variable
@code{x-pointer-shape}.
@defvar x-pointer-shape
This variable specifies the pointer shape to use ordinarily in the
@ -3932,6 +3943,13 @@ overlay or a pair of markers stands for text in the overlay or between
the markers. The argument @var{data} may also be a vector of valid
non-vector selection values.
If @var{data} is a string, then its text properties can specify values
used for individual data types. For example, if @var{data} has a
property named @code{text/uri-list}, then a call to
@code{gui-get-selection} with the data type @code{text/uri-list} will
result in the value of that property being used instead of @var{data}
itself.
This function returns @var{data}.
@end deffn
@ -4018,16 +4036,46 @@ amount of different data types on the clipboard.
@section Drag and Drop
@cindex drag and drop
When the user drops something from another application over Emacs,
Emacs will try to insert any text and open any URL that was dropped.
If text was dropped, then it will always be inserted at the location
of the mouse pointer when the drop happened, or saved in the kill ring
if insertion failed (which can happen if the buffer is read-only). If
it was an URL, then Emacs tries to call an appropriate handler
function by first matching the URL against regexps defined in
@code{dnd-protocol-alist}, and then against @code{browse-url-handlers}
and @code{browse-url-default-handlers}, and failing that, inserting
the URL as plain text.
@defvar dnd-protocol-alist
This variable is a list of cons cells of the form
@w{@code{(@var{pattern} . @var{action})}}. @var{pattern} is a regexp
that URLs are matched against after being dropped. @var{action} is a
function that is called with two arguments should a URL being dropped
match @var{pattern}: the URL being dropped, and the action being
performed for the drop (one of the symbols @code{copy}, @code{move},
@code{link}, @code{private} or @code{ask}).
@end defvar
@cindex drag and drop, X
@cindex drag and drop, other formats
Emacs implements drag-and-drop for text and URLs individually for
each window system, and does not by default support the dropping of
anything else. Code that wishes to support the dropping of content
types not supported by Emacs can utilize the X-specific interface
described below:
@vindex x-dnd-test-function
@vindex x-dnd-known-types
When a user drags something from another application over Emacs, that other
application expects Emacs to tell it if Emacs can handle the data that is
dragged. The variable @code{x-dnd-test-function} is used by Emacs to determine
what to reply. The default value is @code{x-dnd-default-test-function}
which accepts drops if the type of the data to be dropped is present in
@code{x-dnd-known-types}. You can customize @code{x-dnd-test-function} and/or
@code{x-dnd-known-types} if you want Emacs to accept or reject drops based
on some other criteria.
When a user drags something from another application over Emacs on
the X Window System, that other application expects Emacs to tell it
if Emacs can handle the data that was dragged. The variable
@code{x-dnd-test-function} is used by Emacs to determine what to
reply. The default value is @code{x-dnd-default-test-function} which
accepts drops if the type of the data to be dropped is present in
@code{x-dnd-known-types}. You can customize
@code{x-dnd-test-function} and/or @code{x-dnd-known-types} if you want
Emacs to accept or reject drops based on some other criteria.
@vindex x-dnd-types-alist
If you want to change the way Emacs handles drop of different types
@ -4035,28 +4083,126 @@ or add a new type, customize @code{x-dnd-types-alist}. This requires
detailed knowledge of what types other applications use for drag and
drop.
@vindex dnd-protocol-alist
@vindex browse-url-handlers
@vindex browse-url-default-handlers
When an URL is dropped on Emacs it may be a file, but it may also be
another URL type (https, etc.). Emacs first checks
@code{dnd-protocol-alist} to determine what to do with the URL@. If
there is no match there, Emacs looks for a match in
@code{browse-url-handlers} and @code{browse-url-default-handlers}. If
still no match has been found, the text for the URL is inserted. If
you want to alter Emacs behavior, you can customize these variables.
Those data types are typically implemented as special data types an
X selection provided by the other application can be converted to.
They can either be the same data types that are typically accepted by
@code{gui-set-selection}, or they can be MIME types, depending on the
specific drag-n-drop protocol being used. Plain text may be
@code{"STRING"} or @code{"text/plain"}, for example.
@cindex initiating drag-and-drop
On capable window systems, Emacs also supports dragging contents
from its frames to windows of other applications.
@defun x-begin-drag targets &optional action frame return-frame allow-current-frame
@cindex drop target, in drag-and-drop operations
@defun dnd-begin-text-drag text &optional frame action allow-same-frame
This function begins dragging text from @var{frame} to another program
(known as the @dfn{drop target}), and returns the result of
drag-and-drop operation when the text is dropped or the drag-and-drop
operation is canceled. @var{text} is the text that will be inserted
by the drop target.
@var{action} must be one of the symbols @code{copy} or @code{move},
where @code{copy} means that @var{text} should be inserted by the drop
target, and @code{move} means the same as @code{copy}, but in addition
the caller may have to delete @var{text} from its source as explained
below.
@var{frame} is the frame where the mouse is currently held down, or
@code{nil}, which means to use the selected frame. This function may
return immediately if no mouse buttons are held down, so it should be
only called immediately after a @code{down-mouse-1} or similar event
(@pxref{Mouse Events}), with @var{frame} set to the frame where that
event was generated (@pxref{Click Events}).
@var{allow-same-frame} specifies whether or not drops on top of
@var{frame} itself are to be ignored.
The return value specifies the action that the drop target actually
performed, and optionally what the caller should do. It can be one of
the following symbols:
@table @code
@item copy
The drop target inserted the dropped text.
@item move
The drop target inserted the dropped text, but in addition the caller
should delete @var{text} from wherever it originated, such as its
buffer.
@item private
The drop target performed some other unspecified action.
@item nil
The drag-and-drop operation was canceled.
@end table
@end defun
@defun dnd-begin-file-drag file &optional frame action allow-same-frame
This function begins dragging @var{file} from @var{frame} to another
program, and returns the result of the drag-and-drop operation when
the file is dropped or the drag-and-drop operation is canceled.
If @var{file} is a remote file, then a temporary copy will be made.
@var{action} must be one of the symbols @code{copy}, @code{move} or
@code{link}, where @code{copy} means that @var{file} should be opened
or copied by the drop target, @code{move} means the drop target should
move the file to another location, and @code{link} means the drop
target should create a symbolic link to @var{file}. It is an error to
specify @code{link} as the action if @var{file} is a remote file.
@var{frame} and @var{allow-same-frame} have the same meaning as in
@code{dnd-begin-text-drag}.
The return value is the action that the drop target actually
performed, which can be one of the following symbols:
@table @code
@item copy
The drop target opened or copied @var{file} to a different location.
@item move
The drop target moved @var{file} to a different location.
@item link
The drop target (usually a file manager) created a symbolic link to
@var{file}.
@item private
The drop target performed some other unspecified action.
@item nil
The drag-and-drop operation was canceled.
@end table
@end defun
@defun dnd-begin-drag-files files &optional frame action allow-same-frame
This function is like @code{dnd-begin-file-drag}, except that
@var{files} is a list of files. If the drop target doesn't support
dropping multiple files, then the first file will be used instead.
@end defun
@cindex initiating drag-and-drop, low-level
The high-level interfaces described above are implemented on top of
a lower-level primitive. If you need to drag content other than files
or text, use the low-level interface @code{x-begin-drag}
instead. However, using it will require detailed knowledge of the
data types and actions used by the programs to transfer content via
drag-and-drop on each platform you want to support.
@defun x-begin-drag targets &optional action frame return-frame allow-current-frame follow-tooltip
This function begins a drag from @var{frame}, and returns when the
drag-and-drop operation ends, either because the drop was successful,
or because the drop was rejected. The drop occurs when all mouse
buttons are released on top of an X window other than @var{frame} (the
@dfn{drop target}), or any X window if @var{allow-current-frame} is
non-@code{nil}.
non-@code{nil}. If no mouse buttons are held down when the
drag-and-drop operation begins, this function may immediately return
@code{nil}.
@var{targets} is a list of strings describing selection targets, much
like the @var{data-type} argument to @code{gui-get-selection}, that
@ -4085,6 +4231,12 @@ want to treat dragging content from one frame to another specially,
while also being able to drag content to other programs, but it is not
guaranteed to work on all systems and with all window managers.
If @var{follow-tooltip} is non-@code{nil}, the position of any tooltip
(such as one shown by @code{tooltip-show}) will follow the location of
the mouse pointer whenever it moves during the drag-and-drop
operation. The tooltip will be hidden once all mouse buttons are
released.
If the drop was rejected or no drop target was found, this function
returns @code{nil}. Otherwise, it returns a symbol describing the
action the target chose to perform, which can differ from @var{action}
@ -4093,6 +4245,10 @@ is also a valid return value in addition to @code{XdndActionCopy} and
@code{XdndActionMove}; it means that the drop target chose to perform
an unspecified action, and no further processing is required by the
caller.
The caller must cooperate with the target to fully perform the action
chosen by the target. For example, callers should delete the buffer
text that was dragged if this function returns @code{XdndActionMove}.
@end defun
@node Color Names

View file

@ -146,7 +146,12 @@ function:
This function returns @code{t} if @var{object} is any kind of
function, i.e., can be passed to @code{funcall}. Note that
@code{functionp} returns @code{t} for symbols that are function names,
and returns @code{nil} for special forms.
and returns @code{nil} for symbols that are macros or special forms.
If @var{object} is not a function, this function ordinarily returns
@code{nil}. However, the representation of function objects is
complicated, and for efficiency reasons in rare cases this function
can return @code{t} even when @var{object} is not a function.
@end defun
It is also possible to find out how many arguments an arbitrary
@ -1712,6 +1717,7 @@ ways to do it. The added function is also called a piece of @emph{advice}.
* Advising Named Functions:: Advising named functions.
* Advice Combinators:: Ways to compose advice.
* Porting Old Advice:: Adapting code using the old defadvice.
* Advice and Byte Code:: Not all functions can be advised.
@end menu
@node Core Advising Primitives
@ -2133,6 +2139,37 @@ changing @code{ad-return-value}, whereas new @code{:after} advice cannot, so
when porting such old @code{after} advice, you'll need to turn it into new
@code{:around} or @code{:filter-return} advice instead.
@c This is its own node because we link to it from *Help* buffers.
@node Advice and Byte Code
@subsection Advice and Byte Code
@cindex compiler macros, advising
@cindex @code{byte-compile} and @code{byte-optimize}, advising
Not all functions can be reliably advised. The byte compiler may
choose to replace a call to a function with a sequence of instructions
that doesn't call the function you were interested in altering.
This usually happens due to one of the three following mechanisms:
@table @asis
@item @code{byte-compile} properties
If a function's symbol has a @code{byte-compile} property, that
property will be used instead of the symbol's function definition.
@xref{Compilation Functions}.
@item @code{byte-optimize} properties
If a function's symbol has a @code{byte-optimize} property, the byte
compiler may rewrite the function arguments, or decide to use a
different function altogether.
@item @code{compiler-macro} declare forms
A function can have a special @code{compiler-macro} @code{declare}
form in its definition (@pxref{Declare Form}) that defines an
@dfn{expander} to call when compiling the function. The expander
could then cause the produced byte-code not to call the original
function.
@end table
@node Obsolete Functions
@section Declaring Functions Obsolete
@cindex obsolete functions

View file

@ -345,7 +345,10 @@ stands for a key sequence @var{KEYSEQ}, which will use the same face
as a command substitution. This should be used only when a key
sequence has no corresponding command, for example when it is read
directly with @code{read-key-sequence}. It must be a valid key
sequence according to @code{key-valid-p}.
sequence according to @code{key-valid-p}. It can also be used with
command names, like @samp{\`M-x foo'}, where you want this to be
fontified like a keyboard sequence, but you want to inhibit
translating it into a key sequence like @samp{\[foo]} does.
@item `
(grave accent) stands for a left quote.
@ -362,6 +365,10 @@ depending on the value of @code{text-quoting-style}.
quotes the following character and is discarded; thus, @samp{\=`} puts
@samp{`} into the output, @samp{\=\[} puts @samp{\[} into the output,
and @samp{\=\=} puts @samp{\=} into the output.
@item \+
This indicates that the symbol directly following should not be marked
as link in the @file{*Help*} buffer.
@end table
@strong{Please note:} Each @samp{\} must be doubled when written in a
@ -386,7 +393,7 @@ quotes. You can customize it freely according to your personal
preference.
@end defopt
@defun substitute-command-keys string &optional no-face
@defun substitute-command-keys string &optional no-face include-menus
@vindex help-key-binding@r{ (face)}
This function scans @var{string} for the above special sequences and
replaces them by what they stand for, returning the result as a string.
@ -436,6 +443,9 @@ RET minibuffer-complete-and-exit
C-g abort-recursive-edit
"
The keymap description will normally exclude menu items, but if
@var{include-menus} is non-@code{nil}, include them.
@group
(substitute-command-keys
"To abort a recursive edit from the minibuffer, type \

View file

@ -529,7 +529,7 @@ primitive for autoloading; any Lisp program can call @code{autoload} at
any time. Magic comments are the most convenient way to make a function
autoload, for packages installed along with Emacs. These comments do
nothing on their own, but they serve as a guide for the command
@code{update-file-autoloads}, which constructs calls to @code{autoload}
@code{loaddefs-generate}, which constructs calls to @code{autoload}
and arranges to execute them when Emacs is built.
@defun autoload function filename &optional docstring interactive type
@ -627,22 +627,19 @@ subroutines not loaded successfully because they come later in the file.
macro, then an error is signaled with data @code{"Autoloading failed to
define function @var{function-name}"}.
@findex update-file-autoloads
@findex make-directory-autoloads
@findex loaddefs-generate
@cindex magic autoload comment
@cindex autoload cookie
@anchor{autoload cookie}
A magic autoload comment (often called an @dfn{autoload cookie})
consists of @samp{;;;###autoload}, on a line by itself,
just before the real definition of the function in its
autoloadable source file. The command @kbd{M-x update-file-autoloads}
autoloadable source file. The function @code{loaddefs-generate}
writes a corresponding @code{autoload} call into @file{loaddefs.el}.
(The string that serves as the autoload cookie and the name of the
file generated by @code{update-file-autoloads} can be changed from the
file generated by @code{loaddefs-generate} can be changed from the
above defaults, see below.)
Building Emacs loads @file{loaddefs.el} and thus calls @code{autoload}.
@kbd{M-x make-directory-autoloads} is even more powerful; it updates
autoloads for all files in the current directory.
The same magic comment can copy any kind of form into
@file{loaddefs.el}. The form following the magic comment is copied
@ -675,7 +672,7 @@ and @code{define-global-minor-mode}.
@emph{without} executing it when the file itself is loaded. To do this,
write the form @emph{on the same line} as the magic comment. Since it
is in a comment, it does nothing when you load the source file; but
@kbd{M-x update-file-autoloads} copies it to @file{loaddefs.el}, where
@code{loaddefs-generate} copies it to @file{loaddefs.el}, where
it is executed while building Emacs.
The following example shows how @code{doctor} is prepared for
@ -728,11 +725,11 @@ corresponding autoload calls written into a file whose name is
different from the default @file{loaddefs.el}. Emacs provides two
variables to control this:
@defvar generate-autoload-cookie
The value of this variable should be a string whose syntax is a Lisp
comment. @kbd{M-x update-file-autoloads} copies the Lisp form that
follows the cookie into the autoload file it generates. The default
value of this variable is @code{";;;###autoload"}.
@defvar lisp-mode-autoload-regexp
The value of this constant is a regexp that matches autoload cookies.
@code{loaddefs-generate} copies the Lisp form that follows the
cookie into the autoload file it generates. This will match comments
like like @samp{;;;###autoload} and @samp{;;;###calc-autoload}.
@end defvar
@defvar generated-autoload-file
@ -769,7 +766,7 @@ 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}
which are generated by @code{loaddefs-generate}
(@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

View file

@ -309,6 +309,22 @@ The optional argument @var{history}, if non-@code{nil}, is a symbol
specifying a minibuffer history list to use (@pxref{Minibuffer
History}). If it is omitted or @code{nil}, the history list defaults
to @code{regexp-history}.
@cindex @code{case-fold}, text property
@findex read-regexp-case-fold-search
The user can use the @kbd{M-c} command to indicate whether case
folding should be on or off. If the user has used this command, the
returned string will have the text property @code{case-fold} set to
either @code{fold} or @code{inhibit-fold}. It is up to the caller of
@code{read-regexp} to actually use this value, and the convenience
function @code{read-regexp-case-fold-search} is provided for that. A
typical usage pattern here might look like:
@lisp
(let* ((regexp (read-regexp "Search for: "))
(case-fold-search (read-regexp-case-fold-search regexp)))
(re-search-forward regexp))
@end lisp
@end defun
@defopt read-regexp-defaults-function
@ -1121,6 +1137,11 @@ completion command (i.e., one of the commands in
@code{minibuffer-confirm-exit-commands}) and the resulting input is
not an element of @var{collection}. @xref{Completion Commands}.
@item
If a function, it is called with the input as the only argument. The
function should return a non-@code{nil} value if the input is
acceptable.
@item
Any other value of @var{require-match} behaves like @code{t}, except
that the exit commands won't exit if it performs completion.

View file

@ -2575,7 +2575,23 @@ mode line feature, except that it's controlled by
This variable, local in every buffer, specifies how to display the
header line, for windows displaying the buffer. The format of the value
is the same as for @code{mode-line-format} (@pxref{Mode Line Data}).
It is normally @code{nil}, so that ordinary buffers have no header line.
It is normally @code{nil}, so that ordinary buffers have no header
line.
@findex header-line-indent-mode
If @code{display-line-numbers-mode} is used, and you want the header
line to be indented by the same amount as the buffer contents, you can
use the @code{header-line-indent-mode} minor mode. This minor mode
keeps the @code{header-line-indent} variable updated, so that you can
say something like:
@lisp
(setq header-line-format
`("" header-line-format ,my-header-line))
@end lisp
This can be useful if you're displaying columnar data, and the header
line should align with that data in the buffer.
@end defvar
@defun window-header-line-height &optional window
@ -3652,6 +3668,10 @@ the value is @code{nil}, Font Lock will call @code{jit-lock-register}
(@pxref{Other Font Lock Variables}) to set up for automatic
refontification of buffer text following a modified line to reflect
the new syntactic context due to the change.
To use only syntactic fontification, this variable should
be non-@code{nil}, while @code{font-lock-keywords} should be set to
@code{nil} (@pxref{Font Lock Basics}).
@end defvar
@defvar font-lock-syntax-table

View file

@ -280,11 +280,12 @@ to the codepoints @code{#x3FFF80} through @code{#x3FFFFF}, inclusive
@defun string-to-unibyte string
This function returns a unibyte string containing the same sequence of
characters as @var{string}. It signals an error if @var{string}
contains a non-@acronym{ASCII} character. If @var{string} is a
unibyte string, it is returned unchanged. Use this function for
@var{string} arguments that contain only @acronym{ASCII} and eight-bit
characters.
characters as @var{string}. If @var{string} is a unibyte string, it
is returned unchanged. Otherwise, @acronym{ASCII} characters and
characters in the @code{eight-bit} charset are converted to their
corresponding byte values. Use this function for @var{string}
arguments that contain only @acronym{ASCII} and eight-bit characters;
the function signals an error if any other characters are encountered.
@end defun
@defun byte-to-string byte

View file

@ -178,6 +178,12 @@ files.
Skip the next @samp{N} characters (@pxref{Comments}). This is used in
byte-compiled files, and is not meant to be used in Emacs Lisp source
files.
@item #f
Indicates that the following form isn't readable by the Emacs Lisp
reader. This is only in text for display purposes (when that would
look prettier than alternative ways of indicating an unreadable form)
and will never appear in any Lisp file.
@end table

View file

@ -329,10 +329,10 @@ file will not inhibit the message for someone else.
@end defopt
@defopt initial-scratch-message
This variable, if non-@code{nil}, should be a string, which is
treated as documentation to be
inserted into the @file{*scratch*} buffer when Emacs starts up. If it
is @code{nil}, the @file{*scratch*} buffer is empty.
This variable, if non-@code{nil}, should be a string, which is treated
as documentation to be inserted into the @file{*scratch*} buffer when
Emacs starts up or when that buffer is recreated. If it is
@code{nil}, the @file{*scratch*} buffer is empty.
@end defopt
@noindent
@ -1649,8 +1649,8 @@ this default may change in future Emacs releases, so callers requiring
a particular form should specify @var{form}.
@strong{Common Lisp Note:} Common Lisp has different meanings for
@var{dow} and @var{utcoff}, and its @var{second} is an integer between
0 and 59 inclusive.
@var{dow}, @code{dst} and @var{utcoff}, and its @var{second} is an
integer between 0 and 59 inclusive.
To access (or alter) the elements in the calendrical information, the
@code{decoded-time-second}, @code{decoded-time-minute},

View file

@ -1011,16 +1011,18 @@ terminated (due to calling @code{exit} or to a signal). If it is
they exit.
@end defopt
@defun delete-process process
@defun delete-process &optional process
This function deletes a process, killing it with a @code{SIGKILL}
signal if the process was running a program. The argument may be a
process, the name of a process, a buffer, or the name of a buffer. (A
buffer or buffer-name stands for the process that
@code{get-buffer-process} returns.) Calling @code{delete-process} on
a running process terminates it, updates the process status, and runs
the sentinel immediately. If the process has already terminated,
calling @code{delete-process} has no effect on its status, or on the
running of its sentinel (which will happen sooner or later).
@code{get-buffer-process} returns, and a missing or @code{nil}
@var{process} means that the current buffer's process should be
killed.) Calling @code{delete-process} on a running process
terminates it, updates the process status, and runs the sentinel
immediately. If the process has already terminated, calling
@code{delete-process} has no effect on its status, or on the running
of its sentinel (which will happen sooner or later).
If the process object represents a network, serial, or pipe
connection, its status changes to @code{closed}; otherwise, it changes
@ -3468,20 +3470,67 @@ type values:
@itemx byte
Unsigned byte, with length 1.
@item uint @var{bitlen}
Unsigned integer in network byte order, with @var{bitlen} bits.
@item uint @var{bitlen} &optional @var{le}
Unsigned integer in network byte order (big-endian), with @var{bitlen} bits.
@var{bitlen} has to be a multiple of 8.
If @var{le} is non-@code{nil}, then use little-endian byte order.
@item uintr @var{bitlen}
Unsigned integer in little endian order, with @var{bitlen} bits.
@item sint @var{bitlen} @var{le}
Signed integer in network byte order (big-endian), with @var{bitlen} bits.
@var{bitlen} has to be a multiple of 8.
If @var{le} is non-@code{nil}, then use little-endian byte order.
@item str @var{len}
String of bytes of length @var{len}.
Unibyte string (@pxref{Text Representations}) of length @var{len} bytes.
When packing, the first @var{len} bytes of the input string are copied
to the packed output. If the input string is shorter than @var{len},
the remaining bytes will be null (zero) unless a pre-allocated string
was provided to @code{bindat-pack}, in which case the remaining bytes
are left unmodified. If the input string is multibyte with only ASCII
and @code{eight-bit} characters, it is converted to unibyte before it
is packed; other multibyte strings signal an error. When unpacking,
any null bytes in the packed input string will appear in the unpacked
output.
@item strz &optional @var{len}
Zero-terminated string of bytes, can be of arbitrary length or in a fixed-size
field with length @var{len}.
If @var{len} is not provided: Variable-length null-terminated unibyte
string (@pxref{Text Representations}). When packing, the entire input
string is copied to the packed output. The following byte will be
null (zero) unless a pre-allocated string was provided to
@code{bindat-pack}, in which case that byte is left unmodified. The
length of the packed output is the length of the input string plus one
(for the null terminator). The input string must not contain any null
bytes. If the input string is multibyte with only ASCII and
@code{eight-bit} characters, it is converted to unibyte before it is
packed; other multibyte strings signal an error. When unpacking, the
resulting string contains all bytes up to (but excluding) the null
byte.
@quotation Caution
If a pre-allocated string is provided to @code{bindat-pack}, the
packed output will not be properly null-terminated unless the
pre-allocated string already has a null byte at the appropriate
location.
@end quotation
If @var{len} is provided: @code{strz} behaves the same as @code{str}
with one difference: When unpacking, the first null byte encountered
in the packed string and all subsequent bytes are excluded from the
unpacked result.
@quotation Caution
The packed output will not be null-terminated unless one of the
following is true:
@itemize
@item
The input string is shorter than @var{len} bytes and either no pre-allocated
string was provided to @code{bindat-pack} or the appropriate byte in
the pre-allocated string was already null.
@item
The input string contains a null byte within the first @var{len}
bytes.
@end itemize
@end quotation
@item vec @var{len} [@var{type}]
Vector of @var{len} elements. The type of the elements is given by

View file

@ -549,12 +549,12 @@ can act. It is poor practice to depend on this behavior; quote the
special character anyway, regardless of where it appears.
As a @samp{\} is not special inside a character alternative, it can
never remove the special meaning of @samp{-} or @samp{]}. So you
should not quote these characters when they have no special meaning
either. This would not clarify anything, since backslashes can
legitimately precede these characters where they @emph{have} special
meaning, as in @samp{[^\]} (@code{"[^\\]"} for Lisp string syntax),
which matches any single character except a backslash.
never remove the special meaning of @samp{-}, @samp{^} or @samp{]}.
You should not quote these characters when they have no special
meaning. This would not clarify anything, since backslashes
can legitimately precede these characters where they @emph{have}
special meaning, as in @samp{[^\]} (@code{"[^\\]"} for Lisp string
syntax), which matches any single character except a backslash.
In practice, most @samp{]} that occur in regular expressions close a
character alternative and hence are special. However, occasionally a
@ -823,21 +823,22 @@ the characters that stand for them.
matches any character whose syntax is not @var{code}.
@cindex category, regexp search for
@item \c@var{c}
matches any character whose category is @var{c}. Here @var{c} is a
character that represents a category: thus, @samp{c} for Chinese
characters or @samp{g} for Greek characters in the standard category
table. You can see the list of all the currently defined categories
with @kbd{M-x describe-categories @key{RET}}. You can also define
your own categories in addition to the standard ones using the
@code{define-category} function (@pxref{Categories}).
@item \c@var{code}
matches any character whose category is @var{code}. Here @var{code}
is a character that represents a category: for example, in the standard
category table, @samp{c} stands for Chinese characters and @samp{g}
stands for Greek characters. You can see the list of all the
currently defined categories with @w{@kbd{M-x describe-categories
@key{RET}}}. You can also define your own categories in addition to
the standard ones using the @code{define-category} function
(@pxref{Categories}).
@item \C@var{c}
matches any character whose category is not @var{c}.
@item \C@var{code}
matches any character whose category is not @var{code}.
@end table
The following regular expression constructs match the empty string---that is,
they don't use up any characters---but whether they match depends on the
they don't consume any characters---but whether they match depends on the
context. For all, the beginning and end of the accessible portion of
the buffer are treated as if they were the actual beginning and end of
the buffer.

View file

@ -21,6 +21,7 @@ reading) or where to put it (if printing).
* Output Streams:: Various data types that can be used as output streams.
* Output Functions:: Functions to print Lisp objects as text.
* Output Variables:: Variables that control what the printing functions do.
* Output Overrides:: Overriding output variables.
@end menu
@node Streams Intro
@ -634,7 +635,7 @@ characters are used. @code{print} returns @var{object}. For example:
@end example
@end defun
@defun prin1 object &optional stream
@defun prin1 object &optional stream overrides
This function outputs the printed representation of @var{object} to
@var{stream}. It does not print newlines to separate output as
@code{print} does, but it does use quoting characters just like
@ -649,6 +650,10 @@ This function outputs the printed representation of @var{object} to
@result{} " came back"
@end group
@end example
If @var{overrides} is non-@code{nil}, it should either be @code{t}
(which tells @code{prin1} to use the defaults for all printer related
variables), or a list of settings. @xref{Output Overrides}, for details.
@end defun
@defun princ object &optional stream
@ -694,7 +699,7 @@ newline character first, which enables you to display incomplete
lines.
@end defun
@defun prin1-to-string object &optional noescape
@defun prin1-to-string object &optional noescape overrides
@cindex object to string
This function returns a string containing the text that @code{prin1}
would have printed for the same argument.
@ -708,6 +713,10 @@ would have printed for the same argument.
(prin1-to-string (mark-marker))
@result{} "#<marker at 2773 in strings.texi>"
@end group
If @var{overrides} is non-@code{nil}, it should either be @code{t}
(which tells @code{prin1} to use the defaults for all printer related
variables), or a list of settings. @xref{Output Overrides}, for details.
@end example
If @var{noescape} is non-@code{nil}, that inhibits use of quoting
@ -971,3 +980,84 @@ Letter, Number, Punctuation, Symbol and Private-use
(@pxref{Character Properties}), as well as the control characters
having their own escape syntax such as newline.
@end defvar
@node Output Overrides
@section Overriding Output Variables
@cindex overrides, in output functions
@cindex output variables, overriding
The previous section (@pxref{Output Functions}) lists the numerous
variables that control how the Emacs Lisp printer formats data for
outputs. These are generally available for users to change, but
sometimes you want to output data in the default format, or override
the user settings in some other way. For instance, if you're storing
Emacs Lisp data in a file, you don't want that data to be shortened by
a @code{print-length} setting.
The @code{prin1} and @code{prin1-to-string} functions therefore have
an optional @var{overrides} argument. This argument can either be
@code{t} (which means that all printing variables should be reset to
the default values), or a list of settings for some of the variables.
Each element in the list can be either @code{t} (which means ``reset
to defaults'', and will usually be the first element of the list), or
a pair whose @code{car} is a symbol that stands for an output variable
and whose @code{cdr} is the value for that variable.
For instance, this prints using nothing but defaults:
@lisp
(prin1 object nil t)
@end lisp
This prints @var{object} using the current printing settings, but
overrides the value of @code{print-length} to be 5:
@lisp
(prin1 object nil '((length . 5)))
@end lisp
And finally, this prints @var{object} using only default settings, but
with @code{print-length} bound to 5:
@lisp
(prin1 object nil '(t (length . 5)))
@end lisp
Below is a list of symbols that can be used, and which variables they
map to:
@table @code
@item length
This overrides @code{print-length}.
@item level
This overrides @code{print-level}.
@item circle
This overrides @code{print-circle}.
@item quoted
This overrides @code{print-quoted}.
@item escape-newlines
This overrides @code{print-escape-newlines}.
@item escape-control-characters
This overrides @code{print-escape-control-characters}.
@item escape-nonascii
This overrides @code{print-escape-nonascii}.
@item escape-multibyte
This overrides @code{print-escape-multibyte}.
@item charset-text-property
This overrides @code{print-charset-text-property}.
@item unreadeable-function
This overrides @code{print-unreadable-function}.
@item gensym
This overrides @code{print-gensym}.
@item continuous-numbering
This overrides @code{print-continuous-numbering}.
@item number-table
This overrides @code{print-number-table}.
@item float-format
This overrides @code{float-output-format}.
@item integers-as-characters
This overrides @code{print-integers-as-characters}.
@end table
In the future, more overrides may be offered that do not map directly
to a variable, but can only be used via this parameter.

View file

@ -443,12 +443,12 @@ strings.
@end defun
@defun string-pad string length &optional padding start
Pad @var{string} to the be of @var{length} using @var{padding} as the
padding character (defaulting to the space character). If
@var{string} is shorter than @var{length}, no padding is done. If
@var{start} is @code{nil} (or not present), the padding is done to the
end of the string, and if it's non-@code{nil}, to the start of the
string.
Pad @var{string} to be of the given @var{length} using @var{padding}
as the padding character. @var{padding} defaults to the space
character. If @var{string} is longer than @var{length}, no padding is
done. If @var{start} is @code{nil} or omitted, the padding is
appended to the characters of @var{string}, and if it's
non-@code{nil}, the padding is prepended to @var{string}'s characters.
@end defun
@defun string-chop-newline string
@ -464,23 +464,29 @@ Remove the final newline, if any, from @var{string}.
described in this section. @xref{Mutability}.
The most basic way to alter the contents of an existing string is with
@code{aset} (@pxref{Array Functions}). @code{(aset @var{string}
@var{idx} @var{char})} stores @var{char} into @var{string} at index
@var{idx}. Each character occupies one or more bytes, and if @var{char}
needs a different number of bytes from the character already present at
that index, @code{aset} signals an error.
@code{aset} (@pxref{Array Functions}). @w{@code{(aset @var{string}
@var{idx} @var{char})}} stores @var{char} into @var{string} at character
index @var{idx}. It will automatically convert a pure-@acronym{ASCII}
@var{string} to a multibyte string (@pxref{Text Representations}) if
needed, but we recommend to always make sure @var{string} is multibyte
(e.g., by using @code{string-to-multibyte}, @pxref{Converting
Representations}), if @var{char} is a non-@acronym{ASCII} character, not
a raw byte.
A more powerful function is @code{store-substring}:
@defun store-substring string idx obj
This function alters part of the contents of the string @var{string}, by
storing @var{obj} starting at index @var{idx}. The argument @var{obj}
may be either a character or a (smaller) string.
This function alters part of the contents of the specified @var{string},
by storing @var{obj} starting at character index @var{idx}. The
argument @var{obj} may be either a character (in which case the function
behaves exactly as @code{aset}) or a (smaller) string. If @var{obj}
is a multibyte string, we recommend to make sure @var{string} is also
multibyte, even if it's pure-@acronym{ASCII}.
Since it is impossible to change the length of an existing string, it is
an error if @var{obj} doesn't fit within @var{string}'s actual length,
or if any new character requires a different number of bytes from the
character currently present at that point in @var{string}.
Since it is impossible to change the number of characters in an
existing string, it is en error if @var{obj} consists of more
characters than would fit in @var{string} starting at character index
@var{idx}.
@end defun
To clear out a string that contained a password, use
@ -856,9 +862,7 @@ between 2 and 16 (inclusive), and integers are converted in that base.
If @var{base} is @code{nil}, then base ten is used. Floating-point
conversion only works in base ten; we have not implemented other
radices for floating-point numbers, because that would be much more
work and does not seem useful. If @var{string} looks like an integer
but its value is too large to fit into a Lisp integer,
@code{string-to-number} returns a floating-point result.
work and does not seem useful.
The parsing skips spaces and tabs at the beginning of @var{string},
then reads as much of @var{string} as it can interpret as a number in
@ -1350,7 +1354,7 @@ given width, if specified.
This flag converts the substituted text to upper case (@pxref{Case
Conversion}).
@item _
@item _@r{ (underscore)}
This flag converts the substituted text to lower case (@pxref{Case
Conversion}).
@end table

View file

@ -1034,6 +1034,9 @@ text in @var{string} according to the @code{yank-handler} text
property, as well as the variables @code{yank-handled-properties} and
@code{yank-excluded-properties} (see below), before inserting the
result into the current buffer.
@var{string} will be run through @code{yank-transform-functions} (see
below) before inserting.
@end defun
@defun insert-buffer-substring-as-yank buf &optional start end
@ -1108,6 +1111,23 @@ or specifying key bindings. It takes effect after
@code{yank-handled-properties}.
@end defopt
@defvar yank-transform-functions
This variable is a list of functions. Each function is called (in
order) with the string to be yanked as the argument, and should
return a (possibly transformed) string. This variable can be set
globally, but can also be used to create new commands that are
variations on @code{yank}. For instance, to create a command that
works like @code{yank}, but cleans up whitespace before inserting, you
could say something like:
@lisp
(defun yank-with-clean-whitespace ()
(interactive)
(let ((yank-transform-functions
'(string-clean-whitespace)))
(call-interactively #'yank)))
@end lisp
@end defvar
@node Yank Commands
@subsection Functions for Yanking

View file

@ -694,26 +694,24 @@ starting double-quote is not part of the string!
@cindex curly quotes
@cindex curved quotes
When a documentation string refers to a Lisp symbol, write it as it
would be printed (which usually means in lower case), surrounding it
with curved single quotes (@t{..}). There are two exceptions: write
@code{t} and @code{nil} without surrounding punctuation. For example:
would be printed (which usually means in lower case), with a grave
accent @samp{`} before and apostrophe @samp{'} after it. There are
two exceptions: write @code{t} and @code{nil} without surrounding
punctuation. For example:
@example
CODE can be lambda, nil, or t.
CODE can be `lambda', nil, or t.
@end example
@noindent
@xref{Quotation Marks,,, emacs, The GNU Emacs Manual}, for how to
enter curved single quotes.
Documentation strings can also use an older single-quoting convention,
which quotes symbols with grave accent @t{`} and apostrophe
@t{'}: @t{`like-this'} rather than @t{like-this}. This
older convention was designed for now-obsolete displays in which grave
accent and apostrophe were mirror images.
Documentation using this convention is converted to the user's
preferred format when it is copied into a help buffer. @xref{Keys in
Documentation}.
Note that when Emacs displays these doc strings, Emacs will usually
display @samp{`} (grave accent) as @samp{} (left single quotation
mark) and @samp{'} (apostrophe) as @samp{} (right single quotation
mark), if the display supports displaying these characters.
@xref{Keys in Documentation}. (Some previous versions of this section
recommended using the non-@acronym{ASCII} single quotation marks
directly in doc strings, but this is now discouraged, since that leads
to broken help string displays on terminals that don't support
displaying those characters.)
@cindex hyperlinks in documentation strings
Help mode automatically creates a hyperlink when a documentation string

View file

@ -527,10 +527,11 @@ If @var{symbol} has a buffer-local binding in the current buffer,
rather than the buffer-local binding. It sets the default value if
the default value is void. @xref{Buffer-Local Variables}.
If @var{symbol} is already lexically bound (e.g., if the @code{defvar}
form occurs in a @code{let} form with lexical binding enabled), then
@code{defvar} sets the dynamic value. The lexical binding remains in
effect until its binding construct exits. @xref{Variable Scoping}.
If @var{symbol} is already let bound (e.g., if the @code{defvar}
form occurs in a @code{let} form), then @code{defvar} sets the toplevel
default value, like @code{set-default-toplevel-value}.
The let binding remains in effect until its binding construct exits.
@xref{Variable Scoping}.
@cindex @code{eval-defun}, and @code{defvar} forms
@cindex @code{eval-last-sexp}, and @code{defvar} forms

View file

@ -759,15 +759,6 @@ column and total width (@pxref{Coordinates and Windows}). The optional
argument @var{round} behaves as it does for @code{window-total-height}.
@end defun
@defun window-max-characters-per-line &optional window face
The maximum width of a line that can be displayed in a window (without
breaking the line) depends on many things, like the font used on the
line, and whether there are fringes around the window. This
convenience function can be used to calculate that number. If
@var{window} isn't given, this defaults to the currently selected
window. if @var{var} isn't given, the @code{default} face is used.
@end defun
@defun window-total-size &optional window horizontal round
This function returns either the total height in lines or the total
width in columns of the window @var{window}. If @var{horizontal} is
@ -838,14 +829,18 @@ This function returns the height, in lines, of the body of window
@var{window}. If @var{window} is omitted or @code{nil}, it defaults to
the selected window; otherwise it must be a live window.
If the optional argument @var{pixelwise} is non-@code{nil}, this
function returns the body height of @var{window} counted in pixels.
The optional argument @var{pixelwise} defines the units to use for the
height. If @code{nil}, return the body height of @var{window} in
characters, rounded down to the nearest integer, if necessary. This
means that if a line at the bottom of the text area is only partially
visible, that line is not counted. It also means that the height of a
window's body can never exceed its total height as returned by
@code{window-total-height}.
If @var{pixelwise} is @code{nil}, the return value is rounded down to
the nearest integer, if necessary. This means that if a line at the
bottom of the text area is only partially visible, that line is not
counted. It also means that the height of a window's body can never
exceed its total height as returned by @code{window-total-height}.
If @var{pixelwise} is @code{remap} and the default face is remapped
(@pxref{Face Remapping}), use the remapped face to determine the
character height. For any other non-@code{nil} value, return the
height in pixels.
@end defun
@cindex window body width
@ -866,14 +861,18 @@ This function returns the width, in columns, of the body of window
@var{window}. If @var{window} is omitted or @code{nil}, it defaults to
the selected window; otherwise it must be a live window.
If the optional argument @var{pixelwise} is non-@code{nil}, this
function returns the body width of @var{window} in units of pixels.
The optional argument @var{pixelwise} defines the units to use for the
width. If @code{nil}, return the body width of @var{window} in
characters, rounded down to the nearest integer, if necessary. This
means that if a column on the right of the text area is only partially
visible, that column is not counted. It also means that the width of
a window's body can never exceed its total width as returned by
@code{window-total-width}.
If @var{pixelwise} is @code{nil}, the return value is rounded down to
the nearest integer, if necessary. This means that if a column on the
right of the text area is only partially visible, that column is not
counted. It also means that the width of a window's body can never
exceed its total width as returned by @code{window-total-width}.
If @var{pixelwise} is @code{remap} and the default face is remapped
(@pxref{Face Remapping}), use the remapped face to determine the
character width. For any other non-@code{nil} value, return the width
in pixels.
@end defun
@cindex window body size
@ -2845,6 +2844,11 @@ the function specified in @code{pop-up-frame-function}
the newly created frame's parameters.
@end defun
@defun display-buffer-full-frame buffer alist
This function displays the buffer on the current frame, deleting all
other windows so that it takes up the full frame.
@end defun
@defun display-buffer-in-child-frame buffer alist
This function tries to display @var{buffer} in a child frame
(@pxref{Child Frames}) of the selected frame, either reusing an
@ -3300,6 +3304,13 @@ window has at least that many columns. If the value is @code{nil},
that means not to split this way.
@end defopt
@defopt display-buffer-avoid-small-windows
If non-@code{nil}, this should be a number. Windows that have fewer
lines than that will be avoided when choosing an existing window. The
value is interpreted in units of the frame's canonical line height,
like @code{window-total-height} does (@pxref{Window Sizes}).
@end defopt
@defopt even-window-sizes
This variable, if non-@code{nil}, causes @code{display-buffer} to even
window sizes whenever it reuses an existing window, and that window is
@ -4173,6 +4184,13 @@ ignore this option, for example, when there is only one buffer left
these functions can switch to.
@end defopt
@defopt switch-to-prev-buffer-skip-regexp
This user option should be either a regular expression or a list of
regular expressions. Buffers whose names match one of those regular
expressions will be ignored by @code{switch-to-prev-buffer} and
@code{switch-to-next-buffer} (except when there's no other buffer to
switch to).
@end defopt
@node Dedicated Windows
@section Dedicated Windows
@ -5508,7 +5526,7 @@ pixels, rather than in units of the normal line height.
@end example
@end defun
@defun set-window-vscroll window lines &optional pixels-p
@defun set-window-vscroll window lines &optional pixels-p preserve-vscroll-p
This function sets @var{window}'s vertical scroll position to
@var{lines}. If @var{window} is @code{nil}, the selected window is
used. The argument @var{lines} should be zero or positive; if not, it
@ -5530,6 +5548,12 @@ The return value is the result of this rounding.
If @var{pixels-p} is non-@code{nil}, @var{lines} specifies a number of
pixels. In this case, the return value is @var{lines}.
Normally, the vscroll does not take effect on windows that aren't the
@code{minibuffer-scroll-window} or the selected window when the
mini-window is resized (@pxref{Minibuffer Windows}). This ``frozen''
behavior is disabled when the @var{preserve-vscroll-p} parameter is
non-@code{nil}, which means to set the vscroll as usual.
@end defun
@defvar auto-window-vscroll
@ -6123,11 +6147,10 @@ configuration on the current frame.
This function returns @code{t} if @var{object} is a window configuration.
@end defun
@defun compare-window-configurations config1 config2
This function compares two window configurations as regards the
structure of windows, but ignores the values of point and the
saved scrolling positions---it can return @code{t} even if those
aspects differ.
@defun window-configuration-equal-p config1 config2
This function says whether two window configurations have the same
window layout, but ignores the values of point and the saved scrolling
positions---it can return @code{t} even if those aspects differ.
@end defun
@defun window-configuration-frame config

View file

@ -1,5 +1,5 @@
.\" See section COPYING for copyright and redistribution information.
.TH EMACS 1 "2021-09-28" "GNU Emacs @version@" "GNU"
.TH EMACS 1 "2022-06-07" "GNU Emacs @version@" "GNU"
.
.
.SH NAME
@ -117,6 +117,10 @@ Load
.IR user 's
init file.
.TP
.BI \-\-init\-directory= "directory"
Start emacs with user-emacs-directory set to
.IR directory .
.TP
.BI \-t " file\fR,\fP " \-\-terminal= "file"
Use specified
.I file

View file

@ -1,5 +1,5 @@
.\" See section COPYING for copyright and redistribution information.
.TH ETAGS 1 "2021-03-30" "GNU Tools" "GNU"
.TH ETAGS 1 "2022-06-10" "GNU Tools" "GNU"
.de BP
.sp
.ti -.2i
@ -122,7 +122,9 @@ current file. Only \fBetags\fP accepts this option.
.B \-I, \-\-ignore\-indentation
Don't rely on indentation as much as we normally do. Currently, this
means not to assume that a closing brace in the first column is the
final brace of a function or structure definition in C and C++.
final brace of a function or structure definition in C and C++. This
is important for code that doesn't observe the GNU Coding conventions
of placing only top-level braces in column zero.
.TP
\fB\-l\fP \fIlanguage\fP, \fB\-\-language=\fIlanguage\fP
Parse the following files according to the given language. More than

View file

@ -795,13 +795,7 @@ and interface. Example:
(dbus-get-all-managed-objects
:session "org.gnome.SettingsDaemon" "/")
@result{} (("/org/gnome/SettingsDaemon/MediaKeys"
("org.gnome.SettingsDaemon.MediaKeys")
("org.freedesktop.DBus.Peer")
("org.freedesktop.DBus.Introspectable")
("org.freedesktop.DBus.Properties")
("org.freedesktop.DBus.ObjectManager"))
("/org/gnome/SettingsDaemon/Power"
@result{} (("/org/gnome/SettingsDaemon/Power"
("org.gnome.SettingsDaemon.Power.Keyboard")
("org.gnome.SettingsDaemon.Power.Screen")
("org.gnome.SettingsDaemon.Power"

View file

@ -1742,23 +1742,6 @@ You will need an implementation of TeX for Windows.
A number of implementations are listed on the
@uref{http://www.tug.org/interest.html#free, TeX Users Group} website.
@menu
* AUCTeX::
@end menu
@node AUCTeX
@subsection AUCTeX
@cindex auctex, precompiled for Windows
@cindex latex
@cindex preview-latex
AUCTeX is an Emacs package for writing LaTeX files, which also
includes preview-latex, an Emacs mode for previewing the formatted
contents of LaTeX documents. Pre-compiled versions for Windows are
available from
@uref{https://www.gnu.org/software/auctex/download-for-windows.html, the
AUCTeX site}.
@node Spell check
@section How do I perform spell checks?
@cindex spell checking

View file

@ -9,10 +9,9 @@
@copying
Copyright @copyright{} 2001--2022 Free Software Foundation, Inc.@*
Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000
Reuven M. Lerner@*
Copyright @copyright{} 1992, 1993 Steven Byrnes@*
Copyright @copyright{} 1990, 1991, 1992 Joseph Brian Wells@*
Copyright @copyright{} 1994--2000 Reuven M. Lerner@*
Copyright @copyright{} 1992--1993 Steven Byrnes@*
Copyright @copyright{} 1990--1992 Joseph Brian Wells@*
@quotation
This list of frequently asked questions about GNU Emacs with answers
@ -882,10 +881,11 @@ divergent TECO command sets and key bindings at MIT, and completed by
RMS.
Many people have said that TECO code looks a lot like line noise; you
can read more at @uref{news:alt.lang.teco}. Someone has written a TECO
implementation in Emacs Lisp (to find it, see @ref{Packages that do not
come with Emacs}); it would be an interesting project to run the
original TECO Emacs inside of Emacs.
can read more on
@uref{https://en.wikipedia.org/wiki/TECO_(text_editor), Wikipedia}.
Someone has written a TECO implementation in Emacs Lisp (to find it,
see @ref{Packages that do not come with Emacs}); it would be an
interesting project to run the original TECO Emacs inside of Emacs.
@cindex Why Emacs?
For some not-so-serious alternative reasons for Emacs to have that
@ -3712,7 +3712,6 @@ information is available from
* Compose Character::
* Binding combinations of modifiers and function keys::
* Meta key does not work in xterm::
* SPC no longer completes file names::
@end menu
@node Binding keys to commands
@ -4157,10 +4156,6 @@ If there is an @code{rlogin} connection between @code{xterm} and Emacs, the
@samp{-8} argument may need to be given to rlogin to make it pass all 8 bits
of every character.
@item
If Emacs is running on Ultrix, it is reported that evaluating
@code{(set-input-mode t nil)} helps.
@item
If all else fails, you can make @code{xterm} generate @kbd{@key{ESC} W} when
you type @kbd{M-W}, which is the same conversion Emacs would make if it
@ -4186,22 +4181,6 @@ You might have to replace @samp{Meta} with @samp{Alt}.
@end itemize
@node SPC no longer completes file names
@section Why doesn't @key{SPC} complete file names anymore?
@cindex @kbd{SPC} file name completion
Starting with Emacs 22.1, @kbd{SPC} no longer completes file names in
the minibuffer, so that file names with embedded spaces could be typed
without the need to quote the spaces.
You can get the old behavior by binding @kbd{SPC} to
@code{minibuffer-complete-word} in the minibuffer, as follows:
@lisp
(define-key minibuffer-local-filename-completion-map (kbd "SPC")
'minibuffer-complete-word)
@end lisp
@c ------------------------------------------------------------
@node Alternate character sets
@chapter Alternate character sets
@ -4295,75 +4274,6 @@ add the following line to your @file{~/.emacs}:
(setq ps-multibyte-buffer 'bdf-font-except-latin)
@end lisp
A few additional steps are necessary for MS-Windows; they are listed
below.
First, make sure @emph{all} the directories with BDF font files are
mentioned in @code{bdf-directory-list}. On Unix and GNU/Linux
systems, one normally runs @kbd{make install} to install the BDF fonts
in the same directory. By contrast, Windows users typically don't run
the Intlfonts installation command, but unpack the distribution in
some directory, which leaves the BDF fonts in its subdirectories. For
example, assume that you unpacked Intlfonts in @file{C:/Intlfonts};
then you should set @code{bdf-directory-list} as follows:
@lisp
(setq bdf-directory-list
'("C:/Intlfonts/Asian"
"C:/Intlfonts/Chinese" "C:/Intlfonts/Chinese.X"
"C:/Intlfonts/Chinese.BIG" "C:/Intlfonts/Ethiopic"
"C:/Intlfonts/European" "C:/Intlfonts/European.BIG"
"C:/Intlfonts/Japanese" "C:/Intlfonts/Japanese.X"
"C:/Intlfonts/Japanese.BIG" "C:/Intlfonts/Korean.X"
"C:/Intlfonts/Misc"))
@end lisp
@cindex @code{w32-bdf-filename-alist}
@cindex @code{w32-find-bdf-fonts}
Next, you need to set up the variable @code{w32-bdf-filename-alist} to
an alist of the BDF fonts and their corresponding file names.
Assuming you have set @code{bdf-directory-list} to name all the
directories with the BDF font files, the following Lisp snippet will
set up @code{w32-bdf-filename-alist}:
@lisp
(setq w32-bdf-filename-alist
(w32-find-bdf-fonts bdf-directory-list))
@end lisp
Now, create fontsets for the BDF fonts:
@smallexample
(create-fontset-from-fontset-spec
"-*-fixed-medium-r-normal-*-16-*-*-*-c-*-fontset-bdf,
japanese-jisx0208:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1983-*,
katakana-jisx0201:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0201*-*,
latin-jisx0201:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0201*-*,
japanese-jisx0208-1978:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1978-*,
thai-tis620:-misc-fixed-medium-r-normal--16-160-72-72-m-80-tis620.2529-1,
lao:-misc-fixed-medium-r-normal--16-160-72-72-m-80-MuleLao-1,
tibetan-1-column:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-80-MuleTibetan-1,
ethiopic:-Admas-Ethiomx16f-Medium-R-Normal--16-150-100-100-M-160-Ethiopic-Unicode,
tibetan:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-160-MuleTibetan-0")
@end smallexample
Many of the international bdf fonts from Intlfonts are type 0, and
therefore need to be added to font-encoding-alist:
@lisp
(setq font-encoding-alist
(append '(("MuleTibetan-0" (tibetan . 0))
("GB2312" (chinese-gb2312 . 0))
("JISX0208" (japanese-jisx0208 . 0))
("JISX0212" (japanese-jisx0212 . 0))
("VISCII" (vietnamese-viscii-lower . 0))
("KSC5601" (korean-ksc5601 . 0))
("MuleArabic-0" (arabic-digit . 0))
("MuleArabic-1" (arabic-1-column . 0))
("MuleArabic-2" (arabic-2-column . 0)))
font-encoding-alist))
@end lisp
You can now use the Emacs font menu to select the @samp{bdf: 16-dot medium}
fontset, or you can select it by setting the default font in your
@file{~/.emacs}:
@ -4372,7 +4282,6 @@ fontset, or you can select it by setting the default font in your
(set-frame-font "fontset-bdf")
@end lisp
@c ------------------------------------------------------------
@node Mail and news
@chapter Mail and news

View file

@ -1758,14 +1758,6 @@ alias arg=blah
function arg () @{ blah $* @}
@end example
@item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} outputs result after prompt
In fact, piping to a process from a looping construct doesn't work in
general. If I change the call to @code{eshell-copy-handles} in
@code{eshell-rewrite-for-command} to use @code{eshell-protect}, it seems
to work, but the output occurs after the prompt is displayed. The whole
structured command thing is too complicated at present.
@item Pcomplete sometimes gets stuck
You press @key{TAB}, but no completions appear, even though the

View file

@ -713,6 +713,7 @@ be passed to the program.
@node Inline Query Expansion
@section Inline Query Expansion
@subsection Inline Query Expansion Using a Key Binding
Inline query expansion is a powerful method to get completion from
your directory servers. The most common usage is for expanding names
@ -885,6 +886,29 @@ An error is signaled. The expansion aborts.
Default is @code{select}
@end defvar
@subsection Inline Query Expansion Using completion-at-point
In addition to providing a dedicated EUDC function for binding to a
key shortcut (@pxref{Inline Query Expansion}), EUDC also provides a
function to contribute search results to the Emacs in-buffer
completion system available via the function
@code{completion-at-point} (@pxref{Identifier
Inquiries,,,maintaining}) in @code{message-mode} buffers
(@pxref{Top,Message,, message, Message}). When using this mechanism,
queries are made in the multi-server query mode of operation
(@pxref{Multi-server Queries}).
When a buffer in @code{message-mode} is created, EUDC's inline
expansion function is automatically added to the variable
@code{completion-at-point-functions}. As a result, whenever
@code{completion-at-point} is invoked in a @code{message-mode} buffer,
EUDC will be queried for email addresses matching the words before
point. Since this will be useful only when editing specific message
header fields that require specifying one or more email addresses, an
additional check is performed whether point is actually in one of
those header fields. Thus, any matching email addresses will be
offered for completion in suitable message header fields only, and not
in other places, like for example the body of the message.
@node The Server Hotlist

View file

@ -29685,10 +29685,9 @@ Gnus not to use @acronym{NOV}.
As the variables for the other back ends, there are
@code{nndiary-nov-is-evil}, @code{nndir-nov-is-evil},
@code{nnfolder-nov-is-evil}, @code{nnimap-nov-is-evil},
@code{nnml-nov-is-evil}, and @code{nnspool-nov-is-evil}. Note that a
non-@code{nil} value for @code{gnus-nov-is-evil} overrides all those
variables.
@code{nnfolder-nov-is-evil}, @code{nnml-nov-is-evil}, and
@code{nnspool-nov-is-evil}. Note that a non-@code{nil} value for
@code{gnus-nov-is-evil} overrides all those variables.
@end table

View file

@ -5,9 +5,9 @@
#+options: ':t toc:nil author:t email:t num:t
#+startup: content
#+macro: stable-version 2.3.0
#+macro: release-date 2022-04-01
#+macro: development-version 2.4.0-dev
#+macro: stable-version 2.4.0
#+macro: release-date 2022-06-01
#+macro: development-version 2.5.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@ -34,6 +34,10 @@ explicitly marked as such.
Current development target is {{{development-version}}}.
+ Homepage: https://protesilaos.com/emacs/modus-themes.
+ Git repository: https://git.sr.ht/~protesilaos/modus-themes.
+ Mailing list: https://lists.sr.ht/~protesilaos/modus-themes.
#+toc: headlines 8 insert TOC here, with eight headline levels
* COPYING
@ -165,14 +169,10 @@ The themes are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][
The ~modus-themes~ package is available from the GNU ELPA archive, which
is configured by default.
Prior to querying any package archive, make sure to have updated the
index, with {{{kbd(M-x package-refresh-contents)}}}. Then all you need to do
Prior to querying any package archive, make sure to update the index,
with {{{kbd(M-x package-refresh-contents)}}}. Then all you need to do
is type {{{kbd(M-x package-install)}}} and specify the ~modus-themes~.
Note that older versions of the themes used to be distributed as
standalone packages. This practice has been discontinued starting with
version 1.0.0 of this project.
Once installed, the themes are ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
** Install on GNU/Linux
@ -211,6 +211,34 @@ guix package -i emacs-modus-themes
They are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
** Dealing with byte compilation errors
:properties:
:custom_id: h:e6268471-e847-4c9d-998f-49a83257b7f1
:end:
From time to time, we receive bug reports pertaining to errors with byte
compilation. These seldom have to do with faulty code in the themes: it
might be a shortcoming of =package.el=, some regression in the current
development target of Emacs, a misconfiguration in an otherwise exotic
setup, and the like.
The common solution with a stable version of Emacs is to:
1. Delete the =modus-themes= package.
2. Close the current Emacs session.
3. Install the =modus-themes= again.
For those building Emacs directly from source, the solution may involve
reverting to an earlier commit in emacs.git.
At any rate, if you encounter such an issue please report it: we will
either fix the bug on our end if it is truly ours, or help forward it to
the relevant upstream maintainer. Whatever you do, please understand
that a build failure does not mean we are necessarily doing something
wrong.
[[#h:6536c8d5-3f98-43ab-a787-b94120e735e8][Issues you can help with]].
* Enable and load
:properties:
:custom_id: h:3f3c3728-1b34-437d-9d0c-b110f5b161a9
@ -4053,6 +4081,44 @@ comments are gray. Regexp constructs are adapted accordingly.
(set-face-attribute 'font-lock-warning-face nil :inherit 'modus-themes-bold :foreground red-nuanced-fg)))
#+end_src
** Custom hl-todo colors
:PROPERTIES:
:CUSTOM_ID: h:2ef83a21-2f0a-441e-9634-473feb940743
:END:
The =hl-todo= package provides the user option ~hl-todo-keyword-faces~:
it specifies a pair of keyword and corresponding color value. The Modus
themes configure that option in the interest of legibility. While this
works for our purposes, users may still prefer to apply their custom
values, in which case the following approach is necessary:
#+begin_src emacs-lisp
(defun my-modus-themes-hl-todo-faces ()
(setq hl-todo-keyword-faces '(("TODO" . "#ff0000")
("HACK" . "#ffff00")
("XXX" . "#00ffff")
("NOTE" . "#ff00ff"))))
(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
#+end_src
Or include a ~let~ form, if needed:
#+begin_src emacs-lisp
(defun my-modus-themes-hl-todo-faces ()
(let ((red "#ff0000")
(blue "#0000ff"))
(setq hl-todo-keyword-faces `(("TODO" . ,blue)
("HACK" . ,red)
("XXX" . ,red)
("NOTE" . ,blue)))))
(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
#+end_src
Normally, we do not touch user options, though this is an exception:
otherwise the defaults are not always legible.
* Face coverage
:properties:
:custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19
@ -4098,6 +4164,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ breakpoint (provided by the built-in {{{file(gdb-mi.el)}}} library)
+ calendar and diary
+ calfw
+ calibredb
+ centaur-tabs
+ cfrs
+ change-log and log-view (such as ~vc-print-log~, ~vc-print-root-log~)
@ -4112,6 +4179,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ completions
+ consult
+ corfu
+ corfu-quick
+ counsel*
+ counsel-css
+ cov
@ -4146,6 +4214,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ easy-jekyll
+ ebdb
+ ediff
+ ein (Emacs IPython Notebook)
+ eglot
+ el-search
+ eldoc-box
@ -4344,6 +4413,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ tomatinho
+ transient (pop-up windows such as Magit's)
+ trashed
+ tree-sitter
+ treemacs
+ tty-menu
+ tuareg
@ -4357,6 +4427,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ visible-mark
+ visual-regexp
+ vterm
+ vundo
+ wcheck-mode
+ web-mode
+ wgrep
@ -4398,6 +4469,7 @@ supported by the themes.
+ dtache
+ easy-kill
+ edit-indirect
+ egerrit
+ elfeed-summary
+ evil-owl
+ flyspell-correct
@ -4432,40 +4504,6 @@ supported by the themes.
This section covers information that may be of interest to users of
individual packages.
** Note on avy hints
:properties:
:custom_id: h:2fdce705-6de7-44e6-ab7f-18f59af99e01
:end:
Hints can appear everywhere, in wildly varying contexts, hence, their
appearance, by necessity, is a compromise. However, there are various
options for making them stand out. First is dimming the surroundings:
#+begin_src emacs-lisp
(setq avy-background t)
#+end_src
Dimming works well when you find it difficult to spot hints, any hint.
Second is limiting the number of faces used by hints:
#+begin_src emacs-lisp
(setq avy-lead-faces
'(avy-lead-face
avy-lead-face-1
avy-lead-face-1
avy-lead-face-1
avy-lead-face-1))
#+end_src
Limiting the number of faces works well with longer hints when you find
it difficult to identify individual hints, especially with hints
touching each other. The first character of the hint will have an
intense color, the remaining ones the same neutral color.
Third is preferring commands that produce fewer candidates. Fewer hints
is less noise: ~avy-goto-char-timer~ is an excellent alternative to
~avy-goto-char~.
** Note on calendar.el weekday and weekend colors
:properties:
:custom_id: h:b2db46fb-32f4-44fd-8e11-d2b261cf51ae
@ -4495,6 +4533,72 @@ weekends uniformly.
For changes to take effect, the Calendar buffer needs to be generated
anew.
** Note on git-gutter in Doom Emacs
:PROPERTIES:
:CUSTOM_ID: h:a195e37c-e58c-4148-b254-8ba1ed8a731a
:END:
The =git-gutter= and =git-gutter-fr= packages default to drawing bitmaps
for the indicators they display (e.g. bitmap of a plus sign for added
lines). In Doom Emacs, these bitmaps are replaced with contiguous lines
which may look nicer, but require a change to the foreground of the
relevant faces to yield the desired colour combinations.
Since this is Doom-specific, we urge users to apply changes in their
local setup. Below is some sample code, based on what we cover at
length elsewhere in this manual:
[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]].
#+begin_src emacs-lisp
(defun my-modus-themes-custom-faces ()
(modus-themes-with-colors
(custom-set-faces
;; Replace green with blue if you use `modus-themes-deuteranopia'.
`(git-gutter-fr:added ((,class :foreground ,green-fringe-bg)))
`(git-gutter-fr:deleted ((,class :foreground ,red-fringe-bg)))
`(git-gutter-fr:modified ((,class :foreground ,yellow-fringe-bg))))))
(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
#+end_src
If the above does not work, try this instead:
#+begin_src emacs-lisp
(after! modus-themes
(modus-themes-with-colors
(custom-set-faces
;; Replace green with blue if you use `modus-themes-deuteranopia'.
`(git-gutter-fr:added ((,class :foreground ,green-fringe-bg)))
`(git-gutter-fr:deleted ((,class :foreground ,red-fringe-bg)))
`(git-gutter-fr:modified ((,class :foreground ,yellow-fringe-bg))))))
#+end_src
Replace ~green-fringe-bg~ with ~blue-fringe-bg~ if you want to optimize
for red-green color deficiency.
[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color deficiency or deuteranopia]].
** Note on php-mode multiline comments
:PROPERTIES:
:CUSTOM_ID: h:d0a3157b-9c04-46e8-8742-5fb2a7ae8798
:END:
Depending on your build of Emacs and/or the environment it runs in,
multiline comments in PHP with the =php-mode= package use the
~font-lock-doc-face~ instead of ~font-lock-comment-face~.
This seems to make all comments use the appropriate face:
#+begin_src emacs-lisp
(defun my-multine-comments ()
(setq-local c-doc-face-name 'font-lock-comment-face))
(add-hook 'php-mode-hook #'my-multine-comments)
#+end_src
** Note on underlines in compilation buffers
:properties:
:custom_id: h:420f5a33-c7a9-4112-9b04-eaf2cbad96bd
@ -4594,6 +4698,17 @@ elsewhere in this document. For example:
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]].
To make the line thicker, set the height to be equal to the base font
size instead of the one pixel we use. This is done by specifying a rate
instead of an absolute number, as in =:height 1.0= versus =:height 1=.
For example:
#+begin_src emacs-lisp
(modus-themes-with-colors
(custom-set-faces
`(fill-column-indicator ((,class :height 1.0 :background ,bg-inactive :foreground ,bg-inactive)))))
#+end_src
** Note on highlight-parentheses.el
:PROPERTIES:
:CUSTOM_ID: h:24bab397-dcb2-421d-aa6e-ec5bd622b913
@ -5271,8 +5386,8 @@ and hints of green give us suitable shades of purple.
Due to the need of maintaining some difference in hueness between
adjacent colors, it is not possible to make red, green, and yellow the
primary colors, because blue could not be used to control their
luminance and, thus the relevant space would shrink considerably.
main colors, because blue cannot be used to control their luminance and,
thus the relevant space will shrink considerably.
[[#h:5ce7ae2e-9348-4e55-b4cf-9302345b1826][Is the contrast ratio about adjacent colors?]]
@ -5508,8 +5623,8 @@ in which you can contribute to their ongoing development.
The ~modus-operandi~ and ~modus-vivendi~ themes are built into Emacs 28.
The source code of the themes is [[https://gitlab.com/protesilaos/modus-themes/][available on GitLab]], for the time
being. A [[https://github.com/protesilaos/modus-themes/][mirror on GitHub]] is also on offer.
The source code of the themes is [[https://git.sr.ht/~protesilaos/modus-themes][available on SourceHut]]. Or check the
[[https://gitlab.com/protesilaos/modus-themes/][GitLab mirror (former main source)]] and the [[https://github.com/protesilaos/modus-themes/][GitHub mirror]].
An HTML version of this manual is provided as an extension of the
[[https://protesilaos.com/emacs/modus-themes/][author's personal website]] (does not rely on any non-free code).
@ -5520,7 +5635,10 @@ An HTML version of this manual is provided as an extension of the
:end:
#+cindex: Contributing
A few tasks you can help with:
#+findex: modus-themes-report-bug
A few tasks you can help with by sending an email to the general
[[https://lists.sr.ht/~protesilaos/modus-themes][modus-themes public mailing list]] (or use the command
~modus-themes-report-bug~).
+ Suggest refinements to packages that are covered.
+ Report packages not covered thus far.
@ -5528,7 +5646,8 @@ A few tasks you can help with:
+ Help expand the documentation of covered-but-not-styled packages.
+ Suggest refinements to the color palette.
+ Help expand this document or any other piece of documentation.
+ Merge requests for code refinements.
+ Send patches for code refinements (if you need, ask me for help with
Git---we all start out as beginners).
[[#h:111773e2-f26f-4b68-8c4f-9794ca6b9633][Patches require copyright assignment to the FSF]].
@ -5536,6 +5655,10 @@ It is preferable that your feedback includes some screenshots, GIFs, or
short videos, as well as further instructions to reproduce a given
setup. Though this is not a requirement.
#+findex: modus-themes-version
Also consider mentioning the version of the themes you are using, such
as by invoking the command ~modus-themes-version~.
Whatever you do, bear in mind the overarching objective of the Modus
themes: to keep a contrast ratio that is greater or equal to 7:1 between
background and foreground colors. If a compromise is ever necessary
@ -5567,7 +5690,7 @@ will send you the assignment form for your past and future changes.
Please use your full legal name (in ASCII characters) as the subject
line of the message.
----------------------------------------------------------------------
REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
[What is the name of the program or package you're contributing to?]
@ -5619,41 +5742,44 @@ The Modus themes are a collective effort. Every bit of work matters.
Johansson, Basil L.{{{space()}}} Contovounesios, Björn Lindström,
Carlo Zancanaro, Christian Tietze, Daniel Mendler, Eli Zaretskii,
Fritz Grabo, Illia Ostapyshyn, Kévin Le Gouguec, Kostadin Ninev,
Madhavan Krishnan, Markus Beppler, Matthew Stevenson, Mauro Aranda,
Nicolas De Jaeghere, Philip Kaludercic, Pierre Téchoueyres, Rudolf
Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan Kangas, Utkarsh
Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie.
Madhavan Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson,
Mauro Aranda, Nicolas De Jaeghere, Philip Kaludercic, Pierre
Téchoueyres, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan
Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie.
+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
Adrian Manea, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey Shmalko,
Alok Singh, Anders Johansson, André Alexandre Gomes, Antonio Hernández
Blas, Arif Rezai, Augusto Stoffel, Basil L.{{{space()}}}
Contovounesios, Burgess Chang, Christian Tietze, Christopher Dimech,
Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson,
Davor Rotim, Divan Santana, Eliraz Kedmi, Emanuele Michele Alberto
Monterosso, Farasha Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada,
Gianluca Recchia, Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz,
Ilja Kocken, Iris Garcia, Jeremy Friesen, Jerry Zhang, Johannes
Grødem, John Haman, Jorge Morais, Joshua O'Connor, Julio
C. Villasante, Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin
Ninev, Len Trigg, Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark
Bestley, Mark Burton, Markus Beppler, Mauro Aranda, Michael
Alok Singh, Anders Johansson, André Alexandre Gomes, Andrew Tropin,
Antonio Hernández Blas, Arif Rezai, Augusto Stoffel, Basil
L.{{{space()}}} Contovounesios, Burgess Chang, Christian Tietze,
Christopher Dimech, Christopher League, Damien Cassou, Daniel Mendler,
Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan Santana, Eliraz
Kedmi, Emanuele Michele Alberto Monterosso, Farasha Euker, Feng Shu,
Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia, Gonçalo Marrafa,
Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Iris
Garcia, Ivan Popovych, Jeremy Friesen, Jerry Zhang, Johannes Grødem,
John Haman, Jorge Morais, Joshua O'Connor, Julio C. Villasante, Kenta
Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin Ninev, Len Trigg,
Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark Bestley, Mark
Burton, Markus Beppler, Mauro Aranda, Maxime Tréca, Michael
Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky van
Foreest, Nicolas De Jaeghere, Paul Poloskov, Pengji Zhang, Pete
Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Robert
Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas, Rudolf
Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas
Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas Heartman,
Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz Hołubowicz, Toon
Claes, Uri Sharf, Utkarsh Singh, Vincent Foley. As well as users:
Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux, Fredrik,
Moesasji, Nick, TheBlob42, Trey, bepolymathe, bit9tream, derek-upham,
doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn, pRot0ta1p.
Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Przemysław
Kryger, Robert Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas,
Rudolf Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška,
Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas
Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley. As
well as users: Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux,
Fredrik, Moesasji, Nick, TheBlob42, Trey, bepolymathe, bit9tream,
derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
pRot0ta1p.
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, Glenn
Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core Emacs),
Stefan Monnier (GNU Elpa), André Alexandre Gomes, Dimakakos Dimos,
Morgan Smith, Nicolas Goaziou (Guix), Dhavan Vaidya (Debian).
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
Emacs), Stefan Monnier (GNU Elpa), André Alexandre Gomes, Andrew
Tropin, Dimakakos Dimos, Morgan Smith, Nicolas Goaziou (Guix), Dhavan
Vaidya (Debian).
+ Inspiration for certain features :: Bozhidar Batsov (zenburn-theme),
Fabrice Niessen (leuven-theme).
@ -5663,7 +5789,7 @@ Jaeghere, and Omar Antolín Camarena for their long time contributions
and insightful commentary on key aspects of the themes' design and/or
aspects of their functionality.
* Meta
* Other notes about the project
:properties:
:custom_id: h:13752581-4378-478c-af17-165b6e76bc1b
:end:
@ -5688,12 +5814,16 @@ of this sort):
+ [[https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/][Introducing the variable modus-themes-org-agenda]] (2021-06-02)
+ [[https://protesilaos.com/codelog/2022-01-02-review-modus-themes-org-habit-colours/][Modus themes: review of the org-habit graph colours]] (2022-01-02)
+ [[https://protesilaos.com/codelog/2022-01-03-modus-themes-port-faq/][Re: VSCode or Vim ports of the Emacs modus-themes?]] (2022-01-03)
+ [[https://protesilaos.com/codelog/2022-04-20-modus-themes-case-study-avy/][Modus themes: case study on Avy faces and colour combinations]] (2022-04-20)
+ [[https://protesilaos.com/codelog/2022-04-21-modus-themes-colour-theory/][Emacs: colour theory and techniques used in the Modus themes]] (2022-04-21)
And here are the canonical sources of this project's documentation:
And here are the canonical sources of this project:
+ Manual :: <https://protesilaos.com/emacs/modus-themes>
+ Change Log :: <https://protesilaos.com/emacs/modus-themes-changelog>
+ Screenshots :: <https://protesilaos.com/emacs/modus-themes-pictures>
+ Git repository :: https://git.sr.ht/~protesilaos/modus-themes
+ Mailing list :: https://lists.sr.ht/~protesilaos/modus-themes
* GNU Free Documentation License
:properties:

View file

@ -12442,7 +12442,7 @@ should in principle be exportable as a Beamer presentation.
When =ignoreheading= is set, Org export ignores the entry's headline
but not its content. This is useful for inserting content between
frames. It is also useful for properly closing a =column=
environment. @end itemize
environment.
#+cindex: @samp{BEAMER_ACT}, property
#+cindex: @samp{BEAMER_OPT}, property

View file

@ -4478,6 +4478,11 @@ HP-UX SD depots
@cindex @file{depot} file archive suffix
@cindex file archive suffix @file{depot}
@item @samp{.epub} ---
Electronic publications
@cindex @file{epub} file archive suffix
@cindex file archive suffix @file{epub}
@item @samp{.exe} ---
Self extracting Microsoft Windows EXE files
@cindex @file{exe} file archive suffix

View file

@ -2025,7 +2025,7 @@ They are defined here anyway to allow sharing certain methods.
@code{value} The value. Should not be accessed directly.
@item
@code{init-value} Function that is responsable for setting the object's
@code{init-value} Function that is responsible for setting the object's
value. If bound, then this is called with the object as the only
argument. Usually this is not bound, in which case the object's
primary @code{transient-init-value} method is called instead.

View file

@ -1,9 +1,11 @@
Content-Type: text/enriched
Text-Width: 70
This is a list of ways to say hello in various languages.
It is not intended to be comprehensive, but to demonstrate
some of the character sets that Emacs supports.
This is a list of ways to write a <x-color><param>orange red</param>"hello"</x-color> greeting using
various scripts. It is not intended to be comprehensive,
but to demonstrate some of the character sets and writing
systems that Emacs supports. Look for the script used to
write your language, to see if it is supported.
Non-ASCII examples:
@ -11,7 +13,7 @@ Non-ASCII examples:
Cześć!,</x-charset><x-charset><param>latin-iso8859-2</param> Dobrý den,</x-charset><x-charset><param>cyrillic-iso8859-5</param> Здравствуйте!,</x-charset><x-charset><param>greek-iso8859-7</param> Γειά σας,</x-charset> გამარჯობა
Africa: <x-charset><param>ethiopic</param>ሠላም</x-charset>
Middle/Near East:<x-charset><param>hebrew-iso8859-8</param> שָׁלוֹם,</x-charset> السّلام عليكم
South Asia: નમસ્તે, नमस्ते, ನಮಸ್ಕಾರ, നമസ്കാരം, ଶୁଣିବେ,
South Asia: નમસ્તે, नमस्ते, ನಮಸ್ಕಾರ, നമസ്കാരം, ନମସ୍କାର,
ආයුබෝවන්, வணக்கம், నమస్కారం,<x-charset><param>tibetan</param> བཀྲ་ཤིས་བདེ་ལེགས༎</x-charset>
South East Asia: ជំរាបសួរ,<x-charset><param>lao</param> ສະບາຍດີ,</x-charset> မင်္ဂလာပါ,<x-charset><param>thai-tis620</param> สวัสดีครับ,</x-charset><x-charset><param>vietnamese-viscii-lower</param> </x-charset><x-charset><param>vietnamese-viscii-upper</param>C</x-charset><x-charset><param>vietnamese-viscii-lower</param>hào bạn</x-charset>
East Asia:<x-charset><param>chinese-gb2312</param> 你好,</x-charset><x-charset><param>chinese-big5-1</param> 早晨,</x-charset><x-charset><param>japanese-jisx0208</param> こんにちは,</x-charset><x-charset><param>korean-ksc5601</param> 안녕하세요</x-charset>
@ -25,11 +27,14 @@ LANGUAGE (NATIVE NAME) HELLO
Amharic (አማርኛ) ሠላም
Arabic (العربيّة) السّلام عليكم
Armenian (հայերեն) Բարև ձեզ
Balinese (ᬅᬓ᭄ᬱᬭᬩᬮᬶ) ᬒᬁᬲ᭄ᬯᬲ᭄ᬢ᭄ᬬᬲ᭄ᬢᬸ
Batak (ᯘᯮᯒᯗ᯲ᯅᯗᯂ᯲) ᯂᯬᯒᯘ᯲ / ᯔᯧᯐᯬᯀᯱᯐᯬᯀᯱ
Belarusian (беларуская) Прывітанне
Bengali (বাংলা) নমস্কার
Brahmi (𑀩𑁆𑀭𑀸𑀳𑁆𑀫𑀻) 𑀦𑀫𑀲𑁆𑀢𑁂
Braille ⠓⠑⠇⠇⠕
Buginese (ᨒᨚᨈᨑ) ᨖᨒᨚ
Burmese (မြန်မာ) မင်္ဂလာပါ
C printf (<x-color><param>orange red</param>"Hello, world!\n"</x-color>);
Cham (ꨌꩌ) ꨦꨤꩌ ꨦꨁꨰ
@ -38,6 +43,7 @@ Comanche /kəˈmæntʃiː/ Haa marʉ́awe
Cree (ᓀᐦᐃᔭᐍᐏᐣ) ᑕᓂᓯ / ᐙᒋᔮ
Czech (čeština) Dobrý den
Danish (dansk) Hej / Goddag / Halløj
Devanagari (देवनागरी) नमस्ते / नमस्कार
Dutch (Nederlands) Hallo / Dag
Efik /ˈɛfɪk/ Mɔkɔm
Egyptian Hieroglyphs (𓂋𓏤𓈖𓆎𓅓‌𓏏𓊖) 𓅓𓊵𓏏𓊪, 𓇍𓇋𓂻𓍘𓇋
@ -50,40 +56,60 @@ Finnish (suomi) Hei / Hyvää päivää
French (français) Bonjour / Salut
Georgian (ქართული) გამარჯობა
German (Deutsch) Guten Tag / Grüß Gott
Grantha (𑌗𑍍𑌰𑌨𑍍𑌥) 𑌨𑌮𑌸𑍍𑌤𑍇 / 𑌨𑌮𑌸𑍍𑌕𑌾𑌰𑌃
Greek (ελληνικά) Γειά σας
Greek, ancient (ἑλληνική) Οὖλέ τε καὶ μέγα χαῖρε
Gujarati (ગુજરાતી) નમસ્તે
Gurmukhi (ਗੁਰਮੁਖੀ) ਸਤ ਸ੍ਰੀ ਅਕਾਲ
Hanifi Rohingya (𐴌𐴟𐴇𐴥𐴝𐴚𐴒𐴙𐴝 𐴇𐴝𐴕𐴞𐴉𐴞 𐴓𐴠𐴑𐴤𐴝) 𐴀𐴝𐴏𐴓𐴝𐴀𐴡𐴤𐴛𐴝𐴓𐴝𐴙𐴑𐴟𐴔
Hanunoo (ᜱᜨᜳᜨᜳᜢ) ᜫᜬᜧ᜴ ᜣᜭᜯᜥ᜴ ᜰᜲᜭᜥ᜴
Hebrew (עִבְרִית) שָׁלוֹם
Hindi (हिन्दी) प्रणाम / पाय लागू
Hungarian (magyar) Szép jó napot!
Hindi (हिंदी) नमस्ते / नमस्कार ।
Inuktitut (ᐃᓄᒃᑎᑐᑦ) ᐊᐃ
Italian (italiano) Ciao / Buon giorno
Javanese (ꦧꦱꦗꦮꦶ) console.log("ꦲꦭꦺꦴ");
Kaithi (𑂍𑂶𑂟𑂲) 𑂩𑂰𑂧𑂩𑂰𑂧
Kannada (ಕನ್ನಡ) ನಮಸ್ಕಾರ
Kharoṣṭhī (𐨑𐨪𐨆𐨛𐨁) 𐨣𐨨𐨲𐨪𐨆 𐨐𐨪𐨅𐨨𐨁
Khmer (ភាសាខ្មែរ) ជំរាបសួរ
Lakota (Lakȟotiyapi) Taŋyáŋ yahí!
Lao (ພາສາລາວ) ສະບາຍດີ / ຂໍໃຫ້ໂຊກດີ
Lepcha (ᰛᰩᰵᰛᰧᰵᰶ) ᰂᰦᰕᰥᰬ
Limbu (ᤕᤰᤌᤢᤱ ᤐᤠᤴ) ᤛᤣᤘᤠᤖᤥ
Makasar (𑻪𑻢𑻪𑻢) 𑻦𑻤𑻵𑻱
Malayalam (മലയാളം) നമസ്കാരം
Maldivian (ދިވެހި) އައްސަލާމު ޢަލައިކުމް / ކިހިނެހް؟
Maltese (il-Malti) Bonġu / Saħħa
Mathematics ∀ p ∈ world • hello p □
Meetei Mayek (ꯃꯤꯇꯩ ꯃꯌꯦꯛ) ꯈꯨꯔꯨꯝꯖꯔꯤ
Modi (𑘦𑘻𑘚𑘲) 𑘡𑘦𑘭𑘿𑘎𑘰𑘨
Mongolian (монгол хэл) Сайн байна уу?
Northern Thai (ᨣᩣᩴᨾᩮᩬᩥᨦ / ᨽᩣᩈᩣᩃ᩶ᩣ᩠ᨶᨶᩣ) ᩈ᩠ᩅᩢᩔ᩠ᨯᩦᨣᩕᩢ᩠ᨸ
Norwegian (norsk) Hei / God dag
Oriya (ଓଡ଼ିଆ) ଶୁଣିବେ
Odia (ଓଡ଼ିଆ) ନମସ୍କାର
Polish (język polski) Dzień dobry! / Cześć!
Rejang (ꥆꤰ꥓ꤼꤽ ꤽꥍꤺꥏ) ꤸꥉꥐꤺꥉꥂꥎ
Russian (русский) Здра́вствуйте!
Sharada (𑆯𑆳𑆫𑆢𑆳) 𑆤𑆩𑆱𑇀𑆑𑆳𑆫
Siddham (𑖭𑖰𑖟𑖿𑖠𑖽) 𑖡𑖦𑖫𑖿𑖝𑖸
Sinhala (සිංහල) ආයුබෝවන්
Slovak (slovenčina) Dobrý deň
Slovenian (slovenščina) Pozdravljeni!
Spanish (español) ¡Hola!
Sundanese (ᮃᮊ᮪ᮟᮛᮞᮥᮔ᮪ᮓ) ᮞᮙ᮪ᮕᮥᮛᮞᮥᮔ᮪
Swedish (svenska) Hej / Goddag / Hallå
Syloti Nagri (ꠍꠤꠟꠐꠤ ꠘꠣꠉꠞꠤ) ꠀꠌ꠆ꠍꠣꠟꠣꠝꠥ ꠀꠟꠣꠁꠇꠥꠝ / ꠘꠝꠡ꠆ꠇꠣꠞ
Tamil (தமிழ்) வணக்கம்
Telugu (తెలుగు) నమస్కారం
Tagalog (ᜊᜌ᜔ᜊᜌᜒᜈ᜔) ᜃᜓᜋᜓᜐ᜔ᜆ
Tagbanwa (ᝦᝪᝯ) ᝫᝩᝬᝥ ᝣᝮᝧᝯ
TaiViet (ꪁꪫꪱꪣ ꪼꪕ) ꪅꪰꪙꫂ ꪨꪮꫂ ꪁꪫꪱ / ꪅꪽ ꪨꪷ ꪁꪫꪱ
Thai (ภาษาไทย) สวัสดีครับ / สวัสดีค่ะ
Tibetan (བོད་སྐད་) བཀྲ་ཤིས་བདེ་ལེགས༎
Tigrigna (ትግርኛ) ሰላማት
Tirhuta (𑒞𑒱𑒩𑒯𑒳𑒞𑒰) 𑒣𑓂𑒩𑒢𑒰𑒧 / 𑒮𑒲𑒞𑒰𑒩𑒰𑒧
Turkish (Türkçe) Merhaba
Ukrainian (українська) Вітаю
Vietnamese (tiếng Việt) Chào bạn

679
etc/NEWS

File diff suppressed because it is too large Load diff

View file

@ -15,6 +15,50 @@ in older Emacs versions.
You can narrow news to a specific version by calling 'view-emacs-news'
with a prefix argument or by typing 'C-u C-h C-n'.
* Installation Changes in Emacs 28.2
* Startup Changes in Emacs 28.2
* Changes in Emacs 28.2
This is a bug-fix release with no new features.
* Editing Changes in Emacs 28.2
* Changes in Specialized Modes and Packages in Emacs 28.2
** The command 'kdb-macro-redisplay' was renamed to 'kmacro-redisplay'.
This is to fix an embarrassing typo in the original name.
** 'desktop-save-mode' now saves the desktop in 'save-buffers-kill-emacs'.
Previously, the desktop was saved in 'kill-emacs' via
'kill-emacs-hook'. However, that violated the convention that
functions in 'kill-emacs-hook' cannot interact with the user, and in
particular didn't play well with ending daemon sessions of Emacs. So
we moved the saving of the desktop to 'save-buffers-kill-emacs', via
'kill-emacs-query-functions'. To make sure the desktop is saved,
terminate Emacs with 'save-buffers-kill-emacs', not with 'kill-emacs'.
(This change was done in Emacs 28.1, but we didn't announce it in NEWS
back then.)
* New Modes and Packages in Emacs 28.2
* Incompatible Lisp Changes in Emacs 28.2
* Lisp Changes in Emacs 28.2
* Changes in Emacs 28.2 on Non-Free Operating Systems
* Installation Changes in Emacs 28.1

View file

@ -805,6 +805,22 @@ to take advantage of.
* Runtime problems related to font handling
** Some fonts are detected but not usable under Xft.
Some fonts might not be usable under Emacs even though they show up in
the font family list when Emacs is built with Xft. This is because
Emacs prevents fonts that have color glyphs (such as color Emoji) from
being used, since they typically cause Xft crashes.
On some GNU/Linux systems, fonts (such as Source Code Pro) that do not
have color glyphs are reported as color fonts, causing them to be
unavailable when using Xft. This is known to happen under Fedora
GNU/Linux 36 or later, and possibly other distributions as well.
If you encounter a such a font, you can enable it while ignoring other
fonts that actually have color glyphs by adding its family name to the
list `xft-color-font-whitelist'.
** Characters are displayed as empty boxes or with wrong font under X.
*** This may be due to your local fontconfig customization.
@ -1874,6 +1890,33 @@ this, you can remove the X resource or put this in your init file:
(xterm-remove-modify-other-keys)
** The shift TAB key combination works as meta TAB on a Linux console.
This happens because on your keyboard layout, S-TAB produces the same
keycodes as typing ESC TAB individually. The best way to solve this
is to modify your keyboard layout to produce different codes, and tell
Emacs what these new codes mean.
The current keyboard layout will probably be a .map.gz file somewhere
under /usr/share/keymaps. Identify this file, possibly from a system
initialization file such as /etc/conf.d/keymaps. Run gunzip on it to
decompress it, and amend the entries for keycode 15 to look something
like this:
keycode 15 = Tab
alt keycode 15 = Meta_Tab
shift keycode 15 = F219
string F219 = "\033[4}\011" # Shift+<tab>
After possibly saving this file under a different name, compress it
again using gzip. Amend /etc/conf.d/keyamps, etc., if needed.
Further details can be found in the man page for loadkeys.
Then add the following line near the start of your site-start.el or
.emacs or init.el file:
(define-key input-decode-map "\e[4}\t" 'backtab)
** Emacs spontaneously displays "I-search: " at the bottom of the screen.
This means that Control-S/Control-Q (XON/XOFF) "flow control" is being
@ -2982,6 +3025,23 @@ GTK_IM_MODULE.
GTK does not allow programs to warp the pointer anymore. There is
nothing that can be done about this problem.
** Certain keys such as 'C-S-u' are not reported correctly.
Some keys with modifiers such as Shift and Control might not be
reported correctly due to incorrectly written GTK input method
modules. This is known to happen to 'C-S-u' and 'C->', which are
misreported as 'C-u' and '>'.
To disable the use of GTK input methods, evaluate:
(pgtk-use-im-context nil)
This will also cause system input methods and features such as the
Compose key to stop working.
On X Windows, users should not use Emacs configured with PGTK, since
this and many other problems do not exist on the regular X builds.
* Build-time problems
** Configuration

View file

@ -149,7 +149,6 @@ spaces that are needed on the screen can make it hard to read.</flushboth>
justification.
</center><flushboth>Note that justification can only change at hard newlines, because
that is the unit over which filling gets done.</flushboth></indent>
@ -189,7 +188,14 @@ as possible.
The text/enriched standard is defined in </indent>Internet<indent> RFC 1896
(<<http://www.ietf.org/rfc/rfc1896.txt>).</indent>
(<<http://www.ietf.org/rfc/rfc1896.txt>).
To make format annotations visible and possibly edit them, tell
Emacs to display the markup:
<fixed><indent>M-x enriched-toggle-markup RET</indent></fixed></indent>
<x-bg-color><param>blue</param><x-color><param>white</param><bold>CUSTOMIZATION</bold></x-color></x-bg-color><bold>

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

View file

@ -0,0 +1,26 @@
/* XPM */
static char * guide_xpm[] = {
"6 21 2 1",
" c None",
". c #ADA5C6",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" .",
" ."};

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View file

@ -0,0 +1,27 @@
/* XPM */
static char * guide_xpm[] = {
"6 22 2 1",
" c None",
". c #ADA5C6",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" .",
" ",
" ."};

View file

@ -7130,7 +7130,7 @@ org.zw
// newGTLDs
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-04-30T15:14:46Z
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-05-18T15:16:02Z
// This list is auto-generated, don't edit it manually.
// aaa : 2015-02-26 American Automobile Association, Inc.
aaa
@ -8851,7 +8851,7 @@ lincoln
// linde : 2014-12-04 Linde Aktiengesellschaft
linde
// link : 2013-11-14 UNR Corp.
// link : 2013-11-14 Nova Registry Ltd
link
// lipsy : 2015-06-25 Lipsy Ltd
@ -12281,6 +12281,10 @@ blogspot.vn
// Submitted by Niels Martignene <hello@goupile.fr>
goupile.fr
// Government of the Netherlands: https://www.government.nl
// Submitted by <domeinnaam@minaz.nl>
gov.nl
// Group 53, LLC : https://www.group53.com
// Submitted by Tyler Todd <noc@nova53.net>
awsmppl.com
@ -12357,7 +12361,6 @@ ltd.ng
ngo.ng
edu.scot
sch.so
org.yt
// HostyHosting (hostyhosting.com)
hostyhosting.io
@ -13389,6 +13392,12 @@ rocky.page
спб.рус
я.рус
// Salesforce.com, Inc. https://salesforce.com/
// Submitted by Michael Biven <mbiven@salesforce.com>
builder.code.com
dev-builder.code.com
stg-builder.code.com
// Sandstorm Development Group, Inc. : https://sandcats.io/
// Submitted by Asheesh Laroia <asheesh@sandstorm.io>
sandcats.io
@ -13812,6 +13821,15 @@ hk.org
ltd.hk
inc.hk
// UNIVERSAL DOMAIN REGISTRY : https://www.udr.org.yt/
// see also: whois -h whois.udr.org.yt help
// Submitted by Atanunu Igbunuroghene <publicsuffixlist@udr.org.yt>
name.pm
sch.tf
biz.wf
sch.wf
org.yt
// United Gameserver GmbH : https://united-gameserver.de
// Submitted by Stefan Schwarz <sysadm@united-gameserver.de>
virtualuser.de

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode
\def\orgversionnumber{9.5.3}
\def\orgversionnumber{9.5.4}
\def\versionyear{2021} % latest update
\input emacsver.tex

View file

@ -1,4 +1,4 @@
;;; leuven-dark-theme.el --- Awesome Emacs color theme on dark background
;;; leuven-dark-theme.el --- Awesome Emacs color theme on dark background -*- lexical-binding: t; -*-
;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
@ -103,7 +103,7 @@ more...")
;; Leuven generic colors.
(cancel '(:slant italic :strike-through t :foreground "#5b5660"))
(clock-line '(:box (:line-width 1 :color "#cfa161") :foreground "#ffffff" :background "#1636ff"))
;; (clock-line '(:box (:line-width 1 :color "#cfa161") :foreground "#ffffff" :background "#1636ff"))
(code-block '(:foreground "#ffff7f" :background "#252046"))
(code-inline '(:foreground "#ff9bff" :background "#262031"))
(column '(:height 1.0 :weight normal :slant normal :underline nil :strike-through nil :foreground "#1e52b8" :background "#252c48"))
@ -124,10 +124,10 @@ more...")
(grep-file-name '(:weight bold :foreground "#d8b76b")) ; Used for grep hits.
(grep-line-number '(:weight bold :foreground "#5fca5b"))
(highlight-blue '(:background "#3c312a"))
(highlight-blue2 '(:background "#3e2d2f"))
;; (highlight-blue2 '(:background "#3e2d2f"))
(highlight-gray '(:background "#3e3944"))
(highlight-green '(:background "#2f0e3a"))
(highlight-red '(:background "#063741"))
;; (highlight-green '(:background "#2f0e3a"))
;; (highlight-red '(:background "#063741"))
(highlight-yellow '(:background "#2d2058"))
(link '(:weight normal :underline t :foreground "#ff925a"))
(link-no-underline '(:weight normal :foreground "#ff925a"))

View file

@ -400,7 +400,7 @@ jarring angry fruit salad look to reduce eye fatigue.")
'(compilation-warning-face ((t (:bold t :foreground "Orange" :weight bold))))
'(completions-common-part ((t (:width normal :weight normal
:slant normal :foreground "WhiteSmoke"
:background "black" :height 81))))
:background "black" :height 0.9))))
'(completions-first-difference ((t (:bold t :weight bold))))
'(css-selector ((t (:foreground "LightSteelBlue"))))

View file

@ -3,8 +3,8 @@
;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
;; Version: 2.3.0
;; URL: https://git.sr.ht/~protesilaos/modus-themes
;; Version: 2.4.1
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility

View file

@ -3,9 +3,9 @@
;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
;; Version: 2.3.0
;; Last-Modified: <2022-04-01 12:33:34 +0300>
;; URL: https://git.sr.ht/~protesilaos/modus-themes
;; Mailing list: https://lists.sr.ht/~protesilaos/modus-themes
;; Version: 2.4.1
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility
@ -68,306 +68,8 @@
;; modus-themes-operandi-color-overrides (alist)
;; modus-themes-vivendi-color-overrides (alist)
;;
;; Below is the list of explicitly supported packages or face groups
;; (there are implicitly supported packages as well, which inherit from
;; font-lock or some basic group). You are encouraged to report any
;; missing package or change you would like to see.
;;
;; ace-window
;; alert
;; all-the-icons
;; all-the-icons-dired
;; all-the-icons-ibuffer
;; annotate
;; ansi-color
;; anzu
;; apropos
;; artbollocks-mode
;; auctex and TeX
;; auto-dim-other-buffers
;; avy
;; awesome-tray
;; bbdb
;; binder
;; bm
;; bongo
;; boon
;; bookmark
;; breakpoint (provided by built-in gdb-mi.el)
;; calendar and diary
;; calfw
;; centaur-tabs
;; cfrs
;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
;; cider
;; circe
;; citar
;; color-rg
;; column-enforce-mode
;; company-mode
;; company-posframe
;; compilation-mode
;; completions
;; consult
;; corfu
;; counsel
;; counsel-css
;; cov
;; cperl-mode
;; css-mode
;; csv-mode
;; ctrlf
;; cursor-flash
;; custom (M-x customize)
;; dap-mode
;; dashboard (emacs-dashboard)
;; deadgrep
;; debbugs
;; deft
;; devdocs
;; dictionary
;; diff-hl
;; diff-mode
;; dim-autoload
;; dir-treeview
;; Dired
;; dired-async
;; dired-git
;; dired-git-info
;; dired-narrow
;; dired-subtree
;; diredfl
;; diredp (dired+)
;; display-fill-column-indicator-mode
;; doom-modeline
;; dynamic-ruler
;; easy-jekyll
;; ebdb
;; ediff
;; eglot
;; el-search
;; eldoc
;; eldoc-box
;; elfeed
;; elfeed-score
;; elpher
;; embark
;; ement (ement.el)
;; emms
;; enh-ruby-mode (enhanced-ruby-mode)
;; epa
;; equake
;; erc
;; eros
;; ert
;; eshell
;; eshell-fringe-status
;; eshell-git-prompt
;; eshell-prompt-extras (epe)
;; eshell-syntax-highlighting
;; evil (evil-mode)
;; evil-goggles
;; evil-snipe
;; evil-visual-mark-mode
;; eww
;; exwm
;; eyebrowse
;; fancy-dabbrev
;; flycheck
;; flycheck-color-mode-line
;; flycheck-indicator
;; flycheck-posframe
;; flymake
;; flyspell
;; flx
;; freeze-it
;; frog-menu
;; focus
;; fold-this
;; font-lock (generic syntax highlighting)
;; forge
;; fountain (fountain-mode)
;; geiser
;; git-commit
;; git-gutter (and variants)
;; git-rebase
;; git-timemachine
;; gnus
;; gotest
;; golden-ratio-scroll-screen
;; helm
;; helm-ls-git
;; helm-switch-shell
;; helm-xref
;; helpful
;; highlight-indentation
;; highlight-numbers
;; highlight-thing
;; hl-defined
;; hl-fill-column
;; hl-line-mode
;; hl-todo
;; hydra
;; ibuffer
;; icomplete
;; ido-mode
;; iedit
;; iflipb
;; image-dired
;; imenu-list
;; indium
;; info
;; info-colors
;; interaction-log
;; ioccur
;; isearch, occur, etc.
;; ivy
;; ivy-posframe
;; jira (org-jira)
;; journalctl-mode
;; js2-mode
;; julia
;; jupyter
;; kaocha-runner
;; keycast
;; ledger-mode
;; line numbers (`display-line-numbers-mode' and global variant)
;; lsp-mode
;; lsp-ui
;; macrostep
;; magit
;; magit-imerge
;; make-mode
;; man
;; marginalia
;; markdown-mode
;; markup-faces (`adoc-mode')
;; mct
;; mentor
;; messages
;; mini-modeline
;; minimap
;; mmm-mode
;; mode-line
;; mood-line
;; mpdel
;; mu4e
;; multiple-cursors
;; nano-modeline
;; neotree
;; notmuch
;; num3-mode
;; nxml-mode
;; orderless
;; org
;; org-journal
;; org-noter
;; org-pomodoro
;; org-recur
;; org-roam
;; org-superstar
;; org-table-sticky-header
;; org-tree-slide
;; org-treescope
;; origami
;; outline-mode
;; outline-minor-faces
;; package (M-x list-packages)
;; page-break-lines
;; pandoc-mode
;; paradox
;; paren-face
;; pass
;; pdf-tools
;; persp-mode
;; perspective
;; phi-grep
;; pomidor
;; popup
;; powerline
;; powerline-evil
;; prism (see "Note for prism.el" in the manual)
;; proced
;; prodigy
;; pulse
;; pyim
;; quick-peek
;; racket-mode
;; rainbow-blocks
;; rainbow-delimiters
;; rcirc
;; recursion-indicator
;; regexp-builder (also known as `re-builder')
;; rg
;; ripgrep
;; rmail
;; ruler-mode
;; selectrum
;; selectrum-prescient
;; semantic
;; sesman
;; shell-script-mode
;; shortdoc
;; show-paren-mode
;; shr
;; side-notes
;; sieve-mode
;; skewer-mode
;; slime (sldb)
;; sly
;; smart-mode-line
;; smartparens
;; smerge
;; spaceline
;; speedbar
;; stripes
;; suggest
;; switch-window
;; swiper
;; sx
;; symbol-overlay
;; syslog-mode
;; tab-bar-groups
;; tab-bar-mode
;; tab-line-mode
;; table (built-in table.el)
;; telega
;; telephone-line
;; terraform-mode
;; term
;; textsec
;; tomatinho
;; transient (pop-up windows like Magit's)
;; trashed
;; treemacs
;; tty-menu
;; tuareg
;; typescript
;; undo-tree
;; vc (vc-dir.el, vc-hooks.el)
;; vc-annotate (C-x v g)
;; vertico
;; vertico-quick
;; vimish-fold
;; visible-mark
;; visual-regexp
;; vterm
;; wcheck-mode
;; web-mode
;; wgrep
;; which-function-mode
;; which-key
;; whitespace-mode
;; window-divider-mode
;; winum
;; writegood-mode
;; woman
;; xah-elisp-mode
;; xref
;; xterm-color (and ansi-colors)
;; yaml-mode
;; yasnippet
;; ztree
;; Check the manual for all supported packages (there are hundreds of
;; them).
;;
;; For a complete view of the project, also refer to the following files
;; (should be distributed in the same repository/directory as the
@ -383,7 +85,6 @@
(eval-when-compile
(require 'cl-lib)
(require 'subr-x))
(require 'seq)
(defgroup modus-themes ()
"Options for `modus-operandi', `modus-vivendi'.
@ -407,6 +108,36 @@ cover the blue-cyan-magenta side of the spectrum."
:prefix "modus-themes-"
:tag "Modus Themes Faces")
(defvar modus-themes--version "2.5.0-dev"
"Current version of the Modus themes.
The version either is the last tagged release, such as '2.4.0',
or an in-development version like '2.5.0-dev'. As we use
semantic versioning, tags of the '2.4.1' sort are not reported:
those would count as part of '2.5.0-dev'.")
;;;###autoload
(defun modus-themes-version (&optional insert)
"Print `modus-themes--version' in the echo area.
If optional INSERT argument is provided from Lisp or as a prefix
argument, insert the `modus-themes--version' at point."
(interactive "P")
(if-let ((version modus-themes--version)
((or insert current-prefix-arg)))
(insert version)
(message version)))
;;;###autoload
(defun modus-themes-report-bug ()
"Submit a bug report or issue to the Modus themes developers."
(interactive)
(reporter-submit-bug-report
"~protesilaos/modus-themes@lists.sr.ht"
(format "modus-themes (%s)\n" modus-themes--version)
;; I am just getting started with this. Let's first see what people
;; think about it.
nil nil nil nil))
;;; Variables for each theme variant
;;;; Modus Operandi
@ -561,7 +292,8 @@ cover the blue-cyan-magenta side of the spectrum."
;; while bg-tab-inactive should be combined with fg-dim, whereas
;; bg-tab-inactive-alt goes together with fg-main
;;
;; bg-completion-* variants are meant to be combined with fg-main
;; bg-completion-* and bg-char-* variants are meant to be combined
;; with fg-main
;;
;; fg-escape-char-construct and fg-escape-char-backslash can
;; be combined bg-main, bg-dim, bg-alt
@ -595,6 +327,10 @@ cover the blue-cyan-magenta side of the spectrum."
(bg-completion . "#b7dbff")
(bg-completion-subtle . "#def3ff")
(bg-char-0 . "#7feaff")
(bg-char-1 . "#ffaaff")
(bg-char-2 . "#dff000")
(bg-tab-active . "#f6f6f6")
(bg-tab-inactive . "#b7b7b7")
(bg-tab-inactive-accent . "#a9b4f6")
@ -807,7 +543,8 @@ symbol and the latter as a string.")
;; while bg-tab-inactive should be combined with fg-dim, whereas
;; bg-tab-inactive-alt goes together with fg-main
;;
;; bg-completion-* variants are meant to be combined with fg-main
;; bg-completion-* and bg-char-* variants are meant to be combined
;; with fg-main
;;
;; fg-escape-char-construct and fg-escape-char-backslash can
;; be combined bg-main, bg-dim, bg-alt
@ -841,6 +578,10 @@ symbol and the latter as a string.")
(bg-completion . "#142f69")
(bg-completion-subtle . "#0e194b")
(bg-char-0 . "#0050af")
(bg-char-1 . "#7f1f7f")
(bg-char-2 . "#625a00")
(bg-tab-active . "#0e0e0e")
(bg-tab-inactive . "#424242")
(bg-tab-inactive-accent . "#35398f")
@ -1449,9 +1190,8 @@ The actual styling of the face is done by `modus-themes-faces'."
(defface modus-themes-variable-pitch nil
"Generic face for applying a conditional `variable-pitch'.
This behaves in accordance with `modus-themes-mixed-fonts',
`modus-themes-variable-pitch-headings' for all heading levels,
and `modus-themes-variable-pitch-ui'.
This behaves in accordance with `modus-themes-mixed-fonts' and/or
`modus-themes-variable-pitch-ui'.
The actual styling of the face is done by `modus-themes-faces'."
:group 'modus-themes-faces)
@ -3142,13 +2882,15 @@ In user configuration files the form may look like this:
value
(modus-themes--warn option))))
(defun modus-themes--alist-or-seq (properties alist-key seq-pred seq-default)
"Return value from alist or sequence.
(defun modus-themes--property-lookup (properties alist-key list-pred default)
"Return value from property alist or list.
Check PROPERTIES for an alist value that corresponds to
ALIST-KEY. If no alist is present, search the PROPERTIES
sequence given SEQ-PRED, using SEQ-DEFAULT as a fallback."
list given LIST-PRED, using DEFAULT as a fallback."
(if-let* ((val (or (alist-get alist-key properties)
(seq-find seq-pred properties seq-default)))
(cl-loop for x in properties
if (funcall list-pred x) return x)
default))
((listp val)))
(car val)
val))
@ -3192,7 +2934,10 @@ Those are stored in `modus-themes-faces' and
(defun modus-themes--current-theme ()
"Return current modus theme."
(car (seq-filter (lambda (arg) (string-match-p "^modus" (symbol-name arg)))
(car
(seq-filter
(lambda (theme)
(string-match-p "^modus" (symbol-name theme)))
custom-enabled-themes)))
;; Helper functions that are meant to ease the implementation of the
@ -3245,11 +2990,11 @@ foreground. INTENSEFG is an alternative to the default."
(cond
((and (memq 'bold properties)
(memq 'italic properties))
(list 'modus-themes-fixed-pitch 'bold-italic))
(list 'bold-italic 'modus-themes-fixed-pitch))
((memq 'italic properties)
(list 'modus-themes-fixed-pitch 'italic))
(list 'italic 'modus-themes-fixed-pitch))
((memq 'bold properties)
(list 'modus-themes-fixed-pitch 'bold))
(list 'bold 'modus-themes-fixed-pitch))
(t 'modus-themes-fixed-pitch))
:background
(cond
@ -3368,10 +3113,10 @@ theme's fallback text color."
(defun modus-themes--paren (normalbg intensebg)
"Conditional use of intense colors for matching parentheses.
NORMALBG should be the special palette color `bg-paren-match' or
NORMALBG should be the special palette color 'bg-paren-match' or
something similar. INTENSEBG must be easier to discern next to
other backgrounds, such as the special palette color
`bg-paren-match-intense'."
'bg-paren-match-intense'."
(let ((properties (modus-themes--list-or-warn 'modus-themes-paren-match)))
(list :inherit
(if (memq 'bold properties)
@ -3521,7 +3266,7 @@ that combines well with the background and foreground."
fg-alt)
(fg))
:height
(modus-themes--alist-or-seq properties 'height #'floatp 'unspecified)
(modus-themes--property-lookup properties 'height #'floatp 'unspecified)
:weight
(or weight 'unspecified)
:overline
@ -3546,7 +3291,7 @@ FG is the foreground color to use."
(or weight 'unspecified)
:height
(cond ((memq 'no-scale properties) 'unspecified)
((modus-themes--alist-or-seq properties 'height #'floatp 1.15)))
((modus-themes--property-lookup properties 'height #'floatp 1.15)))
:foreground fg)))
(defun modus-themes--agenda-date (defaultfg grayscalefg &optional workaholicfg grayscaleworkaholicfg bg bold ul)
@ -3581,7 +3326,7 @@ weight. Optional UL applies an underline."
(t
defaultfg))
:height
(modus-themes--alist-or-seq properties 'height #'floatp 'unspecified)
(modus-themes--property-lookup properties 'height #'floatp 'unspecified)
:underline
(if (and ul (memq 'underline-today properties))
t
@ -3637,8 +3382,8 @@ clearly distinguishes past, present, future tasks."
(defun modus-themes--agenda-habit (default traffic simple &optional default-d traffic-d simple-d)
"Specify background values for `modus-themes-org-agenda' habits.
DEFAULT is the original foregrounc color. TRAFFIC is to be used
when the `traffic-light' style is applied, while SIMPLE
corresponds to the \"simplified style\".
when the 'traffic-light' style is applied, while SIMPLE
corresponds to the 'simplified style'.
Optional DEFAULT-D, TRAFFIC-D, SIMPLE-D are alternatives to the
main colors, meant for dopia when `modus-themes-deuteranopia' is
@ -3712,8 +3457,8 @@ Optional FG-DISTANT should be close to the main background
values. It is intended to be used as a distant-foreground
property."
(let* ((properties (modus-themes--list-or-warn 'modus-themes-mode-line))
(padding (modus-themes--alist-or-seq properties 'padding #'natnump 1))
(height (modus-themes--alist-or-seq properties 'height #'floatp 'unspecified))
(padding (modus-themes--property-lookup properties 'padding #'natnump 1))
(height (modus-themes--property-lookup properties 'height #'floatp 'unspecified))
(padded (> padding 1))
(base (cond ((memq 'accented properties)
(cons fg-accent bg-accent))
@ -3778,10 +3523,14 @@ property."
;; Basically this is just for the keycast key indicator.
(defun modus-themes--mode-line-padded-box (color)
"Set padding of mode line box attribute with given COLOR."
(let ((padding (seq-find #'natnump modus-themes-mode-line 1)))
(list :box (list :line-width padding :color color))))
(list :box (list :color color
:line-width
(or (cl-loop
for x in modus-themes-mode-line
if (natnump x) return x)
1))))
(defun modus-themes--diff (mainbg mainfg altbg altfg &optional deuteranbg deuteranfg bg-only-fg)
(defun modus-themes--diff (mainbg mainfg altbg altfg &optional deubg deufg deualtbg deualtfg bg-only-fg)
"Color combinations for `modus-themes-diffs'.
MAINBG must be one of the dedicated backgrounds for diffs while
@ -3791,13 +3540,20 @@ ALTBG needs to be a slightly accented background that is meant to
be combined with ALTFG. Both must be less intense than MAINBG
and MAINFG respectively.
DEUTERANBG and DEUTERANFG must be combinations of colors that account
for red-green color defficiency (deuteranopia).
DEUBG and DEUFG must be combinations of colors that account for
red-green color defficiency (deuteranopia). They are the
equivalent of MAINBG and MAINFG.
Optional BG-ONLY-FG applies ALTFG else leaves the foreground
unspecified."
DEUALTBG and DEUALTFG are the equivalent of ALTBG and ALTFG for
deuteranopia.
Optional non-nil BG-ONLY-FG applies ALTFG else leaves the
foreground unspecified."
(if modus-themes-deuteranopia
(list :background (or deuteranbg mainbg) :foreground (or deuteranfg mainfg))
(pcase modus-themes-diffs
('desaturated (list :background (or deualtbg altbg) :foreground (or deualtfg altfg)))
('bg-only (list :background (or deualtbg altbg) :foreground (if bg-only-fg (or deualtfg altfg) 'unspecified)))
(_ (list :background (or deubg mainbg) :foreground (or deufg mainfg))))
(pcase modus-themes-diffs
('desaturated (list :background altbg :foreground altfg))
('bg-only (list :background altbg :foreground (if bg-only-fg altfg 'unspecified)))
@ -4114,7 +3870,7 @@ pressed button style, else the released button."
(weight weight)
('unspecified))
:height
(modus-themes--alist-or-seq properties 'height #'floatp 'unspecified)
(modus-themes--property-lookup properties 'height #'floatp 'unspecified)
:underline
(if (memq 'underline properties)
t
@ -4379,7 +4135,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
((,class ,@(modus-themes--diff
bg-diff-focus-added fg-diff-focus-added
green-nuanced-bg fg-diff-added
bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran
blue-nuanced-bg fg-diff-added-deuteran))))
`(modus-themes-diff-changed
((,class ,@(modus-themes--diff
bg-diff-focus-changed fg-diff-focus-changed
@ -4392,7 +4149,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
((,class ,@(modus-themes--diff
bg-diff-refine-added fg-diff-refine-added
bg-diff-focus-added fg-diff-focus-added
bg-diff-refine-added-deuteran fg-diff-refine-added-deuteran))))
bg-diff-refine-added-deuteran fg-diff-refine-added-deuteran
bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
`(modus-themes-diff-refine-changed
((,class ,@(modus-themes--diff
bg-diff-refine-changed fg-diff-refine-changed
@ -4405,7 +4163,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
((,class ,@(modus-themes--diff
bg-diff-focus-added fg-diff-focus-added
bg-diff-added fg-diff-added
bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran
bg-diff-added-deuteran fg-diff-added-deuteran))))
`(modus-themes-diff-focus-changed
((,class ,@(modus-themes--diff
bg-diff-focus-changed fg-diff-focus-changed
@ -4419,6 +4178,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
bg-diff-heading fg-diff-heading
cyan-nuanced-bg cyan-nuanced-fg
bg-header fg-main
bg-header fg-main
t))))
;;;;; deuteranopia-specific
`(modus-themes-grue ((,class :foreground ,@(modus-themes--deuteran blue green))))
@ -4564,7 +4324,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
bg-region blue-intense-bg
fg-alt blue-intense)
:extend t)))
`(modus-themes-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
`(modus-themes-key-binding ((,class :inherit (bold modus-themes-fixed-pitch)
:foreground ,blue-alt-other)))
`(modus-themes-prompt ((,class ,@(modus-themes--prompt
cyan-alt-other blue-alt-other fg-alt
cyan-nuanced-bg blue-refine-bg fg-main
@ -4592,7 +4353,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(elisp-shorthand-font-lock-face ((,class :inherit font-lock-variable-name-face)))
`(error ((,class :inherit bold :foreground ,red)))
`(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
`(file-name-shadow ((,class :inherit (shadow italic))))
`(file-name-shadow ((,class :inherit shadow)))
`(header-line ((,class :inherit modus-themes-ui-variable-pitch
:background ,bg-header :foreground ,fg-header)))
`(header-line-highlight ((,class :inherit highlight)))
@ -4759,10 +4520,10 @@ by virtue of calling either of `modus-themes-load-operandi' and
;;;;; avy
`(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim :extend t)))
`(avy-goto-char-timer-face ((,class :inherit (modus-themes-intense-neutral bold))))
`(avy-lead-face ((,class :inherit (modus-themes-intense-blue bold modus-themes-reset-soft))))
`(avy-lead-face-0 ((,class :inherit (modus-themes-refine-magenta bold modus-themes-reset-soft))))
`(avy-lead-face ((,class :inherit (bold modus-themes-reset-soft) :background ,bg-char-0)))
`(avy-lead-face-0 ((,class :inherit (bold modus-themes-reset-soft) :background ,bg-char-1)))
`(avy-lead-face-1 ((,class :inherit (modus-themes-special-warm modus-themes-reset-soft))))
`(avy-lead-face-2 ((,class :inherit (modus-themes-refine-green bold modus-themes-reset-soft))))
`(avy-lead-face-2 ((,class :inherit (bold modus-themes-reset-soft) :background ,bg-char-2)))
;;;;; aw (ace-window)
`(aw-background-face ((,class :foreground ,fg-unfocused)))
`(aw-key-face ((,class :inherit modus-themes-key-binding)))
@ -4849,6 +4610,27 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(cfw:face-toolbar-button-off ((,class :inherit shadow)))
`(cfw:face-toolbar-button-on ((,class :inherit bold :background ,blue-nuanced-bg
:foreground ,blue-alt)))
;;;;; calibredb
`(calibredb-archive-face ((,class :foreground ,magenta-alt-faint)))
`(calibredb-author-face ((,class :foreground ,blue-faint)))
`(calibredb-comment-face ((,class :inherit shadow)))
`(calibredb-date-face ((,class :foreground ,cyan)))
`(calibredb-edit-annotation-header-title-face ((,class :inherit bold)))
`(calibredb-favorite-face ((,class :foreground ,red-alt)))
`(calibredb-file-face (( )))
`(calibredb-format-face ((,class :foreground ,cyan-faint)))
`(calibredb-highlight-face ((,class :inherit success)))
`(calibredb-id-face (( )))
`(calibredb-ids-face (( )))
`(calibredb-search-header-highlight-face ((,class :inherit modus-themes-hl-line)))
`(calibredb-search-header-library-name-face ((,class :foreground ,blue-active)))
`(calibredb-search-header-library-path-face ((,class :inherit bold)))
`(calibredb-search-header-sort-face ((,class :inherit bold :foreground ,magenta-active)))
`(calibredb-search-header-total-face ((,class :inherit bold :foreground ,cyan-active)))
`(calibredb-search-header-filter-face ((,class :inherit bold)))
`(calibredb-mark-face ((,class :inherit modus-themes-mark-sel)))
`(calibredb-size-face (( )))
`(calibredb-tag-face ((,class :foreground ,magenta-alt-faint)))
;;;;; centaur-tabs
`(centaur-tabs-active-bar-face ((,class :background ,blue-active)))
`(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground ,red-active :underline t)))
@ -4992,6 +4774,9 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(corfu-bar ((,class :background ,fg-alt)))
`(corfu-border ((,class :background ,bg-active)))
`(corfu-default ((,class :background ,bg-alt)))
;;;;; corfu-quick
`(corfu-quick1 ((,class :inherit bold :background ,bg-char-0)))
`(corfu-quick2 ((,class :inherit bold :background ,bg-char-1)))
;;;;; counsel
`(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
`(counsel-application-name ((,class :foreground ,red-alt-other)))
@ -5323,6 +5108,13 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(ediff-odd-diff-Ancestor ((,class :inherit ediff-even-diff-Ancestor)))
`(ediff-odd-diff-B ((,class :inherit ediff-even-diff-B)))
`(ediff-odd-diff-C ((,class :inherit ediff-even-diff-C)))
;;;;; ein (Emacs IPython Notebook)
`(ein:basecell-input-area-face ((,class :background ,bg-dim :extend t)))
`(ein:cell-output-area (( )))
`(ein:cell-output-area-error ((,class :background ,red-nuanced-bg :extend t)))
`(ein:cell-output-stderr ((,class :background ,red-nuanced-bg :extend t)))
`(ein:markdowncell-input-area-face (( )))
`(ein:notification-tab-normal ((,class :underline t)))
;;;;; eglot
`(eglot-mode-line ((,class :inherit modus-themes-bold :foreground ,magenta-active)))
;;;;; el-search
@ -5637,7 +5429,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(font-lock-doc-face ((,class :inherit modus-themes-slant
,@(modus-themes--syntax-string
fg-docstring fg-special-cold
fg-special-mild magenta-nuanced-fg
fg-special-mild fg-special-calm
fg-special-mild magenta-nuanced-fg))))
`(font-lock-function-name-face ((,class ,@(modus-themes--syntax-extra
magenta magenta-faint
@ -5651,30 +5443,31 @@ by virtue of calling either of `modus-themes-load-operandi' and
yellow yellow-faint))))
`(font-lock-preprocessor-face ((,class ,@(modus-themes--syntax-extra
red-alt-other red-alt-other-faint
blue-alt blue-alt-faint))))
`(font-lock-regexp-grouping-backslash ((,class :inherit bold
cyan-alt-other cyan-alt-faint))))
`(font-lock-regexp-grouping-backslash ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-string
fg-escape-char-backslash yellow-alt-faint
yellow-alt magenta-alt
red-faint green-alt-other-faint))))
`(font-lock-regexp-grouping-construct ((,class :inherit bold
`(font-lock-regexp-grouping-construct ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-string
fg-escape-char-construct red-alt-other-faint
red-alt-other blue-alt-other
blue-faint blue-alt-other-faint))))
`(font-lock-string-face ((,class ,@(modus-themes--syntax-string
blue-alt blue-alt-faint
green-alt-other red-alt
green-alt-other red-alt-other
green-alt-faint red-alt-faint))))
`(font-lock-type-face ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-foreground
cyan-alt-other cyan-alt-faint))))
,@(modus-themes--syntax-extra
cyan-alt-other cyan-alt-faint
magenta-alt-other magenta-alt-other-faint))))
`(font-lock-variable-name-face ((,class ,@(modus-themes--syntax-extra
cyan cyan-faint
blue-alt-other blue-alt-other-faint))))
blue-alt blue-alt-faint))))
`(font-lock-warning-face ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-comment
yellow-active red-active red-faint yellow-faint))))
,@(modus-themes--syntax-foreground
yellow-active yellow-alt-faint))))
;;;;; forge
`(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
`(forge-post-date ((,class :foreground ,fg-special-cold)))
@ -5685,7 +5478,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
;;;;; fountain-mode
`(fountain-character ((,class :foreground ,blue-alt-other)))
`(fountain-comment ((,class :inherit modus-themes-slant :foreground ,fg-alt)))
`(fountain-comment ((,class :inherit font-lock-comment-face)))
`(fountain-dialog ((,class :foreground ,blue-alt)))
`(fountain-metadata-key ((,class :foreground ,green-alt-other)))
`(fountain-metadata-value ((,class :foreground ,blue)))
@ -5719,11 +5512,11 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(geiser-font-lock-xref-link ((,class :inherit button)))
;;;;; git-commit
`(git-commit-comment-action ((,class :inherit font-lock-comment-face)))
`(git-commit-comment-branch-local ((,class :inherit modus-themes-slant :foreground ,blue-alt)))
`(git-commit-comment-branch-remote ((,class :inherit modus-themes-slant :foreground ,magenta-alt)))
`(git-commit-comment-detached ((,class :inherit modus-themes-slant :foreground ,cyan-alt)))
`(git-commit-comment-file ((,class :inherit modus-themes-slant :foreground ,cyan)))
`(git-commit-comment-heading ((,class :inherit (bold modus-themes-slant))))
`(git-commit-comment-branch-local ((,class :inherit font-lock-comment-face :foreground ,blue-alt)))
`(git-commit-comment-branch-remote ((,class :inherit font-lock-comment-face :foreground ,magenta-alt)))
`(git-commit-comment-detached ((,class :inherit font-lock-comment-face :foreground ,cyan-alt)))
`(git-commit-comment-file ((,class :inherit font-lock-comment-face :foreground ,cyan)))
`(git-commit-comment-heading ((,class :inherit (bold font-lock-comment-face))))
`(git-commit-keyword ((,class :foreground ,magenta)))
`(git-commit-known-pseudo-header ((,class :foreground ,cyan-alt-other)))
`(git-commit-nonempty-second-line ((,class :inherit error)))
@ -5741,8 +5534,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(git-gutter-fr:deleted ((,class :inherit modus-themes-fringe-red)))
`(git-gutter-fr:modified ((,class :inherit modus-themes-fringe-yellow)))
;;;;; git-rebase
`(git-rebase-comment-hash ((,class :inherit modus-themes-slant :foreground ,cyan)))
`(git-rebase-comment-heading ((,class :inherit (bold modus-themes-slant))))
`(git-rebase-comment-hash ((,class :inherit font-lock-comment-face :foreground ,cyan)))
`(git-rebase-comment-heading ((,class :inherit (bold font-lock-comment-face))))
`(git-rebase-description ((,class :foreground ,fg-main)))
`(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
;;;;; git-timemachine
@ -6114,7 +5907,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(kaocha-runner-warning-face ((,class :inherit warning)))
;;;;; keycast
`(keycast-command ((,class :inherit bold :foreground ,blue-active)))
`(keycast-key ((,class ,@(modus-themes--mode-line-padded-box blue-active)
;; FIXME 2022-05-03: The padding breaks `keycast-tab-bar-mode'
`(keycast-key ((,class ;; ,@(modus-themes--mode-line-padded-box blue-active)
:background ,blue-active :foreground ,bg-main)))
;;;;; ledger-mode
`(ledger-font-auto-xact-face ((,class :foreground ,magenta)))
@ -6128,23 +5922,26 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(ledger-font-payee-uncleared-face ((,class :foreground ,red-alt-other)))
`(ledger-font-xact-highlight-face ((,class :background ,bg-hl-alt)))
;;;;; line numbers (display-line-numbers-mode and global variant)
;; Here we cannot inherit `modus-themes-fixed-pitch'. We need to
;; fall back to `default' otherwise line numbers do not scale when
;; using `text-scale-adjust'.
`(line-number
((,class :inherit default
((,class :inherit ,(if modus-themes-mixed-fonts 'fixed-pitch 'default)
,@(modus-themes--line-numbers
fg-alt bg-dim
fg-unfocused))))
`(line-number-current-line
((,class :inherit (bold default)
((,class :inherit (bold line-number)
,@(modus-themes--line-numbers
fg-main bg-active
blue-alt-other))))
`(line-number-major-tick
((,class :inherit (bold default)
((,class :inherit (bold line-number)
,@(modus-themes--line-numbers
yellow-nuanced-fg yellow-nuanced-bg
red-alt))))
`(line-number-minor-tick
((,class :inherit (bold default)
((,class :inherit (bold line-number)
,@(modus-themes--line-numbers
fg-alt bg-inactive
fg-inactive))))
@ -6228,7 +6025,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(magit-diff-added ((,class ,@(modus-themes--diff
bg-diff-added fg-diff-added
green-nuanced-bg fg-diff-added
bg-diff-added-deuteran fg-diff-added-deuteran))))
bg-diff-added-deuteran fg-diff-added-deuteran
blue-nuanced-bg fg-diff-added-deuteran))))
`(magit-diff-added-highlight ((,class :inherit modus-themes-diff-focus-added)))
`(magit-diff-base ((,class ,@(modus-themes--diff
bg-diff-changed fg-diff-changed
@ -6249,6 +6047,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
bg-active fg-inactive
bg-inactive fg-inactive
bg-inactive fg-inactive
nil nil
t))))
;; NOTE: we do not follow the pattern of inheriting from
;; modus-themes-grue-* faces, as this is a special case.
@ -6687,9 +6486,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
:background ,bg-alt)))
`(org-column-title ((,class :inherit (bold modus-themes-fixed-pitch default)
:underline t :background ,bg-alt)))
`(org-date ((,class :inherit ,(if modus-themes-mixed-fonts
'(fixed-pitch modus-themes-link-symlink)
'modus-themes-link-symlink))))
`(org-date ((,class :inherit (modus-themes-link-symlink modus-themes-fixed-pitch))))
`(org-date-selected ((,class :foreground ,blue-alt :inverse-video t)))
`(org-dispatcher-highlight ((,class :inherit (bold modus-themes-mark-alt))))
`(org-document-info ((,class :foreground ,fg-special-cold)))
@ -6906,7 +6703,7 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(popup-summary-face ((,class :background ,bg-active :foreground ,fg-inactive)))
`(popup-tip-face ((,class :inherit modus-themes-refine-yellow)))
;;;;; powerline
`(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint :inverse-video t)))
`(powerline-active0 ((,class :background ,blue-faint :foreground ,bg-main)))
`(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground ,blue-nuanced-fg)))
`(powerline-active2 ((,class :background ,bg-active :foreground ,fg-active)))
`(powerline-inactive0 ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
@ -7355,7 +7152,9 @@ by virtue of calling either of `modus-themes-load-operandi' and
;;;;; transient
`(transient-active-infix ((,class :inherit modus-themes-special-mild)))
`(transient-amaranth ((,class :inherit bold :foreground ,yellow-alt)))
`(transient-argument ((,class :inherit bold :background ,cyan-nuanced-bg :foreground ,cyan)))
;; Placate the compiler for what is a spurious warning. We also
;; have to do this with `eldoc-highlight-function-argument'.
(list 'transient-argument `((,class :inherit bold :background ,cyan-nuanced-bg :foreground ,cyan)))
`(transient-blue ((,class :inherit bold :foreground ,blue)))
`(transient-disabled-suffix ((,class :inherit modus-themes-intense-red)))
`(transient-enabled-suffix ((,class :inherit modus-themes-grue-background-subtle)))
@ -7379,6 +7178,24 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(trashed-marked ((,class :inherit modus-themes-mark-alt)))
`(trashed-restored ((,class :inherit modus-themes-mark-sel)))
`(trashed-symlink ((,class :inherit modus-themes-link-symlink)))
;;;;; tree-sitter
`(tree-sitter-hl-face:attribute ((,class :inherit font-lock-variable-name-face)))
`(tree-sitter-hl-face:constant.builtin ((,class :inherit tree-sitter-hl-face:constant)))
`(tree-sitter-hl-face:escape ((,class :inherit font-lock-regexp-grouping-backslash)))
`(tree-sitter-hl-face:function ((,class :inherit font-lock-function-name-face)))
`(tree-sitter-hl-face:function.call ((,class :inherit tree-sitter-hl-face:function)))
`(tree-sitter-hl-face:label (( )))
`(tree-sitter-hl-face:method.call (( )))
`(tree-sitter-hl-face:operator ((,class :inherit modus-themes-bold)))
`(tree-sitter-hl-face:property (( )))
`(tree-sitter-hl-face:property.definition ((,class :inherit font-lock-variable-name-face)))
`(tree-sitter-hl-face:punctuation (( )))
`(tree-sitter-hl-face:punctuation.bracket (( )))
`(tree-sitter-hl-face:punctuation.delimiter (( )))
`(tree-sitter-hl-face:punctuation.special ((,class :inherit font-lock-regexp-grouping-construct)))
`(tree-sitter-hl-face:string.special ((,class :inherit tree-sitter-hl-face:string)))
`(tree-sitter-hl-face:tag ((,class :inherit font-lock-function-name-face)))
`(tree-sitter-hl-face:type.argument (( )))
;;;;; treemacs
`(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
`(treemacs-directory-face ((,class :inherit dired-directory)))
@ -7460,8 +7277,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
;;;;; vertico
`(vertico-current ((,class :inherit modus-themes-completion-selected)))
;;;;; vertico-quick
`(vertico-quick1 ((,class :inherit (modus-themes-intense-blue bold))))
`(vertico-quick2 ((,class :inherit (modus-themes-refine-magenta bold))))
`(vertico-quick1 ((,class :inherit bold :background ,bg-char-0)))
`(vertico-quick2 ((,class :inherit bold :background ,bg-char-1)))
;;;;; vimish-fold
`(vimish-fold-fringe ((,class :foreground ,cyan-active)))
`(vimish-fold-mouse-face ((,class :inherit modus-themes-intense-blue)))
@ -7491,6 +7308,8 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(vterm-color-underline ((,class :foreground ,fg-special-warm :underline t)))
`(vterm-color-white ((,class :background "gray65" :foreground "gray65")))
`(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
;;;;; vundo
`(vundo-highlight ((,class :inherit (bold vundo-node) :foreground ,red-intense)))
;;;;; wcheck-mode
`(wcheck-default-face ((,class :foreground ,red :underline t)))
;;;;; web-mode
@ -7652,6 +7471,9 @@ by virtue of calling either of `modus-themes-load-operandi' and
`(flymake-error-bitmap '(flymake-double-exclamation-mark modus-themes-fringe-red))
`(flymake-warning-bitmap '(exclamation-mark modus-themes-fringe-yellow))
`(flymake-note-bitmap '(exclamation-mark modus-themes-fringe-cyan))
;;;; highlight-changes
`(highlight-changes-colors nil)
`(highlight-changes-face-list '(success warning error bold bold-italic))
;;;; ibuffer
`(ibuffer-deletion-face 'modus-themes-mark-del)
`(ibuffer-filter-group-name-face 'modus-themes-pseudo-header)
@ -7753,9 +7575,4 @@ by virtue of calling either of `modus-themes-load-operandi' and
(add-to-list 'custom-theme-load-path dir))))
(provide 'modus-themes)
;; Local Variables:
;; time-stamp-pattern: "Last-Modified: <%Y-%02m-%02d %02H:%02M:%02S %5z>"
;; End:
;;; modus-themes.el ends here

View file

@ -3,8 +3,8 @@
;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
;; Version: 2.3.0
;; URL: https://git.sr.ht/~protesilaos/modus-themes
;; Version: 2.4.1
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility

View file

@ -905,6 +905,15 @@ Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以
Emacs 使用手册里还有许许多多的精彩功能等着你来了解。
* 安装包裹INSTALLING PACKAGES
---------------------------
Emacs 社区著作了许多持有扩展性的包裹packages其中包括对各种语言的
支持、色彩鲜艳的主题、用于集成外部程序的包裹,等等。
使用 M-x list-packages 便可浏览存在的包裹。这个命令显示的界面中可以安
装和卸载包裹以及查看包裹的简介。Emacs 使用手册中有对包裹管理更详细的
介绍。
* 总结CONCLUSION
--------------------

1267
etc/tutorials/TUTORIAL.el_GR Normal file

File diff suppressed because it is too large Load diff

View file

@ -1110,7 +1110,7 @@ mentre fai riferimento al testo di aiuto e poi usare un C-x 1.
Ecco altre utili opzioni di C-h:
C-h x Descrive un comando. Inserisci il nome della comando.
C-h x Descrive un comando. Inserisci il nome del comando.
>> Prova con C-h x previous-line <Invio>.
Questo mostrerà tutte le informazioni che Emacs possiede sulla

View file

@ -26,6 +26,10 @@ Maintainer: Dale Gulledge <dsplat@rochester.rr.com>
Author: Rafael Sepúlveda <drs@gnulinux.org.mx>
Maintainer: Rafael Sepúlveda <drs@gnulinux.org.mx>
* TUTORIAL.el_GR:
Author: Protesilaos Stavrou <info@protesilaos.com>
Maintainer: Protesilaos Stavrou <info@protesilaos.com>
* TUTORIAL.fr:
Author: Éric Jacoboni <jaco@teaser.fr>
Maintainer: Éric Jacoboni <jaco@teaser.fr>

View file

@ -32,6 +32,12 @@ leimdir = ${srcdir}/../lisp/leim
EXEEXT = @EXEEXT@
SMALL_JA_DIC = @SMALL_JA_DIC@
JA_DIC_NO_REDUCTION_OPTION = --no-reduction
ifeq ($(SMALL_JA_DIC), yes)
JA_DIC_NO_REDUCTION_OPTION =
endif
-include ${top_builddir}/src/verbose.mk
# Prevent any settings in the user environment causing problems.
@ -80,7 +86,7 @@ MISC= \
TIT_MISC = ${TIT_GB} ${TIT_BIG5} ${MISC}
all: ${leimdir}/leim-list.el ${leimdir}/ja-dic/ja-dic.el
all: ${leimdir}/leim-list.el
.PHONY: all
@ -129,10 +135,12 @@ ${leimdir}/leim-list.el: ${srcdir}/leim-ext.el ${TIT_MISC}
${leimdir}/ja-dic/ja-dic.el: | $(leimdir)/ja-dic
.PHONY: generate-ja-dic
generate-ja-dic: ${leimdir}/ja-dic/ja-dic.el
${leimdir}/ja-dic/ja-dic.el: $(srcdir)/SKK-DIC/SKK-JISYO.L
$(AM_V_GEN)$(RUN_EMACS) -batch -l ja-dic-cnv \
--eval "(setq max-specpdl-size 5000)" \
-f batch-skkdic-convert -dir "$(leimdir)/ja-dic" "$<"
-f batch-skkdic-convert -dir "$(leimdir)/ja-dic" $(JA_DIC_NO_REDUCTION_OPTION) "$<"
${srcdir}/../lisp/language/pinyin.el: ${srcdir}/MISC-DIC/pinyin.map
$(AM_V_GEN)${RUN_EMACS} -l titdic-cnv -f pinyin-convert $< $@

View file

@ -1427,14 +1427,19 @@ main (int argc, char **argv)
if (CTAGS)
if (append_to_tagfile || update)
{
char *cmd = xmalloc (2 * strlen (tagfile) + sizeof "sort -u -o..");
/* Maybe these should be used:
setenv ("LC_COLLATE", "C", 1);
setenv ("LC_ALL", "C", 1); */
char *z = stpcpy (cmd, "sort -u -o ");
z = stpcpy (z, tagfile);
*z++ = ' ';
strcpy (z, tagfile);
char *cmd = xmalloc (8 * strlen (tagfile) + sizeof "sort -u -o '' ''");
char *z = stpcpy (cmd, "sort -u -o '");
char *escaped_tagfile = z;
for (; *tagfile; *z++ = *tagfile++)
if (*tagfile == '\'')
z = stpcpy (z, "'\\'");
ptrdiff_t escaped_tagfile_len = z - escaped_tagfile;
z = stpcpy (z, "' '");
z = mempcpy (z, escaped_tagfile, escaped_tagfile_len);
strcpy (z, "'");
return system (cmd);
}
return EXIT_SUCCESS;
@ -4161,6 +4166,9 @@ C_entries (int c_ext, /* extension of C */
if (definedef != dnone)
break;
bracelev -= 1;
/* If we see a closing brace in column zero, and we weren't told to
ignore indentation, we assume this the final brace of a function
or struct definition, and reset bracelev to zero. */
if (!ignoreindent && lp == newlb.buffer + 1)
{
if (bracelev != 0)
@ -6396,7 +6404,8 @@ mercury_decl (char *s, size_t pos)
size_t origpos;
origpos = pos;
while (s + pos != NULL && (c_isalnum (s[pos]) || s[pos] == '_')) ++pos;
while (c_isalnum (s[pos]) || s[pos] == '_')
pos++;
unsigned char decl_type_length = pos - origpos;
char buf[decl_type_length + 1];
@ -6440,9 +6449,9 @@ mercury_decl (char *s, size_t pos)
so this is the hard case. */
if (strcmp (buf, "solver") == 0)
{
++pos;
while (s + pos != NULL && (c_isalnum (s[pos]) || s[pos] == '_'))
++pos;
do
pos++;
while (c_isalnum (s[pos]) || s[pos] == '_');
decl_type_length = pos - origpos;
char buf2[decl_type_length + 1];
@ -6492,7 +6501,6 @@ mercury_decl (char *s, size_t pos)
while (c_isalnum (s[pos])
|| s[pos] == '_'
|| (s[pos] == '.' /* A module dot. */
&& s + pos + 1 != NULL
&& (c_isalnum (s[pos + 1]) || s[pos + 1] == '_')
&& (module_dot_pos = pos))) /* Record module dot position.
Erase module from name. */
@ -6536,10 +6544,10 @@ mercury_decl (char *s, size_t pos)
}
else if (is_mercury_quantifier && s[pos] == '[') /* :- some [T] pred/func. */
{
for (++pos; s + pos != NULL && s[pos] != ']'; ++pos) {}
if (s + pos == NULL) return null_pos;
++pos;
pos = skip_spaces (s + pos) - s;
char *close_bracket = strchr (s + pos + 1, ']');
if (!close_bracket)
return null_pos;
pos = skip_spaces (close_bracket + 1) - s;
mercury_pos_t position = mercury_decl (s, pos);
position.totlength += pos - origpos;
return position;
@ -7243,8 +7251,8 @@ readline_internal (linebuffer *lbp, FILE *stream, char const *filename)
{
/* We're at the end of linebuffer: expand it. */
xrnew (buffer, lbp->size, 2);
p = buffer + lbp->size;
lbp->size *= 2;
p += buffer - lbp->buffer;
pend = buffer + lbp->size;
lbp->buffer = buffer;
}
@ -7665,21 +7673,21 @@ relative_filename (char *file, char *dir)
{
char *fp, *dp, *afn, *res;
ptrdiff_t i;
char *dir_last_slash UNINIT;
/* Find the common root of file and dir (with a trailing slash). */
afn = absolute_filename (file, cwd);
fp = afn;
dp = dir;
while (*fp++ == *dp++)
continue;
fp--, dp--; /* back to the first differing char */
if (dp[-1] == '/')
dir_last_slash = dp - 1;
#ifdef DOS_NT
if (fp == afn && afn[0] != '/') /* cannot build a relative name */
return afn;
if (fp - 1 == afn && afn[0] != '/')
return afn; /* Cannot build a relative name. */
#endif
do /* look at the equal chars until '/' */
fp--, dp--;
while (*fp != '/');
fp -= dp - dir_last_slash;
dp = dir_last_slash;
/* Build a sequence of "../" strings for the resulting relative file name. */
i = 0;

View file

@ -1068,7 +1068,7 @@ scan_c_stream (FILE *infile)
attributes: attribute1 attribute2 ...)
(Lisp_Object arg...)
Now only const, noinline and 'noreturn' attributes
Now only `const', `noinline' and `noreturn' attributes
are used. */
/* Advance to the end of docstring. */

View file

@ -208,7 +208,6 @@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CRYPTOLIB = @CRYPTOLIB@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXFLAGS = @CXXFLAGS@
CYGWIN_OBJ = @CYGWIN_OBJ@
C_SWITCH_MACHINE = @C_SWITCH_MACHINE@

View file

@ -59,15 +59,6 @@ BYTE_COMPILE_EXTRA_FLAGS =
# BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))'
# The example above is just for developers, it should not be used by default.
# Those automatically generated autoload files that need special rules
# to build; i.e. not including things created via generated-autoload-file
# (eg calc/calc-loaddefs.el).
LOADDEFS = $(lisp)/calendar/cal-loaddefs.el \
$(lisp)/calendar/diary-loaddefs.el \
$(lisp)/calendar/hol-loaddefs.el \
$(lisp)/mh-e/mh-loaddefs.el \
$(lisp)/net/tramp-loaddefs.el
# All generated autoload files.
loaddefs = $(shell find ${srcdir} -name '*loaddefs.el' ! -name '.*')
# Elisp files auto-generated.
@ -84,10 +75,11 @@ compile-first: BYTE_COMPILE_FLAGS = \
# Files to compile before others during a bootstrap. This is done to
# speed up the bootstrap process. They're ordered by size, so we use
# the slowest-compiler on the smallest file and move to larger files as the
# compiler gets faster. 'autoload.elc' comes last because it is not used by
# the compiler (so its compilation does not speed up subsequent compilations),
# it's only placed here so as to speed up generation of the loaddefs.el file.
# the slowest-compiler on the smallest file and move to larger files
# as the compiler gets faster. 'loaddefs-gen.elc'/'radix-tree.el'
# comes last because they're not used by the compiler (so its
# compilation does not speed up subsequent compilations), it's only
# placed here so as to speed up generation of the loaddefs.el files.
COMPILE_FIRST = \
$(lisp)/emacs-lisp/macroexp.elc \
@ -98,11 +90,18 @@ ifeq ($(HAVE_NATIVE_COMP),yes)
COMPILE_FIRST += $(lisp)/emacs-lisp/comp.elc
COMPILE_FIRST += $(lisp)/emacs-lisp/comp-cstr.elc
endif
COMPILE_FIRST += $(lisp)/emacs-lisp/autoload.elc
COMPILE_FIRST += $(lisp)/emacs-lisp/loaddefs-gen.elc
COMPILE_FIRST += $(lisp)/emacs-lisp/radix-tree.elc
# Files to compile early in compile-main. Works around bug#25556.
# Also compile the ja-dic file used to convert the Japanese dictionary
# to speed things up. The org files are used to convert org files to
# texi files.
MAIN_FIRST = ./emacs-lisp/eieio.el ./emacs-lisp/eieio-base.el \
./cedet/semantic/db.el ./emacs-lisp/cconv.el
./cedet/semantic/db.el ./emacs-lisp/cconv.el \
./international/ja-dic-cnv.el \
./org/ox.el ./org/ox-texinfo.el ./org/org-macro.el ./org/org-element.el \
./org/oc.el ./org/ol.el ./emacs-lisp/cl-lib.el
# Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
@ -125,10 +124,12 @@ SUBDIRS_SUBDIRS = $(filter-out ${srcdir}/cedet% ${srcdir}/leim%,${SUBDIRS})
# cus-load and finder-inf are not explicitly requested by anything, so
# we add them here to make sure they get built.
all: compile-main $(lisp)/cus-load.el $(lisp)/finder-inf.el
all: compile-main $(lisp)/cus-load.el $(lisp)/finder-inf.el generate-ja-dic \
org-manuals
PHONY_EXTRAS =
.PHONY: all custom-deps finder-data autoloads update-subdirs $(PHONY_EXTRAS)
.PHONY: all custom-deps finder-data autoloads update-subdirs $(PHONY_EXTRAS) \
generate-ja-dic org-manuals
# custom-deps and finder-data both used to scan _all_ the *.el files.
# This could lead to problems in parallel builds if automatically
@ -159,6 +160,14 @@ $(lisp)/finder-inf.el:
--eval '(setq generated-finder-keywords-file (unmsys--file-name "$(srcdir)/finder-inf.el"))' \
-f finder-compile-keywords-make-dist ${SUBDIRS_FINDER}
# This is the OKURO-NASI compilation trigger.
generate-ja-dic: main-first
$(AM_V_at)$(MAKE) -C ../leim generate-ja-dic EMACS="$(EMACS)"
$(AM_V_at)$(MAKE) compile-targets TARGETS="./leim/ja-dic/ja-dic.elc"
org-manuals: main-first
$(AM_V_at)$(MAKE) -C ../doc/misc org.texi modus-themes.texi
## Comments on loaddefs generation:
# loaddefs depends on gen-lisp for two reasons:
@ -167,6 +176,9 @@ $(lisp)/finder-inf.el:
# gets created before the final emacs is dumped. Having leim
# dependencies in ../src as well would create a parallel race condition.
#
# FIXME: 2) is no longer correct, so perhaps we could add unidata to
# gen-lisp now?
#
# 2) Files that are marked no-update-autoloads still get recorded in loaddefs.
# So those files should be generated before we make autoloads, if we
# don't want a successive make autoloads to change the output file.
@ -186,19 +198,13 @@ $(lisp)/finder-inf.el:
# We make $(lisp)/loaddefs.el a dependency of .PHONY to cause Make to
# ignore its time stamp. That's because the real dependencies of
# loaddefs.el aren't known to Make, they are implemented in
# batch-update-autoloads, which only updates the autoloads whose
# sources have changed.
# Use expand-file-name rather than $abs_scrdir so that Emacs does not
# get confused when it compares file-names for equality.
# loaddefs-generate--emacs-batch.
autoloads .PHONY: $(lisp)/loaddefs.el
$(lisp)/loaddefs.el: gen-lisp $(LOADDEFS)
$(AM_V_GEN)$(emacs) -l autoload \
--eval '(setq autoload-ensure-writable t)' \
--eval '(setq autoload-builtin-package-versions t)' \
--eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$@")))' \
-f batch-update-autoloads ${SUBDIRS_ALMOST}
$(lisp)/loaddefs.el: gen-lisp $(LOADDEFS) $(lisp)/emacs-lisp/loaddefs-gen.elc
$(AM_V_GEN)$(emacs) \
-l $(lisp)/emacs-lisp/loaddefs-gen.elc \
-f loaddefs-generate--emacs-batch ${SUBDIRS_ALMOST}
# autoloads only runs when loaddefs.el is nonexistent, although it
# generates a number of different files. Provide a force option to enable
@ -456,57 +462,6 @@ compile-one-process: $(LOADDEFS) compile-first
$(emacs) $(BYTE_COMPILE_FLAGS) \
--eval "(batch-byte-recompile-directory 0)" $(lisp)
# Update MH-E internal autoloads. These are not to be confused with
# the autoloads for the MH-E entry points, which are already in loaddefs.el.
MH_E_DIR = $(lisp)/mh-e
MH_E_SRC = $(sort $(wildcard ${MH_E_DIR}/mh*.el))
MH_E_SRC := $(filter-out ${MH_E_DIR}/mh-loaddefs.el,${MH_E_SRC})
.PHONY: mh-autoloads
mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el
$(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC)
$(AM_V_GEN)$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \
--eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
-f batch-update-autoloads $(MH_E_DIR)
# Update TRAMP internal autoloads. Maybe we could move tramp*.el into
# an own subdirectory. OTOH, it does not hurt to keep them in
# lisp/net.
TRAMP_DIR = $(lisp)/net
TRAMP_SRC = $(sort $(wildcard ${TRAMP_DIR}/tramp*.el))
TRAMP_SRC := $(filter-out ${TRAMP_DIR}/tramp-loaddefs.el,${TRAMP_SRC})
$(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC)
$(AM_V_GEN)$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###tramp-autoload\")" \
--eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
-f batch-update-autoloads $(TRAMP_DIR)
CAL_DIR = $(lisp)/calendar
## Those files that may contain internal calendar autoload cookies.
CAL_SRC = $(addprefix ${CAL_DIR}/,diary-lib.el holidays.el lunar.el solar.el)
CAL_SRC := $(sort ${CAL_SRC} $(wildcard ${CAL_DIR}/cal-*.el))
CAL_SRC := $(filter-out ${CAL_DIR}/cal-loaddefs.el,${CAL_SRC})
$(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
$(AM_V_GEN)$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
--eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
-f batch-update-autoloads $(CAL_DIR)
$(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC) $(CAL_DIR)/cal-loaddefs.el
$(AM_V_GEN)$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \
--eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
-f batch-update-autoloads $(CAL_DIR)
$(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC) $(CAL_DIR)/diary-loaddefs.el
$(AM_V_GEN)$(emacs) -l autoload \
--eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \
--eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
-f batch-update-autoloads $(CAL_DIR)
.PHONY: bootstrap-clean distclean maintainer-clean
bootstrap-clean:

View file

@ -42,12 +42,12 @@
(defcustom abbrev-file-name
(locate-user-emacs-file "abbrev_defs" ".abbrev_defs")
"Default name of file from which to read abbrevs."
"Default name of file from which to read and where to save abbrevs."
:initialize 'custom-initialize-delay
:type 'file)
(defcustom only-global-abbrevs nil
"Non-nil means user plans to use global abbrevs only.
"Non-nil means user plans to use only global abbrevs.
This makes the commands that normally define mode-specific abbrevs
define global abbrevs instead."
:type 'boolean
@ -59,7 +59,8 @@ define global abbrevs instead."
In Abbrev mode, inserting an abbreviation causes it to expand and
be replaced by its expansion."
;; It's defined in C, this stops the d-m-m macro defining it again.
;; It's defined in C, this stops the 'define-minor-mode' macro from
;; defining it again.
:variable abbrev-mode)
(put 'abbrev-mode 'safe-local-variable 'booleanp)
@ -81,7 +82,8 @@ be replaced by its expansion."
(defun copy-abbrev-table (table)
"Make a new abbrev-table with the same abbrevs as TABLE.
Does not copy property lists."
This function does not copy property lists of the abbrevs.
See `define-abbrev' for the documentation of abbrev properties."
(let ((new-table (make-abbrev-table)))
(obarray-map
(lambda (symbol)
@ -93,8 +95,8 @@ Does not copy property lists."
new-table))
(defun insert-abbrevs ()
"Insert after point a description of all defined abbrevs.
Mark is set after the inserted text."
"Insert the description of all defined abbrevs after point.
Set mark after the inserted text."
(interactive)
(push-mark
(save-excursion
@ -103,15 +105,15 @@ Mark is set after the inserted text."
(point))))
(defun list-abbrevs (&optional local)
"Display a list of defined abbrevs.
If LOCAL is non-nil, interactively when invoked with a
prefix arg, display only local, i.e. mode-specific, abbrevs.
Otherwise display all abbrevs."
"Display a list of the defined abbrevs.
If LOCAL is non-nil (interactively, when invoked with a
prefix arg), display only local, i.e. mode-specific, abbrevs.
Otherwise display all the abbrevs."
(interactive "P")
(display-buffer (prepare-abbrev-list-buffer local)))
(defun abbrev-table-name (table)
"Value is the name of abbrev table TABLE."
"Return the name of the specified abbrev TABLE."
(let ((tables abbrev-table-name-list)
found)
(while (and (not found) tables)
@ -135,33 +137,33 @@ Otherwise display all abbrevs."
(dolist (table (nreverse empty-tables))
(insert-abbrev-table-description table t)))
;; Note: `list-abbrevs' can display only local abbrevs, in
;; which case editing could lose abbrevs of other tables. Thus
;; enter `edit-abbrevs-mode' only if LOCAL is nil.
;; which case editing could lose abbrevs of other tables.
;; Thus enter `edit-abbrevs-mode' only if LOCAL is nil.
(edit-abbrevs-mode))
(goto-char (point-min))
(set-buffer-modified-p nil)
(current-buffer))))
(defun edit-abbrevs ()
"Alter abbrev definitions by editing a list of them.
Selects a buffer containing a list of abbrev definitions with
point located in the abbrev table for the current buffer, and
turns on `edit-abbrevs-mode' in that buffer.
"Alter abbrev definitions by editing the list of abbrevs.
This selects a buffer containing the list of abbrev definitions
with point located in the abbrev table for the current buffer, and
turns on `edit-abbrevs-mode' in the buffer with the list of abbrevs.
You can edit them and type \\<edit-abbrevs-mode-map>\\[edit-abbrevs-redefine] \
You can edit the abbrevs and type \\<edit-abbrevs-mode-map>\\[edit-abbrevs-redefine] \
to redefine abbrevs
according to your editing.
The abbrevs editing buffer contains a header line for each
abbrev table, which is the abbrev table name in parentheses.
This is followed by one line per abbrev in that table:
The header line is followed by one line per abbrev in that table:
NAME USECOUNT EXPANSION HOOK
where NAME and EXPANSION are strings with quotes,
USECOUNT is an integer, and HOOK is any valid function
or may be omitted (it is usually omitted)."
that may be omitted (it is usually omitted)."
(interactive)
(let ((table-name (abbrev-table-name local-abbrev-table)))
(switch-to-buffer (prepare-abbrev-list-buffer))
@ -182,8 +184,9 @@ or may be omitted (it is usually omitted)."
"Define abbrevs according to current visible buffer contents.
See documentation of `edit-abbrevs' for info on the format of the
text you must have in the buffer.
With argument, eliminate all abbrev definitions except
the ones defined from the buffer now."
If ARG is non-nil (interactively, when invoked with a prefix
argument), eliminate all abbrev definitions except the ones
defined by the current buffer contents."
(interactive "P")
(if arg (kill-all-abbrevs))
(save-excursion
@ -214,7 +217,8 @@ the ones defined from the buffer now."
"Read abbrev definitions from file written with `write-abbrev-file'.
Optional argument FILE is the name of the file to read;
it defaults to the value of `abbrev-file-name'.
Optional second argument QUIETLY non-nil means don't display a message."
Optional second argument QUIETLY non-nil means don't display a message
about loading the abbrevs."
(interactive
(list
(read-file-name (format-prompt "Read abbrev file" abbrev-file-name)
@ -223,22 +227,22 @@ Optional second argument QUIETLY non-nil means don't display a message."
(setq abbrevs-changed nil))
(defun quietly-read-abbrev-file (&optional file)
"Read abbrev definitions from file written with `write-abbrev-file'.
"Quietly read abbrev definitions from file written with `write-abbrev-file'.
Optional argument FILE is the name of the file to read;
it defaults to the value of `abbrev-file-name'.
Does not display any message."
Do not display any messages about loading the abbrevs."
;(interactive "fRead abbrev file: ")
(read-abbrev-file file t))
(defun write-abbrev-file (&optional file verbose)
"Write all user-level abbrev definitions to a file of Lisp code.
This does not include system abbrevs; it includes only the abbrev tables
listed in listed in `abbrev-table-name-list'.
listed in `abbrev-table-name-list'.
The file written can be loaded in another session to define the same abbrevs.
The argument FILE is the file name to write. If omitted or nil, the file
specified in `abbrev-file-name' is used.
If VERBOSE is non-nil, display a message indicating where abbrevs
have been saved."
The argument FILE is the file name to write. If omitted or nil, it defaults
to the value of `abbrev-file-name'.
If VERBOSE is non-nil, display a message indicating the file where the
abbrevs have been saved."
(interactive
(list
(read-file-name "Write abbrev file: "
@ -251,10 +255,10 @@ have been saved."
(dolist (table
;; We sort the table in order to ease the automatic
;; merging of different versions of the user's abbrevs
;; file. This is useful, for example, for when the
;; file. This is useful, for example, when the
;; user keeps their home directory in a revision
;; control system, and is therefore keeping multiple
;; slightly-differing copies loosely synchronized.
;; control system, and therefore keeps multiple
;; slightly-differing loosely synchronized copies.
(sort (copy-sequence abbrev-table-name-list)
(lambda (s1 s2)
(string< (symbol-name s1)
@ -268,7 +272,7 @@ have been saved."
(write-region nil nil file nil (and (not verbose) 0)))))
(defun abbrev-edit-save-to-file (file)
"Save all user-level abbrev definitions in current buffer to FILE."
"Save to FILE all the user-level abbrev definitions in current buffer."
(interactive
(list (read-file-name "Save abbrevs to file: "
(file-name-directory
@ -279,7 +283,7 @@ have been saved."
(write-abbrev-file file t))
(defun abbrev-edit-save-buffer ()
"Save all user-level abbrev definitions in current buffer.
"Save all the user-level abbrev definitions in current buffer.
The saved abbrevs are written to the file specified by
`abbrev-file-name'."
(interactive nil edit-abbrevs-mode)
@ -287,15 +291,16 @@ The saved abbrevs are written to the file specified by
(defun add-mode-abbrev (arg)
"Define mode-specific abbrev for last word(s) before point.
Argument is how many words before point form the expansion;
or zero means the region is the expansion.
A negative argument means to undefine the specified abbrev.
Reads the abbreviation in the minibuffer.
"Define a mode-specific abbrev whose expansion is the last word before point.
Prefix argument ARG says how many words before point to use for the expansion;
zero means the entire region is the expansion.
A negative ARG means to undefine the specified abbrev.
This command reads the abbreviation from the minibuffer.
See also `inverse-add-mode-abbrev', which performs the opposite task:
if the abbrev text is already in the buffer, use this command to
define an abbrev by specifying the expansion in the minibuffer.
if the abbreviation is already in the buffer, use that command to define
a mode-specific abbrev by specifying its expansion in the minibuffer.
Don't use this function in a Lisp program; use `define-abbrev' instead."
(interactive "p")
@ -307,15 +312,16 @@ Don't use this function in a Lisp program; use `define-abbrev' instead."
"Mode" arg))
(defun add-global-abbrev (arg)
"Define global (all modes) abbrev for last word(s) before point.
The prefix argument specifies the number of words before point that form the
expansion; or zero means the region is the expansion.
A negative argument means to undefine the specified abbrev.
This command uses the minibuffer to read the abbreviation.
"Define a global (all modes) abbrev whose expansion is last word before point.
Prefix argument ARG says how many words before point to use for the expansion;
zero means the entire region is the expansion.
A negative ARG means to undefine the specified abbrev.
This command reads the abbreviation from the minibuffer.
See also `inverse-add-global-abbrev', which performs the opposite task:
if the abbrev text is already in the buffer, use this command to
define an abbrev by specifying the expansion in the minibuffer.
if the abbreviation is already in the buffer, use that command to define
a global abbrev by specifying its expansion in the minibuffer.
Don't use this function in a Lisp program; use `define-abbrev' instead."
(interactive "p")
@ -329,25 +335,30 @@ Don't use this function in a Lisp program; use `define-abbrev' instead."
(save-excursion (forward-word (- arg)) (point))))))
name)
(setq name
(read-string (format (if exp "%s abbrev for \"%s\": "
(read-string (format (if exp "%s abbrev that expands into \"%s\": "
"Undefine %s abbrev: ")
type exp)))
(set-text-properties 0 (length name) nil name)
(if (or (null exp)
(not (abbrev-expansion name table))
(y-or-n-p (format "%s expands to \"%s\"; redefine? "
(y-or-n-p (format "%s expands into \"%s\"; redefine? "
name (abbrev-expansion name table))))
(define-abbrev table (downcase name) exp))))
(defun inverse-add-mode-abbrev (n)
"Define last word before point as a mode-specific abbrev.
With prefix argument N, defines the Nth word before point.
This command uses the minibuffer to read the expansion.
Expands the abbreviation after defining it.
"Define the word before point as a mode-specific abbreviation.
With prefix argument N, define the Nth word before point as the
abbreviation. Negative N means use the Nth word after point.
If `only-global-abbrevs' is non-nil, this command defines a
global (mode-independent) abbrev instead of a mode-specific one.
This command reads the expansion from the minibuffer, defines the
abbrev, and then expands the abbreviation in the current buffer.
See also `add-mode-abbrev', which performs the opposite task:
if the expansion is already in the buffer, use this command
to define an abbrev by specifying the abbrev in the minibuffer."
if the expansion is already in the buffer, use that command
to define an abbrev by specifying the abbreviation in the minibuffer."
(interactive "p")
(inverse-add-abbrev
(if only-global-abbrevs
@ -357,14 +368,16 @@ to define an abbrev by specifying the abbrev in the minibuffer."
"Mode" n))
(defun inverse-add-global-abbrev (n)
"Define last word before point as a global (mode-independent) abbrev.
With prefix argument N, defines the Nth word before point.
This command uses the minibuffer to read the expansion.
Expands the abbreviation after defining it.
"Define the word before point as a global (mode-independent) abbreviation.
With prefix argument N, define the Nth word before point as the
abbreviation. Negative N means use the Nth word after point.
This command reads the expansion from the minibuffer, defines the
abbrev, and then expands the abbreviation in the current buffer.
See also `add-global-abbrev', which performs the opposite task:
if the expansion is already in the buffer, use this command
to define an abbrev by specifying the abbrev in the minibuffer."
if the expansion is already in the buffer, use that command
to define an abbrev by specifying the abbreviation in the minibuffer."
(interactive "p")
(inverse-add-abbrev global-abbrev-table "Global" n))
@ -378,10 +391,10 @@ to define an abbrev by specifying the abbrev in the minibuffer."
(setq start (point)
name (buffer-substring-no-properties start end)))
(setq exp (read-string (format "%s expansion for \"%s\": " type name)
(setq exp (read-string (format "Expansion for %s abbrev \"%s\": " type name)
nil nil nil t))
(when (or (not (abbrev-expansion name table))
(y-or-n-p (format "%s expands to \"%s\"; redefine? "
(y-or-n-p (format "%s expands into \"%s\"; redefine? "
name (abbrev-expansion name table))))
(define-abbrev table (downcase name) exp)
(save-excursion
@ -389,10 +402,11 @@ to define an abbrev by specifying the abbrev in the minibuffer."
(expand-abbrev)))))
(defun abbrev-prefix-mark (&optional arg)
"Mark current point as the beginning of an abbrev.
The abbrev to be expanded starts here rather than at beginning of
word. This way, you can expand an abbrev with a prefix: insert
the prefix, use this command, then insert the abbrev.
"Mark point as the beginning of an abbreviation.
The abbrev to be expanded starts at point rather than at the
beginning of a word. This way, you can expand an abbrev with
a prefix: insert the prefix, use this command, then insert the
abbrev.
This command inserts a hyphen after the prefix, and if the abbrev
is subsequently expanded, this hyphen will be removed.
@ -407,8 +421,8 @@ argument."
(insert "-"))
(defun expand-region-abbrevs (start end &optional noquery)
"For abbrev occurrence in the region, offer to expand it.
The user is asked to type \\`y' or \\`n' for each occurrence.
"For each abbrev occurrence in the region, offer to expand it.
Ask the user to type `y' or `n' for each occurrence.
A prefix argument means don't query; expand all abbrevs."
(interactive "r\nP")
(save-excursion
@ -429,18 +443,19 @@ A prefix argument means don't query; expand all abbrevs."
;;; Abbrev properties.
(defun abbrev-table-get (table prop)
"Get the PROP property of abbrev table TABLE."
"Get the property PROP of abbrev table TABLE."
(let ((sym (obarray-get table "")))
(if sym (get sym prop))))
(defun abbrev-table-put (table prop val)
"Set the PROP property of abbrev table TABLE to VAL."
"Set the property PROP of abbrev table TABLE to VAL."
(let ((sym (obarray-put table "")))
(set sym nil) ; Make sure it won't be confused for an abbrev.
(put sym prop val)))
(defalias 'abbrev-get 'get
"Get the property PROP of abbrev ABBREV
See `define-abbrev' for the effect of some special properties.
\(fn ABBREV PROP)")
@ -500,7 +515,8 @@ for any particular abbrev defined in both.")
(defvar abbrev-minor-mode-table-alist nil
"Alist of abbrev tables to use for minor modes.
Each element looks like (VARIABLE . ABBREV-TABLE);
ABBREV-TABLE is active whenever VARIABLE's value is non-nil.
ABBREV-TABLE is active whenever VARIABLE's value is non-nil;
VARIABLE is supposed to be a minor-mode variable.
ABBREV-TABLE can also be a list of abbrev tables.")
(defvar fundamental-mode-abbrev-table
@ -511,11 +527,11 @@ ABBREV-TABLE can also be a list of abbrev tables.")
"The abbrev table of mode-specific abbrevs for Fundamental Mode.")
(defvar abbrevs-changed nil
"Set non-nil by defining or altering any word abbrevs.
"Non-nil if any word abbrevs were defined or altered.
This causes `save-some-buffers' to offer to save the abbrevs.")
(defcustom abbrev-all-caps nil
"Non-nil means expand multi-word abbrevs all caps if abbrev was so."
"Non-nil means expand multi-word abbrevs in all caps if the abbrev was so."
:type 'boolean
:group 'abbrev-mode)
@ -532,17 +548,17 @@ Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.")
"The abbrev-symbol of the last abbrev expanded. See `abbrev-symbol'.")
(defvar last-abbrev-text nil
"The exact text of the last abbrev expanded.
"The exact text of the last abbrev that was expanded.
It is nil if the abbrev has already been unexpanded.")
(defvar last-abbrev-location 0
"The location of the start of the last abbrev expanded.")
"The location of the start of the last abbrev that was expanded.")
;; (defvar-local local-abbrev-table fundamental-mode-abbrev-table
;; "Local (mode-specific) abbrev table of current buffer.")
(defun clear-abbrev-table (table)
"Undefine all abbrevs in abbrev table TABLE, leaving it empty."
"Undefine all abbrevs in abbrev table TABLE, leaving TABLE empty."
(setq abbrevs-changed t)
(let* ((sym (obarray-get table "")))
(dotimes (i (length table))
@ -557,9 +573,9 @@ It is nil if the abbrev has already been unexpanded.")
;; For backward compatibility, always return nil.
nil)
(defun define-abbrev (table name expansion &optional hook &rest props)
"Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
NAME must be a string, and should be lower-case.
(defun define-abbrev (table abbrev expansion &optional hook &rest props)
"Define ABBREV in TABLE, to expand into EXPANSION and optionally call HOOK.
ABBREV must be a string, and should be lower-case.
EXPANSION should usually be a string.
To undefine an abbrev, define it with EXPANSION = nil.
If HOOK is non-nil, it should be a function of no arguments;
@ -583,8 +599,8 @@ PROPS is a property list. The following properties are special:
overwrite a non-system abbreviation of the same name.
- `:case-fixed': non-nil means that abbreviations are looked up without
case-folding, and the expansion is not capitalized/upcased.
- `:enable-function': a function of no argument which returns non-nil if the
abbrev should be used for a particular call of `expand-abbrev'.
- `:enable-function': a function of no arguments which returns non-nil
if the abbrev should be used for a particular call of `expand-abbrev'.
An obsolete but still supported calling form is:
@ -599,7 +615,7 @@ An obsolete but still supported calling form is:
(setq props (plist-put props :abbrev-table-modiff
(abbrev-table-get table :abbrev-table-modiff)))
(let ((system-flag (plist-get props :system))
(sym (obarray-put table name)))
(sym (obarray-put table abbrev)))
;; Don't override a prior user-defined abbrev with a system abbrev,
;; unless system-flag is `force'.
(unless (and (not (memq system-flag '(nil force)))
@ -619,7 +635,7 @@ An obsolete but still supported calling form is:
(if (eq 'force system-flag) (plist-put props :system t) props))
(abbrev-table-put table :abbrev-table-modiff
(1+ (abbrev-table-get table :abbrev-table-modiff))))
name))
abbrev))
(defun abbrev--check-chars (abbrev global)
"Check if the characters in ABBREV have word syntax in either the
@ -639,7 +655,7 @@ current (if global is nil) or standard syntax table."
(if global "in the standard syntax" "in this mode"))))))
(defun define-global-abbrev (abbrev expansion)
"Define ABBREV as a global abbreviation for EXPANSION.
"Define ABBREV as a global abbreviation that expands into EXPANSION.
The characters in ABBREV must all be word constituents in the standard
syntax table."
(interactive "sDefine global abbrev: \nsExpansion for %s: ")
@ -647,7 +663,7 @@ syntax table."
(define-abbrev global-abbrev-table (downcase abbrev) expansion))
(defun define-mode-abbrev (abbrev expansion)
"Define ABBREV as a mode-specific abbreviation for EXPANSION.
"Define ABBREV as a mode-specific abbreviation that expands into EXPANSION.
The characters in ABBREV must all be word-constituents in the current mode."
(interactive "sDefine mode abbrev: \nsExpansion for %s: ")
(unless local-abbrev-table
@ -656,8 +672,8 @@ The characters in ABBREV must all be word-constituents in the current mode."
(define-abbrev local-abbrev-table (downcase abbrev) expansion))
(defun abbrev--active-tables (&optional tables)
"Return the list of abbrev tables currently active.
TABLES if non-nil overrides the usual rules. It can hold
"Return the list of abbrev tables that are currently active.
TABLES, if non-nil, overrides the usual rules. It can hold
either a single abbrev table or a list of abbrev tables."
;; We could just remove the `tables' arg and let callers use
;; (or table (abbrev--active-tables)) but then they'd have to be careful
@ -683,7 +699,7 @@ either a single abbrev table or a list of abbrev tables."
"Return the symbol representing abbrev named ABBREV in TABLE.
This symbol's name is ABBREV, but it is not the canonical symbol of that name;
it is interned in the abbrev-table TABLE rather than the normal obarray.
The value is nil if that abbrev is not defined."
The value is nil if such an abbrev is not defined."
(let* ((case-fold (not (abbrev-table-get table :case-fixed)))
;; In case the table doesn't set :case-fixed but some of the
;; abbrevs do, we have to be careful.
@ -700,11 +716,11 @@ The value is nil if that abbrev is not defined."
sym)))
(defun abbrev-symbol (abbrev &optional table)
"Return the symbol representing abbrev named ABBREV.
"Return the symbol representing the abbrev named ABBREV in TABLE.
This symbol's name is ABBREV, but it is not the canonical symbol of that name;
it is interned in an abbrev-table rather than the normal obarray.
The value is nil if that abbrev is not defined.
Optional second arg TABLE is abbrev table to look it up in.
The value is nil if such an abbrev is not defined.
Optional second arg TABLE is the abbrev table to look it up in.
The default is to try buffer's mode-specific abbrev table, then global table."
(let ((tables (abbrev--active-tables table))
sym)
@ -717,7 +733,7 @@ The default is to try buffer's mode-specific abbrev table, then global table."
(defun abbrev-expansion (abbrev &optional table)
"Return the string that ABBREV expands into in the current buffer.
Optionally specify an abbrev table as second arg;
Optionally specify an abbrev TABLE as second arg;
then ABBREV is looked up in that table only."
(symbol-value (abbrev-symbol abbrev table)))
@ -781,9 +797,9 @@ then ABBREV is looked up in that table only."
(defun abbrev-insert (abbrev &optional name wordstart wordend)
"Insert abbrev ABBREV at point.
If non-nil, NAME is the name by which this abbrev was found.
If non-nil, WORDSTART is the place where to insert the abbrev.
If WORDEND is non-nil, the abbrev replaces the previous text between
WORDSTART and WORDEND.
If non-nil, WORDSTART is the buffer position where to insert the abbrev.
If WORDEND is non-nil, it is a buffer position; the abbrev replaces the
previous text between WORDSTART and WORDEND.
Return ABBREV if the expansion should be considered as having taken place.
The return value can be influenced by a `no-self-insert' property;
see `define-abbrev' for details."
@ -848,7 +864,8 @@ see `define-abbrev' for details."
(defvar abbrev-expand-function #'abbrev--default-expand
"Function that `expand-abbrev' uses to perform abbrev expansion.
Takes no argument and should return the abbrev symbol if expansion took place.")
Takes no arguments, and should return the abbrev symbol if expansion
took place.")
(defcustom abbrev-suggest nil
"Non-nil means suggest using abbrevs to save typing.
@ -907,15 +924,17 @@ Expansion is a string of one or more words."
(defun abbrev--suggest-above-threshold (expansion)
"Return non-nil if the abbrev in EXPANSION provides significant savings.
A significant saving, here, is the difference in length between
the abbrev and the abbrev expansion. EXPANSION is a cons cell
where the car is the expansion and the cdr is the abbrev."
A significant saving, here, means the difference in length between
the abbrev and its expansion is not below the threshold specified
by the value of `abbrev-suggest-hint-threshold'.
EXPANSION is a cons cell where the car is the expansion and the cdr is
the abbrev."
(>= (- (length (car expansion))
(length (cdr expansion)))
abbrev-suggest-hint-threshold))
(defvar abbrev--suggest-saved-recommendations nil
"Keeps a list of expansions that have abbrevs defined.
"Keeps the list of expansions that have abbrevs defined.
The user can show this list by calling
`abbrev-suggest-show-report'.")
@ -931,7 +950,7 @@ EXPANSION is a cons cell where the `car' is the expansion and the
(push expansion abbrev--suggest-saved-recommendations))
(defun abbrev--suggest-shortest-abbrev (new current)
"Return the shortest abbrev of NEW and CURRENT.
"Return the shortest of the two abbrevs given by NEW and CURRENT.
NEW and CURRENT are cons cells where the `car' is the expansion
and the `cdr' is the abbrev."
(if (not current)
@ -960,8 +979,8 @@ informed about the existing abbrev."
(defun abbrev--suggest-get-totals ()
"Return a list of all expansions and how many times they were used.
Each expansion is a cons cell where the `car' is the expansion
and the `cdr' is the number of times the expansion has been
Each expansion in the returned list is a cons cell where the `car' is the
expansion text and the `cdr' is the number of times the expansion has been
typed."
(let (total cell)
(dolist (expansion abbrev--suggest-saved-recommendations)
@ -1089,11 +1108,11 @@ Presumes that `standard-output' points to `current-buffer'."
(defun insert-abbrev-table-description (name &optional readable)
"Insert before point a full description of abbrev table named NAME.
NAME is a symbol whose value is an abbrev table.
If optional 2nd arg READABLE is non-nil, a human-readable description
is inserted.
If optional 2nd arg READABLE is non-nil, insert a human-readable
description.
If READABLE is nil, an expression is inserted. The expression is
a call to `define-abbrev-table' that when evaluated will define
If READABLE is nil, insert an expression. The expression is
a call to `define-abbrev-table' that, when evaluated, will define
the abbrev table NAME exactly as it is currently defined.
Abbrevs marked as \"system abbrevs\" are ignored."
(let ((symbols (abbrev--table-symbols name readable)))
@ -1140,10 +1159,10 @@ Properties with special meaning:
case-folding, and the expansion is not capitalized/upcased.
- `:regexp' is a regular expression that specifies how to extract the
name of the abbrev before point. The submatch 1 is treated
as the potential name of an abbrev. If :regexp is nil, the default
as the potential name of an abbrev. If `:regexp' is nil, the default
behavior uses `backward-word' and `forward-word' to extract the name
of the abbrev, which can therefore only be a single word.
- `:enable-function' can be set to a function of no argument which returns
of the abbrev, which can therefore by default only be a single word.
- `:enable-function' can be set to a function of no arguments which returns
non-nil if and only if the abbrevs in this table should be used for this
instance of `expand-abbrev'."
(declare (doc-string 3) (indent defun))
@ -1172,7 +1191,7 @@ Properties with special meaning:
(defun abbrev-table-menu (table &optional prompt sortfun)
"Return a menu that shows all abbrevs in TABLE.
Selecting an entry runs `abbrev-insert'.
Selecting an entry runs `abbrev-insert' for that entry's abbrev.
PROMPT is the prompt to use for the keymap.
SORTFUN is passed to `sort' to change the default ordering."
(unless sortfun (setq sortfun 'string-lessp))
@ -1197,6 +1216,28 @@ This mode is for editing abbrevs in a buffer prepared by `edit-abbrevs',
which see."
:interactive nil)
(defun abbrev--possibly-save (query &optional arg)
;; Query mode.
(if (eq query 'query)
(and save-abbrevs abbrevs-changed)
;; Maybe save abbrevs, and record whether we either saved them or
;; asked to.
(and save-abbrevs
abbrevs-changed
(progn
(if (or arg
(eq save-abbrevs 'silently)
(y-or-n-p (format "Save abbrevs in %s? " abbrev-file-name)))
(progn
(write-abbrev-file nil)
nil)
;; Don't keep bothering user if they say no.
(setq abbrevs-changed nil)
;; Inhibit message in `save-some-buffers'.
t)))))
(add-hook 'save-some-buffers-functions #'abbrev--possibly-save)
(provide 'abbrev)
;;; abbrev.el ends here

View file

@ -234,7 +234,7 @@ This vector holds the faces used for SGR control sequence parameters 0
to 7.
This variable is obsolete. To customize the display of faces used by
ansi-color, change 'ansi-color-FACE', e.g. `ansi-color-bold'. To
ansi-color, change `ansi-color-FACE', e.g. `ansi-color-bold'. To
customize the actual faces used (e.g. to temporarily display SGR
control sequences differently), use `ansi-color-basic-faces-vector'."
:type '(vector face face face face face face face face)
@ -249,7 +249,7 @@ This vector holds the colors used for SGR control sequence parameters
30 to 37 (foreground colors) and 40 to 47 (background colors).
This variable is obsolete. To customize the display of colors used by
ansi-color, change 'ansi-color-COLOR', e.g. `ansi-color-red'. To
ansi-color, change `ansi-color-COLOR', e.g. `ansi-color-red'. To
customize the actual faces used (e.g. to temporarily display SGR
control sequences differently), use `ansi-color-normal-colors-vector'."
:type '(vector (choice color (cons color color))

View file

@ -518,7 +518,7 @@ variables, not just user options."
(if (or current-prefix-arg apropos-do-all)
"variable" "user option"))
current-prefix-arg))
(apropos-command pattern nil
(apropos-command pattern (or do-all apropos-do-all)
(if (or do-all apropos-do-all)
(lambda (symbol)
(and (boundp symbol)
@ -874,7 +874,7 @@ Optional arg BUFFER (default: current buffer) is the buffer to check."
apropos-all-words apropos-accumulator))
(setq var (apropos-value-internal #'local-variable-if-set-p symb
#'symbol-value)))
(when (and (fboundp 'apropos-false-hit-str) (apropos-false-hit-str var))
(when (apropos-false-hit-str var)
(setq var nil))
(when var
(setq apropos-accumulator (cons (list symb (apropos-score-str var) nil var)
@ -1055,7 +1055,13 @@ non-nil."
(setq sepa (goto-char sepb)))))
(defun apropos-documentation-check-elc-file (file)
(if (member file apropos-files-scanned)
;; .elc files have the location of the file specified as #$, but for
;; built-in files, that's a relative name (while for the rest, it's
;; absolute). So expand the name in the former case.
(unless (file-name-absolute-p file)
(setq file (expand-file-name file lisp-directory)))
(if (or (member file apropos-files-scanned)
(not (file-exists-p file)))
nil
(let (symbol doc beg end this-is-a-variable)
(setq apropos-files-scanned (cons file apropos-files-scanned))
@ -1247,6 +1253,19 @@ as a heading."
'apropos-user-option
'apropos-variable)
(not nosubst))
;; Insert an excerpt of variable values.
(when (boundp symbol)
(insert " Value: ")
(let* ((print-escape-newlines t)
(value (prin1-to-string (symbol-value symbol)))
(truncated (truncate-string-to-width
value (- (window-width) 20) nil nil t)))
(insert truncated)
(unless (equal value truncated)
(buttonize-region (1- (point)) (point)
(lambda (_)
(message "Value: %s" value))))
(insert "\n")))
(apropos-print-doc 7 'apropos-group t)
(apropos-print-doc 6 'apropos-face t)
(apropos-print-doc 5 'apropos-widget t)
@ -1262,12 +1281,13 @@ as a heading."
(let ((doc (nth i apropos-item)))
(when (stringp doc)
(if apropos-compact-layout
(insert (propertize "\t" 'display '(space :align-to 32)) " ")
(insert (propertize "\t" 'display '(space :align-to 32)))
(insert " "))
(if apropos-multi-type
(let ((button-face (button-type-get type 'face)))
(unless (consp button-face)
(setq button-face (list button-face)))
(insert " ")
(insert-text-button
(if apropos-compact-layout
(format "<%s>" (button-type-get type 'apropos-short-label))

View file

@ -767,29 +767,27 @@ Return COLUMN."
;;; Array mode.
(defvar array-mode-map
(let ((map (make-keymap)))
(define-key map "\M-ad" #'array-display-local-variables)
(define-key map "\M-am" #'array-make-template)
(define-key map "\M-ae" #'array-expand-rows)
(define-key map "\M-ar" #'array-reconfigure-rows)
(define-key map "\M-a=" #'array-what-position)
(define-key map "\M-ag" #'array-goto-cell)
(define-key map "\M-af" #'array-fill-rectangle)
(define-key map "\C-n" #'array-next-row)
(define-key map "\C-p" #'array-previous-row)
(define-key map "\C-f" #'array-forward-column)
(define-key map "\C-b" #'array-backward-column)
(define-key map "\M-n" #'array-copy-down)
(define-key map "\M-p" #'array-copy-up)
(define-key map "\M-f" #'array-copy-forward)
(define-key map "\M-b" #'array-copy-backward)
(define-key map "\M-\C-n" #'array-copy-row-down)
(define-key map "\M-\C-p" #'array-copy-row-up)
(define-key map "\M-\C-f" #'array-copy-column-forward)
(define-key map "\M-\C-b" #'array-copy-column-backward)
map)
"Keymap used in array mode.")
(defvar-keymap array-mode-map
:doc "Keymap used in array mode."
"M-a d" #'array-display-local-variables
"M-a m" #'array-make-template
"M-a e" #'array-expand-rows
"M-a r" #'array-reconfigure-rows
"M-a =" #'array-what-position
"M-a g" #'array-goto-cell
"M-a f" #'array-fill-rectangle
"C-n" #'array-next-row
"C-p" #'array-previous-row
"C-f" #'array-forward-column
"C-b" #'array-backward-column
"M-n" #'array-copy-down
"M-p" #'array-copy-up
"M-f" #'array-copy-forward
"M-b" #'array-copy-backward
"C-M-n" #'array-copy-row-down
"C-M-p" #'array-copy-row-up
"C-M-f" #'array-copy-column-forward
"C-M-b" #'array-copy-column-backward)
(put 'array-mode 'mode-class 'special)

View file

@ -89,7 +89,7 @@ If this contains a %s, that will be replaced by the matching rule."
:type 'string
:version "28.1")
(declare-function sgml-tag "sgml-mode" (&optional str arg))
(declare-function sgml-tag "textmodes/sgml-mode" (&optional str arg))
(defcustom auto-insert-alist
`((("\\.\\([Hh]\\|hh\\|hpp\\|hxx\\|h\\+\\+\\)\\'" . "C / C++ header")

View file

@ -293,6 +293,8 @@ accumulated, and tries to keep it close to zero."
(mouse-avoidance-set-mouse-position (cons (+ (car (cdr cur)) deltax)
(+ (cdr (cdr cur)) deltay))))))
(defvar x-pointer-invisible) ; silence byte-compiler
(defun mouse-avoidance-random-shape ()
"Return a random cursor shape.
This assumes that any variable whose name begins with x-pointer- and
@ -300,12 +302,14 @@ has an integer value is a valid cursor shape. You might want to
redefine this function to suit your own tastes."
(if (null mouse-avoidance-pointer-shapes)
(progn
(setq mouse-avoidance-pointer-shapes
(mapcar (lambda (x) (symbol-value (intern x)))
(all-completions "x-pointer-" obarray
(dolist (i (all-completions "x-pointer-" obarray
(lambda (x)
(and (boundp x)
(integerp (symbol-value x)))))))))
(integerp (symbol-value x))))))
(ignore-errors
(let ((value (symbol-value (intern i))))
(when (< value x-pointer-invisible)
(push value mouse-avoidance-pointer-shapes)))))))
(seq-random-elt mouse-avoidance-pointer-shapes))
(defun mouse-avoidance-ignore-p ()
@ -317,7 +321,8 @@ redefine this function to suit your own tastes."
(not (eq (car mp) (selected-frame)))
;; Don't interfere with ongoing `mouse-drag-and-drop-region'
;; (Bug#36269).
(eq track-mouse 'dropping)
(or (eq track-mouse 'dropping)
(eq track-mouse 'drag-source))
;; Don't do anything if last event was a mouse event.
;; FIXME: this code fails in the case where the mouse was moved
;; since the last key-press but without generating any event.

View file

@ -232,6 +232,40 @@ The text being displayed in the echo area is controlled by the variables
(funcall battery-status-function))
"Battery status not available")))
(defcustom battery-update-functions nil
"Functions run by `display-battery-mode' after updating the status.
These functions will be called with one parameter, an alist that
contains data about the current battery status. The keys in the
alist are single characters and the values are strings.
Different battery backends deliver different information, so some
of the following information may or may not be available:
v: driver-version
V: bios-version
I: bios-interface
L: line-status
B: battery-status
b: battery-status-symbol
p: load-percentage
s: seconds
m: minutes
h: hours
t: remaining-time
For instance, to play an alarm when the battery power dips below
10%, you could use a function like the following:
(defvar my-prev-battery nil)
(defun my-battery-alarm (data)
(when (and my-prev-battery
(equal (alist-get ?L data) \"off-line\")
(< (string-to-number (alist-get ?p data)) 10)
(>= (string-to-number (alist-get ?p my-prev-battery)) 10))
(play-sound-file \"~/alarm.wav\" 5))
(setq my-prev-battery data))"
:version "29.1"
:type '(repeat function))
;;;###autoload
(define-minor-mode display-battery-mode
"Toggle battery status display in mode line (Display Battery mode).
@ -239,7 +273,11 @@ The text being displayed in the echo area is controlled by the variables
The text displayed in the mode line is controlled by
`battery-mode-line-format' and `battery-status-function'.
The mode line is be updated every `battery-update-interval'
seconds."
seconds.
The function which updates the mode-line display will call the
functions in `battery-update-functions', which can be used to
trigger actions based on battery-related events."
:global t
(setq battery-mode-line-string "")
(or global-mode-string (setq global-mode-string '("")))
@ -279,7 +317,8 @@ seconds."
((< percentage battery-load-low)
(add-face-text-property 0 len 'battery-load-low t res)))
(put-text-property 0 len 'help-echo "Battery status information" res))
(setq battery-mode-line-string (or res "")))
(setq battery-mode-line-string (or res ""))
(run-hook-with-args 'battery-update-functions data))
(force-mode-line-update t))

View file

@ -990,7 +990,7 @@ if `inhibit-field-text-motion' is non-nil."
(define-key esc-map "\\" 'delete-horizontal-space)
(define-key esc-map "m" 'back-to-indentation)
(define-key ctl-x-map "\C-o" 'delete-blank-lines)
(define-key esc-map " " 'just-one-space)
(define-key esc-map " " 'cycle-spacing)
(define-key esc-map "z" 'zap-to-char)
(define-key esc-map "=" 'count-words-region)
(define-key ctl-x-map "=" 'what-cursor-position)

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