Compare commits

...

39 Commits

Author SHA1 Message Date
Po Lu ea98a6af2f Additional changes to processing of Num Lock on Android
* java/org/gnu/emacs/EmacsView.java (onKeyDown, onKeyMultiple)
(onKeyDown): Disregard Num and Scroll Lock keys, and return
value of window functions to the system.

* java/org/gnu/emacs/EmacsWindow.java (eventModifiers): Return
normalized meta state, not only those bits the system considers
modifiers.
(onKeyDown, onKeyUp): Ignore numpad keys to which no base
characters are assigned, so that the system may generate the
proper action keys instead.
2024-05-12 15:49:53 +08:00
Po Lu af6df8e045 Correct earlier changes to processing of Num Lock on Android
* java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp):
Cease stripping META_NUM_LOCK_ON and META_SCROLL_LOCK_ON from
meta masks reported to getUnicodeChar.
2024-05-12 15:49:53 +08:00
Eli Zaretskii 5b9995052d ; Fix a recent change in fns.c
* src/fns.c (value_cmp): Use 'subprocesses', not 'MSDOS', as
conditional for process-related functionalities.
2024-05-12 09:51:51 +03:00
Po Lu 67b1da215c Pacify warnings in gmalloc.c
* src/gmalloc.c (__malloc_initialize_hook): Also declare in
advance on Glibc 2.24 and later.
(__after_morecore_hook, __morecore): Likewise on Glibc 2.34 and
later.
2024-05-12 13:27:43 +08:00
Po Lu 26a407cebe * oldXMenu/Activate.c (x_menu_grab_keyboard): Declare static. 2024-05-12 13:21:09 +08:00
Po Lu ed03b7ab9f Fix the DJGPP build
* src/fns.c (value_cmp) [MSDOS]: Consider processes unordered
on DOS.
2024-05-12 10:38:26 +08:00
Po Lu 41596bd711 * src/keyboard.c (lispy_function_keys): Define as static on Android. 2024-05-12 10:18:02 +08:00
Po Lu 15fd1e2cb6 ; Update last change
* msdos/sedlibmk.inp (STDDEF_NOT_IDEMPOTENT): Define to 1.
2024-05-12 10:16:56 +08:00
Po Lu 47a0fc91df Fix the DJGPP build
* msdos/sedlibmk.inp (HAVE_STRTOF, NULLPTR_T_NEEDS_STDDEF):
Define to 1.
2024-05-12 10:13:41 +08:00
Paul Eggert 99a5c75f3b Pacify gcc -Wmissing-variable-declarations
This is a new warning diagnostic in GCC 14.
* lib-src/etags.c (mercury_heuristics_ratio):
* src/pgtkselect.c, src/xselect.c (selection_request_stack):
* src/xselect.c (outstanding_transfers):
* src/xterm.c (pending_selection_requests)
(x_dnd_waiting_for_motif_finish_display):
Now static.
* lib-src/make-docfile.c (close_emacs_globals):
Arrange for lispsym to be declared with extern first,
when compiling lread.c.
* src/alloc.c (gdb_make_enums_visible) [__GNUC__]:
* src/emacs.c (RCS_Id):
* src/keyboard.c (stop_character):
* src/print.c (print_output_debug_flag):
Now declared with extern first.
* src/lisp.h (DEFINE_GDB_SYMBOL_BEGIN) [MAIN_PROGRAM]:
Arrange for ID to be declared extern first.
* src/lisp.h (garbage_collection_inhibited):
* src/xterm.h (x_frame_parm_handlers):
Declare here, so that its interface is properly checked.  Other decls
removed.
2024-05-11 18:46:27 -07:00
Paul Eggert 7ae091d933 Update from Gnulib by running admin/merge-gnulib 2024-05-11 18:46:26 -07:00
Paul Eggert 2e13c2adba Adjust to recent Gnulib changes
* admin/merge-gnulib: Also remove the new Gnulib file
m4/off64_t.m4, as Emacs doesn’t need off64_t.
* configure.ac (gl_TYPE_OFF64_T): Define a nearly no-op.
2024-05-11 18:46:25 -07:00
Eli Zaretskii dcb6a9ebcb ; * lisp/cus-edit.el (custom-save-all): Remove offensive commentary. 2024-05-11 20:13:17 +03:00
Po Lu 6d4179957a Fix test of whether to insert lexical-binding cookies in custom files
* lisp/cus-edit.el (custom-save-all): Test whether the buffer is
empty, not whether point is at EOB.
2024-05-11 22:24:23 +08:00
Po Lu b990c37b9a ; More coding style fixes
* src/sort.c (reverse_sortslice, tim_sort): Correct not-so
egregious misformattings.
2024-05-11 21:35:42 +08:00
Po Lu f43f7d7a43 ; Fix coding style in timsort.c
* src/sort.c (reverse_slice, sortslice): Fix egregious coding
style inconsistencies.
2024-05-11 21:34:30 +08:00
Eli Zaretskii 733ff78581 ; Fix byte-compilation warnings in lua-ts-mode.el
* lisp/progmodes/lua-ts-mode.el (treesit-node-eq)
(treesit-node-prev-sibling): Declare.
2024-05-11 13:54:35 +03:00
Eli Zaretskii 48c9285c19 Merge from origin/emacs-29
0ec9a02a0d ; Fix doc strings of two scroll-bar functions.
2f8bccf9d8 ; * doc/emacs/frames.texi (Scroll Bars): Improve formatting.
f9832e80b8 ; * lisp/textmodes/ispell.el (ispell-message): Add commen...
a7d247be90 ; * etc/PROBLEMS: Document macOS problems with Emacs.clr ...
8560ee7b5c ; * doc/misc/auth.texi (The Unix password store): Fix var...
74c6b59af1 ; Advertise scroll bars some more
3d65d4306b Avoid errors in 'image-dired-tag-thumbnail'
2024-05-11 06:50:56 -04:00
kobarity 6380806196 Support Python 3 in 'package-test-update-archives-async'
* test/lisp/emacs-lisp/package-resources/package-test-server.py:
Support Python 3.
* test/lisp/emacs-lisp/package-tests.el
(package-test-update-archives-async): Search for an executable
named "python", "python3", or "python2".  (Bug#70722)

Co-authored-by: Lin Sun <sunlin7@hotmail.com>
2024-05-11 13:06:08 +03:00
Eli Zaretskii 5fdc6d8357 Fix Rmail summary by thread
* lisp/mail/rmailsum.el (rmail-summary-by-thread): Use value of
'rmail-total-messages' local to 'rmail-buffer'.  Patch by Andrea
Monaco <andrea.monaco@autistici.org>.
2024-05-11 12:16:48 +03:00
Eli Zaretskii 3eca0bc307 ; * lisp/net/dictionary.el (dictionary-default-strategy): Doc fix. 2024-05-11 11:17:34 +03:00
Michael Albinus b43c31d2f5 New Tramp method "run0"
* doc/misc/tramp.texi (Quick Start Guide, Inline methods)
(Password handling, Predefined connection information)
(Ad-hoc multi-hops): Add "run0".
(Remote processes): Mention tramp-use-connection-share.

* etc/NEWS: New Tramp method "run0".

* lisp/net/tramp.el (tramp-completion-dissect-file-name):
* lisp/net/tramp-cmds.el (tramp-list-remote-buffers):
* lisp/net/tramp-smb.el (tramp-smb-handle-insert-directory):
Use `tramp-compat-keep-seq'.

* lisp/net/tramp-cmds.el (tramp-file-name-with-method): Add "run0".

* lisp/net/tramp-sh.el (tramp-enable-run0-method): New defun.
(tramp-sh-handle-expand-file-name): Add "run0".
(tramp-maybe-open-connection): Simplify setting timeout.
2024-05-11 10:03:45 +02:00
Po Lu 1c4b1ce8fa Improve documentation of p-s-p-scroll-down-page
* lisp/pixel-scroll.el
(pixel-scroll-precision-scroll-down-page): Document unit in
which the height of the window is measured, and what manner of
height applies.  Reported by Eli Zaretskii <eliz@gnu.org>.
2024-05-11 14:38:54 +08:00
Po Lu 3ff83246c8 Delete unused functions
* java/org/gnu/emacs/EmacsNative.java (dup, close):

* src/android.c (dup, close): Delete functions no longer
referenced.
2024-05-11 14:34:32 +08:00
Eli Zaretskii 0ec9a02a0d ; Fix doc strings of two scroll-bar functions.
* lisp/scroll-bar.el (toggle-horizontal-scroll-bar): Fix typo and
wording.  (Bug#70864).
(toggle-scroll-bar): Fix wording.
2024-05-11 08:29:22 +03:00
Eric Abrahamsen 41bfca0005 Update gnus-draft-check-draft-articles to use find-buffer-visiting
* lisp/gnus/gnus-draft.el (gnus-draft-check-draft-articles): Don't loop
through all the buffers; this removes the need for the `file-remote-p'
check. Also give the user some nicer feedback about what's going on.
2024-05-10 12:38:57 -07:00
Eric Abrahamsen b1e94b7bd3 Remove extra message-set-auto-save-file-name call in Gnus drafts
Bug#70579

* lisp/gnus/gnus-draft.el (gnus-draft-setup): This function is already
being called as part of the message-mail -> message-mode call
above. Running it twice results in a jump in assigned article numbers,
and the corresponding active value of the drafts group.
2024-05-10 10:29:00 -07:00
Juri Linkov 5d8c2bad21 Support customization of sorting order for Imenu completion candidates
* lisp/imenu.el (imenu--completion-buffer):
Set completion-extra-properties to '(:category imenu).
(imenu--flatten-index-alist): Use imenu--subalist-p to handle
newer format (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...)
as well (bug#70846).

* doc/emacs/misc.texi (DocView Navigation): Fix typo.
2024-05-10 19:48:00 +03:00
Jim Porter ffc70962ca ; Clean up some 'require' and 'declare-function' calls in Eshell
* lisp/eshell/em-ls.el:
* lisp/eshell/esh-cmd.el:
* lisp/eshell/esh-mode.el:
* lisp/eshell/esh-ext.el: Remove superfluous 'declare-function' calls.

* lisp/eshell/esh-proc.el (pcomplete): Require this explicitly instead
of transitively.
2024-05-10 09:27:30 -07:00
Mattias Engdegård 184d6e8c02 Avoid resizing mutation in subst-char-in-string
* lisp/subr.el (subst-char-in-string):
Use string-replace to avoid resizing mutation and O(n^2) time.
2024-05-10 15:45:15 +02:00
Eli Zaretskii 78761d699e ; * etc/NEWS: Announce user-level change in dictionary.el. 2024-05-10 15:59:24 +03:00
Eli Zaretskii 3129fed4be Fix 'dictionary-tooltip-mode'
* lisp/tooltip.el (tooltip-event-buffer): Make sure 'posn-window'
returns a window before calling 'window-buffer'.

* lisp/net/dictionary.el (dictionary-default-dictionary)
(dictionary-tooltip-dictionary): Doc fixes.
(dictionary-tooltip-dictionary): Change default value to t, which
means the same dictionary as 'dictionary-default-dictionary'.
(dictionary-do-search): If NOMATCHING is non-nil, do not insert
anything into the current buffer, as that is unexpected when
showing definitions in tooltips.
(dictionary-word-at-mouse-event): Be defensive about the values
returned by 'tooltip-event-buffer' and 'posn-point': they can be
unexpected when the mouse pointer is on the tool bar or mode line
etc.
(dictionary-display-tooltip): Ignore errors in this function.
(dictionary-tooltip-mode): Ignore mouse-movement events on tool
bar and tab-bar.
(dictionary-dictionaries): Decode the server response to present
dictionaries in human-readable form.  Document in the doc string
the format of the return value.
2024-05-10 15:56:30 +03:00
Po Lu 0f67ddd8d9 Implement dots and dashes on MS-Windows
* src/haikuterm.c (haiku_draw_dash): Correct whitespace error.

* src/w32term.c (w32_draw_dash, w32_fill_underline)
(w32_draw_glyph_string): Port display of dash and dot underline
styles from X.
2024-05-10 16:45:33 +08:00
Eli Zaretskii 2f8bccf9d8 ; * doc/emacs/frames.texi (Scroll Bars): Improve formatting. 2024-05-10 08:52:33 +03:00
Eli Zaretskii f9832e80b8 ; * lisp/textmodes/ispell.el (ispell-message): Add commentary. 2024-05-09 20:44:52 +03:00
Eli Zaretskii a7d247be90 ; * etc/PROBLEMS: Document macOS problems with Emacs.clr (bug#70836). 2024-05-09 09:05:22 +03:00
Illia Ostapyshyn 8560ee7b5c ; * doc/misc/auth.texi (The Unix password store): Fix variable name.
(Bug#70767)

Copyright-paperwork-exempt: yes
2024-05-08 16:16:40 -07:00
Eli Zaretskii 74c6b59af1 ; Advertise scroll bars some more
* doc/emacs/display.texi (Scrolling, Horizontal Scrolling):
Mention the scroll bars as alternative means of scrolling.
2024-05-08 16:44:05 +03:00
Eli Zaretskii 3d65d4306b Avoid errors in 'image-dired-tag-thumbnail'
* lisp/image/image-dired.el (image-dired-tag-thumbnail)
(image-dired-tag-thumbnail-remove): Move here from
image-dired-tags.el.  (Bug#70821)
2024-05-08 16:13:27 +03:00
221 changed files with 1364 additions and 681 deletions

View File

@ -126,6 +126,7 @@ rm -- "$src"lib/gl_openssl.h \
"$src"m4/gnulib-cache.m4 "$src"m4/gnulib-tool.m4 \
"$src"m4/locale-fr.m4 \
"$src"m4/manywarnings-c++.m4 \
"$src"m4/off64_t.m4 \
"$src"m4/warn-on-use.m4 "$src"m4/wint_t.m4 &&
cp -- "$gnulib_srcdir"/build-aux/texinfo.tex "$src"doc/misc &&
cp -- "$gnulib_srcdir"/build-aux/config.guess \

View File

@ -1584,6 +1584,10 @@ AC_DEFUN([gt_TYPE_WINT_T],
AC_DEFUN_ONCE([gl_STDLIB_H],
[AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
gl_NEXT_HEADERS([stdlib.h])])
# Emacs does not need to check for off64_t.
AC_DEFUN([gl_TYPE_OFF64_T],
[HAVE_OFF64_T=1
AC_SUBST([HAVE_OFF64_T])])
# Initialize gnulib right after choosing the compiler.
dnl Amongst other things, this sets AR and ARFLAGS.

View File

@ -175,6 +175,9 @@ scroll the current window by one line at a time. If you intend to use
any of these commands, you might want to give them key bindings
(@pxref{Init Rebinding}).
On graphical displays, you can also scroll a window using the scroll
bar; @pxref{Scroll Bars}.
@node Recentering
@section Recentering
@ -405,6 +408,10 @@ than the amount you previously set by @code{scroll-left}. When
other than the one showing the cursor will be scrolled by that minimal
amount.
On graphical displays, you can scroll a window horizontally using
the horizontal scroll bar, if you turn on the optional
@code{horizontal-scroll-bar-mode}; @pxref{Scroll Bars}.
@node Narrowing
@section Narrowing
@cindex widening

View File

@ -1146,11 +1146,11 @@ text or moving point with a keyboard command will usually bring it back
into view.
@findex horizontal-scroll-bar-mode
To toggle the use of horizontal scroll bars, type @kbd{M-x
horizontal-scroll-bar-mode}. This command applies to all frames,
To toggle the use of horizontal scroll bars, type @w{@kbd{M-x
horizontal-scroll-bar-mode}}. This command applies to all frames,
including frames yet to be created. To toggle horizontal scroll bars
for just the selected frame, use the command @kbd{M-x
toggle-horizontal-scroll-bar}.
for just the selected frame, use the command @w{@kbd{M-x
toggle-horizontal-scroll-bar}}.
@vindex horizontal-scroll-bar-mode
To control the use of horizontal scroll bars at startup, customize the

View File

@ -590,7 +590,7 @@ even when @command{mutool} can be found on your system, customize the
variable @code{doc-view-imenu-enabled} to the @code{nil} value. You
can further customize how @code{imenu} items are formatted and
displayed using the variables @code{doc-view-imenu-format} and
@code{doc-view-flatten}.
@code{doc-view-imenu-flatten}.
@node DocView Searching
@subsection DocView Searching

View File

@ -527,7 +527,7 @@ while searching for an entry matching the @code{rms} user on host
@code{gnu.org} and port @code{22}, then the entry
@file{gnu.org:22/rms.gpg} is preferred over @file{gnu.org.gpg}.
However, such processing is not applied when the option
@code{auth-source-pass-extra-parameters} is set to @code{t}.
@code{auth-source-pass-extra-query-keywords} is set to @code{t}.
Users of @code{pass} may also be interested in functionality provided
by other Emacs packages:

View File

@ -489,14 +489,16 @@ an @command{ssh} server:
@file{@trampfn{plink,user@@host,/path/to/file}}.
@anchor{Quick Start Guide su, sudo, doas, androidsu and sg methods}
@section Using @option{su}, @option{sudo}, @option{doas}, @option{androidsu} and @option{sg}
@anchor{Quick Start Guide su, sudo, doas, run0, androidsu and sg methods}
@section Using @option{su}, @option{sudo}, @option{doas}, @option{run0}, @option{androidsu} and @option{sg}
@cindex method @option{su}
@cindex @option{su} method
@cindex method @option{sudo}
@cindex @option{sudo} method
@cindex method @option{doas}
@cindex @option{doas} method
@cindex method @option{run0}
@cindex @option{run0} method
@cindex method @option{androidsu}
@cindex @option{androidsu} method
@cindex method @option{sg}
@ -504,9 +506,11 @@ an @command{ssh} server:
Sometimes, it is necessary to work on your local host under different
permissions. For this, you can use the @option{su} or @option{sudo}
connection method. On OpenBSD systems, the @option{doas} connection
method offers the same functionality. If your local system is
Android, use the method @option{androidsu} instead of @option{su}.
connection method. If your system is @code{systemd}-based, there is
the @option{run0} connection method. On OpenBSD systems, the
@option{doas} connection method offers the same functionality. If
your local system is Android, use the method @option{androidsu}
instead of @option{su}.
These methods use @samp{root} as default user name and the return
value of @code{(system-name)} as default host name. Therefore, it is
@ -516,8 +520,8 @@ The method @option{sg} stands for ``switch group''; here the user name
is used as the group to change to. The default host name is the same.
@anchor{Quick Start Guide Combining ssh, plink, su, sudo and doas methods}
@section Combining @option{ssh} or @option{plink} with @option{su}, @option{sudo} or @option{doas}
@anchor{Quick Start Guide Combining ssh, plink, su, sudo, doas and run0 methods}
@section Combining @option{ssh} or @option{plink} with @option{su}, @option{sudo}, @option{doas} or @option{run0}
@cindex method @option{ssh}
@cindex @option{ssh} method
@cindex method @option{plink}
@ -528,13 +532,15 @@ is used as the group to change to. The default host name is the same.
@cindex @option{sudo} method
@cindex method @option{doas}
@cindex @option{doas} method
@cindex method @option{run0}
@cindex @option{run0} method
If the @option{su}, @option{sudo} or @option{doas} option should be
performed on another host, it can be combined with a leading
@option{ssh} or @option{plink} option. That means that @value{tramp}
connects first to the other host with non-administrative credentials,
and changes to administrative credentials on that host afterwards. In
a simple case, the syntax looks like
If the @option{su}, @option{sudo}, @option{doas} or @option{run0}
method should be performed on another host, it can be combined with a
leading @option{ssh} or @option{plink} method. That means that
@value{tramp} connects first to the other host with non-administrative
credentials, and changes to administrative credentials on that host
afterwards. In a simple case, the syntax looks like
@file{@trampfn{ssh@value{postfixhop}user@@host|sudo,,/path/to/file}}.
@xref{Ad-hoc multi-hops}.
@ -882,6 +888,16 @@ This method is used on OpenBSD like the @command{sudo} command. Like
the @option{sudo} method, a @option{doas} connection is disabled after
a predefined timeout.
@item @option{run0}
@cindex method @option{run0}
@cindex @option{run0} method
This method is used on @code{systemd}-based hosts. Internally, it
uses the @code{systemd-run} command. A @option{run0} connection is
disabled after a predefined timeout as well.
This is an optional method, @ref{Optional methods}.
@item @option{sg}
@cindex method @option{sg}
@cindex @option{sg} method
@ -2104,8 +2120,9 @@ machine melancholia#4711 port davs login daniel%BIZARRE password geheim
For the methods @option{doas}, @option{sudo} and @option{sudoedit} the
password of the user requesting the connection is needed, and not the
password of the target user. If these connections happen on the local
host, an entry with the local user and local host is used:
password of the target user@footnote{On the local host, @code{run0}
uses a graphical password agent.}. If these connections happen on the
local host, an entry with the local user and local host is used:
@example
machine @var{host} port sudo login @var{user} password secret
@ -2278,8 +2295,8 @@ All @file{tramp-sh.el} based methods accept the property
@t{"session-timeout"}. This is the time (in seconds) after a
connection is disabled for security reasons, and must be
reestablished. A value of @code{nil} disables this feature. Most of
the methods do not set this property except the @option{sudo} and
@option{doas} methods, which use predefined values.
the methods do not set this property except the @option{sudo},
@option{doas} and @option{run0} methods, which use predefined values.
@item @t{"~"}@*
@t{"~user"}
@ -3815,7 +3832,7 @@ The buffer must either visit a file, or a directory
@defopt tramp-file-name-with-method
The method @code{tramp-revert-buffer-with-sudo} shows an alternate
buffer. It defaults to @code{sudo}, other valid methods are
@code{su}, @code{doas}, and @code{ksu}.
@code{su}, @code{doas}, @code{run0}, and @code{ksu}.
@lisp
(customize-set-variable 'tramp-file-name-with-method "doas")
@ -4056,7 +4073,9 @@ here will not work as expected.
@vindex ForwardX11Trusted@r{, ssh option}
An alternate approach is specify @option{ForwardX11 yes} or
@option{ForwardX11Trusted yes} in @file{~/.ssh/config} on the local
host.
host. Furthermore, set @code{tramp-use-connection-share} to
@code{nil} (@pxref{Using ssh connection sharing}), in order to avoid
unwanted side effects.
@subsection Running @code{shell} on a remote host

View File

@ -1069,6 +1069,11 @@ This provides access to system files with elevated privileges granted by
the idiosyncratic 'su' implementations and system utilities customary on
Android.
+++
*** New optional connection method "run0".
This connection method is similar to "sudo", but it uses the
'systemd-run' program internally.
+++
*** New connection methods "dockercp" and "podmancp".
These are the external methods counterparts of "docker" and "podman".
@ -1471,6 +1476,13 @@ name as a string. The new function
'dictionary-completing-read-dictionary' can be used to prompt with
completion based on dictionaries that the server supports.
---
*** The default value of 'dictionary-tooltip-dictionary' has changed.
The new default value is t, which means use the same dictionary as the
value of 'dictionary-default-dictionary'. The previous default value
was nil, which effectively disabled 'dictionary-tooltip-mode', even if
the mode was turned on.
** Pp
*** New 'pp-default-function' user option replaces 'pp-use-max-width'.

View File

@ -3402,7 +3402,7 @@ for further discussion.
* Runtime problems specific to macOS
** Error message when opening Emacs on macOS
** Error message about malicious software when opening Emacs on macOS
When opening Emacs, you may see an error message saying something like
this:
@ -3419,6 +3419,22 @@ the Emacs app icon, and then choose Open. This adds a security
exception for Emacs and from now on you should be able to open it by
double-clicking on its icon, like any other app.
** Error message about color list unarchiver when starting Emacs on macOS
The error message looks like this:
Failed to initialize color list unarchiver:
Error Domain=NSCocoaErrorDomain Code=4864 "*** -[NSKeyedUnarchiver
_initForReadingFromData:error:throwLegacyExceptions:]: non-keyed archive cannot be decoded by NSKeyedUnarchiver"
UserInfo={NSDebugDescription=*** -[NSKeyedUnarchiver
_initForReadingFromData:error:throwLegacyExceptions:]: non-keyed archive cannot be decoded by NSKeyedUnarchiver}
After showing this message, Emacs usually works normally.
The usual reason for this is that the color file,
~/Library/Colors/Emacs.clr, is stale or corrupted. The solution is to
delete that file and restart Emacs.
** macOS doesn't come with libxpm, so only XPM3 is supported.
Libxpm is available for macOS as part of the XQuartz project.

View File

@ -36,12 +36,6 @@ public final class EmacsNative
private static final String[] libraryDeps;
/* Like `dup' in C. */
public static native int dup (int fd);
/* Like `close' in C. */
public static native int close (int fd);
/* Obtain the fingerprint of this build of Emacs. The fingerprint
can be used to determine the dump file name. */
public static native String getFingerprint ();

View File

@ -505,42 +505,45 @@ public final class EmacsView extends ViewGroup
public boolean
onKeyDown (int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
&& !EmacsNative.shouldForwardMultimediaButtons ())
return false;
if (((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
&& !EmacsNative.shouldForwardMultimediaButtons ())
|| keyCode == KeyEvent.KEYCODE_SCROLL_LOCK
|| keyCode == KeyEvent.KEYCODE_NUM_LOCK)
return super.onKeyDown (keyCode, event);
window.onKeyDown (keyCode, event);
return true;
return window.onKeyDown (keyCode, event);
}
@Override
public boolean
onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
&& !EmacsNative.shouldForwardMultimediaButtons ())
return false;
if (((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
&& !EmacsNative.shouldForwardMultimediaButtons ())
|| keyCode == KeyEvent.KEYCODE_SCROLL_LOCK
|| keyCode == KeyEvent.KEYCODE_NUM_LOCK)
return super.onKeyMultiple (keyCode, repeatCount, event);
window.onKeyDown (keyCode, event);
return true;
return window.onKeyDown (keyCode, event);
}
@Override
public boolean
onKeyUp (int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
&& !EmacsNative.shouldForwardMultimediaButtons ())
return false;
if (((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
&& !EmacsNative.shouldForwardMultimediaButtons ())
|| keyCode == KeyEvent.KEYCODE_SCROLL_LOCK
|| keyCode == KeyEvent.KEYCODE_NUM_LOCK)
return super.onKeyUp (keyCode, event);
window.onKeyUp (keyCode, event);
return true;
return window.onKeyUp (keyCode, event);
}
@Override

View File

@ -633,8 +633,8 @@ public final class EmacsWindow extends EmacsHandleObject
/* Return the modifier mask associated with the specified keyboard
input EVENT. Replace bits corresponding to Left or Right keys
with their corresponding general modifier bits. */
input EVENT. Replace bits representing Left or Right keys with
their corresponding general modifier bits. */
public static int
eventModifiers (KeyEvent event)
@ -642,7 +642,7 @@ public final class EmacsWindow extends EmacsHandleObject
int state;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
state = event.getModifiers ();
state = KeyEvent.normalizeMetaState (event.getMetaState ());
else
{
/* Replace this with getMetaState and manual
@ -667,10 +667,10 @@ public final class EmacsWindow extends EmacsHandleObject
/* event.getCharacters is used because older input methods still
require it. */
@SuppressWarnings ("deprecation")
public void
public boolean
onKeyDown (int keyCode, KeyEvent event)
{
int state, state_1, extra_ignored;
int state, state_1, extra_ignored, unicode_char;
long serial;
String characters;
@ -686,18 +686,15 @@ public final class EmacsWindow extends EmacsHandleObject
Deliver onKeyDown events in onKeyUp instead, so as not to
navigate backwards during gesture navigation. */
return;
return true;
}
state = eventModifiers (event);
/* Num Lock, Scroll Lock and Meta aren't supported by systems older
than Android 3.0. */
/* Meta isn't supported by systems older than Android 3.0. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
extra_ignored = (KeyEvent.META_NUM_LOCK_ON
| KeyEvent.META_SCROLL_LOCK_ON
| KeyEvent.META_META_MASK);
extra_ignored = KeyEvent.META_META_MASK;
else
extra_ignored = 0;
@ -723,23 +720,36 @@ public final class EmacsWindow extends EmacsHandleObject
state &= ~KeyEvent.META_ALT_MASK;
}
unicode_char = getEventUnicodeChar (event, state_1);
/* If a NUMPAD_ key is detected for which no character is returned,
return false without sending the key event, as this will prompt
the system to send an event with the corresponding action
key. */
if (keyCode >= KeyEvent.KEYCODE_NUMPAD_0
&& keyCode <= KeyEvent.KEYCODE_NUMPAD_RIGHT_PAREN
&& unicode_char == 0)
return false;
synchronized (eventStrings)
{
serial
= EmacsNative.sendKeyPress (this.handle,
event.getEventTime (),
state, keyCode,
getEventUnicodeChar (event,
state_1));
unicode_char);
characters = event.getCharacters ();
if (characters != null && characters.length () > 1)
saveUnicodeString ((int) serial, characters);
}
return true;
}
public void
public boolean
onKeyUp (int keyCode, KeyEvent event)
{
int state, state_1, unicode_char, extra_ignored;
@ -748,13 +758,10 @@ public final class EmacsWindow extends EmacsHandleObject
/* Compute the event's modifier mask. */
state = eventModifiers (event);
/* Num Lock, Scroll Lock and Meta aren't supported by systems older
than Android 3.0. */
/* Meta isn't supported by systems older than Android 3.0. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
extra_ignored = (KeyEvent.META_NUM_LOCK_ON
| KeyEvent.META_SCROLL_LOCK_ON
| KeyEvent.META_META_MASK);
extra_ignored = KeyEvent.META_META_MASK;
else
extra_ignored = 0;
@ -787,12 +794,20 @@ public final class EmacsWindow extends EmacsHandleObject
/* If the key press's been canceled, return immediately. */
if ((event.getFlags () & KeyEvent.FLAG_CANCELED) != 0)
return;
return true;
/* Dispatch the key press event that was deferred till now. */
EmacsNative.sendKeyPress (this.handle, event.getEventTime (),
state, keyCode, unicode_char);
}
/* If a NUMPAD_ key is detected for which no character is returned,
return false without sending the key event, as this will prompt
the system to send an event with the corresponding action
key. */
else if (keyCode >= KeyEvent.KEYCODE_NUMPAD_0
&& keyCode <= KeyEvent.KEYCODE_NUMPAD_RIGHT_PAREN
&& unicode_char == 0)
return false;
EmacsNative.sendKeyRelease (this.handle, event.getEventTime (),
state, keyCode, unicode_char);
@ -810,6 +825,8 @@ public final class EmacsWindow extends EmacsHandleObject
lastQuitKeyRelease = time;
}
return true;
}
public void

View File

@ -705,7 +705,7 @@ and optionally Prolog-like definitions (first rule for a predicate or \
function).\n\
To enable this behavior, run etags using --declarations.";
static bool with_mercury_definitions = false;
float mercury_heuristics_ratio = MERCURY_HEURISTICS_RATIO;
static float mercury_heuristics_ratio = MERCURY_HEURISTICS_RATIO;
static const char *Objc_suffixes [] =
{ "lm", /* Objective lex file */

View File

@ -660,11 +660,11 @@ close_emacs_globals (ptrdiff_t num_symbols)
printf (("};\n"
"extern struct emacs_globals globals;\n"
"\n"
"#ifndef DEFINE_SYMBOLS\n"
"extern\n"
"#endif\n"
"struct Lisp_Symbol lispsym[%td];\n"),
num_symbols);
"extern struct Lisp_Symbol lispsym[%td];\n"
"#ifdef DEFINE_SYMBOLS\n"
"struct Lisp_Symbol lispsym[%td];\n"
"#endif\n"),
num_symbols, num_symbols);
}
static void

