1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-05 11:45:45 +00:00

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

This commit is contained in:
Po Lu 2023-07-20 09:23:06 +08:00
commit 4d3442ebad
9 changed files with 185 additions and 60 deletions

View File

@ -1218,15 +1218,14 @@ you aren't familiar with @samp{use-package} or have no interest in
learning it. For our purposes, it's just a means of presenting
configuration details in a tidy, standardized format. If it helps,
just pretend it's some make-believe, pseudo configuration language.
Although the syntax below is easy enough to intuit and adapt to your
setup, you may wish to keep the following in mind (or @pxref{Top,,,
use-package,}):
And while the syntax below is easy enough to intuit and adapt to your
setup, you may wish to keep the following in mind:
@itemize @bullet
@item
Each @code{use-package} ``declaration'' focuses on a library
``feature'', which is just a symbol you'd normally @code{require} in
your config @pxref{Named Features,,, elisp,}).
your config.
@item
Emacs loads anything in a @code{:config} section @emph{after} loading
@ -1235,6 +1234,10 @@ whatever library @code{provide}s the declaration's feature.
@item
Everything in a @code{:custom} or @code{:custom-face} section is
basically something you'd find in your @code{custom-file}.
@item
For more info, @pxref{Named Features,,, elisp,}, or @pxref{Top,,,
use-package,}.
@end itemize
@noindent
@ -1300,12 +1303,12 @@ settings (@pxref{Sample configuration via Customize}).
(use-package erc-goodies
;; Turn on read indicators when joining channels.
:hook (erc-join . my-erc-enable-read-indicator-on-join))
:hook (erc-join . my-erc-enable-keep-place-indicator-on-join))
(defvar my-erc-read-indicator-channels '("#emacs")
"Channels in which to show a `keep-place-indicator'.")
(defun my-erc-enable-read-indicator-on-join ()
(defun my-erc-enable-keep-place-indicator-on-join ()
"Enable read indicators for certain queries or channels."
(when (member (erc-default-target) my-erc-read-indicator-channels)
(erc-keep-place-indicator-mode +1)))
@ -1313,14 +1316,16 @@ settings (@pxref{Sample configuration via Customize}).
;; Handy commands from the Emacs Wiki.
(defun erc-cmd-TRACK (&optional target)
"Start tracking TARGET or that of current buffer."
(setq erc-track-exclude (delete (or target (erc-default-target))
erc-track-exclude)))
(setq erc-track-exclude
(delete (or target (erc-default-target) (current-buffer))
erc-track-exclude)))
(defun erc-cmd-UNTRACK (&optional target)
"Stop tracking TARGET or that of current buffer."
(setq erc-track-exclude (cl-pushnew (or target (erc-default-target))
erc-track-exclude
:test #'equal)))
(setq erc-track-exclude
(cl-pushnew (or target (erc-default-target) (current-buffer))
erc-track-exclude
:test #'equal)))
@end lisp

View File

@ -15,13 +15,14 @@ GNU Emacs since Emacs version 22.1.
* Changes in ERC 5.6
** Module 'keep-place' has gained a more flamboyant cousin.
Remember your place in ERC buffers a bit more easily while retaining
the freedom to look around. Optionally sync the indicator to any
progress made when you haven't yet caught up to the live stream. See
options 'erc-keep-place-indicator-style' and friends, and try M-x
Remember your place in ERC buffers more easily while retaining the
freedom to look around, all with the help of a configurable, visible
indicator. Optionally sync the indicator to any progress made when
you haven't yet caught up to the live stream. See options
'erc-keep-place-indicator-style' and friends, and try M-x
keep-place-indicator-mode to see it in action.
** Module 'fill' now offers a style based on 'visual-line-mode'.
** Module 'fill' offers a style based on 'visual-line-mode'.
This fill style mimics the "hanging indent" look of 'erc-fill-static'
and provides some movement and editing commands to optionally tame the
less familiar aspects of 'visual-line' behavior. An interactive
@ -29,7 +30,7 @@ helper called 'erc-fill-wrap-nudge' allows for dynamic "refilling" of
buffers on the fly. Set 'erc-fill-function' to 'erc-fill-wrap' to get
started.
** A new module for nickname highlighting has joined ERC.
** A module for nickname highlighting has joined ERC.
Automatic nickname coloring has come to ERC core. Users familiar with
'erc-hl-nicks', from which this module directly descends, will already
be familiar with its suite of handy options. By default, each
@ -140,7 +141,7 @@ This is especially handy when using the option 'erc-fill-wrap-merge'
to omit repeated speaker tags, which can make message boundaries less
detectable by tired eyes.
** Some keybindings are now set by modules rather than their libraries.
** Modules rather than their libraries set major-mode keybindings.
To put it another way, simply loading a built-in module's library no
longer modifies 'erc-mode-map'. Instead, modifications occur during
module setup. This should not impact most user configs since ERC
@ -149,7 +150,7 @@ previously created. Note that while all affected bindings still
reside in 'erc-mode-map', future built-in modules will use their own
minor-mode maps, and new third-party modules should do the same.
** The option 'erc-timestamp-format-right' has been deprecated.
** Option 'erc-timestamp-format-right' deprecated.
Having to account for this option prevented other ERC modules from
easily determining what right-hand stamps would look like before
insertion, which is knowledge needed for certain UI decisions. The
@ -270,7 +271,7 @@ encouraged to keep a module's name aligned with its group's as well as
the provided feature of its containing library, if only for the usual
reasons of namespace hygiene and discoverability.
*** ERC now supports arbitrary CHANTYPES.
*** ERC supports arbitrary CHANTYPES.
Specifically, channels can be prefixed with any predesignated
character, mainly to afford more flexibility to specialty services,
like bridges to other protocols.
@ -281,7 +282,7 @@ specify a subcommand to actually carry out anything of consequence.
Built-in modules can now provide more detailed help for a particular
subcommand by telling ERC to defer to a specialized handler.
*** Longtime quasi modules have been made proper.
*** Longtime quasi modules made proper.
The 'fill' module is now defined by 'define-erc-module'. The same
goes for ERC's imenu integration, which has 'imenu' now appearing in
the default value of 'erc-modules'.
@ -299,7 +300,7 @@ third-party code, the key takeaway is that more 'font-lock-face'
properties encountered in the wild may be combinations of faces rather
than lone ones.
*** Prompt input is split before 'erc-pre-send-functions' has a say.
*** Prompt input split before 'erc-pre-send-functions' gets a say.
Hook members are now treated to input whose lines have already been
adjusted to fall within the allowed length limit. For convenience,
third-party code can request that the final input be "re-filled" prior

View File

@ -1301,33 +1301,45 @@ clashes."
(make-temp-file (comp-c-func-name function-name "freefn-")
nil ".eln")))
(let* ((f (symbol-function function-name))
(byte-code (byte-compile function-name))
(c-name (comp-c-func-name function-name "F"))
(func (make-comp-func-l :name function-name
:c-name c-name
:doc (documentation f t)
:int-spec (interactive-form f)
:command-modes (command-modes f)
:speed (comp-spill-speed function-name)
:pure (comp-spill-decl-spec function-name
'pure))))
(func
(if (comp-lex-byte-func-p byte-code)
(make-comp-func-l :name function-name
:c-name c-name
:doc (documentation f t)
:int-spec (interactive-form f)
:command-modes (command-modes f)
:speed (comp-spill-speed function-name)
:pure (comp-spill-decl-spec function-name
'pure))
(make-comp-func-d :name function-name
:c-name c-name
:doc (documentation f t)
:int-spec (interactive-form f)
:command-modes (command-modes f)
:speed (comp-spill-speed function-name)
:pure (comp-spill-decl-spec function-name
'pure)))))
(when (byte-code-function-p f)
(signal 'native-compiler-error
'("can't native compile an already byte-compiled function")))
(setf (comp-func-byte-func func)
(byte-compile (comp-func-name func)))
(setf (comp-func-byte-func func) byte-code)
(let ((lap (byte-to-native-lambda-lap
(gethash (aref (comp-func-byte-func func) 1)
byte-to-native-lambdas-h))))
(cl-assert lap)
(comp-log lap 2 t)
(let ((arg-list (aref (comp-func-byte-func func) 0)))
(setf (comp-func-l-args func)
(comp-decrypt-arg-list arg-list function-name)
(comp-func-lap func)
lap
(comp-func-frame-size func)
(comp-byte-frame-size (comp-func-byte-func func))))
(setf (comp-ctxt-top-level-forms comp-ctxt)
(if (comp-func-l-p func)
(let ((arg-list (aref (comp-func-byte-func func) 0)))
(setf (comp-func-l-args func)
(comp-decrypt-arg-list arg-list function-name)))
(setf (comp-func-d-lambda-list func) (cadr f)))
(setf (comp-func-lap func)
lap
(comp-func-frame-size func)
(comp-byte-frame-size (comp-func-byte-func func))
(comp-ctxt-top-level-forms comp-ctxt)
(list (make-byte-to-native-func-def :name function-name
:c-name c-name)))
(comp-add-func-to-ctxt func))))

View File

@ -480,6 +480,12 @@ Abandon search after examining LIMIT faces."
"Uniquely colorize nicknames in target buffers."
((if erc--target
(progn
(erc-with-server-buffer
(unless erc-nicks-mode
(erc--warn-once-before-connect 'erc-nicks-mode
"Module `nicks' must be enabled or disabled session-wide."
" Toggling it in individual target buffers is unsupported.")
(erc-nicks-mode +1))) ; but do it anyway
(setq erc-nicks--downcased-skip-nicks
(mapcar #'erc-downcase erc-nicks-skip-nicks))
(add-function :filter-return (local 'erc-button--modify-nick-function)

View File

@ -6350,7 +6350,9 @@ This option mainly prevents text accidentally entered into Emacs
from being sent to the server. Offending sources include
terminal multiplexers, desktop-automation scripts, and anything
capable of rapidly submitting successive lines of prompt input.
For example, entering \"one\\ntwo\\nthree\\n\" will send \"one\"
For example, if you could somehow manage to type \"one \\`RET'
two \\`RET' three \\`RET'\" at the prompt in less than
`erc-accidental-paste-threshold-seconds', ERC would send \"one\"
to the server, leave \"two\" at the prompt, and insert \"three\"
into an \"overflow\" buffer. See `erc-inhibit-multiline-input'
and `erc-warn-about-blank-lines' for suppression involving input

View File

@ -2644,7 +2644,7 @@ internal_delete_file (Lisp_Object filename)
#endif
/* Return -1 if FILE is a case-insensitive file name, 0 if not,
and a positive errno value if the result cannot be determined. */
and 1 if the result cannot be determined. */
static int
file_name_case_insensitive_err (Lisp_Object file)
@ -2678,7 +2678,7 @@ file_name_case_insensitive_err (Lisp_Object file)
return - (res == 0);
# endif
if (errno != EINVAL)
return errno;
return 1;
#endif
#if defined CYGWIN || defined DOS_NT

View File

@ -5497,12 +5497,24 @@ xi_populate_device_from_info (struct x_display_info *dpyinfo,
no input.
The device attachment is a device ID whose meaning varies
depending on the device use. If the device is a master device,
then the attachment is the device ID of the other device in its
seat (the master keyboard for master pointer devices, and vice
versa). Otherwise, it is the ID of the master device the slave
depending on the device's use. If a device is a master device,
then its attachment is the device ID of the other device in its
seat (the master keyboard for master pointer devices and vice
versa.) Otherwise, it is the ID of the master device the slave
device is attached to. For slave devices not attached to any
seat, its value is undefined. */
seat, its value is undefined.
Emacs receives ordinary pointer and keyboard events from the
master devices associated with each seat, discarding events from
slave devices. However, multiplexing events from touch devices
onto a master device poses problems: if both dependent and direct
touch devices are attached to the same master pointer device, the
coordinate space of touch events sent from that seat becomes
ambiguous. In addition, the X server does not send TouchEnd
events to cancel ongoing touch sequences if the slave device that
is their source is detached. As a result of these ambiguities,
touch events are processed from and recorded onto their slave
devices instead. */
xi_device->device_id = device->deviceid;
xi_device->grab = 0;
@ -5516,7 +5528,7 @@ xi_populate_device_from_info (struct x_display_info *dpyinfo,
#ifdef HAVE_XINPUT2_2
xi_device->touchpoints = NULL;
xi_device->direct_p = false;
#endif
#endif /* HAVE_XINPUT2_1 */
#ifdef HAVE_XINPUT2_1
if (!dpyinfo->xi2_version)
@ -5582,9 +5594,34 @@ xi_populate_device_from_info (struct x_display_info *dpyinfo,
case XITouchClass:
{
touch_info = (XITouchClassInfo *) device->classes[c];
xi_device->direct_p = touch_info->mode == XIDirectTouch;
/* touch_info->mode indicates the coordinate space that
this device reports in its touch events.
DirectTouch means that the device uses a coordinate
space that corresponds to locations on the screen. It
is set by touch screen devices which are overlaid
over the raster itself.
The other value (DependentTouch) means that the device
uses a separate abstract coordinate space corresponding
to its own surface. Emacs ignores events from these
devices because it does not support recognizing touch
gestures from surfaces other than the screen.
Master devices may report multiple touch classes for
attached slave devices, leaving the nature of touch
events they send ambiguous. The problem of
discriminating between these events is bypassed
entirely through only processing touch events from the
slave devices where they originate. */
if (touch_info->mode == XIDirectTouch)
xi_device->direct_p = true;
else
xi_device->direct_p = false;
}
#endif
#endif /* HAVE_XINPUT2_2 */
default:
break;
}
@ -5611,7 +5648,7 @@ xi_populate_device_from_info (struct x_display_info *dpyinfo,
}
SAFE_FREE ();
#endif
#endif /* HAVE_XINPUT2_1 */
}
/* Populate our client-side record of all devices, which includes
@ -13443,7 +13480,7 @@ xi_handle_new_classes (struct x_display_info *dpyinfo, struct xi_device_t *devic
device->scroll_valuator_count = 0;
#ifdef HAVE_XINPUT2_2
device->direct_p = false;
#endif
#endif /* HAVE_XINPUT2_2 */
for (i = 0; i < num_classes; ++i)
{
@ -13461,10 +13498,34 @@ xi_handle_new_classes (struct x_display_info *dpyinfo, struct xi_device_t *devic
case XITouchClass:
touch = (XITouchClassInfo *) classes[i];
/* touch_info->mode indicates the coordinate space that this
device reports in its touch events.
DirectTouch means that the device uses a coordinate space
that corresponds to locations on the screen. It is set
by touch screen devices which are overlaid over the
raster itself.
The other value (DependentTouch) means that the device
uses a separate abstract coordinate space corresponding
to its own surface. Emacs ignores events from these
devices because it does not support recognizing touch
gestures from surfaces other than the screen.
Master devices may report multiple touch classes for
attached slave devices, leaving the nature of touch
events they send ambiguous. The problem of
discriminating between these events is bypassed entirely
through only processing touch events from the slave
devices where they originate. */
if (touch->mode == XIDirectTouch)
device->direct_p = true;
else
device->direct_p = false;
break;
#endif
#endif /* HAVE_XINPUT2_2 */
}
}
@ -13502,7 +13563,7 @@ xi_handle_new_classes (struct x_display_info *dpyinfo, struct xi_device_t *devic
}
}
#endif
#endif /* HAVE_XINPUT2_1 */
/* Handle EVENT, a DeviceChanged event. Look up the device that
changed, and update its information with the data in EVENT. */
@ -32250,10 +32311,12 @@ reported as iconified. */);
DEFVAR_BOOL ("x-input-grab-touch-events", x_input_grab_touch_events,
doc: /* Non-nil means to actively grab touch events.
This means touch sequences that started on an Emacs frame will
reliably continue to receive updates even if the finger moves off the
frame, but may cause crashes with some window managers and/or external
programs. */);
This means touch sequences that are obtained through a passive grab on
an Emacs frame (or a parent window of such a frame) will reliably
continue to receive updates, but may cause crashes with some window
managers and/or external programs. Changing this option is only
useful when other programs are making their own X requests pertaining
to the window hierarchy of an Emacs frame. */);
x_input_grab_touch_events = true;
DEFVAR_BOOL ("x-dnd-fix-motif-leave", x_dnd_fix_motif_leave,

View File

@ -0,0 +1,31 @@
;;; comp-test-funcs-dyn2.el -*- lexical-binding: nil; no-byte-compile: t; -*-
;; Copyright (C) 2023 Free Software Foundation, Inc.
;; Author: Alan Mackenzie <acm@muc.de>
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; Test the compilation of a function under dynamic binding.
;;; Code:
(defun comp-tests-result-lambda ()
(lambda (bar) (car bar)))
(provide 'comp-test-funcs-dyn2)
;;; comp-test-funcs-dyn2.el ends here.

View File

@ -33,7 +33,8 @@
(eval-and-compile
(defconst comp-test-src (ert-resource-file "comp-test-funcs.el"))
(defconst comp-test-dyn-src (ert-resource-file "comp-test-funcs-dyn.el")))
(defconst comp-test-dyn-src (ert-resource-file "comp-test-funcs-dyn.el"))
(defconst comp-test-dyn-src2 (ert-resource-file "comp-test-funcs-dyn2.el")))
(when (native-comp-available-p)
(message "Compiling tests...")
@ -44,6 +45,7 @@
;; names used in this file.
(require 'comp-test-funcs comp-test-src)
(require 'comp-test-dyn-funcs comp-test-dyn-src) ;Non-standard feature name!
(require 'comp-test-funcs-dyn2 comp-test-dyn-src2)
(defmacro comp-deftest (name args &rest docstring-and-body)
"Define a test for the native compiler tagging it as :nativecomp."
@ -1528,4 +1530,7 @@ folded."
(equal (comp-mvar-typeset mvar)
comp-tests-cond-rw-expected-type))))))))
(ert-deftest comp-tests-result-lambda ()
(native-compile 'comp-tests-result-lambda)
(should (eq (funcall (comp-tests-result-lambda) '(a . b)) 'a)))
;;; comp-tests.el ends here