mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 09:14:18 +00:00
Merge branch 'master' into scratch/font_lock_large_files
This commit is contained in:
commit
ee3a674c7c
151 changed files with 2120 additions and 1528 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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|\
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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[...]]]
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.}
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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{–} and @samp{®} 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}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
71
etc/NEWS
71
etc/NEWS
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
17
etc/PROBLEMS
17
etc/PROBLEMS
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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")))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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")))))
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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))))
|
||||
|
|
|
|||
|
|
@ -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))))
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))))
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -218,6 +218,7 @@ from the document.")
|
|||
|
||||
(defconst nndoc-version "nndoc 1.0"
|
||||
"nndoc version.")
|
||||
(make-obsolete-variable 'nndoc-version 'emacs-version "29.1")
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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.")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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'.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
("!" ?!)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in a new issue