View File

@ -28,6 +28,11 @@
#include <sys/types.h>
#include <sys/stat.h>
#ifdef __cplusplus
extern "C" {
#endif
bool acl_errno_valid (int) _GL_ATTRIBUTE_CONST;
int file_has_acl (char const *, struct stat const *);
int qset_acl (char const *, int, mode_t);
@ -36,4 +41,9 @@ int qcopy_acl (char const *, int, char const *, int, mode_t);
int copy_acl (char const *, int, char const *, int, mode_t);
int chmod_or_fchmod (char const *, int, mode_t);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -22,6 +22,11 @@
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
/* An object describing a memory allocator family. */
struct allocator
@ -55,4 +60,9 @@ struct allocator
/* An allocator using the stdlib functions and a null DIE function. */
extern struct allocator const stdlib_allocator;
#ifdef __cplusplus
}
#endif
#endif /* _GL_ALLOCATOR_H */

View File

@ -55,6 +55,11 @@ __gl_setmode (_GL_UNUSED int fd, _GL_UNUSED int mode)
}
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY.
Return the old mode if successful, -1 (setting errno) on failure.
Ordinarily this function would be called 'setmode', since that is
@ -74,6 +79,11 @@ set_binary_mode (int fd, int mode)
/* This macro is obsolescent. */
#define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
#ifdef __cplusplus
}
#endif
_GL_INLINE_HEADER_END
#endif /* _BINARY_H */

