Merge branch 'master' into scratch/font_lock_large_files

This commit is contained in:
Dmitry Gutov 2022-08-15 02:22:59 +03:00
commit ee3a674c7c
151 changed files with 2120 additions and 1528 deletions

View file

@ -1883,7 +1883,7 @@ list of their contributions.\n")
(insert "\n "))
(insert " " file))
(insert "\n")))))
(insert "\nLocal" " Variables:\nmode: etc-authors\ncoding: "
(insert "\nLocal" " Variables:\nmode: emacs-authors\ncoding: "
(symbol-name authors-coding-system) "\nEnd:\n")
(message "Generating buffer %s... done" buffer-name)
(unless noninteractive

View file

@ -29,6 +29,7 @@ s#^Running # Running #
s#^Configured for # Configured for #
s#^./temacs.*# \\& #
s#^make.*Error# \\& #
s#^Dumping under the name# \\& #
' | \
grep -E --line-buffered -v "^make|\
^Loading|\
@ -43,7 +44,6 @@ GEN.*autoloads|\
^Adding name|\
^Dump mode|\
^Dumping finger|\
^Dumping under the name|\
^Byte counts|\
^Reloc counts|\
^Pure-hashed|\

View file

@ -1083,8 +1083,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(defun unidata--ensure-compiled (&rest funcs)
(dolist (fun funcs)
(or (byte-code-function-p (symbol-function fun))
(byte-compile fun))))
(unless (compiled-function-p (symbol-function fun))
(byte-compile fun))))
(defun unidata-gen-table-name (prop index &rest _ignore)
(let* ((table (unidata-gen-table-word-list prop index 'unidata-split-name))

View file

@ -1457,8 +1457,8 @@ level by aborting (q.v.@:) and quitting (q.v.). @xref{Quitting}.
@item Transient Mark Mode
The default behavior of the mark (q.v.@:) and region (q.v.), in which
setting the mark activates it and highlights the region, is called
Transient Mark mode. In GNU Emacs 23 and onwards, it is enabled by
default. @xref{Disabled Transient Mark}.
Transient Mark mode. It is enabled by default. @xref{Disabled
Transient Mark}.
@item Transposition
Transposing two units of text means putting each one into the place

View file

@ -1,6 +1,5 @@
@c This is part of the Emacs manual.
@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
@c Foundation, Inc.
@c Copyright (C) 1985--2022 Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@iftex
@chapter Miscellaneous Commands
@ -2870,99 +2869,6 @@ new major mode which provides a command to switch back. These
approaches give you more flexibility to go back to unfinished tasks in
the order you choose.
@ignore
@c Apart from edt and viper, this is all obsolete.
@c (Can't believe we were saying "most other editors" into 2014!)
@c There seems no point having a node just for those, which both have
@c their own manuals.
@node Emulation
@section Emulation
@cindex emulating other editors
@cindex other editors
@cindex EDT
@cindex vi
@cindex WordStar
GNU Emacs can be programmed to emulate (more or less) most other
editors. Standard facilities can emulate these:
@table @asis
@item CRiSP/Brief (PC editor)
@findex crisp-mode
@vindex crisp-override-meta-x
@findex scroll-all-mode
@cindex CRiSP mode
@cindex Brief emulation
@cindex emulation of Brief
@cindex mode, CRiSP
@kbd{M-x crisp-mode} enables key bindings to emulate the CRiSP/Brief
editor. Note that this rebinds @kbd{M-x} to exit Emacs unless you set
the variable @code{crisp-override-meta-x}. You can also use the
command @kbd{M-x scroll-all-mode} or set the variable
@code{crisp-load-scroll-all} to emulate CRiSP's scroll-all feature
(scrolling all windows together).
@item EDT (DEC VMS editor)
@findex edt-emulation-on
@findex edt-emulation-off
Turn on EDT emulation with @kbd{M-x edt-emulation-on}; restore normal
command bindings with @kbd{M-x edt-emulation-off}.
Most of the EDT emulation commands are keypad keys, and most standard
Emacs key bindings are still available. The EDT emulation rebindings
are done in the global keymap, so there is no problem switching
buffers or major modes while in EDT emulation.
@item TPU (DEC VMS editor)
@findex tpu-edt-on
@cindex TPU
@kbd{M-x tpu-edt-on} turns on emulation of the TPU editor emulating EDT.
@item vi (Berkeley editor)
@findex viper-mode
Viper is an emulator for vi. It implements several levels of
emulation; level 1 is closest to vi itself, while level 5 departs
somewhat from strict emulation to take advantage of the capabilities of
Emacs. To invoke Viper, type @kbd{M-x viper-mode}; it will guide you
the rest of the way and ask for the emulation level. @inforef{Top,
Viper, viper}.
@item vi (another emulator)
@findex vi-mode
@kbd{M-x vi-mode} enters a major mode that replaces the previously
established major mode. All of the vi commands that, in real vi, enter
input mode are programmed instead to return to the previous major
mode. Thus, ordinary Emacs serves as vi's input mode.
Because vi emulation works through major modes, it does not work
to switch buffers during emulation. Return to normal Emacs first.
If you plan to use vi emulation much, you probably want to bind a key
to the @code{vi-mode} command.
@item vi (alternate emulator)
@findex vip-mode
@kbd{M-x vip-mode} invokes another vi emulator, said to resemble real vi
more thoroughly than @kbd{M-x vi-mode}. Input mode in this emulator
is changed from ordinary Emacs so you can use @key{ESC} to go back to
emulated vi command mode. To get from emulated vi command mode back to
ordinary Emacs, type @kbd{C-z}.
This emulation does not work through major modes, and it is possible
to switch buffers in various ways within the emulator. It is not
so necessary to assign a key to the command @code{vip-mode} as
it is with @code{vi-mode} because terminating insert mode does
not use it.
@inforef{Top, VIP, vip}, for full information.
@item WordStar (old wordprocessor)
@findex wordstar-mode
@kbd{M-x wordstar-mode} provides a major mode with WordStar-like
key bindings.
@end table
@end ignore
@node Hyperlinking
@section Hyperlinking and Web Navigation Features

View file

@ -986,9 +986,9 @@ printer, put this in your @file{.emacs} file:
@section Specifying Fonts on MS-Windows
@cindex font specification (MS Windows)
Starting with Emacs 23, fonts are specified by their name, size
and optional properties. The format for specifying fonts comes from the
fontconfig library used in modern Free desktops:
Fonts are specified by their name, size and optional properties.
The format for specifying fonts comes from the fontconfig library used
in modern Free desktops:
@example
[Family[-PointSize]][:Option1=Value1[:Option2=Value2[...]]]

View file

@ -2020,7 +2020,6 @@ the arguments to the function @code{concat} are the strings
@w{@code{"The "}} and @w{@code{" red foxes."}} and the list
@code{(number-to-string (+ 2 fill-column))}.
@c For GNU Emacs 22, need number-to-string
@smallexample
(concat "The " (number-to-string (+ 2 fill-column)) " red foxes.")
@end smallexample
@ -10297,9 +10296,8 @@ loop with a list.
@cindex @file{*scratch*} buffer
The function requires several lines for its output. If you are
reading this in a recent instance of GNU Emacs,
@c GNU Emacs 21, GNU Emacs 22, or a later version,
you can evaluate the following expression inside of Info, as usual.
reading this in a recent instance of GNU Emacs, you can evaluate the
following expression inside of Info, as usual.
If you are using an earlier version of Emacs, you need to copy the
necessary expressions to your @file{*scratch*} buffer and evaluate
@ -15134,16 +15132,16 @@ Emacs may produce different results.)
@end group
@group
(lengths-list-file "./lisp/makesum.el")
@result{} (85 181)
(lengths-list-file "./lisp/hex-util.el")
@result{} (82 71)
@end group
@group
(recursive-lengths-list-many-files
'("./lisp/macros.el"
"./lisp/mail/mailalias.el"
"./lisp/makesum.el"))
@result{} (283 263 480 90 38 32 29 95 178 180 321 218 324 85 181)
"./lisp/hex-util.el"))
@result{} (283 263 480 90 38 32 29 95 178 180 321 218 324 82 71)
@end group
@end smallexample
@ -15235,27 +15233,13 @@ Sorting the list returned by the
@code{recursive-lengths-list-many-files} function is straightforward;
it uses the @code{<} function:
@ignore
2006 Oct 29
In GNU Emacs 22, eval
(progn
(cd "/usr/local/share/emacs/22.0.50/")
(sort
(recursive-lengths-list-many-files
'("./lisp/macros.el"
"./lisp/mail/mailalias.el"
"./lisp/makesum.el"))
'<))
@end ignore
@smallexample
@group
(sort
(recursive-lengths-list-many-files
'("./lisp/macros.el"
"./lisp/mailalias.el"
"./lisp/makesum.el"))
"./lisp/hex-util.el"))
'<)
@end group
@end smallexample
@ -15265,7 +15249,7 @@ In GNU Emacs 22, eval
which produces:
@smallexample
(29 32 38 85 90 95 178 180 181 218 263 283 321 324 480)
(29 32 38 71 82 90 95 178 180 218 263 283 321 324 480)
@end smallexample
@noindent
@ -15313,7 +15297,7 @@ as a list that looks like this (but with more elements):
@group
("./lisp/macros.el"
"./lisp/mail/rmail.el"
"./lisp/makesum.el")
"./lisp/hex-util.el")
@end group
@end smallexample
@ -17711,17 +17695,6 @@ or start GNU Emacs with the command @code{emacs -nbc}.
(setq grep-command "grep -i -nH -e ")
@end smallexample
@ignore
@c Evidently, no longer needed in GNU Emacs 22
item Automatically uncompress compressed files when visiting them
smallexample
(load "uncompress")
end smallexample
@end ignore
@item Find an existing buffer, even if it has a different name@*
This avoids problems with symbolic links.

View file

@ -77,6 +77,7 @@ debugger recursively. @xref{Recursive Editing}.
@menu
* Error Debugging:: Entering the debugger when an error happens.
* Debugging Redisplay:: Getting backtraces from redisplay errors.
* Infinite Loops:: Stopping and debugging a program that doesn't exit.
* Function Debugging:: Entering it when a certain function is called.
* Variable Debugging:: Entering it when a variable is modified.
@ -105,6 +106,10 @@ debugger, set the variable @code{debug-on-error} to non-@code{nil}.
(The command @code{toggle-debug-on-error} provides an easy way to do
this.)
Note that, for technical reasons, you cannot use the facilities
defined in this subsection to debug errors in Lisp that the redisplay
code has invoked. @xref{Debugging Redisplay}, for help with these.
@defopt debug-on-error
This variable determines whether the debugger is called when an error
is signaled and not handled. If @code{debug-on-error} is @code{t},
@ -213,6 +218,45 @@ file, use the option @samp{--debug-init}. This binds
bypasses the @code{condition-case} which normally catches errors in the
init file.
@node Debugging Redisplay
@subsection Debugging Redisplay Errors
@cindex redisplay errors
@cindex debugging redisplay errors
When an error occurs in Lisp code which redisplay has invoked, Emacs's
usual debugging mechanisms are unusable, for technical reasons. This
subsection describes how to get a backtrace from such an error, which
should be helpful in debugging it.
These directions apply to Lisp forms used, for example, in
@code{:eval} mode line constructs (@pxref{Mode Line Data}), and in all
hooks invoked from redisplay, such as:
@itemize
@item
@code{fontification-functions} (@pxref{Auto Faces}).
@item
@code{window-scroll-functions} (@pxref{Window Hooks}).
@end itemize
Note that if you have had an error in a hook function called from
redisplay, the error handling might have removed this function from
the hook. You will thus need to reinitialize that hook somehow,
perhaps with @code{add-hook}, to be able to replay the bug.
To generate a backtrace in these circumstances, set the variable
@code{backtrace-on-redisplay-error} to non-@code{nil}. When the error
occurs, Emacs will dump the backtrace to the buffer
@file{*Redisplay-trace*}, but won't automatically display it in a
window. This is to avoid needlessly corrupting the redisplay you are
debugging. You will thus need to display the buffer yourself, with a
command such as @code{switch-to-buffer-other-frame} @key{C-x 5 b}.
@defvar backtrace-on-redisplay-error
Set this variable to non-@code{nil} to enable the generation of a
backtrace when an error occurs in any Lisp called from redisplay.
@end defvar
@node Infinite Loops
@subsection Debugging Infinite Loops
@cindex infinite loops

View file

@ -8596,9 +8596,9 @@ Characters of Unicode General Category [Cf], such as U+200E
images, such as U+00AD @sc{soft hyphen}.
@item variation-selectors
Unicode VS-1 through VS-16 (U+FE00 through U+FE0F), which are used to
select between different glyphs for the same codepoints (typically
emojis).
Unicode VS-1 through VS-256 (U+FE00 through U+FE0F and U+E0100 through
U+E01EF), which are used to select between different glyphs for the same
codepoints (typically emojis).
@item no-font
Characters for which there is no suitable font, or which cannot be

View file

@ -217,6 +217,14 @@ function. For example:
@end example
@end defun
@defun compiled-function-p object
This function returns @code{t} if @var{object} is a function object
that was either built-in (a.k.a.@: ``primitive'', @pxref{What Is a
Function}), or byte-compiled (@pxref{Byte Compilation}), or
natively-compiled (@pxref{Native Compilation}), or a function loaded
from a dynamic module (@pxref{Dynamic Modules}).
@end defun
@defun subr-arity subr
This works like @code{func-arity}, but only for built-in functions and
without symbol indirection. It signals an error for non-built-in

View file

@ -440,7 +440,7 @@ similarly-named file in a directory earlier on @code{load-path}.
For instance, suppose @code{load-path} is set to
@example
("/opt/emacs/site-lisp" "/usr/share/emacs/23.3/lisp")
("/opt/emacs/site-lisp" "/usr/share/emacs/29.1/lisp")
@end example
@noindent

View file

@ -2022,6 +2022,9 @@ with references to further information.
@item byte-code-function-p
@xref{Byte-Code Type, byte-code-function-p}.
@item compiled-function-p
@xref{Byte-Code Type, compiled-function-p}.
@item case-table-p
@xref{Case Tables, case-table-p}.

View file

@ -1544,11 +1544,11 @@ as traditional Gregorian years do; for example, the year number
@defun time-convert time form
This function converts a time value into a Lisp timestamp.
The optional @var{form} argument specifies the timestamp form to be
returned. If @var{form} is the symbol @code{integer}, this function
returns an integer count of seconds. If @var{form} is a positive
integer, it specifies a clock frequency and this function returns an
integer-pair timestamp @code{(@var{ticks} . @var{form})}. If @var{form} is
The @var{form} argument specifies the timestamp form to be returned.
If @var{form} is the symbol @code{integer}, this function returns an
integer count of seconds. If @var{form} is a positive integer, it
specifies a clock frequency and this function returns an integer-pair
timestamp @code{(@var{ticks} . @var{form})}. If @var{form} is
@code{t}, this function treats it as a positive integer suitable for
representing the timestamp; for example, it is treated as 1000000000
if @var{time} is @code{nil} and the platform timestamp has nanosecond

View file

@ -1960,7 +1960,6 @@ because @var{seconds} can be floating point to specify
waiting a fractional number of seconds. If @var{seconds} is 0, the
function accepts whatever output is pending but does not wait.
@c Emacs 22.1 feature
If @var{process} is a process, and the argument @var{just-this-one} is
non-@code{nil}, only output from that process is handled, suspending output
from other processes until some output has been received from that

View file

