aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Kaludercic2024-11-08 11:36:49 -0500
committerPhilip Kaludercic2024-11-08 11:36:49 -0500
commit8fa657f064cf605b19e6d11e083df152ca3e21d3 (patch)
tree6e7d41223c5d3262d905ae2fdd3057dd17fa5ef9
parente9f8dbf19439425568198deb44e48bff150212a4 (diff)
parent551d1a2cd73bb3df2cad0f1f5b5d1628bb138483 (diff)
downloademacs-8fa657f064cf605b19e6d11e083df152ca3e21d3.tar.gz
emacs-8fa657f064cf605b19e6d11e083df152ca3e21d3.zip
Merge branch 'master' into feature/package-autosuggest
-rw-r--r--etc/NEWS18
-rw-r--r--etc/symbol-releases.eld4
-rw-r--r--lisp/eshell/em-dirs.el7
-rw-r--r--lisp/leim/quail/iroquoian.el1051
-rw-r--r--lisp/net/eww.el7
-rw-r--r--lisp/net/newst-plainview.el5
-rw-r--r--lisp/progmodes/python.el19
-rw-r--r--lisp/subr.el4
-rw-r--r--lisp/term/w32-win.el8
-rw-r--r--lisp/vc/vc.el7
-rw-r--r--src/itree.c52
-rw-r--r--src/itree.h18
-rw-r--r--src/nsterm.m3
-rw-r--r--test/lisp/subr-tests.el6
14 files changed, 1151 insertions, 58 deletions
diff --git a/etc/NEWS b/etc/NEWS
index dcbe75b6b8b..7c70bdfd771 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -178,6 +178,17 @@ characters.
178The Tifinagh script is used to write the Berber languages. 178The Tifinagh script is used to write the Berber languages.
179 179
180--- 180---
181*** New input methods for Northern Iroquoian languages.
182Input methods are now implemented for Haudenosaunee languages in the
183Northern Iroquoian language family: 'mohawk-postfix' (Mohawk
184[Kanien’kéha / Onkwehonwehnéha]), 'oneida-postfix' (Oneida [Onʌyota:ká:
185/ Ukwehuwehnéha]), 'cayuga-postfix' (Cayuga [Gayogo̱ho:nǫhnéha:ˀ]),
186'onondaga-postfix (Onondaga [[Onųdaʔgegáʔ]), and `seneca-postfix'
187[Onödowá’ga:’]). Additionally, there is a general-purpose
188'haudenosaunee-postfix' input method to facilitate writing in the
189orthographies of the five languages simultaneously.
190
191---
181** 'visual-wrap-prefix-mode' now supports variable-pitch fonts. 192** 'visual-wrap-prefix-mode' now supports variable-pitch fonts.
182When using 'visual-wrap-prefix-mode' in buffers with variable-pitch 193When using 'visual-wrap-prefix-mode' in buffers with variable-pitch
183fonts, the wrapped text will now be lined up correctly so that it's 194fonts, the wrapped text will now be lined up correctly so that it's
@@ -706,6 +717,13 @@ Use 'if-let*', 'when-let*' and 'and-let*' instead.
706This effectively obsoletes the old '(if-let (SYMBOL SOMETHING) ...)' 717This effectively obsoletes the old '(if-let (SYMBOL SOMETHING) ...)'
707single binding syntax, which we'd kept only for backwards compatibility. 718single binding syntax, which we'd kept only for backwards compatibility.
708 719
720---
721** The Eshell 'pwd' command now expands the directory name on all systems.
722This ensures that user directories are properly expanded to their full
723name. Previously, Eshell only did this for MS-Windows systems. To
724restore the old behavior, you can set 'eshell-pwd-convert-function' to
725'identity'.
726
709 727
710* Lisp Changes in Emacs 31.1 728* Lisp Changes in Emacs 31.1
711 729
diff --git a/etc/symbol-releases.eld b/etc/symbol-releases.eld
index 4931be2fb7d..bdf5858102e 100644
--- a/etc/symbol-releases.eld
+++ b/etc/symbol-releases.eld
@@ -19,6 +19,10 @@
19;; https://github.com/larsbrinkhoff/emacs-history/tree/sources/decuslib.com/decus/vax85b/gnuemax 19;; https://github.com/larsbrinkhoff/emacs-history/tree/sources/decuslib.com/decus/vax85b/gnuemax
20 20
21 ("24.4" fun set-transient-map) 21 ("24.4" fun set-transient-map)
22 ("22.1" fun version=)
23 ("22.1" fun version<)
24 ("22.1" fun version<=)
25 ("22.1" fun read-number)
22 ("19.7" fun defsubst) 26 ("19.7" fun defsubst)
23 ("19.34" fun make-directory) 27 ("19.34" fun make-directory)
24 ("18.59" fun mark) 28 ("18.59" fun mark)
diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el
index ad0a5beac1e..e005bc98873 100644
--- a/lisp/eshell/em-dirs.el
+++ b/lisp/eshell/em-dirs.el
@@ -65,9 +65,7 @@ they lack somewhat in feel from the typical shell equivalents."
65 :version "24.1" ; removed eshell-dirs-initialize 65 :version "24.1" ; removed eshell-dirs-initialize
66 :type 'hook) 66 :type 'hook)
67 67
68(defcustom eshell-pwd-convert-function (if (eshell-under-windows-p) 68(defcustom eshell-pwd-convert-function #'expand-file-name
69 #'expand-file-name
70 #'identity)
71 "The function used to normalize the value of Eshell's `pwd'. 69 "The function used to normalize the value of Eshell's `pwd'.
72The value returned by `pwd' is also used when recording the 70The value returned by `pwd' is also used when recording the
73last-visited directory in the last-dir-ring, so it will affect the 71last-visited directory in the last-dir-ring, so it will affect the
@@ -75,7 +73,8 @@ form of the list used by `cd ='."
75 :type '(radio (function-item file-truename) 73 :type '(radio (function-item file-truename)
76 (function-item expand-file-name) 74 (function-item expand-file-name)
77 (function-item identity) 75 (function-item identity)
78 (function :tag "Other"))) 76 (function :tag "Other"))
77 :version "31.1")
79 78
80(defcustom eshell-ask-to-save-last-dir 'always 79(defcustom eshell-ask-to-save-last-dir 'always
81 "Determine if the last-dir-ring should be automatically saved. 80 "Determine if the last-dir-ring should be automatically saved.
diff --git a/lisp/leim/quail/iroquoian.el b/lisp/leim/quail/iroquoian.el
new file mode 100644
index 00000000000..3b4fdad62c2
--- /dev/null
+++ b/lisp/leim/quail/iroquoian.el
@@ -0,0 +1,1051 @@
1;;; iroquoian.el --- Quail packages for inputting Iroquoian languages -*- lexical-binding: t; coding: utf-8; -*-
2
3;; Copyright (C) 2024 Free Software Foundation, Inc.
4
5;; Author: Kierin Bell <fernseed@fernseed.me>
6;; Keywords: i18n
7
8;; This file is part of GNU Emacs.
9
10;; This program is free software; you can redistribute it and/or modify
11;; it under the terms of the GNU General Public License as published by
12;; the Free Software Foundation, either version 3 of the License, or
13;; (at your option) any later version.
14
15;; This program is distributed in the hope that it will be useful,
16;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;; GNU General Public License for more details.
19
20;; You should have received a copy of the GNU General Public License
21;; along with this program. If not, see <https://www.gnu.org/licenses/>.
22
23;;; Commentary:
24
25;; This file implements input methods for Northern Iroquoian languages.
26
27;; Input methods are implemented for all Five Nations Iroquois
28;; languages:
29
30;; - Mohawk (Kanien’kéha / Onkwehonwehnéha)
31;; - Oneida (Onʌyota:ká: / Ukwehuwehnéha)
32;; - Onondaga (Onųdaʔgegáʔ)
33;; - Cayuga (Gayogo̱ho:nǫhnéha:ˀ)
34;; - Seneca (Onödowá’ga:’)
35
36;; A composite input method for all of the languages above is also
37;; defined: `haudenosaunee-postfix'.
38
39;; Input methods are not yet implemented for the remaining Northern
40;; Iroquoian languages, including:
41
42;; - Tuscarora (Skarù:ręʔ)
43;; - Wendat (Huron) / Wyandot
44
45;;; Code:
46
47(require 'quail)
48(require 'seq)
49(require 'pcase)
50
51
52;;; Mohawk
53
54;;
55;; There are several orthographies used today to write Mohawk in
56;; different communities, but differences are small and mainly involve
57;; differences in representation of the palatal glide [j] (written <i>
58;; in Eastern/Central dialects and <y> in Western dialects). The
59;; following input method should work for all of variants.
60;;
61;; Reference work for orthographies used by speakers of Eastern
62;; (Kahnawà:ke, Kanehsatà:ke, Wáhta) and Central (Ahkwesahsne) dialects
63;; of Mohawk:
64;;
65;; Lazore, Dorothy Karihwénhawe. 1993. The Mohawk language
66;; Standardisation Project, Conference Report. Ontario: Literacy
67;; Ontario.
68;;
69;; Reference work for the orthography commonly used by speakers of
70;; Western dialects of Mohawk (Tyendinaga, Ohswé:ken):
71;;
72;; Brian Maracle. 2021. 1st Year Adult Immersion Program 2020-21.
73;; Ohsweken, ON, Canada: Onkwawenna Kentyohkwa. Unpublished curriculum
74;; document written by staff for the Okwawenna Kentyohkwa adult
75;; immersion program.
76;;
77
78(defconst iroquoian-mohawk-modifier-alist nil
79 "Alist of rules for modifier letters in Mohawk input methods.
80Entries are as with rules in `quail-define-rules'.")
81
82(defconst iroquoian-mohawk-vowel-alist
83 '(("a'" ?á)
84 ("a`" ?à)
85 ("A'" ?Á)
86 ("A`" ?À)
87 ("e'" ?é)
88 ("e`" ?è)
89 ("E'" ?É)
90 ("E`" ?È)
91 ("i'" ?í)
92 ("i`" ?ì)
93 ("I'" ?Í)
94 ("I`" ?Ì)
95 ("o'" ?ó)
96 ("o`" ?ò)
97 ("O'" ?Ó)
98 ("O`" ?Ò)
99
100 ("a''" ["a'"])
101 ("a``" ["a`"])
102 ("A''" ["A'"])
103 ("A``" ["A`"])
104 ("e''" ["e'"])
105 ("e``" ["e`"])
106 ("E''" ["E'"])
107 ("E``" ["E`"])
108 ("i''" ["i'"])
109 ("i``" ["i`"])
110 ("I''" ["I'"])
111 ("I``" ["I`"])
112 ("o''" ["o'"])
113 ("o``" ["o`"])
114 ("O''" ["O'"])
115 ("O``" ["O`"]))
116 "Alist of rules for vowel letters in Mohawk input methods.
117Entries are as with rules in `quail-define-rules'.")
118
119(defconst iroquoian-mohawk-consonant-alist
120 '((";;" ?\N{RIGHT SINGLE QUOTATION MARK}))
121 "Alist of rules for consonant letters in Mohawk input methods.
122Entries are as with rules in `quail-define-rules'.")
123
124(quail-define-package
125 "mohawk-postfix" "Mohawk" "MOH<" t
126 "Mohawk (Kanien’kéha) input method with postfix modifiers
127
128Stress diacritics:
129
130| Key | Description | Example |
131|------+--------------+---------|
132| \\=' | Acute accent | a' -> á |
133| \\=` | Grave accent | a` -> à |
134
135Doubling any of these postfixes separates the letter and the postfix.
136
137Vowels:
138
139a, e, i, and o are bound to a single key.
140
141Consonants:
142
143| Key | Translation | Description |
144|-----+-------------+--------------|
145| ;; | \\=’ | Glottal stop |
146
147h, k, n, r, s, t, w, and y are bound to a single key.
148
149b, m, and p are used rarely in ideophones and loan words. They are also
150each bound to a single key.
151
152All Haudenosaunee languages, including Mohawk, can be input
153simultaneously using the input method `haudenosaunee-postfix'."
154 nil t nil nil nil nil nil nil nil nil t)
155
156(pcase-dolist (`(,key ,trans)
157 (append iroquoian-mohawk-modifier-alist
158 iroquoian-mohawk-consonant-alist
159 iroquoian-mohawk-vowel-alist))
160 (quail-defrule key trans))
161
162
163;;; Oneida
164
165;;
166;; There are slight variations in the orthographies used today to write
167;; Oneida. The differences mainly involve in representation of vowel
168;; length and glottal stops.
169;;
170;; Reference work for Oneida orthography:
171;;
172;; Michelson, K., Doxtator, M. and Doxtator, M.A.. 2002.
173;; Oneida-English/English-Oneida dictionary. Toronto: University of
174;; Toronto Press.
175;;
176;; Orthographic variation from personal familiarity with community
177;; language programs and curricula.
178;;
179
180(defconst iroquoian-oneida-modifier-alist
181 '(("::" ?\N{MIDDLE DOT}))
182 "Alist of rules for modifier letters in Oneida input methods.
183Entries are as with rules in `quail-define-rules'.")
184
185(defconst iroquoian-oneida-vowel-alist
186 '(("a'" ?á)
187 ("A'" ?Á)
188 ("e'" ?é)
189 ("E'" ?É)
190 ("i'" ?í)
191 ("I'" ?Í)
192 ("o'" ?ó)
193 ("O'" ?Ó)
194 ("u'" ?ú)
195 ("U'" ?Ú)
196 ("e/" ?ʌ)
197 ("e/'" ["ʌ́"])
198 ("E/" ?Ʌ)
199 ("E/'" ["Ʌ́"])
200
201 ("a''" ["a'"])
202 ("A''" ["A'"])
203 ("e''" ["e'"])
204 ("E''" ["E'"])
205 ("i''" ["i'"])
206 ("I''" ["I'"])
207 ("o''" ["o'"])
208 ("O''" ["O'"])
209 ("u''" ["u'"])
210 ("U''" ["U'"])
211 ("e//" ["e/"])
212 ("e/''" ["ʌ'"])
213 ("E//" ["E/"])
214 ("E/''" ["Ʌ'"]))
215 "Alist of rules for vowel letters in Oneida input methods.
216Entries are as with rules in `quail-define-rules'.")
217
218(defconst iroquoian-oneida-consonant-alist
219 '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP})
220 (";'" ?\N{RIGHT SINGLE QUOTATION MARK}))
221 "Alist of rules for consonant letters in Oneida input methods.
222Entries are as with rules in `quail-define-rules'.")
223
224(defconst iroquoian-oneida-devoicing-alist
225 '(("_" ?\N{COMBINING LOW LINE})
226 ("__" ?_))
227 "Alist of rules for devoicing characters in Oneida input methods.
228Entries are as with rules in `quail-define-rules'.")
229
230(quail-define-package
231 "oneida-postfix" "Oneida" "ONE<" t
232 "Oneida (Onʌyota:ká:) input method with postfix modifiers
233
234Modifiers:
235
236| Key | Translation | Description |
237|-----+-------------+--------------------------|
238| :: | · | Vowel length |
239
240Stress diacritics:
241
242| Key | Description | Example |
243|------+--------------+---------|
244| \\=' | Acute accent | a' -> á |
245
246Doubling the postfix separates the letter and the postfix.
247
248Vowels:
249
250| Key | Translation | Description |
251|-----+-------------+-----------------------------------|
252| e/ | ʌ | Mid central nasal vowel |
253| E/ | Ʌ | Mid central nasal vowel (capital) |
254
255a, e, i, o, and u are bound to a single key.
256
257Consonants:
258
259| Key | Translation | Description |
260|-----+-------------+--------------------------|
261| ;; | ˀ | Glottal stop |
262| ;\\=' | \\=’ | Glottal stop (alternate) |
263
264h, k, l, n, s, t, w, and y are bound to a single key.
265
266Devoicing:
267
268| Key | Description | Example |
269|-----+--------------------+----------|
270| _ | Combining low line | a_ -> a̲ |
271
272Note: Not all fonts can properly display a combining low line on all
273letters.
274
275Underlining is commonly used in Oneida to indicate devoiced syllables on
276pre-pausal forms (also called utterance-final forms). Alternatively,
277markup or other methods can be used to create an underlining effect.
278
279To enter a plain underscore, type the underscore twice.
280
281All Haudenosaunee languages, including Oneida, can be input
282simultaneously using the input method `haudenosaunee-postfix'."
283 nil t nil nil nil nil nil nil nil nil t)
284
285(pcase-dolist (`(,key ,trans)
286 (append iroquoian-oneida-modifier-alist
287 iroquoian-oneida-consonant-alist
288 iroquoian-oneida-vowel-alist
289 iroquoian-oneida-devoicing-alist))
290 (quail-defrule key trans))
291
292
293;;; Onondaga
294
295;;
296;; There are three main orthographies for Onondaga in contemporary use:
297;; the community orthography used at Six Nations of the Grand River, the
298;; community orthography used at Onondaga Nation in New York, and the
299;; orthography used by Hanni Woodbury in her 2003 dictionary (see
300;; below). The latter is included because of its adoption in academia
301;; and also by some contemporary second-language learners.
302;; Additionally, Woodbury's dictionary provides a helpful description of
303;; the community orthographies that is still applicable today.
304;;
305;; The differences between the orthographies are small, involving
306;; representation of nasal vowels (ęand ǫat Six Nations of the Grand
307;; River, eñ and oñ at Onondaga in New York, and ęand ųfollowing
308;; Woodbury's dictionary), the low front rounded vowel (äat Six Nations
309;; and Onondaga Nation and æ following Woodbury), vowel length (:
310;; [colon] after a vowel in community orthographies and · [middle dot]
311;; following Woodbury), and glottal stops (’ [right single quotation
312;; mark] in community orthographies and ʔ [latin letter glottal stop]
313;; following Woodbury). The input method here aims to accommodate all
314;; three of these orthographies.
315;;
316;; Reference work for Onondaga orthography:
317;;
318;; Hanni Woodbury. 2003. Onondaga-English/English-Onondaga
319;; Dictionary. Toronto: University of Toronto Press.
320;;
321
322(defconst iroquoian-onondaga-modifier-alist
323 '(("::" ?\N{MIDDLE DOT}))
324 "Alist of rules for modifier letters in Onondaga input methods.
325Entries are as with rules in `quail-define-rules'.")
326
327(defconst iroquoian-onondaga-vowel-alist
328 '(("a'" ?á)
329 ("A'" ?Á)
330 ("e'" ?é)
331 ("E'" ?É)
332 ("i'" ?í)
333 ("I'" ?Í)
334 ("o'" ?ó)
335 ("O'" ?Ó)
336 ("e," ?ę)
337 ("e,'" ["ę́"])
338 ("E," ?Ę)
339 ("E,'" ["Ę́"])
340 ("o," ?ǫ)
341 ("o,'" ["ǫ́"])
342 ("O," ?Ǫ)
343 ("O,'" ["Ǫ́"])
344 ("a\"" ?ä)
345 ("a\"'" ["ä́"])
346 ("A\"" ?Ä)
347 ("A\"'" ["Ä́"])
348 ;; From Woodbury (2003) orthography:
349 ("a/" ?æ)
350 ("a/'" ["ǽ"])
351 ("A/" ?Æ)
352 ("A/'" ["Ǽ"])
353 ("u," ?ų)
354 ("u,'" ["ų́"])
355 ("U," ?Ų)
356 ("U,'" ["Ų́"])
357
358 ("a''" ["a'"])
359 ("A''" ["A'"])
360 ("e''" ["e'"])
361 ("E''" ["E'"])
362 ("i''" ["i'"])
363 ("I''" ["I'"])
364 ("o''" ["o'"])
365 ("O''" ["O'"])
366 ("e,," ["e,"])
367 ("e,''" ["ę'"])
368 ("E,," ["E,"])
369 ("E,''" ["Ę'"])
370 ("o,," ["o,"])
371 ("o,''" ["ǫ'"])
372 ("O,," ["O,"])
373 ("O,''" ["Ǫ'"])
374 ("a\"\"" ["a\""])
375 ("a\"''" ["ä'"])
376 ("A\"\"" ["A\""])
377 ("A\"''" ["Ä'"])
378 ("a//" ["a/"])
379 ("a/''" ["æ'"])
380 ("A//" ["A/"])
381 ("A/''" ["Æ'"])
382 ("u,," ["u,"])
383 ("u,''" ["ų'"])
384 ("U,," ["U,"])
385 ("U,''" ["Ų'"]))
386 "Alist of rules for vowel letters in Onondaga input methods.
387Entries are as with rules in `quail-define-rules'.")
388
389(defconst iroquoian-onondaga-consonant-alist
390 '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
391 (";:" ?\N{LATIN LETTER GLOTTAL STOP}))
392 "Alist of rules for consonant letters in Onondaga input methods.
393Entries are as with rules in `quail-define-rules'.")
394
395(defconst iroquoian-onondaga-nasal-alist
396 '(("n-" ?ñ)
397 ("n--" ["n-"])
398 ("N-" ?Ñ)
399 ("N--" ["N-"]))
400 "Alist of rules for nasal modifier letters in Onondaga input methods.
401Entries are as with rules in `quail-define-rules'.")
402
403(quail-define-package
404 "onondaga-postfix" "Onondaga" "ONO<" t
405 "Onondaga (Onųdaʔgegáʔ) input method with postfix modifiers
406
407Modifiers:
408
409| Key | Translation | Description |
410|-----+-------------+--------------------------|
411| :: | · | Vowel length (alternate) |
412
413Stress diacritics:
414
415| Key | Description | Example |
416|------+--------------+---------|
417| \\=' | Acute accent | a' -> á |
418
419Doubling the postfix separates the letter and the postfix.
420
421Vowels:
422
423| Key | Translation | Description |
424|-----+-------------+---------------------------------------|
425| Six Nations of the Grand River orthography |
426|-----------------------------------------------------------|
427| e, | ę | Mid front nasal vowel |
428| E, | Ę | Mid front nasal vowel (capital) |
429| o, | ǫ | Back high nasal vowel |
430| O, | Ǫ | Back high nasal vowel (capital) |
431| a\" | ä | Low front rounded vowel |
432| A\" | Ä | Low front rounded vowel (capital) |
433|-----------------------------------------------------------|
434| Onondaga Nation, New York orthography |
435|-----------------------------------------------------------|
436| en- | eñ | Mid front nasal vowel |
437| EN- | EÑ | Mid front nasal vowel (capital) |
438| on- | oñ | Back high nasal vowel |
439| ON- | OÑ | Back high nasal vowel (capital) |
440| a\" | ä | Low front rounded vowel |
441| A\" | Ä | Low front rounded vowel (capital) |
442|-----------------------------------------------------------|
443| Dictionary orthography (Hanni Woodbury, 2003) |
444|-----------------------------------------------------------|
445| e, | ę | Mid front nasal vowel |
446| E, | Ę | Mid front nasal vowel (capital) |
447| u, | ų | Back high nasal vowel |
448| U, | Ų | Back high nasal vowel (capital) |
449| a/ | æ | Low front rounded vowel |
450| A/ | Æ | Low front rounded vowel (capital) |
451
452a, e, i, and o are bound to a single key.
453
454Consonants:
455
456| Key | Translation | Description |
457|-----+-------------+--------------------------|
458| ;; | \\=’ | Glottal stop |
459| ;: | ʔ | Glottal stop (alternate) |
460
461c, d, g, h, j, k, n, s, t, w, and y are bound to a single key.
462
463All Haudenosaunee languages, including Onondaga, can be input
464simultaneously using the input method `haudenosaunee-postfix'."
465 nil t nil nil nil nil nil nil nil nil t)
466
467(pcase-dolist (`(,key ,trans)
468 (append iroquoian-onondaga-modifier-alist
469 iroquoian-onondaga-consonant-alist
470 iroquoian-onondaga-nasal-alist
471 iroquoian-onondaga-vowel-alist))
472 (quail-defrule key trans))
473
474
475;;; Cayuga
476
477;;
478;; The primary community orthography used for the Cayuga language is
479;; called the Henry orthography, after important language revitalist
480;; Reginald Henry. There are slight variations, particularly in which
481;; letter is used to represent the glottal stop. While the most common
482;; seems to be <ˀ> [modifier letter glottal stop], this input method
483;; provides mappings for other glottal stop letters in common use.
484;; Other common orthographies should be covered by this input method as
485;; well.
486;;
487;; Reference work for Cayuga orthography:
488;;
489;; Carrie Dyck, Frances Froman, Alfred Keye & Lottie Keye. 2024. A
490;; grammar and dictionary of Gayogo̱hó:nǫˀ (Cayuga) (Estudios de
491;; Lingüística Amerindia 1). Berlin: Language Science Press.
492;;
493
494(defconst iroquoian-cayuga-modifier-alist nil
495 "Alist of rules for modifier letters in Cayuga input methods.
496Entries are as with rules in `quail-define-rules'.")
497
498(defconst iroquoian-cayuga-vowel-alist
499 '(("a'" ?á)
500 ("a-" ["a̱"])
501 ("A'" ?Á)
502 ("A-" ["A̱"])
503 ("e'" ?é)
504 ("e-" ["e̱"])
505 ("E'" ?É)
506 ("E-" ["E̱"])
507 ("i'" ?í)
508 ("i-" ["i̱"])
509 ("I'" ?Í)
510 ("I-" ["I̱"])
511 ("o'" ?ó)
512 ("o-" ["o̱"])
513 ("O'" ?Ó)
514 ("O-" ["O̱"])
515 ("u'" ?ú)
516 ("u-" ["u̱"])
517 ("U'" ?Ú)
518 ("U-" ["U̱"])
519 ("e," ?ę)
520 ("e,'" ["ę́"])
521 ("e,-" ["ę̱"])
522 ("E," ?Ę)
523 ("E,'" ["Ę́"])
524 ("E,-" ["Ę̱"])
525 ("o," ?ǫ)
526 ("o,'" ["ǫ́"])
527 ("o,-" ["ǫ̱"])
528 ("O," ?Ǫ)
529 ("O,'" ["Ǫ́"])
530 ("O,-" ["Ǫ̱"])
531
532 ("a''" ["a'"])
533 ("a--" ["a-"])
534 ("A''" ["A'"])
535 ("A--" ["A-"])
536 ("e''" ["e'"])
537 ("e--" ["e-"])
538 ("E''" ["E'"])
539 ("E--" ["E-"])
540 ("i''" ["i'"])
541 ("i--" ["i-"])
542 ("I''" ["I'"])
543 ("I--" ["I-"])
544 ("o''" ["o'"])
545 ("o--" ["o-"])
546 ("O''" ["O'"])
547 ("O--" ["O-"])
548 ("u''" ["u'"])
549 ("u--" ["u-"])
550 ("U''" ["U'"])
551 ("U--" ["U-"])
552 ("e,," ["e,"])
553 ("e,''" ["ę'"])
554 ("e,--" ["ę-"])
555 ("E,," ["E,"])
556 ("E,''" ["Ę'"])
557 ("E,--" ["Ę-"])
558 ("o,," ["o,"])
559 ("o,''" ["ǫ'"])
560 ("o,--" ["ǫ-"])
561 ("O,," ["O,"])
562 ("O,''" ["Ǫ'"])
563 ("O,--" ["Ǫ-"]))
564 "Alist of rules for vowel letters in Cayuga input methods.
565Entries are as with rules in `quail-define-rules'.")
566
567(defconst iroquoian-cayuga-consonant-alist
568 '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP})
569 (";'" ?\N{RIGHT SINGLE QUOTATION MARK}))
570 "Alist of rules for consonant letters in Cayuga input methods.
571Entries are as with rules in `quail-define-rules'.")
572
573(quail-define-package
574 "cayuga-postfix" "Cayuga" "CAY<" t
575 "Cayuga (Gayogo̱ho:nǫhnéha:ˀ) input method with postfix modifiers
576
577Stress diacritics:
578
579| Key | Description | Example |
580|------+--------------+---------|
581| \\=' | Acute accent | a' -> á |
582
583Doubling the postfix separates the letter and the postfix.
584
585Vowels:
586
587| Key | Translation | Description |
588|-----+-------------+---------------------------------|
589| e, | ę | Mid front nasal vowel |
590| E, | Ę | Mid front nasal vowel (capital) |
591| o, | ǫ | Mid back nasal vowel |
592| O, | Ǫ | Mid back nasal vowel (capital) |
593
594a, e, i, o, and u are bound to a single key.
595
596Consonants:
597
598| Key | Translation | Description |
599|-------+-------------+--------------------------|
600| ;; | ˀ | Glottal stop |
601| ;\\=' | \\=’ | Glottal stop (alternate) |
602
603d, g, h, j, k, n, r, s, t, w, y, and f are bound to a single key.
604
605Devoicing:
606
607| Key | Description | Example |
608|-----+------------------------+----------|
609| - | Combining macron below | a- -> a̱ |
610
611Note: Not all fonts can properly display a combining macron low on all
612vowels.
613
614To enter a plain hyphen after a vowel, simply type the hyphen twice.
615
616All Haudenosaunee languages, including Cayuga, can be input
617simultaneously using the input method `haudenosaunee-postfix'."
618 nil t nil nil nil nil nil nil nil nil t)
619
620(pcase-dolist (`(,key ,trans)
621 (append iroquoian-cayuga-modifier-alist
622 iroquoian-cayuga-consonant-alist
623 iroquoian-cayuga-vowel-alist))
624 (quail-defrule key trans))
625
626
627;;; Seneca
628
629;;
630;; The orthography for the Seneca language is fairly stable with only
631;; minor variations, for example, <sy> vs. <š> (currently preferred in
632;; community orthography) for the voiceless postalveolar fricative.
633;;
634;; In the common community orthography, I'm told that acute and grave
635;; accents occur rarely and only on nasal vowels (personal
636;; communication). However, in works by Wallace Chafe, stress is
637;; indicated on non-nasal vowels, as well. The maximal set of letters
638;; with accent diacritics is included for the input method, even though
639;; many of them apparently don't occur in community orthographies.
640;;
641;; Reference works for Seneca orthography:
642;;
643;; Phyllis E. Wms. Bardeau. 2002. Onondowa'ga:' Gawe:no': New Reference
644;; Edition. Salamanca, NY: The Seneca Nation of Indians Allegany
645;; Education Department.
646;;
647;; Wallace Chafe. 2015. A Grammar of the Seneca Language. Oakland, CA:
648;; University of California Press.
649;;
650
651(defconst iroquoian-seneca-modifier-alist nil
652 "Alist of rules for modifier letters in Seneca input methods.
653Entries are as with rules in `quail-define-rules'.")
654
655(defconst iroquoian-seneca-vowel-alist
656 '(("a'" ?á)
657 ("a`" ?à)
658 ("A'" ?Á)
659 ("A`" ?À)
660 ("e'" ?é)
661 ("e`" ?è)
662 ("E'" ?É)
663 ("E`" ?È)
664 ("i'" ?í)
665 ("i`" ?ì)
666 ("I'" ?Í)
667 ("I`" ?Ì)
668 ("o'" ?ó)
669 ("o`" ?ò)
670 ("O'" ?Ó)
671 ("O`" ?Ò)
672 ("a\"" ?ä)
673 ("a\"'" ["ä́"])
674 ("a\"`" ["ä̀"])
675 ("A\"" ?Ä)
676 ("A\"'" ["Ä́"])
677 ("A\"`" ["Ä̀"])
678 ("e\"" ?ë)
679 ("e\"'" ["ë́"])
680 ("e\"`" ["ë̀"])
681 ("E\"" ?Ë)
682 ("E\"'" ["Ë́"])
683 ("E\"`" ["Ë̀"])
684 ("o\"" ?ö)
685 ("o\"'" ["ö́"])
686 ("o\"`" ["ö̀"])
687 ("O\"" ?Ö)
688 ("O\"'" ["Ö́"])
689 ("O\"`" ["Ö̀"])
690 ;; Rare (e.g., niwú’u:h 'it is tiny' [Chafe 2015]):
691 ("u'" ?ú)
692 ("u`" ?ù)
693 ("U'" ?Ú)
694 ("U`" ?Ù)
695
696 ("a''" ["a'"])
697 ("a``" ["a`"])
698 ("A''" ["A'"])
699 ("A``" ["A`"])
700 ("e''" ["e'"])
701 ("e``" ["e`"])
702 ("E''" ["E'"])
703 ("E``" ["E`"])
704 ("i''" ["i'"])
705 ("i``" ["i`"])
706 ("I''" ["I'"])
707 ("I``" ["I`"])
708 ("o''" ["o'"])
709 ("o``" ["o`"])
710 ("O''" ["O'"])
711 ("O``" ["O`"])
712 ("a\"\"" ["a\""])
713 ("a\"''" ["ä'"])
714 ("a\"``" ["ä`"])
715 ("A\"\"" ["A\""])
716 ("A\"''" ["Ä'"])
717 ("A\"``" ["Ä`"])
718 ("e\"\"" ["e\""])
719 ("e\"''" ["ë'"])
720 ("e\"``" ["ë`"])
721 ("E\"\"" ["E\""])
722 ("E\"''" ["Ë'"])
723 ("E\"``" ["Ë`"])
724 ("o\"\"" ["o\""])
725 ("o\"''" ["ö'"])
726 ("o\"``" ["ö`"])
727 ("O\"\"" ["O\""])
728 ("O\"''" ["Ö'"])
729 ("O\"``" ["Ö`"])
730 ("u''" ["u'"])
731 ("u``" ["u`"])
732 ("U''" ["U'"])
733 ("U``" ["U`"]))
734 "Alist of rules for vowel letters in Seneca input methods.
735Entries are as with rules in `quail-define-rules'.")
736
737(defconst iroquoian-seneca-consonant-alist
738 '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
739 ("s/" ?š)
740 ("s//" ["s/"])
741 ("S/" ?Š)
742 ("S//" ["S/"]))
743 "Alist of rules for consonant letters in Seneca input methods.
744Entries are as with rules in `quail-define-rules'.")
745
746(quail-define-package
747 "seneca-postfix" "Seneca" "SEE<" t
748 "Seneca (Onödowá’ga:’) input method with postfix modifiers
749
750Stress diacritics:
751
752| Key | Description | Example |
753|------+--------------+---------|
754| \\=' | Acute accent | a' -> á|
755| \\=` | Grave accent | a` -> à|
756
757Doubling any of these postfixes separates the letter and the postfix.
758
759Vowels:
760
761| Key | Translation | Description |
762|-----+-------------+------------------------------------|
763| e\" | ë | Mid front nasal vowel |
764| E\" | Ë | Mid front nasal vowel (capital) |
765| o\" | ö | Low-mid back nasal vowel |
766| O\" | Ö | Low-mid back nasal vowel (capital) |
767| a\" | ä | Low front vowel |
768| A\" | Ä | Low front vowel (capital) |
769
770a, e, i, o, and u are bound to a single key.
771
772Consonants:
773
774| Key | Translation | Description |
775|-------+-------------+--------------------------------------------|
776| ;; | \\=’ | Glottal stop |
777| s/ | š | Voiceless postalveolar fricative |
778| S/ | Š | Voiceless postalveolar fricative (capital) |
779
780d, g, h, j, k, n, s, t, w, y, and z are bound to a single key.
781
782b, m, and p are used rarely in ideophones and nicknames. They are also
783each bound to a single key.
784
785All Haudenosaunee languages, including Seneca, can be input
786simultaneously using the input method `haudenosaunee-postfix'."
787 nil t nil nil nil nil nil nil nil nil t)
788
789(pcase-dolist (`(,key ,trans)
790 (append iroquoian-seneca-modifier-alist
791 iroquoian-seneca-consonant-alist
792 iroquoian-seneca-vowel-alist))
793 (quail-defrule key trans))
794
795
796;;; Haudenosaunee (composite Northern Iroquoian)
797
798;;
799;; This input method represents a composite input method for all of the
800;; Northern Iroquoian languages included above.
801;;
802;; Although the "Iroquoian languages" is a standard term employed by
803;; linguists and scholars, some believe the term "Iroquois" to be of
804;; derogatory origin (see Dyck 2024). Hence, some prefer to refer to
805;; what are collectively termed by linguists the "Five Nations Iroquois"
806;; languages (Mohawk, Oneida, Onondaga, Cayuga, Seneca) by the autonym
807;; "Haudenosaunee" (e.g., "Haudenosaunee languages").
808;;
809;; However, it should be noted that the term "Haudenosaunee" is itself
810;; an Anglicized form, probably from Seneca Hodínöhsö:ni:h 'they make
811;; houses' or Hodínöhšo:ni:h 'People of the Long House'. Speakers of
812;; Cayuga may prefer the word Hodinǫhsǫ:nih, and speakers of Mohawk may
813;; prefer Rotinonhsón:ni or Rotinonhsíón:ni. These terms themselves
814;; collectively relate to the confederacy of Indigenous nations that has
815;; existed in what is now known as New York State in Northeastern North
816;; America for many centuries, the founding of which is retold in oral
817;; tradition in the story of The Peacemaker.
818;;
819;; It should also be noted that while Tuscarora and Wendat languages are
820;; both sometimes included under the "Haudenosaunee languages" umbrella
821;; (and by implication, those groups as a part of the Haudenosaunee
822;; Confederacy), the exact extent of what defines "Haudenosaunee" has
823;; occasionally caused controversy.
824;;
825;; Additionally, some prefer to collectively refer to the "Haudenosaunee
826;; languages" using the terms Onkwehonwehnéha (Mohawk), Ukwehuwehnéha
827;; (Oneida), Ǫgwehǫwekhá’ (Onondaga), Ǫgwehǫwéhneha:ˀ (Cayuga), and
828;; Ögwé’öwe:ka:’ (Seneca), which all mean 'in the manner of the Original
829;; People'.
830;;
831;; Bearing all of this in mind, I have opted to retain the term
832;; "Iroquoian" in the name of this file (`iroquoian.el') (and hence, in
833;; the symbol names in its namespace), while using "Haudenosaunee" in
834;; the name of the input method that encompasses all of the languages so
835;; far implemented: "haudenosaunee-postfix" --- this is the name shown
836;; as a completion candidate after users enter M-x set-input-method RET.
837;; Note that those searching for input methods for the individual
838;; languages should have no problem finding them knowing only their
839;; Anglicized names (e.g., Mohawk, Oneida, etc.), as these have been
840;; retained in the names of the corresponding input methods.
841;;
842;; Above all, I hope that these decisions help those who wish to speak,
843;; read, and write Onkwehonwehnéha.
844;;
845;; Iorihowá:nen ne aiónhnheke’ ne raotiwén:na’!
846;; It is important that the language continues to live!
847;;
848
849(defconst iroquoian-haudenosaunee-modifier-alist
850 (seq-uniq (append iroquoian-mohawk-modifier-alist
851 iroquoian-oneida-modifier-alist
852 iroquoian-onondaga-modifier-alist
853 iroquoian-cayuga-modifier-alist
854 iroquoian-seneca-modifier-alist))
855 "Alist of rules for modifier letters in Haudenosaunee input methods.
856Entries are as with rules in `quail-define-rules'.")
857
858(defconst iroquoian-haudenosaunee-vowel-alist
859 (seq-uniq (append iroquoian-mohawk-vowel-alist
860 iroquoian-oneida-vowel-alist
861 iroquoian-onondaga-vowel-alist
862 iroquoian-cayuga-vowel-alist
863 iroquoian-seneca-vowel-alist))
864 "Alist of rules for vowel letters in Haudenosaunee input methods.
865Entries are as with rules in `quail-define-rules'.")
866
867(defconst iroquoian-haudenosaunee-consonant-alist
868 (seq-uniq (append
869 '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
870 (";'" ?\N{MODIFIER LETTER GLOTTAL STOP})
871 (";:" ?\N{LATIN LETTER GLOTTAL STOP}))
872 iroquoian-mohawk-consonant-alist
873 iroquoian-oneida-consonant-alist
874 iroquoian-onondaga-consonant-alist
875 iroquoian-cayuga-consonant-alist
876 iroquoian-seneca-consonant-alist)
877 (lambda (c1 c2)
878 (equal (car c1) (car c2))))
879 "Alist of rules for consonant letters in Haudenosaunee input methods.
880Entries are as with rules in `quail-define-rules'.")
881
882(defconst iroquoian-haudenosaunee-devoicing-alist
883 '(("_" ?\N{COMBINING LOW LINE})
884 ("__" ?_))
885 "Alist of rules for devoicing characters in Haudenosaunee input methods.
886Entries are as with rules in `quail-define-rules'.")
887
888(defconst iroquoian-haudenosaunee-nasal-alist iroquoian-onondaga-nasal-alist
889 "Alist of rules for nasal modifier letters in Haudenosaunee input methods.
890Entries are as with rules in `quail-define-rules'.")
891
892(quail-define-package
893 "haudenosaunee-postfix" "Haudenosaunee" "HOD<" t
894 "Composite input method for Haudenosaunee (Northern Iroquoian) languages
895
896This input method can be used to enter the following languages:
897
898- Mohawk (Kanien’kéha / Onkwehonwehnéha)
899- Oneida (Onʌyota:ká: / Ukwehuwehnéha)
900- Cayuga (Gayogo̱ho:nǫhnéha:ˀ)
901- Onondaga (Onųdaʔgegáʔ)
902- Seneca (Onödowá’ga:’)
903
904Modifiers:
905
906| Key | Translation | Description |
907|-----+-------------+--------------------------|
908| :: | · | Vowel length (alternate) |
909
910Stress diacritics:
911
912| Key | Description | Example |
913|------+--------------+---------|
914| \\=' | Acute accent | a' -> á |
915| \\=` | Grave accent | a` -> à |
916
917Doubling any of these postfixes separates the letter and the postfix.
918
919Vowels:
920
921| Key | Translation | Description |
922|----------------------------------------------------------------------|
923| Mohawk |
924| -------------------------------------------------------------------- |
925| Single-key vowels: a e i o |
926|----------------------------------------------------------------------|
927| Oneida |
928| -------------------------------------------------------------------- |
929| e/ | ʌ | Mid central nasal vowel |
930| E/ | Ʌ | Mid central nasal vowel (capital) |
931| Single-key vowels: a e i o u |
932|----------------------------------------------------------------------|
933| Onondaga |
934| (Six Nations of the Grand River) |
935| -------------------------------------------------------------------- |
936| e, | ę | Mid front nasal vowel |
937| E, | Ę | Mid front nasal vowel (capital) |
938| o, | ǫ | Back high nasal vowel |
939| O, | Ǫ | Back high nasal vowel (capital) |
940| a\" | ä | Low front rounded vowel |
941| A\" | Ä | Low front rounded vowel (capital) |
942| -------------------------------------------------------------------- |
943| (Onondaga Nation, New York) |
944| -------------------------------------------------------------------- |
945| en~ | eñ | Mid front nasal vowel |
946| EN~ | EÑ | Mid front nasal vowel (capital) |
947| on~ | oñ | Back high nasal vowel |
948| ON~ | OÑ | Back high nasal vowel (capital) |
949| a\" | ä | Low front rounded vowel |
950| A\" | Ä | Low front rounded vowel (capital) |
951| -------------------------------------------------------------------- |
952| (Hanni Woodbury, 2003) |
953| -------------------------------------------------------------------- |
954| e, | ę | Mid front nasal vowel |
955| E, | Ę | Mid front nasal vowel (capital) |
956| u, | ų | Back high nasal vowel |
957| U, | Ų | Back high nasal vowel (capital) |
958| a/ | æ | Low front rounded vowel |
959| A/ | Æ | Low front rounded vowel (capital) |
960| -------------------------------------------------------------------- |
961| (all) |
962| -------------------------------------------------------------------- |
963| Single-key vowels: a e i o |
964|----------------------------------------------------------------------|
965| Cayuga |
966| -------------------------------------------------------------------- |
967| e, | ę | Mid front nasal vowel |
968| E, | Ę | Mid front nasal vowel (capital) |
969| o, | ǫ | Mid back nasal vowel |
970| O, | Ǫ | Mid back nasal vowel (capital) |
971| Single-key vowels: a e i o u |
972|----------------------------------------------------------------------|
973| Seneca |
974| -------------------------------------------------------------------- |
975| e\" | ë | Mid front nasal vowel |
976| E\" | Ë | Mid front nasal vowel (capital) |
977| o\" | ö | Low-mid back nasal vowel |
978| O\" | Ö | Low-mid back nasal vowel (capital) |
979| a\" | ä | Low front vowel |
980| A\" | Ä | Low front vowel (capital) |
981| Single-key vowels: a e i o u |
982
983Consonants:
984
985| Key | Translation | Description |
986|----------------------------------------------------------------------|
987| Mohawk |
988| -------------------------------------------------------------------- |
989| ;; | \\=’ | Glottal stop |
990| Single-key consonants: h k n r s t w y (b m p) |
991|----------------------------------------------------------------------|
992| Oneida |
993| -------------------------------------------------------------------- |
994| ;\\=' | ˀ | Glottal stop |
995| ;; | \\=’ | Glottal stop (alternate) |
996| Single-key consonants: h k l n s t w y |
997|----------------------------------------------------------------------|
998| Onondaga |
999| -------------------------------------------------------------------- |
1000| ;; | \\=’ | Glottal stop |
1001| ;: | ʔ | Glottal stop (alternate) |
1002| Single-key consonants: c d g h j k n s t w y |
1003|----------------------------------------------------------------------|
1004| Cayuga |
1005| -------------------------------------------------------------------- |
1006| ;\\=' | ˀ | Glottal stop |
1007| ;; | \\=’ | Glottal stop (alternate) |
1008| Single-key consonants: d g h j k n r s t w y (f) |
1009|----------------------------------------------------------------------|
1010| Seneca |
1011| -------------------------------------------------------------------- |
1012| ;; | \\=’ | Glottal stop |
1013| s/ | š | Voiceless postalveolar fricative |
1014| S/ | Š | Voiceless postalveolar fricative (capital) |
1015| Single-key consonants: d g h j k n s t w y z (b m p) |
1016
1017Devoicing:
1018
1019| Key | Description | Examples |
1020|-----+------------------------+------------------------------|
1021| _ | Combining low line | a_ -> a̲, · -> ·̲ |
1022| - | Combining macron below | a- -> a̱(after vowels only) |
1023
1024Note: Not all fonts can properly display a combining low line on all
1025letters and a combining macron below on all vowels.
1026
1027Underlining is commonly used in Oneida to indicate devoiced syllables on
1028pre-pausal forms (also called utterance-final forms). Alternatively,
1029markup or other methods can be used to create an underlining effect.
1030
1031To enter a plain underscore, the underscore twice.
1032
1033Macron below is commonly used in Cayuga to indicate devoiced vowels.
1034
1035To enter a plain hyphen after a vowel, simply type the hyphen twice.
1036
1037There are individual input methods for each of the languages that can be
1038entered with this input method: `mohawk-postfix', `oneida-postfix',
1039`onondaga-postfix', `cayuga-postfix', `seneca-postfix'."
1040 nil t nil nil nil nil nil nil nil nil t)
1041
1042(pcase-dolist (`(,key ,trans)
1043 (append iroquoian-haudenosaunee-modifier-alist
1044 iroquoian-haudenosaunee-consonant-alist
1045 iroquoian-haudenosaunee-nasal-alist
1046 iroquoian-haudenosaunee-vowel-alist
1047 iroquoian-haudenosaunee-devoicing-alist))
1048 (quail-defrule key trans))
1049
1050(provide 'iroquoian)
1051;;; iroquoian.el ends here
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 2d351dff88f..4d4d4d6beac 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -2076,7 +2076,12 @@ Interactively, EVENT is the value of `last-nonmenu-event'."
2076 (insert-file-contents file) 2076 (insert-file-contents file)
2077 (buffer-string))) 2077 (buffer-string)))
2078 (cons "name" name) 2078 (cons "name" name)
2079 (cons "filename" file)) 2079 ;; RFC 2183 declares that recipients should
2080 ;; only respect the basename of the filename
2081 ;; parameter, and the leading directories
2082 ;; might divulge private information, so we
2083 ;; only send the basename in our request.
2084 (cons "filename" (file-name-nondirectory file)))
2080 values))) 2085 values)))
2081 ((equal (plist-get input :type) "submit") 2086 ((equal (plist-get input :type) "submit")
2082 ;; We want the values from buttons if we hit a button if 2087 ;; We want the values from buttons if we hit a button if
diff --git a/lisp/net/newst-plainview.el b/lisp/net/newst-plainview.el
index 0ff7985f0dc..4122777ac8c 100644
--- a/lisp/net/newst-plainview.el
+++ b/lisp/net/newst-plainview.el
@@ -805,6 +805,7 @@ not get changed."
805 (widen) 805 (widen)
806 (put-text-property (point) pos 'nt-age 'old) 806 (put-text-property (point) pos 'nt-age 'old)
807 (newsticker--buffer-set-faces (point) pos))) 807 (newsticker--buffer-set-faces (point) pos)))
808 (newsticker--cache-save-feed (newsticker--cache-get-feed feed))
808 (set-buffer-modified-p nil))))))) 809 (set-buffer-modified-p nil)))))))
809 810
810(defun newsticker-mark-item-at-point-as-immortal () 811(defun newsticker-mark-item-at-point-as-immortal ()
@@ -1279,7 +1280,7 @@ FEED-NAME-SYMBOL tells to which feed this item belongs."
1279 (let ((img (newsticker--image-read feed-name-symbol 1280 (let ((img (newsticker--image-read feed-name-symbol
1280 disabled))) 1281 disabled)))
1281 (when img 1282 (when img
1282 (newsticker--insert-image img (car item))))) 1283 (newsticker--insert-image img (format "[logo: %s]" (car item))))))
1283 (setq format (substring format 2))) 1284 (setq format (substring format 2)))
1284 ((string= "%L" prefix) 1285 ((string= "%L" prefix)
1285 ;; logo or title 1286 ;; logo or title
@@ -1292,7 +1293,7 @@ FEED-NAME-SYMBOL tells to which feed this item belongs."
1292 (let ((img (newsticker--image-read feed-name-symbol 1293 (let ((img (newsticker--image-read feed-name-symbol
1293 disabled))) 1294 disabled)))
1294 (if img 1295 (if img
1295 (newsticker--insert-image img (car item)) 1296 (newsticker--insert-image img (format "[logo: %s]" (car item)))
1296 (when (car item) 1297 (when (car item)
1297 (setq pos-text-start (point-marker)) 1298 (setq pos-text-start (point-marker))
1298 (if (eq (newsticker--age item) 'feed) 1299 (if (eq (newsticker--age item) 'feed)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 283a545bfb4..2438029bfdd 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -718,10 +718,11 @@ class declarations.")
718 "aiter" "anext" "ascii" "breakpoint" "bytearray" "bytes" "exec" 718 "aiter" "anext" "ascii" "breakpoint" "bytearray" "bytes" "exec"
719 ;; Special attributes: 719 ;; Special attributes:
720 ;; https://docs.python.org/3/reference/datamodel.html 720 ;; https://docs.python.org/3/reference/datamodel.html
721 "__annotations__" "__closure__" "__code__" 721 "__annotations__" "__bases__" "__closure__" "__code__"
722 "__defaults__" "__dict__" "__doc__" "__globals__" 722 "__defaults__" "__dict__" "__doc__" "__firstlineno__"
723 "__kwdefaults__" "__name__" "__module__" "__package__" 723 "__globals__" "__kwdefaults__" "__name__" "__module__"
724 "__qualname__" 724 "__mro__" "__package__" "__qualname__"
725 "__static_attributes__" "__type_params__"
725 ;; Extras: 726 ;; Extras:
726 "__all__") 727 "__all__")
727 symbol-end) . font-lock-builtin-face)) 728 symbol-end) . font-lock-builtin-face))
@@ -1034,10 +1035,12 @@ It makes underscores and dots word constituent chars.")
1034 ">>" ">>=" "|" "|=" "~" "@" "@=")) 1035 ">>" ">>=" "|" "|=" "~" "@" "@="))
1035 1036
1036(defvar python--treesit-special-attributes 1037(defvar python--treesit-special-attributes
1037 '("__annotations__" "__closure__" "__code__" 1038 '("__annotations__" "__bases__" "__closure__" "__code__"
1038 "__defaults__" "__dict__" "__doc__" "__globals__" 1039 "__defaults__" "__dict__" "__doc__" "__firstlineno__"
1039 "__kwdefaults__" "__name__" "__module__" "__package__" 1040 "__globals__" "__kwdefaults__" "__name__" "__module__"
1040 "__qualname__" "__all__")) 1041 "__mro__" "__package__" "__qualname__"
1042 "__static_attributes__" "__type_params__"
1043 "__all__"))
1041 1044
1042(defvar python--treesit-exceptions 1045(defvar python--treesit-exceptions
1043 '(;; Python 2 and 3: 1046 '(;; Python 2 and 3:
diff --git a/lisp/subr.el b/lisp/subr.el
index e630087b68f..b56512aac05 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -299,7 +299,7 @@ value of last one, or nil if there are none."
299 (if body 299 (if body
300 (list 'if cond (cons 'progn body)) 300 (list 'if cond (cons 'progn body))
301 (macroexp-warn-and-return (format-message "`when' with empty body") 301 (macroexp-warn-and-return (format-message "`when' with empty body")
302 cond '(empty-body when) t))) 302 (list 'progn cond nil) '(empty-body when) t)))
303 303
304(defmacro unless (cond &rest body) 304(defmacro unless (cond &rest body)
305 "If COND yields nil, do BODY, else return nil. 305 "If COND yields nil, do BODY, else return nil.
@@ -309,7 +309,7 @@ value of last one, or nil if there are none."
309 (if body 309 (if body
310 (cons 'if (cons cond (cons nil body))) 310 (cons 'if (cons cond (cons nil body)))
311 (macroexp-warn-and-return (format-message "`unless' with empty body") 311 (macroexp-warn-and-return (format-message "`unless' with empty body")
312 cond '(empty-body unless) t))) 312 (list 'progn cond nil) '(empty-body unless) t)))
313 313
314(defsubst subr-primitive-p (object) 314(defsubst subr-primitive-p (object)
315 "Return t if OBJECT is a built-in primitive written in C. 315 "Return t if OBJECT is a built-in primitive written in C.
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index 7579608ac22..911bd72184d 100644
--- a/lisp/term/w32-win.el
+++ b/lisp/term/w32-win.el
@@ -469,10 +469,10 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
469 "application/yaml" 469 "application/yaml"
470 "application/json-seq" 470 "application/json-seq"
471 "\\`text/" 471 "\\`text/"
472 "+xml\\'" 472 "\\+xml\\'"
473 "+json\\'" 473 "\\+json\\'"
474 "+yaml\\'" 474 "\\+yaml\\'"
475 "+json-seq\\'")) 475 "\\+json-seq\\'"))
476 476
477(defun w32--mime-type-textual-p (mime-type) 477(defun w32--mime-type-textual-p (mime-type)
478 "Returns t if MIME-TYPE, a symbol, names a textual MIME type. 478 "Returns t if MIME-TYPE, a symbol, names a textual MIME type.
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 194b181f3e9..dd6079d22ab 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1738,6 +1738,8 @@ Type \\[vc-next-action] to check in changes.")
1738 (format "%d files" (length files)) 1738 (format "%d files" (length files))
1739 "this file")))) 1739 "this file"))))
1740 1740
1741(declare-function mail-text "sendmail" ())
1742(declare-function message-goto-body "message" (&optional interactive))
1741(defun vc-steal-lock (file rev owner) 1743(defun vc-steal-lock (file rev owner)
1742 "Steal the lock on FILE." 1744 "Steal the lock on FILE."
1743 (let (file-description) 1745 (let (file-description)
@@ -1758,7 +1760,10 @@ Type \\[vc-next-action] to check in changes.")
1758 ;; goes wrong, we don't want to send any mail. 1760 ;; goes wrong, we don't want to send any mail.
1759 (compose-mail owner (format "Stolen lock on %s" file-description)) 1761 (compose-mail owner (format "Stolen lock on %s" file-description))
1760 (setq default-directory (expand-file-name "~/")) 1762 (setq default-directory (expand-file-name "~/"))
1761 (goto-char (point-max)) 1763 (cond
1764 ((eq mail-user-agent 'sendmail-user-agent)
1765 (mail-text))
1766 ((message-goto-body)))
1762 (insert 1767 (insert
1763 (format "I stole the lock on %s, " file-description) 1768 (format "I stole the lock on %s, " file-description)
1764 (current-time-string) 1769 (current-time-string)
diff --git a/src/itree.c b/src/itree.c
index 749e65c2eed..f35226ad226 100644
--- a/src/itree.c
+++ b/src/itree.c
@@ -378,9 +378,9 @@ itree_inherit_offset (uintmax_t otick, struct itree_node *node)
378 node->right->offset += node->offset; 378 node->right->offset += node->offset;
379 node->offset = 0; 379 node->offset = 0;
380 } 380 }
381 /* The only thing that matters about `otick` is whether it's equal to 381 /* The only thing that matters about 'otick' is whether it's equal to
382 that of the tree. We could also "blindly" inherit from parent->otick, 382 that of the tree. We could also "blindly" inherit from parent->otick,
383 but we need to tree's `otick` anyway for when there's no parent. */ 383 but we need to tree's 'otick' anyway for when there's no parent. */
384 if (node->parent == NULL || node->parent->otick == otick) 384 if (node->parent == NULL || node->parent->otick == otick)
385 node->otick = otick; 385 node->otick = otick;
386} 386}
@@ -683,7 +683,7 @@ itree_insert_node (struct itree_tree *tree, struct itree_node *node)
683 struct itree_node *parent = NULL; 683 struct itree_node *parent = NULL;
684 struct itree_node *child = tree->root; 684 struct itree_node *child = tree->root;
685 uintmax_t otick = tree->otick; 685 uintmax_t otick = tree->otick;
686 /* It's the responsibility of the caller to set `otick` on the node, 686 /* It's the responsibility of the caller to set 'otick' on the node,
687 to "confirm" that the begin/end fields are up to date. */ 687 to "confirm" that the begin/end fields are up to date. */
688 eassert (node->otick == otick); 688 eassert (node->otick == otick);
689 689
@@ -913,8 +913,8 @@ itree_total_offset (struct itree_node *node)
913 link the tree root. 913 link the tree root.
914 914
915 Warning: DEST is left unmodified. SOURCE's child links are 915 Warning: DEST is left unmodified. SOURCE's child links are
916 unchanged. Caller is responsible for recalculation of `limit`. 916 unchanged. Caller is responsible for recalculation of 'limit'.
917 Requires both nodes to be using the same effective `offset`. */ 917 Requires both nodes to be using the same effective 'offset'. */
918static void 918static void
919itree_replace_child (struct itree_tree *tree, 919itree_replace_child (struct itree_tree *tree,
920 struct itree_node *source, 920 struct itree_node *source,
@@ -939,8 +939,8 @@ itree_replace_child (struct itree_tree *tree,
939 parent, left and right in surrounding nodes to point to SOURCE. 939 parent, left and right in surrounding nodes to point to SOURCE.
940 940
941 Warning: DEST is left unmodified. Caller is responsible for 941 Warning: DEST is left unmodified. Caller is responsible for
942 recalculation of `limit`. Requires both nodes to be using the same 942 recalculation of 'limit'. Requires both nodes to be using the same
943 effective `offset`. */ 943 effective 'offset'. */
944static void 944static void
945itree_transplant (struct itree_tree *tree, 945itree_transplant (struct itree_tree *tree,
946 struct itree_node *source, 946 struct itree_node *source,
@@ -964,38 +964,38 @@ itree_remove (struct itree_tree *tree, struct itree_node *node)
964 eassert (itree_contains (tree, node)); 964 eassert (itree_contains (tree, node));
965 eassert (check_tree (tree, true)); /* FIXME: Too expensive. */ 965 eassert (check_tree (tree, true)); /* FIXME: Too expensive. */
966 966
967 /* Find `splice`, the leaf node to splice out of the tree. When 967 /* Find 'splice', the leaf node to splice out of the tree. When
968 `node` has at most one child this is `node` itself. Otherwise, 968 'node' has at most one child this is 'node' itself. Otherwise,
969 it is the in order successor of `node`. */ 969 it is the in order successor of 'node'. */
970 itree_inherit_offset (tree->otick, node); 970 itree_inherit_offset (tree->otick, node);
971 struct itree_node *splice 971 struct itree_node *splice
972 = (node->left == NULL || node->right == NULL) 972 = (node->left == NULL || node->right == NULL)
973 ? node 973 ? node
974 : itree_subtree_min (tree->otick, node->right); 974 : itree_subtree_min (tree->otick, node->right);
975 975
976 /* Find `subtree`, the only child of `splice` (may be NULL). Note: 976 /* Find 'subtree', the only child of 'splice' (may be NULL). Note:
977 `subtree` will not be modified other than changing its parent to 977 'subtree' will not be modified other than changing its parent to
978 `splice`. */ 978 'splice'. */
979 eassert (splice->left == NULL || splice->right == NULL); 979 eassert (splice->left == NULL || splice->right == NULL);
980 struct itree_node *subtree 980 struct itree_node *subtree
981 = (splice->left != NULL) ? splice->left : splice->right; 981 = (splice->left != NULL) ? splice->left : splice->right;
982 982
983 /* Save a pointer to the parent of where `subtree` will eventually 983 /* Save a pointer to the parent of where 'subtree' will eventually
984 be in `subtree_parent`. */ 984 be in 'subtree_parent'. */
985 struct itree_node *subtree_parent 985 struct itree_node *subtree_parent
986 = (splice->parent != node) ? splice->parent : splice; 986 = (splice->parent != node) ? splice->parent : splice;
987 987
988 /* If `splice` is black removing it may violate Red-Black 988 /* If 'splice' is black removing it may violate Red-Black
989 invariants, so note this for later. */ 989 invariants, so note this for later. */
990 990
991 /* Replace `splice` with `subtree` under subtree's parent. If 991 /* Replace 'splice' with 'subtree' under subtree's parent. If
992 `splice` is black, this creates a red-red violation, so remember 992 'splice' is black, this creates a red-red violation, so remember
993 this now as the field can be overwritten when splice is 993 this now as the field can be overwritten when splice is
994 transplanted below. */ 994 transplanted below. */
995 itree_replace_child (tree, subtree, splice); 995 itree_replace_child (tree, subtree, splice);
996 bool removed_black = !splice->red; 996 bool removed_black = !splice->red;
997 997
998 /* Replace `node` with `splice` in the tree and propagate limit 998 /* Replace 'node' with 'splice' in the tree and propagate limit
999 upwards, if necessary. Note: Limit propagation can stabilize at 999 upwards, if necessary. Note: Limit propagation can stabilize at
1000 any point, so we must call from bottom to top for every node that 1000 any point, so we must call from bottom to top for every node that
1001 has a new child. */ 1001 has a new child. */
@@ -1054,8 +1054,8 @@ itree_insert_gap (struct itree_tree *tree,
1054 1054
1055 /* Nodes with front_advance starting at pos may mess up the tree 1055 /* Nodes with front_advance starting at pos may mess up the tree
1056 order, so we need to remove them first. This doesn't apply for 1056 order, so we need to remove them first. This doesn't apply for
1057 `before_markers` since in that case, all positions move identically 1057 'before_markers' since in that case, all positions move identically
1058 regardless of `front_advance` or `rear_advance`. */ 1058 regardless of 'front_advance' or 'rear_advance'. */
1059 struct itree_stack *saved = itree_stack_create (0); 1059 struct itree_stack *saved = itree_stack_create (0);
1060 struct itree_node *node = NULL; 1060 struct itree_node *node = NULL;
1061 if (!before_markers) 1061 if (!before_markers)
@@ -1208,7 +1208,7 @@ itree_node_intersects (const struct itree_node *node,
1208 1208
1209 Note that this should return all the nodes that we need to traverse 1209 Note that this should return all the nodes that we need to traverse
1210 in order to traverse the nodes selected by the current narrowing (i.e. 1210 in order to traverse the nodes selected by the current narrowing (i.e.
1211 `ITER->begin..ITER->end`) so it will also return some nodes which aren't in 1211 'ITER->begin..ITER->end') so it will also return some nodes which aren't in
1212 that narrowing simply because they may have children which are. 1212 that narrowing simply because they may have children which are.
1213 1213
1214 The code itself is very unsatisfactory because the code of each one 1214 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,
1221 struct itree_iterator *iter) 1221 struct itree_iterator *iter)
1222{ 1222{
1223 /* FIXME: Like in the previous version of the iterator, we 1223 /* FIXME: Like in the previous version of the iterator, we
1224 prune based on `limit` only when moving to a left child, 1224 prune based on 'limit' only when moving to a left child,
1225 but `limit` can also get smaller when moving to a right child 1225 but 'limit' can also get smaller when moving to a right child
1226 It's actually fairly common, so maybe it would be worthwhile 1226 It's actually fairly common, so maybe it would be worthwhile
1227 to prune a bit more aggressively here. */ 1227 to prune a bit more aggressively here. */
1228 struct itree_node *next; 1228 struct itree_node *next;
@@ -1387,10 +1387,10 @@ itree_iterator_start (struct itree_iterator *iter,
1387 iter->end = end; 1387 iter->end = end;
1388 iter->otick = tree->otick; 1388 iter->otick = tree->otick;
1389 iter->order = order; 1389 iter->order = order;
1390 /* Beware: the `node` field always holds "the next" node to consider. 1390 /* Beware: the 'node' field always holds "the next" node to consider.
1391 so it's always "one node ahead" of what the iterator loop sees. 1391 so it's always "one node ahead" of what the iterator loop sees.
1392 In most respects this makes no difference, but we depend on this 1392 In most respects this makes no difference, but we depend on this
1393 detail in `delete_all_overlays` where this allows us to modify 1393 detail in 'delete_all_overlays' where this allows us to modify
1394 the current node knowing that the iterator will not need it to 1394 the current node knowing that the iterator will not need it to
1395 find the next. */ 1395 find the next. */
1396 iter->node = itree_iterator_first_node (tree, iter); 1396 iter->node = itree_iterator_first_node (tree, iter);
diff --git a/src/itree.h b/src/itree.h
index f54dbd7f07e..23e1105a05d 100644
--- a/src/itree.h
+++ b/src/itree.h
@@ -41,7 +41,7 @@ INLINE_HEADER_BEGIN
41struct itree_node 41struct itree_node
42{ 42{
43 /* The normal parent, left and right links found in binary trees. 43 /* The normal parent, left and right links found in binary trees.
44 See also `red`, below, which completes the Red-Black tree 44 See also 'red', below, which completes the Red-Black tree
45 representation. */ 45 representation. */
46 struct itree_node *parent; 46 struct itree_node *parent;
47 struct itree_node *left; 47 struct itree_node *left;
@@ -147,13 +147,13 @@ struct itree_iterator
147 struct itree_node *node; 147 struct itree_node *node;
148 ptrdiff_t begin; 148 ptrdiff_t begin;
149 ptrdiff_t end; 149 ptrdiff_t end;
150 uintmax_t otick; /* A copy of the tree's `otick`. */ 150 uintmax_t otick; /* A copy of the tree's 'otick'. */
151 enum itree_order order; 151 enum itree_order order;
152 }; 152 };
153 153
154/* Iterate over the intervals between BEG and END in the tree T. 154/* Iterate over the intervals between BEG and END in the tree T.
155 N will hold successive nodes. ORDER can be one of : `ASCENDING`, 155 N will hold successive nodes. ORDER can be one of : 'ASCENDING',
156 `DESCENDING`, `POST_ORDER`, or `PRE_ORDER`. 156 'DESCENDING', 'POST_ORDER', or 'PRE_ORDER'.
157 It should be used as: 157 It should be used as:
158 158
159 ITREE_FOREACH (n, t, beg, end, order) 159 ITREE_FOREACH (n, t, beg, end, order)
@@ -167,12 +167,12 @@ struct itree_iterator
167 - Don't modify the tree during the iteration. 167 - Don't modify the tree during the iteration.
168 */ 168 */
169#define ITREE_FOREACH(n, t, beg, end, order) \ 169#define ITREE_FOREACH(n, t, beg, end, order) \
170 /* FIXME: We'd want to declare `n` right here, but I can't figure out 170 /* FIXME: We'd want to declare 'n' right here, but I can't figure out
171 how to make that work here: the `for` syntax only allows a single 171 how to make that work here: the 'for' syntax only allows a single
172 clause for the var declarations where we need 2 different types. 172 clause for the var declarations where we need 2 different types.
173 We could use the `struct {foo x; bar y; } p;` trick to declare two 173 We could use the 'struct {foo x; bar y; } p;' trick to declare two
174 vars `p.x` and `p.y` of unrelated types, but then none of the names 174 vars 'p.x' and 'p.y' of unrelated types, but then none of the names
175 of the vars matches the `n` we receive :-(. */ \ 175 of the vars matches the 'n' we receive :-(. */ \
176 if (!t) \ 176 if (!t) \
177 { } \ 177 { } \
178 else \ 178 else \
diff --git a/src/nsterm.m b/src/nsterm.m
index 8862a74f129..47ce20455c5 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -7899,6 +7899,9 @@ ns_in_echo_area (void)
7899 7899
7900 NSTRACE_RETURN_SIZE (frameSize); 7900 NSTRACE_RETURN_SIZE (frameSize);
7901 7901
7902 /* Trigger `move-frame-functions' (Bug#74074). */
7903 [self windowDidMove:(NSNotification *)sender];
7904
7902 return frameSize; 7905 return frameSize;
7903} 7906}
7904 7907
diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el
index 6f28e057342..e12e3c62e0c 100644
--- a/test/lisp/subr-tests.el
+++ b/test/lisp/subr-tests.el
@@ -454,7 +454,11 @@
454 x))) 454 x)))
455 (should (= x 2))) 455 (should (= x 2)))
456 (should (equal (macroexpand-all '(when a b c d)) 456 (should (equal (macroexpand-all '(when a b c d))
457 '(if a (progn b c d))))) 457 '(if a (progn b c d))))
458 (with-suppressed-warnings ((empty-body when unless))
459 (should (equal (when t) nil))
460 (should (equal (unless t) nil))
461 (should (equal (unless nil) nil))))
458 462
459(ert-deftest subr-test-xor () 463(ert-deftest subr-test-xor ()
460 "Test `xor'." 464 "Test `xor'."