View File

@ -304,18 +304,35 @@ get_windows_boot_time (struct timespec *p_boot_time)
Instead, on Windows, the boot time can be retrieved by looking at the
time stamp of a file that (normally) gets touched only during the boot
process, namely C:\pagefile.sys. */
const char * const boot_touched_file =
#if defined __CYGWIN__ && !defined _WIN32
"/cygdrive/c/pagefile.sys"
#else
"C:\\pagefile.sys"
#endif
;
struct stat statbuf;
if (stat (boot_touched_file, &statbuf) >= 0)
const char * const boot_touched_files[] =
{
*p_boot_time = get_stat_mtime (&statbuf);
return 0;
#if defined __CYGWIN__ && !defined _WIN32
/* It is more portable to use /proc/cygdrive/c than /cygdrive/c. */
"/proc/cygdrive/c/pagefile.sys",
/* A fallback, working around a Cygwin 3.5.3 bug. It has a modification
time about 1.5 minutes after the last boot; but that's better than
nothing. */
"/proc/cygdrive/c/ProgramData/Microsoft/Windows/DeviceMetadataCache/dmrc.idx"
#else
"C:\\pagefile.sys"
#endif
};
for (idx_t i = 0; i < SIZEOF (boot_touched_files); i++)
{
const char *filename = boot_touched_files[i];
struct stat statbuf;
if (stat (filename, &statbuf) >= 0)
{
# if defined __CYGWIN__ && !defined _WIN32
/* Work around a Cygwin 3.5.3 bug.
<https://cygwin.com/pipermail/cygwin/2024-May/255931.html> */
if (!S_ISDIR (statbuf.st_mode))
# endif
{
*p_boot_time = get_stat_mtime (&statbuf);
return 0;
}
}
}
return -1;
}

View File

@ -28,6 +28,11 @@
#include <fcntl.h>
#include <unistd.h>
#ifdef __cplusplus
extern "C" {
#endif
struct allocator;
/* Assuming the current directory is FD, get the symbolic link value
@ -69,4 +74,9 @@ char *careadlinkat (int fd, char const *filename,
# endif
#endif
#ifdef __cplusplus
}
#endif
#endif /* _GL_CAREADLINKAT_H */

View File

@ -15,6 +15,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifdef __cplusplus
extern "C" {
#endif
/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
or clear the flag if VALUE is false.
Return 0 on success, or -1 on error with 'errno' set.
@ -32,3 +37,8 @@ int set_cloexec_flag (int desc, bool value);
be duplicated. */
int dup_cloexec (int fd);
#ifdef __cplusplus
}
#endif

View File

@ -17,4 +17,14 @@
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
int close_stream (FILE *stream);
#ifdef __cplusplus
}
#endif

View File

@ -30,6 +30,11 @@ _GL_INLINE_HEADER_BEGIN
# define _GL_EXECINFO_INLINE _GL_INLINE
#endif
#ifdef __cplusplus
extern "C" {
#endif
_GL_EXECINFO_INLINE int
backtrace (void **buffer, int size)
{
@ -54,6 +59,11 @@ backtrace_symbols_fd (void *const *buffer, int size, int fd)
(void) fd;
}
#ifdef __cplusplus
}
#endif
_GL_INLINE_HEADER_END
#endif