@ -652,14 +652,8 @@ before @file{~/.authinfo}, the auth-source library will try to
read the GnuPG encrypted @file{.gpg} file first, before
the unencrypted file.
In Emacs 23 or later there is an option @code{auto-encryption-mode} to
automatically decrypt @file{*.gpg} files. It is enabled by default.
If you are using earlier versions of Emacs, you will need:
@lisp
(require 'epa-file)
(epa-file-enable)
@end lisp
There is an option @code{auto-encryption-mode} to automatically
decrypt @file{*.gpg} files. It is enabled by default.
If you want your GnuPG passwords to be cached, set up @code{gpg-agent}
or EasyPG Assistant

View file

@ -1,7 +1,7 @@
\input texinfo @c -*- mode: texinfo; coding: utf-8 -*-
@setfilename ../../info/calc.info
@comment %**start of header (This is for running Texinfo on a region.)
@c smallbook
@setfilename ../../info/calc.info
@c [title]
@settitle GNU Emacs Calc Manual
@include docstyle.texi

View file

@ -930,9 +930,9 @@ an indication of whether the font is outline (.TTF, .ATM) or raster (.FON)
based when fonts are listed, which may let you differentiate between two
fonts with the same name and different technologies.
Starting with Emacs 23, the preferred font name format will be moving
to the simpler and more flexible fontconfig format. XLFD names will
continue to be supported for backward compatibility.
Starting with Emacs 23, the preferred font name format is the simpler
and more flexible fontconfig format. XLFD names will continue to be
supported for backward compatibility.
@example
XLFD: -*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1

View file

@ -2891,20 +2891,20 @@ and cause an annoying delay in display, so several features exist to
work around this.
@cindex Just-In-Time syntax highlighting
In Emacs 21 and later, turning on @code{font-lock-mode} automatically
activates the new @dfn{Just-In-Time fontification} provided by
@code{jit-lock-mode}. @code{jit-lock-mode} defers the fontification of
portions of buffer until you actually need to see them, and can also
fontify while Emacs is idle. This makes display of the visible portion
of a buffer almost instantaneous. For details about customizing
@code{jit-lock-mode}, type @kbd{C-h f jit-lock-mode @key{RET}}.
Turning on @code{font-lock-mode} automatically activates
@dfn{Just-In-Time fontification} provided by @code{jit-lock-mode}.
@code{jit-lock-mode} defers the fontification of portions of buffer
until you actually need to see them, and can also fontify while Emacs
is idle. This makes display of the visible portion of a buffer almost
instantaneous. For details about customizing @code{jit-lock-mode},
type @kbd{C-h f jit-lock-mode @key{RET}}.
@cindex Levels of syntax highlighting
@cindex Decoration level, in @code{font-lock-mode}
In versions of Emacs before 21, different levels of decoration are
available, from slight to gaudy. More decoration means you need to wait
more time for a buffer to be fontified (or a faster machine). To
control how decorated your buffers should become, set the value of
Different levels of decoration are available, from slight to gaudy.
More decoration means you need to wait more time for a buffer to be
fontified (or a faster machine). To control how decorated your
buffers should become, set the value of
@code{font-lock-maximum-decoration} in your @file{.emacs} file, with a
@code{nil} value indicating default (usually minimum) decoration, and a
@code{t} value indicating the maximum decoration. For the gaudiest
@ -2985,11 +2985,7 @@ Add the following line to your @file{.emacs} file:
In many systems, @code{ls} is aliased to @samp{ls --color}, which
prints using ANSI color escape sequences. Emacs includes the
@code{ansi-color} package, which lets Shell mode recognize these
escape sequences. In Emacs 23.2 and later, the package is enabled by
default; in earlier versions you can enable it by typing @kbd{M-x
ansi-color-for-comint-mode} in the Shell buffer, or by adding
@code{(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)} to
your init file.
escape sequences. It is enabled by default.
@node Fullscreen mode on MS-Windows
@section How can I start Emacs in fullscreen mode on MS-Windows?

View file

@ -403,9 +403,9 @@ This selects the function used to render @acronym{HTML}. The
predefined renderers are selected by the symbols @code{shr},
@code{gnus-w3m}, @code{w3m}@footnote{See
@uref{http://emacs-w3m.namazu.org/} for more information about
emacs-w3m}, @code{links}, @code{lynx}, @code{w3m-standalone} or
@code{html2text}. You can also specify a function, which will be
called with a @acronym{MIME} handle as the argument.
emacs-w3m}, @code{links}, @code{lynx}, or @code{w3m-standalone}. You
can also specify a function, which will be called with a
@acronym{MIME} handle as the argument.
@item mm-html-inhibit-images
@vindex mm-html-inhibit-images

View file

@ -201,7 +201,7 @@ history and invoking commands in a script file.
* Aliases::
* History::
* Completion::
* for loop::
* Control Flow::
* Scripts::
@end menu
@ -219,12 +219,18 @@ same name; if there is no match, it then tries to execute it as an
external command.
The semicolon (@code{;}) can be used to separate multiple command
invocations on a single line. A command invocation followed by an
ampersand (@code{&}) will be run in the background. Eshell has no job
control, so you can not suspend or background the current process, or
bring a background process into the foreground. That said, background
processes invoked from Eshell can be controlled the same way as any
other background process in Emacs.
invocations on a single line. You can also separate commands with
@code{&&} or @code{||}. When using @code{&&}, Eshell will execute the
second command only if the first succeeds (i.e.@: has an exit
status of 0); with @code{||}, Eshell will execute the second command
only if the first fails.
A command invocation followed by an ampersand (@code{&}) will be run
in the background. Eshell has no job control, so you can not suspend
or background the current process, or bring a background process into
the foreground. That said, background processes invoked from Eshell
can be controlled the same way as any other background process in
Emacs.
@node Arguments
@section Arguments
@ -884,14 +890,18 @@ command (excluding the command name itself).
@vindex $$
@item $$
This is the result of the last command. In case of an external
command, it is @code{t} or @code{nil}.
This is the result of the last command. For external commands, it is
@code{t} if the exit code was 0 or @code{nil} otherwise.
@vindex eshell-lisp-form-nil-is-failure
@vindex $?
@item $?
This variable contains the exit code of the last command. If the last
command was a Lisp function, it is 0 for successful completion or 1
otherwise.
otherwise. If @code{eshell-lisp-form-nil-is-failure} is
non-@code{nil}, then a command with a Lisp form, like
@samp{(@var{command} @var{args}@dots{})}, that returns @code{nil} will
set this variable to 2.
@vindex $COLUMNS
@vindex $LINES
@ -1008,19 +1018,46 @@ command for which this function provides completions; you can also name
the function @code{pcomplete/MAJOR-MODE/COMMAND} to define completions
for a specific major mode.
@node for loop
@section @code{for} loop
@node Control Flow
@section Control Flow
Because Eshell commands can not (easily) be combined with lisp forms,
Eshell provides a command-oriented @command{for}-loop for convenience.
The syntax is as follows:
Eshell provides command-oriented control flow statements for
convenience.
@example
@code{for VAR in TOKENS @{ command invocation(s) @}}
@end example
Most of Eshell's control flow statements accept a @var{conditional}.
This can take a few different forms. If @var{conditional} is a dollar
expansion, the condition is satisfied if the result is a
non-@code{nil} value. If @var{conditional} is a @samp{@{
@var{subcommand} @}} or @samp{(@var{lisp form})}, the condition is
satisfied if the command's exit status is 0.
where @samp{TOKENS} is a space-separated sequence of values of
@var{VAR} for each iteration. This can even be the output of a
command if @samp{TOKENS} is replaced with @samp{@{ command invocation @}}.
@table @code
@item if @var{conditional} @{ @var{true-commands} @}
@itemx if @var{conditional} @{ @var{true-commands} @} @{ @var{false-commands} @}
Evaluate @var{true-commands} if @var{conditional} is satisfied;
otherwise, evaluate @var{false-commands}.
@item unless @var{conditional} @{ @var{false-commands} @}
@itemx unless @var{conditional} @{ @var{false-commands} @} @{ @var{true-commands} @}
Evaluate @var{false-commands} if @var{conditional} is not satisfied;
otherwise, evaluate @var{true-commands}.
@item while @var{conditional} @{ @var{commands} @}
Repeatedly evaluate @var{commands} so long as @var{conditional} is
satisfied.
@item until @var{conditional} @{ @var{commands} @}
Repeatedly evaluate @var{commands} until @var{conditional} is
satisfied.
@item for @var{var} in @var{list}@dots{} @{ @var{commands} @}
Iterate over each element of of @var{list}, storing the element in
@var{var} and evaluating @var{commands}. If @var{list} is not a list,
treat it as a list of one element. If you specify multiple
@var{lists}, this will iterate over each of them in turn.
@end table
@node Scripts
@section Scripts
@ -1811,11 +1848,6 @@ scrolls back.
@item Menu support was removed, but never put back
@item Using C-p and C-n with rebind gets into a locked state
This happened a few times in Emacs 21, but has been irreproducible
since.
@item If an interactive process is currently running, @kbd{M-!} doesn't work
@item Use a timer instead of @code{sleep-for} when killing child processes

View file

@ -1,7 +1,7 @@
@c \input texinfo @c -*-texinfo-*-
@c Uncomment 1st line before texing this file alone.
@c %**start of header
@c Copyright (C) 1995, 2001--2022 Free Software Foundation, Inc.
@c Copyright (C) 1995--2022 Free Software Foundation, Inc.
@c
@c @setfilename gnus-faq.info
@c @settitle Frequently Asked Questions
@ -13,7 +13,6 @@
@section Frequently Asked Questions
@menu
* FAQ - Changes::
* FAQ - Introduction:: About Gnus and this FAQ.
* FAQ 1 - Installation FAQ:: Installation of Gnus.
* FAQ 2 - Startup / Group buffer:: Start up questions and the
@ -41,21 +40,6 @@ This is the new Gnus Frequently Asked Questions list.
Please submit features and suggestions to the
@email{ding@@gnus.org, ding list}.
@node FAQ - Changes
@subsection Changes
@itemize @bullet
@item
2008-06-15: Adjust for message-fill-column. Add x-face-file.
Clarify difference between ding and gnu.emacs.gnus. Remove
reference to discontinued service.
@item
2006-04-15: Added tip on how to delete sent buffer on exit.
@end itemize
@node FAQ - Introduction
@subsection Introduction
@ -63,11 +47,11 @@ reference to discontinued service.
This is the Gnus Frequently Asked Questions list.
Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
as a part of Emacs. It's been around in some form for almost a decade
now, and has been distributed as a standard part of Emacs for much of
that time. Gnus 5 is the latest (and greatest) incarnation. The
as a part of Emacs. It's been around in some form since the early
1990s, and has been distributed as a standard part of Emacs for much
of that time. Gnus 5 is the latest (and greatest) incarnation. The
original version was called GNUS, and was written by Masanobu UMEDA@.
When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
When autumn crept up in 1994, Lars Magne Ingebrigtsen grew bored and
decided to rewrite Gnus.
Its biggest strength is the fact that it is extremely
@ -84,11 +68,6 @@ would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
job with this FAQ before him. We would like to do the same: thanks,
Justin!
This version is much nicer than the unofficial hypertext
versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
State, and other FAQ archives. See the resources question below
if you want information on obtaining it in another format.
The information contained here was compiled with the assistance
of the Gnus development mailing list, and any errors or
misprints are the Gnus team's fault, sorry.
@ -98,11 +77,9 @@ misprints are the Gnus team's fault, sorry.
@menu
* FAQ 1-1:: What is the latest version of Gnus?
* FAQ 1-2:: What's new in 5.10?
* FAQ 1-3:: Where and how to get Gnus?
* FAQ 1-4:: I sometimes read references to No Gnus and Oort Gnus,
* FAQ 1-2:: Where and how to get Gnus?
* FAQ 1-3:: I sometimes read references to No Gnus and Oort Gnus,
what are those?
* FAQ 1-5:: Which version of Emacs do I need?
@end menu
@node FAQ 1-1
@ -112,80 +89,28 @@ What is the latest version of Gnus?
@subsubheading Answer
Jingle please: Gnus 5.10 is released, get it while it's
hot! As well as the step in version number is rather
small, Gnus 5.10 has tons of new features which you
shouldn't miss. The current release (5.13) should be at
least as stable as the latest release of the 5.8 series.
The latest version of Gnus is bundled with Emacs.
@node FAQ 1-2
@subsubheading Question 1.2
What's new in 5.10?
@subsubheading Answer
First of all, you should have a look into the file
GNUS-NEWS in the toplevel directory of the Gnus tarball,
there the most important changes are listed. Here's a
short list of the changes I find especially
important/interesting:
@itemize @bullet
@item
Major rewrite of the Gnus agent, Gnus agent is now
active by default.
@item
Many new article washing functions for dealing with
ugly formatted articles.
@item
Anti Spam features.
@item
Message-utils now included in Gnus.
@item
New format specifiers for summary lines, e.g., %B for
a complex trn-style thread tree.
@end itemize
@node FAQ 1-3
@subsubheading Question 1.3
Where and how to get Gnus?
@subsubheading Answer
Gnus is bundled with Emacs.
@node FAQ 1-4
@subsubheading Question 1.4
@node FAQ 1-3
@subsubheading Question 1.3
I sometimes read references to No Gnus and Oort Gnus,
what are those?
@subsubheading Answer
Oort Gnus was the name of the development version of
Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is
the name of the current development version which will
once become Gnus 5.12 or Gnus 6. (If you're wondering why
not 5.11, the odd version numbers are normally used for
the Gnus versions bundled with Emacs)
@node FAQ 1-5
@subsubheading Question 1.5
Which version of Emacs do I need?
@subsubheading Answer
Gnus 5.13 requires an Emacs version that is greater than or equal
to Emacs 23.1, although there are some features that
only work on Emacs 24.
Oort Gnus was the name of the development version of Gnus, which
became Gnus 5.10 in autumn 2003. No Gnus was the name of the
development version that became Gnus 5.12.
@node FAQ 2 - Startup / Group buffer
@subsection Startup / Group buffer
@ -718,9 +643,8 @@ in @file{~/.gnus.el} to load enough old articles to prevent teared threads, repl
all articles (Warning: Both settings enlarge the amount of data which is
fetched when you enter a group and slow down the process of entering a group).
If you already use Gnus 5.10, you can say
@samp{/o N}
In summary buffer to load the last N messages, this feature is not available in 5.8.8
You can say @samp{/o N} in the summary buffer to load the last N
messages.
If you don't want all old messages, but the parent of the message you're just reading,
you can say @samp{^}, if you want to retrieve the whole thread
@ -820,11 +744,10 @@ Can I use some other browser than w3m to render my HTML-mails?
@subsubheading Answer
Only if you use Gnus 5.10 or younger. In this case you've got the
choice between shr, w3m, links, lynx and html2text, which
one is used can be specified in the variable
mm-text-html-renderer, so if you want links to render your
mail say
You've got the choice between @samp{shr}, @samp{w3m}, @samp{links},
and @samp{lynx}. Which one is used is specified in the variable
@code{mm-text-html-renderer}, so if you want links to render your
mail, say:
@example
(setq mm-text-html-renderer 'links)
@ -847,8 +770,7 @@ long lines'' (@samp{W w}), ``Decode ROT13''
the dumb quoting used by many users of Microsoft products
(@samp{W Y f} gives you full deuglify.
See @samp{W Y C-h} or have a look at the menus for
other deuglifications). Outlook deuglify is only available since
Gnus 5.10.
other deuglifications).
@node FAQ 4-9
@subsubheading Question 4.9
@ -1038,7 +960,7 @@ you'll find useful things like positioning the cursor and
tabulators which allow you a summary in table form, but
sadly hard tabulators are broken in 5.8.8.
Since 5.10, Gnus offers you some very nice new specifiers,
Gnus offers you some very nice new specifiers,
e.g., %B which draws a thread-tree and %&user-date which
gives you a date where the details are dependent of the
articles age. Here's an example which uses both:
@ -1245,7 +1167,7 @@ How to set stuff like From, Organization, Reply-To, signature...?
@subsubheading Answer
There are other ways, but you should use posting styles
for this. (See below why).
for this. (See below why.)
This example should make the syntax clear:
@example
@ -1329,19 +1251,14 @@ Is there a spell-checker? Perhaps even on-the-fly spell-checking?
@subsubheading Answer
You can use ispell.el to spell-check stuff in Emacs. So the
first thing to do is to make sure that you've got either
@uref{https://www.cs.hmc.edu/~geoff/ispell.html, ispell}
or @uref{http://aspell.net, aspell}
installed and in your Path. Then you need
ispell.el
and for on-the-fly spell-checking
@uref{https://www-sop.inria.fr/members/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}.
Ispell.el is shipped with Emacs,
flyspell.el is shipped with Emacs, so there should be no need to install them
manually.
You can use ispell.el to spell-check stuff in Emacs, and flyspell.el
for on-the-fly spell-checking. So the first thing to do is to make
sure that you've got either
@uref{https://hunspell.github.io/, hunspell},
@uref{https://www.cs.hmc.edu/~geoff/ispell.html, ispell} or
@uref{http://aspell.net, aspell} installed and in your Path.
Ispell.el assumes you use ispell, if you choose aspell say
Ispell.el assumes you use ispell. If you use aspell say
@example
(setq ispell-program-name "aspell")
@ -1494,14 +1411,14 @@ Now you only have to tell Gnus to include the X-face in your postings by saying
@end example
@noindent
in @file{~/.gnus.el}. If you use Gnus 5.10, you can simply add an entry
in @file{~/.gnus.el}. You can add an entry
@example
(x-face-file "~/.xface")
@end example
@noindent
to gnus-posting-styles.
to @code{gnus-posting-styles}.
@node FAQ 5-9
@subsubheading Question 5.9
@ -1519,21 +1436,6 @@ Put this in @file{~/.gnus.el}:
@end example
@noindent
if you already use Gnus 5.10, if you still use 5.8.8 or
5.9 try this instead:
@example
(with-eval-after-load "gnus-msg"
(unless (boundp 'gnus-confirm-mail-reply-to-news)
(defadvice gnus-summary-reply (around reply-in-news activate)
"Request confirmation when replying to news."
(interactive)
(when (or (not (gnus-news-group-p gnus-newsgroup-name))
(y-or-n-p "Really reply by mail to article author?"))
ad-do-it))))
@end example
@noindent
@node FAQ 5-10
@subsubheading Question 5.10
@ -1541,14 +1443,7 @@ How to tell Gnus not to generate a sender header?
@subsubheading Answer
Since 5.10 Gnus doesn't generate a sender header by
default. For older Gnus' try this in @file{~/.gnus.el}:
@example
(with-eval-after-load "message"
(add-to-list 'message-syntax-checks '(sender . disabled)))
@end example
@noindent
Gnus doesn't generate a sender header by default.
@node FAQ 5-11
@subsubheading Question 5.11
@ -1729,7 +1624,7 @@ more then one article."
You can now say @samp{M-x
my-archive-article} in summary buffer to
archive the article under the cursor in a nnml
group. (Change nnml to your preferred back end)
group. (Change nnml to your preferred back end.)
Of course you can also make sure the cache is enabled by saying
@ -1756,7 +1651,7 @@ if you found the posting there, tell Google to display
the raw message, look for the message-id, and say
@samp{M-^ the@@message.id @key{RET}} in a
summary buffer.
Since Gnus 5.10 there's also a Gnus interface for
There's a Gnus interface for
groups.google.com which you can call with
@samp{G W}) in group buffer.
@ -1770,25 +1665,6 @@ instead. Further on there are the
gnus-summary-limit-to-foo functions, which can help you,
too.
Of course you can also use grep to search through your
local mail, but this is both slow for big archives and
inconvenient since you are not displaying the found mail
in Gnus. Here nnir comes into action. Nnir is a front end
to search engines like swish-e or swish++ and
others. You index your mail with one of those search
engines and with the help of nnir you can search through
the indexed mail and generate a temporary group with all
messages which met your search criteria. If this sounds
cool to you, get nnir.el from
@c FIXME Isn't this file in Gnus?
@ignore
@c Dead link 2013/7.
@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/}
or
@end ignore
@uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}.
Instructions on how to use it are at the top of the file.
@node FAQ 6-4
@subsubheading Question 6.4
@ -1937,16 +1813,9 @@ So what was this thing about the Agent?
The Gnus agent is part of Gnus, it allows you to fetch
mail and news and store them on disk for reading them
later when you're offline. It kind of mimics offline
newsreaders like Forte Agent. If you want to use
the Agent place the following in @file{~/.gnus.el} if you are
still using 5.8.8 or 5.9 (it's the default since 5.10):
newsreaders like Forte Agent. It is enabled by default.
@example
(setq gnus-agent t)
@end example
@noindent
Now you've got to select the servers whose groups can be
You've got to select the servers whose groups can be
stored locally. To do this, open the server buffer
(that is press @samp{^} while in the
group buffer). Now select a server by moving point to
@ -2161,12 +2030,12 @@ How to speed up the process of entering a group?
@subsubheading Answer
A speed killer is setting the variable
gnus-fetch-old-headers to anything different from @code{nil},
so don't do this if speed is an issue.
A speed killer is setting the variable @code{gnus-fetch-old-headers}
to anything different from @code{nil}, so don't do this if speed is an
issue.
You could increase the value of gc-cons-threshold
by saying something like
You could increase the value of @code{gc-cons-threshold} by saying
something like:
@example
(setq gc-cons-threshold 3500000)
@ -2204,10 +2073,6 @@ between core Gnus and the real NNTP-, POP3-, IMAP- or
whatever-server which offers Gnus a standardized interface
to functions like "get message", "get Headers" etc.
@item Emacs
When the term Emacs is used in this FAQ, it means GNU
Emacs.
@item Message
In this FAQ message means either a mail or a posting to a
Usenet Newsgroup or to some other fancy back end, no matter

View file

@ -885,8 +885,6 @@ History
* Why?:: What's the point of Gnus?
* Compatibility:: Just how compatible is Gnus with @sc{gnus}?
* Conformity:: Gnus tries to conform to all standards.
* Emacsen:: Gnus can be run on a few modern Emacsen.
* Gnus Development:: How Gnus is developed.
* Contributors:: Oodles of people.
* New Features:: Pointers to some of the new stuff in Gnus.
@ -8621,14 +8619,6 @@ uuencoded files that have had trailing spaces deleted.
@vindex gnus-uu-pre-uudecode-hook
Hook run before sending a message to @code{uudecode}.
@item gnus-uu-view-with-metamail
@vindex gnus-uu-view-with-metamail
@cindex metamail
Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
commands defined by the rule variables and just fudge a @acronym{MIME}
content type based on the file name. The result will be fed to
@code{metamail} for viewing.
@item gnus-uu-save-in-digest
@vindex gnus-uu-save-in-digest
Non-@code{nil} means that @code{gnus-uu}, when asked to save without
@ -9364,9 +9354,6 @@ Use @uref{https://almende.github.io/chap-links-library/, CHAP Links}.
@item lynx
Use @uref{https://lynx.browser.org/, Lynx}.
@item html2text
Use html2text---a simple @acronym{HTML} converter included with Gnus.
@end table
@item W D F
@ -15440,8 +15427,6 @@ files. If a positive number, delete files older than number of days
(the deletion will only happen when receiving new mail). You may also
set @code{mail-source-delete-incoming} to @code{nil} and call
@code{mail-source-delete-old-incoming} from a hook or interactively.
@code{mail-source-delete-incoming} defaults to @code{10} in alpha Gnusae
and @code{2} in released Gnusae. @xref{Gnus Development}.
@item mail-source-delete-old-incoming-confirm
@vindex mail-source-delete-old-incoming-confirm
@ -21962,7 +21947,7 @@ you can set up a local @acronym{IMAP} server, which you then access via
@code{nnimap}. This is a rather massive setup for accessing some mbox
files, so just change to MH or Maildir already... However, if you're
really, really passionate about using mbox, you might want to look into
the package @file{mairix.el}, which comes with Emacs 23.
the package @file{mairix.el}, which comes with Emacs.
@node What nnmairix does
@subsection What nnmairix does
@ -26919,8 +26904,6 @@ renamed it back again to ``Gnus''. But in mixed case. ``Gnus'' vs.
* Why?:: What's the point of Gnus?
* Compatibility:: Just how compatible is Gnus with @sc{gnus}?
* Conformity:: Gnus tries to conform to all standards.
* Emacsen:: Gnus can be run on a few modern Emacsen.
* Gnus Development:: How Gnus is developed.
* Contributors:: Oodles of people.
* New Features:: Pointers to some of the new stuff in Gnus.
@end menu
@ -27035,16 +27018,6 @@ maintains a hash table that points to the entries in this alist (which
speeds up many functions), and changing the alist directly will lead to
peculiar results.
@cindex hilit19
@cindex highlighting
Old hilit19 code does not work at all. In fact, you should probably
remove all hilit code from all Gnus hooks
(@code{gnus-group-prepare-hook} and @code{gnus-summary-prepare-hook}).
Gnus provides various integrated functions for highlighting. These are
faster and more accurate. To make life easier for everybody, Gnus will
by default remove all hilit calls from all hilit hooks. Uncleanliness!
Away!
Packages like @code{expire-kill} will no longer work. As a matter of
fact, you should probably remove all old @sc{gnus} packages (and other
code) when you start using Gnus. More likely than not, Gnus already
@ -27147,79 +27120,6 @@ mentioned above, don't hesitate to drop a note to Gnus Towers and let us
know.
@node Emacsen
@subsection Emacsen
@cindex Emacsen
@cindex Mule
@cindex Emacs
This version of Gnus should work on:
@itemize @bullet
@item
Emacs 23.1 and up.
@end itemize
This Gnus version will absolutely not work on any Emacsen older than
that. Not reliably, at least. Older versions of Gnus may work on older
Emacs versions. Particularly, Gnus 5.10.8 should also work on Emacs
20.7.
@c No-merge comment: The paragraph added in v5-10 here must not be
@c synced here!
@node Gnus Development
@subsection Gnus Development
Gnus is developed in a two-phased cycle. The first phase involves much
discussion on the development mailing list @samp{ding@@gnus.org}, where people
propose changes and new features, post patches and new back ends. This
phase is called the @dfn{alpha} phase, since the Gnusae released in this
phase are @dfn{alpha releases}, or (perhaps more commonly in other
circles) @dfn{snapshots}. During this phase, Gnus is assumed to be
unstable and should not be used by casual users. Gnus alpha releases
have names like ``Oort Gnus'' and ``No Gnus''. @xref{Gnus Versions}.
After futzing around for 10--100 alpha releases, Gnus is declared
@dfn{frozen}, and only bug fixes are applied. Gnus loses the prefix,
and is called things like ``Gnus 5.10.1'' instead. Normal people are
supposed to be able to use these, and these are mostly discussed on the
@samp{gnu.emacs.gnus} newsgroup. This newgroup is mirrored to the
mailing list @samp{info-gnus-english@@gnu.org} which is carried on Gmane
as @samp{gmane.emacs.gnus.user}. These releases are finally integrated
in Emacs.
@cindex Incoming*
@vindex mail-source-delete-incoming
Some variable defaults differ between alpha Gnusae and released Gnusae,
in particular, @code{mail-source-delete-incoming}. This is to prevent
lossage of mail if an alpha release hiccups while handling the mail.
@xref{Mail Source Customization}.
The division of discussion between the ding mailing list and the Gnus
newsgroup is not purely based on publicity concerns. It's true that
having people write about the horrible things that an alpha Gnus release
can do (sometimes) in a public forum may scare people off, but more
importantly, talking about new experimental features that have been
introduced may confuse casual users. New features are frequently
introduced, fiddled with, and judged to be found wanting, and then
either discarded or totally rewritten. People reading the mailing list
usually keep up with these rapid changes, while people on the newsgroup
can't be assumed to do so.
So if you have problems with or questions about the alpha versions,
direct those to the ding mailing list @samp{ding@@gnus.org}. This list
is also available on Gmane as @samp{gmane.emacs.gnus.general}.
@cindex Incoming*
@vindex mail-source-delete-incoming
Some variable defaults differ between alpha Gnusae and released Gnusae,
in particular, @code{mail-source-delete-incoming}. This is to prevent
lossage of mail if an alpha release hiccups while handling the mail.
@xref{Mail Source Customization}.
@node Contributors
@subsection Contributors
@cindex contributors

View file

@ -10,8 +10,7 @@
This manual documents Htmlfontify, a source code -> crosslinked +
formatted + syntax colorized html transformer.
Copyright @copyright{} 2002--2003, 2013--2022 Free Software Foundation,
Inc.
Copyright @copyright{} 2002--2022 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
@ -1539,13 +1538,6 @@ Htmlfontify has a couple of external requirements:
@itemize @bullet
@item
GNU Emacs 20.7+ or 21.1+
Other versions may work---these have been used successfully by the
author. If you intend to use Htmlfontify in batch mode, 21.1+ is
pretty much required.
@item
A copy of etags (exuberant-ctags or GNU etags). Htmlfontify attempts
to autodetect the version you have and customize itself accordingly,

View file

@ -4116,17 +4116,6 @@ configuration files (e.g., @file{.cshrc}), but from the file
@file{~/.MacOSX/environment.plist}. Either include your path settings
there, or start Emacs and IDLWAVE from the shell.
@item @strong{I'm getting errors like @samp{Symbol's value as variable is void:
cl-builtin-gethash} on completion or routine info.}
This error arises if you upgraded Emacs from 20.x to 21.x without
re-installing IDLWAVE@. Old Emacs and new Emacs are not byte-compatible
in compiled lisp files. Presumably, you kept the original .elc files in
place, and this is the source of the error. If you recompile (or just
"make; make install") from source, it should resolve this problem.
Another option is to recompile the @file{idlw*.el} files by hand using
@kbd{M-x byte-compile-file}.
@item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches
windows on my desktop.}

View file

@ -1152,12 +1152,11 @@ programs are required to make things work, and some small general hints.
@uref{https://www.gnupg.org/, GNU Privacy Guard} or
@uref{https://www.openssl.org/, OpenSSL}. The default Emacs interface
to the S/MIME implementation is EasyPG (@pxref{Top,,EasyPG Assistant
User's Manual, epa, EasyPG Assistant User's Manual}), which has been
included in Emacs since version 23 and which relies on the command
line tool @command{gpgsm} provided by @acronym{GnuPG}. That tool
implements certificate management, including certificate revocation
and expiry, while such tasks need to be performed manually, if OpenSSL
is used.
User's Manual, epa, EasyPG Assistant User's Manual}), which is
included in Emacs and relies on the command line tool @command{gpgsm}
provided by @acronym{GnuPG}. That tool implements certificate
management, including certificate revocation and expiry, while such
tasks need to be performed manually, if OpenSSL is used.
The choice between EasyPG and OpenSSL is controlled by the variable
@code{mml-smime-use}, which needs to be set to the value @code{epg}

View file

@ -213,8 +213,8 @@ more niceties about GNU Emacs and MH@. Now I'm fully hooked on both of
them.
The MH-E package is distributed with Emacs@footnote{Version
@value{VERSION} of MH-E appeared in Emacs 24.4. It is supported in GNU
Emacs 23 and higher. It is compatible with MH versions 6.8.4 and
@value{VERSION} of MH-E appeared in Emacs 24.4.
It is compatible with MH versions 6.8.4 and
higher, all versions of nmh, and GNU mailutils 1.0 and higher}, so you
shouldn't have to do anything special to use it. Gnus is also
required; version 5.10 or higher is recommended. This manual covers
@ -1488,7 +1488,7 @@ Binding} of @samp{m}.
@cindex Unix commands, @command{xbuffy}
You can use @command{xbuffy} to automate the incorporation of this
mail using the Emacs 23 command @command{emacsclient} as follows:
mail using the Emacs command @command{emacsclient} as follows:
@smallexample
box ~/mail/mh-e
@ -2553,13 +2553,6 @@ produces pretty nice output, and it highlights links. It renders
@samp{&ndash;} and @samp{&reg;} okay. It sometimes fails to wrap lines
properly. It always downloads remote images.
@c -------------------------
@cindex browser, @samp{html2text}
@cindex @samp{html2text}
@item @samp{html2text}
The @samp{html2text} browser requires an external program. Some users
have reported problems with it, such as filling the entire message as
if it were one paragraph, or displaying chunks of raw HTML.
@c -------------------------
@cindex browser, @samp{links}
@cindex @samp{links}
@item @samp{links}

View file

@ -3383,7 +3383,7 @@ names. Beside the @code{default} value, @var{syntax} can be
@item @code{simplified}
@cindex simplified syntax
The remote file name syntax is similar to the syntax used by Ange FTP@.
This remote file name syntax is similar to the syntax used by Ange FTP@.
A remote file name has the form
@code{@value{prefix}user@@host@value{postfix}path/to/file}. The
@code{user@@} part is optional, and the method is determined by
@ -3395,7 +3395,7 @@ A remote file name has the form
@clear unified
@set separate
@include trampver.texi
The remote file name syntax is similar to the syntax used by XEmacs.
This remote file name syntax originated in the XEmacs text editor.
A remote file name has the form
@code{@trampfn{method,user@@host,path/to/file}}. The @code{method}
and @code{user@@} parts are optional.

View file

@ -1842,7 +1842,7 @@ usually most effective:
(set-face-background viper-replace-overlay-face "yellow")
@end smallexample
For a complete list of colors available to you, evaluate the expression
@code{(x-defined-colors)}. (Type it in the buffer @file{*scratch*} and then
@code{(defined-colors)}. (Type it in the buffer @file{*scratch*} and then
hit the @kbd{C-j} key.
@item viper-replace-overlay-cursor-color "Red"
@ -2571,7 +2571,7 @@ The GNU Emacs Manual}, for more information on tags.
The following two commands are normally bound to a mouse click and are part
of Viper. They work only if Emacs runs as an application under X
Windows (or under some other window system for which a port of GNU Emacs 20
Windows (or under some other window system for which a port of GNU Emacs
is available). Clicking the mouse when Emacs is invoked in an Xterm window
(using @code{emacs -nw}) will do no good.

View file

@ -6062,6 +6062,6 @@ Zoran Milojevic: changed avoid.el
উৎসব রায়: changed quail/indian.el
Local Variables:
mode: etc-authors
mode: emacs-authors
coding: utf-8
End:

View file

@ -385,6 +385,10 @@ longer choke when a buffer on display contains long lines. The
variable 'long-line-threshold' controls whether and when these display
optimizations are in effect.
A companion variable 'large-hscroll-threshold' controls when another
set of display optimizations are in effect, which are aimed
specifically at speeding up display of long lines that are truncated.
If you still experience slowdowns while editing files with long lines,
this may be due to line truncation, or to one of the enabled minor
modes, or to the current major mode. Try turning off line truncation
@ -396,6 +400,9 @@ and the major mode with 'M-x so-long-mode', or visit the file with
Note that the display optimizations in these cases may cause the
buffer to be occasionally mis-fontified.
The new function 'long-line-optimizations-p' returns non-nil when
these optimizations are in effect in the current buffer.
+++
** New command to change the font size globally.
To increase the font size, type 'C-x C-M-+' or 'C-x C-M-='; to
@ -454,7 +461,7 @@ duplicated on its right-hand side.
+++
** 'network-lookup-address-info' can now check numeric IP address validity.
Specifying 'numeric as the new optional 'hints' argument makes it
Specifying 'numeric' as the new optional 'hints' argument makes it
check if the passed address is a valid IPv4/IPv6 address (without DNS
traffic).
@ -1250,6 +1257,12 @@ be used as a file-local variable.
If given a prefix, it will query the user for an argument to use for
the run/continue command.
---
*** 'perldb' now recognizes '-E'.
As of Perl 5.10, 'perl -E 0' behaves like 'perl -e 0' but also activates
all optional features of the Perl version in use. 'perldb' now uses
this invocation as its default.
** Customize
---
@ -1265,7 +1278,6 @@ Sets the value of the buffer-local variable 'whitespace-style' in
'diff-mode' buffers. By default, this variable is '(face trailing)',
which preserves behavior from previous Emacs versions.
** Ispell
---
@ -1339,6 +1351,13 @@ When invoked with a non-zero prefix argument, as in 'C-u C-x C-e',
this command will pop up a new buffer and show the full pretty-printed
value there.
+++
*** You can now generate a backtrace from Lisp errors in redisplay.
To do this, set the new variable 'backtrace-on-redisplay-error' to a
non-nil value. The backtrace will be written to a special buffer
named "*Redisplay-trace*". This buffer will not be automatically
displayed in a window.
** Compile
+++
@ -1741,11 +1760,6 @@ The new ':doc-spec-function' element can be used to compute the
':doc-spec' element when the user asks for info on that particular
mode (instead of at load time).
** Subr-x
+++
*** New macro 'with-memoization' provides a very primitive form of memoization.
** Ansi-color
---
@ -2035,7 +2049,7 @@ 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.
*** On X, the WebKit inspector is now available inside xwidgets.
To access the inspector, right click on the widget and select "Inspect
Element".
@ -2149,6 +2163,13 @@ Additionally, globs ending with '**/' or '***/' no longer raise an
error, and now expand to all directories recursively (following
symlinks in the latter case).
+++
*** Lisp forms in Eshell now treat a 'nil' result as a failed exit status.
When executing a command that looks like '(lisp form)', Eshell will
set the exit status (available in the '$?' variable) to 2. This
allows commands like that to be used as conditionals. To change this
behavior, customize the new 'eshell-lisp-form-nil-is-failure' option.
** Shell
---
@ -2229,10 +2250,10 @@ instead of also trying to ping it. Customize the user option
To respect Emacs naming conventions, the variable 'unread-bib-file'
has been renamed to 'bib-unread-file'. The following commands have
also been renamed:
'addbib' to 'bib-add'
'return-key-bib' to 'bib-return-key'
'mark-bib' to 'bib-mark'
'unread-bib' to 'bib-unread'
'addbib' to 'bib-add'
'return-key-bib' to 'bib-return-key'
'mark-bib' to 'bib-mark'
'unread-bib' to 'bib-unread'
---
*** proced.el shows system processes of remote hosts.
@ -2550,6 +2571,18 @@ patcomp.el, pc-mode.el, pc-select.el, s-region.el, and sregex.el.
* Lisp Changes in Emacs 29.1
+++
** New function 'compiled-function-p'.
This returns non-nil if its argument is either a built-in, or a
byte-compiled, or a natively-compiled function object, or a function
loaded from a dynamic module.
---
** 'deactivate-mark' can have new value 'dont-save'.
This value means that Emacs should deactivate the mark as usual, but
without setting the primary selection, if 'select-active-regions' is
enabled.
+++
** New 'declare' form 'interactive-args'.
This can be used to specify what forms to put into 'command-history'
@ -2562,8 +2595,8 @@ compiler now emits a warning about this deprecated usage.
+++
** Emacs now supports user-customizable and themable icons.
These can be used for buttons in buffers and the like. See
'(elisp)Icons' and '(emacs)Icons' for details.
These can be used for buttons in buffers and the like. See the
"(elisp) Icons" and "(emacs) Icons" nodes in the manuals for details.
+++
** New arguments MESSAGE and TIMEOUT of 'set-transient-map'.
@ -2624,11 +2657,13 @@ things to be saved.
** New function 'string-equal-ignore-case'.
This compares strings ignoring case differences.
---
** 'symbol-file' can now report natively-compiled .eln files.
** 'symbol-file' can now report natively-compiled ".eln" files.
If Emacs was built with native-compilation enabled, Lisp programs can
now call 'symbol-file' with the new optional 3rd argument non-nil to
request the name of the .eln file which defined a given symbol.
request the name of the ".eln" file which defined a given symbol.
+++
** New macro 'with-memoization' provides a very primitive form of memoization.
** Themes
@ -2860,7 +2895,7 @@ This is like 'get-text-property', but works on the 'display' text
property.
+++
** New function 'add-text-display-property'.
** New function 'add-display-text-property'.
This is like 'put-text-property', but works on the 'display' text
property.

View file

@ -3435,14 +3435,6 @@ The fix is to install a newer version of ncurses, such as version 4.2.
Bootstrapping (compiling the .el files) is normally only necessary
with development builds, since the .elc files are pre-compiled in releases.
*** "No rule to make target" with Ubuntu 8.04 make 3.81-3build1
Compiling the lisp files fails at random places, complaining:
"No rule to make target '/path/to/some/lisp.elc'".
The causes of this problem are not understood. Using GNU make 3.81 compiled
from source, rather than the Ubuntu version, worked.
See <URL:https://debbugs.gnu.org/327>, <URL:https://debbugs.gnu.org/821>.
** Dumping
*** Segfault during 'make'
@ -3567,6 +3559,15 @@ This section covers bugs reported on very old hardware or software.
If you are using hardware and an operating system shipped after 2000,
it is unlikely you will see any of these.
** GNU/Linux
*** Ubuntu 8.04 make 3.81-3build1: "No rule to make target"
Compiling the lisp files fails at random places, complaining:
"No rule to make target '/path/to/some/lisp.elc'".
The causes of this problem are not understood. Using GNU make 3.81 compiled
from source, rather than the Ubuntu version, worked.
See <URL:https://debbugs.gnu.org/327>, <URL:https://debbugs.gnu.org/821>.
** Solaris
*** Problem with remote X server on Suns.

View file

@ -103,7 +103,7 @@ Set them to the optional arguments A-ROW and A-COLUMN if those are supplied."
(defun array-update-buffer-position ()
"Set `array-buffer-line' and `array-buffer-column' to their current values."
(setq array-buffer-line (current-line)
(setq array-buffer-line (array-current-line)
array-buffer-column (current-column)))
@ -113,7 +113,7 @@ Set them to the optional arguments A-ROW and A-COLUMN if those are supplied."
(defun array-what-position ()
"Display the row and column in which the cursor is positioned."
(interactive)
(let ((array-buffer-line (current-line))
(let ((array-buffer-line (array-current-line))
(array-buffer-column (current-column)))
(message "Array row: %s Array column: %s"
(prin1-to-string (array-current-row))
@ -147,13 +147,13 @@ Set them to the optional arguments A-ROW and A-COLUMN if those are supplied."
;;; Internal movement functions.
(defun array-beginning-of-field (&optional go-there)
"Return the column of the beginning of the current field.
"Return the column of the beginning of the current field.
Optional argument GO-THERE, if non-nil, means go there too."
;; Requires that array-buffer-column be current.
(let ((goal-column (- array-buffer-column (% array-buffer-column array-field-width))))
(if go-there
(move-to-column-untabify goal-column)
goal-column)))
;; Requires that array-buffer-column be current.
(let ((goal-column (- array-buffer-column (% array-buffer-column array-field-width))))
(if go-there
(array-move-to-column-untabify goal-column)
goal-column)))
(defun array-end-of-field (&optional go-there)
"Return the column of the end of the current array field.
@ -162,7 +162,7 @@ If optional argument GO-THERE is non-nil, go there too."
(let ((goal-column (+ (- array-buffer-column (% array-buffer-column array-field-width))
array-field-width)))
(if go-there
(move-to-column-untabify goal-column)
(array-move-to-column-untabify goal-column)
goal-column)))
(defun array-move-to-cell (a-row a-column)
@ -174,7 +174,7 @@ Leave point at the beginning of the field and return the new buffer column."
(goal-column (* array-field-width (% (1- a-column) array-columns-per-line))))
(goto-char (point-min))
(forward-line goal-line)
(move-to-column-untabify goal-column)))
(array-move-to-column-untabify goal-column)))
(defun array-move-to-row (a-row)
"Move to array row A-ROW preserving the current array column.
@ -184,7 +184,7 @@ Leave point at the beginning of the field and return the new array row."
(% array-buffer-line array-lines-per-row)))
(goal-column (- array-buffer-column (% array-buffer-column array-field-width))))
(forward-line (- goal-line array-buffer-line))
(move-to-column-untabify goal-column)
(array-move-to-column-untabify goal-column)
a-row))
(defun array-move-to-column (a-column)
@ -196,7 +196,7 @@ Leave point at the beginning of the field and return the new array column."
(floor (1- a-column) array-columns-per-line)))
(goal-column (* array-field-width (% (1- a-column) array-columns-per-line))))
(forward-line (- goal-line array-buffer-line))
(move-to-column-untabify goal-column)
(array-move-to-column-untabify goal-column)
a-column))
(defun array-move-one-row (sign)
@ -214,7 +214,7 @@ If requested to move beyond the array bounds, signal an error."
(t
(progn
(forward-line (* sign array-lines-per-row))
(move-to-column-untabify goal-column)
(array-move-to-column-untabify goal-column)
(+ array-row sign))))))
(defun array-move-one-column (sign)
@ -233,15 +233,15 @@ If requested to move beyond the array bounds, signal an error."
;; Going backward from first column on the line.
((and (= sign -1) (= 1 (% array-column array-columns-per-line)))
(forward-line -1)
(move-to-column-untabify
(array-move-to-column-untabify
(* array-field-width (1- array-columns-per-line))))
;; Going forward from last column on the line.
((and (= sign 1) (zerop (% array-column array-columns-per-line)))
(forward-line 1))
;; Somewhere in the middle of the line.
(t
(move-to-column-untabify (+ (array-beginning-of-field)
(* array-field-width sign)))))
(array-move-to-column-untabify (+ (array-beginning-of-field)
(* array-field-width sign)))))
(+ array-column sign)))))
(defun array-normalize-cursor ()
@ -281,15 +281,15 @@ If necessary, scroll horizontally to keep the cursor in view."
"Move down one array row, staying in the current array column.
If optional ARG is given, move down ARG array rows."
(interactive "p")
(let ((array-buffer-line (current-line))
(let ((array-buffer-line (array-current-line))
(array-buffer-column (current-column)))
(if (= (abs arg) 1)
(array-move-one-row arg)
(array-move-to-row
(limit-index (+ (or (array-current-row)
(error "Cursor is not in an array cell"))
arg)
array-max-row))))
(array--limit-index (+ (or (array-current-row)
(error "Cursor is not in an array cell"))
arg)
array-max-row))))
(array-normalize-cursor))
(defun array-previous-row (&optional arg)
@ -303,15 +303,15 @@ If optional ARG is given, move up ARG array rows."
If optional ARG is given, move forward ARG array columns.
If necessary, keep the cursor in the window by scrolling right or left."
(interactive "p")
(let ((array-buffer-line (current-line))
(let ((array-buffer-line (array-current-line))
(array-buffer-column (current-column)))
(if (= (abs arg) 1)
(array-move-one-column arg)
(array-move-to-column
(limit-index (+ (or (array-current-column)
(error "Cursor is not in an array cell"))
arg)
array-max-column))))
(array--limit-index (+ (or (array-current-column)
(error "Cursor is not in an array cell"))
arg)
array-max-column))))
(array-normalize-cursor))
(defun array-backward-column (&optional arg)
@ -325,8 +325,8 @@ If necessary, keep the cursor in the window by scrolling right or left."
"Go to array row A-ROW and array column A-COLUMN."
(interactive "nArray row: \nnArray column: ")
(array-move-to-cell
(limit-index a-row array-max-row)
(limit-index a-column array-max-column))
(array--limit-index a-row array-max-row)
(array--limit-index a-column array-max-column))
(array-normalize-cursor))
@ -417,7 +417,7 @@ Leave point at the beginning of the field."
"Copy the current field one array row down.
If optional ARG is given, copy down through ARG array rows."
(interactive "p")
(let* ((array-buffer-line (current-line))
(let* ((array-buffer-line (array-current-line))
(array-buffer-column (current-column))
(array-row (or (array-current-row)
(error "Cursor is not in a valid array cell")))
@ -425,7 +425,7 @@ If optional ARG is given, copy down through ARG array rows."
(if (= (abs arg) 1)
(array-copy-once-vertically arg)
(array-copy-to-row
(limit-index (+ array-row arg) array-max-row))))
(array--limit-index (+ array-row arg) array-max-row))))
(array-normalize-cursor))
(defun array-copy-up (&optional arg)
@ -438,7 +438,7 @@ If optional ARG is given, copy up through ARG array rows."
"Copy the current field one array column to the right.
If optional ARG is given, copy through ARG array columns to the right."
(interactive "p")
(let* ((array-buffer-line (current-line))
(let* ((array-buffer-line (array-current-line))
(array-buffer-column (current-column))
(array-column (or (array-current-column)
(error "Cursor is not in a valid array cell")))
@ -446,7 +446,7 @@ If optional ARG is given, copy through ARG array columns to the right."
(if (= (abs arg) 1)
(array-copy-once-horizontally arg)
(array-copy-to-column
(limit-index (+ array-column arg) array-max-column))))
(array--limit-index (+ array-column arg) array-max-column))))
(array-normalize-cursor))
(defun array-copy-backward (&optional arg)
@ -473,7 +473,7 @@ If optional ARG is given, copy through ARG array columns to the right."
(if (= (abs arg) 1)
(array-copy-once-horizontally arg)
(array-copy-to-column
(limit-index (+ array-column arg) array-max-column))))))
(array--limit-index (+ array-column arg) array-max-column))))))
(message "Working...done")
(array-move-to-row array-row)
(array-normalize-cursor))
@ -506,7 +506,7 @@ If optional ARG is given, copy through ARG rows down."
(forward-line 1)
(point))))
(this-row array-row)
(goal-row (limit-index (+ this-row arg) array-max-row))
(goal-row (array--limit-index (+ this-row arg) array-max-row))
(num (- goal-row this-row))
(count (abs num))
(sign (if (not (zerop count)) (/ num count))))
@ -700,13 +700,13 @@ of `array-rows-numbered'."
(floor (1- temp-max-column) new-columns-per-line))
(newlines-added 0))
(while (< newlines-removed newlines-to-be-removed)
(move-to-column-untabify
(array-move-to-column-untabify
(* (1+ newlines-removed) old-line-length))
(kill-line 1)
(setq newlines-removed (1+ newlines-removed)))
(beginning-of-line)
(while (< newlines-added newlines-to-be-added)
(move-to-column-untabify (* old-field-width new-columns-per-line))
(array-move-to-column-untabify (* old-field-width new-columns-per-line))
(newline)
(setq newlines-added (1+ newlines-added)))
(forward-line 1))))
@ -735,16 +735,16 @@ of `array-rows-numbered'."
;;; Utilities.
(defun limit-index (index limit)
(defun array--limit-index (index limit)
(cond ((< index 1) 1)
((> index limit) limit)
(t index)))
(defun current-line ()
(defun array-current-line ()
"Return the current buffer line at point. The first line is 0."
(count-lines (point-min) (line-beginning-position)))
(defun move-to-column-untabify (column)
(defun array-move-to-column-untabify (column)
"Move to COLUMN on the current line, untabifying if necessary.
Return COLUMN."
(or (and (= column (move-to-column column))
@ -753,10 +753,10 @@ Return COLUMN."
(if array-respect-tabs
(error "There is a TAB character in the way")
(progn
(untabify-backward)
(array--untabify-backward)
(move-to-column column)))))
(defun untabify-backward ()
(defun array--untabify-backward ()
"Untabify the preceding TAB."
(save-excursion
(let ((start (point)))
@ -885,7 +885,10 @@ Entering array mode calls the function `array-mode-hook'."
(setq-local truncate-lines t)
(setq overwrite-mode 'overwrite-mode-textual))
(define-obsolete-function-alias 'limit-index #'array--limit-index "29.1")
(define-obsolete-function-alias 'current-line #'array-current-line "29.1")
(define-obsolete-function-alias 'move-to-column-untabify #'array-move-to-column-untabify "29.1")
(define-obsolete-function-alias 'untabify-backward #'array--untabify-backward "29.1")
(provide 'array)

View file

@ -966,7 +966,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 "Append bookmark named" "Set bookmark named")))
(if no-overwrite "Add bookmark named" "Set bookmark named")))
(bookmark-set-internal prompt name (if no-overwrite 'push 'overwrite))))
;;;###autoload

View file

@ -647,9 +647,7 @@
(defun calcFunc-rhead (vec)
(if (and (Math-vectorp vec)
(cdr vec))
(let ((vec (copy-sequence vec)))
(setcdr (nthcdr (- (length vec) 2) vec) nil)
vec)
(butlast vec)
(calc-record-why 'vectorp vec)
(list 'calcFunc-rhead vec)))

View file

@ -1959,12 +1959,8 @@ See calc-keypad for details."
(or n (setq n 1))
(or m (setq m 1))
(calc-check-stack (+ n m -1))
(and (> n 0)
(let ((top (copy-sequence (nthcdr (+ m calc-stack-top -1)
calc-stack))))
(setcdr (nthcdr (1- n) top) nil)
(nreverse
(mapcar (lambda (x) (calc-get-stack-element x sel-mode)) top)))))
(nreverse (mapcar (lambda (x) (calc-get-stack-element x sel-mode))
(take n (nthcdr (+ m calc-stack-top -1) calc-stack)))))
(defun calc-top-list-n (&optional n m sel-mode)
(mapcar #'math-check-complete
@ -2291,9 +2287,7 @@ the United States."
((and (null n)
(eq (car-safe top) 'incomplete)
(> (length top) (if (eq (nth 1 top) 'intv) 3 2)))
(calc-pop-push-list 1 (let ((tt (copy-sequence top)))
(setcdr (nthcdr (- (length tt) 2) tt) nil)
(list tt))))
(calc-pop-push-list 1 (list (butlast top))))
((< nn 0)
(if (and calc-any-selections
(calc-top-selected 1 (- nn)))

View file

@ -171,13 +171,13 @@ If DATE lacks timezone information, GMT is assumed."
(error "Invalid date: %s" date)))))))))
;;;###autoload
(defalias 'time-to-seconds 'float-time)
(defalias 'time-to-seconds #'float-time)
;;;###autoload
(defun seconds-to-time (seconds &rest form)
"Convert SECONDS to a proper time, like `current-time' would.
FORM means the same as in `time-convert'."
(time-convert seconds form))
(defun seconds-to-time (seconds)
"Convert SECONDS to a proper time, like `current-time' would."
;; FIXME: Should we (declare (obsolete time-convert "27.1")) ?
(time-convert seconds 'list))
;;;###autoload
(defun days-to-time (days)
@ -202,7 +202,7 @@ TIME should be either a time value or a date-time string."
(time-subtract nil time))
;;;###autoload
(define-obsolete-function-alias 'subtract-time 'time-subtract "26.1")
(define-obsolete-function-alias 'subtract-time #'time-subtract "26.1")
;;;###autoload
(defun date-to-day (date)

View file

@ -25,15 +25,12 @@
;;; Commentary:
;;; Code:
;;
;; This file depends on the major components of CEDET, so that you can
;; load them all by doing (require 'cedet). This is mostly for
;; compatibility with the upstream, stand-alone CEDET distribution.
(declare-function inversion-find-version "inversion")
(defconst cedet-version "2.0"
"Current version of CEDET.")
(make-obsolete-variable 'cedet-version 'emacs-version "29.1")
(defconst cedet-packages
`(
@ -45,6 +42,7 @@
(ede "1.2" nil "ede" )
)
"Table of CEDET packages to install.")
(make-obsolete-variable 'cedet-packages 'package-built-in-p "29.1")
(defvar cedet-menu-map ;(make-sparse-keymap "CEDET menu")
(let ((map (make-sparse-keymap "CEDET menu")))

View file

@ -1,10 +1,10 @@
;;; ede.el --- Emacs Development Environment gloss -*- lexical-binding: t; -*-
;; Copyright (C) 1998-2005, 2007-2022 Free Software Foundation, Inc.
;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: project, make
;; Version: 1.2
;; Version: 2.0
;; This file is part of GNU Emacs.
@ -39,6 +39,8 @@
;;
;; (global-ede-mode t)
;;; Code:
(require 'cedet)
(require 'cl-lib)
(require 'eieio)
@ -66,10 +68,11 @@
(defconst ede-version "2.0"
"Current version of the Emacs EDE.")
(make-obsolete-variable 'ede-version 'emacs-version "29.1")
;;; Code:
(defun ede-version ()
"Display the current running version of EDE."
(declare (obsolete emacs-version "29.1"))
(interactive) (message "EDE %s" ede-version))
(defgroup ede nil

View file

@ -80,7 +80,6 @@ ROOTPROJ is nil, since there is only one project."
;; Doesn't already exist, so let's make one.
(let* ((vertuple (ede-emacs-version dir)))
(ede-emacs-project
(car vertuple)
:name (car vertuple)
:version (cdr vertuple)
:directory (file-name-as-directory dir)

View file

@ -34,6 +34,8 @@
;; menu). To enable it at startup, put (semantic-mode 1) in your init
;; file.
;;; Code:
(require 'cedet)
(require 'semantic/tag)
(require 'semantic/lex)
@ -41,6 +43,7 @@
(defvar semantic-version "2.2"
"Current version of Semantic.")
(make-obsolete-variable 'semantic-version 'emacs-version "29.1")
(declare-function inversion-test "inversion")
(declare-function semanticdb-load-ebrowse-caches "semantic/db-ebrowse")
@ -73,9 +76,6 @@ introduced."
(require 'semantic/fw)
;;; Code:
;;
;;; Variables and Configuration
;;
(defvar-local semantic--parse-table nil

View file

@ -143,14 +143,14 @@ list of semantic tokens found."
cvl nil ;re-init the collected value list.
lte (car matchlist) ;Get the local matchlist entry.
)
(if (or (byte-code-function-p (car lte))
(if (or (compiled-function-p (car lte))
(listp (car lte)))
;; In this case, we have an EMPTY match! Make
;; stuff up.
(setq cvl (list nil))))
(while (and lte
(not (byte-code-function-p (car lte)))
(not (compiled-function-p (car lte)))
(not (listp (car lte))))
;; GRAMMAR SOURCE DEBUGGING!

View file

@ -29,7 +29,7 @@
(require 'cedet-files)
(require 'data-debug)
(defvar semanticdb-file-version semantic-version
(defvar semanticdb-file-version "2.2"
"Version of semanticdb we are writing files to disk with.")
(defvar semanticdb-file-incompatible-version "1.4"
"Version of semanticdb we are not reverse compatible with.")

View file

@ -38,7 +38,7 @@
;;; Code:
(require 'semantic/wisent)
(eval-when-compile (require 'cl-lib))
(eval-when-compile (require 'subr-x)) ; `string-pad'
(require 'subr-x) ; `string-pad'
;;;; -------------------
;;;; Misc. useful things

View file

@ -37,14 +37,16 @@
;;
;; See the srecode manual for specific details.
;;; Code:
(require 'eieio)
(require 'mode-local)
(load "srecode/loaddefs" nil 'nomessage)
(defvar srecode-version "1.2"
"Current version of the Semantic Recoder.")
(make-obsolete-variable 'srecode-version 'emacs-version "29.1")
;;; Code:
(defgroup srecode nil
"Semantic Recoder."
:group 'extensions

View file

@ -655,7 +655,9 @@ The character information includes:
("file code"
,@(if multibyte-p
(let* ((coding buffer-file-coding-system)
(encoded (encode-coding-char char coding charset)))
(encoded
(and coding
(encode-coding-char char coding charset))))
(if encoded
(list (encoded-string-description encoded coding)
(format "(encoded by coding system %S)"

View file

@ -1054,9 +1054,9 @@
;; (print "Let's clean up now!"))
;; foo
;;
;; Now `foo's advice is byte-compiled:
;; Now `foo's advice is compiled:
;;
;; (byte-code-function-p 'ad-Advice-foo)
;; (compiled-function-p 'ad-Advice-foo)
;; t
;;
;; (foo 3)
@ -1298,7 +1298,7 @@
;; constructed during preactivation was used, even though we did not specify
;; the `compile' flag:
;;
;; (byte-code-function-p 'ad-Advice-fum)
;; (compiled-function-p 'ad-Advice-fum)
;; t
;;
;; (fum 2)
@ -1329,7 +1329,7 @@
;;
;; A new uncompiled advised definition got constructed:
;;
;; (byte-code-function-p 'ad-Advice-fum)
;; (compiled-function-p 'ad-Advice-fum)
;; nil
;;
;; (fum 2)
@ -1580,8 +1580,6 @@
:link '(custom-manual "(elisp)Advising Functions")
:group 'lisp)
(defconst ad-version "2.14")
;;;###autoload
(defcustom ad-redefinition-action 'warn
"Defines what to do with redefinitions during Advice de/activation.
@ -2118,9 +2116,9 @@ the cache-id will clear the cache."
(defsubst ad-compiled-p (definition)
"Return non-nil if DEFINITION is a compiled byte-code object."
(or (byte-code-function-p definition)
(and (macrop definition)
(byte-code-function-p (ad-lambdafy definition)))))
(or (compiled-function-p definition)
(and (macrop definition)
(compiled-function-p (ad-lambdafy definition)))))
(defsubst ad-compiled-code (compiled-definition)
"Return the byte-code object of a COMPILED-DEFINITION."
@ -3250,6 +3248,9 @@ Use only in REAL emergencies."
(message "Oops! Left over advised function %S" function)
(ad-pop-advised-function function)))
(defconst ad-version "2.14")
(make-obsolete-variable 'ad-version 'emacs-version "29.1")
(provide 'advice)
;;; advice.el ends here

View file

@ -1207,25 +1207,26 @@ See Info node `(elisp) Integer Basics'."
form)))
(defun byte-optimize-apply (form)
;; If the last arg is a literal constant, turn this into a funcall.
;; The funcall optimizer can then transform (funcall 'foo ...) -> (foo ...).
(if (= (length form) 2)
;; single-argument `apply' is not worth optimizing (bug#40968)
form
(let ((fn (nth 1 form))
(last (nth (1- (length form)) form))) ; I think this really is fastest
(or (if (or (null last)
(eq (car-safe last) 'quote))
(if (listp (nth 1 last))
(let ((butlast (nreverse (cdr (reverse (cdr (cdr form)))))))
(nconc (list 'funcall fn) butlast
(mapcar (lambda (x) (list 'quote x)) (nth 1 last))))
(let ((len (length form)))
(if (>= len 2)
(let ((fn (nth 1 form))
(last (nth (1- len) form)))
(cond
;; (apply F ... '(X Y ...)) -> (funcall F ... 'X 'Y ...)
((or (null last)
(eq (car-safe last) 'quote))
(let ((last-value (nth 1 last)))
(if (listp last-value)
`(funcall ,fn ,@(butlast (cddr form))
,@(mapcar (lambda (x) (list 'quote x)) last-value))
(byte-compile-warn-x
last
"last arg to apply can't be a literal atom: `%s'"
last)
nil))
form))))
last "last arg to apply can't be a literal atom: `%s'" last)
nil)))
;; (apply F ... (list X Y ...)) -> (funcall F ... X Y ...)
((eq (car-safe last) 'list)
`(funcall ,fn ,@(butlast (cddr form)) ,@(cdr last)))
(t form)))
form)))
(put 'funcall 'byte-optimizer #'byte-optimize-funcall)
(put 'apply 'byte-optimizer #'byte-optimize-apply)
@ -1747,10 +1748,10 @@ See Info node `(elisp) Integer Basics'."
byte-goto-if-not-nil-else-pop))
(defconst byte-after-unbind-ops
'(byte-constant byte-dup
'(byte-constant byte-dup byte-stack-ref byte-stack-set byte-discard
byte-symbolp byte-consp byte-stringp byte-listp byte-numberp byte-integerp
byte-eq byte-not
byte-cons byte-list1 byte-list2 ; byte-list3 byte-list4
byte-cons byte-list1 byte-list2 byte-list3 byte-list4 byte-listN
byte-interactive-p)
;; How about other side-effect-free-ops? Is it safe to move an
;; error invocation (such as from nth) out of an unwind-protect?
@ -1762,7 +1763,8 @@ See Info node `(elisp) Integer Basics'."
(defconst byte-compile-side-effect-and-error-free-ops
'(byte-constant byte-dup byte-symbolp byte-consp byte-stringp byte-listp
byte-integerp byte-numberp byte-eq byte-equal byte-not byte-car-safe
byte-cdr-safe byte-cons byte-list1 byte-list2 byte-point byte-point-max
byte-cdr-safe byte-cons byte-list1 byte-list2 byte-list3 byte-list4
byte-listN byte-point byte-point-max
byte-point-min byte-following-char byte-preceding-char
byte-current-column byte-eolp byte-eobp byte-bolp byte-bobp
byte-current-buffer byte-stack-ref))
@ -2113,13 +2115,15 @@ If FOR-EFFECT is non-nil, the return value is assumed to be of no importance."
(setcar (cdr rest) lap0)
(setq keep-going t))
;;
;; varbind-X unbind-N --> discard unbind-(N-1)
;; save-excursion unbind-N --> unbind-(N-1)
;; save-restriction unbind-N --> unbind-(N-1)
;; varbind-X unbind-N --> discard unbind-(N-1)
;; save-excursion unbind-N --> unbind-(N-1)
;; save-restriction unbind-N --> unbind-(N-1)
;; save-current-buffer unbind-N --> unbind-(N-1)
;;
((and (eq 'byte-unbind (car lap1))
(memq (car lap0) '(byte-varbind byte-save-excursion
byte-save-restriction))
byte-save-restriction
byte-save-current-buffer))
(< 0 (cdr lap1)))
(if (zerop (setcdr lap1 (1- (cdr lap1))))
(delq lap1 rest))
@ -2475,8 +2479,7 @@ If FOR-EFFECT is non-nil, the return value is assumed to be of no importance."
;; itself, compile some of its most used recursive functions (at load time).
;;
(eval-when-compile
(or (byte-code-function-p (symbol-function 'byte-optimize-form))
(subr-native-elisp-p (symbol-function 'byte-optimize-form))
(or (compiled-function-p (symbol-function 'byte-optimize-form))
(assq 'byte-code (symbol-function 'byte-optimize-form))
(let ((byte-optimize nil)
(byte-compile-warnings nil))

View file

@ -1395,7 +1395,7 @@ when printing the error message."
(or (symbolp (symbol-function fn))
(consp (symbol-function fn))
(and (not macro-p)
(byte-code-function-p (symbol-function fn)))))
(compiled-function-p (symbol-function fn)))))
(setq fn (symbol-function fn)))
(let ((advertised (gethash (if (and (symbolp fn) (fboundp fn))
;; Could be a subr.
@ -1407,7 +1407,7 @@ when printing the error message."
(if macro-p
`(macro lambda ,advertised)
`(lambda ,advertised)))
((and (not macro-p) (byte-code-function-p fn)) fn)
((and (not macro-p) (compiled-function-p fn)) fn)
((not (consp fn)) nil)
((eq 'macro (car fn)) (cdr fn))
(macro-p nil)
@ -2946,11 +2946,11 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(setq fun (cdr fun)))
(prog1
(cond
;; Up until Emacs-24.1, byte-compile silently did nothing when asked to
;; compile something invalid. So let's tune down the complaint from an
;; error to a simple message for the known case where signaling an error
;; causes problems.
((byte-code-function-p fun)
;; Up until Emacs-24.1, byte-compile silently did nothing
;; when asked to compile something invalid. So let's tone
;; down the complaint from an error to a simple message for
;; the known case where signaling an error causes problems.
((compiled-function-p fun)
(message "Function %s is already compiled"
(if (symbolp form) form "provided"))
fun)
@ -3527,7 +3527,7 @@ lambda-expression."
(byte-compile-out-tag endtag)))
(defun byte-compile-unfold-bcf (form)
"Inline call to byte-code-functions."
"Inline call to byte-code function."
(let* ((byte-compile-bound-variables byte-compile-bound-variables)
(fun (car form))
(fargs (aref fun 0))
@ -5254,11 +5254,13 @@ invoked interactively."
((not (consp f))
"<malformed function>")
((eq 'macro (car f))
(if (or (byte-code-function-p (cdr f))
(if (or (compiled-function-p (cdr f))
;; FIXME: Can this still happen?
(assq 'byte-code (cdr (cdr (cdr f)))))
" <compiled macro>"
" <macro>"))
((assq 'byte-code (cdr (cdr f)))
;; FIXME: Can this still happen?
"<compiled lambda>")
((eq 'lambda (car f))
"<function>")
@ -5507,9 +5509,7 @@ and corresponding effects."
;; itself, compile some of its most used recursive functions (at load time).
;;
(eval-when-compile
(or (byte-code-function-p (symbol-function 'byte-compile-form))
(subr-native-elisp-p (symbol-function 'byte-compile-form))
(assq 'byte-code (symbol-function 'byte-compile-form))
(or (compiled-function-p (symbol-function 'byte-compile-form))
(let ((byte-optimize nil) ; do it fast
(byte-compile-warnings nil))
(mapc (lambda (x)

View file

@ -1,6 +1,6 @@
;;; checkdoc.el --- check documentation strings for style requirements -*- lexical-binding:t -*-
;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Old-Version: 0.6.2
@ -1357,23 +1357,6 @@ checking of documentation strings.
checkdoc-common-verbs-wrong-voice "\\|")
"\\)\\>"))))
;; Profiler says this is not yet faster than just calling assoc
;;(defun checkdoc-word-in-alist-vector (word vector)
;; "Check to see if WORD is in the car of an element of VECTOR.
;;VECTOR must be sorted. The CDR should be a replacement. Since the
;;word list is getting bigger, it is time for a quick bisecting search."
;; (let ((max (length vector)) (min 0) i
;; (found nil) (fw nil))
;; (setq i (/ max 2))
;; (while (and (not found) (/= min max))
;; (setq fw (car (aref vector i)))
;; (cond ((string= word fw) (setq found (cdr (aref vector i))))
;; ((string< word fw) (setq max i))
;; (t (setq min i)))
;; (setq i (/ (+ max min) 2))
;; )
;; found))
;;; Checking engines
;;
(defun checkdoc-this-string-valid (&optional take-notes)
@ -2860,8 +2843,6 @@ function called to create the messages."
(custom-add-option 'emacs-lisp-mode-hook 'checkdoc-minor-mode)
;; Obsolete
(define-obsolete-function-alias 'checkdoc-run-hooks
#'run-hook-with-args-until-success "28.1")
(defvar checkdoc-version "0.6.2"

View file

@ -3411,7 +3411,7 @@ Of course, we really can't know that for sure, so it's just a heuristic."
(character . natnump)
(char-table . char-table-p)
(command . commandp)
(compiled-function . byte-code-function-p)
(compiled-function . compiled-function-p)
(hash-table . hash-table-p)
(cons . consp)
(fixnum . fixnump)

View file

@ -1813,8 +1813,7 @@ Ran \\([0-9]+\\) tests, \\([0-9]+\\) results as expected\
(unless (or (null tests) (zerop high))
(message "\nLONG-RUNNING TESTS")
(message "------------------")
(setq tests (sort tests (lambda (x y) (> (car x) (car y)))))
(when (< high (length tests)) (setcdr (nthcdr (1- high) tests) nil))
(setq tests (ntake high (sort tests (lambda (x y) (> (car x) (car y))))))
(message "%s" (mapconcat #'cdr tests "\n")))
;; More details on hydra and emba, where the logs are harder to get to.
(when (and (or (getenv "EMACS_HYDRA_CI") (getenv "EMACS_EMBA_CI"))

View file

@ -131,7 +131,6 @@
(defun Helper-describe-bindings ()
"Describe local key bindings of current mode."
(interactive)
(message "Making binding list...")
(save-window-excursion (describe-bindings))
(Helper-help-scroller))

View file

@ -519,15 +519,21 @@ binds `generated-autoload-file' as a file-local variable, write
its autoloads into the specified file instead.
The function does NOT recursively descend into subdirectories of the
directory or directories specified.
directory or directories specified by DIRS.
If EXTRA-DATA, include this string at the start of the generated
file. This will also force generation of OUTPUT-FILE even if
there are no autoloads to put into the file.
Optional argument EXCLUDED-FILES, if non-nil, should be a list of
files, such as preloaded files, whose autoloads should not be written
to OUTPUT-FILE.
If INCLUDE-PACKAGE-VERSION, include package version data.
If EXTRA-DATA is non-nil, it should be a string; include that string
at the beginning of the generated file. This will also force the
generation of OUTPUT-FILE even if there are no autoloads to put into
that file.
If GENERATE-FULL, don't update, but regenerate all the loaddefs files."
If INCLUDE-PACKAGE-VERSION is non-nil, include package version data.
If GENERATE-FULL is non-nil, regenerate all the loaddefs files anew,
instead of just updating them with the new/changed autoloads."
(let* ((files-re (let ((tmp nil))
(dolist (suf (get-load-suffixes))
;; We don't use module-file-suffix below because
@ -545,6 +551,11 @@ If GENERATE-FULL, don't update, but regenerate all the loaddefs files."
(updating (and (file-exists-p output-file) (not generate-full)))
(defs nil))
;; Allow the excluded files to be relative.
(setq excluded-files
(mapcar (lambda (file) (expand-file-name file dir))
excluded-files))
;; Collect all the autoload data.
(let ((progress (make-progress-reporter
(byte-compile-info
@ -583,7 +594,8 @@ If GENERATE-FULL, don't update, but regenerate all the loaddefs files."
;; We have some data, so generate the loaddef files. First
;; group per output file.
(dolist (fdefs (seq-group-by #'car defs))
(let ((loaddefs-file (car fdefs)))
(let ((loaddefs-file (car fdefs))
hash)
(with-temp-buffer
(if (and updating (file-exists-p loaddefs-file))
(insert-file-contents loaddefs-file)
@ -593,6 +605,7 @@ If GENERATE-FULL, don't update, but regenerate all the loaddefs files."
(when extra-data
(insert extra-data)
(ensure-empty-lines 1)))
(setq hash (buffer-hash))
;; Then group by source file (and sort alphabetically).
(dolist (section (sort (seq-group-by #'cadr (cdr fdefs))
(lambda (e1 e2)
@ -629,9 +642,11 @@ If GENERATE-FULL, don't update, but regenerate all the loaddefs files."
(loaddefs-generate--print-form def))
(unless (bolp)
(insert "\n")))))
(write-region (point-min) (point-max) loaddefs-file nil 'silent)
(byte-compile-info (file-relative-name loaddefs-file lisp-directory)
t "GEN")))))))
;; Only write the file if we actually made a change.
(unless (equal (buffer-hash) hash)
(write-region (point-min) (point-max) loaddefs-file nil 'silent)
(byte-compile-info
(file-relative-name loaddefs-file lisp-directory) t "GEN"))))))))
(defun loaddefs-generate--print-form (def)
"Print DEF in a format that makes sense for version control."

View file

@ -823,7 +823,7 @@ test of free variables in the following ways:
(eval-when-compile
(add-hook 'emacs-startup-hook
(lambda ()
(and (not (byte-code-function-p
(and (not (compiled-function-p
(symbol-function 'macroexpand-all)))
(locate-library "macroexp.elc")
(load "macroexp.elc")))))

View file

@ -167,31 +167,31 @@ DOC is a string where \"FUNCTION\" and \"OLDFUN\" are expected.")
(defun advice--interactive-form (function)
"Like `interactive-form' but tries to avoid autoloading functions."
(when (commandp function)
(if (not (and (symbolp function) (autoloadp (indirect-function function))))
(interactive-form function)
(if (not (and (symbolp function) (autoloadp (indirect-function function))))
(interactive-form function)
(when (commandp function)
`(interactive (advice-eval-interactive-spec
(cadr (interactive-form ',function)))))))
(defun advice--make-interactive-form (function main)
(defun advice--make-interactive-form (iff ifm)
;; TODO: make it so that interactive spec can be a constant which
;; dynamically checks the advice--car/cdr to do its job.
;; For that, advice-eval-interactive-spec needs to be more faithful.
(let* ((iff (advice--interactive-form function))
(ifm (advice--interactive-form main))
(fspec (cadr iff)))
(let* ((fspec (cadr iff)))
(when (eq 'function (car-safe fspec)) ;; Macroexpanded lambda?
(setq fspec (nth 1 fspec)))
(setq fspec (eval fspec t)))
(if (functionp fspec)
`(funcall ',fspec ',(cadr ifm))
(cadr (or iff ifm)))))
(cl-defmethod oclosure-interactive-form ((ad advice) &optional _)
(let ((car (advice--car ad))
(cdr (advice--cdr ad)))
(when (or (commandp car) (commandp cdr))
`(interactive ,(advice--make-interactive-form car cdr)))))
(let* ((car (advice--car ad))
(cdr (advice--cdr ad))
(ifa (advice--interactive-form car))
(ifd (advice--interactive-form cdr)))
(when (or ifa ifd)
`(interactive ,(advice--make-interactive-form ifa ifd)))))
(cl-defmethod cl-print-object ((object advice) stream)
(cl-assert (advice--p object))

View file

@ -3530,7 +3530,7 @@ If optional arg BUTTON is non-nil, describe its associated package."
(let ((place (cdr desc))
(out (copy-sequence (car desc))))
(add-text-properties place (1+ place)
'(face (bold font-lock-warning-face))
'(face help-key-binding)
out)
out))
(package--prettify-quick-help-key (cons desc 0))))

View file

@ -607,31 +607,38 @@ recording whether the var has been referenced by earlier parts of the match."
(symbolp . vectorp)
(symbolp . stringp)
(symbolp . byte-code-function-p)
(symbolp . compiled-function-p)
(symbolp . recordp)
(integerp . consp)
(integerp . arrayp)
(integerp . vectorp)
(integerp . stringp)
(integerp . byte-code-function-p)
(integerp . compiled-function-p)
(integerp . recordp)
(numberp . consp)
(numberp . arrayp)
(numberp . vectorp)
(numberp . stringp)
(numberp . byte-code-function-p)
(numberp . compiled-function-p)
(numberp . recordp)
(consp . arrayp)
(consp . atom)
(consp . vectorp)
(consp . stringp)
(consp . byte-code-function-p)
(consp . compiled-function-p)
(consp . recordp)
(arrayp . byte-code-function-p)
(arrayp . compiled-function-p)
(vectorp . byte-code-function-p)
(vectorp . compiled-function-p)
(vectorp . recordp)
(stringp . vectorp)
(stringp . recordp)
(stringp . byte-code-function-p)))
(stringp . byte-code-function-p)
(stringp . compiled-function-p)))
(defun pcase--mutually-exclusive-p (pred1 pred2)
(or (member (cons pred1 pred2)
@ -771,8 +778,8 @@ A and B can be one of:
((consp (cadr pat)) #'consp)
((stringp (cadr pat)) #'stringp)
((vectorp (cadr pat)) #'vectorp)
((byte-code-function-p (cadr pat))
#'byte-code-function-p))))
((compiled-function-p (cadr pat))
#'compiled-function-p))))
(pcase--mutually-exclusive-p (cadr upat) otherpred))
'(:pcase--fail . nil))
;; Since we turn (or 'a 'b 'c) into (pred (pcase--flip (memq '(a b c))))

View file

@ -42,6 +42,8 @@
;;; Code:
(eval-when-compile (require 'cl-lib))
;;; User Functions:
;;;###autoload
@ -51,6 +53,8 @@
(consp (cdr x)) (integerp (cadr x))
(vectorp (cddr x))))
(cl-deftype ring () '(satisfies ring-p))
;;;###autoload
(defun make-ring (size)
"Make a ring that can contain SIZE elements."

View file

@ -458,11 +458,21 @@ TESTFN is used to compare elements, or `equal' if TESTFN is nil."
(cl-defmethod seq-uniq ((sequence list) &optional testfn)
(let ((result nil))
(if (not testfn)
;; Fast path.
(while sequence
(unless (member (car sequence) result)
(push (car sequence) result))
(pop sequence))
;; Fast path. If the list is long, use a hash table to speed
;; things up even more.
(let ((l (length sequence)))
(if (> l 100)
(let ((hash (make-hash-table :test #'equal :size l)))
(while sequence
(unless (gethash (car sequence) hash)
(setf (gethash (car sequence) hash) t)
(push (car sequence) result))
(setq sequence (cdr sequence))))
;; Short list.
(while sequence
(unless (member (car sequence) result)
(push (car sequence) result))
(pop sequence))))
;; Slower path.
(while sequence
(unless (seq-find (lambda (elem)

View file

@ -254,13 +254,9 @@ the string."
(unless (natnump length)
(signal 'wrong-type-argument (list 'natnump length)))
(let ((pad-length (- length (length string))))
(if (< pad-length 0)
string
(concat (and start
(make-string pad-length (or padding ?\s)))
string
(and (not start)
(make-string pad-length (or padding ?\s)))))))
(cond ((<= pad-length 0) string)
(start (concat (make-string pad-length (or padding ?\s)) string))
(t (concat string (make-string pad-length (or padding ?\s)))))))
(defun string-chop-newline (string)
"Remove the final newline (if any) from STRING."
@ -471,6 +467,18 @@ be marked unmodified, effectively ignoring those changes."
(equal ,hash (buffer-hash)))
(restore-buffer-modified-p nil))))))))
(defun emacs-etc--hide-local-variables ()
"Hide local variables.
Used by `emacs-authors-mode' and `emacs-news-mode'."
(narrow-to-region (point-min)
(save-excursion
(goto-char (point-max))
;; Obfuscate to avoid this being interpreted
;; as a local variable section itself.
(if (re-search-backward "^Local\sVariables:$" nil t)
(progn (forward-line -1) (point))
(point-max)))))
(provide 'subr-x)
;;; subr-x.el ends here

View file

@ -7,7 +7,7 @@
;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; Keywords: emulations
;; Version: 3.14.1
;; Version: 3.14.2
;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
;; file on 20/3/2008, and the maintainer agreed that when a bug is

View file

@ -206,7 +206,7 @@ file named by `eshell-aliases-file'.")
(let ((eshell-current-handles
(eshell-create-handles eshell-aliases-file 'overwrite)))
(eshell/alias)
(eshell-close-handles 0))))
(eshell-close-handles 0 'nil))))
(defsubst eshell-lookup-alias (name)
"Check whether NAME is aliased. Return the alias if there is one."

View file

@ -133,6 +133,10 @@ There are several different kinds of commands, however."
Such arguments will be passed to `read', and then evaluated."
:type 'regexp)
(defcustom eshell-lisp-form-nil-is-failure t
"If non-nil, Lisp forms like (COMMAND ARGS) treat a nil result as failure."
:type 'boolean)
(defcustom eshell-pre-command-hook nil
"A hook run before each interactive command is invoked."
:type 'hook)
@ -541,9 +545,7 @@ implemented via rewriting, rather than as a function."
,(eshell-invokify-arg body t)))
(setcar for-items (cadr for-items))
(setcdr for-items (cddr for-items)))
(eshell-close-handles
eshell-last-command-status
(list 'quote eshell-last-command-result))))))
(eshell-close-handles)))))
(defun eshell-structure-basic-command (func names keyword test body
&optional else)
@ -551,10 +553,11 @@ implemented via rewriting, rather than as a function."
The first of NAMES should be the positive form, and the second the
negative. It's not likely that users should ever need to call this
function."
;; If the test form begins with `eshell-convert', it means
;; something data-wise will be returned, and we should let
;; that determine the truth of the statement.
(unless (eq (car test) 'eshell-convert)
;; If the test form begins with `eshell-convert' or
;; `eshell-escape-arg', it means something data-wise will be
;; returned, and we should let that determine the truth of the
;; statement.
(unless (memq (car test) '(eshell-convert eshell-escape-arg))
(setq test
`(progn ,test
(eshell-exit-success-p))))
@ -574,9 +577,7 @@ function."
`(let ((eshell-command-body '(nil))
(eshell-test-body '(nil)))
(,func ,test ,body ,else)
(eshell-close-handles
eshell-last-command-status
(list 'quote eshell-last-command-result))))
(eshell-close-handles)))
(defun eshell-rewrite-while-command (terms)
"Rewrite a `while' command into its equivalent Eshell command form.
@ -1415,43 +1416,53 @@ via `eshell-errorn'."
(defun eshell-lisp-command (object &optional args)
"Insert Lisp OBJECT, using ARGS if a function."
(catch 'eshell-external ; deferred to an external command
(setq eshell-last-command-status 0
eshell-last-arguments args)
(let* ((eshell-ensure-newline-p (eshell-interactive-output-p))
(command-form-p (functionp object))
(result
(if (functionp object)
(progn
(setq eshell-last-arguments args
eshell-last-command-name
(if command-form-p
(let ((numeric (not (get object
'eshell-no-numeric-conversions)))
(fname-args (get object 'eshell-filename-arguments)))
(when (or numeric fname-args)
(while args
(let ((arg (car args)))
(cond
((and numeric (stringp arg) (> (length arg) 0)
(text-property-any 0 (length arg)
'number t arg))
;; If any of the arguments are flagged as
;; numbers waiting for conversion, convert
;; them now.
(setcar args (string-to-number arg)))
((and fname-args (stringp arg)
(string-equal arg "~"))
;; If any of the arguments match "~",
;; prepend "./" to treat it as a regular
;; file name.
(setcar args (concat "./" arg)))))
(setq args (cdr args))))
(setq eshell-last-command-name
(concat "#<function " (symbol-name object) ">"))
(let ((numeric (not (get object
'eshell-no-numeric-conversions)))
(fname-args (get object 'eshell-filename-arguments)))
(when (or numeric fname-args)
(while args
(let ((arg (car args)))
(cond ((and numeric (stringp arg) (> (length arg) 0)
(text-property-any 0 (length arg)
'number t arg))
;; If any of the arguments are
;; flagged as numbers waiting for
;; conversion, convert them now.
(setcar args (string-to-number arg)))
((and fname-args (stringp arg)
(string-equal arg "~"))
;; If any of the arguments match "~",
;; prepend "./" to treat it as a
;; regular file name.
(setcar args (concat "./" arg)))))
(setq args (cdr args)))))
(eshell-apply object eshell-last-arguments))
(setq eshell-last-arguments args
eshell-last-command-name "#<Lisp object>")
(setq eshell-last-command-name "#<Lisp object>")
(eshell-eval object))))
(if (and eshell-ensure-newline-p
(save-excursion
(goto-char eshell-last-output-end)
(not (bolp))))
(eshell-print "\n"))
(eshell-close-handles 0 (list 'quote result)))))
(eshell-close-handles
;; If `eshell-lisp-form-nil-is-failure' is non-nil, Lisp forms
;; that succeeded but have a nil result should have an exit
;; status of 2.
(when (and eshell-lisp-form-nil-is-failure
(not command-form-p)
(= eshell-last-command-status 0)
(not result))
2)
(list 'quote result)))))
(defalias 'eshell-lisp-command* #'eshell-lisp-command)

View file

@ -254,6 +254,30 @@ a nil value of mode defaults to `insert'."
(setq idx (1+ idx))))
handles)
(defun eshell-close-handles (&optional exit-code result handles)
"Close all of the current HANDLES, taking refcounts into account.
If HANDLES is nil, use `eshell-current-handles'.
EXIT-CODE is the process exit code (zero, if the command
completed successfully). If nil, then use the exit code already
set in `eshell-last-command-status'.
RESULT is the quoted value of the last command. If nil, then use
the value already set in `eshell-last-command-result'."
(when exit-code
(setq eshell-last-command-status exit-code))
(when result
(cl-assert (eq (car result) 'quote))
(setq eshell-last-command-result (cadr result)))
(let ((handles (or handles eshell-current-handles)))
(dotimes (idx eshell-number-of-handles)
(when-let ((handle (aref handles idx)))
(setcdr handle (1- (cdr handle)))
(when (= (cdr handle) 0)
(dolist (target (ensure-list (car (aref handles idx))))
(eshell-close-target target (= eshell-last-command-status 0)))
(setcar handle nil))))))
(defun eshell-close-target (target status)
"Close an output TARGET, passing STATUS as the result.
STATUS should be non-nil on successful termination of the output."
@ -305,32 +329,6 @@ STATUS should be non-nil on successful termination of the output."
((consp target)
(apply (car target) status (cdr target)))))
(defun eshell-close-handles (exit-code &optional result handles)
"Close all of the current handles, taking refcounts into account.
EXIT-CODE is the process exit code; mainly, it is zero, if the command
completed successfully. RESULT is the quoted value of the last
command. If nil, then the meta variables for keeping track of the
last execution result should not be changed."
(let ((idx 0))
(cl-assert (or (not result) (eq (car result) 'quote)))
(setq eshell-last-command-status exit-code
eshell-last-command-result (cadr result))
(while (< idx eshell-number-of-handles)
(let ((handles (or handles eshell-current-handles)))
(when (aref handles idx)
(setcdr (aref handles idx)
(1- (cdr (aref handles idx))))
(when (= (cdr (aref handles idx)) 0)
(let ((target (car (aref handles idx))))
(if (not (listp target))
(eshell-close-target target (= exit-code 0))
(while target
(eshell-close-target (car target) (= exit-code 0))
(setq target (cdr target)))))
(setcar (aref handles idx) nil))))
(setq idx (1+ idx)))
nil))
(defun eshell-kill-append (string)
"Call `kill-append' with STRING, if it is indeed a string."
(if (stringp string)

View file

@ -346,7 +346,9 @@ Used only on systems which do not support async subprocesses.")
(defvar eshell-last-output-end) ;Defined in esh-mode.el.
(eshell-update-markers eshell-last-output-end)
;; Simulate the effect of eshell-sentinel.
(eshell-close-handles (if (numberp exit-status) exit-status -1))
(eshell-close-handles
(if (numberp exit-status) exit-status -1)
(list 'quote (and (numberp exit-status) (= exit-status 0))))
(eshell-kill-process-function command exit-status)
(or (bound-and-true-p eshell-in-pipeline-p)
(setq eshell-last-sync-output-start nil))
@ -398,40 +400,36 @@ PROC is the process that's exiting. STRING is the exit message."
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
(unwind-protect
(let ((entry (assq proc eshell-process-list)))
; (if (not entry)
; (error "Sentinel called for unowned process `%s'"
; (process-name proc))
(when entry
(unwind-protect
(progn
(unless (string= string "run")
;; Write the exit message if the status is
;; abnormal and the process is already writing
;; to the terminal.
(when (and (eq proc (eshell-tail-process))
(not (string-match "^\\(finished\\|exited\\)"
string)))
(funcall (process-filter proc) proc string))
(let ((handles (nth 1 entry))
(str (prog1 (nth 3 entry)
(setf (nth 3 entry) nil)))
(status (process-exit-status proc)))
;; If we're in the middle of handling output
;; from this process then schedule the EOF for
;; later.
(letrec ((finish-io
(lambda ()
(if (nth 4 entry)
(run-at-time 0 nil finish-io)
(when str
(ignore-error 'eshell-pipe-broken
(eshell-output-object
str nil handles)))
(eshell-close-handles
status 'nil handles)))))
(funcall finish-io)))))
(eshell-remove-process-entry entry))))
(when-let ((entry (assq proc eshell-process-list)))
(unwind-protect
(unless (string= string "run")
;; Write the exit message if the status is
;; abnormal and the process is already writing
;; to the terminal.
(when (and (eq proc (eshell-tail-process))
(not (string-match "^\\(finished\\|exited\\)"
string)))
(funcall (process-filter proc) proc string))
(let ((handles (nth 1 entry))
(str (prog1 (nth 3 entry)
(setf (nth 3 entry) nil)))
(status (process-exit-status proc)))
;; If we're in the middle of handling output
;; from this process then schedule the EOF for
;; later.
(letrec ((finish-io
(lambda ()
(if (nth 4 entry)
(run-at-time 0 nil finish-io)
(when str
(ignore-error 'eshell-pipe-broken
(eshell-output-object
str nil handles)))
(eshell-close-handles
status (list 'quote (= status 0))
handles)))))
(funcall finish-io))))
(eshell-remove-process-entry entry)))
(eshell-kill-process-function proc string)))))
(defun eshell-process-interact (func &optional all query)

View file

@ -2046,18 +2046,29 @@ as backgrounds."
(when msg (message "Color: `%s'" color))
color))
(defun face-at-point (&optional thing multiple)
"Return the face of the character after point.
If it has more than one face, return the first one.
If THING is non-nil try first to get a face name from the buffer.
IF MULTIPLE is non-nil, return a list of all faces.
Return nil if there is no face."
(defun face-at-point (&optional text multiple)
"Return a face name from point in the current buffer.
This function is meant to be used as a conveniency function for
providing defaults when prompting the user for a face name.
If TEXT is non-nil, return the text at point if it names an
existing face.
Otherwise, look at the faces in effect at point as text
properties or overlay properties, and return one of these face
names.
IF MULTIPLE is non-nil, return a list of faces.
Return nil if there is no face at point.
This function is not meant for handling faces programatically; to
do that, use `get-text-property' and `get-char-property'."
(let (faces)
(if thing
;; Try to get a face name from the buffer.
(let ((face (intern-soft (thing-at-point 'symbol))))
(if (facep face)
(push face faces))))
(when text
;; Try to get a face name from the buffer.
(when-let ((face (thing-at-point 'face)))
(push face faces)))
;; Add the named faces that the `read-face-name' or `face' property uses.
(let ((faceprop (or (get-char-property (point) 'read-face-name)
(get-char-property (point) 'face))))

View file

@ -77,6 +77,7 @@ Each element has the form (KEYWORD . DESCRIPTION).")
(defvar-keymap finder-mode-map
:doc "Keymap used in `finder-mode'."
:parent special-mode-map
"SPC" #'finder-select
"f" #'finder-select
"<follow-link>" 'mouse-face
@ -420,15 +421,14 @@ FILE should be in a form suitable for passing to `locate-library'."
(interactive)
(finder-list-keywords))
(define-derived-mode finder-mode nil "Finder"
(define-derived-mode finder-mode special-mode "Finder"
"Major mode for browsing package documentation.
\\<finder-mode-map>
\\[finder-select] more help for the item on the current line
\\[finder-exit] exit Finder mode and kill the Finder buffer."
:syntax-table finder-mode-syntax-table
\\[finder-exit] exit Finder mode and kill the Finder buffer.
\\{finder-mode-map}"
:interactive nil
(setq buffer-read-only t
buffer-undo-list t)
(setq-local finder-headmark nil))
(defun finder-summary ()
@ -436,9 +436,9 @@ FILE should be in a form suitable for passing to `locate-library'."
(interactive nil finder-mode)
(message "%s"
(substitute-command-keys
"\\<finder-mode-map>\\[finder-select] = select, \
\\[finder-mouse-select] = select, \\[finder-list-keywords] = to \
finder directory, \\[finder-exit] = quit, \\[finder-summary] = help")))
"\\<finder-mode-map>\\[finder-select] select, \
\\[finder-mouse-select] select, \\[finder-list-keywords] go to \
finder directory, \\[finder-exit] quit, \\[finder-summary] help")))
(defun finder-exit ()
"Exit Finder mode.

View file

@ -223,6 +223,7 @@
(defconst gnus-outlook-deuglify-version "1.5 Gnus version"
"Version of gnus-outlook-deuglify.")
(make-obsolete-variable 'gnus-outlook-deuglify-version 'emacs-version "29.1")
;;; User Customizable Variables:

View file

@ -65,8 +65,9 @@ There are currently two built-in format functions:
(const :tag "french" gnus-diary-delay-format-french)
(symbol :tag "other")))
(defconst gnus-diary-version nndiary-version
(defconst gnus-diary-version "0.2-b14"
"Current Diary back end version.")
(make-obsolete-variable 'gnus-diary-version 'emacs-version "29.1")
;; Compatibility functions ==================================================
@ -377,8 +378,9 @@ If ARG (or prefix) is non-nil, force prompting for all fields."
(defun gnus-diary-version ()
"Current Diary back end version."
(declare (obsolete emacs-version "29.1"))
(interactive)
(message "NNDiary version %s" nndiary-version))
(message "NNDiary version %s" gnus-diary-version))
(provide 'gnus-diary)

View file

@ -40,17 +40,14 @@
(defcustom gnus-completing-read-function 'gnus-emacs-completing-read
"Function use to do completing read."
:version "24.1"
:version "29.1"
:group 'gnus-meta
:type '(radio (function-item
:doc "Use Emacs standard `completing-read' function."
gnus-emacs-completing-read)
(function-item
:doc "Use `ido-completing-read' function."
gnus-ido-completing-read)
(function-item
:doc "Use iswitchb based completing-read function."
gnus-iswitchb-completing-read)))
gnus-ido-completing-read)))
(defcustom gnus-completion-styles
(append (when (and (assq 'substring completion-styles-alist)
@ -1202,6 +1199,7 @@ SPEC is a predicate specifier that contains stuff like `or', `and',
(defun gnus-iswitchb-completing-read (prompt collection &optional require-match
initial-input history def)
"`iswitchb' based completing-read function."
(declare (obsolete nil "29.1"))
;; Make sure iswitchb is loaded before we let-bind its variables.
;; If it is loaded inside the let, variables can become unbound afterwards.
(require 'iswitchb)

View file

@ -260,9 +260,10 @@ Default is t."
"Non-nil means that files will be viewed with metamail.
The gnus-uu viewing functions will be ignored and gnus-uu will try
to guess at a content-type based on file name suffixes. Default
it nil."
is nil."
:group 'gnus-extract
:type 'boolean)
(make-obsolete-variable 'gnus-uu-view-with-metamail "don't use it." "29.1")
(defcustom gnus-uu-unmark-articles-not-decoded nil
"If non-nil, gnus-uu will mark unsuccessfully decoded articles as unread.

View file

@ -4166,8 +4166,7 @@ prompt the user for the name of an NNTP server to use."
;; file.
(unless (string-match "^Gnus" gnus-version)
(load "gnus-load" nil t))
(unless (or (byte-code-function-p (symbol-function 'gnus))
(subr-native-elisp-p (symbol-function 'gnus)))
(unless (compiled-function-p (symbol-function 'gnus))
(message "You should compile Gnus")
(sit-for 2))
(let ((gnus-action-message-log (list nil)))

View file

@ -2086,6 +2086,7 @@ You must have the \"hashcash\" binary installed, see `hashcash-path'."
(defun message-mark-active-p ()
"Non-nil means the mark and region are currently active in this buffer."
(declare (obsolete mark-active "29.1"))
mark-active)
(defun message-unquote-tokens (elems)
@ -2953,12 +2954,12 @@ Consider adding this function to `message-header-setup-hook'"
["Fill Yanked Message" message-fill-yanked-message t]
["Insert Signature" message-insert-signature t]
["Caesar (rot13) Message" message-caesar-buffer-body t]
["Caesar (rot13) Region" message-caesar-region (message-mark-active-p)]
["Caesar (rot13) Region" message-caesar-region mark-active]
["Elide Region" message-elide-region
:active (message-mark-active-p)
:active mark-active
:help "Replace text in region with an ellipsis"]
["Delete Outside Region" message-delete-not-region
:active (message-mark-active-p)
:active mark-active
:help "Delete all quoted text outside region"]
["Kill To Signature" message-kill-to-signature t]
["Newline and Reformat" message-newline-and-reformat t]
@ -2966,7 +2967,7 @@ Consider adding this function to `message-header-setup-hook'"
["Spellcheck" ispell-message :help "Spellcheck this message"]
"----"
["Insert Region Marked" message-mark-inserted-region
:active (message-mark-active-p) :help "Mark region with enclosing tags"]
:active mark-active :help "Mark region with enclosing tags"]
["Insert File Marked..." message-mark-insert-file
:help "Insert file at point marked with enclosing tags"]
["Attach File..." mml-attach-file t]

View file

@ -117,8 +117,7 @@
(cond ((fboundp 'libxml-parse-html-region) 'shr)
((executable-find "w3m") 'gnus-w3m)
((executable-find "links") 'links)
((executable-find "lynx") 'lynx)
((locate-library "html2text") 'html2text))
((executable-find "lynx") 'lynx))
"Render of HTML contents.
It is one of defined renderer types, or a rendering function.
The defined renderer types are:
@ -127,16 +126,14 @@ The defined renderer types are:
`w3m': use emacs-w3m;
`w3m-standalone': use plain w3m;
`links': use links;
`lynx': use lynx;
`html2text': use html2text."
:version "27.1"
`lynx': use lynx."
:version "29.1"
:type '(choice (const shr)
(const gnus-w3m)
(const w3m :tag "emacs-w3m")
(const w3m-standalone :tag "standalone w3m" )
(const links)
(const lynx)
(const html2text)
(function))
:group 'mime-display)

View file

@ -35,7 +35,6 @@
(declare-function gnus-setup-posting-charset "gnus-msg" (group))
(autoload 'gnus-completing-read "gnus-util")
(autoload 'message-fetch-field "message")
(autoload 'message-mark-active-p "message")
(autoload 'message-info "message")
(autoload 'fill-flowed-encode "flow-fill")
(autoload 'message-posting-charset "message")
@ -1236,7 +1235,7 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
;;
;;["Narrow" mml-narrow-to-part t]
["Quote MML in region" mml-quote-region
:active (message-mark-active-p)
:active mark-active
:help "Quote MML tags in region"]
["Validate MML" mml-validate t]
["Preview" mml-preview t]

View file

@ -35,6 +35,7 @@
(defconst nnagent-version "nnagent 1.0")
(make-obsolete-variable 'nnagent-version 'emacs-version "29.1")
(defvoo nnagent-directory nil
"Internal variable."

View file

@ -55,6 +55,7 @@
(defconst nnbabyl-version "nnbabyl 1.0"
"nnbabyl version.")
(make-obsolete-variable 'nnbabyl-version 'emacs-version "29.1")
(defvoo nnbabyl-mbox-buffer nil)
(defvoo nnbabyl-current-group nil)

View file

@ -234,9 +234,11 @@ all. This may very well take some time.")
(defconst nndiary-version "0.2-b14"
"Current Diary back end version.")
(make-obsolete-variable 'nndiary-version 'emacs-version "29.1")
(defun nndiary-version ()
"Current Diary back end version."
(declare (obsolete emacs-version "29.1"))
(interactive)
(message "NNDiary version %s" nndiary-version))

View file

@ -48,6 +48,7 @@
(defvoo nndir-status-string "" nil nnmh-status-string)
(defconst nndir-version "nndir 1.0")
(make-obsolete-variable 'nndir-version 'emacs-version "29.1")

View file

@ -218,6 +218,7 @@ from the document.")
(defconst nndoc-version "nndoc 1.0"
"nndoc version.")
(make-obsolete-variable 'nndoc-version 'emacs-version "29.1")

View file

@ -56,6 +56,7 @@ are generated if and only if they are also in `message-draft-headers'."
(defvoo nndraft-current-directory nil nil nnmh-current-directory)
(defconst nndraft-version "nndraft 1.0")
(make-obsolete-variable 'nndraft-version 'emacs-version "29.1")
(defvoo nndraft-status-string "" nil nnmh-status-string)

View file

@ -57,6 +57,7 @@ included.")
(defconst nneething-version "nneething 1.0"
"nneething version.")
(make-obsolete-variable 'nneething-version 'emacs-version "29.1")
(defvoo nneething-current-directory nil
"Current news group directory.")

View file

@ -91,6 +91,7 @@ message, a huge time saver for large mailboxes.")
(defconst nnfolder-version "nnfolder 2.0"
"nnfolder version.")
(make-obsolete-variable 'nnfolder-version 'emacs-version "29.1")
(defconst nnfolder-article-marker "X-Gnus-Article-Number: "
"String used to demarcate what the article number for a message is.")

View file

@ -62,6 +62,7 @@
(require 'subr-x))
(defconst nnmaildir-version "Gnus")
(make-obsolete-variable 'nnmaildir-version 'emacs-version "29.1")
(defconst nnmaildir-flag-mark-mapping
'((?F . tick)

View file

@ -52,6 +52,7 @@
(defconst nnmbox-version "nnmbox 1.0"
"nnmbox version.")
(make-obsolete-variable 'nnmbox-version 'emacs-version "29.1")
(defvoo nnmbox-current-group nil
"Current nnmbox news group directory.")

View file

@ -55,6 +55,7 @@ as unread by Gnus.")
(defconst nnmh-version "nnmh 1.0"
"nnmh version.")
(make-obsolete-variable 'nnmh-version 'emacs-version "29.1")
(defvoo nnmh-current-directory nil
"Current news group directory.")

View file

@ -89,6 +89,7 @@ non-nil.")
(defconst nnml-version "nnml 1.0"
"nnml version.")
(make-obsolete-variable 'nnml-version 'emacs-version "29.1")
(defvoo nnml-nov-file-name ".overview")

View file

@ -71,6 +71,7 @@ this variable to the list of fields to be ignored.")
(defvoo nnrss-status-string "")
(defconst nnrss-version "nnrss 1.0")
(make-obsolete-variable 'nnrss-version 'emacs-version "29.1")
(defvar nnrss-group-alist '()
"List of RSS addresses.")

View file

@ -114,6 +114,7 @@ there.")
(defconst nnspool-version "nnspool 2.0"
"Version numbers of this version of NNSPOOL.")
(make-obsolete-variable 'nnspool-version 'emacs-version "29.1")
(defvoo nnspool-current-directory nil
"Current news group directory.")

View file

@ -259,6 +259,7 @@ update their active files often, this can help.")
(defvoo nntp-connection-alist nil)
(defvoo nntp-status-string "")
(defconst nntp-version "nntp 5.0")
(make-obsolete-variable 'nntp-version 'emacs-version "29.1")
(defvoo nntp-inhibit-erase nil)
(defvoo nntp-inhibit-output nil)

View file

@ -57,6 +57,7 @@ component group will show up when you enter the virtual group.")
(defconst nnvirtual-version "nnvirtual 1.1")
(make-obsolete-variable 'nnvirtual-version 'emacs-version "29.1")
(defvoo nnvirtual-current-group nil)

View file

@ -1005,9 +1005,9 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)."
(help-fns--analyze-function function))
(file-name (find-lisp-object-file-name
function (if aliased 'defun def)))
(beg (if (and (or (byte-code-function-p def)
(beg (if (and (or (functionp def)
(keymapp def)
(memq (car-safe def) '(macro lambda closure)))
(eq (car-safe def) 'macro))
(stringp file-name)
(help-fns--autoloaded-p function))
(concat
@ -1040,7 +1040,7 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)."
(t "Lisp function"))))
((or (eq (car-safe def) 'macro)
;; For advised macros, def is a lambda
;; expression or a byte-code-function-p, so we
;; expression or a compiled-function-p, so we
;; need to check macros before functions.
(macrop function))
(concat beg "Lisp macro"))
@ -1534,8 +1534,8 @@ This cancels value editing without updating the value."
(when safe-var
(princ " This variable is safe as a file local variable ")
(princ "if its value\n satisfies the predicate ")
(princ (if (byte-code-function-p safe-var)
"which is a byte-compiled expression.\n"
(princ (if (compiled-function-p safe-var)
"which is a compiled expression.\n"
(format-message "`%s'.\n" safe-var))))))
(add-hook 'help-fns-describe-variable-functions #'help-fns--var-risky)

View file

@ -81,11 +81,9 @@
(eval-when-compile (require 'cl-lib))
(require 'cus-edit)
(defconst htmlfontify-version 0.21)
(defconst hfy-meta-tags
(format "<meta name=\"generator\" content=\"emacs %s; htmlfontify %0.2f\" />"
emacs-version htmlfontify-version)
(format "<meta name=\"generator\" content=\"emacs %s; htmlfontify\" />"
emacs-version)
"The generator meta tag for this version of htmlfontify.")
(defconst htmlfontify-manual "Htmlfontify Manual"
@ -2392,13 +2390,14 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'."
(let ((file (hfy-initfile)))
(load file 'NOERROR nil nil) ))
;; Obsolete.
(defun hfy-interq (set-a set-b)
"Return the intersection (using `eq') of two lists SET-A and SET-B."
(declare (obsolete seq-intersection "28.1"))
(nreverse (seq-intersection set-a set-b #'eq)))
(defconst htmlfontify-version 0.21)
(make-obsolete-variable 'htmlfontify-version 'emacs-version "29.1")
(define-obsolete-function-alias 'hfy-prop-invisible-p #'invisible-p "29.1")
(provide 'htmlfontify)

View file

@ -1525,6 +1525,17 @@ Setup `char-width-table' appropriate for non-CJK language environment."
(aset char-acronym-table (+ #xE0021 i) (format " %c TAG" (+ 33 i))))
(aset char-acronym-table #xE007F "->|TAG") ; CANCEL TAG
(dotimes (i 256)
(let* ((vs-number (1+ i))
(codepoint (if (< i 16)
(+ #xfe00 i)
(+ #xe0100 i -16)))
(delimiter (cond ((<= vs-number 9) "0")
((<= vs-number 99) "")
(t " "))))
(aset char-acronym-table codepoint
(format "VS%s%s" delimiter vs-number))))
;; We can't use the \N{name} things here, because this file is used
;; too early in the build process.
(defvar bidi-control-characters
@ -1574,7 +1585,9 @@ option `glyphless-char-display'."
#x80 #x9F method))
((eq target 'variation-selectors)
(glyphless-set-char-table-range glyphless-char-display
#xFE00 #xFE0F method))
#xFE00 #xFE0F method)
(glyphless-set-char-table-range glyphless-char-display
#xE0100 #xE01EF method))
((or (eq target 'format-control)
(eq target 'bidi-control))
(when unicode-category-table
@ -1647,10 +1660,10 @@ GROUP must be one of these symbols:
that are relevant for bidirectional formatting control,
like U+2069 (PDI) and U+202B (RLE).
`variation-selectors':
Characters in the range U+FE00..U+FE0F, used for
selecting alternate glyph presentations, such as
Emoji vs Text presentation, of the preceding
character(s).
Characters in the range U+FE00..U+FE0F and
U+E0100..U+E01EF, used for selecting alternate glyph
presentations, such as Emoji vs Text presentation, of
the preceding character(s).
`no-font': For GUI frames, characters for which no suitable
font is found; for text-mode frames, characters
that cannot be encoded by `terminal-coding-system'.

View file

@ -702,7 +702,7 @@ is."
;; Probhat Input Method
(quail-define-package
"bengali-probhat" "Bengali" "BngPB" t
"Probhat keyboard for Bengali/Bangla" nil t nil nil nil nil nil nil nil nil t)
"Probhat keyboard for Bengali/Bangla" nil t nil t t nil nil nil nil nil t)
(quail-define-rules
("!" ?!)

View file

@ -154,8 +154,7 @@
;; Load-time macro-expansion can only take effect after setting
;; load-source-file-function because of where it is called in lread.c.
(load "emacs-lisp/macroexp")
(if (or (byte-code-function-p (symbol-function 'macroexpand-all))
(subr-native-elisp-p (symbol-function 'macroexpand-all)))
(if (compiled-function-p (symbol-function 'macroexpand-all))
nil
;; Since loaddefs is not yet loaded, macroexp's uses of pcase will simply
;; fail until pcase is explicitly loaded. This also means that we have to

View file

@ -388,11 +388,11 @@ gnus-version)
(insert "MH-E " mh-version "\n\n")
;; MH-E compilation details.
(insert "MH-E compilation details:\n")
(let* ((compiled-mhe (byte-code-function-p (symbol-function 'mh-version)))
(let* ((compiled-mhe (compiled-function-p (symbol-function 'mh-version)))
(gnus-compiled-version (if compiled-mhe
(mh-macro-expansion-time-gnus-version)
"N/A")))
(insert " Byte compiled:\t\t" (if compiled-mhe "yes" "no") "\n"
(insert " Compiled:\t\t" (if compiled-mhe "yes" "no") "\n"
" Gnus (compile-time):\t" gnus-compiled-version "\n"
" Gnus (run-time):\t" (mh-run-time-gnus-version) "\n\n"))
;; Emacs version.

View file

@ -361,7 +361,8 @@ AGES is the list of ages that are to be shown."
(mapc (lambda (feed)
(let ((feed-name-symbol (intern (car feed))))
(mapc (lambda (item)
(when (memq (newsticker--age item) ages)
(when (or (memq 'all ages)
(memq (newsticker--age item) ages))
(newsticker--treeview-list-add-item
item feed-name-symbol t)))
(newsticker--treeview-list-sort-items
@ -1218,11 +1219,11 @@ Note: does not update the layout."
(newsticker--treeview-list-update t)
(newsticker--treeview-item-update)
(newsticker--treeview-tree-update-tags)
(cond (newsticker--treeview-current-feed
(newsticker--treeview-list-items newsticker--treeview-current-feed))
(newsticker--treeview-current-vfeed
(cond (newsticker--treeview-current-vfeed
(newsticker--treeview-list-items-with-age
(intern newsticker--treeview-current-vfeed))))
(intern newsticker--treeview-current-vfeed)))
(newsticker--treeview-current-feed
(newsticker--treeview-list-items newsticker--treeview-current-feed)))
(newsticker--treeview-tree-update-highlight)
(newsticker--treeview-list-update-highlight)
(let ((cur-feed (or newsticker--treeview-current-feed

View file

@ -324,7 +324,7 @@ arguments to pass to the OPERATION."
(tramp-compat-file-name-concat localname "."))
(tramp-shell-quote-argument
(tramp-compat-file-name-concat localname ".."))))
(replace-regexp-in-region
(tramp-compat-replace-regexp-in-region
(regexp-quote
(tramp-compat-file-name-unquote
(file-name-as-directory localname)))

View file

@ -325,7 +325,7 @@ arguments to pass to the OPERATION."
;; Starting with Emacs 29, `tramp-archive-file-name-handler' is
;; autoloaded. But it must still be in tramp-loaddefs.el for older
;; Emacsen.
;;;###autoload(autoload 'tramp-archive-file-name-handler "tramp-archine")
;;;###autoload(autoload 'tramp-archive-file-name-handler "tramp-archive")
;;;###tramp-autoload
(defun tramp-archive-file-name-handler (operation &rest args)
"Invoke the file archive related OPERATION.

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