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:
commit
4d3442ebad
@ -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
|
||||
|
||||
|
23
etc/ERC-NEWS
23
etc/ERC-NEWS
@ -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
|
||||
|
@ -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))))
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
95
src/xterm.c
95
src/xterm.c
@ -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,
|
||||
|
31
test/src/comp-resources/comp-test-funcs-dyn2.el
Normal file
31
test/src/comp-resources/comp-test-funcs-dyn2.el
Normal 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.
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user