Merge remote-tracking branch 'origin/master' into feature/pgtk

This commit is contained in:
Po Lu 2021-11-30 08:16:50 +08:00
commit 8f5d2a3181
350 changed files with 24824 additions and 3718 deletions

2
.gitignore vendored
View file

@ -182,6 +182,7 @@ ID
# Executables.
*.exe
a.out
lib-src/be-resources
lib-src/blessmail
lib-src/ctags
lib-src/ebrowse
@ -203,6 +204,7 @@ nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist
src/bootstrap-emacs
src/emacs
src/emacs-[0-9]*
src/Emacs
src/temacs
src/dmpstruct.h
src/*.pdmp

View file

@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# GNU Emacs support for the GitLab protocol for CI
# GNU Emacs support for the GitLab protocol for CI.
# The presence of this file does not imply any FSF/GNU endorsement of
# any particular service that uses that protocol. Also, it is intended for

View file

@ -342,7 +342,9 @@ Documentation fixes (in doc strings, in manuals, in NEWS, and in
comments) should always go to the release branch, if the documentation
to be fixed exists and is relevant to the release-branch codebase.
Doc fixes are always considered "safe" -- even when a release branch
is in feature freeze, it can still receive doc fixes.
is in feature freeze, it can still receive doc fixes. However, this
rule is limited to fixing real problems in the documentation; cleanups
and stylistic changes are excluded.
When you know that the change will be difficult to merge to the
master (e.g., because the code on master has changed a lot), you can

View file

@ -104,8 +104,13 @@ configure:
Makefile: configure
@echo >&2 'There seems to be no Makefile in this directory.'
ifeq ($(configure),default)
@echo >&2 'Running ./configure ...'
./configure
else
@echo >&2 'Running ./configure '$(configure)'...'
./configure $(configure)
endif
@echo >&2 'Makefile built.'
# 'make bootstrap' in a fresh checkout needn't run 'configure' twice.

View file

@ -8,9 +8,15 @@ directory on your local machine:
To build the repository code, simply run 'make' in the 'emacs'
directory. This should work if your files are freshly checked out
from the repository, and if you have the proper tools installed. If
it doesn't work, or if you have special build requirements, the
following information may be helpful.
from the repository, and if you have the proper tools installed; the
default configuration options will be used. Other configuration
options can be specified by setting a 'configure' variable, for
example:
$ make configure="--prefix=/opt/emacs CFLAGS='-O0 -g3'"
If the above doesn't work, or if you have special build requirements,
the following information may be helpful.
Building Emacs from the source-code repository requires some tools
that are not needed when building from a release. You will need:
@ -58,7 +64,16 @@ To update loaddefs.el (and similar files), do:
If either of the above partial procedures fails, try 'make bootstrap'.
If CPU time is not an issue, 'make bootstrap' is a more thorough way
to rebuild, avoiding spurious problems.
to rebuild, avoiding spurious problems. 'make bootstrap' rebuilds
Emacs with the same configuration options as the previous build; it
can also be used to rebuild Emacs with other configuration options by
setting a 'configure' variable, for example:
$ make bootstrap configure="CFLAGS='-O0 -g3'"
To rebuild Emacs with the default configuration options, you can use:
$ make bootstrap configure=default
Occasionally, there are changes that 'make bootstrap' won't be able to
handle. The most thorough cleaning can be achieved by 'git clean -fdx'

View file

@ -102,6 +102,8 @@ HAVE_NATIVE_COMP = @HAVE_NATIVE_COMP@
USE_STARTUP_NOTIFICATION = @USE_STARTUP_NOTIFICATION@
HAVE_BE_APP = @HAVE_BE_APP@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / macOS.
@ -528,7 +530,13 @@ install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
$(MAKE) -C lib-src install
ifeq (${ns_self_contained},no)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifeq (${HAVE_BE_APP},yes)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/Emacs "$(DESTDIR)${prefix}/apps/Emacs"
endif
ifeq (${DUMPING},pdumper)
ifeq (${HAVE_BE_APP},yes)
${INSTALL_DATA} src/Emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/Emacs.pdmp
endif
${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs-${EMACS_PDMP}
endif
-chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
@ -1144,14 +1152,23 @@ check-info: info
.PHONY: bootstrap
# Bootstrapping does the following:
# Without a 'configure' variable, bootstrapping does the following:
# * Remove files to start from a bootstrap-clean slate.
# * Run autogen.sh.
# * Rebuild Makefile, to update the build procedure itself.
# * Do the actual build.
bootstrap: bootstrap-clean
# With a 'configure' variable, bootstrapping does the following:
# * Remove files to start from an extraclean slate.
# * Do the actual build, during which the 'configure' variable is
# used (see the Makefile goal in GNUmakefile).
bootstrap:
ifndef configure
$(MAKE) bootstrap-clean
cd $(srcdir) && ./autogen.sh autoconf
$(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
else
$(MAKE) extraclean
endif
$(MAKE) all
.PHONY: ChangeLog change-history change-history-commit change-history-nocommit

View file

@ -138,6 +138,9 @@ Andrea Corallo
lisp/emacs-lisp/comp-cstr.el
test/src/comp-*.el
Stefan Kangas
admin/automerge
==============================================================================
2. Areas that someone is willing to maintain, although he would not
necessarily mind if someone else was the official maintainer.
@ -228,6 +231,7 @@ Michael Albinus
lisp/net/ange-ftp.el
lisp/notifications.el
lisp/shadowfile.el
test/infra/*
test/lisp/autorevert-tests.el
test/lisp/files-tests.el (file-name-non-special)
test/lisp/shadowfile-tests.el

View file

@ -323,7 +323,8 @@ Changes to files matching one of the regexps in this list are not listed.")
"NEWS.unicode" "COPYING.DJ" "Makefile.old" "Makefile.am"
"NEWS.1" "OOOOONEWS...OONEWS" "OOOONEWS" "etc/NEWS"
"NEWS.1-17" "NEWS.18" "NEWS.19" "NEWS.20" "NEWS.21" "NEWS.22"
"MAINTAINERS" "MH-E-NEWS"
"NEWS.23" "NEWS.24" "NEWS.25" "NEWS.26" "NEWS.27" "NEWS.28"
"MAINTAINERS" "ERC-NEWS" "MH-E-NEWS" "NXML-NEWS"
"install.sh" "install-sh" "missing" "mkinstalldirs"
"termcap.dat" "termcap.src" "termcap.ucb" "termcap"
"ChangeLog.nextstep" "Emacs.clr" "spec.txt"
@ -359,6 +360,8 @@ Changes to files matching one of the regexps in this list are not listed.")
"autogen/missing" "autogen"
"autogen/copy_autogen" ; not generated, but trivial and now removed
"dir_top"
;; Imported into Emacs but externally maintained.
"publicsuffix.txt" "SKK-JISYO.L"
;; Only existed briefly, then renamed:
"images/icons/allout-widgets-dark-bg"
"images/icons/allout-widgets-light-bg"

View file

@ -4,7 +4,7 @@
## Copyright (C) 2018-2021 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## Maintainer: emacs-devel@gnu.org
## Maintainer: Stefan Kangas <stefan@marxist.se>
## This file is part of GNU Emacs.

View file

@ -68,8 +68,7 @@ bump Emacs version\\|Auto-commit"))
(defvar gitmerge-minimum-missing 10
"Minimum number of missing commits to consider merging in batch mode.")
(defvar gitmerge-status-file (expand-file-name "gitmerge-status"
user-emacs-directory)
(defvar gitmerge-status-file (locate-user-emacs-file "gitmerge-status")
"File where missing commits will be saved between sessions.")
(defvar gitmerge-ignore-branches-regexp

View file

@ -28,15 +28,21 @@ The messages contain a URL to the log file of the failed job, like
* Emacs jobset
The Emacs jobset is defined in the Emacs source tree, file
'.gitlab-ci.yml'. It could be adapted for every Emacs branch, see
'.gitlab-ci.yml'. All related files are located in directory
'test/infra'. They could be adapted for every Emacs branch, see
<https://emba.gnu.org/help/ci/yaml/README.md>.
A jobset on Gitlab is called pipeline. Emacs pipelines run through
the stages 'build-images', 'platform-images' and 'native-comp-images'
(create an Emacs instance by 'make bootstrap' with different
configuration parameters) as well as 'normal', 'slow', 'platforms' and
configuration parameters) as well as 'normal', 'platforms' and
'native-comp' (run respective test jobs based on the produced images).
The jobs for stage 'normal' are contained in the file
'test/infra/test-jobs.yml'. This file is generated by calling 'make
-C test generate-test-jobs' in the Emacs source tree, and the
resulting file shall be pushed to the Emacs git repository afterwards.
Every job runs in a Debian docker container. It uses the local clone
of the Emacs git repository to perform a bootstrap and test of Emacs.
This could happen for several jobs with changed configuration, compile

View file

@ -123,7 +123,7 @@ def ntldd_munge(out):
## Currently no packages seem to require this!
ARCH_PKGS=[]
SRC_REPO="https://sourceforge.net/projects/msys2/files/REPOS/MINGW/Sources"
SRC_REPO="https://repo.msys2.org/mingw/sources"
def immediate_deps(pkgs):
@ -169,7 +169,7 @@ def download_source(tarball):
if not os.path.exists("../emacs-src-cache/{}".format(tarball)):
print("Downloading {}...".format(tarball))
check_output_maybe(
"wget -a ../download.log -O ../emacs-src-cache/{} {}/{}/download"
"wget -a ../download.log -O ../emacs-src-cache/{} {}/{}"
.format(tarball, SRC_REPO, tarball),
shell=True
)

View file

@ -114,7 +114,7 @@ END {
print " (nconc (char-table-range composition-function-table (car elt))"
print " (list (vector (cdr elt)"
print " 0"
print " 'compose-gstring-for-graphic)))))"
print " #'compose-gstring-for-graphic)))))"
print ";; The following two blocks are derived by hand from emoji-sequences.txt"
print ";; FIXME: add support for Emoji_Keycap_Sequence once we learn how to respect FE0F/VS-16"
@ -126,7 +126,7 @@ END {
print " (nconc (char-table-range composition-function-table '(#x1F1E6 . #x1F1FF))"
print " (list (vector \"[\\U0001F1E6-\\U0001F1FF][\\U0001F1E6-\\U0001F1FF]\""
print " 0"
print " 'compose-gstring-for-graphic))))"
print " #'compose-gstring-for-graphic))))"
print ";; UK Flags"
print "(set-char-table-range composition-function-table"
@ -134,7 +134,7 @@ END {
print " (nconc (char-table-range composition-function-table #x1F3F4)"
print " (list (vector \"\\U0001F3F4\\U000E0067\\U000E0062\\\\(?:\\U000E0065\\U000E006E\\U000E0067\\\\|\\U000E0073\\U000E0063\\U000E0074\\\\|\\U000E0077\\U000E006C\\U000E0073\\\\)\\U000E007F\""
print " 0"
print " 'compose-gstring-for-graphic))))"
print " #'compose-gstring-for-graphic))))"
printf "\n(provide 'emoji-zwj)"
}

View file

@ -488,6 +488,7 @@ OPTION_DEFAULT_ON([modules],[don't compile with dynamic modules support])
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_OFF([xinput2],[use version 2 of the X Input Extension for input])
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)])],
@ -511,6 +512,12 @@ otherwise for the first of 'inotify', 'kqueue' or 'gfile' that is usable.])
OPTION_DEFAULT_OFF([xwidgets],
[enable use of xwidgets in Emacs buffers (requires gtk3 or macOS Cocoa)])
OPTION_DEFAULT_OFF([be-app],
[enable use of Haiku's Application Kit as a window system])
OPTION_DEFAULT_OFF([be-cairo],
[enable use of cairo under Haiku's Application Kit])
## Makefile.in needs the cache file name.
AC_SUBST(cache_file)
@ -787,6 +794,10 @@ case "${canonical}" in
LDFLAGS="-N2M $LDFLAGS"
;;
*-haiku )
opsys=haiku
;;
## Intel 386 machines where we don't care about the manufacturer.
i[3456]86-*-* )
case "${canonical}" in
@ -908,7 +919,9 @@ if test "$ac_test_CFLAGS" != set; then
if test $emacs_cv_prog_cc_g3 != yes; then
CFLAGS=$emacs_save_CFLAGS
fi
if test $opsys = mingw32; then
# Haiku also needs -gdwarf-2 because its GDB is too old
# to understand newer formats.
if test $opsys = mingw32 || test $opsys = haiku; then
CFLAGS="$CFLAGS -gdwarf-2"
fi
fi
@ -1575,6 +1588,8 @@ case "$opsys" in
## Motif needs -lgen.
unixware) LIBS_SYSTEM="-lsocket -lnsl -lelf -lgen" ;;
haiku) LIBS_SYSTEM="-lnetwork" ;;
esac
AC_SUBST(LIBS_SYSTEM)
@ -2086,6 +2101,22 @@ if test "${HAVE_NS}" = yes; then
fi
fi
HAVE_BE_APP=no
if test "${opsys}" = "haiku" && test "${with_be_app}" = "yes"; then
dnl Only GCC is supported. Clang might work, but it's
dnl not reliable, so don't check for it here.
AC_PROG_CXX([gcc g++])
CXXFLAGS="$CXXFLAGS $emacs_g3_CFLAGS"
AC_LANG_PUSH([C++])
AC_CHECK_HEADER([app/Application.h], [HAVE_BE_APP=yes],
[AC_MSG_ERROR([The Application Kit headers required for building
with the Application Kit were not found or cannot be compiled. Either fix this, or
re-configure with the option '--without-be-app'.])])
AC_LANG_POP([C++])
fi
AC_SUBST(HAVE_BE_APP)
HAVE_W32=no
W32_OBJ=
W32_LIBS=
@ -2207,6 +2238,39 @@ if test "${HAVE_W32}" = "yes"; then
with_xft=no
fi
HAIKU_OBJ=
HAIKU_CXX_OBJ=
HAIKU_LIBS=
HAIKU_CFLAGS=
if test "$opsys" = "haiku"; then
HAIKU_OBJ="$HAIKU_OBJ haiku.o"
fi
if test "${HAVE_BE_APP}" = "yes"; then
AC_DEFINE([HAVE_HAIKU], 1,
[Define if Emacs will be built with Haiku windowing support])
fi
if test "${HAVE_BE_APP}" = "yes"; then
window_system=haiku
with_xft=no
HAIKU_OBJ="$HAIKU_OBJ haikufns.o haikuterm.o haikumenu.o haikufont.o haikuselect.o haiku_io.o"
HAIKU_CXX_OBJ="haiku_support.o haiku_font_support.o haiku_draw_support.o haiku_select.o"
HAIKU_LIBS="-lbe -lgame -ltranslation -ltracker" # -lgame is needed for set_mouse_position.
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 (haiku)"
HAIKU_OBJ="$HAIKU_OBJ haikuimage.o"
fi
fi
AC_SUBST(HAIKU_LIBS)
AC_SUBST(HAIKU_OBJ)
AC_SUBST(HAIKU_CXX_OBJ)
AC_SUBST(HAIKU_CFLAGS)
## $window_system is now set to the window system we will
## ultimately use.
@ -2251,6 +2315,9 @@ dnl use the toolkit if we have gtk, or X11R5 or newer.
with_gtk3=yes
USE_X_TOOLKIT=none
;;
haiku )
term_header=haikuterm.h
;;
esac
if test "$window_system" = none && test "X$with_x" != "Xno"; then
@ -2582,7 +2649,9 @@ fi
### Use -lrsvg-2 if available, unless '--with-rsvg=no' is specified.
HAVE_RSVG=no
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${window_system}" = "pgtk" || test "${opsys}" = "mingw32"; then
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" \
|| test "${opsys}" = "mingw32" || test "${HAVE_BE_APP}" = "yes" \
|| test "${window_system}" = "pgtk"; then
if test "${with_rsvg}" != "no"; then
RSVG_REQUIRED=2.14.0
RSVG_MODULE="librsvg-2.0 >= $RSVG_REQUIRED"
@ -2606,7 +2675,8 @@ fi
HAVE_WEBP=no
if test "${with_webp}" != "no"; then
if test "${HAVE_X11}" = "yes" || test "${opsys}" = "mingw32" \
|| test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes"; then
|| test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
|| test "${HAVE_BE_APP}" = "yes"; then
WEBP_REQUIRED=0.6.0
WEBP_MODULE="libwebp >= $WEBP_REQUIRED"
@ -2625,7 +2695,8 @@ if test "${with_webp}" != "no"; then
fi
HAVE_IMAGEMAGICK=no
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${window_system}" = "pgtk" || test "${HAVE_W32}" = "yes"; then
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}" = "yes" || \
test "${HAVE_BE_APP}" = "yes" || test "${window_system}" = "pgtk"; then
if test "${with_imagemagick}" != "no"; then
if test -n "$BREW"; then
# Homebrew doesn't link ImageMagick 6 by default, so make sure
@ -3289,6 +3360,9 @@ if test "${with_toolkit_scroll_bars}" != "no"; then
elif test "${HAVE_W32}" = "yes"; then
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
USE_TOOLKIT_SCROLL_BARS=yes
elif test "${HAVE_BE_APP}" = "yes"; then
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
USE_TOOLKIT_SCROLL_BARS=yes
fi
fi
@ -3378,6 +3452,22 @@ if test "${HAVE_X11}" = "yes"; then
fi
fi
fi
if test "${HAVE_BE_APP}" = "yes"; then
if test "${with_be_cairo}" != "no"; then
CAIRO_REQUIRED=1.8.0
CAIRO_MODULE="cairo >= $CAIRO_REQUIRED"
EMACS_CHECK_MODULES(CAIRO, $CAIRO_MODULE)
if test $HAVE_CAIRO = yes; then
AC_DEFINE(USE_BE_CAIRO, 1, [Define to 1 if using cairo on Haiku.])
CFLAGS="$CFLAGS $CAIRO_CFLAGS"
LIBS="$LIBS $CAIRO_LIBS"
AC_SUBST(CAIRO_CFLAGS)
AC_SUBST(CAIRO_LIBS)
else
AC_MSG_WARN([cairo requested but not found.])
fi
fi
fi
### Start of font-backend (under any platform) section.
# (nothing here yet -- this is a placeholder)
@ -3552,6 +3642,58 @@ if test "${HAVE_X11}" = "yes" && test "${HAVE_FREETYPE}" = "yes" \
fi
fi
### Start of font-backend (under Haiku) selectionn.
if test "${HAVE_BE_APP}" = "yes"; then
if test $HAVE_CAIRO = "yes"; then
EMACS_CHECK_MODULES([FREETYPE], [freetype2 >= 2.5.0])
test "$HAVE_FREETYPE" = "no" && AC_MSG_ERROR(cairo on Haiku requires libfreetype)
EMACS_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.2.0])
test "$HAVE_FONTCONFIG" = "no" && AC_MSG_ERROR(cairo on Haiku requires libfontconfig)
fi
HAVE_LIBOTF=no
if test "${HAVE_FREETYPE}" = "yes"; then
AC_DEFINE(HAVE_FREETYPE, 1,
[Define to 1 if using the freetype and fontconfig libraries.])
OLD_CFLAGS=$CFLAGS
OLD_LIBS=$LIBS
CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
LIBS="$FREETYPE_LIBS $LIBS"
AC_CHECK_FUNCS(FT_Face_GetCharVariantIndex)
CFLAGS=$OLD_CFLAGS
LIBS=$OLD_LIBS
if test "${with_libotf}" != "no"; then
EMACS_CHECK_MODULES([LIBOTF], [libotf])
if test "$HAVE_LIBOTF" = "yes"; then
AC_DEFINE(HAVE_LIBOTF, 1, [Define to 1 if using libotf.])
AC_CHECK_LIB(otf, OTF_get_variation_glyphs,
HAVE_OTF_GET_VARIATION_GLYPHS=yes,
HAVE_OTF_GET_VARIATION_GLYPHS=no)
if test "${HAVE_OTF_GET_VARIATION_GLYPHS}" = "yes"; then
AC_DEFINE(HAVE_OTF_GET_VARIATION_GLYPHS, 1,
[Define to 1 if libotf has OTF_get_variation_glyphs.])
fi
if ! $PKG_CONFIG --atleast-version=0.9.16 libotf; then
AC_DEFINE(HAVE_OTF_KANNADA_BUG, 1,
[Define to 1 if libotf is affected by https://debbugs.gnu.org/28110.])
fi
fi
fi
dnl FIXME should there be an error if HAVE_FREETYPE != yes?
dnl Does the new font backend require it, or can it work without it?
fi
fi
if test "${HAVE_BE_APP}" = "yes" && test "${HAVE_FREETYPE}" = "yes"; then
if test "${with_harfbuzz}" != "no"; then
EMACS_CHECK_MODULES([HARFBUZZ], [harfbuzz >= $harfbuzz_required_ver])
if test "$HAVE_HARFBUZZ" = "yes"; then
AC_DEFINE(HAVE_HARFBUZZ, 1, [Define to 1 if using HarfBuzz.])
fi
fi
fi
### End of font-backend section.
AC_SUBST(FREETYPE_CFLAGS)
@ -3691,8 +3833,9 @@ AC_SUBST(LIBXPM)
### Use -ljpeg if available, unless '--with-jpeg=no'.
HAVE_JPEG=no
LIBJPEG=
if test "${HAVE_X11}" = "yes" || test "$window_system" = "pgtk" || test "${HAVE_W32}" = "yes" \
|| test "${HAVE_NS}" = "yes"; then
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes" \
|| test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes" \
|| test "$window_system" = "pgtk"; then
if test "${with_jpeg}" != "no"; then
AC_CACHE_CHECK([for jpeglib 6b or later],
[emacs_cv_jpeglib],
@ -4009,8 +4152,9 @@ if test "${with_png}" != no; then
# mingw32 loads the library dynamically.
if test "$opsys" = mingw32; then
AC_CHECK_HEADER([png.h], [HAVE_PNG=yes])
elif test "${HAVE_X11}" = "yes" || test "$window_system" = "pgtk" || test "${HAVE_W32}" = "yes" \
|| test "${HAVE_NS}" = "yes"; then
elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes" \
|| test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes" \
|| test "$window_system" = "pgtk"; then
EMACS_CHECK_MODULES([PNG], [libpng >= 1.0.0])
if test $HAVE_PNG = yes; then
LIBPNG=$PNG_LIBS
@ -4084,8 +4228,9 @@ if test "${opsys}" = "mingw32"; then
if test "${HAVE_TIFF}" = "yes"; then
AC_DEFINE(HAVE_TIFF, 1, [Define to 1 if you have the tiff library (-ltiff).])
fi
elif test "${HAVE_X11}" = "yes" || test "${window_system}" = "pgtk" || test "${HAVE_W32}" = "yes" \
|| test "${HAVE_NS}" = "yes"; then
elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes" \
|| test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes" \
|| test "$window_system" = "pgtk"; then
if test "${with_tiff}" != "no"; then
AC_CHECK_HEADER(tiffio.h,
[tifflibs="-lz -lm"
@ -4113,8 +4258,9 @@ if test "${opsys}" = "mingw32"; then
if test "${HAVE_GIF}" = "yes"; then
AC_DEFINE(HAVE_GIF, 1, [Define to 1 if you have a gif (or ungif) library.])
fi
elif test "${HAVE_X11}" = "yes" -o "${window_system}" = "pgtk" && test "${with_gif}" != "no" \
|| test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes"; then
elif test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
|| test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
|| test "${HAVE_BE_APP}" = "yes" || test "$window_system" = "pgtk"; then
AC_CHECK_HEADER(gif_lib.h,
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
# Earlier versions can crash Emacs, but version 5.0 removes EGifPutExtensionLast.
@ -4307,6 +4453,26 @@ fi
AC_SUBST(XFIXES_CFLAGS)
AC_SUBST(XFIXES_LIBS)
## Use XInput 2.0 if available
HAVE_XINPUT2=no
if test "${HAVE_X11}" = "yes" && test "${with_xinput2}" != "no"; then
EMACS_CHECK_MODULES([XINPUT], [xi])
if test $HAVE_XINPUT = yes; then
# Now check for XInput2.h
AC_CHECK_HEADER(X11/extensions/XInput2.h,
[AC_CHECK_LIB(Xi, XIGrabButton, HAVE_XINPUT2=yes)])
fi
if test $HAVE_XINPUT2 = yes; then
AC_DEFINE(HAVE_XINPUT2, 1, [Define to 1 if the X Input Extension version 2.0 or later is present.])
if test "$USE_GTK_TOOLKIT" = "GTK2"; then
AC_MSG_WARN([You are building Emacs with GTK+ 2 and the X Input Extension version 2.
This might lead to problems if your version of GTK+ is not built with support for XInput 2.])
fi
fi
fi
AC_SUBST(XINPUT_CFLAGS)
AC_SUBST(XINPUT_LIBS)
### Use Xdbe (-lXdbe) if available
HAVE_XDBE=no
if test "${HAVE_X11}" = "yes"; then
@ -4531,6 +4697,13 @@ case $with_unexec,$canonical in
[AC_MSG_ERROR([Non-ELF systems are not supported on this platform.])]);;
esac
if test "$with_unexec" = yes && test "$opsys" = "haiku"; then
dnl A serious attempt was actually made to port unexec to Haiku.
dnl Something in libstdc++ seems to prevent it from working.
AC_MSG_ERROR([Haiku is not supported by the legacy unexec dumper.
Please use the portable dumper instead.])
fi
# Dump loading
AC_CHECK_FUNCS([posix_madvise])
@ -4884,7 +5057,7 @@ CFLAGS="$OLDCFLAGS"
LIBS="$OLDLIBS"])
if test "${emacs_cv_links_glib}" = "yes"; then
AC_DEFINE(HAVE_GLIB, 1, [Define to 1 if GLib is linked in.])
if test "$HAVE_NS" = no;then
if test "$HAVE_NS" = no ; then
XGSELOBJ=xgselect.o
fi
fi
@ -5139,7 +5312,7 @@ dnl It would have Emacs fork off a separate process
dnl to read the input and send it to the true Emacs process
dnl through a pipe.
case $opsys in
darwin | gnu-linux | gnu-kfreebsd )
darwin | gnu-linux | gnu-kfreebsd)
AC_DEFINE(INTERRUPT_INPUT, 1, [Define to read input using SIGIO.])
;;
esac
@ -5235,6 +5408,14 @@ case $opsys in
AC_DEFINE(PTY_OPEN, [fd = open (pty_name, O_RDWR | O_NONBLOCK)])
AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptsname (int), *ptyname; int grantpt_result; sigset_t blocked; sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 0); grantpt_result = grantpt (fd); pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1) fatal("could not grant slave pty"); if (unlockpt(fd) == -1) fatal("could not unlock slave pty"); if (!(ptyname = ptsname(fd))) fatal ("could not enable slave pty"); snprintf (pty_name, PTY_NAME_SIZE, "%s", ptyname); }])
;;
haiku*)
AC_DEFINE(FIRST_PTY_LETTER, ['s'])
AC_DEFINE(PTY_NAME_SPRINTF, [])
dnl on Haiku pty names aren't distinctive, thus the use of posix_openpt
AC_DEFINE(PTY_OPEN, [fd = posix_openpt (O_RDWR | O_NONBLOCK)])
AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptyname; int grantpt_result; sigset_t blocked; sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 0); grantpt_result = grantpt (fd); pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (grantpt_result == -1) fatal("could not grant slave pty"); if (unlockpt(fd) == -1) fatal("could not unlock slave pty"); if (!(ptyname = ptsname(fd))) fatal ("could not enable slave pty"); snprintf (pty_name, PTY_NAME_SIZE, "%s", ptyname); }])
;;
esac
@ -5456,8 +5637,25 @@ case $opsys in
AC_DEFINE(USG, [])
AC_DEFINE(USG5_4, [])
;;
haiku)
AC_DEFINE(HAIKU, [], [Define if the system is Haiku.])
;;
esac
AC_SYS_POSIX_TERMIOS
if test $ac_cv_sys_posix_termios = yes; then
AC_CHECK_SIZEOF([speed_t], [], [#include <termios.h>])
dnl on Haiku, and possibly other platforms, speed_t is defined to
dnl unsigned char, even when speeds greater than 200 baud are
dnl defined.
if test ${ac_cv_sizeof_speed_t} -lt 2; then
AC_DEFINE([HAVE_TINY_SPEED_T], [1],
[Define to 1 if speed_t has some sort of nonsensically tiny size.])
fi
fi
AC_CACHE_CHECK([for usable FIONREAD], [emacs_cv_usable_FIONREAD],
[case $opsys in
aix4-2 | nacl)
@ -5500,6 +5698,22 @@ if test $emacs_cv_usable_FIONREAD = yes; then
AC_DEFINE([USABLE_SIGIO], [1], [Define to 1 if SIGIO is usable.])
fi
fi
if test $emacs_broken_SIGIO = no && test $emacs_cv_usable_SIGIO = no; then
AC_CACHE_CHECK([for usable SIGPOLL], [emacs_cv_usable_SIGPOLL],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <fcntl.h>
#include <signal.h>
]],
[[int foo = SIGPOLL | F_SETFL;]])],
[emacs_cv_usable_SIGPOLL=yes],
[emacs_cv_usable_SIGPOLL=no])],
[emacs_cv_usable_SIGPOLL=yes],
[emacs_cv_usable_SIGPOLL=no])
if test $emacs_cv_usable_SIGPOLL = yes; then
AC_DEFINE([USABLE_SIGPOLL], [1], [Define to 1 if SIGPOLL is usable but SIGIO is not.])
fi
fi
fi
case $opsys in
@ -5616,6 +5830,17 @@ fi
if test "${window_system}" = "pgtk"; then
FONT_OBJ="ftfont.o ftcrfont.o"
fi
if test "${HAVE_BE_APP}" = "yes" ; then
if test "${HAVE_FREETYPE}" = "yes" || \
test "${HAVE_CAIRO}" = "yes"; then
FONT_OBJ="$FONT_OBJ ftfont.o"
fi
if test "${HAVE_CAIRO}" = "yes"; then
FONT_OBJ="$FONT_OBJ ftcrfont.o"
fi
fi
if test "${HAVE_HARFBUZZ}" = "yes" ; then
FONT_OBJ="$FONT_OBJ hbfont.o"
fi
@ -6004,11 +6229,11 @@ Configured for '${canonical}'.
#### Please respect alphabetical ordering when making additions.
optsep=
emacs_config_features=
for opt in ACL CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTINGS \
for opt in ACL BE_APP CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTINGS \
HARFBUZZ IMAGEMAGICK JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 \
M17N_FLT MODULES NATIVE_COMP NOTIFY NS OLDXMENU PDUMPER PGTK PNG RSVG SECCOMP \
SOUND THREADS TIFF TOOLKIT_SCROLL_BARS \
UNEXEC WEBP X11 XAW3D XDBE XFT XIM XPM XWIDGETS X_TOOLKIT \
UNEXEC WEBP X11 XAW3D XDBE XFT XIM XINPUT2 XPM XWIDGETS X_TOOLKIT \
ZLIB; do
case $opt in
@ -6085,6 +6310,7 @@ AS_ECHO([" Does Emacs use -lXaw3d? ${HAVE_XAW3D
Does Emacs support legacy unexec dumping? ${with_unexec}
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}
"])
if test -n "${EMACSDATA}"; then
@ -6161,6 +6387,13 @@ if test -f "$srcdir/$opt_makefile.in"; then
dnl ", [], [opt_makefile='$opt_makefile']" and it should work.
AC_CONFIG_FILES([test/Makefile])
fi
opt_makefile=test/infra/Makefile
if test -f "$srcdir/$opt_makefile.in"; then
SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES $opt_makefile"
dnl Again, it's best not to use a variable. Though you can add
dnl ", [], [opt_makefile='$opt_makefile']" and it should work.
AC_CONFIG_FILES([test/infra/Makefile])
fi
dnl The admin/ directory used to be excluded from tarfiles.

View file

@ -140,6 +140,7 @@ EMACSSOURCES= \
${srcdir}/xresources.texi \
${srcdir}/anti.texi \
${srcdir}/macos.texi \
$(srcdir)/haiku.texi \
${srcdir}/msdos.texi \
${srcdir}/gnu.texi \
${srcdir}/glossary.texi \

View file

@ -1584,7 +1584,7 @@ which overrides the global definitions of some keys.
self-inserting because the global keymap binds it to the command
@code{self-insert-command}. The standard Emacs editing characters
such as @kbd{C-a} also get their standard meanings from the global
keymap. Commands to rebind keys, such as @kbd{M-x global-set-key},
keymap. Commands to rebind keys, such as @kbd{M-x keymap-global-set},
work by storing the new binding in the proper place in the global map
(@pxref{Rebinding}). To view the current key bindings, use the
@kbd{C-h b} command.
@ -1736,8 +1736,8 @@ them, it may be convenient to disable completion on those keys by
putting this in your init file:
@lisp
(define-key minibuffer-local-completion-map " " 'self-insert-command)
(define-key minibuffer-local-completion-map "?" 'self-insert-command)
(keymap-set minibuffer-local-completion-map "SPC" 'self-insert-command)
(keymap-set minibuffer-local-completion-map "?" 'self-insert-command)
@end lisp
@node Rebinding
@ -1756,19 +1756,19 @@ local keymap, which affects all buffers using the same major mode.
Emacs session. @xref{Init Rebinding}, for a description of how to
make key rebindings affect future Emacs sessions.
@findex global-set-key
@findex local-set-key
@findex global-unset-key
@findex local-unset-key
@findex keymap-global-set
@findex keymap-local-set
@findex keymap-global-unset
@findex keymap-local-unset
@table @kbd
@item M-x global-set-key @key{RET} @var{key} @var{cmd} @key{RET}
@item M-x keymap-global-set @key{RET} @var{key} @var{cmd} @key{RET}
Define @var{key} globally to run @var{cmd}.
@item M-x local-set-key @key{RET} @var{key} @var{cmd} @key{RET}
@item M-x keymap-local-set @key{RET} @var{key} @var{cmd} @key{RET}
Define @var{key} locally (in the major mode now in effect) to run
@var{cmd}.
@item M-x global-unset-key @key{RET} @var{key}
@item M-x keymap-global-unset @key{RET} @var{key}
Make @var{key} undefined in the global map.
@item M-x local-unset-key @key{RET} @var{key}
@item M-x keymap-local-unset @key{RET} @var{key}
Make @var{key} undefined locally (in the major mode now in effect).
@end table
@ -1777,11 +1777,11 @@ command (@pxref{Interactive Shell}), replacing the normal global
definition of @kbd{C-z}:
@example
M-x global-set-key @key{RET} C-z shell @key{RET}
M-x keymap-global-set @key{RET} C-z shell @key{RET}
@end example
@noindent
The @code{global-set-key} command reads the command name after the
The @code{keymap-global-set} command reads the command name after the
key. After you press the key, a message like this appears so that you
can confirm that you are binding the key you want:
@ -1802,7 +1802,7 @@ reads another character; if that is @kbd{4}, another prefix character,
it reads one more character, and so on. For example,
@example
M-x global-set-key @key{RET} C-x 4 $ spell-other-window @key{RET}
M-x keymap-global-set @key{RET} C-x 4 $ spell-other-window @key{RET}
@end example
@noindent
@ -1810,8 +1810,8 @@ redefines @kbd{C-x 4 $} to run the (fictitious) command
@code{spell-other-window}.
You can remove the global definition of a key with
@code{global-unset-key}. This makes the key @dfn{undefined}; if you
type it, Emacs will just beep. Similarly, @code{local-unset-key} makes
@code{keymap-global-unset}. This makes the key @dfn{undefined}; if you
type it, Emacs will just beep. Similarly, @code{keymap-local-unset} makes
a key undefined in the current major mode keymap, which makes the global
definition (or lack of one) come back into effect in that major mode.
@ -1844,11 +1844,11 @@ you can specify them in your initialization file by writing Lisp code.
simplest is to use the @code{kbd} function, which converts a textual
representation of a key sequence---similar to how we have written key
sequences in this manual---into a form that can be passed as an
argument to @code{global-set-key}. For example, here's how to bind
argument to @code{keymap-global-set}. For example, here's how to bind
@kbd{C-z} to the @code{shell} command (@pxref{Interactive Shell}):
@example
(global-set-key (kbd "C-z") 'shell)
(keymap-global-set "C-z" 'shell)
@end example
@noindent
@ -1861,69 +1861,24 @@ causes an error; it certainly isn't what you want.
and mouse events:
@example
(global-set-key (kbd "C-c y") 'clipboard-yank)
(global-set-key (kbd "C-M-q") 'query-replace)
(global-set-key (kbd "<f5>") 'flyspell-mode)
(global-set-key (kbd "C-<f5>") 'display-line-numbers-mode)
(global-set-key (kbd "C-<right>") 'forward-sentence)
(global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill)
@end example
Instead of using @code{kbd}, you can use a Lisp string or vector to
specify the key sequence. Using a string is simpler, but only works
for @acronym{ASCII} characters and Meta-modified @acronym{ASCII}
characters. For example, here's how to bind @kbd{C-x M-l} to
@code{make-symbolic-link} (@pxref{Copying and Naming}):
@example
(global-set-key "\C-x\M-l" 'make-symbolic-link)
@end example
To bind a key sequence including @key{TAB}, @key{RET}, @key{ESC}, or
@key{DEL}, the string should contain the Emacs Lisp escape sequence
@samp{\t}, @samp{\r}, @samp{\e}, or @samp{\d} respectively. Here is
an example which binds @kbd{C-x @key{TAB}} to @code{indent-rigidly}
(@pxref{Indentation}):
@example
(global-set-key "\C-x\t" 'indent-rigidly)
@end example
When the key sequence includes function keys or mouse button events,
or non-@acronym{ASCII} characters such as @code{C-=} or @code{H-a},
you can use a vector to specify the key sequence. Each element in the
vector stands for an input event; the elements are separated by spaces
and surrounded by a pair of square brackets. If a vector element is a
character, write it as a Lisp character constant: @samp{?} followed by
the character as it would appear in a string. Function keys are
represented by symbols (@pxref{Function Keys}); simply write the
symbol's name, with no other delimiters or punctuation. Here are some
examples:
@example
(global-set-key [?\C-=] 'make-symbolic-link)
(global-set-key [?\M-\C-=] 'make-symbolic-link)
(global-set-key [?\H-a] 'make-symbolic-link)
(global-set-key [f7] 'make-symbolic-link)
(global-set-key [C-mouse-1] 'make-symbolic-link)
@end example
@noindent
You can use a vector for the simple cases too:
@example
(global-set-key [?\C-z ?\M-l] 'make-symbolic-link)
(keymap-global-set "C-c y" 'clipboard-yank)
(keymap-global-set "C-M-q" 'query-replace)
(keymap-global-set "<f5>" 'flyspell-mode)
(keymap-global-set "C-<f5>" 'display-line-numbers-mode)
(keymap-global-set "C-<right>" 'forward-sentence)
(keymap-global-set "<mouse-2>" 'mouse-save-then-kill)
@end example
Language and coding systems may cause problems with key bindings for
non-@acronym{ASCII} characters. @xref{Init Non-ASCII}.
@findex define-key
@findex keymap-set
@findex keymap-unset
As described in @ref{Local Keymaps}, major modes and minor modes can
define local keymaps. These keymaps are constructed when the mode is
loaded for the first time in a session. The function @code{define-key}
can be used to make changes in a specific keymap. This function can
also unset keys, when passed @code{nil} as the binding.
loaded for the first time in a session. The function @code{keymap-set}
can be used to make changes in a specific keymap. To remove a key
binding, use @code{keymap-unset}.
Since a mode's keymaps are not constructed until it has been loaded,
you must delay running code which modifies them, e.g., by putting it
@ -1935,11 +1890,11 @@ the one for @kbd{C-c C-x x} in Texinfo mode:
@example
(add-hook 'texinfo-mode-hook
(lambda ()
(define-key texinfo-mode-map "\C-cp"
(keymap-set texinfo-mode-map "C-c p"
'backward-paragraph)
(define-key texinfo-mode-map "\C-cn"
(keymap-set texinfo-mode-map "C-c n"
'forward-paragraph)))
(define-key texinfo-mode-map "\C-c\C-xx" nil)
(keymap-set texinfo-mode-map "C-c C-x x" nil)
@end example
@node Modifier Keys
@ -1961,7 +1916,7 @@ between those keystrokes. However, you can bind shifted @key{Control}
alphabetical keystrokes in GUI frames:
@lisp
(global-set-key (kbd "C-S-n") #'previous-line)
(keymap-global-set "C-S-n" #'previous-line)
@end lisp
For all other modifiers, you can make the modified alphabetical
@ -2115,7 +2070,7 @@ button, @code{mouse-2} for the next, and so on. Here is how you can
redefine the second mouse button to split the current window:
@example
(global-set-key [mouse-2] 'split-window-below)
(keymap-global-set "<mouse-2>" 'split-window-below)
@end example
The symbols for drag events are similar, but have the prefix
@ -2198,7 +2153,7 @@ Thus, here is how to define the command for clicking the first button in
a mode line to run @code{scroll-up-command}:
@example
(global-set-key [mode-line mouse-1] 'scroll-up-command)
(keymap-global-set "<mode-line> <mouse-1>" 'scroll-up-command)
@end example
Here is the complete list of these dummy prefix keys and their
@ -2589,13 +2544,13 @@ Rebind the key @kbd{C-x l} to run the function @code{make-symbolic-link}
(@pxref{Init Rebinding}).
@example
(global-set-key "\C-xl" 'make-symbolic-link)
(keymap-global-set "C-x l" 'make-symbolic-link)
@end example
or
@example
(define-key global-map "\C-xl" 'make-symbolic-link)
(keymap-set global-map "C-x l" 'make-symbolic-link)
@end example
Note once again the single-quote used to refer to the symbol
@ -2605,7 +2560,7 @@ Note once again the single-quote used to refer to the symbol
Do the same thing for Lisp mode only.
@example
(define-key lisp-mode-map "\C-xl" 'make-symbolic-link)
(keymap-set lisp-mode-map "C-x l" 'make-symbolic-link)
@end example
@item
@ -2622,7 +2577,7 @@ so that they run @code{forward-line} instead.
Make @kbd{C-x C-v} undefined.
@example
(global-unset-key "\C-x\C-v")
(keymap-global-unset "C-x C-v")
@end example
One reason to undefine a key is so that you can make it a prefix.
@ -2798,18 +2753,6 @@ strings incorrectly. You should then avoid adding Emacs Lisp code
that modifies the coding system in other ways, such as calls to
@code{set-language-environment}.
To bind non-@acronym{ASCII} keys, you must use a vector (@pxref{Init
Rebinding}). The string syntax cannot be used, since the
non-@acronym{ASCII} characters will be interpreted as meta keys. For
instance:
@example
(global-set-key [?@var{char}] 'some-function)
@end example
@noindent
Type @kbd{C-q}, followed by the key you want to bind, to insert @var{char}.
@node Early Init File
@subsection The Early Init File
@cindex early init file

View file

@ -716,46 +716,62 @@ frame:
@table @code
@item mode-line
@cindex @code{mode-line} face
@cindex faces for mode lines
This face is used for the mode line of the currently selected window,
This is the base face used for the mode lines, as well as header lines
and for menu bars when toolkit menus are not used. By default, it's
drawn with shadows for a raised effect on graphical displays, and
drawn as the inverse of the default face on non-windowed terminals.
The @code{mode-line-active} and @code{mode-line-inactive} faces (which
are the ones used on the mode lines) inherit from this face.
@item mode-line-active
@cindex faces for mode lines
Like @code{mode-line}, but used for the mode line of the currently
selected window. This face inherits from @code{mode-line}, so changes
in that face affect mode lines in all windows.
@item mode-line-inactive
@cindex @code{mode-line-inactive} face
Like @code{mode-line}, but used for mode lines of the windows other
than the selected one (if @code{mode-line-in-non-selected-windows} is
non-@code{nil}). This face inherits from @code{mode-line}, so changes
in that face affect mode lines in all windows.
@item mode-line-highlight
@cindex @code{mode-line-highlight} face
Like @code{highlight}, but used for mouse-sensitive portions of text
on mode lines. Such portions of text typically pop up tooltips
(@pxref{Tooltips}) when the mouse pointer hovers above them.
@item mode-line-buffer-id
@cindex @code{mode-line-buffer-id} face
This face is used for buffer identification parts in the mode line.
@item header-line
@cindex @code{header-line} face
Similar to @code{mode-line} for a window's header line, which appears
at the top of a window just as the mode line appears at the bottom.
Most windows do not have a header line---only some special modes, such
Info mode, create one.
@item header-line-highlight
@cindex @code{header-line-highlight} face
Similar to @code{highlight} and @code{mode-line-highlight}, but used
for mouse-sensitive portions of text on header lines. This is a
separate face because the @code{header-line} face might be customized
in a way that does not interact well with @code{highlight}.
@item tab-line
@cindex @code{tab-line} face
Similar to @code{mode-line} for a window's tab line, which appears
at the top of a window with tabs representing window buffers.
@xref{Tab Line}.
@item vertical-border
@cindex @code{vertical-border} face
This face is used for the vertical divider between windows on text
terminals.
@item minibuffer-prompt
@cindex @code{minibuffer-prompt} face
@vindex minibuffer-prompt-properties
@ -765,19 +781,23 @@ By default, Emacs automatically adds this face to the value of
properties (@pxref{Text Properties,,, elisp, the Emacs Lisp Reference
Manual}) used to display the prompt text. (This variable takes effect
when you enter the minibuffer.)
@item fringe
@cindex @code{fringe} face
The face for the fringes to the left and right of windows on graphic
displays. (The fringes are the narrow portions of the Emacs frame
between the text area and the window's right and left borders.)
@xref{Fringes}.
@item cursor
The @code{:background} attribute of this face specifies the color of
the text cursor. @xref{Cursor Display}.
@item tooltip
This face is used for tooltip text. By default, if Emacs is built
with GTK+ support, tooltips are drawn via GTK+ and this face has no
effect. @xref{Tooltips}.
@item mouse
This face determines the color of the mouse pointer.
@end table

View file

@ -221,6 +221,7 @@ Appendices
* X Resources:: X resources for customizing Emacs.
* Antinews:: Information about Emacs version 27.
* Mac OS / GNUstep:: Using Emacs under macOS and GNUstep.
* Haiku:: Using Emacs on Haiku.
* Microsoft Windows:: Using Emacs on Microsoft Windows and MS-DOS.
* Manifesto:: What's GNU? Gnu's Not Unix!
@ -1249,6 +1250,11 @@ Emacs and macOS / GNUstep
* Mac / GNUstep Events:: How window system events are handled.
* GNUstep Support:: Details on status of GNUstep support.
Emacs and Haiku
* Haiku Basics:: Basic Emacs usage and installation under Haiku.
* Haiku Fonts:: The various options for displaying fonts on Haiku.
Emacs and Microsoft Windows/MS-DOS
* Windows Startup:: How to start Emacs on Windows.
@ -1618,6 +1624,7 @@ Lisp programming.
@include anti.texi
@include macos.texi
@include haiku.texi
@c Includes msdos-xtra.
@include msdos.texi
@include gnu.texi

124
doc/emacs/haiku.texi Normal file
View file

@ -0,0 +1,124 @@
@c This is part of the Emacs manual.
@c Copyright (C) 2021 Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node Haiku
@appendix Emacs and Haiku
@cindex Haiku
Haiku is a Unix-like operating system that originated as a
re-implementation of the operating system BeOS.
This section describes the peculiarities of using Emacs built with
the Application Kit, the windowing system native to Haiku. The
oddities described here do not apply to using Emacs on Haiku built
without windowing support, or built with X11.
@menu
* Haiku Basics:: Basic Emacs usage and installation under Haiku.
* Haiku Fonts:: The various options for displaying fonts on Haiku.
@end menu
@node Haiku Basics
@section Installation and usage peculiarities under Haiku
@cindex haiku application
@cindex haiku installation
Emacs installs two separate executables under Haiku; it is up to the
user to decide which one suits him best: A regular executable, with
the lowercase name @code{emacs}, and a binary containing
Haiku-specific application metadata, with the name @code{Emacs}.
@cindex launching Emacs from the tracker
@cindex tty Emacs in haiku
If you are launching Emacs from the Tracker, or want to make the
Tracker open files using Emacs, you should use the binary named
@code{Emacs}; if you are going to use Emacs in the terminal, or wish
to launch separate instances of Emacs, or do not care for the
aforementioned system integration features, use the binary named
@code{emacs} instead.
@cindex modifier keys and system keymap (Haiku)
@cindex haiku keymap
On Haiku, unusual modifier keys such as the Hyper key are
unsupported. By default, the super key corresponds with the option
key defined by the operating system, the meta key with the command
key, the control key with the system control key, and the shift key
with the system shift key. On a standard PC keyboard, Haiku should
map these keys to positions familiar to those using a GNU system, but
this may require some adjustment to your system's configuration to
work.
It is impossible to type accented characters using the system super
key map.
You can customize the correspondence between modifier keys known to
the system, and those known to Emacs. The variables that allow for
that are described below.
@cindex modifier key customization (Haiku)
@table @code
@vindex haiku-meta-keysym
@item haiku-meta-keysym
The system modifier key that will be treated as the Meta key by Emacs.
It defaults to @code{command}.
@vindex haiku-control-keysym
@item haiku-control-keysym
The system modifier key that will be treated as the Control key by
Emacs. It defaults to @code{control}.
@vindex haiku-super-keysym
@item haiku-super-keysym
The system modifier key that will be treated as the Super key by
Emacs. It defaults to @code{option}.
@vindex haiku-shift-keysym
@item haiku-shift-keysym
The system modifier key that will be treated as the Shift key by
Emacs. It defaults to @code{shift}.
@end table
The value of each variable can be one of the symbols @code{command},
@code{control}, @code{option}, @code{shift}, or @code{nil}.
@code{nil} or any other value will cause the default value to be used
instead.
@cindex tooltips (haiku)
@cindex haiku tooltips
@vindex haiku-use-system-tooltips
On Haiku, Emacs defaults to using the system tooltip mechanism.
This usually leads to more responsive tooltips, but the tooltips will
not be able to display text properties or faces. If you need those
features, customize the variable @code{haiku-use-system-tooltips} to
the nil value, and Emacs will use its own implementation of tooltips.
Both system tooltips and Emacs's own tooltips cannot display above
the menu bar, so help text in the menu bar will display in the echo
area instead.
@subsection What to do when Emacs crashes
@cindex crashes, Haiku
@cindex haiku debugger
@vindex haiku-debug-on-fatal-error
If the variable @code{haiku-debug-on-fatal-error} is non-nil, Emacs
will launch the system debugger when a fatal signal is received. It
defaults to @code{t}. If GDB cannot be used on your system, please
attach the report generated by the system debugger when reporting a
bug.
@node Haiku Fonts
@section Font and font backend selection on Haiku
@cindex font backend selection (Haiku)
Emacs, when built with Haiku windowing support, can be built with
several different font backends. You can specify font backends by
specifying @kbd{-xrm Emacs.fontBackend:BACKEND} on the command line
used to invoke Emacs, where @kbd{BACKEND} is one of the backends
specified below, or on a per-frame basis by changing the
@code{font-backend} frame parameter.
Two of these backends, @code{ftcr} and @code{ftcrhb} are identical
to their counterparts on the X Window System. There is also a
Haiku-specific backend named @code{haiku}, that uses the App Server to
draw fonts, but does not at present support display of color font and
emoji.

View file

@ -439,7 +439,7 @@ name to execute the last keyboard macro, in its current form. (If you
later add to the definition of this macro, that does not alter the
name's definition as a macro.) The macro name is a Lisp symbol, and
defining it in this way makes it a valid command name for calling with
@kbd{M-x} or for binding a key to with @code{global-set-key}
@kbd{M-x} or for binding a key to with @code{keymap-global-set}
(@pxref{Keymaps}). If you specify a name that has a prior definition
other than a keyboard macro, an error message is shown and nothing is
changed.

View file

@ -3011,6 +3011,14 @@ the WebKit widget to display the next search result, while typing
To leave incremental search, you can type @kbd{C-g}.
@findex xwidget-webkit-browse-history
@cindex history of webkit buffers
The command @code{xwidget-webkit-browse-history} displays a buffer
containing a list of pages previously loaded by the current WebKit
buffer, and lets you navigate to those pages by hitting @kbd{RET}.
It is bound to @kbd{H}.
@node Browse-URL
@subsection Following URLs
@cindex World Wide Web

View file

@ -395,6 +395,8 @@ Background color.
Foreground color for a selected item.
@item foreground
Foreground color.
@item disabledForeground
Foreground color for a disabled menu item.
@ifnottex
@item horizontalSpacing
Horizontal spacing in pixels between items. Default is 3.
@ -406,6 +408,12 @@ the associated text. Default is 10.
@item shadowThickness
Thickness of shadow lines for 3D buttons, arrows, and other graphical
elements. Default is 1.
@item borderThickness
Thickness of the external borders of the menu bars and pop-up menus.
Default is 1.
@item cursor
Name of the cursor to use in the menu bars and pop-up menus. Default
is @code{"right_ptr"}.
@end ifnottex
@item margin
Margin of the menu bar, in characters. Default is 1.

View file

@ -135,7 +135,7 @@ the programmers should be trusted to know what they are doing.
@item
We deleted several features of the @code{pcase} macro, in accordance
with our general plane to remove @code{pcase} from Emacs:
with our general plan to remove @code{pcase} from Emacs:
@itemize @minus
@item

View file

@ -451,7 +451,7 @@ reads and discards the following up-event. You can get access to that
up-event with the @samp{U} code character.
This kind of input is used by commands such as @code{describe-key} and
@code{global-set-key}.
@code{keymap-global-set}.
@item K
A key sequence on a form that can be used as input to functions like
@ -1559,8 +1559,10 @@ corner of @var{object}, which is @code{(0 . 0)}. If @var{object} is
the top left corner of the character glyph clicked on.
@item @var{width}, @var{height}
These are the pixel width and height of @var{object} or, if this is
@code{nil}, those of the character glyph clicked on.
If the click is on a character, either from buffer text or from
overlay or display string, these are the pixel width and height of
that character's glyph; otherwise they are dimensions of @var{object}
clicked on.
@end table
For clicks on a scroll bar, @var{position} has this form:
@ -1886,6 +1888,15 @@ This event is sent whenever some kind of update occurs in
@var{xwidget}. There are several types of updates, identified by
their @var{kind}.
@cindex xwidget callbacks
It is a special event (@pxref{Special Events}), which should be
handled by adding a callback to an xwidget that is called whenever an
xwidget event for @var{xwidget} is received.
You can add a callback by setting the @code{callback} of an xwidget's
property list, which should be a function that accepts @var{xwidget}
and @var{kind} as arguments.
@table @code
@cindex @code{load-changed} xwidget event
@item load-changed
@ -1941,9 +1952,15 @@ internally by @code{xwidget-webkit-execute-script}.
@end table
@cindex @code{xwidget-display-event} event
@item (xwidget-display-event @var{xwidget})
@item (xwidget-display-event @var{xwidget} @var{source})
This event is sent whenever an xwidget requests that another xwidget
be displayed. @var{xwidget} is the xwidget that should be displayed.
be displayed. @var{xwidget} is the xwidget that should be displayed,
and @var{source} is the xwidget that asked to display @var{xwidget}.
It is also a special event which should be handled through callbacks.
You can add such a callback by setting the @code{display-callback} of
@var{source}'s property list, which should be a function that accepts
@var{xwidget} and @var{source} as arguments.
@var{xwidget}'s buffer will be set to a temporary buffer. When
displaying the widget, care should be taken to replace the buffer with
@ -1980,13 +1997,28 @@ frame has already been made visible, Emacs has no work to do.
@cindex @code{wheel-up} event
@cindex @code{wheel-down} event
@item (wheel-up @var{position})
@itemx (wheel-down @var{position})
@item (wheel-up @var{position} @var{clicks} @var{lines} @var{pixel-delta})
@itemx (wheel-down @var{position} @var{clicks} @var{lines} @var{pixel-delta})
These kinds of event are generated by moving a mouse wheel. The
@var{position} element is a mouse position list (@pxref{Click
Events}), specifying the position of the mouse cursor when the event
occurred.
@var{clicks}, if present, is the number of times in quick succession
the wheel has been moved. @xref{Repeat Events}. @var{lines}, if
present and not @code{nil}, is the number of screen lines that should
be scrolled. @var{pixel-delta}, if present, is a pair of the form
@w{@code{(@var{x} . @var{y})}}, where @var{x} and @var{y} are the
number of pixels to scroll by in each axis.
@cindex pixel-resolution wheel events
You can use @var{x} and @var{y} to determine how much the mouse wheel
has actually moved at pixel resolution.
For example, the pixelwise deltas could be used to scroll the display
at pixel resolution, exactly according to the user's turning the mouse
wheel.
@vindex mouse-wheel-up-event
@vindex mouse-wheel-down-event
This kind of event is generated only on some kinds of systems. On some
@ -2147,7 +2179,7 @@ bind it to the @code{signal usr1} event sequence:
(defun usr1-handler ()
(interactive)
(message "Got USR1 signal"))
(global-set-key [signal usr1] 'usr1-handler)
(keymap-global-set "<signal> <usr1>" 'usr1-handler)
@end smallexample
@node Classifying Events
@ -3016,7 +3048,7 @@ supplied to input methods (@pxref{Input Methods}). Use
if you want to translate characters after input methods operate.
@end defvar
@defun keyboard-translate from to
@defun key-translate from to
This function modifies @code{keyboard-translate-table} to translate
character code @var{from} into character code @var{to}. It creates
the keyboard translate table if necessary.
@ -3027,12 +3059,12 @@ make @kbd{C-x}, @kbd{C-c} and @kbd{C-v} perform the cut, copy and paste
operations:
@example
(keyboard-translate ?\C-x 'control-x)
(keyboard-translate ?\C-c 'control-c)
(keyboard-translate ?\C-v 'control-v)
(global-set-key [control-x] 'kill-region)
(global-set-key [control-c] 'kill-ring-save)
(global-set-key [control-v] 'yank)
(key-translate "C-x" "<control-x>")
(key-translate "C-c" "<control-c>")
(key-translate "C-v" "<control-v>")
(keymap-global-set "<control-x>" 'kill-region)
(keymap-global-set "<control-c>" 'kill-ring-save)
(keymap-global-set "<control-v>" 'yank)
@end example
@noindent

View file

@ -737,7 +737,7 @@ If omitted, @var{key-type} and @var{value-type} default to
The user can add any key matching the specified key type, but you can
give some keys a preferential treatment by specifying them with the
@code{:options} (see @ref{Variable Definitions}). The specified keys
@code{:options} (@pxref{Variable Definitions}). The specified keys
will always be shown in the customize buffer (together with a suitable
value), with a checkbox to include or exclude or disable the key/value
pair from the alist. The user will not be able to edit the keys

View file

@ -2052,14 +2052,14 @@ means hide the excess parts of @var{string} with a @code{display} text
property (@pxref{Display Property}) showing the ellipsis, instead of
actually truncating the string.
@group
@example
@group
(truncate-string-to-width "\tab\t" 12 4)
@result{} "ab"
(truncate-string-to-width "\tab\t" 12 4 ?\s)
@result{} " ab "
@end example
@end group
@end example
This function uses @code{string-width} and @code{char-width} to find
the suitable truncation point when @var{string} is too wide, so it
@ -2201,6 +2201,23 @@ though when this function is run from an idle timer with a delay of zero
seconds.
@end defun
@defun buffer-text-pixel-size &optional buffer-or-name window from to x-limit y-limit
This is much like @code{window-text-pixel-size}, but can be used when
the buffer isn't shown in a window. (@code{window-text-pixel-size} is
faster when it is, so this function shouldn't be used in that case.)
@var{buffer-or-name} must specify a live buffer or the name of a live
buffer and defaults to the current buffer. @var{window} must be a
live window and defaults to the selected one; the function will
compute the text dimensions as if @var{buffer} is displayed in
@var{window}. The return value is a cons of the maximum pixel-width
of any text line and the pixel-height of all the text lines of the
buffer specified by @var{buffer-or-name}.
The optional arguments @var{x-limit} and @var{y-limit} have the same
meaning as with @code{window-text-pixel-size}.
@end defun
@defun string-pixel-width string
This is a convenience function that uses @code{window-text-pixel-size}
to compute the width of @var{string} (in pixels).
@ -2767,8 +2784,9 @@ apply to. Here are the possible values of @var{characteristic}:
@item type
The kind of window system the terminal uses---either @code{graphic}
(any graphics-capable display), @code{x}, @code{pc} (for the MS-DOS
console), @code{w32} (for MS Windows 9X/NT/2K/XP), or @code{tty} (a
non-graphics-capable display). @xref{Window Systems, window-system}.
console), @code{w32} (for MS Windows 9X/NT/2K/XP), @code{haiku} (for
Haiku), or @code{tty} (a non-graphics-capable display).
@xref{Window Systems, window-system}.
@item class
What kinds of colors the terminal supports---either @code{color},
@ -4856,9 +4874,7 @@ window on a minibuffer-less frame.
The @code{display} text property (or overlay property) is used to
insert images into text, and to control other aspects of how text
displays. The value of the @code{display} property should be a
display specification, or a list or vector containing several display
specifications. Display specifications in the same @code{display}
displays. Display specifications in the same @code{display}
property value generally apply in parallel to the text they cover.
If several sources (overlays and/or a text property) specify values
@ -4866,6 +4882,50 @@ for the @code{display} property, only one of the values takes effect,
following the rules of @code{get-char-property}. @xref{Examining
Properties}.
The value of the @code{display} property should be a display
specification, or a list or vector containing several display
specifications.
@defun get-display-property position prop &optional object properties
This convenience function can be used to get a specific display
property, no matter whether the @code{display} property is a vector, a
list or a simple property. This is like @code{get-text-property}
(@pxref{Examining Properties}), but works on the @code{display}
property only.
@var{position} is the position in the buffer or string to examine, and
@var{prop} is the @code{display} property to return. The optional
@var{object} argument should be either a string or a buffer, and
defaults to the current buffer. If the optional @var{properties}
argument is non-@code{nil}, it should be a @code{display} property,
and in that case, @var{position} and @var{object} are ignored. (This
can be useful if you've already gotten the @code{display} property
with @code{get-char-property}, for instance (@pxref{Examining
Properties}).
@end defun
@defun add-display-text-property start end prop value &optional object
Add @code{display} property @var{prop} of @var{value} to the text from
@var{start} to @var{end}.
If any text in the region has a non-@code{nil} @code{display}
property, those properties are retained. For instance:
@lisp
(add-display-text-property 4 8 'height 2.0)
(add-display-text-property 2 12 'raise 0.5)
@end lisp
After doing this, the region from 2 to 4 will have the @code{raise}
@code{display} property, the region from 4 to 8 will have both the
@code{raise} and @code{height} @code{display} properties, and finally
the region from 8 to 12 will only have the @code{raise} @code{display}
property.
If @var{object} is non-@code{nil}, it should be a string or a buffer.
If @code{nil}, this defaults to the current buffer.
@end defun
@cindex display property, unsafe evaluation
@cindex security, and display specifications
Some of the display specifications allow inclusion of Lisp forms,
@ -5141,6 +5201,24 @@ text that has the specification. It displays all of these spaces
be an integer or float. Characters other than spaces are not affected
at all; in particular, this has no effect on tab characters.
@item (min-width (@var{width}))
This display specification ensures the text that has it takes at least
@var{width} space on display, by adding a stretch of white space to
the end of the text if the text is shorter than @var{width}. The text
is partitioned using the identity of the parameter, which is why the
parameter is a list with one element. For instance:
@lisp
(insert (propertize "foo" '(display (min-width (6.0)))))
@end lisp
This will add padding after @samp{foo} bringing the total width up to
the width of six normal characters. Note that the affected characters
are identified by the @code{(6.0)} list in the display property,
compared with @code{eq}. The element @var{width} can be either an
integer or a float specifying the required minimum width of the text
(@pxref{Pixel Specification}).
@item (height @var{height})
This display specification makes the text taller or shorter.
Here are the possibilities for @var{height}:
@ -6806,10 +6884,11 @@ widget that the newly created widget should share settings and
subprocesses with.
The xwidget that is returned will be killed alongside its buffer
(@pxref{Killing Buffers}). Once it is killed, the xwidget may
continue to exist as a Lisp object and act as a @code{display}
property until all references to it are gone, but most actions that
can be performed on live xwidgets will no longer be available.
(@pxref{Killing Buffers}). You can also kill it using
@code{kill-xwidget}. Once it is killed, the xwidget may continue to
exist as a Lisp object and act as a @code{display} property until all
references to it are gone, but most actions that can be performed on
live xwidgets will no longer be available.
@end defun
@defun xwidgetp object
@ -6822,6 +6901,12 @@ This function returns @code{t} if @var{object} is an xwidget that
hasn't been killed, and @code{nil} otherwise.
@end defun
@defun kill-xwidget xwidget
This function kills @var{xwidget}, by removing it from its buffer and
releasing window system resources it holds.
@end defun
@cindex xwidget property list
@defun xwidget-plist xwidget
This function returns the property list of @var{xwidget}.
@end defun
@ -6965,6 +7050,65 @@ the absolute location of the web resources referenced by @var{text},
to be used for resolving relative links in @var{text}.
@end defun
@defun xwidget-webkit-goto-history xwidget rel-pos
Make @var{xwidget}, a WebKit widget, load the @var{rel-pos}th element
in its navigation history.
If @var{rel-pos} is zero, the current page will be reloaded instead.
@end defun
@defun xwidget-webkit-back-forward-list xwidget &optional limit
Return the navigation history of @var{xwidget}, up to @var{limit}
items in each direction. If not specified, @var{limit} defaults to
50.
The returned value is a list of the form @w{@code{(@var{back}
@var{here} @var{forward})}}, where @var{here} is the current
navigation item, while @var{back} is a list of items containing the
items recorded by WebKit before the current navigation item, and
@var{forward} is a list of items recorded after the current navigation
item. @var{back}, @var{here} and @var{forward} can all be @code{nil}.
When @var{here} is @code{nil}, it means that no items have been
recorded yet; if @var{back} or @var{forward} are @code{nil}, it means
that there is no history recorded before or after the current item
respectively.
Navigation items are themselves lists of the form @w{@code{(@var{idx}
@var{title} @var{uri})}}. In these lists, @var{idx} is an index that
can be passed to @code{xwidget-webkit-goto-history}, @var{title} is
the human-readable title of the item, and @var{uri} is the URI of the
item. The user should normally have no reason to load @var{uri}
manually to reach a specific history item. Instead, @var{idx} should
be passed as an index to @code{xwidget-webkit-goto-history}.
@end defun
@defun xwidget-webkit-estimated-load-progress xwidget
Return an estimate of how much data is remaining to be transferred
before the page displayed by the WebKit widget @var{xwidget} is fully
loaded.
The value returned is a float ranging between 0.0 and 1.0.
@end defun
@defun xwidget-webkit-set-cookie-storage-file xwidget file
Make the WebKit widget @var{xwidget} store cookies in @var{file}.
@var{file} must be an absolute file name. The new setting will also
affect any xwidget that was created with @var{xwidget} as the
@code{related} argument to @code{make-xwidget}, and widgets related to
those as well.
If this function is not called at least once on @var{xwidget} or a
related widget, @var{xwidget} will not store cookies on disk at all.
@end defun
@defun xwidget-webkit-stop-loading xwidget
Terminate any data transfer still in progress in the WebKit widget
@var{xwidget} as part of a page-loading operation. If a page is not
being loaded, this function does nothing.
@end defun
@node Buttons
@section Buttons
@cindex buttons in buffers
@ -8208,6 +8352,8 @@ Emacs is displaying the frame using the Nextstep interface (used on
GNUstep and macOS).
@item pc
Emacs is displaying the frame using MS-DOS direct screen writes.
@item haiku
Emacs is displaying the frame using the Application Kit on Haiku.
@item nil
Emacs is displaying the frame on a character-based terminal.
@end table
@ -8254,6 +8400,7 @@ area. On text-mode (a.k.a.@: ``TTY'') frames, tooltips are always
displayed in the echo area.
@end defun
@cindex system tooltips
@vindex x-gtk-use-system-tooltips
When Emacs is built with GTK+ support, it by default displays tooltips
using GTK+ functions, and the appearance of the tooltips is then

View file

@ -1267,7 +1267,7 @@ balanced parentheses, recursive processing of forms, and recursion via
indirect specifications.
Here's a table of the possible elements of a specification list, with
their meanings (see @ref{Specification Examples}, for the referenced
their meanings (@pxref{Specification Examples}, for the referenced
examples):
@table @code

View file

@ -840,6 +840,7 @@ Keymaps
* Key Lookup:: Finding a key's binding in one keymap.
* Functions for Key Lookup:: How to request key lookup.
* Changing Key Bindings:: Redefining a key in a keymap.
* Low-Level Key Binding:: Legacy key syntax description.
* Remapping Commands:: A keymap can translate one command to another.
* Translation Keymaps:: Keymaps for translating sequences of events.
* Key Binding Commands:: Interactive interfaces for redefining keys.

View file

@ -3308,8 +3308,8 @@ first, before handlers for jobs such as remote file access.
@ifnottex
@noindent
@code{access-file}, @code{add-name-to-file},
@code{byte-compiler-base-file-name},@*
@code{abbreviate-file-name}, @code{access-file},
@code{add-name-to-file}, @code{byte-compiler-base-file-name},@*
@code{copy-directory}, @code{copy-file},
@code{delete-directory}, @code{delete-file},
@code{diff-latest-backup-file},
@ -3368,7 +3368,8 @@ first, before handlers for jobs such as remote file access.
@iftex
@noindent
@flushleft
@code{access-file}, @code{add-name-to-file},
@code{abbreviate-file-name}, @code{access-file},
@code{add-name-to-file},
@code{byte-com@discretionary{}{}{}piler-base-file-name},
@code{copy-directory}, @code{copy-file},
@code{delete-directory}, @code{delete-file},

View file

@ -214,7 +214,8 @@ The terminal and keyboard coding systems used on the terminal.
@item
The kind of display associated with the terminal. This is the symbol
returned by the function @code{terminal-live-p} (i.e., @code{x},
@code{t}, @code{w32}, @code{ns}, or @code{pc}). @xref{Frames}.
@code{t}, @code{w32}, @code{ns}, @code{pc}, or @code{haiku}).
@xref{Frames}.
@item
A list of terminal parameters. @xref{Terminal Parameters}.
@ -680,7 +681,7 @@ indicate that position for the various builds:
@itemize @w{}
@item (1) non-toolkit and terminal frames
@item (2) Lucid, Motif and MS-Windows frames
@item (2) Lucid, Motif, MS-Windows, and Haiku frames
@item (3) GTK+ and NS frames
@end itemize
@ -1729,7 +1730,9 @@ 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}. A @dfn{fullwidth} frame is as
@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
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
@ -2191,7 +2194,10 @@ either via @code{focus-follows-mouse} (@pxref{Input Focus}) or
@code{mouse-autoselect-window} (@pxref{Mouse Window Auto-selection}).
This may have the unwanted side-effect that a user cannot scroll a
non-selected frame with the mouse. Some window managers may not honor
this parameter.
this parameter. On Haiku, it also has the side-effect that the window
will not be able to receive any keyboard input from the user, not even
if the user switches to the frame using the key combination
@kbd{Alt-@key{TAB}}.
@vindex undecorated@r{, a frame parameter}
@item undecorated
@ -2352,7 +2358,10 @@ driver for OTF and TTF fonts with text shaping by the Uniscribe
engine), and @code{harfbuzz} (font driver for OTF and TTF fonts with
HarfBuzz text shaping) (@pxref{Windows Fonts,,, emacs, The GNU Emacs
Manual}). The @code{harfbuzz} driver is similarly recommended. On
other systems, there is only one available font backend, so it does
Haiku, there can be several font drivers (@pxref{Haiku Fonts,,, emacs,
The GNU Emacs Manual}).
On other systems, there is only one available font backend, so it does
not make sense to modify this frame parameter.
@vindex background-mode@r{, a frame parameter}
@ -3141,8 +3150,10 @@ raises @var{frame} above all other child frames of its parent.
@deffn Command lower-frame &optional frame
This function lowers frame @var{frame} (default, the selected frame)
below all other frames belonging to the same or a higher z-group as
@var{frame}. If @var{frame} is a child frame (@pxref{Child Frames}),
this lowers @var{frame} below all other child frames of its parent.
@var{frame}.@footnote{Lowering frames is not supported on Haiku, due
to limitations imposed by the system.} If @var{frame} is a child
frame (@pxref{Child Frames}), this lowers @var{frame} below all other
child frames of its parent.
@end deffn
@defun frame-restack frame1 frame2 &optional above
@ -3152,7 +3163,8 @@ that if both frames are visible and their display areas overlap,
third argument @var{above} is non-@code{nil}, this function restacks
@var{frame1} above @var{frame2}. This means that if both frames are
visible and their display areas overlap, @var{frame1} will (partially)
obscure @var{frame2}.
obscure @var{frame2}.@footnote{Restacking frames is not supported on
Haiku, due to limitations imposed by the system.}
Technically, this function may be thought of as an atomic action
performed in two steps: The first step removes @var{frame1}'s
@ -3247,12 +3259,16 @@ parent frame's window-system window.
@cindex reparent frame
@cindex nest frame
The @code{parent-frame} parameter can be changed at any time. Setting
it to another frame @dfn{reparents} the child frame. Setting it to
another child frame makes the frame a @dfn{nested} child frame. Setting
it to @code{nil} restores the frame's status as a top-level frame---a
frame whose window-system window is a child of its display's root
window.
The @code{parent-frame} parameter can be changed at any time.
Setting it to another frame @dfn{reparents} the child frame. Setting
it to another child frame makes the frame a @dfn{nested} child frame.
Setting it to @code{nil} restores the frame's status as a top-level
frame---a frame whose window-system window is a child of its display's
root window.@footnote{On Haiku, child frames are only visible when a
parent frame is active, owing to a limitation of the Haiku windowing
system. Owing to the same limitation, child frames are only
guaranteed to appear above their top-level parent; that is to say, the
top-most frame in the hierarchy, which does not have a parent frame.}
Since child frames can be arbitrarily nested, a frame can be both a
child and a parent frame. Also, the relative roles of child and parent

View file

@ -333,6 +333,13 @@ stands for no text itself. It is used only for a side effect: it
specifies @var{mapvar}'s value as the keymap for any following
@samp{\[@var{command}]} sequences in this documentation string.
@item \`@var{KEYSEQ}'
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}.
@item `
(grave accent) stands for a left quote.
This generates a left single quotation mark, an apostrophe, or a grave

View file

@ -30,6 +30,7 @@ is found. The whole process is called @dfn{key lookup}.
* Key Lookup:: Finding a key's binding in one keymap.
* Functions for Key Lookup:: How to request key lookup.
* Changing Key Bindings:: Redefining a key in a keymap.
* Low-Level Key Binding:: Legacy key syntax description.
* Remapping Commands:: A keymap can translate one command to another.
* Translation Keymaps:: Keymaps for translating sequences of events.
* Key Binding Commands:: Interactive interfaces for redefining keys.
@ -95,21 +96,11 @@ Manual}.
(kbd "C-M-<down>") @result{} [C-M-down]
@end example
@findex kbd-valid-p
@findex key-valid-p
The @code{kbd} function is very permissive, and will try to return
something sensible even if the syntax used isn't completely
conforming. To check whether the syntax is actually valid, use the
@code{kbd-valid-p} function.
@code{define-key} also supports using the shorthand syntax
@samp{["..."]} syntax to define a key. The string has to be a
strictly valid @code{kbd} sequence, and if it's not valid, an error
will be signalled. For instance, to bind @key{C-c f}, you can say:
@lisp
(define-key global-map ["C-c f"] #'find-file-literally)
@end lisp
@code{key-valid-p} function.
@end defun
@ -627,16 +618,16 @@ active keymap.
@result{} nil
@end group
@group
(local-set-key "\C-p" ctl-x-map)
(keymap-local-set "C-p" ctl-x-map)
@result{} nil
@end group
@group
(key-binding "\C-p\C-f")
(keymap-binding "C-p C-f")
@result{} find-file
@end group
@group
(key-binding "\C-p6")
(keymap-binding "C-p 6")
@result{} nil
@end group
@end example
@ -699,7 +690,7 @@ use, in place of the buffer's default local keymap.
@cindex major mode keymap
The local keymap is normally set by the buffer's major mode, and
every buffer with the same major mode shares the same local keymap.
Hence, if you call @code{local-set-key} (@pxref{Key Binding Commands})
Hence, if you call @code{keymap-local-set} (@pxref{Key Binding Commands})
to change the local keymap in one buffer, that also affects the local
keymaps in other buffers with the same major mode.
@ -733,39 +724,7 @@ Normally it ignores @code{overriding-local-map} and
then it pays attention to them. @var{position} can optionally be either
an event position as returned by @code{event-start} or a buffer
position, and may change the keymaps as described for
@code{key-binding}.
@end defun
@defun key-binding key &optional accept-defaults no-remap position
This function returns the binding for @var{key} according to the
current active keymaps. The result is @code{nil} if @var{key} is
undefined in the keymaps.
The argument @var{accept-defaults} controls checking for default
bindings, as in @code{lookup-key} (@pxref{Functions for Key Lookup}).
When commands are remapped (@pxref{Remapping Commands}),
@code{key-binding} normally processes command remappings so as to
return the remapped command that will actually be executed. However,
if @var{no-remap} is non-@code{nil}, @code{key-binding} ignores
remappings and returns the binding directly specified for @var{key}.
If @var{key} starts with a mouse event (perhaps following a prefix
event), the maps to be consulted are determined based on the event's
position. Otherwise, they are determined based on the value of point.
However, you can override either of them by specifying @var{position}.
If @var{position} is non-@code{nil}, it should be either a buffer
position or an event position like the value of @code{event-start}.
Then the maps consulted are determined based on @var{position}.
Emacs signals an error if @var{key} is not a string or a vector.
@example
@group
(key-binding "\C-x\C-f")
@result{} find-file
@end group
@end example
@code{keymap-binding}.
@end defun
@node Searching Keymaps
@ -1042,7 +1001,7 @@ keymap.
Let's use the term @dfn{keymap entry} to describe the value found by
looking up an event type in a keymap. (This doesn't include the item
string and other extra elements in a keymap element for a menu item, because
@code{lookup-key} and other key lookup functions don't include them in
@code{keymap-lookup} and other key lookup functions don't include them in
the returned value.) While any Lisp object may be stored in a keymap
as a keymap entry, not all make sense for key lookup. Here is a table
of the meaningful types of keymap entries:
@ -1193,7 +1152,7 @@ Used in keymaps to undefine keys. It calls @code{ding}, but does
not cause an error.
@end deffn
@defun local-key-binding key &optional accept-defaults
@defun keymap-local-binding key &optional accept-defaults
This function returns the binding for @var{key} in the current
local keymap, or @code{nil} if it is undefined there.
@ -1201,7 +1160,7 @@ The argument @var{accept-defaults} controls checking for default bindings,
as in @code{lookup-key} (above).
@end defun
@defun global-key-binding key &optional accept-defaults
@defun keymap-global-binding key &optional accept-defaults
This function returns the binding for command @var{key} in the
current global keymap, or @code{nil} if it is undefined there.
@ -1284,65 +1243,55 @@ change a binding in the global keymap, the change is effective in all
buffers (though it has no direct effect in buffers that shadow the
global binding with a local one). If you change the current buffer's
local map, that usually affects all buffers using the same major mode.
The @code{global-set-key} and @code{local-set-key} functions are
The @code{keymap-global-set} and @code{keymap-local-set} functions are
convenient interfaces for these operations (@pxref{Key Binding
Commands}). You can also use @code{define-key}, a more general
Commands}). You can also use @code{keymap-set}, a more general
function; then you must explicitly specify the map to change.
When choosing the key sequences for Lisp programs to rebind, please
follow the Emacs conventions for use of various keys (@pxref{Key
Binding Conventions}).
@cindex meta character key constants
@cindex control character key constants
@code{define-key} (and other functions that are used to rebind keys)
understand a number of different syntaxes for the keys.
The functions below signal an error if @var{keymap} is not a keymap,
or if @var{key} is not a valid key.
@table @asis
@item A vector containing a single string.
This is the preferred way to represent a key sequence. Here's a
couple of examples:
@var{key} is a string representing a single key or a series of key
strokes. Key strokes are separated by a single space character.
@example
["C-c M-f"]
["S-<home>"]
@end example
Each key stroke is either a single character, or the name of an
event, surrounded by angle brackets. In addition, any key stroke
may be preceded by one or more modifier keys. Finally, a limited
number of characters have a special shorthand syntax. Here's some
example key sequences:
The syntax is the same as the one used by Emacs when displaying key
bindings, for instance in @samp{*Help*} buffers and help texts.
@table @kbd
@item f
The key @kbd{f}.
If the syntax isn't valid, an error will be raised when running
@code{define-key}, or when byte-compiling code that has these calls.
@item S o m
A three key sequence of the keys @kbd{S}, @kbd{o} and @kbd{m}.
@item A vector containing lists of keys.
You can use a list containing modifier names plus one base event (a
character or function key name). For example, @code{[(control ?a)
(meta b)]} is equivalent to @kbd{C-a M-b} and @code{[(hyper control
left)]} is equivalent to @kbd{C-H-left}.
@item C-c o
A two key sequence of the keys @kbd{c} with the control modifier and
then the key @kbd{o}
@item A string with control and meta characters.
Internally, key sequences are often represented as strings using the
special escape sequences for control and meta characters
(@pxref{String Type}), but this representation can also be used by
users when rebinding keys. A string like @code{"\M-x"} is read as
containing a single @kbd{M-x}, @code{"\C-f"} is read as containing a
single @kbd{C-f}, and @code{"\M-\C-x"} and @code{"\C-\M-x"} are both
read as containing a single @kbd{C-M-x}.
@item H-<left>
The key named @kbd{left} with the hyper modifier.
@item a vector of characters.
This is the other internal representation of key sequences, and
supports a fuller range of modifiers than the string representation.
One example is @samp{[?\C-\H-x home]}, which represents the @kbd{C-H-x
home} key sequence. @xref{Character Type}.
@item M-RET
The @kbd{return} key with a meta modifier.
@item C-M-<space>
The @kbd{space} key with both the control and meta modifiers.
@end table
The functions below signal an error if @var{keymap} is not a keymap,
or if @var{key} is not a string or vector representing a key sequence.
You can use event types (symbols) as shorthand for events that are
lists. The @code{kbd} function (@pxref{Key Sequences}) is a
convenient way to specify the key sequence.
The only keys that have a special shorthand syntax are @kbd{NUL},
@kbd{RET}, @kbd{TAB}, @kbd{LFD}, @kbd{ESC}, @kbd{SPC} and @kbd{DEL}.
@defun define-key keymap key binding
The modifiers have to be specified in alphabetical order:
@samp{A-C-H-M-S-s}, which is @samp{Alt-Control-Hyper-Meta-Shift-super}.
@defun keymap-set keymap key binding
This function sets the binding for @var{key} in @var{keymap}. (If
@var{key} is more than one event long, the change is actually made
in another keymap reached from @var{keymap}.) The argument
@ -1350,7 +1299,7 @@ in another keymap reached from @var{keymap}.) The argument
meaningful. (For a list of meaningful types, see @ref{Key Lookup}.)
The value returned by @code{define-key} is @var{binding}.
If @var{key} is @code{[t]}, this sets the default binding in
If @var{key} is @kbd{<t>}, this sets the default binding in
@var{keymap}. When an event has no binding of its own, the Emacs
command loop uses the keymap's default binding, if there is one.
@ -1358,7 +1307,7 @@ command loop uses the keymap's default binding, if there is one.
@cindex key sequence error
Every prefix of @var{key} must be a prefix key (i.e., bound to a keymap)
or undefined; otherwise an error is signaled. If some prefix of
@var{key} is undefined, then @code{define-key} defines it as a prefix
@var{key} is undefined, then @code{keymap-set} defines it as a prefix
key so that the rest of @var{key} can be defined as specified.
If there was previously no binding for @var{key} in @var{keymap}, the
@ -1376,7 +1325,7 @@ bindings in it:
@result{} (keymap)
@end group
@group
(define-key map ["C-f"] 'forward-char)
(keymap-set map "C-f" 'forward-char)
@result{} forward-char
@end group
@group
@ -1386,7 +1335,7 @@ map
@group
;; @r{Build sparse submap for @kbd{C-x} and bind @kbd{f} in that.}
(define-key map ["C-x f"] 'forward-word)
(keymap-set map "C-x f" 'forward-word)
@result{} forward-word
@end group
@group
@ -1399,14 +1348,14 @@ map
@group
;; @r{Bind @kbd{C-p} to the @code{ctl-x-map}.}
(define-key map ["C-p"] ctl-x-map)
(keymap-set map "C-p" ctl-x-map)
;; @code{ctl-x-map}
@result{} [nil @dots{} find-file @dots{} backward-kill-sentence]
@end group
@group
;; @r{Bind @kbd{C-f} to @code{foo} in the @code{ctl-x-map}.}
(define-key map ["C-p C-f"] 'foo)
(keymap-set map "C-p C-f" 'foo)
@result{} 'foo
@end group
@group
@ -1426,9 +1375,9 @@ changing the bindings of both @kbd{C-p C-f} and @kbd{C-x C-f} in the
default global map.
@defun define-keymap &key options... &rest pairs...
@code{define-key} is the general work horse for defining a key in a
@code{keymap-set} is the general work horse for defining a key in a
keymap. When writing modes, however, you frequently have to bind a
large number of keys at once, and using @code{define-key} on them all
large number of keys at once, and using @code{keymap-set} on them all
can be tedious and error-prone. Instead you can use
@code{define-keymap}, which creates a keymaps and binds a number of
keys. Here's a very basic example:
@ -1437,14 +1386,14 @@ keys. Here's a very basic example:
(define-keymap
"n" #'forward-line
"f" #'previous-line
["C-c C-c"] #'quit-window)
"C-c C-c" #'quit-window)
@end lisp
This function creates a new sparse keymap, defines the two keystrokes
in @var{pairs}, and returns the new keymap.
@var{pairs} is a list of alternating key bindings and key definitions,
as accepted by @code{define-key}. In addition the key can be the
as accepted by @code{keymap-set}. In addition the key can be the
special symbol @code{:menu}, in which case the definition should be a
menu definition as accepted by @code{easy-menu-define} (@pxref{Easy
Menu}). Here's a brief example:
@ -1513,8 +1462,8 @@ Here's an example:
@lisp
(defvar-keymap eww-textarea-map
:parent text-mode-map
"\r" #'forward-line
[?\t] #'shr-next-link)
"RET" #'forward-line
"TAB" #'shr-next-link)
@end lisp
@end defmac
@ -1617,13 +1566,166 @@ Modes}); then its keymap will automatically inherit from
(defvar special-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "q" 'quit-window)
(keymap-set map "q" 'quit-window)
@dots{}
map))
@end group
@end smallexample
@end defun
@node Low-Level Key Binding
@section Low-Level Key Binding
@cindex low-level key bindings
Historically, Emacs has supported a number of different syntaxes for
defining keys. The documented way to bind a key today is to use the
syntax supported by @code{key-valid-p}, which is what all the
functions like @code{keymap-set} and @code{keymap-lookup} supports.
This section documents the old-style syntax and interface functions;
they should not be used in new code.
@cindex meta character key constants
@cindex control character key constants
@code{define-key} (and other low-level functions that are used to
rebind keys) understand a number of different syntaxes for the keys.
@table @asis
@item A vector containing lists of keys.
You can use a list containing modifier names plus one base event (a
character or function key name). For example, @code{[(control ?a)
(meta b)]} is equivalent to @kbd{C-a M-b} and @code{[(hyper control
left)]} is equivalent to @kbd{C-H-left}.
@item A string of characters with modifiers
Internally, key sequences are often represented as strings using the
special escape sequences for shift, control and meta modifiers
(@pxref{String Type}), but this representation can also be used by
users when rebinding keys. A string like @code{"\M-x"} is read as
containing a single @kbd{M-x}, @code{"\C-f"} is read as containing a
single @kbd{C-f}, and @code{"\M-\C-x"} and @code{"\C-\M-x"} are both
read as containing a single @kbd{C-M-x}.
@item A vector of characters and key symbols
This is the other internal representation of key sequences. It
supports a fuller range of modifiers than the string representation,
and also support function keys. An example is @w{@samp{[?\C-\H-x
home]}}, which represents the @w{@kbd{C-H-x @key{home}}} key sequence.
@xref{Character Type}.
@end table
@defun define-key keymap key binding &optional remove
This function is like @code{keymap-set} (@pxref{Changing Key
Bindings}, but understands only the legacy key syntaxes.
In addition, this function also has a @var{remove} argument. If it is
non-@code{nil}, the definition will be removed. This is almost the
same as setting the definition to @code{nil}, but makes a difference
if the @var{keymap} has a parent, and @var{key} is shadowing the same
binding in the parent. With @var{remove}, subsequent lookups will
return the binding in the parent, and with a nil @var{def}, the
lookups will return @code{nil}.
@end defun
Here are other legacy key definition functions and commands, with the
equivalent modern function to use instead in new code.
@deffn Command global-set-key key binding
This function sets the binding of @var{key} in the current global map
to @var{binding}. Use @code{keymap-global-set} instead.
@end deffn
@deffn Command global-unset-key key
This function removes the binding of @var{key} from the current
global map. Use @code{keymap-global-unset} instead.
@end deffn
@deffn Command local-set-key key binding
This function sets the binding of @var{key} in the current local
keymap to @var{binding}. Use @code{keymap-local-set} instead.
@end deffn
@deffn Command local-unset-key key
This function removes the binding of @var{key} from the current
local map. Use @code{keymap-local-unset} instead.
@end deffn
@defun substitute-key-definition olddef newdef keymap &optional oldmap
This function replaces @var{olddef} with @var{newdef} for any keys in
@var{keymap} that were bound to @var{olddef}. In other words,
@var{olddef} is replaced with @var{newdef} wherever it appears. The
function returns @code{nil}. Use @code{keymap-substitute} instead.
@end defun
@defun define-key-after map key binding &optional after
Define a binding in @var{map} for @var{key}, with value @var{binding},
just like @code{define-key}, but position the binding in @var{map} after
the binding for the event @var{after}. The argument @var{key} should be
of length one---a vector or string with just one element. But
@var{after} should be a single event type---a symbol or a character, not
a sequence. The new binding goes after the binding for @var{after}. If
@var{after} is @code{t} or is omitted, then the new binding goes last, at
the end of the keymap. However, new bindings are added before any
inherited keymap. Use @code{keymap-set-after} instead of this function.
@end defun
@defun keyboard-translate from to
This function modifies @code{keyboard-translate-table} to translate
character code @var{from} into character code @var{to}. It creates
the keyboard translate table if necessary. Use @code{key-translate}
instead.
@end defun
@defun key-binding key &optional accept-defaults no-remap position
This function returns the binding for @var{key} according to the
current active keymaps. The result is @code{nil} if @var{key} is
undefined in the keymaps. The argument @var{accept-defaults} controls
checking for default bindings, as in @code{lookup-key}
(@pxref{Functions for Key Lookup}). If @var{no-remap} is
non-@code{nil}, @code{key-binding} ignores command remappings
(@pxref{Remapping Commands}) and returns the binding directly
specified for @var{key}. The optional argument @var{position} should
be either a buffer position or an event position like the value of
@code{event-start}; it tells the function to consult the maps
determined based on that @var{position}.
Emacs signals an error if @var{key} is not a string or a vector.
Use @code{keymap-lookup} instead of this function.
@end defun
@defun lookup-key keymap key &optional accept-defaults
This function returns the definition of @var{key} in @var{keymap}. If
the string or vector @var{key} is not a valid key sequence according
to the prefix keys specified in @var{keymap}, it must be too long and
have extra events at the end that do not fit into a single key
sequence. Then the value is a number, the number of events at the
front of @var{key} that compose a complete key.
If @var{accept-defaults} is non-@code{nil}, then @code{lookup-key}
considers default bindings as well as bindings for the specific events
in @var{key}. Otherwise, @code{lookup-key} reports only bindings for
the specific sequence @var{key}, ignoring default bindings except when
you explicitly ask about them.
Use @code{keymap-lookup} instead of this function.
@end defun
@defun local-key-binding key &optional accept-defaults
This function returns the binding for @var{key} in the current
local keymap, or @code{nil} if it is undefined there.
The argument @var{accept-defaults} controls checking for default bindings,
as in @code{lookup-key} (above).
@end defun
@defun global-key-binding key &optional accept-defaults
This function returns the binding for command @var{key} in the
current global keymap, or @code{nil} if it is undefined there.
The argument @var{accept-defaults} controls checking for default bindings,
as in @code{lookup-key} (above).
@end defun
@node Remapping Commands
@section Remapping Commands
@cindex remapping commands
@ -1834,32 +1936,18 @@ problematic suffixes/prefixes are @kbd{@key{ESC}}, @kbd{M-O} (which is really
This section describes some convenient interactive interfaces for
changing key bindings. They work by calling @code{define-key}.
People often use @code{global-set-key} in their init files
People often use @code{keymap-global-set} in their init files
(@pxref{Init File}) for simple customization. For example,
@smallexample
(global-set-key (kbd "C-x C-\\") 'next-line)
@end smallexample
@noindent
or
@smallexample
(global-set-key [?\C-x ?\C-\\] 'next-line)
@end smallexample
@noindent
or
@smallexample
(global-set-key [(control ?x) (control ?\\)] 'next-line)
(keymap-global-set "C-x C-\\" 'next-line)
@end smallexample
@noindent
redefines @kbd{C-x C-\} to move down a line.
@smallexample
(global-set-key [M-mouse-1] 'mouse-set-point)
(keymap-global-set "M-<mouse-1>" 'mouse-set-point)
@end smallexample
@noindent
@ -1873,14 +1961,7 @@ they usually will be in a Lisp file (@pxref{Loading Non-ASCII}), you
must type the keys as multibyte too. For instance, if you use this:
@smallexample
(global-set-key "ö" 'my-function) ; bind o-umlaut
@end smallexample
@noindent
or
@smallexample
(global-set-key ?ö 'my-function) ; bind o-umlaut
(keymap-global-set "ö" 'my-function) ; bind o-umlaut
@end smallexample
@noindent
@ -1891,20 +1972,20 @@ binding, you need to teach Emacs how to decode the keyboard by using an
appropriate input method (@pxref{Input Methods, , Input Methods, emacs, The GNU
Emacs Manual}).
@deffn Command global-set-key key binding
@deffn Command keymap-global-set key binding
This function sets the binding of @var{key} in the current global map
to @var{binding}.
@smallexample
@group
(global-set-key @var{key} @var{binding})
(keymap-global-set @var{key} @var{binding})
@equiv{}
(define-key (current-global-map) @var{key} @var{binding})
(keymap-set (current-global-map) @var{key} @var{binding})
@end group
@end smallexample
@end deffn
@deffn Command global-unset-key key
@deffn Command keymap-global-unset key
@cindex unbinding keys
This function removes the binding of @var{key} from the current
global map.
@ -1915,50 +1996,32 @@ that uses @var{key} as a prefix---which would not be allowed if
@smallexample
@group
(global-unset-key "\C-l")
(keymap-global-unset "C-l")
@result{} nil
@end group
@group
(global-set-key "\C-l\C-l" 'redraw-display)
(keymap-global-set "C-l C-l" 'redraw-display)
@result{} nil
@end group
@end smallexample
This function is equivalent to using @code{define-key} as follows:
@smallexample
@group
(global-unset-key @var{key})
@equiv{}
(define-key (current-global-map) @var{key} nil)
@end group
@end smallexample
@end deffn
@deffn Command local-set-key key binding
@deffn Command keymap-local-set key binding
This function sets the binding of @var{key} in the current local
keymap to @var{binding}.
@smallexample
@group
(local-set-key @var{key} @var{binding})
(keymap-local-set @var{key} @var{binding})
@equiv{}
(define-key (current-local-map) @var{key} @var{binding})
(keymap-set (current-local-map) @var{key} @var{binding})
@end group
@end smallexample
@end deffn
@deffn Command local-unset-key key
@deffn Command keymap-local-unset key
This function removes the binding of @var{key} from the current
local map.
@smallexample
@group
(local-unset-key @var{key})
@equiv{}
(define-key (current-local-map) @var{key} nil)
@end group
@end smallexample
@end deffn
@node Scanning Keymaps
@ -2813,9 +2876,9 @@ using an indirection through @code{tool-bar-map}.
By default, the global map binds @code{[tool-bar]} as follows:
@example
(global-set-key [tool-bar]
`(menu-item ,(purecopy "tool bar") ignore
:filter tool-bar-make-keymap))
(keymap-global-set "<tool-bar>"
`(menu-item ,(purecopy "tool bar") ignore
:filter tool-bar-make-keymap))
@end example
@noindent

View file

@ -947,6 +947,9 @@ actually Linux is just the kernel, not the whole system.)
@item gnu/kfreebsd
A GNU (glibc-based) system with a FreeBSD kernel.
@item haiku
The Haiku operating system, a derivative of the Be Operating System.
@item hpux
Hewlett-Packard HPUX operating system.

View file

@ -3650,9 +3650,20 @@ property is obsolete; use the @code{cursor-intangible} property instead.
@item cursor-intangible
@kindex cursor-intangible @r{(text property)}
@findex cursor-intangible-mode
@cindex rear-nonsticky, and cursor-intangible property
When the minor mode @code{cursor-intangible-mode} is turned on, point
is moved away from any position that has a non-@code{nil}
@code{cursor-intangible} property, just before redisplay happens.
Note that ``stickiness'' of the property (@pxref{Sticky Properties})
is taken into account when computing allowed cursor positions, so (for
instance) to insert a stretch of five @samp{x} characters into which
the cursor can't enter, you should do something like:
@lisp
(insert
(propertize "xxxx" 'cursor-intangible t)
(propertize "x" 'cursor-intangible t 'rear-nonsticky t))
@end lisp
@vindex cursor-sensor-inhibit
When the variable @code{cursor-sensor-inhibit} is non-@code{nil}, the
@ -3950,6 +3961,8 @@ of the kill ring. To insert with inheritance, use the special
primitives described in this section. Self-inserting characters
inherit properties because they work using these primitives.
@cindex front-sticky text property
@cindex rear-nonsticky text property
When you do insertion with inheritance, @emph{which} properties are
inherited, and from where, depends on which properties are @dfn{sticky}.
Insertion after a character inherits those of its properties that are

View file

@ -363,7 +363,7 @@ where you are in Emacs.
@cindex evaluation error
@cindex infinite recursion
This variable defines the limit on the total number of local variable
bindings and @code{unwind-protect} cleanups (see @ref{Cleanups,,
bindings and @code{unwind-protect} cleanups (@pxref{Cleanups,,
Cleaning Up from Nonlocal Exits}) that are allowed before Emacs
signals an error (with data @code{"Variable binding depth exceeds
max-specpdl-size"}).

View file

@ -6419,7 +6419,9 @@ changed. @xref{Other Font Lock Variables}.
during redisplay provided a significant, non-scrolling change of a
window has been detected. For simplicity, these hooks and the
functions they call will be collectively referred to as @dfn{window
change functions}.
change functions}. As any hook, these hooks can be set either
globally of buffer-locally via the @var{local} argument of
@code{add-hook} (@pxref{Setting Hooks}) when the hook is installed.
@cindex window buffer change
The first of these hooks is run after a @dfn{window buffer change} is

View file

@ -151,7 +151,7 @@ and @key{Meta}
@item
@key{DEL}: @key{Delete}, usually @strong{not} the same as
@key{Backspace}; same as @kbd{C-?} (see @ref{Backspace invokes help}, if
@key{Backspace}; same as @kbd{C-?} (@pxref{Backspace invokes help}, if
deleting invokes Emacs help)
@item
@ -793,7 +793,7 @@ informational files about Emacs and relevant aspects of the GNU project
are available for you to read.
The following files (and others) are available in the @file{etc}
directory of the Emacs distribution (see @ref{File-name conventions}, if
directory of the Emacs distribution (@pxref{File-name conventions}, if
you're not sure where that is). Many of these files are available via
the Emacs @samp{Help} menu, or by typing @kbd{C-h ?} (@kbd{M-x
help-for-help}).
@ -1086,7 +1086,7 @@ Emacs Lisp form at point.
@cindex pasting text on text terminals
@cindex bracketed paste mode
@item
On text terminals that support the ``bracketed paste mode'' EMacs now
On text terminals that support the ``bracketed paste mode'' Emacs now
uses that mode by default. This mode allows Emacs to distinguish
between pasted text and text typed by the user.
@ -2542,12 +2542,12 @@ load @code{dired-x} by adding the following to your @file{.emacs} file:
(require 'dired-x))
@end lisp
With @code{dired-x} loaded, @kbd{M-o} toggles omitting in each dired buffer.
With @code{dired-x} loaded, @kbd{C-x M-o} toggles omitting in each dired buffer.
You can make omitting the default for new dired buffers by putting the
following in your @file{.emacs}:
@lisp
(add-hook 'dired-mode-hook 'dired-omit-toggle)
(add-hook 'dired-mode-hook 'dired-omit-mode)
@end lisp
If you're tired of seeing backup files whenever you do an @samp{ls} at

View file

@ -454,7 +454,8 @@ setting this option to non-@code{nil}. The default value is @code{t}.
@item mm-external-terminal-program
@vindex mm-external-terminal-program
The program used to start an external terminal.
This should be a list of strings; typically something like
@samp{("xterm" "-e")} or @samp{("gnome-terminal" "--")}.
@item mm-enable-external
@vindex mm-enable-external

View file

@ -390,12 +390,37 @@ summary as shown below:
emacs -batch -l ert -f ert-summarize-tests-batch-and-exit output.log
@end example
@vindex ert-batch-print-level
@vindex ert-batch-print-length
ERT attempts to limit the output size for failed tests by choosing
conservative values for @code{print-level} and @code{print-length}
when printing Lisp values. This can in some cases make it difficult
to see which portions of those values are incorrect. Use
@code{ert-batch-print-level} and @code{ert-batch-print-length}
to customize that:
@example
emacs -batch -l ert -l my-tests.el \
--eval "(let ((ert-batch-print-level 10) \
(ert-batch-print-length 120)) \
(ert-run-tests-batch-and-exit))"
@end example
@vindex ert-batch-backtrace-line-length
Even modest settings for @code{print-level} and @code{print-length} can
produce extremely long lines in backtraces, however, with attendant
pauses in execution progress. Set
@code{ert-batch-backtrace-line-length} to t to use the value of
@code{backtrace-line-length}, @code{nil} to stop any limitations on backtrace
line lengths (that is, to get full backtraces), or a positive integer to
limit backtrace line length to that number.
@vindex ert-quiet
By default, ERT in batch mode is quite verbose, printing a line with
result after each test. This gives you progress information: how many
tests have been executed and how many there are. However, in some
cases this much output may be undesirable. In this case, set
@code{ert-quiet} variable to a non-nil value:
@code{ert-quiet} variable to a non-@code{nil} value:
@example
emacs -batch -l ert -l my-tests.el \

View file

@ -1,4 +1,4 @@
\input texinfo @c -*-texinfo; coding: utf-8 -*-
\input texinfo @c -*- mode: texinfo; coding: utf-8 -*-
@comment %**start of header
@setfilename ../../info/flymake.info
@set VERSION 1.2
@ -1145,7 +1145,7 @@ file are parsed.
For @file{file.h}, the include directives to look for are
@code{#include "file.h"}, @code{#include "../file.h"}, etc. Each
include is checked against a list of include directories
(see @ref{Getting the include directories}) to be sure it points to the
(@pxref{Getting the include directories}) to be sure it points to the
correct @file{file.h}.
First matching master file found stops the search. The master file is then

View file

@ -1004,7 +1004,7 @@ The fundamental building blocks of Gnus are @dfn{servers},
@dfn{groups}, and @dfn{articles}. Servers can be local or remote.
Each server maintains a list of groups, and those groups contain
articles. Because Gnus presents a unified interface to a wide variety
of servers, the vocabulary doesn't always quite line up (see @ref{FAQ
of servers, the vocabulary doesn't always quite line up (@pxref{FAQ
- Glossary}, for a more complete glossary). Thus a local maildir is
referred to as a ``server'' (@pxref{Finding the News}) the same as a
Usenet or IMAP server is; ``groups'' (@pxref{Group Buffer}) might mean
@ -28890,7 +28890,7 @@ gnus-agent-cache nil)} reverts to the old behavior.
@item
Dired integration
@code{gnus-dired-minor-mode} (see @ref{Other modes}) installs key
@code{gnus-dired-minor-mode} (@pxref{Other modes}) installs key
bindings in dired buffers to send a file as an attachment, open a file
using the appropriate mailcap entry, and print a file using the mailcap
entry.

View file

@ -633,7 +633,7 @@ Convert an Emacs :foreground property to a CSS color property.
(hfy-flatten-style @var{style})
@end lisp
Take @var{style} (see @ref{hfy-face-to-style-i}, @ref{hfy-face-to-style})
Take @var{style} (@pxref{hfy-face-to-style-i}, @pxref{hfy-face-to-style})
and merge any multiple attributes appropriately. Currently only font-size is
merged down to a single occurrence---others may need special handling, but I
haven't encountered them yet. Returns a @ref{hfy-style-assoc}.
@ -841,7 +841,7 @@ See @ref{hfy-display-class} for details of valid values for @var{class}.
@end lisp
Find face in effect at point P@. If overlays are to be considered
(see @ref{hfy-optimizations}) then this may return a @code{defface} style
(@pxref{hfy-optimizations}) then this may return a @code{defface} style
list of face properties instead of a face symbol.
@item hfy-bgcol

View file

@ -1018,16 +1018,16 @@ Send multimedia messages (@pxref{Adding Attachments}).
Read HTML messages (@pxref{HTML}).
@c -------------------------
@item
Use aliases and identities (see @ref{Aliases}, @pxref{Identities}).
Use aliases and identities (@pxref{Aliases}, @pxref{Identities}).
@c -------------------------
@item
Create different views of your mail (see @ref{Threading}, @pxref{Limits}).
Create different views of your mail (@pxref{Threading}, @pxref{Limits}).
@c -------------------------
@item
Deal with junk mail (@pxref{Junk}).
@c -------------------------
@item
Handle signed and encrypted messages (see @ref{Reading PGP},
Handle signed and encrypted messages (@pxref{Reading PGP},
@pxref{Sending PGP}).
@c -------------------------
@item
@ -1038,7 +1038,7 @@ Process mail that was sent with @command{shar} or @command{uuencode}
Use sequences conveniently (@pxref{Sequences}).
@c -------------------------
@item
Use the speedbar, tool bar, and menu bar (see @ref{Speedbar}, see @ref{Tool
Use the speedbar, tool bar, and menu bar (@pxref{Speedbar}, @pxref{Tool
Bar}, @pxref{Menu Bar}).
@c -------------------------
@item

File diff suppressed because it is too large Load diff

View file

@ -10811,6 +10811,18 @@ To turn off fontification for marked up text, you can set
~org-fontify-emphasized-text~ to ~nil~. To narrow down the list of
available markup syntax, you can customize ~org-emphasis-alist~.
Sometimes, when marked text also contains the marker character itself,
the result may be unsettling. For example,
#+begin_example
/One may expect this whole sentence to be italicized, but the
following ~user/?variable~ contains =/= character, which effectively
stops emphasis there./
#+end_example
You can use zero width space to help Org sorting out the ambiguity.
See [[*Escape Character]] for more details.
** Subscripts and Superscripts
:PROPERTIES:
:DESCRIPTION: Simple syntax for raising/lowering text.

View file

@ -524,8 +524,8 @@ you can use in PCL-CVS@. They are grouped together by type.
Most commands in PCL-CVS require that you have a @file{*cvs*}
buffer. The commands that you use to get one are listed below.
For each, a @samp{cvs} process will be run, the output will be parsed by
PCL-CVS, and the result will be printed in the @file{*cvs*} buffer (see
@ref{Buffer contents}, for a description of the buffer's contents).
PCL-CVS, and the result will be printed in the @file{*cvs*} buffer
(@pxref{Buffer contents}, for a description of the buffer's contents).
@table @kbd
@item M-x cvs-update

View file

@ -609,12 +609,6 @@ Use this symbol if you need to identify yourself in the Bitlbee channel
as follows: @code{identify secret}. The necessary arguments are the
nickname you want to use this for, and the password to use.
@item sasl
@cindex sasl authentication
Use this symbol if you want to use @acronym{SASL} authentication. The
necessary arguments are the nickname you want to use this for, and the
password to use.
@cindex gateway to other IM services
@cindex instant messaging, other services
@cindex Jabber
@ -633,6 +627,19 @@ the other instant messaging services, and Bitlbee will log you in. All
@code{rcirc} needs to know, is the login to your Bitlbee account. Don't
confuse the Bitlbee account with all the other accounts.
@item sasl
@cindex sasl authentication
Use this symbol if you want to use @acronym{SASL} authentication. The
necessary arguments are the nickname you want to use this for, and the
password to use.
@item certfp
@cindex certfp authentication
Use this symbol if you want to use CertFP authentication. The
necessary arguments are the path to the client certificate key and
password. The CertFP authentication requires a @acronym{TLS}
connection.
@end table
@end table

View file

@ -3388,8 +3388,8 @@ returns the exit code for it. When the user option
indication that the process has been interrupted, and returns a
corresponding string.
This remote process handling does not apply to @acronym{GVFS} (see
@ref{GVFS-based methods}) because the remote file system is mounted on
This remote process handling does not apply to @acronym{GVFS}
(@pxref{GVFS-based methods}) because the remote file system is mounted on
the local host and @value{tramp} accesses it by changing the
@code{default-directory}.
@ -3410,7 +3410,7 @@ might also add their name to this environment variable, like
For @value{tramp} to find the command on the remote, it must be
accessible through the default search path as setup by @value{tramp}
upon first connection. Alternatively, use an absolute path or extend
@code{tramp-remote-path} (see @ref{Remote programs}):
@code{tramp-remote-path} (@pxref{Remote programs}):
@lisp
@group
@ -5222,6 +5222,28 @@ time being you can suppress this error by the following code in your
@end lisp
@item
I get an error @samp{Remote file error: Not a valid Tramp file name
function `tramp-FOO-file-name-p'}
@value{tramp} has changed the signature of an internal function.
External packages implementing an own @value{tramp} backend must
follow this change. Please report this problem to the author of that
package.
For the running session, @value{tramp} disables the external package,
and you can continue to work. If you don't want to see this error
while activating @value{tramp}, you can suppress it by the same code
as above in your @file{~/.emacs}:
@lisp
@group
(setq debug-ignored-errors
(cons 'remote-file-error debug-ignored-errors))
@end group
@end lisp
@item
How to disable other packages from calling @value{tramp}?

View file

@ -243,7 +243,7 @@ components. Also notice that the first component,
@vindex vhdl-offsets-alist
@vindex offsets-alist @r{(vhdl-)}
Indentation for the current line is calculated using the syntactic
component list derived in step 1 above (see @ref{Syntactic
component list derived in step 1 above (@pxref{Syntactic
Analysis}). Each component contributes to the final total indentation
of the line in two ways.
@ -668,7 +668,7 @@ not handled by the mode directly.
@cindex custom indentation functions
One of the most common ways to customize VHDL Mode is by writing
@dfn{custom indentation functions} and associating them with specific
syntactic symbols (see @ref{Syntactic Symbols}). VHDL Mode itself
syntactic symbols (@pxref{Syntactic Symbols}). VHDL Mode itself
uses custom indentation functions to provide more sophisticated
indentation, for example when lining up selected signal assignments:
@example
@ -732,7 +732,7 @@ operator on the first line of the statement. Here is the lisp code
@end example
@noindent
Custom indent functions take a single argument, which is a syntactic
component cons cell (see @ref{Syntactic Analysis}). The
component cons cell (@pxref{Syntactic Analysis}). The
function returns an integer offset value that will be added to the
running total indentation for the line. Note that what actually gets
returned is the difference between the column that the signal assignment

View file

@ -591,9 +591,13 @@ If you cannot figure out the cause for the problem using the above,
native-compile the problematic file after setting the variable
'comp-libgccjit-reproducer' to a non-nil value. That should produce a
file named ELNFILENAME_libgccjit_repro.c, where ELNFILENAME is the
name of the problematic .eln file, in the same directory where the
.eln file is produced. Then attach that reproducer C file to your bug
report.
name of the problematic .eln file, either in the same directory where
the .eln file is produced, or under your ~/.emacs.d/eln-cache (which
one depends on how the native-compilation is invoked). It is also
possible that the reproducer file's name will be something like
subr--trampoline-XXXXXXX_FUNCTION_libgccjit_repro.c, where XXXXXXX is
a long string of hex digits and FUNCTION is some function from the
compiled .el file. Attach that reproducer C file to your bug report.
** Following longjmp call.

View file

@ -103,6 +103,34 @@ the list at the end of this file.
./configure CC='gcc -m64' # GCC
./configure CC='cc -m64' # Oracle Developer Studio
** Haiku
On 32-bit Haiku it is required that the newer GCC 8 be used, instead
of the legacy GCC 2 used by default. This can be achieved by
invoking configure inside a shell launched by the 'setarch' program
invoked as 'setarch x86'.
When building with packages discovered through pkg-config, such as
libpng, on a GCC 2/GCC 8 hybrid system, simply evaluating 'setarch
x86' is insufficient to ensure that all required libraries are found
at their correct locations. To avoid this problem, set the
environment variable 'PKG_CONFIG_PATH' to the GCC 8 pkg-config
directory at '/system/develop/lib/x86/pkgconfig/' before configuring
Emacs.
If GCC complains about not being able to resolve symbols such as
"BHandler::LockLooper", you are almost certainly experiencing this
problem.
Haiku running on non-x86 systems has not been tested. It is
anticipated that Haiku running on big-endian systems will experience
problems when Emacs is built with Haiku windowing support, but there
doesn't seem to be any reliable way to get Haiku running on a
big-endian system at present.
The earliest release of Haiku that will successfully compile Emacs
is R1/Beta2. For windowing support, R1/Beta3 or later is required.
* Obsolete platforms

233
etc/NEWS
View file

@ -24,12 +24,41 @@ applies, and please also update docstrings as needed.
* Installation Changes in Emacs 29.1
** Emacs has been ported to the Haiku operating system.
The configuration process should automatically detect and build for
Haiku. There is also an optional window-system port to Haiku, which
can be enabled by configuring Emacs with the option '--with-be-app',
which will require the Haiku Application Kit development headers and a
C++ compiler to be present on your system. If Emacs is not built with
the option '--with-be-app', the resulting Emacs will only run in
text-mode terminals.
+++
*** Cairo drawing support has been enabled for Haiku builds.
To enable Cairo support, ensure that the Cairo and FreeType
development files are present on your system, and configure Emacs with
'--with-be-cairo'.
---
*** Double buffering is now enabled on the Haiku operating system.
Unlike X, there is no compile-time option to enable or disable
double-buffering. If you wish to disable double-buffering, change the
frame parameter `inhibit-double-buffering' instead.
** Emacs now installs the ".pdmp" file using a unique fingerprint in the name.
The file is typically installed using a file name akin to
"...dir/libexec/emacs/29.1/x86_64-pc-linux-gnu/emacs-<fingerprint>.pdmp".
If a constant file name is required, the file can be renamed to
"emacs.pdmp", and Emacs will find it during startup anyway.
** Emacs now supports use of XInput 2 for input events.
If your X server has support and you have the XInput 2 development headers
installed, you can configure Emacs with the option '--with-xinput2' to enable
this support.
The named feature `xinput2' can be used to test for the presence of
XInput 2 support from Lisp programs.
* Startup Changes in Emacs 29.1
@ -46,6 +75,38 @@ time.
* Changes in Emacs 29.1
+++
** New face 'mode-line-active'.
This inherits from the 'mode-line' face, but is the face actually used
on the mode lines (along with 'mode-line-inactive').
---
** The mode line now uses a proportional font by default.
To get the old monospaced mode line back, customize the
'mode-line-active' and 'mode-line-inactive' faces not to inherit from
the 'variable-pitch' face, or add this to your ~/.emacs:
(set-face-attribute 'mode-line-active nil :inherit 'mode-line)
(set-face-attribute 'mode-line-inactive nil :inherit 'mode-line)
+++
** New function 'buffer-text-pixel-size'.
This is similar to 'window-text-pixel-size', but can be used when the
buffer isn't displayed.
+++
** New X resource: "borderThickness".
This controls the thickness of the external borders of the menu bars
and pop-up menus.
---
** New minor mode 'pixel-scroll-precision-mode'.
When enabled, and if your mouse supports it, you can scroll the
display up or down at pixel resolution, according to what your mouse
wheel reports. Unlike 'pixel-scroll-mode', this mode scrolls the
display pixel-by-pixel, as opposed to only animating line-by-line
scrolls.
** Terminal Emacs
---
@ -54,6 +115,18 @@ This is in addition to previously-supported ways of discovering 24-bit
color support: either via the "RGB" or "setf24" capabilities, or if
the 'COLORTERM' environment variable is set to the value "truecolor".
+++
** New ERT variables 'ert-batch-print-length' and 'ert-batch-print-level'.
These variables will override 'print-length' and 'print-level' when
printing Lisp values in ERT batch test results.
---
** Redefining an ERT test in batch mode now signals an error
Executing 'ert-deftest' with the same name as an existing test causes
the previous definition to be discarded, which was probably not
intended when this occurs in batch mode. To remedy the error, rename
tests so that they all have unique names.
** Emoji
+++
@ -130,6 +203,11 @@ For example, a 'display-buffer-alist' entry of
will make the body of the chosen window 40 columns wide. For the
height use 'window-height' in combination with 'body-lines'.
** Tab Bars and Tab Lines
---
*** 'C-x t RET' creates a new tab when the provided tab name doesn't exist.
** Better detection of text suspiciously reordered on display.
The function 'bidi-find-overridden-directionality' has been extended
to detect reordering effects produced by embeddings and isolates
@ -205,6 +283,15 @@ The user option 'comint-terminfo-terminal' and variable
'system-uses-terminfo' can now be set as connection-local variables to
change the terminal used on a remote host.
** Mwheel
---
*** New user options for alternate wheel events.
The options 'mouse-wheel-down-alternate-event', 'mouse-wheel-up-alternate-event',
'mouse-wheel-left-alternate-event', and 'mouse-wheel-right-alternate-event' have
been added to better support systems where two kinds of wheel events can be
received.
* Changes in Specialized Modes and Packages in Emacs 29.1
@ -261,6 +348,10 @@ the common "utm_" trackers from URLs.
** Gnus
---
*** New face 'gnus-header'.
All other 'gnus-header-*' faces inherit from this face now.
+++
*** New user option 'gnus-treat-emojize-symbols'.
If non-nil, symbols that have an emoji representation will be
@ -374,7 +465,7 @@ This works like 'image-transform-fit-to-window'.
*** New user option 'image-auto-resize-max-scale-percent'.
The new 'fit-window' option will never scale an image more than this
much (in percent). It is nil by default.
much (in percent). It is nil by default, which means no limit.
** Image-Dired
@ -474,6 +565,11 @@ This is a convenience function to extract the field data from
Using this option you can control how the xwidget-webkit buffers are
named.
---
*** New user option 'xwidget-webkit-cookie-file'.
Using this option you can control whether the xwidget-webkit buffers
save cookies set by web pages, and if so, in which file to save them.
+++
*** New minor mode 'xwidget-webkit-edit-mode'.
When this mode is enabled, self-inserting characters and other common
@ -482,10 +578,15 @@ WebKit widget.
+++
*** New minor mode 'xwidget-webkit-isearch-mode'.
This mode acts similarly to incremental search, and allows to search
This mode acts similarly to incremental search, and allows searching
the contents of a WebKit widget. In xwidget-webkit mode, it is bound
to 'C-s' and 'C-r'.
+++
*** New command 'xwidget-webkit-browse-history'.
This command displays a buffer containing the page load history of
the current WebKit widget, and allows you to navigate it.
---
*** On X11, the WebKit inspector is now available inside xwidgets.
To access the inspector, right click on the widget and select "Inspect
@ -497,6 +598,14 @@ The newly created buffer will be displayed via 'display-buffer', which
can be customized through the usual mechanism of 'display-buffer-alist'
and friends.
** Tramp
---
*** Tramp supports abbreviating remote home directories now.
When calling 'abbreviate-file-name' on a Tramp filename, the result
will abbreviate the user's home directory, for example by abbreviating
"/ssh:user@host:/home/user" to "/ssh:user@host:~".
* New Modes and Packages in Emacs 29.1
@ -585,6 +694,85 @@ Use 'exif-parse-file' and 'exif-field' instead.
* Lisp Changes in Emacs 29.1
+++
** New function 'get-display-property'.
This is like 'get-text-property', but works on the 'display' text
property.
+++
** New function 'add-text-display-property'.
This is like 'put-text-property', but works on the 'display' text
property.
+++
** New 'min-width' 'display' property.
This allows setting a minimum display width for a region of text.
** Keymaps and key definitions
+++
*** New functions for defining and manipulating keystrokes have been added.
These all take just the syntax defined by 'key-valid-p'. None of the
older functions have been depreciated or altered, but are deemphasised
in the documentation.
+++
*** Use 'keymap-set' instead of 'define-key'.
+++
*** Use 'keymap-global-set' instead of 'global-set-key'.
+++
*** Use 'keymap-local-set' instead of 'local-set-key'.
+++
*** Use 'keymap-global-unset' instead of 'global-unset-key'.
+++
*** Use 'keymap-local-unset' instead of 'local-unset-key'.
+++
*** Use 'keymap-substitute' instead of 'substitute-key-definition'.
+++
*** Use 'keymap-set-after' instead of 'define-key-after'.
+++
*** Use 'keymap-lookup' instead of 'lookup-keymap' and 'key-binding'.
+++
*** Use 'keymap-local-lookup' instead of 'local-key-binding'.
+++
*** Use 'keymap-global-lookup' instead of 'global-key-binding'.
+++
*** 'define-key' now takes an optional REMOVE argument.
If non-nil, remove the definition from the keymap. This is subtly
different from setting a definition to nil (when the keymap has a
parent).
+++
*** New function 'key-valid-p'.
The 'kbd' function is quite permissive, and will try to return
something usable even if the syntax of the argument isn't completely
correct. The 'key-valid-p' predicate does a stricter check of the
syntax.
---
*** New function 'key-parse'.
This is like 'kbd', but only returns vectors instead of a mix of
vectors and strings.
+++
** New substitution in docstrings and 'substitute-command-keys'.
Use \\`KEYSEQ' to insert a literal key sequence "KEYSEQ" (for example
\\`C-k') in a docstring or when calling 'substitute-command-keys',
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 'read-key-sequence'. It must be
a valid key sequence according to 'key-valid-p'.
+++
** New function 'file-name-split'.
This returns a list of all the components of a file name.
@ -632,6 +820,9 @@ This convenience function is useful when writing code that parses
files at run-time, and allows Lisp programs to re-parse files only
when they have changed.
+++
** 'abbreviate-file-name' now respects magic file name handlers.
---
** New function 'font-has-char-p'.
This can be used to check whether a specific font has a glyph for a
@ -674,13 +865,6 @@ The 'tabulated-list-entries' variable now supports using an image
descriptor, which means to insert an image in that column instead of
text. See the documentation string of that variable for details.
+++
** 'define-key' now understands a new strict 'kbd' representation for keys.
The '(define-key map ["C-c M-f"] #'some-command)' syntax is now
supported, and is like the 'kbd' representation, but is stricter. If
the string doesn't represent a valid key sequence, an error is
signalled (both when evaluating and byte compiling).
+++
** :keys in 'menu-item' can now be a function.
If so, it is called whenever the menu is computed, and can be used to
@ -717,13 +901,6 @@ This macro allows defining keymap variables more conveniently.
** 'kbd' can now be used in built-in, preloaded libraries.
It no longer depends on edmacro.el and cl-lib.el.
+++
** New function 'kbd-valid-p'.
The 'kbd' function is quite permissive, and will try to return
something usable even if the syntax of the argument isn't completely
correct. The 'kbd-valid-p' predicate does a stricter check of the
syntax.
+++
** New function 'image-at-point-p'.
This function returns t if point is on a valid image, and nil
@ -781,6 +958,21 @@ markup, and passing the URI of the file as an argument to
Some new functions, such as 'xwidget-webkit-search', have been added
for performing searches on WebKit xwidgets.
+++
*** New function 'xwidget-webkit-back-forward-list'.
This function is used to obtain the history of page-loads in a given
WebKit xwidget.
+++
*** New function 'xwidget-webkit-estimated-load-progress'.
This function is used to obtain the estimated progress of page loading
in a given WebKit xwidget.
+++
*** New function 'xwidget-webkit-stop-loading'.
This function is used to terminate all data transfer during page loads
in a given WebKit xwidget.
+++
*** 'load-changed' xwidget events are now more detailed.
In particular, they can now have different arguments based on the
@ -792,8 +984,13 @@ commits to the load.
+++
*** New event type 'xwidget-display-event'.
These events are sent whenever an xwidget requests that Emacs display
another xwidget. The only argument to this event is the xwidget that
should be displayed.
another xwidget. The only arguments to this event are the xwidget
that should be displayed, and the xwidget that asked to display it.
+++
*** New function 'xwidget-webkit-set-cookie-storage-file'.
This function is used to control where and if an xwidget stores
cookies set by web pages on disk.
* Changes in Emacs 29.1 on Non-Free Operating Systems

View file

@ -1022,6 +1022,15 @@ modern fonts are used, such as Noto Emoji or Ebrima.
The solution is to switch to a configuration that uses HarfBuzz as its
shaping engine, where these problems don't exist.
** On Haiku, some proportionally-spaced fonts display with artifacting.
This is a Haiku bug: https://dev.haiku-os.org/ticket/17229, which can
be remedied by using a different font that does not exhibit this
problem, or by configuring Emacs '--with-be-cairo'.
So far, Bitstream Charter and Noto Sans have been known to exhibit
this problem, while Noto Sans Display is known to not do so.
* Internationalization problems
** M-{ does not work on a Spanish PC keyboard.
@ -1105,6 +1114,13 @@ In your ~/.Xresources file, then run
And restart Emacs.
** On Haiku, BeCJK doesn't work properly with Emacs
Some popular Haiku input methods such BeCJK are known to behave badly
when interacting with Emacs, in ways such as stealing input focus and
displaying popup windows that don't disappear. If you are affected,
you should use an Emacs input method instead.
* X runtime problems
** X keyboard problems

View file

@ -310,6 +310,9 @@ G:/cygwin/dev/build-myproj.xml:54: Compiler Adapter 'javac' can't be found.
file:G:/cygwin/dev/build-myproj.xml:54: Compiler Adapter 'javac' can't be found.
{standard input}:27041: Warning: end of file not at end of a line; newline inserted
boost/container/detail/flat_tree.hpp:589:25: [ skipping 5 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
|
|board.h:60:21:
| 60 | #define I(b, C) ((C).y * (b)->width + (C).x)
* Guile backtrace, 2.0.11

View file

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

View file

@ -4,8 +4,8 @@
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
;; Version: 1.6.0
;; Package-Requires: ((emacs "26.1"))
;; Version: 1.7.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility
;; This file is part of GNU Emacs.

File diff suppressed because it is too large Load diff

View file

@ -4,8 +4,8 @@
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
;; Version: 1.6.0
;; Package-Requires: ((emacs "26.1"))
;; Version: 1.7.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility
;; This file is part of GNU Emacs.

View file

@ -27,7 +27,9 @@ EMACSOPT = -batch --no-site-file --no-site-lisp
# ==================== Things 'configure' will edit ====================
CC=@CC@
CXX=@CXX@
CFLAGS=@CFLAGS@
CXXFLAGS=@CXXFLAGS@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
@ -130,6 +132,11 @@ MKDIR_P = @MKDIR_P@
# ========================== Lists of Files ===========================
## Haiku build-time support
HAVE_BE_APP=@HAVE_BE_APP@
HAIKU_LIBS=@HAIKU_LIBS@
HAIKU_CFLAGS=@HAIKU_CFLAGS@
# emacsclientw.exe for MinGW, empty otherwise
CLIENTW = @CLIENTW@
@ -143,7 +150,11 @@ UTILITIES = hexl${EXEEXT} \
$(if $(with_mailutils), , movemail${EXEEXT}) \
$(and $(use_gamedir), update-game-score${EXEEXT})
ifeq ($(HAVE_BE_APP),yes)
DONT_INSTALL= make-docfile${EXEEXT} make-fingerprint${EXEEXT} be-resources
else
DONT_INSTALL= make-docfile${EXEEXT} make-fingerprint${EXEEXT}
endif
# Like UTILITIES, but they're not system-dependent, and should not be
# deleted by the distclean target.
@ -230,6 +241,10 @@ WINDRES = @WINDRES@
## Some systems define this to request special libraries.
LIBS_SYSTEM = @LIBS_SYSTEM@
# Flags that could be in WARN_CFLAGS, but are invalid for C++.
NON_CXX_CFLAGS = -Wmissing-prototypes -Wnested-externs -Wold-style-definition \
-Wstrict-prototypes -Wno-override-init
BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \
$(WARN_CFLAGS) $(WERROR_CFLAGS) \
-I. -I../src -I../lib \
@ -238,6 +253,9 @@ BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \
ALL_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS}
CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
ALL_CXXFLAGS = $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \
${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} ${HAIKU_CFLAGS}
# Configuration files for .o files to depend on.
config_h = ../src/config.h $(srcdir)/../src/conf_post.h
@ -407,6 +425,9 @@ emacsclientw${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(CLIENTRES) $(config_h)
$(LOADLIBES) \
$(LIB_WSOCK32) $(LIB_EACCESS) $(LIBS_ECLIENT) -o $@
be-resources: ${srcdir}/be_resources.cc ${config_h}
$(AM_V_CXXLD)$(CXX) ${ALL_CXXFLAGS} ${HAIKU_LIBS} $< -o $@
NTINC = ${srcdir}/../nt/inc
NTDEPS = $(NTINC)/ms-w32.h $(NTINC)/sys/stat.h $(NTINC)/inttypes.h \
$(NTINC)/stdint.h $(NTINC)/pwd.h $(NTINC)/sys/time.h $(NTINC)/stdbool.h \

144
lib-src/be_resources.cc Normal file
View file

@ -0,0 +1,144 @@
/* Haiku window system support
Copyright (C) 2021 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <SupportDefs.h>
#include <Path.h>
#include <AppFileInfo.h>
#include <TranslationUtils.h>
#include <Application.h>
#include <Catalog.h>
#include <Roster.h>
using namespace std;
static void
be_perror (status_t code, char *arg)
{
if (code != B_OK)
{
switch (code)
{
case B_BAD_VALUE:
fprintf (stderr, "%s: Bad value\n", arg);
break;
case B_ENTRY_NOT_FOUND:
fprintf (stderr, "%s: Not found\n", arg);
break;
case B_PERMISSION_DENIED:
fprintf (stderr, "%s: Permission denied\n", arg);
break;
case B_NO_MEMORY:
fprintf (stderr, "%s: No memory\n", arg);
break;
case B_LINK_LIMIT:
fprintf (stderr, "%s: Link limit reached\n", arg);
break;
case B_BUSY:
fprintf (stderr, "%s: Busy\n", arg);
break;
case B_NO_MORE_FDS:
fprintf (stderr, "%s: No more file descriptors\n", arg);
break;
case B_FILE_ERROR:
fprintf (stderr, "%s: File error\n", arg);
break;
default:
fprintf (stderr, "%s: Unknown error\n", arg);
}
}
else
{
abort ();
}
}
int
main (int argc, char **argv)
{
BApplication app ("application/x-vnd.GNU-emacs-resource-helper");
BFile file;
BBitmap *icon;
BAppFileInfo info;
status_t code;
struct version_info vinfo;
char *v = strdup (PACKAGE_VERSION);
if (argc != 3)
{
printf ("be-resources ICON FILE: make FILE appropriate for Emacs.\n");
return EXIT_FAILURE;
}
code = file.SetTo (argv[2], B_READ_WRITE);
if (code != B_OK)
{
be_perror (code, argv[2]);
return EXIT_FAILURE;
}
code = info.SetTo (&file);
if (code != B_OK)
{
be_perror (code, argv[2]);
return EXIT_FAILURE;
}
code = info.SetAppFlags (B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY);
if (code != B_OK)
{
be_perror (code, argv[2]);
return EXIT_FAILURE;
}
icon = BTranslationUtils::GetBitmapFile (argv[1], NULL);
if (!icon)
{
be_perror (B_ERROR, argv[1]);
return EXIT_FAILURE;
}
info.SetIcon (icon, B_MINI_ICON);
info.SetIcon (icon, B_LARGE_ICON);
info.SetSignature ("application/x-vnd.GNU-emacs");
v = strtok (v, ".");
vinfo.major = atoi (v);
v = strtok (NULL, ".");
vinfo.middle = atoi (v);
v = strtok (NULL, ".");
vinfo.minor = v ? atoi (v) : 0;
vinfo.variety = 0;
vinfo.internal = 0;
strncpy ((char *) &vinfo.short_info, PACKAGE_VERSION,
sizeof vinfo.short_info - 1);
strncpy ((char *) &vinfo.long_info, PACKAGE_STRING,
sizeof vinfo.long_info - 1);
info.SetVersionInfo (&vinfo, B_APP_VERSION_KIND);
return EXIT_SUCCESS;
}

View file

@ -603,6 +603,8 @@ decode_options (int argc, char **argv)
alt_display = "ns";
#elif defined (HAVE_NTGUI)
alt_display = "w32";
#elif defined (HAVE_HAIKU)
alt_display = "be";
#endif
#ifdef HAVE_PGTK

View file

@ -403,7 +403,7 @@ argument."
(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.
The user is asked to type \\`y' or \\`n' for each occurrence.
A prefix argument means don't query; expand all abbrevs."
(interactive "r\nP")
(save-excursion

View file

@ -91,7 +91,7 @@ as a PDF file."
:group 'processes)
(defface ansi-color-bold
'((t :inherit 'bold))
'((t :inherit bold))
"Face used to render bold text."
:group 'ansi-colors
:version "28.1")
@ -103,13 +103,13 @@ as a PDF file."
:version "28.1")
(defface ansi-color-italic
'((t :inherit 'italic))
'((t :inherit italic))
"Face used to render italic text."
:group 'ansi-colors
:version "28.1")
(defface ansi-color-underline
'((t :inherit 'underline))
'((t :inherit underline))
"Face used to render underlined text."
:group 'ansi-colors
:version "28.1")

View file

@ -501,8 +501,9 @@ mouse-1: Display Line and Column Mode Menu"))
(defvar mode-line-position
`((:propertize
mode-line-percent-position
(" " mode-line-percent-position)
local-map ,mode-line-column-line-number-mode-map
display (min-width (5.0))
mouse-face mode-line-highlight
;; XXX needs better description
help-echo "Window Scroll Percentage
@ -521,26 +522,31 @@ mouse-1: Display Line and Column Mode Menu")))
(10
(:propertize
mode-line-position-column-line-format
display (min-width (10.0))
,@mode-line-position--column-line-properties))
(10
(:propertize
(:eval (string-replace
"%c" "%C" (car mode-line-position-column-line-format)))
display (min-width (10.0))
,@mode-line-position--column-line-properties)))
(6
(:propertize
mode-line-position-line-format
display (min-width (6.0))
,@mode-line-position--column-line-properties))))
(column-number-mode
(column-number-indicator-zero-based
(6
(:propertize
mode-line-position-column-format
display (min-width (6.0))
(,@mode-line-position--column-line-properties)))
(6
(:propertize
(:eval (string-replace
"%c" "%C" (car mode-line-position-column-format)))
display (min-width (6.0))
,@mode-line-position--column-line-properties))))))
"Mode line construct for displaying the position in the buffer.
Normally displays the buffer percentage and, optionally, the
@ -597,10 +603,14 @@ By default, this shows the information specified by `global-mode-string'.")
(let ((standard-mode-line-format
(list "%e"
'mode-line-front-space
'mode-line-mule-info
'mode-line-client
'mode-line-modified
'mode-line-remote
(list
:propertize
(list ""
'mode-line-mule-info
'mode-line-client
'mode-line-modified
'mode-line-remote)
'display '(min-width (5.0)))
'mode-line-frame-identification
'mode-line-buffer-identification
" "

View file

@ -214,31 +214,28 @@ A non-nil value may result in truncated bookmark names."
;;;###autoload (define-key ctl-x-r-map "l" 'bookmark-bmenu-list)
;;;###autoload
(defvar bookmark-map
(let ((map (make-sparse-keymap)))
;; Read the help on all of these functions for details...
(define-key map "x" 'bookmark-set)
(define-key map "m" 'bookmark-set) ;"m"ark
(define-key map "M" 'bookmark-set-no-overwrite) ;"M"aybe mark
(define-key map "j" 'bookmark-jump)
(define-key map "g" 'bookmark-jump) ;"g"o
(define-key map "o" 'bookmark-jump-other-window)
(define-key map "5" 'bookmark-jump-other-frame)
(define-key map "i" 'bookmark-insert)
(define-key map "e" 'edit-bookmarks)
(define-key map "f" 'bookmark-insert-location) ;"f"ind
(define-key map "r" 'bookmark-rename)
(define-key map "d" 'bookmark-delete)
(define-key map "D" 'bookmark-delete-all)
(define-key map "l" 'bookmark-load)
(define-key map "w" 'bookmark-write)
(define-key map "s" 'bookmark-save)
map)
"Keymap containing bindings to bookmark functions.
(defvar-keymap bookmark-map
:doc "Keymap containing bindings to bookmark functions.
It is not bound to any key by default: to bind it
so that you have a bookmark prefix, just use `global-set-key' and bind a
key of your choice to variable `bookmark-map'. All interactive bookmark
functions have a binding in this keymap.")
functions have a binding in this keymap."
"x" #'bookmark-set
"m" #'bookmark-set ;"m"ark
"M" #'bookmark-set-no-overwrite ;"M"aybe mark
"j" #'bookmark-jump
"g" #'bookmark-jump ;"g"o
"o" #'bookmark-jump-other-window
"5" #'bookmark-jump-other-frame
"i" #'bookmark-insert
"e" #'edit-bookmarks
"f" #'bookmark-insert-location ;"f"ind
"r" #'bookmark-rename
"d" #'bookmark-delete
"D" #'bookmark-delete-all
"l" #'bookmark-load
"w" #'bookmark-write
"s" #'bookmark-save)
;;;###autoload (fset 'bookmark-map bookmark-map)
@ -479,7 +476,10 @@ See user option `bookmark-set-fringe'."
(dolist (buf (buffer-list))
(with-current-buffer buf
(when (equal filename buffer-file-name)
(setq overlays (overlays-in pos (1+ pos)))
(setq overlays
(save-excursion
(goto-char pos)
(overlays-in (point-at-bol) (1+ (point-at-bol)))))
(while (and (not found) (setq temp (pop overlays)))
(when (eq 'bookmark (overlay-get temp 'category))
(delete-overlay (setq found temp))))))))))
@ -810,11 +810,9 @@ CODING is the symbol of the coding-system in which the file is encoded."
(define-obsolete-function-alias 'bookmark-maybe-message 'message "27.1")
(defvar bookmark-minibuffer-read-name-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map minibuffer-local-map)
(define-key map "\C-w" 'bookmark-yank-word)
map))
(defvar-keymap bookmark-minibuffer-read-name-map
:parent minibuffer-local-map
"C-w" #'bookmark-yank-word)
(defun bookmark-set-internal (prompt name overwrite-or-push)
"Set a bookmark using specified NAME or prompting with PROMPT.
@ -918,7 +916,7 @@ it removes only the first instance of a bookmark with that name from
the list of bookmarks.)"
(interactive (list nil current-prefix-arg))
(let ((prompt
(if no-overwrite "Set bookmark" "Set bookmark unconditionally")))
(if no-overwrite "Append bookmark named" "Set bookmark named")))
(bookmark-set-internal prompt name (if no-overwrite 'push 'overwrite))))
;;;###autoload
@ -989,12 +987,10 @@ annotations."
"Function to return default text to use for a bookmark annotation.
It takes one argument, the name of the bookmark, as a string.")
(defvar bookmark-edit-annotation-mode-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map text-mode-map)
(define-key map "\C-c\C-c" 'bookmark-send-edited-annotation)
map)
"Keymap for editing an annotation of a bookmark.")
(defvar-keymap bookmark-edit-annotation-mode-map
:doc "Keymap for editing an annotation of a bookmark."
:parent text-mode-map
"C-c C-c" #'bookmark-send-edited-annotation)
(defun bookmark-insert-annotation (bookmark-name-or-record)
"Insert annotation for BOOKMARK-NAME-OR-RECORD at point."
@ -1697,44 +1693,42 @@ unique numeric suffixes \"<2>\", \"<3>\", etc."
(defvar bookmark-bmenu-hidden-bookmarks ())
(defvar bookmark-bmenu-mode-map
(let ((map (make-keymap)))
(set-keymap-parent map tabulated-list-mode-map)
(define-key map "v" 'bookmark-bmenu-select)
(define-key map "w" 'bookmark-bmenu-locate)
(define-key map "5" 'bookmark-bmenu-other-frame)
(define-key map "2" 'bookmark-bmenu-2-window)
(define-key map "1" 'bookmark-bmenu-1-window)
(define-key map "j" 'bookmark-bmenu-this-window)
(define-key map "\C-c\C-c" 'bookmark-bmenu-this-window)
(define-key map "f" 'bookmark-bmenu-this-window)
(define-key map "\C-m" 'bookmark-bmenu-this-window)
(define-key map "o" 'bookmark-bmenu-other-window)
(define-key map "\C-o" 'bookmark-bmenu-switch-other-window)
(define-key map "s" 'bookmark-bmenu-save)
(define-key map "\C-x\C-s" 'bookmark-bmenu-save)
(define-key map "k" 'bookmark-bmenu-delete)
(define-key map "\C-d" 'bookmark-bmenu-delete-backwards)
(define-key map "x" 'bookmark-bmenu-execute-deletions)
(define-key map "d" 'bookmark-bmenu-delete)
(define-key map "D" 'bookmark-bmenu-delete-all)
(define-key map " " 'next-line)
(define-key map "\177" 'bookmark-bmenu-backup-unmark)
(define-key map "u" 'bookmark-bmenu-unmark)
(define-key map "U" 'bookmark-bmenu-unmark-all)
(define-key map "m" 'bookmark-bmenu-mark)
(define-key map "M" 'bookmark-bmenu-mark-all)
(define-key map "l" 'bookmark-bmenu-load)
(define-key map "r" 'bookmark-bmenu-rename)
(define-key map "R" 'bookmark-bmenu-relocate)
(define-key map "t" 'bookmark-bmenu-toggle-filenames)
(define-key map "a" 'bookmark-bmenu-show-annotation)
(define-key map "A" 'bookmark-bmenu-show-all-annotations)
(define-key map "e" 'bookmark-bmenu-edit-annotation)
(define-key map "/" 'bookmark-bmenu-search)
(define-key map [mouse-2] 'bookmark-bmenu-other-window-with-mouse)
map))
(defvar-keymap bookmark-bmenu-mode-map
:doc "Keymap for `bookmark-bmenu-mode'."
:parent tabulated-list-mode-map
"v" #'bookmark-bmenu-select
"w" #'bookmark-bmenu-locate
"5" #'bookmark-bmenu-other-frame
"2" #'bookmark-bmenu-2-window
"1" #'bookmark-bmenu-1-window
"j" #'bookmark-bmenu-this-window
"C-c C-c" #'bookmark-bmenu-this-window
"f" #'bookmark-bmenu-this-window
"C-m" #'bookmark-bmenu-this-window
"o" #'bookmark-bmenu-other-window
"C-o" #'bookmark-bmenu-switch-other-window
"s" #'bookmark-bmenu-save
"C-x C-s" #'bookmark-bmenu-save
"k" #'bookmark-bmenu-delete
"C-d" #'bookmark-bmenu-delete-backwards
"x" #'bookmark-bmenu-execute-deletions
"d" #'bookmark-bmenu-delete
"D" #'bookmark-bmenu-delete-all
"SPC" #'next-line
"DEL" #'bookmark-bmenu-backup-unmark
"u" #'bookmark-bmenu-unmark
"U" #'bookmark-bmenu-unmark-all
"m" #'bookmark-bmenu-mark
"M" #'bookmark-bmenu-mark-all
"l" #'bookmark-bmenu-load
"r" #'bookmark-bmenu-rename
"R" #'bookmark-bmenu-relocate
"t" #'bookmark-bmenu-toggle-filenames
"a" #'bookmark-bmenu-show-annotation
"A" #'bookmark-bmenu-show-all-annotations
"e" #'bookmark-bmenu-edit-annotation
"/" #'bookmark-bmenu-search
"<mouse-2>" #'bookmark-bmenu-other-window-with-mouse)
(easy-menu-define bookmark-menu bookmark-bmenu-mode-map
"Menu for `bookmark-bmenu'."

View file

@ -969,7 +969,8 @@ This \"dumb\" driver will be present in Gnuplot 3.0."
(define-key calc-dumb-map "\C-c\C-c" 'exit-recursive-edit)))
(use-local-map calc-dumb-map)
(setq truncate-lines t)
(message "Type `q' or `C-c C-c' to return to Calc")
(message (substitute-command-keys
"Type \\`q' or \\`C-c C-c' to return to Calc"))
(recursive-edit)
(bury-buffer "*Gnuplot Trail*")))

View file

@ -50,25 +50,25 @@
(beep))))
(defun calc-help-for-help (arg)
"You have typed `h', the Calc help character. Type a Help option:
"You have typed \\`h', the Calc help character. Type a Help option:
B calc-describe-bindings. Display a table of all key bindings.
H calc-full-help. Display all `?' key messages at once.
\\`B' calc-describe-bindings. Display a table of all key bindings.
\\`H' calc-full-help. Display all \\`?' key messages at once.
I calc-info. Read the Calc manual using the Info system.
T calc-tutorial. Read the Calc tutorial using the Info system.
S calc-info-summary. Read the Calc summary using the Info system.
\\`I' calc-info. Read the Calc manual using the Info system.
\\`T' calc-tutorial. Read the Calc tutorial using the Info system.
\\`S' calc-info-summary. Read the Calc summary using the Info system.
C calc-describe-key-briefly. Look up the command name for a given key.
K calc-describe-key. Look up a key's documentation in the manual.
F calc-describe-function. Look up a function's documentation in the manual.
V calc-describe-variable. Look up a variable's documentation in the manual.
\\`C' calc-describe-key-briefly. Look up the command name for a given key.
\\`K' calc-describe-key. Look up a key's documentation in the manual.
\\`F' calc-describe-function. Look up a function's documentation in the manual.
\\`V' calc-describe-variable. Look up a variable's documentation in the manual.
N calc-view-news. Display Calc history of changes.
\\`N' calc-view-news. Display Calc history of changes.
C-c Describe conditions for copying Calc.
C-d Describe how you can get a new copy of Calc or report a bug.
C-w Describe how there is no warranty for Calc."
\\`C-c' Describe conditions for copying Calc.
\\`C-d' Describe how you can get a new copy of Calc or report a bug.
\\`C-w' Describe how there is no warranty for Calc."
(interactive "P")
(if calc-dispatch-help
(let (key)

View file

@ -216,26 +216,28 @@ Calc user interface as before (either C-x * C or C-x * K; initially C-x * C)."
(defun calc-help ()
(interactive)
(let ((msgs
'("Press `h' for complete help; press `?' repeatedly for a summary"
"Letter keys: Negate; Precision; Yank; Why; Xtended cmd; Quit"
"Letter keys: SHIFT + Undo, reDo; Inverse, Hyperbolic, Option"
"Letter keys: SHIFT + sQrt; Sin, Cos, Tan; Exp, Ln, logB"
"Letter keys: SHIFT + Floor, Round; Abs, conJ, arG; Pi"
"Letter keys: SHIFT + Num-eval; More-recn; eXec-kbd-macro; Keep-args"
"Other keys: +, -, *, /, ^, \\ (int div), : (frac div)"
"Other keys: & (1/x), | (concat), % (modulo), ! (factorial)"
"Other keys: \\=' (alg-entry), = (eval), \\=` (edit); M-RET (last-args)"
"Other keys: SPC/RET (enter/dup), LFD (over); < > (scroll horiz)"
"Other keys: DEL (drop), M-DEL (drop-above); { } (scroll vert)"
"Other keys: TAB (swap/roll-dn), M-TAB (roll-up)"
"Other keys: [ , ; ] (vector), ( , ) (complex), ( ; ) (polar)"
"Prefix keys: Algebra, Binary/business, Convert, Display"
"Prefix keys: Functions, Graphics, Help, J (select)"
"Prefix keys: Kombinatorics/statistics, Modes, Store/recall"
"Prefix keys: Trail/time, Units/statistics, Vector/matrix"
"Prefix keys: Z (user), SHIFT + Z (define)"
"Prefix keys: prefix + ? gives further help for that prefix"
" Calc by Dave Gillespie, daveg@synaptics.com")))
;; FIXME: Change these to `substitute-command-keys' syntax.
(mapcar #'substitute-command-keys
'("Press \\`h' for complete help; press \\`?' repeatedly for a summary"
"Letter keys: Negate; Precision; Yank; Why; Xtended cmd; Quit"
"Letter keys: SHIFT + Undo, reDo; Inverse, Hyperbolic, Option"
"Letter keys: SHIFT + sQrt; Sin, Cos, Tan; Exp, Ln, logB"
"Letter keys: SHIFT + Floor, Round; Abs, conJ, arG; Pi"
"Letter keys: SHIFT + Num-eval; More-recn; eXec-kbd-macro; Keep-args"
"Other keys: +, -, *, /, ^, \\ (int div), : (frac div)"
"Other keys: & (1/x), | (concat), % (modulo), ! (factorial)"
"Other keys: \\=' (alg-entry), = (eval), \\=` (edit); M-RET (last-args)"
"Other keys: \\`SPC'/\\`RET' (enter/dup), LFD (over); < > (scroll horiz)"
"Other keys: \\`DEL' (drop), \\`M-DEL' (drop-above); { } (scroll vert)"
"Other keys: \\`TAB' (swap/roll-dn), \\`M-TAB' (roll-up)"
"Other keys: [ , ; ] (vector), ( , ) (complex), ( ; ) (polar)"
"Prefix keys: Algebra, Binary/business, Convert, Display"
"Prefix keys: Functions, Graphics, Help, J (select)"
"Prefix keys: Kombinatorics/statistics, Modes, Store/recall"
"Prefix keys: Trail/time, Units/statistics, Vector/matrix"
"Prefix keys: Z (user), SHIFT + Z (define)"
"Prefix keys: prefix + ? gives further help for that prefix"
" Calc by Dave Gillespie, daveg@synaptics.com"))))
(if calc-full-help-flag
msgs
(if (or calc-inverse-flag calc-hyperbolic-flag)

View file

@ -109,11 +109,14 @@
(setq n (and (not (eq calc-auto-why t)) (if calc-auto-why t 1))))
(calc-change-mode 'calc-auto-why n nil)
(cond ((null n)
(message "User must press `w' to explain unsimplified results"))
(message (substitute-command-keys
"User must press \\`w' to explain unsimplified results")))
((eq n t)
(message "Automatically doing `w' to explain unsimplified results"))
(message (substitute-command-keys
"Automatically doing \\`w' to explain unsimplified results")))
(t
(message "Automatically doing `w' only for unusual messages")))))
(message (substitute-command-keys
"Automatically doing \\`w' only for unusual messages"))))))
(defun calc-group-digits (n)
(interactive "P")

View file

@ -1621,7 +1621,8 @@ See calc-keypad for details."
(stringp (nth 1 err))
(string-match "max-specpdl-size\\|max-lisp-eval-depth"
(nth 1 err)))
(error "Computation got stuck or ran too long. Type `M' to increase the limit")
(error (substitute-command-keys
"Computation got stuck or ran too long. Type \\`M' to increase the limit"))
(setq calc-aborted-prefix nil)
(signal (car err) (cdr err)))))
(when calc-aborted-prefix

View file

@ -593,15 +593,15 @@ except when using a non-decimal radix mode for input (in this case `e'
will be the hexadecimal digit).
Here are the editing keys:
* `RET' `=' evaluate the current expression
* `C-insert' copy the whole current expression to the `kill-ring'
* `C-return' evaluate, save result the `kill-ring' and exit
* `insert' paste a number if the one was copied (normally)
* `delete' `C-d' clear last argument or whole expression (hit twice)
* `backspace' delete a digit or a previous expression element
* `h' `?' pop-up a quick reference help
* `ESC' `q' exit (`ESC' can be used if `calculator-bind-escape' is
non-nil, otherwise use three consecutive `ESC's)
* \\`RET' \\`=' evaluate the current expression
* \\`C-<insert>' copy the whole current expression to the `kill-ring'
* \\`C-<return>' evaluate, save result the `kill-ring' and exit
* \\`<insert>' paste a number if the one was copied (normally)
* \\`<delete>' \\`C-d' clear last argument or whole expression (hit twice)
* \\`<backspace>' delete a digit or a previous expression element
* \\`h' \\`?' pop-up a quick reference help
* \\`ESC' \\`q' exit (\\`ESC' can be used if `calculator-bind-escape' is
non-nil, otherwise use three consecutive \\`ESC's)
These operators are pre-defined:
* `+' `-' `*' `/' the common binary operators
@ -623,10 +623,10 @@ argument.
hex/oct/bin modes can be set for input and for display separately.
Another toggle-able mode is for using degrees instead of radians for
trigonometric functions.
The keys to switch modes are (both `H' and `X' are for hex):
* `D' switch to all-decimal mode, or toggle degrees/radians
* `B' `O' `H' `X' binary/octal/hexadecimal modes for input & display
* `i' `o' followed by one of `D' `B' `O' `H' `X' (case
The keys to switch modes are (both \\`H' and \\`X' are for hex):
* \\`D' switch to all-decimal mode, or toggle degrees/radians
* \\`B' \\`O' \\`H' \\`X' binary/octal/hexadecimal modes for input & display
* \\`i' \\`o' followed by one of \\`D' \\`B' \\`O' \\`H' \\`X' (case
insensitive) sets only the input or display radix mode
The prompt indicates the current modes:
* \"==\": decimal mode (using radians);
@ -649,17 +649,17 @@ collected data. It is possible to navigate in this list, and if the
value shown is the current one on the list, an indication is displayed
as \"[N]\" if this is the last number and there are N numbers, or
\"[M/N]\" if the M-th value is shown.
* `SPC' evaluate the current value as usual, but also adds
* \\`SPC' evaluate the current value as usual, but also adds
the result to the list of saved values
* `l' `v' computes total / average of saved values
* `up' `C-p' browse to the previous value in the list
* `down' `C-n' browse to the next value in the list
* `delete' `C-d' remove current value from the list (if it is on it)
* `C-delete' `C-c' delete the whole list
* \\`l' \\`v' computes total / average of saved values
* \\`<up>' \\`C-p' browse to the previous value in the list
* \\`<down>' \\`C-n' browse to the next value in the list
* \\`<delete>' \\`C-d' remove current value from the list (if it is on it)
* \\`C-<delete>' \\`C-c' delete the whole list
Registers are variable-like place-holders for values:
* `s' followed by a character attach the current value to that character
* `g' followed by a character fetches the attached value
* \\`s' followed by a character attach the current value to that character
* \\`g' followed by a character fetches the attached value
There are many variables that can be used to customize the calculator.
Some interesting customization variables are:

View file

@ -644,13 +644,13 @@ FIXME: multiple comma-separated values should be allowed!"
;; seconds present
(setq second (read (substring isodatetimestring 13 15))))
;; FIXME: Support subseconds.
(when (and (> (length isodatetimestring) 15)
;; UTC specifier present
(char-equal ?Z (aref isodatetimestring 15)))
(setq source-zone t
;; decode to local time unless result-zone is explicitly given,
;; i.e. do not decode to UTC, i.e. do not (setq result-zone t)
))
(when (> (length isodatetimestring) 15)
(cl-case (aref isodatetimestring 15)
(?Z
(setq source-zone t))
((?- ?+)
(setq source-zone
(concat "UTC" (substring isodatetimestring 15))))))
;; shift if necessary
(if day-shift
(let ((mdy (calendar-gregorian-from-absolute

View file

@ -43,7 +43,7 @@ the hit list.
See the function `cedet-cscope-search' for more details.")
(cl-defmethod semantic-symref-perform-search ((tool semantic-symref-tool-cscope))
"Perform a search with GNU Global."
"Perform a search with CScope."
(let* ((rootproj (when (and (featurep 'ede) ede-minor-mode)
(ede-toplevel)))
(default-directory (if rootproj

View file

@ -2176,7 +2176,7 @@ and `face'."
;;; The `custom' Widget.
(defface custom-button
'((((type x w32 ns pgtk) (class color)) ; Like default mode line
'((((type x w32 ns haiku pgtk) (class color)) ; Like default mode line
:box (:line-width 2 :style released-button)
:background "lightgrey" :foreground "black"))
"Face for custom buffer buttons if `custom-raised-buttons' is non-nil."
@ -2184,7 +2184,7 @@ and `face'."
:group 'custom-faces)
(defface custom-button-mouse
'((((type x w32 ns pgtk) (class color))
'((((type x w32 ns haiku pgtk) (class color))
:box (:line-width 2 :style released-button)
:background "grey90" :foreground "black")
(t
@ -2209,7 +2209,7 @@ and `face'."
(if custom-raised-buttons 'custom-button-mouse 'highlight))
(defface custom-button-pressed
'((((type x w32 ns pgtk) (class color))
'((((type x w32 ns haiku pgtk) (class color))
:box (:line-width 2 :style pressed-button)
:background "lightgrey" :foreground "black")
(t :inverse-video t))
@ -4650,8 +4650,8 @@ You can set this option through Custom, if you carefully read the
last paragraph below. However, usually it is simpler to write
something like the following in your init file:
\(setq custom-file \"~/.emacs-custom.el\")
\(load custom-file)
(setq custom-file \"~/.config/emacs-custom.el\")
(load custom-file)
Note that both lines are necessary: the first line tells Custom to
save all customizations in this file, but does not load it.

View file

@ -54,6 +54,7 @@
(string :tag "Font Foundry"
:help-echo "Font foundry name."))
;; The width, weight, and slant should be in sync with font.c.
(:width
(choice :tag "Width"
:help-echo "Font width."
@ -63,15 +64,21 @@
(const :tag "demiexpanded" semi-expanded)
(const :tag "expanded" expanded)
(const :tag "extracondensed" extra-condensed)
(const :tag "extra-condensed" extra-condensed)
(const :tag "extraexpanded" extra-expanded)
(const :tag "medium" normal)
(const :tag "extra-expanded" extra-expanded)
(const :tag "narrow" condensed)
(const :tag "normal" normal)
(const :tag "medium" normal)
(const :tag "regular" normal)
(const :tag "semicondensed" semi-condensed)
(const :tag "demicondensed" semi-condensed)
(const :tag "semi-condensed" semi-condensed)
(const :tag "semiexpanded" semi-expanded)
(const :tag "ultracondensed" ultra-condensed)
(const :tag "ultra-condensed" ultra-condensed)
(const :tag "ultraexpanded" ultra-expanded)
(const :tag "ultra-expanded" ultra-expanded)
(const :tag "wide" extra-expanded)))
(:height
@ -85,22 +92,32 @@
(choice :tag "Weight"
:help-echo "Font weight."
:value normal ; default
(const :tag "ultralight" ultra-light)
(const :tag "extralight" extra-light)
(const :tag "light" light)
(const :tag "thin" thin)
(const :tag "ultralight" ultra-light)
(const :tag "ultra-light" ultra-light)
(const :tag "extralight" ultra-light)
(const :tag "extra-light" ultra-light)
(const :tag "light" light)
(const :tag "semilight" semi-light)
(const :tag "book" semi-light)
(const :tag "semi-light" semi-light)
(const :tag "demilight" semi-light)
(const :tag "normal" normal)
(const :tag "regular" normal)
(const :tag "medium" normal)
(const :tag "regular" regular)
(const :tag "book" normal)
(const :tag "medium" medium)
(const :tag "semibold" semi-bold)
(const :tag "semi-bold" semi-bold)
(const :tag "demibold" semi-bold)
(const :tag "demi-bold" semi-bold)
(const :tag "bold" bold)
(const :tag "extrabold" extra-bold)
(const :tag "heavy" extra-bold)
(const :tag "ultrabold" ultra-bold)
(const :tag "black" ultra-bold)))
(const :tag "extra-bold" extra-bold)
(const :tag "ultrabold" extra-bold)
(const :tag "ultra-bold" extra-bold)
(const :tag "heavy" heavy)
(const :tag "black" heavy)
(const :tag "ultra-heavy" ultra-heavy)
(const :tag "ultraheavy" ultra-heavy)))
(:slant
(choice :tag "Slant"

View file

@ -826,10 +826,15 @@ since it could result in memory overflow and make Emacs crash."
(x-underline-at-descent-line display boolean "22.1")
(x-stretch-cursor display boolean "21.1")
(scroll-bar-adjust-thumb-portion windows boolean "24.4")
(x-scroll-event-delta-factor mouse float "29.1")
;; xselect.c
(x-select-enable-clipboard-manager killing boolean "24.1")
;; xsettings.c
(font-use-system-font font-selection boolean "23.2")))
(font-use-system-font font-selection boolean "23.2")
;; haikuterm.c
(haiku-debug-on-fatal-error debug boolean "29.1")
;; haikufns.c
(haiku-use-system-tooltips tooltip boolean "29.1")))
(setq ;; If we did not specify any standard value expression above,
;; use the current value as the standard value.
standard (if (setq prop (memq :standard rest))
@ -846,10 +851,17 @@ since it could result in memory overflow and make Emacs crash."
(eq system-type 'windows-nt))
((string-match "\\`ns-" (symbol-name symbol))
(featurep 'ns))
((string-match "\\`haiku-" (symbol-name symbol))
(featurep 'haiku))
((string-match "\\`x-.*gtk" (symbol-name symbol))
(featurep 'gtk))
((string-match "clipboard-manager" (symbol-name symbol))
(boundp 'x-select-enable-clipboard-manager))
((or (equal "scroll-bar-adjust-thumb-portion"
(symbol-name symbol))
(equal "x-scroll-event-delta-factor"
(symbol-name symbol)))
(featurep 'x))
((string-match "\\`x-" (symbol-name symbol))
(fboundp 'x-create-frame))
((string-match "selection" (symbol-name symbol))
@ -870,9 +882,6 @@ since it could result in memory overflow and make Emacs crash."
(symbol-name symbol))
;; Any function from fontset.c will do.
(fboundp 'new-fontset))
((equal "scroll-bar-adjust-thumb-portion"
(symbol-name symbol))
(featurep 'x))
(t t))))
(if (not (boundp symbol))
;; If variables are removed from C code, give an error here!

View file

@ -1007,6 +1007,7 @@ Else returns nil for success."
(erase-buffer)
(setq default-directory dir ; caller's default-directory
err (not (eq 0 (apply #'process-file program nil t nil arguments))))
(dired-uncache dir)
(if err
(progn
(dired-log (concat program " " (prin1-to-string arguments) "\n"))
@ -1032,6 +1033,7 @@ Return the result of `process-file' - zero for success."
nil
shell-command-switch
cmd)))
(dired-uncache dir)
(unless (zerop res)
(pop-to-buffer out-buffer))
res))))
@ -1280,9 +1282,9 @@ Return nil if no change in files."
(prog1 (setq newname (file-name-as-directory newname))
(dired-shell-command
(replace-regexp-in-string
"%o" (shell-quote-argument newname)
"%o" (shell-quote-argument (file-local-name newname))
(replace-regexp-in-string
"%i" (shell-quote-argument file)
"%i" (shell-quote-argument (file-local-name file))
command
nil t)
nil t)))
@ -1293,10 +1295,10 @@ Return nil if no change in files."
(dired-check-process msg
(substring command 0 match)
(substring command (1+ match))
file)
(file-local-name file))
(dired-check-process msg
command
file))
(file-local-name file)))
newname))))
(t
;; We don't recognize the file as compressed, so compress it.
@ -1314,7 +1316,8 @@ Return nil if no change in files."
(default-directory (file-name-directory file)))
(dired-shell-command
(replace-regexp-in-string
"%o" (shell-quote-argument out-name)
"%o" (shell-quote-argument
(file-local-name out-name))
(replace-regexp-in-string
"%i" (shell-quote-argument
(file-name-nondirectory file))
@ -1344,9 +1347,10 @@ see `dired-compress-file-alist' for the supported suffixes list"
out-name)))
(dired-shell-command
(replace-regexp-in-string
"%o" (shell-quote-argument out-name)
"%o" (shell-quote-argument
(file-local-name out-name))
(replace-regexp-in-string
"%i" (shell-quote-argument file)
"%i" (shell-quote-argument (file-local-name file))
(cdr rule)
nil t)
nil t))
@ -1361,7 +1365,8 @@ see `dired-compress-file-alist' for the supported suffixes list"
out-name)))))
(file-error
(if (not (dired-check-process (concat "Compressing " file)
"compress" "-f" file))
"compress" "-f"
(file-local-name file)))
;; Don't use NEWNAME with `compress'.
(concat file ".Z"))))))))
@ -1984,11 +1989,12 @@ or with the current marker character if MARKER-CHAR is t."
(let* ((overwrite (file-exists-p to))
(dired-overwrite-confirmed ; for dired-handle-overwrite
(and overwrite
(let ((help-form (format-message "\
Type SPC or `y' to overwrite file `%s',
DEL or `n' to skip to next,
ESC or `q' to not overwrite any of the remaining files,
`!' to overwrite all remaining files with no more questions." to)))
(let ((help-form (format-message
(substitute-command-keys "\
Type \\`SPC' or \\`y' to overwrite file `%s',
\\`DEL' or \\`n' to skip to next,
\\`ESC' or \\`q' to not overwrite any of the remaining files,
\\`!' to overwrite all remaining files with no more questions.") to)))
(dired-query 'overwrite-query
"Overwrite `%s'?" to))))
;; must determine if FROM is marked before file-creator
@ -2481,11 +2487,12 @@ Also see `dired-do-revert-buffer'."
;; Optional arg MARKER-CHAR as in dired-create-files.
(let* ((fn-list (dired-get-marked-files nil arg))
(operation-prompt (concat operation " `%s' to `%s'?"))
(rename-regexp-help-form (format-message "\
Type SPC or `y' to %s one match, DEL or `n' to skip to next,
`!' to %s all remaining matches with no more questions."
(downcase operation)
(downcase operation)))
(rename-regexp-help-form (format-message
(substitute-command-keys "\
Type \\`SPC' or \\`y' to %s one match, \\`DEL' or \\`n' to skip to next,
\\`!' to %s all remaining matches with no more questions.")
(downcase operation)
(downcase operation)))
(regexp-name-constructor
;; Function to construct new filename using REGEXP and NEWNAME:
(if whole-name ; easy (but rare) case
@ -2606,11 +2613,12 @@ See function `dired-do-rename-regexp' for more info."
(let ((to (concat (file-name-directory from)
(funcall basename-constructor
(file-name-nondirectory from)))))
(and (let ((help-form (format-message "\
Type SPC or `y' to %s one file, DEL or `n' to skip to next,
`!' to %s all remaining matches with no more questions."
(downcase operation)
(downcase operation))))
(and (let ((help-form (format-message
(substitute-command-keys "\
Type \\`SPC' or \\`y' to %s one file, \\`DEL' or \\`n' to skip to next,
\\`!' to %s all remaining matches with no more questions.")
(downcase operation)
(downcase operation))))
(dired-query 'rename-non-directory-query
(concat operation " `%s' to `%s'")
(dired-make-relative from)

View file

@ -596,7 +596,7 @@ If you have saved a Dired buffer in a file you can use \\[dired-virtual] to
resume it in a later session.
Type \\<dired-mode-map>\\[revert-buffer] \
in the Virtual Dired buffer and answer `y' to convert
in the Virtual Dired buffer and answer \\`y' to convert
the virtual to a real Dired buffer again. You don't have to do this, though:
you can relist single subdirs using \\[dired-do-redisplay]."

View file

@ -345,11 +345,11 @@ When `file', the region marking is based on the file name.
This means don't mark the file if the end of the region is
before the file name displayed on the Dired line, so the file name
is visually outside the region. This behavior is consistent with
marking files without the region using the key `m' that advances
marking files without the region using the key \\`m' that advances
point to the next line after marking the file. Thus the number
of keys used to mark files is the same as the number of keys
used to select the region, e.g. `M-2 m' marks 2 files, and
`C-SPC M-2 n m' marks 2 files, and `M-2 S-down m' marks 2 files.
used to select the region, for example \\`M-2 m' marks 2 files, and
\\`C-SPC M-2 n m' marks 2 files, and \\`M-2 S-<down> m' marks 2 files.
When `line', the region marking is based on Dired lines,
so include the file into marking if the end of the region
@ -1672,9 +1672,9 @@ see `dired-use-ls-dired' for more details.")
(dired-goto-subdir current-dir)
(dired current-dir)))))
(define-keymap
[mouse-2] click
[follow-link] 'mouse-face
["RET"] click))))
"<mouse-2>" click
"<follow-link>" 'mouse-face
"RET" click))))
(setq segment-start (point)))))))
@ -2449,7 +2449,9 @@ directory in another window."
file-name
(if (file-symlink-p file-name)
(error "File is a symlink to a nonexistent target")
(error "File no longer exists; type `g' to update Dired buffer")))))
(error (substitute-command-keys
(concat "File no longer exists; type \\<dired-mode-map>"
"\\[revert-buffer] to update Dired buffer")))))))
;; Force C-m keybinding rather than `f' or `e' in the mode doc:
(define-obsolete-function-alias 'dired-advertised-find-file
@ -4100,9 +4102,9 @@ Type \\[help-command] at that time for help."
(inhibit-read-only t) case-fold-search
dired-unmark-all-files-query
(string (format "\n%c" mark))
(help-form "\
Type SPC or `y' to unmark one file, DEL or `n' to skip to next,
`!' to unmark all remaining files with no more questions."))
(help-form (substitute-command-keys "\
Type \\`SPC' or \\`y' to unmark one file, \\`DEL' or \\`n' to skip to next,
\\`!' to unmark all remaining files with no more questions.")))
(goto-char (point-min))
(while (if (eq mark ?\r)
(re-search-forward dired-re-mark nil t)

View file

@ -493,24 +493,69 @@ Typically \"page-%s.png\".")
(easy-menu-define doc-view-menu doc-view-mode-map
"Menu for Doc View mode."
'("DocView"
["Toggle display" doc-view-toggle-display]
("Continuous"
["Off" (setq doc-view-continuous nil)
:style radio :selected (eq doc-view-continuous nil)]
["On" (setq doc-view-continuous t)
:style radio :selected (eq doc-view-continuous t)]
["Next page" doc-view-next-page
:help "Go to the next page"]
["Previous page" doc-view-previous-page
:help "Go to the previous page"]
("Other Navigation"
["Go to page..." doc-view-goto-page
:help "Go to specific page"]
"---"
["Save as Default"
(customize-save-variable 'doc-view-continuous doc-view-continuous) t]
["First page" doc-view-first-page
:help "View the first page"]
["Last page" doc-view-last-page
:help "View the last page"]
"---"
["Move forward" doc-view-scroll-up-or-next-page
:help "Scroll page up or go to next page"]
["Move backward" doc-view-scroll-down-or-previous-page
:help "Scroll page down or go to previous page"])
("Continuous Scrolling"
["Off" (setq doc-view-continuous nil)
:style radio :selected (eq doc-view-continuous nil)
:help "Scrolling stops at page beginning and end"]
["On" (setq doc-view-continuous t)
:style radio :selected (eq doc-view-continuous t)
:help "Scrolling continues to next or previous page"]
"---"
["Save as Default" (customize-save-variable 'doc-view-continuous doc-view-continuous)
:help "Save current continuous scrolling option as default"]
)
"---"
["Set Slice" doc-view-set-slice-using-mouse]
["Set Slice (BoundingBox)" doc-view-set-slice-from-bounding-box]
["Set Slice (manual)" doc-view-set-slice]
["Reset Slice" doc-view-reset-slice]
("Toggle edit/display"
["Edit document" doc-view-toggle-display
:style radio :selected (eq major-mode 'doc-view--text-view-mode)]
["Display document" (lambda ()) ; ignore but show no keybinding
:style radio :selected (eq major-mode 'doc-view-mode)])
("Adjust Display"
["Fit to window" doc-view-fit-page-to-window
:help "Fit the image to the window"]
["Fit width" doc-view-fit-width-to-window
:help "Fit the image width to the window width"]
["Fit height" doc-view-fit-height-to-window
:help "Fit the image height to the window height"]
"---"
["Enlarge" doc-view-enlarge
:help "Enlarge the document"]
["Shrink" doc-view-shrink
:help "Shrink the document"]
"---"
["Set Slice" doc-view-set-slice-using-mouse
:help "Set the slice of the images that should be displayed"]
["Set Slice (BoundingBox)" doc-view-set-slice-from-bounding-box
:help "Set the slice from the document's BoundingBox information"]
["Set Slice (manual)" doc-view-set-slice
:help "Set the slice of the images that should be displayed"]
["Reset Slice" doc-view-reset-slice
:help "Reset the current slice"
:enabled (image-mode-window-get 'slice)])
"---"
["Search" doc-view-search]
["Search Backwards" doc-view-search-backward]
["New Search" (doc-view-search t)
:help "Initiate a new search"]
["Search Forward" doc-view-search
:help "Jump to the next match or initiate a new search"]
["Search Backward" doc-view-search-backward
:help "Jump to the previous match or initiate a new search"]
))
(defvar doc-view-minor-mode-map
@ -520,6 +565,16 @@ Typically \"page-%s.png\".")
map)
"Keymap used by `doc-view-minor-mode'.")
(easy-menu-define doc-view-minor-mode-menu doc-view-minor-mode-map
"Menu for Doc View minor mode."
'("DocView (edit)"
("Toggle edit/display"
["Edit document" (lambda ()) ; ignore but show no keybinding
:style radio :selected (eq major-mode 'doc-view--text-view-mode)]
["Display document" doc-view-toggle-display
:style radio :selected (eq major-mode 'doc-view-mode)])
["Exit DocView Mode" doc-view-minor-mode]))
;;;; Navigation Commands
;; FIXME: The doc-view-current-* definitions below are macros because they
@ -1530,16 +1585,16 @@ have the page we want to view."
(overlay-put (doc-view-current-overlay) 'display
(concat (propertize "Welcome to DocView!" 'face 'bold)
"\n"
"
(substitute-command-keys "
If you see this buffer it means that the document you want to view is being
converted to PNG and the conversion of the first page hasn't finished yet or
`doc-view-conversion-refresh-interval' is set to nil.
For now these keys are useful:
`q' : Bury this buffer. Conversion will go on in background.
`k' : Kill the conversion process and this buffer.
`K' : Kill the conversion process.\n"))))
\\<doc-view-mode-map>
\\[quit-window] : Bury this buffer. Conversion will go on in background.
\\[image-kill-buffer] : Kill the conversion process and this buffer.
\\[doc-view-kill-proc] : Kill the conversion process.\n")))))
(declare-function tooltip-show "tooltip" (text &optional use-echo-area))

View file

@ -601,6 +601,12 @@ This function assumes that the events can be stored in a string."
(setf (aref seq i) (logand (aref seq i) 127))))
seq)
;; These are needed in a --without-x build.
(defvar mouse-wheel-down-event)
(defvar mouse-wheel-up-event)
(defvar mouse-wheel-right-event)
(defvar mouse-wheel-left-event)
(defun edmacro-fix-menu-commands (macro &optional noerror)
(if (vectorp macro)
(let (result)

View file

@ -55,9 +55,9 @@ order to debug the code that does fontification."
(defcustom backtrace-line-length 5000
"Target length for lines in Backtrace buffers.
Backtrace mode will attempt to abbreviate printing of backtrace
frames to make them shorter than this, but success is not
guaranteed. If set to nil or zero, Backtrace mode will not
abbreviate the forms it prints."
frames by setting `print-level' and `print-length' to make them
shorter than this, but success is not guaranteed. If set to nil
or zero, backtrace mode will not abbreviate the forms it prints."
:type 'integer
:group 'backtrace
:version "27.1")
@ -751,6 +751,13 @@ property for use by navigation."
(insert (make-string (- backtrace--flags-width (- (point) beg)) ?\s))
(put-text-property beg (point) 'backtrace-section 'func)))
(defun backtrace--line-length-or-nil ()
"Return `backtrace-line-length' if valid, nil else."
;; mirror the logic in `cl-print-to-string-with-limits'
(and (natnump backtrace-line-length)
(not (zerop backtrace-line-length))
backtrace-line-length))
(defun backtrace--print-func-and-args (frame _view)
"Print the function, arguments and buffer position of a backtrace FRAME.
Format it according to VIEW."
@ -769,11 +776,16 @@ Format it according to VIEW."
(if (atom fun)
(funcall backtrace-print-function fun)
(insert
(backtrace--print-to-string fun (when args (/ backtrace-line-length 2)))))
(backtrace--print-to-string
fun
(when (and args (backtrace--line-length-or-nil))
(/ backtrace-line-length 2)))))
(if args
(insert (backtrace--print-to-string
args (max (truncate (/ backtrace-line-length 5))
(- backtrace-line-length (- (point) beg)))))
args
(if (backtrace--line-length-or-nil)
(max (truncate (/ backtrace-line-length 5))
(- backtrace-line-length (- (point) beg))))))
;; The backtrace-form property is so that backtrace-multi-line
;; will find it. backtrace-multi-line doesn't do anything
;; useful with it, just being consistent.

View file

@ -1186,72 +1186,6 @@ See Info node `(elisp) Integer Basics'."
(put 'concat 'byte-optimizer #'byte-optimize-concat)
(defun byte-optimize-define-key (form)
"Expand key bindings in FORM."
(let ((key (nth 2 form)))
(if (and (vectorp key)
(= (length key) 1)
(stringp (aref key 0)))
;; We have key on the form ["C-c C-c"].
(if (not (kbd-valid-p (aref key 0)))
(error "Invalid `kbd' syntax: %S" key)
(list (nth 0 form) (nth 1 form)
(kbd (aref key 0)) (nth 4 form)))
;; No improvement.
form)))
(put 'define-key 'byte-optimizer #'byte-optimize-define-key)
(defun byte-optimize-define-keymap (form)
"Expand key bindings in FORM."
(let ((result nil)
(orig-form form)
improved)
(push (pop form) result)
(while (and form
(keywordp (car form))
(not (eq (car form) :menu)))
(unless (memq (car form)
'(:full :keymap :parent :suppress :name :prefix))
(error "Invalid keyword: %s" (car form)))
(push (pop form) result)
(when (null form)
(error "Uneven number of keywords in %S" form))
(push (pop form) result))
;; Bindings.
(while form
(let ((key (pop form)))
(if (and (vectorp key)
(= (length key) 1)
(stringp (aref key 0)))
(progn
(unless (kbd-valid-p (aref key 0))
(error "Invalid `kbd' syntax: %S" key))
(push (kbd (aref key 0)) result)
(setq improved t))
;; No improvement.
(push key result)))
(when (null form)
(error "Uneven number of key bindings in %S" form))
(push (pop form) result))
(if improved
(nreverse result)
orig-form)))
(defun byte-optimize-define-keymap--define (form)
"Expand key bindings in FORM."
(if (not (consp (nth 1 form)))
form
(let ((optimized (byte-optimize-define-keymap (nth 1 form))))
(if (eq optimized (nth 1 form))
;; No improvement.
form
(list (car form) optimized)))))
(put 'define-keymap 'byte-optimizer #'byte-optimize-define-keymap)
(put 'define-keymap--define 'byte-optimizer
#'byte-optimize-define-keymap--define)
;; I'm not convinced that this is necessary. Doesn't the optimizer loop
;; take care of this? - Jamie
;; I think this may some times be necessary to reduce ie (quote 5) to 5,

View file

@ -134,6 +134,7 @@ The return value of this function is not used."
:autoload-end
(eval-and-compile
(defun ,cfname (,@(car data) ,@args)
(ignore ,@(delq '&rest (delq '&optional (copy-sequence args))))
,@(cdr data))))))))
(defalias 'byte-run--set-doc-string

View file

@ -1672,9 +1672,14 @@ URLs."
;; known at compile time. So instead, we assume that these
;; substitutions are of some length N.
(replace-regexp-in-string
(rx "\\" (or (seq "[" (* (not "]")) "]")))
(rx "\\[" (* (not "]")) "]")
(make-string byte-compile--wide-docstring-substitution-len ?x)
docstring))))
;; For literal key sequence substitutions (e.g. "\\`C-h'"), just
;; remove the markup as `substitute-command-keys' would.
(replace-regexp-in-string
(rx "\\`" (group (* (not "'"))) "'")
"\\1"
docstring)))))
(defcustom byte-compile-docstring-max-column 80
"Recommended maximum width of doc string lines.
@ -5043,6 +5048,8 @@ binding slots have been popped."
nil))
(_ (byte-compile-keep-pending form))))
;;; tags

View file

@ -385,7 +385,8 @@ Also store it in `eldoc-last-message' and return that value."
;; The following configuration shows "Matches..." in the
;; echo area when point is after a closing bracket, which
;; conflicts with eldoc.
(and show-paren-context-when-offscreen
(and (boundp 'show-paren-context-when-offscreen)
show-paren-context-when-offscreen
(not (pos-visible-in-window-p
(overlay-end show-paren--overlay)))))))

View file

@ -77,6 +77,35 @@
Use nil for no limit (caution: backtrace lines can be very long)."
:type '(choice (const :tag "No truncation" nil) integer))
(defvar ert-batch-print-length 10
"`print-length' setting used in `ert-run-tests-batch'.
When formatting lists in test conditions, `print-length' will be
temporarily set to this value. See also
`ert-batch-backtrace-line-length' for its effect on stack
traces.")
(defvar ert-batch-print-level 5
"`print-level' setting used in `ert-run-tests-batch'.
When formatting lists in test conditions, `print-level' will be
temporarily set to this value. See also
`ert-batch-backtrace-line-length' for its effect on stack
traces.")
(defvar ert-batch-backtrace-line-length t
"Target length for lines in ERT batch backtraces.
Even modest settings for `print-length' and `print-level' can
produce extremely long lines in backtraces and lengthy delays in
forming them. This variable governs the target maximum line
length by manipulating these two variables while printing stack
traces. Setting this variable to t will re-use the value of
`backtrace-line-length' while printing stack traces in ERT batch
mode. Any other value will be temporarily bound to
`backtrace-line-length' when producing stack traces in batch
mode.")
(defface ert-test-result-expected '((((class color) (background light))
:background "green1")
(((class color) (background dark))
@ -120,6 +149,10 @@ Use nil for no limit (caution: backtrace lines can be very long)."
;; Note that nil is still a valid value for the `name' slot in
;; ert-test objects. It designates an anonymous test.
(error "Attempt to define a test named nil"))
(when (and noninteractive (get symbol 'ert--test))
;; Make sure duplicated tests are discovered since the older test would
;; be ignored silently otherwise.
(error "Test `%s' redefined" symbol))
(define-symbol-prop symbol 'ert--test definition)
definition)
@ -175,6 +208,9 @@ Macros in BODY are expanded when the test is defined, not when it
is run. If a macro (possibly with side effects) is to be tested,
it has to be wrapped in `(eval (quote ...))'.
If NAME is already defined as a test and Emacs is running
in batch mode, an error is signalled.
\(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] \
[:tags \\='(TAG...)] BODY...)"
(declare (debug (&define [&name "test@" symbolp]
@ -1402,8 +1438,7 @@ Returns the stats object."
(ert-reason-for-test-result result)
""))))
(message "%s" "")))))
(test-started
)
(test-started)
(test-ended
(cl-destructuring-bind (stats test result) event-args
(unless (ert-test-result-expected-p test result)
@ -1413,8 +1448,14 @@ Returns the stats object."
(ert-test-result-with-condition
(message "Test %S backtrace:" (ert-test-name test))
(with-temp-buffer
(insert (backtrace-to-string
(ert-test-result-with-condition-backtrace result)))
(let ((backtrace-line-length
(if (eq ert-batch-backtrace-line-length t)
backtrace-line-length
ert-batch-backtrace-line-length))
(print-level ert-batch-print-level)
(print-length ert-batch-print-length))
(insert (backtrace-to-string
(ert-test-result-with-condition-backtrace result))))
(if (not ert-batch-backtrace-right-margin)
(message "%s"
(buffer-substring-no-properties (point-min)
@ -1433,8 +1474,8 @@ Returns the stats object."
(ert--insert-infos result)
(insert " ")
(let ((print-escape-newlines t)
(print-level 5)
(print-length 10))
(print-level ert-batch-print-level)
(print-length ert-batch-print-length))
(ert--pp-with-indentation-and-newline
(ert-test-result-with-condition-condition result)))
(goto-char (1- (point-max)))
@ -1962,13 +2003,13 @@ otherwise."
(ewoc-refresh ert--results-ewoc)
(font-lock-default-function enabledp))
(defun ert--setup-results-buffer (stats listener buffer-name)
(defvar ert--output-buffer-name "*ert*")
(defun ert--setup-results-buffer (stats listener)
"Set up a test results buffer.
STATS is the stats object; LISTENER is the results listener;
BUFFER-NAME, if non-nil, is the buffer name to use."
(unless buffer-name (setq buffer-name "*ert*"))
(let ((buffer (get-buffer-create buffer-name)))
STATS is the stats object; LISTENER is the results listener."
(let ((buffer (get-buffer-create ert--output-buffer-name)))
(with-current-buffer buffer
(let ((inhibit-read-only t))
(buffer-disable-undo)
@ -2000,18 +2041,11 @@ BUFFER-NAME, if non-nil, is the buffer name to use."
(defvar ert--selector-history nil
"List of recent test selectors read from terminal.")
;; Should OUTPUT-BUFFER-NAME and MESSAGE-FN really be arguments here?
;; They are needed only for our automated self-tests at the moment.
;; Or should there be some other mechanism?
;;;###autoload
(defun ert-run-tests-interactively (selector
&optional output-buffer-name message-fn)
(defun ert-run-tests-interactively (selector)
"Run the tests specified by SELECTOR and display the results in a buffer.
SELECTOR works as described in `ert-select-tests'.
OUTPUT-BUFFER-NAME and MESSAGE-FN should normally be nil; they
are used for automated self-tests and specify which buffer to use
and how to display message."
SELECTOR works as described in `ert-select-tests'."
(interactive
(list (let ((default (if ert--selector-history
;; Can't use `first' here as this form is
@ -2022,25 +2056,18 @@ and how to display message."
(read
(completing-read (format-prompt "Run tests" default)
obarray #'ert-test-boundp nil nil
'ert--selector-history default nil)))
nil))
(unless message-fn (setq message-fn 'message))
(let ((output-buffer-name output-buffer-name)
buffer
listener
(message-fn message-fn))
'ert--selector-history default nil)))))
(let (buffer listener)
(setq listener
(lambda (event-type &rest event-args)
(cl-ecase event-type
(run-started
(cl-destructuring-bind (stats) event-args
(setq buffer (ert--setup-results-buffer stats
listener
output-buffer-name))
(setq buffer (ert--setup-results-buffer stats listener))
(pop-to-buffer buffer)))
(run-ended
(cl-destructuring-bind (stats abortedp) event-args
(funcall message-fn
(message
"%sRan %s tests, %s results were as expected%s%s"
(if (not abortedp)
""
@ -2394,7 +2421,7 @@ To be used in the ERT results buffer."
(interactive nil ert-results-mode)
(cl-assert (eql major-mode 'ert-results-mode))
(let ((selector (ert--stats-selector ert--results-stats)))
(ert-run-tests-interactively selector (buffer-name))))
(ert-run-tests-interactively selector)))
(defun ert-results-rerun-test-at-point ()
"Re-run the test at point.

View file

@ -1308,6 +1308,7 @@ Lisp function does not specify a special indentation."
(put 'handler-bind 'lisp-indent-function 1) ;CL
(put 'unwind-protect 'lisp-indent-function 1)
(put 'with-output-to-temp-buffer 'lisp-indent-function 1)
(put 'closure 'lisp-indent-function 2)
(defun indent-sexp (&optional endpos)
"Indent each line of the list starting just after point.

View file

@ -215,12 +215,12 @@ The function's value is the number of actions taken."
(action (or (nth 2 help) "act on")))
(concat
(format-message
"\
Type SPC or `y' to %s the current %s;
DEL or `n' to skip the current %s;
RET or `q' to skip the current and all remaining %s;
C-g to quit (cancel the whole command);
! to %s all remaining %s;\n"
(substitute-command-keys "\
Type \\`SPC' or \\`y' to %s the current %s;
\\`DEL' or \\`n' to skip the current %s;
\\`RET' or \\`q' to skip the current and all remaining %s;
\\`C-g' to quit (cancel the whole command);
\\`!' to %s all remaining %s;\n")
action object object objects action objects)
(mapconcat (lambda (elt)
(format "%s to %s;\n"

View file

@ -448,7 +448,8 @@ provided in the Commentary section of this library."
(setq reb-subexp-mode t)
(reb-update-modestring)
(use-local-map reb-subexp-mode-map)
(message "`0'-`9' to display subexpressions `q' to quit subexp mode"))
(message (substitute-command-keys
"\\`0'-\\`9' to display subexpressions \\`q' to quit subexp mode")))
(defun reb-show-subexp (subexp &optional pause)
"Visually show limit of subexpression SUBEXP of recent search.

View file

@ -159,8 +159,6 @@ There can be any number of :example/:result elements."
:eval (split-string-and-unquote "foo \"bar zot\""))
(split-string-shell-command
:eval (split-string-shell-command "ls /tmp/'foo bar'"))
(string-glyph-split
:eval (string-glyph-split "Hello, 👼🏻🧑🏼‍🤝‍🧑🏻"))
(string-lines
:eval (string-lines "foo\n\nbar")
:eval (string-lines "foo\n\nbar" t))
@ -198,6 +196,13 @@ There can be any number of :example/:result elements."
:eval (substring-no-properties (propertize "foobar" 'face 'bold) 0 3))
(try-completion
:eval (try-completion "foo" '("foobar" "foozot" "gazonk")))
"Unicode Strings"
(string-glyph-split
:eval (string-glyph-split "Hello, 👼🏻🧑🏼‍🤝‍🧑🏻"))
(string-glyph-compose
:eval (string-glyph-compose ""))
(string-glyph-decompose
:eval (string-glyph-decompose ""))
"Predicates for Strings"
(string-equal
:eval (string-equal "foo" "foo"))
@ -1222,6 +1227,39 @@ There can be any number of :example/:result elements."
(text-property-search-backward
:no-eval (text-property-search-backward 'face nil t)))
(define-short-documentation-group keymaps
"Defining keymaps"
(define-keymap
:no-eval (define-keymap "C-c C-c" #'quit-buffer))
(defvar-keymap
:no-eval (defvar-keymap my-keymap "C-c C-c" map #'quit-buffer))
"Setting keys"
(keymap-set
:no-eval (keymap-set map "C-c C-c" #'quit-buffer))
(keymap-local-set
:no-eval (keymap-local-set "C-c C-c" #'quit-buffer))
(keymap-global-set
:no-eval (keymap-global-set "C-c C-c" #'quit-buffer))
(keymap-unset
:no-eval (keymap-unset map "C-c C-c"))
(keymap-local-unset
:no-eval (keymap-local-unset "C-c C-c"))
(keymap-global-unset
:no-eval (keymap-global-unset "C-c C-c"))
(keymap-substitute
:no-eval (keymap-substitute map "C-c C-c" "M-a"))
(keymap-set-after
:no-eval (keymap-set-after map "<separator-2>" menu-bar-separator))
"Predicates"
(keymapp
:eval (keymapp (define-keymap)))
(key-valid-p
:eval (key-valid-p "C-c C-c")
:eval (key-valid-p "C-cC-c"))
"Lookup"
(keymap-lookup
:eval (keymap-lookup (current-global-map) "C-x x g")))
;;;###autoload
(defun shortdoc-display-group (group &optional function)
"Pop to a buffer with short documentation summary for functions in GROUP.

View file

@ -446,8 +446,7 @@ is inserted before adjusting the number of empty lines."
"Return the width of STRING in pixels."
(with-temp-buffer
(insert string)
(car (window-text-pixel-size
(current-buffer) (point-min) (point)))))
(car (buffer-text-pixel-size nil nil t))))
;;;###autoload
(defun string-glyph-split (string)
@ -457,7 +456,12 @@ This takes into account combining characters and grapheme clusters."
(start 0)
comp)
(while (< start (length string))
(if (setq comp (find-composition-internal start nil string nil))
(if (setq comp (find-composition-internal
start
;; Don't search backward in the string for the
;; start of the composition.
(min (length string) (1+ start))
string nil))
(progn
(push (substring string (car comp) (cadr comp)) result)
(setq start (cadr comp)))
@ -465,6 +469,48 @@ This takes into account combining characters and grapheme clusters."
(setq start (1+ start))))
(nreverse result)))
;;;###autoload
(defun add-display-text-property (start end prop value
&optional object)
"Add display property PROP with VALUE to the text from START to END.
If any text in the region has a non-nil `display' property, those
properties are retained.
If OBJECT is non-nil, it should be a string or a buffer. If nil,
this defaults to the current buffer."
(let ((sub-start start)
(sub-end 0)
disp)
(while (< sub-end end)
(setq sub-end (next-single-property-change sub-start 'display object
(if (stringp object)
(min (length object) end)
(min end (point-max)))))
(if (not (setq disp (get-text-property sub-start 'display object)))
;; No old properties in this range.
(put-text-property sub-start sub-end 'display (list prop value))
;; We have old properties.
(let ((vector nil))
;; Make disp into a list.
(setq disp
(cond
((vectorp disp)
(setq vector t)
(seq-into disp 'list))
((not (consp (car disp)))
(list disp))
(t
disp)))
;; Remove any old instances.
(when-let ((old (assoc prop disp)))
(setq disp (delete old disp)))
(setq disp (cons (list prop value) disp))
(when vector
(setq disp (seq-into disp 'vector)))
;; Finally update the range.
(put-text-property sub-start sub-end 'display disp)))
(setq sub-start sub-end))))
(provide 'subr-x)
;;; subr-x.el ends here

View file

@ -2311,7 +2311,6 @@ problems."
(viper-downgrade-to-insert))
(defun viper-start-R-mode ()
;; Leave arg as 1, not t: XEmacs insists that it must be a pos number
(overwrite-mode 1)
(add-hook
'viper-post-command-hooks #'viper-R-state-post-command-sentinel t 'local)

View file

@ -44,7 +44,6 @@
(define-obsolete-function-alias 'viper-device-type #'window-system "27.1")
;; in XEmacs: device-type is tty on tty and stream in batch.
(defun viper-window-display-p ()
(and window-system (not (memq window-system '(tty stream pc)))))

View file

@ -198,8 +198,7 @@ is ignored."
(setq result (buffer-substring word-beg (point))))
) ; if
;; XEmacs doesn't have set-text-properties, but there buffer-substring
;; doesn't return properties together with the string, so it's not needed.
;; FIXME: Use `buffer-substring-no-properties' above instead?
(set-text-properties 0 (length result) nil result)
result))

View file

@ -210,7 +210,8 @@ KEYS is a list of `epa-ks-key' structures, as parsed by
(with-current-buffer buf
(setq tabulated-list-entries entries)
(tabulated-list-print t t))
(message "Press `f' to mark a key, `x' to fetch all marked keys."))))
(message (substitute-command-keys
"Press \\`f' to mark a key, \\`x' to fetch all marked keys.")))))
(defun epa-ks--restart-search ()
(when epa-ks-last-query

View file

@ -1479,6 +1479,7 @@ Defaults to the server buffer."
(define-derived-mode erc-mode fundamental-mode "ERC"
"Major mode for Emacs IRC."
:interactive nil
(setq local-abbrev-table erc-mode-abbrev-table)
(setq-local next-line-add-newlines nil)
(setq line-move-ignore-invisible t)
@ -2404,7 +2405,8 @@ If ARG is non-nil, show the *erc-protocol* buffer."
(concat "This buffer displays all IRC protocol "
"traffic exchanged with servers."))
(erc-make-notice "Kill it to disable logging.")
(erc-make-notice "Press `t' to toggle."))))
(erc-make-notice (substitute-command-keys
"Press \\`t' to toggle.")))))
(insert (string-join msg "\r\n")))
(use-local-map (make-sparse-keymap))
(local-set-key (kbd "t") 'erc-toggle-debug-irc-protocol))

View file

@ -308,7 +308,7 @@ and the hook `eshell-exit-hook'."
(make-local-variable 'eshell-command-running-string)
(let ((fmt (copy-sequence mode-line-format)))
(setq-local mode-line-format fmt))
(let ((mode-line-elt (memq 'mode-line-modified mode-line-format)))
(let ((mode-line-elt (cdr (memq 'mode-line-front-space mode-line-format))))
(if mode-line-elt
(setcar mode-line-elt 'eshell-command-running-string))))

View file

@ -1172,9 +1172,8 @@ an integer value."
(:height
'integerp)
(:stipple
(and (memq (window-system frame) '(x ns pgtk)) ; No stipple on w32
(mapcar (lambda (f)
(cons (file-name-base f) f))
(and (memq (window-system frame) '(x ns pgtk)) ; No stipple on w32 or haiku
(mapcar #'list
(apply #'nconc
(mapcar (lambda (dir)
(and (file-readable-p dir)
@ -2615,14 +2614,23 @@ non-nil."
:background "grey75" :foreground "black")
(t
:inverse-video t))
"Basic mode line face for selected window."
"Face for the mode lines (for the selected window) as well as header lines.
See `mode-line-display' for the face used on mode lines."
:version "21.1"
:group 'mode-line-faces
:group 'basic-faces)
(defface mode-line-active
'((t :inherit (mode-line variable-pitch)))
"Face for the selected mode line.
This inherits from the `mode-line' face."
:version "29.1"
:group 'mode-line-faces
:group 'basic-faces)
(defface mode-line-inactive
'((default
:inherit mode-line)
:inherit (mode-line variable-pitch))
(((class color) (min-colors 88) (background light))
:weight light
:box (:line-width -1 :color "grey75" :style nil)
@ -2823,7 +2831,7 @@ Note: Other faces cannot inherit from the cursor face."
'((default
:box (:line-width 1 :style released-button)
:foreground "black")
(((type x w32 ns pgtk) (class color))
(((type x w32 ns haiku pgtk) (class color))
:background "grey75")
(((type x) (class mono))
:background "grey"))
@ -2884,13 +2892,17 @@ Note: Other faces cannot inherit from the cursor face."
;; making the characters wider, which then would cause unpleasant
;; horizontal shifts of the cursor during C-n/C-p movement
;; through a line with this face.
:box (:line-width (-1 . -1) :color "grey80"))
:box (:line-width (-1 . -1) :color "grey80")
:inherit fixed-pitch)
(((class color) (min-colors 88) (background dark))
:background "grey19" :foreground "LightBlue"
:box (:line-width (-1 . -1) :color "grey35"))
(((class color grayscale) (background light)) :background "grey90")
(((class color grayscale) (background dark)) :background "grey25")
(t :background "grey90"))
:box (:line-width (-1 . -1) :color "grey35")
:inherit fixed-pitch)
(((class color grayscale) (background light)) :background "grey90"
:inherit fixed-pitch)
(((class color grayscale) (background dark)) :background "grey25"
:inherit fixed-pitch)
(t :background "grey90" :inherit fixed-pitch))
"Face for keybindings in *Help* buffers.
This face is added by `substitute-command-keys', which see.

View file

@ -68,6 +68,31 @@ a regexp matching the name it is linked to."
:group 'abbrev
:group 'find-file)
(defun directory-abbrev-make-regexp (directory)
"Create a regexp to match DIRECTORY for `directory-abbrev-alist'."
(let ((regexp
;; We include a slash at the end, to avoid spurious
;; matches such as `/usr/foobar' when the home dir is
;; `/usr/foo'.
(concat "\\`" (regexp-quote directory) "\\(/\\|\\'\\)")))
;; The value of regexp could be multibyte or unibyte. In the
;; latter case, we need to decode it.
(if (multibyte-string-p regexp)
regexp
(decode-coding-string regexp
(if (eq system-type 'windows-nt)
'utf-8
locale-coding-system)))))
(defun directory-abbrev-apply (filename)
"Apply the abbreviations in `directory-abbrev-alist' to FILENAME.
Note that when calling this, you should set `case-fold-search' as
appropriate for the filesystem used for FILENAME."
(dolist (dir-abbrev directory-abbrev-alist filename)
(when (string-match (car dir-abbrev) filename)
(setq filename (concat (cdr dir-abbrev)
(substring filename (match-end 0)))))))
(defcustom make-backup-files t
"Non-nil means make a backup of a file the first time it is saved.
This can be done by renaming the file or by copying.
@ -2015,73 +2040,54 @@ if you want to permanently change your home directory after having
started Emacs, set `abbreviated-home-dir' to nil so it will be recalculated)."
;; Get rid of the prefixes added by the automounter.
(save-match-data ;FIXME: Why?
(if (and automount-dir-prefix
(string-match automount-dir-prefix filename)
(file-exists-p (file-name-directory
(substring filename (1- (match-end 0))))))
(setq filename (substring filename (1- (match-end 0)))))
;; Avoid treating /home/foo as /home/Foo during `~' substitution.
(let ((case-fold-search (file-name-case-insensitive-p filename)))
;; If any elt of directory-abbrev-alist matches this name,
;; abbreviate accordingly.
(dolist (dir-abbrev directory-abbrev-alist)
(if (string-match (car dir-abbrev) filename)
(setq filename
(concat (cdr dir-abbrev)
(substring filename (match-end 0))))))
;; Compute and save the abbreviated homedir name.
;; We defer computing this until the first time it's needed, to
;; give time for directory-abbrev-alist to be set properly.
;; We include a slash at the end, to avoid spurious matches
;; such as `/usr/foobar' when the home dir is `/usr/foo'.
(unless abbreviated-home-dir
(put 'abbreviated-home-dir 'home (expand-file-name "~"))
(setq abbreviated-home-dir
(let* ((abbreviated-home-dir "\\`\\'.") ;Impossible regexp.
(regexp
(concat "\\`"
(regexp-quote
(abbreviate-file-name
(get 'abbreviated-home-dir 'home)))
"\\(/\\|\\'\\)")))
;; Depending on whether default-directory does or
;; doesn't include non-ASCII characters, the value
;; of abbreviated-home-dir could be multibyte or
;; unibyte. In the latter case, we need to decode
;; it. Note that this function is called for the
;; first time (from startup.el) when
;; locale-coding-system is already set up.
(if (multibyte-string-p regexp)
regexp
(decode-coding-string regexp
(if (eq system-type 'windows-nt)
'utf-8
locale-coding-system))))))
(if-let ((handler (find-file-name-handler filename 'abbreviate-file-name)))
(funcall handler 'abbreviate-file-name filename)
(if (and automount-dir-prefix
(string-match automount-dir-prefix filename)
(file-exists-p (file-name-directory
(substring filename (1- (match-end 0))))))
(setq filename (substring filename (1- (match-end 0)))))
;; Avoid treating /home/foo as /home/Foo during `~' substitution.
(let ((case-fold-search (file-name-case-insensitive-p filename)))
;; If any elt of directory-abbrev-alist matches this name,
;; abbreviate accordingly.
(setq filename (directory-abbrev-apply filename))
;; If FILENAME starts with the abbreviated homedir,
;; and ~ hasn't changed since abbreviated-home-dir was set,
;; make it start with `~' instead.
;; If ~ has changed, we ignore abbreviated-home-dir rather than
;; invalidating it, on the assumption that a change in HOME
;; is likely temporary (eg for testing).
;; FIXME Is it even worth caching abbreviated-home-dir?
;; Ref: https://debbugs.gnu.org/19657#20
(let (mb1)
(if (and (string-match abbreviated-home-dir filename)
(setq mb1 (match-beginning 1))
;; If the home dir is just /, don't change it.
(not (and (= (match-end 0) 1)
(= (aref filename 0) ?/)))
;; MS-DOS root directories can come with a drive letter;
;; Novell Netware allows drive letters beyond `Z:'.
(not (and (memq system-type '(ms-dos windows-nt cygwin))
(string-match "\\`[a-zA-`]:/\\'" filename)))
(equal (get 'abbreviated-home-dir 'home)
(expand-file-name "~")))
(setq filename
(concat "~"
(substring filename mb1))))
filename))))
;; Compute and save the abbreviated homedir name.
;; We defer computing this until the first time it's needed, to
;; give time for directory-abbrev-alist to be set properly.
(unless abbreviated-home-dir
(put 'abbreviated-home-dir 'home (expand-file-name "~"))
(setq abbreviated-home-dir
(directory-abbrev-make-regexp
(let ((abbreviated-home-dir "\\`\\'.")) ;Impossible regexp.
(abbreviate-file-name
(get 'abbreviated-home-dir 'home))))))
;; If FILENAME starts with the abbreviated homedir,
;; and ~ hasn't changed since abbreviated-home-dir was set,
;; make it start with `~' instead.
;; If ~ has changed, we ignore abbreviated-home-dir rather than
;; invalidating it, on the assumption that a change in HOME
;; is likely temporary (eg for testing).
;; FIXME Is it even worth caching abbreviated-home-dir?
;; Ref: https://debbugs.gnu.org/19657#20
(let (mb1)
(if (and (string-match abbreviated-home-dir filename)
(setq mb1 (match-beginning 1))
;; If the home dir is just /, don't change it.
(not (and (= (match-end 0) 1)
(= (aref filename 0) ?/)))
;; MS-DOS root directories can come with a drive letter;
;; Novell Netware allows drive letters beyond `Z:'.
(not (and (memq system-type '(ms-dos windows-nt cygwin))
(string-match "\\`[a-zA-`]:/\\'" filename)))
(equal (get 'abbreviated-home-dir 'home)
(expand-file-name "~")))
(setq filename
(concat "~"
(substring filename mb1))))
filename)))))
(defun find-buffer-visiting (filename &optional predicate)
"Return the buffer visiting file FILENAME (a string).
@ -5800,13 +5806,13 @@ of the directory that was default during command invocation."
(defun save-some-buffers (&optional arg pred)
"Save some modified file-visiting buffers. Asks user about each one.
You can answer `y' or SPC to save, `n' or DEL not to save, `C-r'
You can answer \\`y' or \\`SPC' to save, \\`n' or \\`DEL' not to save, \\`C-r'
to look at the buffer in question with `view-buffer' before
deciding, `d' to view the differences using
`diff-buffer-with-file', `!' to save the buffer and all remaining
buffers without any further querying, `.' to save only the
current buffer and skip the remaining ones and `q' or RET to exit
the function without saving any more buffers. `C-h' displays a
deciding, \\`d' to view the differences using
`diff-buffer-with-file', \\`!' to save the buffer and all remaining
buffers without any further querying, \\`.' to save only the
current buffer and skip the remaining ones and \\`q' or \\`RET' to exit
the function without saving any more buffers. \\`C-h' displays a
help message describing these options.
This command first saves any buffers where `buffer-save-without-query' is
@ -6218,8 +6224,7 @@ of `file-has-changed-p' always returns non-nil when FILE exists.
The optional argument TAG, which must be a symbol, can be used to
limit the comparison to invocations with identical tags; it can be
the symbol of the calling function, for example."
(let* (;; FIXME: Shall we use `file-truename'?
(file (directory-file-name file))
(let* ((file (directory-file-name (expand-file-name file)))
(remote-file-name-inhibit-cache t)
(fileattr (file-attributes file 'integer))
(attr (and fileattr
@ -7836,10 +7841,11 @@ only these files will be asked to be saved."
;; Get a list of the indices of the args that are file names.
(file-arg-indices
(cdr (or (assq operation
'(;; The first seven are special because they
'(;; The first eight are special because they
;; return a file name. We want to include
;; the /: in the return value. So just
;; avoid stripping it in the first place.
(abbreviate-file-name)
(directory-file-name)
(expand-file-name)
(file-name-as-directory)

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