mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-21 06:55:39 +00:00
Merge branch 'master' into feature/package-autosuggest
This commit is contained in:
commit
8fa657f064
18
etc/NEWS
18
etc/NEWS
@ -177,6 +177,17 @@ characters.
|
||||
*** New language-environment and input method for Tifinagh.
|
||||
The Tifinagh script is used to write the Berber languages.
|
||||
|
||||
---
|
||||
*** New input methods for Northern Iroquoian languages.
|
||||
Input methods are now implemented for Haudenosaunee languages in the
|
||||
Northern Iroquoian language family: 'mohawk-postfix' (Mohawk
|
||||
[Kanien’kéha / Onkwehonwehnéha]), 'oneida-postfix' (Oneida [Onʌyota:ká:
|
||||
/ Ukwehuwehnéha]), 'cayuga-postfix' (Cayuga [Gayogo̱ho:nǫhnéha:ˀ]),
|
||||
'onondaga-postfix (Onondaga [[Onųdaʔgegáʔ]), and `seneca-postfix'
|
||||
[Onödowá’ga:’]). Additionally, there is a general-purpose
|
||||
'haudenosaunee-postfix' input method to facilitate writing in the
|
||||
orthographies of the five languages simultaneously.
|
||||
|
||||
---
|
||||
** 'visual-wrap-prefix-mode' now supports variable-pitch fonts.
|
||||
When using 'visual-wrap-prefix-mode' in buffers with variable-pitch
|
||||
@ -706,6 +717,13 @@ Use 'if-let*', 'when-let*' and 'and-let*' instead.
|
||||
This effectively obsoletes the old '(if-let (SYMBOL SOMETHING) ...)'
|
||||
single binding syntax, which we'd kept only for backwards compatibility.
|
||||
|
||||
---
|
||||
** The Eshell 'pwd' command now expands the directory name on all systems.
|
||||
This ensures that user directories are properly expanded to their full
|
||||
name. Previously, Eshell only did this for MS-Windows systems. To
|
||||
restore the old behavior, you can set 'eshell-pwd-convert-function' to
|
||||
'identity'.
|
||||
|
||||
|
||||
* Lisp Changes in Emacs 31.1
|
||||
|
||||
|
@ -19,6 +19,10 @@
|
||||
;; https://github.com/larsbrinkhoff/emacs-history/tree/sources/decuslib.com/decus/vax85b/gnuemax
|
||||
|
||||
("24.4" fun set-transient-map)
|
||||
("22.1" fun version=)
|
||||
("22.1" fun version<)
|
||||
("22.1" fun version<=)
|
||||
("22.1" fun read-number)
|
||||
("19.7" fun defsubst)
|
||||
("19.34" fun make-directory)
|
||||
("18.59" fun mark)
|
||||
|
@ -65,9 +65,7 @@ they lack somewhat in feel from the typical shell equivalents."
|
||||
:version "24.1" ; removed eshell-dirs-initialize
|
||||
:type 'hook)
|
||||
|
||||
(defcustom eshell-pwd-convert-function (if (eshell-under-windows-p)
|
||||
#'expand-file-name
|
||||
#'identity)
|
||||
(defcustom eshell-pwd-convert-function #'expand-file-name
|
||||
"The function used to normalize the value of Eshell's `pwd'.
|
||||
The value returned by `pwd' is also used when recording the
|
||||
last-visited directory in the last-dir-ring, so it will affect the
|
||||
@ -75,7 +73,8 @@ form of the list used by `cd ='."
|
||||
:type '(radio (function-item file-truename)
|
||||
(function-item expand-file-name)
|
||||
(function-item identity)
|
||||
(function :tag "Other")))
|
||||
(function :tag "Other"))
|
||||
:version "31.1")
|
||||
|
||||
(defcustom eshell-ask-to-save-last-dir 'always
|
||||
"Determine if the last-dir-ring should be automatically saved.
|
||||
|
1051
lisp/leim/quail/iroquoian.el
Normal file
1051
lisp/leim/quail/iroquoian.el
Normal file
File diff suppressed because it is too large
Load Diff
@ -2076,7 +2076,12 @@ Interactively, EVENT is the value of `last-nonmenu-event'."
|
||||
(insert-file-contents file)
|
||||
(buffer-string)))
|
||||
(cons "name" name)
|
||||
(cons "filename" file))
|
||||
;; RFC 2183 declares that recipients should
|
||||
;; only respect the basename of the filename
|
||||
;; parameter, and the leading directories
|
||||
;; might divulge private information, so we
|
||||
;; only send the basename in our request.
|
||||
(cons "filename" (file-name-nondirectory file)))
|
||||
values)))
|
||||
((equal (plist-get input :type) "submit")
|
||||
;; We want the values from buttons if we hit a button if
|
||||
|
@ -805,6 +805,7 @@ not get changed."
|
||||
(widen)
|
||||
(put-text-property (point) pos 'nt-age 'old)
|
||||
(newsticker--buffer-set-faces (point) pos)))
|
||||
(newsticker--cache-save-feed (newsticker--cache-get-feed feed))
|
||||
(set-buffer-modified-p nil)))))))
|
||||
|
||||
(defun newsticker-mark-item-at-point-as-immortal ()
|
||||
@ -1279,7 +1280,7 @@ FEED-NAME-SYMBOL tells to which feed this item belongs."
|
||||
(let ((img (newsticker--image-read feed-name-symbol
|
||||
disabled)))
|
||||
(when img
|
||||
(newsticker--insert-image img (car item)))))
|
||||
(newsticker--insert-image img (format "[logo: %s]" (car item))))))
|
||||
(setq format (substring format 2)))
|
||||
((string= "%L" prefix)
|
||||
;; logo or title
|
||||
@ -1292,7 +1293,7 @@ FEED-NAME-SYMBOL tells to which feed this item belongs."
|
||||
(let ((img (newsticker--image-read feed-name-symbol
|
||||
disabled)))
|
||||
(if img
|
||||
(newsticker--insert-image img (car item))
|
||||
(newsticker--insert-image img (format "[logo: %s]" (car item)))
|
||||
(when (car item)
|
||||
(setq pos-text-start (point-marker))
|
||||
(if (eq (newsticker--age item) 'feed)
|
||||
|
@ -718,10 +718,11 @@ class declarations.")
|
||||
"aiter" "anext" "ascii" "breakpoint" "bytearray" "bytes" "exec"
|
||||
;; Special attributes:
|
||||
;; https://docs.python.org/3/reference/datamodel.html
|
||||
"__annotations__" "__closure__" "__code__"
|
||||
"__defaults__" "__dict__" "__doc__" "__globals__"
|
||||
"__kwdefaults__" "__name__" "__module__" "__package__"
|
||||
"__qualname__"
|
||||
"__annotations__" "__bases__" "__closure__" "__code__"
|
||||
"__defaults__" "__dict__" "__doc__" "__firstlineno__"
|
||||
"__globals__" "__kwdefaults__" "__name__" "__module__"
|
||||
"__mro__" "__package__" "__qualname__"
|
||||
"__static_attributes__" "__type_params__"
|
||||
;; Extras:
|
||||
"__all__")
|
||||
symbol-end) . font-lock-builtin-face))
|
||||
@ -1034,10 +1035,12 @@ It makes underscores and dots word constituent chars.")
|
||||
">>" ">>=" "|" "|=" "~" "@" "@="))
|
||||
|
||||
(defvar python--treesit-special-attributes
|
||||
'("__annotations__" "__closure__" "__code__"
|
||||
"__defaults__" "__dict__" "__doc__" "__globals__"
|
||||
"__kwdefaults__" "__name__" "__module__" "__package__"
|
||||
"__qualname__" "__all__"))
|
||||
'("__annotations__" "__bases__" "__closure__" "__code__"
|
||||
"__defaults__" "__dict__" "__doc__" "__firstlineno__"
|
||||
"__globals__" "__kwdefaults__" "__name__" "__module__"
|
||||
"__mro__" "__package__" "__qualname__"
|
||||
"__static_attributes__" "__type_params__"
|
||||
"__all__"))
|
||||
|
||||
(defvar python--treesit-exceptions
|
||||
'(;; Python 2 and 3:
|
||||
|
@ -299,7 +299,7 @@ value of last one, or nil if there are none."
|
||||
(if body
|
||||
(list 'if cond (cons 'progn body))
|
||||
(macroexp-warn-and-return (format-message "`when' with empty body")
|
||||
cond '(empty-body when) t)))
|
||||
(list 'progn cond nil) '(empty-body when) t)))
|
||||
|
||||
(defmacro unless (cond &rest body)
|
||||
"If COND yields nil, do BODY, else return nil.
|
||||
@ -309,7 +309,7 @@ value of last one, or nil if there are none."
|
||||
(if body
|
||||
(cons 'if (cons cond (cons nil body)))
|
||||
(macroexp-warn-and-return (format-message "`unless' with empty body")
|
||||
cond '(empty-body unless) t)))
|
||||
(list 'progn cond nil) '(empty-body unless) t)))
|
||||
|
||||
(defsubst subr-primitive-p (object)
|
||||
"Return t if OBJECT is a built-in primitive written in C.
|
||||
|
@ -469,10 +469,10 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
"application/yaml"
|
||||
"application/json-seq"
|
||||
"\\`text/"
|
||||
"+xml\\'"
|
||||
"+json\\'"
|
||||
"+yaml\\'"
|
||||
"+json-seq\\'"))
|
||||
"\\+xml\\'"
|
||||
"\\+json\\'"
|
||||
"\\+yaml\\'"
|
||||
"\\+json-seq\\'"))
|
||||
|
||||
(defun w32--mime-type-textual-p (mime-type)
|
||||
"Returns t if MIME-TYPE, a symbol, names a textual MIME type.
|
||||
|
@ -1738,6 +1738,8 @@ Type \\[vc-next-action] to check in changes.")
|
||||
(format "%d files" (length files))
|
||||
"this file"))))
|
||||
|
||||
(declare-function mail-text "sendmail" ())
|
||||
(declare-function message-goto-body "message" (&optional interactive))
|
||||
(defun vc-steal-lock (file rev owner)
|
||||
"Steal the lock on FILE."
|
||||
(let (file-description)
|
||||
@ -1758,7 +1760,10 @@ Type \\[vc-next-action] to check in changes.")
|
||||
;; goes wrong, we don't want to send any mail.
|
||||
(compose-mail owner (format "Stolen lock on %s" file-description))
|
||||
(setq default-directory (expand-file-name "~/"))
|
||||
(goto-char (point-max))
|
||||
(cond
|
||||
((eq mail-user-agent 'sendmail-user-agent)
|
||||
(mail-text))
|
||||
((message-goto-body)))
|
||||
(insert
|
||||
(format "I stole the lock on %s, " file-description)
|
||||
(current-time-string)
|
||||
|
52
src/itree.c
52
src/itree.c
@ -378,9 +378,9 @@ itree_inherit_offset (uintmax_t otick, struct itree_node *node)
|
||||
node->right->offset += node->offset;
|
||||
node->offset = 0;
|
||||
}
|
||||
/* The only thing that matters about `otick` is whether it's equal to
|
||||
/* The only thing that matters about 'otick' is whether it's equal to
|
||||
that of the tree. We could also "blindly" inherit from parent->otick,
|
||||
but we need to tree's `otick` anyway for when there's no parent. */
|
||||
but we need to tree's 'otick' anyway for when there's no parent. */
|
||||
if (node->parent == NULL || node->parent->otick == otick)
|
||||
node->otick = otick;
|
||||
}
|
||||
@ -683,7 +683,7 @@ itree_insert_node (struct itree_tree *tree, struct itree_node *node)
|
||||
struct itree_node *parent = NULL;
|
||||
struct itree_node *child = tree->root;
|
||||
uintmax_t otick = tree->otick;
|
||||
/* It's the responsibility of the caller to set `otick` on the node,
|
||||
/* It's the responsibility of the caller to set 'otick' on the node,
|
||||
to "confirm" that the begin/end fields are up to date. */
|
||||
eassert (node->otick == otick);
|
||||
|
||||
@ -913,8 +913,8 @@ itree_total_offset (struct itree_node *node)
|
||||
link the tree root.
|
||||
|
||||
Warning: DEST is left unmodified. SOURCE's child links are
|
||||
unchanged. Caller is responsible for recalculation of `limit`.
|
||||
Requires both nodes to be using the same effective `offset`. */
|
||||
unchanged. Caller is responsible for recalculation of 'limit'.
|
||||
Requires both nodes to be using the same effective 'offset'. */
|
||||
static void
|
||||
itree_replace_child (struct itree_tree *tree,
|
||||
struct itree_node *source,
|
||||
@ -939,8 +939,8 @@ itree_replace_child (struct itree_tree *tree,
|
||||
parent, left and right in surrounding nodes to point to SOURCE.
|
||||
|
||||
Warning: DEST is left unmodified. Caller is responsible for
|
||||
recalculation of `limit`. Requires both nodes to be using the same
|
||||
effective `offset`. */
|
||||
recalculation of 'limit'. Requires both nodes to be using the same
|
||||
effective 'offset'. */
|
||||
static void
|
||||
itree_transplant (struct itree_tree *tree,
|
||||
struct itree_node *source,
|
||||
@ -964,38 +964,38 @@ itree_remove (struct itree_tree *tree, struct itree_node *node)
|
||||
eassert (itree_contains (tree, node));
|
||||
eassert (check_tree (tree, true)); /* FIXME: Too expensive. */
|
||||
|
||||
/* Find `splice`, the leaf node to splice out of the tree. When
|
||||
`node` has at most one child this is `node` itself. Otherwise,
|
||||
it is the in order successor of `node`. */
|
||||
/* Find 'splice', the leaf node to splice out of the tree. When
|
||||
'node' has at most one child this is 'node' itself. Otherwise,
|
||||
it is the in order successor of 'node'. */
|
||||
itree_inherit_offset (tree->otick, node);
|
||||
struct itree_node *splice
|
||||
= (node->left == NULL || node->right == NULL)
|
||||
? node
|
||||
: itree_subtree_min (tree->otick, node->right);
|
||||
|
||||
/* Find `subtree`, the only child of `splice` (may be NULL). Note:
|
||||
`subtree` will not be modified other than changing its parent to
|
||||
`splice`. */
|
||||
/* Find 'subtree', the only child of 'splice' (may be NULL). Note:
|
||||
'subtree' will not be modified other than changing its parent to
|
||||
'splice'. */
|
||||
eassert (splice->left == NULL || splice->right == NULL);
|
||||
struct itree_node *subtree
|
||||
= (splice->left != NULL) ? splice->left : splice->right;
|
||||
|
||||
/* Save a pointer to the parent of where `subtree` will eventually
|
||||
be in `subtree_parent`. */
|
||||
/* Save a pointer to the parent of where 'subtree' will eventually
|
||||
be in 'subtree_parent'. */
|
||||
struct itree_node *subtree_parent
|
||||
= (splice->parent != node) ? splice->parent : splice;
|
||||
|
||||
/* If `splice` is black removing it may violate Red-Black
|
||||
/* If 'splice' is black removing it may violate Red-Black
|
||||
invariants, so note this for later. */
|
||||
|
||||
/* Replace `splice` with `subtree` under subtree's parent. If
|
||||
`splice` is black, this creates a red-red violation, so remember
|
||||
/* Replace 'splice' with 'subtree' under subtree's parent. If
|
||||
'splice' is black, this creates a red-red violation, so remember
|
||||
this now as the field can be overwritten when splice is
|
||||
transplanted below. */
|
||||
itree_replace_child (tree, subtree, splice);
|
||||
bool removed_black = !splice->red;
|
||||
|
||||
/* Replace `node` with `splice` in the tree and propagate limit
|
||||
/* Replace 'node' with 'splice' in the tree and propagate limit
|
||||
upwards, if necessary. Note: Limit propagation can stabilize at
|
||||
any point, so we must call from bottom to top for every node that
|
||||
has a new child. */
|
||||
@ -1054,8 +1054,8 @@ itree_insert_gap (struct itree_tree *tree,
|
||||
|
||||
/* Nodes with front_advance starting at pos may mess up the tree
|
||||
order, so we need to remove them first. This doesn't apply for
|
||||
`before_markers` since in that case, all positions move identically
|
||||
regardless of `front_advance` or `rear_advance`. */
|
||||
'before_markers' since in that case, all positions move identically
|
||||
regardless of 'front_advance' or 'rear_advance'. */
|
||||
struct itree_stack *saved = itree_stack_create (0);
|
||||
struct itree_node *node = NULL;
|
||||
if (!before_markers)
|
||||
@ -1208,7 +1208,7 @@ itree_node_intersects (const struct itree_node *node,
|
||||
|
||||
Note that this should return all the nodes that we need to traverse
|
||||
in order to traverse the nodes selected by the current narrowing (i.e.
|
||||
`ITER->begin..ITER->end`) so it will also return some nodes which aren't in
|
||||
'ITER->begin..ITER->end') so it will also return some nodes which aren't in
|
||||
that narrowing simply because they may have children which are.
|
||||
|
||||
The code itself is very unsatisfactory because the code of each one
|
||||
@ -1221,8 +1221,8 @@ itree_iter_next_in_subtree (struct itree_node *node,
|
||||
struct itree_iterator *iter)
|
||||
{
|
||||
/* FIXME: Like in the previous version of the iterator, we
|
||||
prune based on `limit` only when moving to a left child,
|
||||
but `limit` can also get smaller when moving to a right child
|
||||
prune based on 'limit' only when moving to a left child,
|
||||
but 'limit' can also get smaller when moving to a right child
|
||||
It's actually fairly common, so maybe it would be worthwhile
|
||||
to prune a bit more aggressively here. */
|
||||
struct itree_node *next;
|
||||
@ -1387,10 +1387,10 @@ itree_iterator_start (struct itree_iterator *iter,
|
||||
iter->end = end;
|
||||
iter->otick = tree->otick;
|
||||
iter->order = order;
|
||||
/* Beware: the `node` field always holds "the next" node to consider.
|
||||
/* Beware: the 'node' field always holds "the next" node to consider.
|
||||
so it's always "one node ahead" of what the iterator loop sees.
|
||||
In most respects this makes no difference, but we depend on this
|
||||
detail in `delete_all_overlays` where this allows us to modify
|
||||
detail in 'delete_all_overlays' where this allows us to modify
|
||||
the current node knowing that the iterator will not need it to
|
||||
find the next. */
|
||||
iter->node = itree_iterator_first_node (tree, iter);
|
||||
|
18
src/itree.h
18
src/itree.h
@ -41,7 +41,7 @@ INLINE_HEADER_BEGIN
|
||||
struct itree_node
|
||||
{
|
||||
/* The normal parent, left and right links found in binary trees.
|
||||
See also `red`, below, which completes the Red-Black tree
|
||||
See also 'red', below, which completes the Red-Black tree
|
||||
representation. */
|
||||
struct itree_node *parent;
|
||||
struct itree_node *left;
|
||||
@ -147,13 +147,13 @@ struct itree_iterator
|
||||
struct itree_node *node;
|
||||
ptrdiff_t begin;
|
||||
ptrdiff_t end;
|
||||
uintmax_t otick; /* A copy of the tree's `otick`. */
|
||||
uintmax_t otick; /* A copy of the tree's 'otick'. */
|
||||
enum itree_order order;
|
||||
};
|
||||
|
||||
/* Iterate over the intervals between BEG and END in the tree T.
|
||||
N will hold successive nodes. ORDER can be one of : `ASCENDING`,
|
||||
`DESCENDING`, `POST_ORDER`, or `PRE_ORDER`.
|
||||
N will hold successive nodes. ORDER can be one of : 'ASCENDING',
|
||||
'DESCENDING', 'POST_ORDER', or 'PRE_ORDER'.
|
||||
It should be used as:
|
||||
|
||||
ITREE_FOREACH (n, t, beg, end, order)
|
||||
@ -167,12 +167,12 @@ struct itree_iterator
|
||||
- Don't modify the tree during the iteration.
|
||||
*/
|
||||
#define ITREE_FOREACH(n, t, beg, end, order) \
|
||||
/* FIXME: We'd want to declare `n` right here, but I can't figure out
|
||||
how to make that work here: the `for` syntax only allows a single
|
||||
/* FIXME: We'd want to declare 'n' right here, but I can't figure out
|
||||
how to make that work here: the 'for' syntax only allows a single
|
||||
clause for the var declarations where we need 2 different types.
|
||||
We could use the `struct {foo x; bar y; } p;` trick to declare two
|
||||
vars `p.x` and `p.y` of unrelated types, but then none of the names
|
||||
of the vars matches the `n` we receive :-(. */ \
|
||||
We could use the 'struct {foo x; bar y; } p;' trick to declare two
|
||||
vars 'p.x' and 'p.y' of unrelated types, but then none of the names
|
||||
of the vars matches the 'n' we receive :-(. */ \
|
||||
if (!t) \
|
||||
{ } \
|
||||
else \
|
||||
|
@ -7899,6 +7899,9 @@ - (NSSize)windowWillResize: (NSWindow *)sender toSize: (NSSize)frameSize
|
||||
|
||||
NSTRACE_RETURN_SIZE (frameSize);
|
||||
|
||||
/* Trigger `move-frame-functions' (Bug#74074). */
|
||||
[self windowDidMove:(NSNotification *)sender];
|
||||
|
||||
return frameSize;
|
||||
}
|
||||
|
||||
|
@ -454,7 +454,11 @@
|
||||
x)))
|
||||
(should (= x 2)))
|
||||
(should (equal (macroexpand-all '(when a b c d))
|
||||
'(if a (progn b c d)))))
|
||||
'(if a (progn b c d))))
|
||||
(with-suppressed-warnings ((empty-body when unless))
|
||||
(should (equal (when t) nil))
|
||||
(should (equal (unless t) nil))
|
||||
(should (equal (unless nil) nil))))
|
||||
|
||||
(ert-deftest subr-test-xor ()
|
||||
"Test `xor'."
|
||||
|
Loading…
Reference in New Issue
Block a user