View File

@ -51,7 +51,8 @@
#ifndef _@GUARD_PREFIX@_FCNTL_H
/* Needed before <sys/stat.h>.
May also define off_t to a 64-bit type on native Windows. */
May also define off_t to a 64-bit type on native Windows.
Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */
#include <sys/types.h>
/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
<fcntl.h>. On glibc systems, we would like to avoid namespace pollution.

View File

@ -27,6 +27,11 @@
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Compare strings A and B as file names containing version numbers,
and return an integer that is negative, zero, or positive depending
on whether A compares less than, equal to, or greater than B.
@ -80,4 +85,9 @@ int filevercmp (char const *a, char const *b) _GL_ATTRIBUTE_PURE;
int filenvercmp (char const *a, ptrdiff_t alen, char const *b, ptrdiff_t blen)
_GL_ATTRIBUTE_PURE;
#ifdef __cplusplus
}
#endif
#endif /* FILEVERCMP_H */

View File

@ -30,6 +30,16 @@
# include <stdio_ext.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if !HAVE_DECL___FPENDING
size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE;
#endif
#ifdef __cplusplus
}
#endif

View File

@ -19,9 +19,14 @@
/* Space usage statistics for a file system. Blocks are 512-byte. */
#if !defined FSUSAGE_H_
# define FSUSAGE_H_
#define FSUSAGE_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
# include <stdint.h>
struct fs_usage
{
@ -36,4 +41,9 @@ struct fs_usage
int get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -24,6 +24,11 @@
#include <float.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Store into BUF (of size BUFSIZE) an accurate minimal-precision
string representation of a floating point number. FLAGS affect the
formatting of the number. Pad the output string with spaces as
@ -149,4 +154,9 @@ enum
#define DBL_BUFSIZE_BOUND ( DBL_STRLEN_BOUND + 1)
#define LDBL_BUFSIZE_BOUND (LDBL_STRLEN_BOUND + 1)
#ifdef __cplusplus
}
#endif
#endif /* _GL_FTOASTR_H */

View File

@ -618,6 +618,7 @@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
GL_GNULIB_STRTOF = @GL_GNULIB_STRTOF@
GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
@ -809,6 +810,7 @@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
HAVE_MODULES = @HAVE_MODULES@
HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
HAVE_NATIVE_COMP = @HAVE_NATIVE_COMP@
HAVE_OFF64_T = @HAVE_OFF64_T@
HAVE_OPENAT = @HAVE_OPENAT@
HAVE_OPENDIR = @HAVE_OPENDIR@
HAVE_OS_H = @HAVE_OS_H@
@ -872,6 +874,7 @@ HAVE_STRPBRK = @HAVE_STRPBRK@
HAVE_STRPTIME = @HAVE_STRPTIME@
HAVE_STRSEP = @HAVE_STRSEP@
HAVE_STRTOD = @HAVE_STRTOD@
HAVE_STRTOF = @HAVE_STRTOF@
HAVE_STRTOL = @HAVE_STRTOL@
HAVE_STRTOLD = @HAVE_STRTOLD@
HAVE_STRTOLL = @HAVE_STRTOLL@
@ -922,12 +925,10 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
IS_D8_R8 = @IS_D8_R8@
JARSIGNER = @JARSIGNER@
JAVAC = @JAVAC@
JPEG_CFLAGS = @JPEG_CFLAGS@
JSON_CFLAGS = @JSON_CFLAGS@
JSON_LIBS = @JSON_LIBS@
JSON_OBJ = @JSON_OBJ@
KQUEUE_CFLAGS = @KQUEUE_CFLAGS@
KQUEUE_LIBS = @KQUEUE_LIBS@
KRB4LIB = @KRB4LIB@
@ -1017,9 +1018,12 @@ NDK_BUILD_ARCH = @NDK_BUILD_ARCH@
NDK_BUILD_CC = @NDK_BUILD_CC@
NDK_BUILD_CFLAGS = @NDK_BUILD_CFLAGS@
NDK_BUILD_CXX = @NDK_BUILD_CXX@
NDK_BUILD_CXX_LDFLAGS = @NDK_BUILD_CXX_LDFLAGS@
NDK_BUILD_CXX_SHARED = @NDK_BUILD_CXX_SHARED@
NDK_BUILD_CXX_STL = @NDK_BUILD_CXX_STL@
NDK_BUILD_MODULES = @NDK_BUILD_MODULES@
NDK_BUILD_NASM = @NDK_BUILD_NASM@
NDK_BUILD_READELF = @NDK_BUILD_READELF@
NDK_BUILD_SDK = @NDK_BUILD_SDK@
NEXT_ASSERT_H = @NEXT_ASSERT_H@
NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
@ -1068,6 +1072,7 @@ NS_OBJ = @NS_OBJ@
NS_OBJC_OBJ = @NS_OBJC_OBJ@
NTDIR = @NTDIR@
NTLIB = @NTLIB@
NULLPTR_T_NEEDS_STDDEF = @NULLPTR_T_NEEDS_STDDEF@
OBJC = @OBJC@
OBJCFLAGS = @OBJCFLAGS@
OBJEXT = @OBJEXT@
@ -1101,6 +1106,7 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
QCOPY_ACL_LIB = @QCOPY_ACL_LIB@
RALLOC_OBJ = @RALLOC_OBJ@
RANLIB = @RANLIB@
READELF = @READELF@
REPLACE_ACCESS = @REPLACE_ACCESS@
REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
@ -1258,6 +1264,7 @@ REPLACE_STRNLEN = @REPLACE_STRNLEN@
REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
REPLACE_STRSTR = @REPLACE_STRSTR@
REPLACE_STRTOD = @REPLACE_STRTOD@
REPLACE_STRTOF = @REPLACE_STRTOF@
REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
REPLACE_STRTOL = @REPLACE_STRTOL@
@ -1308,6 +1315,7 @@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@
SQLITE3_LIBS = @SQLITE3_LIBS@
STDCKDINT_H = @STDCKDINT_H@
STDDEF_H = @STDDEF_H@
STDDEF_NOT_IDEMPOTENT = @STDDEF_NOT_IDEMPOTENT@
STDINT_H = @STDINT_H@
SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@
SYSTEM_TYPE = @SYSTEM_TYPE@
@ -2195,6 +2203,7 @@ SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G
SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t'
# Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that
# is its recipe's first line if and only if @NMD@ lines are absent.
gl_V_at = $(AM_V_GEN)
endif
@ -3078,9 +3087,11 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-e 's|@''NULLPTR_T_NEEDS_STDDEF''@|$(NULLPTR_T_NEEDS_STDDEF)|g' \
-e 's|@''STDDEF_NOT_IDEMPOTENT''@|$(STDDEF_NOT_IDEMPOTENT)|g' \
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
$(srcdir)/stddef.in.h > $@-t
$(AM_V_at)mv $@-t $@
else
@ -3347,6 +3358,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \
-e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \
-e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \
-e 's/@''GNULIB_STRTOF''@/$(GL_GNULIB_STRTOF)/g' \
-e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \
-e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \
-e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \
@ -3399,6 +3411,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
-e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
-e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
-e 's|@''HAVE_STRTOF''@|$(HAVE_STRTOF)|g' \
-e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \
-e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \
-e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
@ -3444,6 +3457,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
-e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
-e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
-e 's|@''REPLACE_STRTOF''@|$(REPLACE_STRTOF)|g' \
-e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \
-e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \
-e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \
@ -3833,6 +3847,7 @@ sys/types.h: sys_types.in.h $(top_builddir)/config.status
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
-e 's|@''HAVE_OFF64_T''@|$(HAVE_OFF64_T)|g' \
-e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
$(srcdir)/sys_types.in.h > $@-t
$(AM_V_at)mv $@-t $@

View File

@ -111,6 +111,11 @@
help producing good code and good warnings. The type 'idx_t' could
then be typedef'ed to a range type that is signed after promotion. */
#ifdef __cplusplus
extern "C" {
#endif
/* In the future, idx_t could be typedef'ed to a signed range type.
The clang "extended integer types", supported in Clang 11 or newer
<https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types>,
@ -131,4 +136,9 @@ typedef ptrdiff_t idx_t;
Perhaps there should be another macro IDX_VALUE_BITS that does not
count the sign bit and is therefore one less than PTRDIFF_WIDTH. */
#ifdef __cplusplus
}
#endif
#endif /* _IDX_H */

View File

@ -169,7 +169,9 @@
/* Work around GCC bug 91450. */
# define _GL_INT_MULTIPLY_WRAPV(a, b, r) \
((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && _GL_EXPR_SIGNED (a) && _GL_EXPR_SIGNED (b) \
&& _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
&& _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, \
(__typeof__ (*(r))) 0, \
(__typeof__ (*(r))) -1)) \
? ((void) __builtin_mul_overflow (a, b, r), 1) \
: __builtin_mul_overflow (a, b, r))
# endif
@ -183,10 +185,10 @@
/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
https://llvm.org/bugs/show_bug.cgi?id=25390
For now, assume all versions of GCC-like compilers generate bogus
For now, assume GCC < 14 and all Clang versions generate bogus
warnings for _Generic. This matters only for compilers that
lack relevant builtins. */
#if __GNUC__ || defined __clang__
#if (__GNUC__ && __GNUC__ < 14) || defined __clang__
# define _GL__GENERIC_BOGUS 1
#else
# define _GL__GENERIC_BOGUS 0

View File

@ -16,11 +16,7 @@
#include <config.h>
/* memset_s need this define */
#if HAVE_MEMSET_S
# define __STDC_WANT_LIB_EXT1__ 1
#endif
/* Specification. */
#include <string.h>
/* Set S's bytes to C, where S has LEN bytes. The compiler will not

View File

@ -2809,6 +2809,7 @@ mpz_gcdext (mpz_t g, mpz_t s, mpz_t t, const mpz_t u, const mpz_t v)
mpz_t tu, tv, s0, s1, t0, t1;
mp_bitcnt_t uz, vz, gz;
mp_bitcnt_t power;
int cmp;
if (u->_mp_size == 0)
{
@ -2960,12 +2961,21 @@ mpz_gcdext (mpz_t g, mpz_t s, mpz_t t, const mpz_t u, const mpz_t v)
mpz_tdiv_q_2exp (t0, t0, 1);
}
/* Arrange so that |s| < |u| / 2g */
/* Choose small cofactors (they should generally satify
|s| < |u| / 2g and |t| < |v| / 2g,
with some documented exceptions). Always choose the smallest s,
if there are two choices for s with same absolute value, choose
the one with smallest corresponding t (this asymmetric condition
is needed to prefer s = 0, |t| = 1 when g = |a| = |b|). */
mpz_add (s1, s0, s1);
if (mpz_cmpabs (s0, s1) > 0)
mpz_sub (t1, t0, t1);
cmp = mpz_cmpabs (s0, s1);
if (cmp > 0 || (cmp == 0 && mpz_cmpabs (t0, t1) > 0))
{
mpz_swap (s0, s1);
mpz_sub (t0, t0, t1);
mpz_swap (t0, t1);
}
if (u->_mp_size < 0)
mpz_neg (s0, s0);

View File

@ -24,6 +24,11 @@
#include <limits.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Maximum number of bytes that it is safe to allocate as a single
array on the stack, and that is known as a compile-time constant.
The assumption is that we'll touch the array very quickly, or a
@ -61,4 +66,9 @@ int at_func2 (int fd1, char const *file1,
int fd2, char const *file2,
int (*func) (char const *file1, char const *file2));
#ifdef __cplusplus
}
#endif
#endif /* _GL_HEADER_OPENAT_PRIV */

View File

@ -33,6 +33,11 @@
_GL_INLINE_HEADER_BEGIN
#ifdef __cplusplus
extern "C" {
#endif
#if !HAVE_OPENAT
int openat_permissive (int fd, char const *file, int flags, mode_t mode,
@ -122,6 +127,11 @@ lstatat (int fd, char const *name, struct stat *st)
wrappers are not provided for accessat or euidaccessat, so as to
avoid dragging in -lgen on some platforms. */
#ifdef __cplusplus
}
#endif
_GL_INLINE_HEADER_END
#endif /* _GL_HEADER_OPENAT */

View File

@ -19,7 +19,12 @@
/* Written by Jim Meyering. */
#ifndef SAVE_CWD_H
# define SAVE_CWD_H 1
#define SAVE_CWD_H 1
#ifdef __cplusplus
extern "C" {
#endif
struct saved_cwd
{
@ -31,4 +36,9 @@ int save_cwd (struct saved_cwd *cwd);
int restore_cwd (const struct saved_cwd *cwd);
void free_cwd (struct saved_cwd *cwd);
#ifdef __cplusplus
}
#endif
#endif /* SAVE_CWD_H */

View File

@ -27,13 +27,21 @@
#endif
@PRAGMA_COLUMNS@
#if defined __need_wchar_t || defined __need_size_t \
|| defined __need_ptrdiff_t || defined __need_NULL \
|| defined __need_wint_t
#if (defined __need_wchar_t || defined __need_size_t \
|| defined __need_ptrdiff_t || defined __need_NULL \
|| defined __need_wint_t) \
/* Avoid warning triggered by "gcc -std=gnu23 -Wsystem-headers" \
in Fedora 40 with gcc 14.0.1. \
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870>. */ \
&& !@STDDEF_NOT_IDEMPOTENT@
/* Special invocation convention inside gcc header files. In
particular, gcc provides a version of <stddef.h> that blindly
redefines NULL even when __need_wint_t was defined, even though
wint_t is not normally provided by <stddef.h>. Hence, we must
particular, <stddef.h> in some ancient versions of GCC blindly
redefined NULL when __need_wint_t was defined, even though wint_t
is not normally provided by <stddef.h>.
(FIXME: It's not clear what GCC versions those were - perhaps so
ancient that we can stop worrying about this?)
Although glibc 2.26 (2017) and later do not use __need_wint_t,
for portability to macOS, Cygwin, Haiku, and older Glibc + GCC,
remember if special invocation has ever been used to obtain wint_t,
in which case we need to clean up NULL yet again. */
@ -52,6 +60,13 @@
# endif
#else
/* For @STDDEF_NOT_IDEMPOTENT@. */
# undef __need_wchar_t
# undef __need_size_t
# undef __need_ptrdiff_t
# undef __need_NULL
# undef __need_wint_t
/* Normal invocation convention. */
# ifndef _@GUARD_PREFIX@_STDDEF_H
@ -74,6 +89,12 @@ typedef long max_align_t;
# endif
# endif
# if !defined _GCC_NULLPTR_T && !@NULLPTR_T_NEEDS_STDDEF@
/* Suppress unwanted nullptr_t typedef. See
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114869>. */
# define _GCC_NULLPTR_T
# endif
/* The include_next requires a split double-inclusion guard. */
# @INCLUDE_NEXT@ @NEXT_STDDEF_H@

View File

@ -77,7 +77,8 @@
/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8
and eglibc 2.11.2.
May also define off_t to a 64-bit type on native Windows. */
May also define off_t to a 64-bit type on native Windows.
Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */
#include <sys/types.h>
/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */
@ -907,14 +908,14 @@ _GL_CXXALIAS_SYS (fwrite, size_t,
&& !defined __cplusplus)
# undef fwrite
# undef fwrite_unlocked
extern size_t __REDIRECT (rpl_fwrite,
(const void *__restrict, size_t, size_t,
FILE *__restrict),
fwrite);
extern size_t __REDIRECT (rpl_fwrite_unlocked,
(const void *__restrict, size_t, size_t,
FILE *__restrict),
fwrite_unlocked);
_GL_EXTERN_C size_t __REDIRECT (rpl_fwrite,
(const void *__restrict, size_t, size_t,
FILE *__restrict),
fwrite);
_GL_EXTERN_C size_t __REDIRECT (rpl_fwrite_unlocked,
(const void *__restrict, size_t, size_t,
FILE *__restrict),
fwrite_unlocked);
# define fwrite rpl_fwrite
# define fwrite_unlocked rpl_fwrite_unlocked
# endif

View File

@ -1591,6 +1591,38 @@ _GL_WARN_ON_USE (strtod, "strtod is unportable - "
# endif
#endif
#if @GNULIB_STRTOF@
/* Parse a float from STRING, updating ENDP if appropriate. */
# if @REPLACE_STRTOF@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define strtof rpl_strtof
# endif
# define GNULIB_defined_strtof_function 1
_GL_FUNCDECL_RPL (strtof, float,
(const char *restrict str, char **restrict endp)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (strtof, float,
(const char *restrict str, char **restrict endp));
# else
# if !@HAVE_STRTOF@
_GL_FUNCDECL_SYS (strtof, float,
(const char *restrict str, char **restrict endp)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (strtof, float,
(const char *restrict str, char **restrict endp));
# endif
# if __GLIBC__ >= 2
_GL_CXXALIASWARN (strtof);
# endif
#elif defined GNULIB_POSIXCHECK
# undef strtof
# if HAVE_RAW_DECL_STRTOF
_GL_WARN_ON_USE (strtof, "strtof is unportable - "
"use gnulib module strtof for portability");
# endif
#endif
#if @GNULIB_STRTOLD@
/* Parse a 'long double' from STRING, updating ENDP if appropriate. */
# if @REPLACE_STRTOLD@

View File

@ -141,6 +141,15 @@ extern char *tzname[];
? (a) >> (b) \
: ((a) + ((a) < 0)) / (1 << (b)) - ((a) < 0))
enum pad_style
{
ZERO_PAD, /* (default) Pad with 0 unless format says otherwise. */
ALWAYS_ZERO_PAD, /* '0' Always pad with 0. */
SIGN_PAD, /* '+' Always output a sign. */
SPACE_PAD, /* '_' Pad with space. */
NO_PAD /* '-' Do not pad. */
};
#define TM_YEAR_BASE 1900
#ifndef __isleap
@ -193,7 +202,7 @@ extern char *tzname[];
do \
{ \
size_t _n = (n); \
size_t _w = pad == L_('-') || width < 0 ? 0 : width; \
size_t _w = pad == NO_PAD || width < 0 ? 0 : width; \
size_t _incr = _n < _w ? _w : _n; \
if (_incr >= maxsize - i) \
{ \
@ -205,7 +214,7 @@ extern char *tzname[];
if (_n < _w) \
{ \
size_t _delta = _w - _n; \
if (pad == L_('0') || pad == L_('+')) \
if (pad == ALWAYS_ZERO_PAD || pad == SIGN_PAD) \
memset_zero (p, _delta); \
else \
memset_space (p, _delta); \
@ -825,7 +834,7 @@ static CHAR_T const c_month_names[][sizeof "September"] =
static size_t __strftime_internal (STREAM_OR_CHAR_T *, STRFTIME_ARG (size_t)
const CHAR_T *, const struct tm *,
bool, int, int, bool *
bool, enum pad_style, int, bool *
extra_args_spec LOCALE_PARAM);
/* Write information from TP into S according to the format
@ -841,7 +850,8 @@ my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
{
bool tzset_called = false;
return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, false,
0, -1, &tzset_called extra_args LOCALE_ARG);
ZERO_PAD, -1,
&tzset_called extra_args LOCALE_ARG);
}
libc_hidden_def (my_strftime)
@ -853,7 +863,7 @@ static size_t
__strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
const CHAR_T *format,
const struct tm *tp, bool upcase,
int yr_spec, int width, bool *tzset_called
enum pad_style yr_spec, int width, bool *tzset_called
extra_args_spec LOCALE_PARAM)
{
#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
@ -977,7 +987,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
for (f = format; *f != '\0'; width = -1, f++)
{
int pad = 0; /* Padding for number ('_', '-', '+', '0', or 0). */
enum pad_style pad = ZERO_PAD;
int modifier; /* Field modifier ('E', 'O', or 0). */
int digits = 0; /* Max digits for numeric format. */
int number_value; /* Numeric value to be printed. */
@ -1095,12 +1105,10 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
switch (*++f)
{
/* This influences the number formats. */
case L_('_'):
case L_('-'):
case L_('+'):
case L_('0'):
pad = *f;
continue;
case L_('_'): pad = SPACE_PAD; continue;
case L_('-'): pad = NO_PAD; continue;
case L_('+'): pad = SIGN_PAD; continue;
case L_('0'): pad = ALWAYS_ZERO_PAD; continue;
/* This changes textual output. */
case L_('^'):
@ -1336,7 +1344,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
# endif
if (len != 0)
{
# if defined __NetBSD__ || defined __sun /* NetBSD, Solaris */
# if (__GLIBC__ == 2 && __GLIBC_MINOR__ < 31) || defined __NetBSD__ || defined __sun /* glibc < 2.31, NetBSD, Solaris */
if (format_char == L_('c'))
{
/* The output of the strftime %c directive consists of the
@ -1374,7 +1382,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
}
}
}
# if REQUIRE_GNUISH_STRFTIME_AM_PM
# if (defined __NetBSD__ || defined __sun) && REQUIRE_GNUISH_STRFTIME_AM_PM
/* The output of the strftime %p and %r directives contains
an AM/PM indicator even for locales where it is not
suitable, such as French. Remove this indicator. */
@ -1483,17 +1491,17 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
goto do_number_body;
do_yearish:
if (pad == 0)
if (pad == ZERO_PAD)
pad = yr_spec;
always_output_a_sign
= (pad == L_('+')
= (pad == SIGN_PAD
&& ((digits == 2 ? 99 : 9999) < u_number_value
|| digits < width));
goto do_maybe_signed_number;
do_number_spacepad:
if (pad == 0)
pad = L_('_');
if (pad == ZERO_PAD)
pad = SPACE_PAD;
do_number:
/* Format NUMBER_VALUE according to the MODIFIER flag. */
@ -1551,8 +1559,8 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
while (u_number_value != 0 || tz_colon_mask != 0);
do_number_sign_and_padding:
if (pad == 0)
pad = L_('0');
if (pad == ZERO_PAD)
pad = ALWAYS_ZERO_PAD;
if (width < 0)
width = digits;
@ -1562,11 +1570,11 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
: 0);
int numlen = buf + sizeof buf / sizeof buf[0] - bufp;
int shortage = width - !!sign_char - numlen;
int padding = pad == L_('-') || shortage <= 0 ? 0 : shortage;
int padding = pad == NO_PAD || shortage <= 0 ? 0 : shortage;
if (sign_char)
{
if (pad == L_('_'))
if (pad == SPACE_PAD)
{
if (p)
memset_space (p, padding);
@ -1584,9 +1592,9 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
case L_('F'):
if (modifier != 0)
goto bad_format;
if (pad == 0 && width < 0)
if (pad == ZERO_PAD && width < 0)
{
pad = L_('+');
pad = SIGN_PAD;
subwidth = 4;
}
else
@ -1653,8 +1661,8 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
ndigs--, n /= 10;
for (int j = ndigs; 0 < j; j--)
buf[j - 1] = n % 10 + L_('0'), n /= 10;
if (!pad)
pad = L_('0');
if (pad == ZERO_PAD)
pad = ALWAYS_ZERO_PAD;
width_cpy (0, ndigs, buf);
width_add (width - ndigs, 0, (void) 0);
}
@ -1864,7 +1872,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
# else
subfmt = era->era_format;
# endif
if (pad == 0)
if (pad == ZERO_PAD)
pad = yr_spec;
goto subformat;
}
@ -1887,7 +1895,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
if (era)
{
int delta = tp->tm_year - era->start_date[0];
if (pad == 0)
if (pad == ZERO_PAD)
pad = yr_spec;
DO_NUMBER (2, (era->offset
+ delta * era->absolute_direction));
@ -1916,7 +1924,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
{
/* The zone string is always given in multibyte form. We have
to convert it to wide character. */
size_t w = pad == L_('-') || width < 0 ? 0 : width;
size_t w = pad == NO_PAD || width < 0 ? 0 : width;
char const *z = zone;
mbstate_t st = {0};
size_t len = __mbsrtowcs_l (p, &z, maxsize - i, &st, loc);
@ -1934,7 +1942,8 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
{
size_t delta = w - len;
__wmemmove (p + delta, p, len);
wchar_t wc = pad == L_('0') || pad == L_('+') ? L'0' : L' ';
wchar_t wc = (pad == ALWAYS_ZERO_PAD || pad == SIGN_PAD
? L'0' : L' ');
wmemset (p, wc, delta);
}
p += incr;

View File

@ -60,6 +60,15 @@
# define _GL_WINDOWS_64_BIT_OFF_T 1
#endif
/* Define the off64_t type. */
#if !@HAVE_OFF64_T@
# if !GNULIB_defined_off64_t
/* Define off64_t to int64_t always. */
typedef long long off64_t;
# define GNULIB_defined_off64_t 1
# endif
#endif
/* Override dev_t and ino_t if distinguishable inodes support is requested
on native Windows. */
#if @WINDOWS_STAT_INODES@

View File

@ -29,6 +29,11 @@ _GL_INLINE_HEADER_BEGIN
# define _GL_U64_INLINE _GL_INLINE
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Return X rotated left by N bits, where 0 < N < 64. */
#define u64rol(x, n) u64or (u64shl (x, n), u64shr (x, 64 - n))
@ -178,4 +183,9 @@ u64shr (u64 x, int n)
#endif
#ifdef __cplusplus
}
#endif
_GL_INLINE_HEADER_END

View File

@ -159,8 +159,9 @@
#endif
/* MSVC defines off_t in <sys/types.h>.
May also define off_t to a 64-bit type on native Windows. */
/* Get off_t, ssize_t, mode_t. */
May also define off_t to a 64-bit type on native Windows.
Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */
/* Get off_t, off64_t, ssize_t, mode_t. */
#include <sys/types.h>
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */

View File

@ -23,11 +23,22 @@
#endif
#include <time.h>
#ifdef __cplusplus
extern "C" {
#endif
int fdutimens (int, char const *, struct timespec const [2]);
int utimens (char const *, struct timespec const [2]);
int lutimens (char const *, struct timespec const [2]);
#ifdef __cplusplus
}
#endif
#if GNULIB_FDUTIMENSAT
# include <fcntl.h>
# include <sys/stat.h>
@ -36,6 +47,10 @@ _GL_INLINE_HEADER_BEGIN
# define _GL_UTIMENS_INLINE _GL_INLINE
#endif
#ifdef __cplusplus
extern "C" {
#endif
int fdutimensat (int fd, int dir, char const *name, struct timespec const [2],
int atflag);
@ -46,6 +61,10 @@ lutimensat (int dir, char const *file, struct timespec const times[2])
return utimensat (dir, file, times, AT_SYMLINK_NOFOLLOW);
}
#ifdef __cplusplus
}
#endif
_GL_INLINE_HEADER_END
#endif

View File

@ -4970,12 +4970,17 @@ if only the first line of the docstring is shown."))
;; can cause problems when read back, so print them
;; readably. (Bug#52554)
(print-escape-control-characters t))
(atomic-change-group
(when (eobp)
(insert ";;; -*- lexical-binding: t -*-\n"))
(custom-save-variables)
(custom-save-faces)
(custom-save-icons)))
;; Insert lexical cookie, but only if the buffer is empty.
(save-restriction
(widen)
(atomic-change-group
(when (eq (point-min) (point-max))
(save-excursion
(goto-char (point-min))
(insert ";;; -*- lexical-binding: t -*-\n")))
(custom-save-variables)
(custom-save-faces)
(custom-save-icons))))
(let ((file-precious-flag t))
(save-buffer))
(if old-buffer

View File

@ -293,7 +293,6 @@ instead."
(eshell-do-ls (nconc switches (list target)))))))))
(declare-function eshell-extended-glob "em-glob" (glob))
(declare-function dired-read-dir-and-switches "dired" (str))
(declare-function dired-goto-next-file "dired" ())

View File

@ -101,20 +101,18 @@
;;; Code:
(require 'esh-util)
(require 'eldoc)
(require 'esh-arg)
(require 'esh-proc)
(require 'esh-module)
(require 'esh-io)
(require 'esh-ext)
(require 'eldoc)
(require 'generator)
(require 'pcomplete)
(eval-when-compile
(require 'cl-lib)
(require 'pcomplete))
(declare-function pcomplete--here "pcomplete"
(&optional form stub paring form-only))
(require 'cl-lib))
(defgroup eshell-cmd nil
"Executing an Eshell command is as simple as typing it in and \

View File

@ -31,12 +31,12 @@
;;; Code:
(require 'esh-util)
(eval-when-compile (require 'cl-lib))
(require 'esh-io)
(require 'esh-arg)
(require 'esh-opt)
(require 'esh-proc)
(require 'esh-util)
(defgroup eshell-ext nil
"External commands are invoked when operating system executables are
@ -90,10 +90,6 @@ but Eshell will be able to understand
(setq list (cdr list)))
file)))
;; This file provides itself then eval-when-compile loads files that require it.
;; This causes spurious "might not be defined at runtime" warnings.
(declare-function eshell-search-path "esh-ext" (name))
(defcustom eshell-windows-shell-file
(if (eshell-under-windows-p)
(if (string-match "\\(cmdproxy\\|sh\\)\\.\\(com\\|exe\\)"
@ -244,8 +240,6 @@ An external command simply means external to Emacs."
(cl-assert interp)
(if (functionp (car interp))
(apply (car interp) (append (cdr interp) args))
(require 'esh-proc)
(declare-function eshell-gather-process-output "esh-proc" (command args))
(eshell-gather-process-output
(car interp) (append (cdr interp) args)))))

View File

@ -694,9 +694,6 @@ newline."
(defun eshell-send-eof-to-process ()
"Send EOF to the currently-running \"head\" process."
(interactive)
(require 'esh-mode)
(declare-function eshell-send-input "esh-mode"
(&optional use-region queue-p no-newline))
(eshell-send-input nil nil t)
(when (eshell-head-process)
(process-send-eof (eshell-head-process))))

View File

@ -27,6 +27,8 @@
(require 'esh-io)
(require 'esh-util)
(require 'pcomplete)
(defgroup eshell-proc nil
"When Eshell invokes external commands, it always does so
asynchronously, so that Emacs isn't tied up waiting for the process to

View File

@ -262,8 +262,7 @@ If DONT-POP is nil, display the buffer after setting it up."
(setq ga
(message-fetch-field gnus-draft-meta-information-header)))
(insert mail-header-separator)
(forward-line 1)
(message-set-auto-save-file-name))))
(forward-line 1))))
(gnus-backlog-remove-article group narticle)
(when (and ga
(ignore-errors (setq ga (car (read-from-string ga)))))
@ -290,30 +289,25 @@ If DONT-POP is nil, display the buffer after setting it up."
(defun gnus-draft-check-draft-articles (articles)
"Check whether the draft articles ARTICLES are under edit."
(when (equal gnus-newsgroup-name "nndraft:drafts")
(let ((buffers (buffer-list))
file buffs buff)
(save-current-buffer
(while (and articles
(not buff))
(setq file (nndraft-article-filename (pop articles))
buffs buffers)
(while buffs
(set-buffer (setq buff (pop buffs)))
(if (and buffer-file-name
(equal (file-remote-p file)
(file-remote-p buffer-file-name))
(string-equal (file-truename buffer-file-name)
(file-truename file))
(buffer-modified-p))
(setq buffs nil)
(setq buff nil)))))
(when buff
(let* ((window (get-buffer-window buff t))
(frame (and window (window-frame window))))
(if frame
(select-frame-set-input-focus frame)
(pop-to-buffer buff t)))
(error "The draft %s is under edit" file)))))
(let* ((files (mapcar #'nndraft-article-filename articles))
(buffs (delq nil (mapcar (lambda (f)
(find-buffer-visiting
f (lambda (b) (buffer-modified-p b))))
files))))
(when buffs
(if (= 1 (length buffs))
;; We might have arrived here via `gnus-draft-edit-message';
;; either way show the user the draft with unsaved changes.
(let* ((window (get-buffer-window (car buffs) t))
(frame (and window (window-frame window))))
(if frame
(select-frame-set-input-focus frame)
(pop-to-buffer (car buffs) t))
(error "Draft is already under edit"))
;; Otherwise we got here from `gnus-draft-send-message', and
;; the main thing is to interrupt the sending.
(display-buffer (list-buffers-noselect t buffs))
(error "Some drafts have unsaved changes: %S" buffs))))))
(defun gnus-draft-clear-marks ()
(setq gnus-newsgroup-reads nil

View File

@ -32,8 +32,6 @@
(require 'image-dired-util)
(declare-function image-dired--with-marked "image-dired")
(defvar image-dired-dir)
(defvar image-dired-thumbnail-storage)
(defvar image-dired-tags-db-file)
@ -156,18 +154,6 @@ With prefix ARG, tag the file at point."
(cons x tag))
files))))
(defun image-dired-tag-thumbnail ()
"Tag current or marked thumbnails."
(interactive nil image-dired-thumbnail-mode)
(let ((tag (completing-read
"Tags to add (separate tags with a semicolon): "
image-dired-tag-history nil nil nil 'image-dired-tag-history)))
(image-dired--with-marked
(image-dired-write-tags
(list (cons (image-dired-original-file-name) tag)))
(image-dired-update-property
'tags (image-dired-list-tags (image-dired-original-file-name))))))
;;;###autoload
(defun image-dired-delete-tag (arg)
"Remove tag for selected file(s).
@ -181,16 +167,6 @@ With prefix argument ARG, remove tag from file at point."
(setq files (dired-get-marked-files)))
(image-dired-remove-tag files tag)))
(defun image-dired-tag-thumbnail-remove ()
"Remove tag from current or marked thumbnails."
(interactive nil image-dired-thumbnail-mode)
(let ((tag (completing-read "Tag to remove: " image-dired-tag-history
nil nil nil 'image-dired-tag-history)))
(image-dired--with-marked
(image-dired-remove-tag (image-dired-original-file-name) tag)
(image-dired-update-property
'tags (image-dired-list-tags (image-dired-original-file-name))))))
(defun image-dired-write-comments (file-comments)
"Write file comments specified by FILE-COMMENTS comments to database.
FILE-COMMENTS is an alist on the following form:

View File

@ -1757,6 +1757,28 @@ Dired."
(cons (list tag file) (cdr image-dired-tag-file-list))))
(setq image-dired-tag-file-list (list (list tag file))))))
(defun image-dired-tag-thumbnail-remove ()
"Remove tag from current or marked thumbnails."
(interactive nil image-dired-thumbnail-mode)
(let ((tag (completing-read "Tag to remove: " image-dired-tag-history
nil nil nil 'image-dired-tag-history)))
(image-dired--with-marked
(image-dired-remove-tag (image-dired-original-file-name) tag)
(image-dired-update-property
'tags (image-dired-list-tags (image-dired-original-file-name))))))
(defun image-dired-tag-thumbnail ()
"Tag current or marked thumbnails."
(interactive nil image-dired-thumbnail-mode)
(let ((tag (completing-read
"Tags to add (separate tags with a semicolon): "
image-dired-tag-history nil nil nil 'image-dired-tag-history)))
(image-dired--with-marked
(image-dired-write-tags
(list (cons (image-dired-original-file-name) tag)))
(image-dired-update-property
'tags (image-dired-list-tags (image-dired-original-file-name))))))
(defvar image-dired-slideshow-count 0
"Keeping track on number of images in slideshow.")
(make-obsolete-variable 'image-dired-slideshow-count "no longer used." "29.1")

View File

@ -740,10 +740,12 @@ Return one of the entries in index-alist or nil."
(imenu--in-alist name prepared-index-alist)
;; Default to `name' if it's in the alist.
name))))
(let ((minibuffer-setup-hook minibuffer-setup-hook))
;; Display the completion buffer.
(if (not imenu-eager-completion-buffer)
(add-hook 'minibuffer-setup-hook 'minibuffer-completion-help))
;; Display the completion buffer.
(minibuffer-with-setup-hook
(lambda ()
(setq-local completion-extra-properties '(:category imenu))
(unless imenu-eager-completion-buffer
(minibuffer-completion-help)))
(setq name (completing-read prompt
prepared-index-alist
nil t nil 'imenu--history-list name)))
@ -784,7 +786,7 @@ Returns t for rescan and otherwise an element or subelement of INDEX-ALIST."
(concat prefix imenu-level-separator name)
name))))
(cond
((or (markerp pos) (numberp pos))
((not (imenu--subalist-p item))
(list (cons new-prefix pos)))
(t
(imenu--flatten-index-alist pos concat-names new-prefix)))))

View File

@ -437,7 +437,9 @@ headers of the messages."
(= (length rmail-summary-message-parents-vector)
(1+ rmail-total-messages)))
(rmail-summary-fill-message-parents-and-descs-vectors)))
(let ((enc-msgs (make-bool-vector (1+ rmail-total-messages) nil)))
(let ((enc-msgs
(with-current-buffer rmail-buffer
(make-bool-vector (1+ rmail-total-messages) nil))))
(rmail-summary--walk-thread-message-recursively msgnum enc-msgs)
(rmail-new-summary (format "thread containing message %d" msgnum)
(list 'rmail-summary-by-thread msgnum)

View File

@ -105,14 +105,25 @@ This port is probably always 2628 so there should be no need to modify it."
"*"
"The dictionary which is used for searching definitions and matching.
* and ! have a special meaning, * search all dictionaries, ! search until
one dictionary yields matches."
one dictionary yields matches.
Otherwise, the value should be a string, the name of the dictionary to use.
Dictionary names are generally specific to the servers, and are obtained
via `dictionary-dictionaries'."
:group 'dictionary
:type 'string
:version "28.1")
(defcustom dictionary-default-strategy
"."
"The default strategy for listing matching words."
"The default strategy for listing matching words.
The value should be a string. The special value \".\" means
the default search strategy for `dictionary-server' in use.
Other values are specific to servers and dictionaries.
In a `dictionary-mode' buffer, you can use
\\[dictionary-select-strategy] to change the buffer-local value;
it will show the available strategies from which you can choose.
To change the value for other buffers, customize this option
using \\[customize-option]."
:group 'dictionary
:type 'string
:version "28.1")
@ -784,10 +795,10 @@ FUNCTION is the callback which is called for each search result."
(defun dictionary-do-search (word dictionary function &optional nomatching)
"Search for WORD in DICTIONARY and call FUNCTION for each result.
Optional argument NOMATCHING controls whether to suppress the display
of matching words."
(insert (format-message "Searching for `%s' in `%s'\n" word dictionary))
Optional argument NOMATCHING, if non-nil, means suppress the display
of the \"Searching\" report and of the matching words."
(unless nomatching
(insert (format-message "Searching for `%s' in `%s'\n" word dictionary)))
(dictionary-send-command (concat "define "
(dictionary-encode-charset dictionary "")
" \""
@ -1356,11 +1367,22 @@ prompt for DICTIONARY."
(nconc minor-mode-alist '((dictionary-tooltip-mode " Dict")))
(defcustom dictionary-tooltip-dictionary
nil
"This dictionary to lookup words for tooltips."
t
"The dictionary to lookup words for `dictionary-tooltip-mode'.
If this is nil, `dictionary-tooltip-mode' is effectively disabled: no tooltips
will be shown.
If the value is t, `dictionary-tooltip-mode' will use the same dictionary as
specified by `dictionary-default-dictionary'.
Otherwise, the value should be a string, the name of a dictionary to use, and
can use the same special values * and ! as for `dictionary-default-dictionary',
with the same meanings.
Dictionary names are generally specific to the servers, and are obtained
via `dictionary-dictionaries'."
:group 'dictionary
:type '(choice (const :tag "None" nil) string)
:version "28.1")
:type '(choice (const :tag "None (disables Dictionary tooltips)" nil)
(const :tag "Same as `dictionary-default-dictionary'" t)
string)
:version "30.1")
(defun dictionary-definition (word &optional dictionary)
(unwind-protect
@ -1377,14 +1399,20 @@ prompt for DICTIONARY."
nil)
(defun dictionary-word-at-mouse-event (event)
(with-current-buffer (tooltip-event-buffer event)
(let ((point (posn-point (event-end event))))
(if (use-region-p)
(when (and (<= (region-beginning) point) (<= point (region-end)))
(buffer-substring (region-beginning) (region-end)))
(save-excursion
(goto-char point)
(current-word))))))
(let ((buf (tooltip-event-buffer event)))
(when (bufferp buf)
(with-current-buffer buf
(let ((point (posn-point (event-end event))))
;; posn-point can return something other than buffer position when
;; the mouse pointer is over the menu bar or tool bar or tab-bar.
(when (number-or-marker-p point)
(if (use-region-p)
(when (and (<= (region-beginning) point)
(<= point (region-end)))
(buffer-substring (region-beginning) (region-end)))
(save-excursion
(goto-char point)
(current-word)))))))))
(defvar dictionary-tooltip-mouse-event nil
"Event that triggered the tooltip mode.")
@ -1393,15 +1421,24 @@ prompt for DICTIONARY."
"Search the current word in the `dictionary-tooltip-dictionary'."
(interactive "e")
(if (and dictionary-tooltip-mode dictionary-tooltip-dictionary)
(let ((word (dictionary-word-at-mouse-event dictionary-tooltip-mouse-event)))
(if word
(let ((definition
(dictionary-definition word dictionary-tooltip-dictionary)))
(if definition
(tooltip-show (dictionary-decode-charset definition
dictionary-tooltip-dictionary)))))
t)
nil))
;; This function runs from the tooltip timer. We don't want to
;; signal errors from the timer due to "Unknown server answers",
;; we prefer not to show anything in that case. FIXME: Perhaps
;; use with-demoted-errors, to show the unknonw answers in the
;; echo-area?
(ignore-errors
(let* ((word (dictionary-word-at-mouse-event
dictionary-tooltip-mouse-event))
(dict (if (eq dictionary-tooltip-dictionary t)
dictionary-default-dictionary
dictionary-tooltip-dictionary)))
(if word
(let ((definition (dictionary-definition word dict)))
(if definition
(tooltip-show (dictionary-decode-charset
definition dict)))))
t)
nil)))
(defun dictionary-tooltip-track-mouse (event)
"Called whenever a dictionary tooltip display is about to be triggered."
@ -1443,6 +1480,11 @@ active it will overwrite that mode for the current buffer."
(if on
(local-set-key [mouse-movement] 'dictionary-tooltip-track-mouse)
(local-set-key [mouse-movement] 'ignore))
;; Unconditionally ignore mouse-movement events on the tool bar and
;; tab-bar, since these are unrelated to the current buffer.
;; FIXME: This disables help-echo for tab-bar and tool-bar buttons.
(local-set-key [tool-bar mouse-movement] 'ignore)
(local-set-key [tab-bar mouse-movement] 'ignore)
on))
;;;###autoload
@ -1536,11 +1578,18 @@ Further arguments are currently ignored."
nil t nil 'dictionary-word-history default t)))
(defun dictionary-dictionaries ()
"Return the list of dictionaries the server supports."
"Return the list of dictionaries the server supports.
The elements of the list have the form (NAME . DESCRIPTION),
where NAME is the string that identifies the dictionary for
the server, and DESCRIPTION is its more detailed description,
which usually includes the languages it supports."
(dictionary-send-command "show db")
(when (and (= (read (dictionary-read-reply)) 110))
(with-temp-buffer
(insert (dictionary-read-answer))
;; We query the server using 'raw-text', so decode now to present
;; human-readable names to the user.
(decode-coding-region (point-min) (point-max) 'utf-8)
(goto-char (point-min))
(let ((result '(("!" . "First matching dictionary")
("*" . "All dictionaries"))))

View File

@ -70,12 +70,10 @@ SYNTAX can be one of the symbols `default' (default),
;;;###tramp-autoload
(defun tramp-list-remote-buffers ()
"Return a list of all buffers with remote `default-directory'."
(delq
nil
(mapcar
(lambda (x)
(when (tramp-tramp-file-p (tramp-get-default-directory x)) x))
(buffer-list))))
(tramp-compat-seq-keep
(lambda (x)
(when (tramp-tramp-file-p (tramp-get-default-directory x)) x))
(buffer-list)))
;;; Cleanup
@ -567,6 +565,7 @@ For details, see `tramp-rename-files'."
:type '(choice (const "su")
(const "sudo")
(const "doas")
(const "run0")
(const "ksu")))
(defun tramp-file-name-with-sudo (filename)

View File

@ -501,6 +501,24 @@ The string is used in `tramp-methods'.")
(tramp-set-completion-function "nc" tramp-completion-function-alist-telnet))
;;;###tramp-autoload
(defun tramp-enable-run0-method ()
"Enable \"run0\" method."
(add-to-list 'tramp-methods
`("run0"
(tramp-login-program "systemd-run")
(tramp-login-args (("--uid" "%u") ("-t") ("%l")))
(tramp-remote-shell ,tramp-default-remote-shell)
(tramp-remote-shell-args ("-c"))
(tramp-connection-timeout 10)
(tramp-session-timeout 300)
(tramp-password-previous-hop t)))
(add-to-list 'tramp-default-user-alist
`(,(rx bos "run0" eos) nil ,tramp-root-id-string))
(tramp-set-completion-function "run0" tramp-completion-function-alist-su))
;;;###tramp-autoload
(defun tramp-enable-ksu-method ()
"Enable \"ksu\" method."
@ -2902,7 +2920,7 @@ the result will be a local, non-Tramp, file name."
;; use a user name from the config file.
(when (and (tramp-string-empty-or-nil-p uname)
(string-match-p
(rx bos (| "su" "sudo" "doas" "ksu") eos) method))
(rx bos (| "su" "sudo" "doas" "run0" "ksu") eos) method))
(setq uname user))
(when (setq hname (tramp-get-home-directory v uname))
(setq localname (concat hname fname)))))
@ -5377,12 +5395,11 @@ connection if a previous connection has died for some reason."
:host l-host :port l-port)))
;; Set session timeout.
(when (tramp-get-method-parameter
hop 'tramp-session-timeout)
(when-let ((timeout
(tramp-get-method-parameter
hop 'tramp-session-timeout)))
(tramp-set-connection-property
p "session-timeout"
(tramp-get-method-parameter
hop 'tramp-session-timeout)))
p "session-timeout" timeout))
;; Replace `login-args' place holders.
(setq

View File

@ -1068,17 +1068,15 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
;; Filter entries.
(setq entries
(delq
nil
(if (or wildcard (string-empty-p base))
;; Check for matching entries.
(mapcar
(tramp-compat-seq-keep
(lambda (x)
(when (string-match-p (rx bol (literal base)) (nth 0 x))
x))
entries)
;; We just need the only and only entry FILENAME.
(list (assoc base entries)))))
(list (assoc base entries))))
;; Sort entries.
(setq entries

View File

@ -2978,17 +2978,15 @@ They are collected by `tramp-completion-dissect-file-name1'."
(regexp tramp-prefix-ipv6-regexp)
(group (? (regexp tramp-ipv6-regexp))) eol)
1 2 3 nil)))
(delq
nil
(mapcar
(lambda (structure) (tramp-completion-dissect-file-name1 structure name))
(list
tramp-completion-file-name-structure1
tramp-completion-file-name-structure2
tramp-completion-file-name-structure3
tramp-completion-file-name-structure4
tramp-completion-file-name-structure5
tramp-completion-file-name-structure6)))))
(tramp-compat-seq-keep
(lambda (structure) (tramp-completion-dissect-file-name1 structure name))
(list
tramp-completion-file-name-structure1
tramp-completion-file-name-structure2
tramp-completion-file-name-structure3
tramp-completion-file-name-structure4
tramp-completion-file-name-structure5
tramp-completion-file-name-structure6))))
(defun tramp-completion-dissect-file-name1 (structure name)
"Return a `tramp-file-name' structure for NAME matching STRUCTURE.
@ -4777,10 +4775,10 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.")
vec "Method `%s' is not supported for multi-hops"
(tramp-file-name-method item)))))
;; Some methods ("su", "sg", "sudo", "doas", "ksu") do not use the
;; host name in their command template. In this case, the remote
;; file name must use either a local host name (first hop), or a
;; host name matching the previous hop.
;; Some methods ("su", "sg", "sudo", "doas", "run0", "ksu") do not
;; use the host name in their command template. In this case, the
;; remote file name must use either a local host name (first hop),
;; or a host name matching the previous hop.
(let ((previous-host (or tramp-local-host-regexp "")))
(setq choices target-alist)
(while (setq item (pop choices))

View File

@ -502,7 +502,7 @@ Otherwise, redisplay will reset the window's vscroll."
(defun pixel-scroll-precision-scroll-down-page (delta)
"Scroll the current window down by DELTA pixels.
Note that this function doesn't work if DELTA is larger than or
equal to the height of the current window."
equal to the text height of the current window in pixels."
(let* ((desired-pos (posn-at-x-y 0 (+ delta
(window-tab-line-height)
(window-header-line-height))))

View File

@ -40,8 +40,10 @@
(declare-function treesit-induce-sparse-tree "treesit.c")
(declare-function treesit-node-child-by-field-name "treesit.c")
(declare-function treesit-node-child-count "treesit.c")
(declare-function treesit-node-eq "treesit.c")
(declare-function treesit-node-first-child-for-pos "treesit.c")
(declare-function treesit-node-parent "treesit.c")
(declare-function treesit-node-prev-sibling "treesit.c")
(declare-function treesit-node-start "treesit.c")
(declare-function treesit-node-end "treesit.c")
(declare-function treesit-node-type "treesit.c")

View File

@ -172,7 +172,7 @@ created in the future."
(defun toggle-scroll-bar (arg)
"Toggle whether or not the selected frame has vertical scroll bars.
With ARG, turn vertical scroll bars on if and only if ARG is positive.
With ARG, turn on vertical scroll bars if and only if ARG is positive.
The variable `scroll-bar-mode' controls which side the scroll bars are on
when they are turned on; if it is nil, they go on the left."
(interactive "P")
@ -188,7 +188,7 @@ when they are turned on; if it is nil, they go on the left."
(defun toggle-horizontal-scroll-bar (arg)
"Toggle whether or not the selected frame has horizontal scroll bars.
With ARG, turn vertical scroll bars on if and only if ARG is positive."
With ARG, turn on horizontal scroll bars if and only if ARG is positive."
(interactive "P")
(if (null arg)
(setq arg

View File

@ -5690,13 +5690,19 @@ The SEPARATOR regexp defaults to \"\\s-+\"."
(defun subst-char-in-string (fromchar tochar string &optional inplace)
"Replace FROMCHAR with TOCHAR in STRING each time it occurs.
Unless optional argument INPLACE is non-nil, return a new string."
(let ((i (length string))
(newstr (if inplace string (copy-sequence string))))
(while (> i 0)
(setq i (1- i))
(if (eq (aref newstr i) fromchar)
(aset newstr i tochar)))
newstr))
(if (and (not inplace)
(if (multibyte-string-p string)
(> (max fromchar tochar) 127)
(> tochar 255)))
;; Avoid quadratic behaviour from resizing replacement.
(string-replace (string fromchar) (string tochar) string)
(let ((i (length string))
(newstr (if inplace string (copy-sequence string))))
(while (> i 0)
(setq i (1- i))
(if (eq (aref newstr i) fromchar)
(aset newstr i tochar)))
newstr)))
(defun string-replace (from-string to-string in-string)
"Replace FROM-STRING with TO-STRING in IN-STRING each time it occurs."

View File

@ -4059,6 +4059,10 @@ You can bind this to the key C-c i in GNUS or mail by adding to
(if (re-search-forward "^Subject: *" end-of-headers t)
(progn
(goto-char (match-end 0))
;; Don't spell-check Subject if it comes from a
;; received message: "Re:" indicates this is a reply
;; to someone else's message, "[...]" indicates this
;; is a subject of a forwarded message.
(if (and (not (looking-at ".*\\<Re\\>"))
(not (looking-at "\\[")))
(progn

View File

@ -178,7 +178,7 @@ rest are not called.")
"Return the buffer over which event EVENT occurred.
This might return nil if the event did not occur over a buffer."
(let ((window (posn-window (event-end event))))
(and window (window-buffer window))))
(and (windowp window) (window-buffer window))))
;;; Timeout for tooltip display

View File

@ -1,4 +1,5 @@
# 00gnulib.m4 serial 9
# 00gnulib.m4
# serial 9
dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,9 +1,12 @@
# Test for __inline keyword
# __inline.m4
# serial 1
dnl Copyright 2017-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Test for __inline keyword
AC_DEFUN([gl___INLINE],
[
AC_CACHE_CHECK([whether the compiler supports the __inline keyword],

View File

@ -1,4 +1,5 @@
# absolute-header.m4 serial 18
# absolute-header.m4
# serial 18
dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,10 +1,11 @@
# acl.m4 - check for access control list (ACL) primitives
# acl.m4
# serial 30
dnl Copyright (C) 2002, 2004-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Copyright (C) 2002, 2004-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# Check for access control list (ACL) primitives
# Written by Paul Eggert and Jim Meyering.

View File

@ -1,4 +1,5 @@
# alloca.m4 serial 21
# alloca.m4
# serial 21
dnl Copyright (C) 2002-2004, 2006-2007, 2009-2024 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation

View File

@ -1,4 +1,5 @@
# assert-h.m4
# assert_h.m4
# serial 1
dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,10 +1,12 @@
dnl Check for __builtin_expect.
# builtin-expect.m4
# serial 1
dnl Copyright 2016-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Check for __builtin_expect.
dnl Written by Paul Eggert.
AC_DEFUN([gl___BUILTIN_EXPECT],

View File

@ -1,4 +1,5 @@
# byteswap.m4 serial 5
# byteswap.m4
# serial 5
dnl Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,10 +1,12 @@
# Check for bool that conforms to C2023.
# c-bool.m4
# serial 1
dnl Copyright 2022-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Check for bool that conforms to C2023.
AC_DEFUN([gl_C_BOOL],
[
AC_CACHE_CHECK([for bool, true, false], [gl_cv_c_bool],

View File

@ -1,4 +1,5 @@
# canonicalize.m4 serial 39
# canonicalize.m4
# serial 39
dnl Copyright (C) 2003-2007, 2009-2024 Free Software Foundation, Inc.

View File

@ -1,4 +1,5 @@
# clock_time.m4 serial 14
# clock_time.m4
# serial 14
dnl Copyright (C) 2002-2006, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
# codeset.m4 serial 5 (gettext-0.18.2)
# codeset.m4
# serial 5 (gettext-0.18.2)
dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2024 Free Software
dnl Foundation, Inc.
dnl This file is free software; the Free Software Foundation

View File

@ -1,4 +1,5 @@
# copy-file-range.m4 serial 5
# copy-file-range.m4
# serial 5
dnl Copyright 2019-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,15 +1,13 @@
# d-type.m4
# serial 12
dnl Copyright (C) 1997, 1999-2004, 2006, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Jim Meyering.
dnl
dnl Check whether struct dirent has a member named d_type.
dnl
# Copyright (C) 1997, 1999-2004, 2006, 2009-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE],
[AC_CACHE_CHECK([for d_type member in directory struct],

View File

@ -1,4 +1,5 @@
# dirent_h.m4 serial 22
# dirent_h.m4
# serial 22
dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,12 +1,12 @@
# dirfd.m4
# serial 30 -*- Autoconf -*-
dnl Copyright (C) 2001-2006, 2008-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Find out how to get the file descriptor associated with an open DIR*.
# Copyright (C) 2001-2006, 2008-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
dnl From Jim Meyering
AC_DEFUN([gl_FUNC_DIRFD],

View File

@ -1,4 +1,5 @@
# double-slash-root.m4 serial 4 -*- Autoconf -*-
# double-slash-root.m4
# serial 4 -*- Autoconf -*-
dnl Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
#serial 28
# dup2.m4
# serial 28
dnl Copyright (C) 2002, 2005, 2007, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
# eealloc.m4 serial 3
# eealloc.m4
# serial 3
dnl Copyright (C) 2003, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
# environ.m4 serial 8
# environ.m4
# serial 8
dnl Copyright (C) 2001-2004, 2006-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
# errno_h.m4 serial 14
# errno_h.m4
# serial 14
dnl Copyright (C) 2004, 2006, 2008-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
# euidaccess.m4 serial 17
# euidaccess.m4
# serial 17
dnl Copyright (C) 2002-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,10 +1,12 @@
# Check for GNU-style execinfo.h.
# execinfo.m4
# serial 1
dnl Copyright 2012-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Check for GNU-style execinfo.h.
AC_DEFUN([gl_EXECINFO_H],
[
AC_CHECK_HEADERS_ONCE([execinfo.h])

View File

@ -1,10 +1,11 @@
# serial 23 -*- Autoconf -*-
# Enable extensions on systems that normally disable them.
# extensions.m4
# serial 25 -*- Autoconf -*-
dnl Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# Enable extensions on systems that normally disable them.
dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that
dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+.
@ -229,4 +230,15 @@ AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
[Define to enable the declarations of ISO C 11 types and functions.])
;;
esac
dnl On OpenSolaris derivatives, the include files contains a couple of
dnl declarations that are only activated with an explicit
dnl -D__STDC_WANT_LIB_EXT1__.
AH_VERBATIM([USE_ISO_C_23_ANNEX_K_EXTENSIONS],
[/* Define to enable the declarations of ISO C 23 Annex K types and functions. */
#if !(defined __STDC_WANT_LIB_EXT1__ && __STDC_WANT_LIB_EXT1__)
#undef/**/__STDC_WANT_LIB_EXT1__
#define __STDC_WANT_LIB_EXT1__ 1
#endif
])
])

View File

@ -1,10 +1,12 @@
dnl 'extern inline' a la ISO C99.
# extern-inline.m4
# serial 1
dnl Copyright 2012-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl 'extern inline' a la ISO C99.
AC_DEFUN([gl_EXTERN_INLINE],
[
AC_CACHE_CHECK([whether ctype.h defines __header_inline],

View File

@ -1,11 +1,12 @@
# faccessat.m4
# serial 12
# See if we need to provide faccessat replacement.
dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# See if we need to provide faccessat replacement.
# Written by Eric Blake.
AC_DEFUN([gl_FUNC_FACCESSAT],

View File

@ -1,4 +1,5 @@
# fchmodat.m4 serial 8
# fchmodat.m4
# serial 8
dnl Copyright (C) 2004-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,4 +1,5 @@
# fcntl.m4 serial 11
# fcntl.m4
# serial 12
dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@ -82,7 +83,7 @@ AC_DEFUN([gl_FUNC_FCNTL],
esac
dnl Many systems lack F_DUPFD_CLOEXEC.
dnl NetBSD 9.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD.
dnl NetBSD 10.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD.
AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC],
[gl_cv_func_fcntl_f_dupfd_cloexec],
[AC_RUN_IFELSE(

View File

@ -1,10 +1,12 @@
# fcntl_h.m4
# serial 20
# Configure fcntl.h.
dnl Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Configure fcntl.h.
dnl Written by Paul Eggert.
AC_DEFUN_ONCE([gl_FCNTL_H],

View File

@ -1,11 +1,12 @@
# fdopendir.m4
# serial 15
# See if we need to provide fdopendir.
dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# See if we need to provide fdopendir.
# Written by Eric Blake.
AC_DEFUN([gl_FUNC_FDOPENDIR],

View File

@ -1,4 +1,5 @@
# filemode.m4 serial 9
# filemode.m4
# serial 9
dnl Copyright (C) 2002, 2005-2006, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,10 +1,11 @@
# flexmember.m4
# serial 5
# Check for flexible array member support.
dnl Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# Check for flexible array member support.
# Written by Paul Eggert.

View File

@ -1,9 +1,9 @@
# fpending.m4
# serial 23
# Copyright (C) 2000-2001, 2004-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
dnl Copyright (C) 2000-2001, 2004-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Jim Meyering
dnl Using code from emacs, based on suggestions from Paul Eggert

View File

@ -1,4 +1,5 @@
# fpieee.m4 serial 2 -*- coding: utf-8 -*-
# fpieee.m4
# serial 2 -*- coding: utf-8 -*-
dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,

View File

@ -1,8 +1,9 @@
# free.m4 serial 6
# Copyright (C) 2003-2005, 2009-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# free.m4
# serial 6
dnl Copyright (C) 2003-2005, 2009-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Written by Paul Eggert and Bruno Haible.

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