commit 63e1b42f5b69d9a7346921b4c1998d7a3a8ae223 (HEAD, refs/remotes/origin/master) Author: Eli Zaretskii Date: Thu Jul 14 09:33:26 2022 +0300 ; * lisp/leim/quail/indian.el (tamil-translation-rules): Doc fix. diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el index 62836f3131..e652f108dd 100644 --- a/lisp/leim/quail/indian.el +++ b/lisp/leim/quail/indian.el @@ -496,13 +496,13 @@ Full key sequences are listed below:" ("ௐ" "OM")) "List of input sequences to translate to Tamil characters. Each element should be (CHARACTER INPUT-SEQUENCES...) where -CHARACTER is the Tamil character, and INPUT-SEQUENCES is a list -of input sequences which produce that character. +CHARACTER is the Tamil character, and INPUT-SEQUENCES are one +or more input sequences which produce that character. CHARACTER is considered as a consonant (மெய் எழுத்து) if it ends with a pulli (virama). -CHARACTER that is neither a vowel nor a consonant are inserted as +CHARACTER that is neither a vowel nor a consonant is inserted as is." :group 'tamil-input :type '(alist :key-type string :value-type (repeat string)) commit f6679ccceb83fdc49ec7e88e7be0735efa6702da Author: Visuwesh Date: Sun Jul 10 08:59:40 2022 +0530 Add new customizable phonetic Tamil input method * lisp/language/indian.el ("Tamil"): Change the default input method of the Tamil language environment to the new input method. * lisp/leim/quail/indian.el (quail-tamil-itrans-compute-syllable-table): New function extracted from... (quail-tamil-itrans-syllable-table): ... here. Use the above function. (quail-tamil-itrans--consonant-order): Auxiliary variable for the above function. (quail-tamil-itrans-compute-signs-table): Add new VARIOUS argument. (quail-tamil-itrans-various-signs-and-digits-table) (quail-tamil-itrans-various-signs-table): Adjust call to the above function. ("tamil-phonetic"): Add new input method. (tamil-input): New group for the input method. (tamil-translation-rules): New defcustom for the input method to change the translation rules. (tamil--syllable-table, tamil--signs-table, tamil--hashtables) (tamil--vowel-signs): Internal variables used by the input method. (tamil--setter, tamil--make-tables) (tamil--update-quail-rules): Internal functions for the input method. (bug#56323) * etc/NEWS: Announce the new input method. diff --git a/etc/NEWS b/etc/NEWS index da2b158024..19f6879a8c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1047,6 +1047,13 @@ supported. Type 'C-u C-h t' to select it in case your language setup does not do so automatically. +--- +*** New default phonetic input method for the Tamil language environment. +The default input method for the Tamil language environment is now +"tamil-phonetic" which is a customizable phonetic input method. To +change the input method's translation rules, customize the user option +'tamil-translation-rules'. + * Changes in Specialized Modes and Packages in Emacs 29.1 diff --git a/lisp/language/indian.el b/lisp/language/indian.el index 2887d410ad..407173827f 100644 --- a/lisp/language/indian.el +++ b/lisp/language/indian.el @@ -109,7 +109,7 @@ are supported in this language environment.")) "Tamil" '((charset unicode) (coding-system utf-8) (coding-priority utf-8) - (input-method . "tamil-itrans") + (input-method . "tamil-phonetic") (sample-text . "Tamil (தமிழ்) வணக்கம்") (documentation . "\ South Indian Language Tamil is supported in this language environment.")) diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el index 04e95b0737..62836f3131 100644 --- a/lisp/leim/quail/indian.el +++ b/lisp/leim/quail/indian.el @@ -127,47 +127,34 @@ indian-mlm-itrans-v5-hash "malayalam-itrans" "Malayalam" "MlmIT" "Malayalam transliteration by ITRANS method.") -(defvar quail-tamil-itrans-syllable-table - (let ((vowels - '(("அ" nil "a") - ("ஆ" "ா" "A") - ("இ" "ி" "i") - ("ஈ" "ீ" "I") - ("உ" "ு" "u") - ("ஊ" "ூ" "U") - ("எ" "ெ" "e") - ("ஏ" "ே" "E") - ("ஐ" "ை" "ai") - ("ஒ" "ொ" "o") - ("ஓ" "ோ" "O") - ("ஔ" "ௌ" "au"))) - (consonants - '(("க" "k") ; U+0B95 - ("ங" "N^") ; U+0B99 - ("ச" "ch") ; U+0B9A - ("ஞ" "JN") ; U+0B9E - ("ட" "T") ; U+0B9F - ("ண" "N") ; U+0BA3 - ("த" "t") ; U+0BA4 - ("ந" "n") ; U+0BA8 - ("ப" "p") ; U+0BAA - ("ம" "m") ; U+0BAE - ("ய" "y") ; U+0BAF - ("ர" "r") ; U+0BB0 - ("ல" "l") ; U+0BB2 - ("வ" "v") ; U+0BB5 - ("ழ" "z") ; U+0BB4 - ("ள" "L") ; U+0BB3 - ("ற" "rh") ; U+0BB1 - ("ன" "nh") ; U+0BA9 - ("ஜ" "j") ; U+0B9C - ("ஶ" nil) ; U+0BB6 - ("ஷ" "Sh") ; U+0BB7 - ("ஸ" "s") ; U+0BB8 - ("ஹ" "h") ; U+0BB9 - ("க்ஷ" "x" ) ; U+0B95 - )) - (virama #x0BCD) +;; This is needed since the Unicode codepoint order does not reflect +;; the actual order in the Tamil language. +(defvar quail-tamil-itrans--consonant-order + '("க" "ங" "ச" "ஞ" "ட" "ண" + "த" "ந" "ப" "ம" "ய" "ர" + "ல" "வ" "ழ" "ள" "ற" "ன" + "ஜ" "ஸ" "ஷ" "ஹ" "க்ஷ" + "க்‌ஷ" "ஶ")) + +(defun quail-tamil-itrans-compute-syllable-table (vowels consonants) + "Return the syllable table for the input method as a string. +VOWELS is a list of (VOWEL SIGN INPUT-SEQ) where VOWEL is the +Tamil vowel character, SIGN is the vowel sign corresponding to +that vowel character or nil for none, and INPUT-SEQ is the input +sequence to insert VOWEL. + +CONSONANTS is a list of (CONSONANT INPUT-SEQ...) where CONSONANT +is the Tamil consonant character, and INPUT-SEQ is one or more +strings that describe how to insert CONSONANT." + (setq vowels (sort vowels + (lambda (x y) + (string-lessp (car x) (car y))))) + (setq consonants + (sort consonants + (lambda (x y) + (or (seq-position (car x) quail-tamil-itrans--consonant-order) 1000) + (or (seq-position (car y) quail-tamil-itrans--consonant-order) 1000)))) + (let ((virama #x0BCD) clm) (with-temp-buffer (insert "\n") @@ -197,21 +184,45 @@ (insert (propertize "\t" 'display (list 'space :align-to clm)) (car c) (or (nth 1 v) "")) (setq clm (+ clm 6))) - (insert "\n" (or (nth 1 c) "") - (propertize "\t" 'display '(space :align-to 4)) - "|") - (setq clm 6) - - (dolist (v vowels) - (apply #'insert (propertize "\t" 'display (list 'space :align-to clm)) - (if (nth 1 c) (list (nth 1 c) (nth 2 v)) (list ""))) - (setq clm (+ clm 6)))) + (dolist (ct (cdr c)) + (insert "\n" (or ct "") + (propertize "\t" 'display '(space :align-to 4)) + "|") + (setq clm 6) + (dolist (v vowels) + (apply #'insert (propertize "\t" 'display (list 'space :align-to clm)) + (if ct (list ct (nth 2 v)) (list ""))) + (setq clm (+ clm 6))))) (insert "\n") (insert "----+") (insert-char ?- 74) (insert "\n") (buffer-string)))) +(defvar quail-tamil-itrans-syllable-table + (quail-tamil-itrans-compute-syllable-table + (let ((vowels (car indian-tml-base-table)) + trans v ret) + (dotimes (i (length vowels)) + (when (setq v (nth i vowels)) + (when (characterp (car v)) + (setcar v (string (car v)))) + (setq trans (nth i (car indian-itrans-v5-table-for-tamil))) + (push (append v (list (if (listp trans) (car trans) trans))) + ret))) + ret) + (let ((consonants (cadr indian-tml-base-table)) + trans c ret) + (dotimes (i (length consonants)) + (when (setq c (nth i consonants)) + (when (characterp c) + (setq c (string c))) + (setq trans (nth i (cadr indian-itrans-v5-table-for-tamil))) + (push (cons c (if (listp trans) trans (list trans))) + ret))) + (setq ret (nreverse ret)) + ret))) + (defvar quail-tamil-itrans-numerics-and-symbols-table (let ((numerics '((?௰ "பத்து") (?௱ "நூறு") (?௲ "ஆயிரம்"))) (symbols '((?௳ "நாள்") (?௴ "மாதம்") (?௵ "வருடம்") @@ -244,25 +255,28 @@ (insert "\n") (buffer-string)))) -(defun quail-tamil-itrans-compute-signs-table (digitp) +(defun quail-tamil-itrans-compute-signs-table (digitp various) "Compute the signs table for the tamil-itrans input method. -If DIGITP is non-nil, include the digits translation as well." - (let ((various '((?ஃ . "H") ("ஸ்ரீ" . "srii") (?ௐ))) - (digits "௦௧௨௩௪௫௬௭௮௯") +If DIGITP is non-nil, include the digits translation as well. +If VARIOUS is non-nil, then it should a list of (CHAR TRANS) +where CHAR is the character/string to translate and TRANS is +CHAR's translation." + (let ((digits "௦௧௨௩௪௫௬௭௮௯") (width 6) clm) (with-temp-buffer - (insert "\n" (make-string 18 ?-) "+") - (when digitp (insert (make-string 60 ?-))) + (insert "\n" (make-string 18 ?-)) + (when digitp + (insert "+" (make-string 60 ?-))) (insert "\n") (insert (propertize "\t" 'display '(space :align-to 5)) "various" - (propertize "\t" 'display '(space :align-to 18)) "|") + (propertize "\t" 'display '(space :align-to 18))) (when digitp (insert - (propertize "\t" 'display '(space :align-to 45)) "digits")) - (insert "\n" (make-string 18 ?-) "+") + "|" (propertize "\t" 'display '(space :align-to 45)) "digits")) + (insert "\n" (make-string 18 ?-)) (when digitp - (insert (make-string 60 ?-))) + (insert "+" (make-string 60 ?-))) (insert "\n") (setq clm 0) @@ -270,7 +284,8 @@ If DIGITP is non-nil, include the digits translation as well." (insert (propertize "\t" 'display (list 'space :align-to clm)) (car (nth i various))) (setq clm (+ clm width))) - (insert (propertize "\t" 'display '(space :align-to 18)) "|") + (when digitp + (insert (propertize "\t" 'display '(space :align-to 18)) "|")) (setq clm 20) (when digitp (dotimes (i 10) @@ -281,25 +296,28 @@ If DIGITP is non-nil, include the digits translation as well." (setq clm 0) (dotimes (i (length various)) (insert (propertize "\t" 'display (list 'space :align-to clm)) - (or (cdr (nth i various)) "")) + (or (cadr (nth i various)) "")) (setq clm (+ clm width))) - (insert (propertize "\t" 'display '(space :align-to 18)) "|") + (when digitp + (insert (propertize "\t" 'display '(space :align-to 18)) "|")) (setq clm 20) (when digitp (dotimes (i 10) (insert (propertize "\t" 'display (list 'space :align-to clm)) (format "%d" i)) (setq clm (+ clm width)))) - (insert "\n" (make-string 18 ?-) "+") + (insert "\n" (make-string 18 ?-)) (when digitp - (insert (make-string 60 ?-) "\n")) + (insert "+" (make-string 60 ?-) "\n")) (buffer-string)))) (defvar quail-tamil-itrans-various-signs-and-digits-table - (quail-tamil-itrans-compute-signs-table t)) + (quail-tamil-itrans-compute-signs-table + t '((?ஃ "H") ("ஸ்ரீ" "srii") (?ௐ "OM")))) (defvar quail-tamil-itrans-various-signs-table - (quail-tamil-itrans-compute-signs-table nil)) + (quail-tamil-itrans-compute-signs-table + nil '((?ஃ "H") ("ஸ்ரீ" "srii") (?ௐ "OM")))) (if nil (quail-define-package "tamil-itrans" "Tamil" "TmlIT" t "Tamil ITRANS")) @@ -347,6 +365,160 @@ Their descriptions are included for easy reference. Full key sequences are listed below:") +;;; +;;; Tamil phonetic input method +;;; + +;; Define the input method straightaway. +(quail-define-package "tamil-phonetic" "Tamil" "ழ" t + "Customisable Tamil phonetic input method. +To change the translation rules of the input method, customize +`tamil-translation-rules'. + +To use native Tamil digits, customize `tamil-translation-rules' +accordingly. + +To end the current translation process, say \\\\[quail-select-current] (defined in +`quail-translation-keymap'). This is useful when there's a +conflict between two possible translation. + +The current input scheme is: + +### Basic syllables (உயிர்மெய் எழுத்துக்கள்) ### +\\=\\ + +### Miscellaneous #### +\\=\\ + +The following characters have NO input sequence associated with +them by default. Their descriptions are included for easy +reference. +\\=\\ + +Full key sequences are listed below:" + nil nil nil nil nil nil t) + +(defvar tamil--syllable-table nil) +(defvar tamil--signs-table nil) +(defvar tamil--hashtables + (cons (make-hash-table :test #'equal) + (make-hash-table :test #'equal))) +(defvar tamil--vowel-signs + '(("அ" . t) ("ஆ" . ?ா) ("இ" . ?ி) ("ஈ" . ?ீ) + ("உ" . ?ு) ("ஊ" . ?ூ) ("எ" . ?ெ) ("ஏ" . ?ே) + ("ஐ" . ?ை) ("ஒ" . ?ொ) ("ஓ" . ?ோ) ("ஔ" . ?ௌ))) + +(defun tamil--setter (sym val) + (set-default sym val) + (tamil--update-quail-rules val)) + +(defun tamil--make-tables (rules) + (let (v v-table v-trans + c-table c-trans + m-table m-trans) + (dolist (ch rules) + (cond + ;; Vowel. + ((setq v (assoc-default (car ch) tamil--vowel-signs)) + (push (list (car ch) (and (characterp v) v)) v-table) + (push (cdr ch) v-trans)) + ;; Consonant. It needs to end with pulli. + ((string-suffix-p "்" (car ch)) + ;; Strip the pulli now. + (push (substring (car ch) 0 -1) c-table) + (push (cdr ch) c-trans)) + ;; If nothing else, then consider it a misc character. + (t (push (car ch) m-table) + (push (cdr ch) m-trans)))) + (list v-table v-trans c-table c-trans m-table m-trans))) + +(defun tamil--update-quail-rules (rules &optional name) + ;; This function does pretty much what `indian-make-hash' does + ;; except that we don't try to copy the structure of + ;; `indian-tml-base-table' which leads to less code hassle. + (let* ((quail-current-package (assoc (or name "tamil-phonetic") quail-package-alist)) + (tables (tamil--make-tables rules)) + (v (nth 0 tables)) + (v-trans (nth 1 tables)) + (c (nth 2 tables)) + (c-trans (nth 3 tables)) + (m (nth 4 tables)) + (m-trans (nth 5 tables)) + (pulli (string #x0BCD))) + (clrhash (car tamil--hashtables)) + (clrhash (cdr tamil--hashtables)) + (indian--puthash-v v v-trans tamil--hashtables) + (indian--puthash-c c c-trans pulli tamil--hashtables) + (indian--puthash-cv c c-trans v v-trans tamil--hashtables) + (indian--puthash-m m m-trans tamil--hashtables) + ;; Now override the current translation rules. + ;; Empty quail map is '(list nil)'. + (setf (nth 2 quail-current-package) '(nil)) + (maphash (lambda (k v) + (quail-defrule k (if (length= v 1) + (string-to-char v) + (vector v)))) + (cdr tamil--hashtables)) + (setq tamil--syllable-table + (quail-tamil-itrans-compute-syllable-table + (mapcar (lambda (ch) (append ch (pop v-trans))) v) + (mapcar (lambda (ch) (cons ch (pop c-trans))) c)) + tamil--signs-table + (quail-tamil-itrans-compute-signs-table + nil + (append (mapcar (lambda (ch) (cons ch (pop m-trans))) m) + (and (gethash "ஸ்" (car tamil--hashtables)) + `(("ஸ்ரீ" ,(concat (gethash "ஸ்" (car tamil--hashtables)) + (gethash "ரீ" (car tamil--hashtables))))))))))) + +(defgroup tamil-input nil + "Translation rules for the Tamil input method." + :prefix "tamil-" + :group 'leim) + +(defcustom tamil-translation-rules + ;; Vowels. + '(("அ" "a") ("ஆ" "aa") ("இ" "i") ("ஈ" "ii") + ("உ" "u") ("ஊ" "uu") ("எ" "e") ("ஏ" "ee") + ("ஐ" "ai") ("ஒ" "o") ("ஓ" "oo") ("ஔ" "au" "ow") + + ;; Consonants. + ("க்" "k" "g") ("ங்" "ng") ("ச்" "ch" "s") ("ஞ்" "nj") ("ட்" "t" "d") + ("ண்" "N") ("த்" "th" "dh") ("ந்" "nh") ("ப்" "p" "b") ("ம்" "m") + ("ய்" "y") ("ர்" "r") ("ல்" "l") ("வ்" "v") ("ழ்" "z" "zh") + ("ள்" "L") ("ற்" "rh") ("ன்" "n") + ;; Sanskrit. + ("ஜ்" "j") ("ஸ்" "S") ("ஷ்" "sh") ("ஹ்" "h") + ("க்‌ஷ்" "ksh") ("க்ஷ்" "ksH") ("ஶ்" "Z") + + ;; Misc. ஃ is neither a consonant nor a vowel. + ("ஃ" "F" "q") + ("ௐ" "OM")) + "List of input sequences to translate to Tamil characters. +Each element should be (CHARACTER INPUT-SEQUENCES...) where +CHARACTER is the Tamil character, and INPUT-SEQUENCES is a list +of input sequences which produce that character. + +CHARACTER is considered as a consonant (மெய் எழுத்து) if it ends +with a pulli (virama). + +CHARACTER that is neither a vowel nor a consonant are inserted as +is." + :group 'tamil-input + :type '(alist :key-type string :value-type (repeat string)) + :set #'tamil--setter + :version "29.1" + :options + (delq nil + (append (mapcar #'car tamil--vowel-signs) + (mapcar (lambda (x) (if (characterp x) + (string x #x0BCD) + (and x (concat x "்")))) + (nth 1 indian-tml-base-table)) + '("ஃ" "ௐ") + ;; Digits. + (mapcar #'string (nth 3 indian-tml-base-digits-table))))) + ;;; ;;; Input by Inscript ;;; commit d37ba6f259b972aa44c66ecb76210e03a3084183 Author: Po Lu Date: Thu Jul 14 11:47:00 2022 +0800 Fix killing Emacs upon display disconnect * src/xterm.c (x_connection_closed): On Xt builds terminals can be left alive without any frames on them, so take that into account. (bug#56528) diff --git a/src/xterm.c b/src/xterm.c index 3dfbe111d3..1d0e69d32b 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -23531,7 +23531,11 @@ For details, see etc/PROBLEMS.\n", unblock_input (); - if (terminal_list == 0) + /* Sometimes another terminal is still alive, but deleting this + terminal caused all frames to vanish. In that case, simply kill + Emacs, since the next redisplay will abort as there is no more + selected frame. (bug#56528) */ + if (terminal_list == 0 || NILP (selected_frame)) Fkill_emacs (make_fixnum (70), Qnil); totally_unblock_input (); commit 9a888323c60c60fb37f471ef03f0bcdff91cb850 Author: Po Lu Date: Thu Jul 14 09:11:37 2022 +0800 ; * src/xterm.c (x_error_handler): Fix magic numbers. diff --git a/src/xterm.c b/src/xterm.c index 284a08769a..3dfbe111d3 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -805,6 +805,20 @@ static int current_finish; static struct input_event *current_hold_quit; #endif +#ifdef HAVE_XINPUT2 +#ifndef X_XIGrabDevice +#define X_XIGrabDevice 51 +#endif + +#ifndef X_XIUngrabDevice +#define X_XIUngrabDevice 52 +#endif + +#ifndef X_XIAllowEvents +#define X_XIAllowEvents 53 +#endif +#endif + /* Queue selection requests in `pending_selection_requests' if more than 0. */ static int x_use_pending_selection_requests; @@ -23579,15 +23593,13 @@ x_error_handler (Display *display, XErrorEvent *event) (that happens a lot in xmenu.c), just ignore the error. */ #ifdef HAVE_XINPUT2 - /* 51 is X_XIGrabDevice and 52 is X_XIUngrabDevice. - - 53 is X_XIAllowEvents. We handle errors from that here to avoid - a sync in handle_one_xevent. */ + /* Handle errors from some specific XI2 requests here to avoid a + sync in handle_one_xevent. */ if (dpyinfo && dpyinfo->supports_xi2 && event->request_code == dpyinfo->xi2_opcode - && (event->minor_code == 51 - || event->minor_code == 52 - || event->minor_code == 53)) + && (event->minor_code == X_XIGrabDevice + || event->minor_code == X_XIUngrabDevice + || event->minor_code == X_XIAllowEvents)) return 0; #endif commit e4030f25f98d2ac9c638e573b0ab6e6b0a35f38b Author: Stefan Kangas Date: Wed Jul 13 21:03:48 2022 +0200 ; Auto-commit of loaddefs files. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 98dad181f4..dfbdf401dc 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -639,7 +639,6 @@ hooks, by which independent code can cooperate with allout without changes to the allout core. Here are key ones: `allout-mode-hook' -`allout-mode-deactivate-hook' (deprecated) `allout-mode-off-hook' `allout-exposure-change-functions' `allout-structure-added-functions' @@ -1483,6 +1482,7 @@ Major mode for editing Autoconf configure.ac files. ;;; Generated autoloads from autoinsert.el +(put 'auto-insert 'safe-local-variable #'null) (autoload 'auto-insert "autoinsert" "\ Insert default contents into new files if variable `auto-insert' is non-nil. Matches the visited file name against the elements of `auto-insert-alist'." t nil) @@ -2453,6 +2453,7 @@ When called non-interactively, optional second argument NEW-WINDOW is used instead of `browse-url-new-window-flag'. (fn URL &optional NEW-WINDOW)" t nil) +(make-obsolete 'browse-url-mozilla 'nil "29.1") (autoload 'browse-url-firefox "browse-url" "\ Ask the Firefox WWW browser to load URL. Defaults to the URL around or before point. Passes the strings @@ -2542,6 +2543,7 @@ When called non-interactively, optional second argument NEW-WINDOW is used instead of `browse-url-new-window-flag'. (fn URL &optional NEW-WINDOW)" t nil) +(make-obsolete 'browse-url-w3 'nil "29.1") (autoload 'browse-url-w3-gnudoit "browse-url" "\ Ask another Emacs running gnuserv to load the URL using the W3 browser. The `browse-url-gnudoit-program' program is used with options given by @@ -2729,7 +2731,6 @@ it is disabled. ;;; Generated autoloads from emacs-lisp/bytecomp.el (put 'byte-compile-dynamic 'safe-local-variable 'booleanp) -(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) (put 'byte-compile-dynamic-docstrings 'safe-local-variable 'booleanp) (put 'byte-compile-error-on-warn 'safe-local-variable 'booleanp) (put 'byte-compile-warnings 'safe-local-variable (lambda (v) (or (symbolp v) (null (delq nil (mapcar (lambda (x) (not (symbolp x))) v)))))) @@ -5050,6 +5051,8 @@ evaluate `compilation-shell-minor-mode'. The mode's hook is called both when the mode is enabled and when it is disabled. +\\{compilation-shell-minor-mode-map} + (fn &optional ARG)" t nil) (autoload 'compilation-minor-mode "compile" "\ Toggle Compilation minor mode. @@ -5073,6 +5076,8 @@ evaluate `compilation-minor-mode'. The mode's hook is called both when the mode is enabled and when it is disabled. +\\{compilation-minor-mode-map} + (fn &optional ARG)" t nil) (autoload 'compilation-next-error-function "compile" "\ Advance to the next error message and visit the file where the error was. @@ -6139,7 +6144,6 @@ The mode's hook is called both when the mode is enabled and when it is disabled. (fn &optional ARG)" t nil) -(define-obsolete-function-alias 'turn-on-cwarn-mode 'cwarn-mode "24.1") (put 'global-cwarn-mode 'globalized-minor-mode t) (defvar global-cwarn-mode nil "\ Non-nil if Global Cwarn mode is enabled. @@ -7269,8 +7273,11 @@ it is disabled. (autoload 'dig "dig" "\ Query addresses of a DOMAIN using dig. See `dig-invoke' for an explanation for the parameters. -When called interactively, DOMAIN is prompted for. If given a prefix, -also prompt for the QUERY-TYPE parameter. +When called interactively, DOMAIN is prompted for. + +If given a \\[universal-argument] prefix, also prompt for the QUERY-TYPE parameter. + +If given a \\[universal-argument] \\[universal-argument] prefix, also prompt for the SERVER parameter. (fn DOMAIN &optional QUERY-TYPE QUERY-CLASS QUERY-OPTION DIG-OPTION SERVER)" t nil) (register-definition-prefixes "dig" '("dig-" "query-dig")) @@ -8406,7 +8413,7 @@ A second call of this function without changing point inserts the next match. A call with prefix PREFIX reads the symbol to insert from the minibuffer with completion. -(fn PREFIX)" '("P") nil) +(fn PREFIX)" t nil) (autoload 'ebrowse-tags-loop-continue "ebrowse" "\ Repeat last operation on files in tree. FIRST-TIME non-nil means this is not a repetition, but the first time. @@ -9078,6 +9085,11 @@ It creates an autoload function for CNAME's constructor. ;;; Generated autoloads from emacs-lisp/eieio-custom.el +(autoload 'customize-object "eieio-custom" "\ +Customize OBJ in a custom buffer. +Optional argument GROUP is the sub-group of slots to display. + +(fn OBJ &optional GROUP)" nil nil) (register-definition-prefixes "eieio-custom" '("eieio-")) @@ -9088,6 +9100,18 @@ It creates an autoload function for CNAME's constructor. ;;; Generated autoloads from emacs-lisp/eieio-opt.el +(autoload 'eieio-browse "eieio-opt" "\ +Create an object browser window to show all objects. +If optional ROOT-CLASS, then start with that, otherwise start with +variable `eieio-default-superclass'. + +(fn &optional ROOT-CLASS)" t nil) +(define-obsolete-function-alias 'eieio-help-class 'cl--describe-class "25.1") +(autoload 'eieio-help-constructor "eieio-opt" "\ +Describe CTR if it is a class constructor. + +(fn CTR)" nil nil) +(make-obsolete 'eieio-help-constructor '"use `describe-function' or `cl--describe-class'." "29.1") (register-definition-prefixes "eieio-opt" '("eieio-")) @@ -9393,7 +9417,7 @@ See also `emacs-lock-unlockable-modes', which exempts buffers under some major modes from being locked under some circumstances. (fn &optional ARG)" t nil) -(register-definition-prefixes "emacs-lock" '("emacs-lock-" "toggle-emacs-lock")) +(register-definition-prefixes "emacs-lock" '("emacs-lock-")) ;;; Generated autoloads from textmodes/emacs-news-mode.el @@ -9914,7 +9938,7 @@ When present, ID should be an opaque object used to identify the connection unequivocally. This is rarely needed and not available interactively. -(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) (USER (erc-compute-user)) PASSWORD (FULL-NAME (erc-compute-full-name)) ID)" '((erc-select-read-args)) nil) +(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) (USER (erc-compute-user)) PASSWORD (FULL-NAME (erc-compute-full-name)) ID)" t nil) (defalias 'erc-select #'erc) (autoload 'erc-tls "erc" "\ ERC is a powerful, modular, and extensible IRC client. @@ -9961,7 +9985,7 @@ symbol composed of letters from the Latin alphabet.) This option is generally unneeded, however. See info node `(erc) Connecting' for use cases. Not available interactively. -(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) (USER (erc-compute-user)) PASSWORD (FULL-NAME (erc-compute-full-name)) CLIENT-CERTIFICATE ID)" '((let ((erc-default-port erc-default-port-tls)) (erc-select-read-args))) nil) +(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) (USER (erc-compute-user)) PASSWORD (FULL-NAME (erc-compute-full-name)) CLIENT-CERTIFICATE ID)" t nil) (autoload 'erc-handle-irc-url "erc" "\ Use ERC to IRC on HOST:PORT in CHANNEL as USER with PASSWORD. If ERC is already connected to HOST:PORT, simply /join CHANNEL. @@ -10177,7 +10201,9 @@ it has to be wrapped in `(eval (quote ...))'. If NAME is already defined as a test and Emacs is running in batch mode, an error is signalled. -(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags \\='(TAG...)] BODY...)" nil 'macro) +(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags \\='(TAG...)] BODY...)" nil t) +(function-put 'ert-deftest 'doc-string-elt 3) +(function-put 'ert-deftest 'lisp-indent-function 2) (autoload 'ert-run-tests-batch "ert" "\ Run the tests specified by SELECTOR, printing results to the terminal. @@ -10970,6 +10996,8 @@ If BUFFER, the data to be rendered is in that buffer. In that case, this function doesn't actually fetch URL. BUFFER will be killed after rendering. +For more information, see Info node `(eww) Top'. + (fn URL &optional NEW-BUFFER BUFFER)" t nil) (defalias 'browse-web 'eww) (autoload 'eww-open-file "eww" "\ @@ -11489,6 +11517,12 @@ double prefix to wrap forward, triple to wrap backwards. Actual search is done by the function `ffap-next-guess'. (fn &optional BACK WRAP)" t nil) +(autoload 'ffap-machine-at-point "ffap" "\ +Return machine name at point if it exists, or nil." nil nil) +(autoload 'ffap-url-at-point "ffap" "\ +Return URL from around point if it exists, or nil. + +Sets the variable `ffap-string-at-point-region' to the bounds of URL, if any." nil nil) (autoload 'find-file-at-point "ffap" "\ Find FILENAME, guessing a default from text around point. If `ffap-url-regexp' is not nil, the FILENAME may also be an URL. @@ -11798,6 +11832,11 @@ use in place of \"-ls\" as the final argument. Collect output in the \"*Find*\" buffer. To kill the job before it finishes, type \\[kill-find]. +For more information on how to write valid find expressions for +ARGS, see Info node `(find) Finding Files'. If you are not +using GNU findutils (on macOS and *BSD systems), see instead the +man page for \"find\". + (fn DIR ARGS)" t nil) (autoload 'find-dired-with-command "find-dired" "\ Run `find' and go into Dired mode on a buffer of the output. @@ -12245,6 +12284,8 @@ evaluate `flymake-mode'. The mode's hook is called both when the mode is enabled and when it is disabled. +\\{flymake-mode-map} + (fn &optional ARG)" t nil) (autoload 'flymake-mode-on "flymake" "\ Turn Flymake mode on." nil nil) @@ -15819,7 +15860,8 @@ inlined into the compiled format versions. This means that if you change its definition, you should explicitly call `ibuffer-recompile-formats'. -(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)" nil 'macro) +(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)" nil t) +(function-put 'define-ibuffer-column 'lisp-indent-function 'defun) (autoload 'define-ibuffer-sorter "ibuf-macs" "\ Define a method of sorting named NAME. DOCUMENTATION is the documentation of the function, which will be called @@ -15830,7 +15872,9 @@ For sorting, the forms in BODY will be evaluated with `a' bound to one buffer object, and `b' bound to another. BODY should return a non-nil value if and only if `a' is \"less than\" `b'. -(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil 'macro) +(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil t) +(function-put 'define-ibuffer-sorter 'lisp-indent-function 1) +(function-put 'define-ibuffer-sorter 'doc-string-elt 2) (autoload 'define-ibuffer-op "ibuf-macs" "\ Generate a function which operates on a buffer. OP becomes the name of the function; if it doesn't begin with @@ -15869,7 +15913,9 @@ BODY define the operation; they are forms to evaluate per each marked buffer. BODY is evaluated with `buf' bound to the buffer object. -(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING BEFORE AFTER COMPLEX) &rest BODY)" nil 'macro) +(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING BEFORE AFTER COMPLEX) &rest BODY)" nil t) +(function-put 'define-ibuffer-op 'lisp-indent-function 2) +(function-put 'define-ibuffer-op 'doc-string-elt 3) (autoload 'define-ibuffer-filter "ibuf-macs" "\ Define a filter named NAME. DOCUMENTATION is the documentation of the function. @@ -15884,7 +15930,9 @@ not a particular buffer should be displayed or not. The forms in BODY will be evaluated with BUF bound to the buffer object, and QUALIFIER bound to the current value of the filter. -(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" nil 'macro) +(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" nil t) +(function-put 'define-ibuffer-filter 'lisp-indent-function 2) +(function-put 'define-ibuffer-filter 'doc-string-elt 2) (register-definition-prefixes "ibuf-macs" '("ibuffer-")) @@ -16584,7 +16632,6 @@ See `inferior-emacs-lisp-mode' for details. ;;; Generated autoloads from iimage.el -(define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") (autoload 'iimage-mode "iimage" "\ Toggle Iimage mode on or off. @@ -16806,6 +16853,15 @@ Return non-nil if there is an image at point." nil nil) ;;; Generated autoloads from image/image-converter.el +(autoload 'image-converter-add-handler "image-converter" "\ +Make Emacs use CONVERTER to parse image files that end with SUFFIX. +CONVERTER is a function with two parameters, where the first is +the file name or a string with the image data, and the second is +non-nil if the first parameter is image data. The converter +should output the image in the current buffer, converted to +`image-convert-to-format'. + +(fn SUFFIX CONVERTER)" nil nil) (register-definition-prefixes "image-converter" '("image-convert")) @@ -19167,13 +19223,6 @@ if it is quoted with double-quotes. (autoload 'mail-completion-at-point-function "mailalias" "\ Compute completion data for mail aliases. For use on `completion-at-point-functions'." nil nil) -(autoload 'mail-complete "mailalias" "\ -Perform completion on header field or word preceding point. -Completable headers are according to `mail-complete-alist'. If none matches -current header, calls `mail-complete-function' and passes prefix ARG if any. - -(fn ARG)" t nil) -(make-obsolete 'mail-complete 'mail-completion-at-point-function "24.1") (register-definition-prefixes "mailalias" '("build-mail-aliases" "mail-")) @@ -20910,6 +20959,7 @@ Interactively, prompt for NAME-SERVER if invoked with prefix argument. This command uses `dig-program' for looking up the DNS information. (fn HOST &optional NAME-SERVER)" t nil) +(make-obsolete 'run-dig 'dig "29.1") (autoload 'ftp "net-utils" "\ Run `ftp-program' to connect to HOST. @@ -20937,7 +20987,7 @@ This command uses `network-connection-service-alist', which see. Open a network connection to HOST on PORT. (fn HOST PORT)" t nil) -(register-definition-prefixes "net-utils" '("arp-program" "dig-program" "dns-lookup-program" "finger-X.500-host-regexps" "ftp-" "ifconfig-program" "ipconfig" "iwconfig-program" "net" "nslookup-" "ping-program" "route-program" "run-network-program" "smbclient" "traceroute-program" "whois-")) +(register-definition-prefixes "net-utils" '("arp-program" "dns-lookup-program" "finger-X.500-host-regexps" "ftp-" "ifconfig-program" "ipconfig" "iwconfig-program" "net" "nslookup-" "ping-program" "route-program" "run-network-program" "smbclient" "traceroute-program" "whois-")) ;;; Generated autoloads from net/netrc.el @@ -23190,12 +23240,11 @@ Completion for the `chown' command." nil nil) Completion for the `chgrp' command." nil nil) (autoload 'pcomplete/ssh "pcmpl-unix" "\ Completion rules for the `ssh' command." nil nil) +(defalias 'pcomplete/rsh #'pcomplete/ssh) (autoload 'pcomplete/scp "pcmpl-unix" "\ Completion rules for the `scp' command. Includes files as well as host names followed by a colon." nil nil) (autoload 'pcomplete/telnet "pcmpl-unix" nil nil nil) -(autoload 'pcomplete/rsh "pcmpl-unix" "\ -Complete `rsh', which, after the user and hostname, is like xargs." nil nil) (register-definition-prefixes "pcmpl-unix" '("pcmpl-" "pcomplete/")) @@ -23565,6 +23614,7 @@ it is disabled. ;;; Generated autoloads from plstore.el +(put 'plstore-encrypt-to 'safe-local-variable (lambda (val) (or (stringp val) (and (listp val) (catch 'safe (mapc (lambda (elt) (unless (stringp elt) (throw 'safe nil))) val) t))))) (autoload 'plstore-open "plstore" "\ Create a plstore instance associated with FILE. @@ -25352,6 +25402,8 @@ evaluate `rectangle-mark-mode'. The mode's hook is called both when the mode is enabled and when it is disabled. +\\{rectangle-mark-mode-map} + (fn &optional ARG)" t nil) (register-definition-prefixes "rect" '("apply-on-rectangle" "clear-rectangle-line" "delete-" "extract-rectangle-" "killed-rectangle" "ope" "rectangle-" "spaces-string" "string-rectangle-")) @@ -25843,49 +25895,6 @@ Make a ring that can contain SIZE elements. (fn SIZE)" nil nil) (register-definition-prefixes "ring" '("ring-")) - -;;; Generated autoloads from net/rlogin.el - -(autoload 'rlogin "rlogin" "\ -Open a network login connection via `rlogin' with args INPUT-ARGS. -INPUT-ARGS should start with a host name; it may also contain -other arguments for `rlogin'. - -Input is sent line-at-a-time to the remote connection. - -Communication with the remote host is recorded in a buffer `*rlogin-HOST*' -(or `*rlogin-USER@HOST*' if the remote username differs). -If a prefix argument is given and the buffer `*rlogin-HOST*' already exists, -a new buffer with a different connection will be made. - -When called from a program, if the optional second argument BUFFER is -a string or buffer, it specifies the buffer to use. - -The variable `rlogin-program' contains the name of the actual program to -run. It can be a relative or absolute path. - -The variable `rlogin-explicit-args' is a list of arguments to give to -the rlogin when starting. They are added after any arguments given in -INPUT-ARGS. - -If the default value of `rlogin-directory-tracking-mode' is t, then the -default directory in that buffer is set to a remote (FTP) file name to -access your home directory on the remote machine. Occasionally this causes -an error, if you cannot access the home directory on that machine. This -error is harmless as long as you don't try to use that default directory. - -If `rlogin-directory-tracking-mode' is neither t nor nil, then the default -directory is initially set up to your (local) home directory. -This is useful if the remote machine and your local machine -share the same files via NFS. This is the default. - -If you wish to change directory tracking styles during a session, use the -function `rlogin-directory-tracking-mode' rather than simply setting the -variable. - -(fn INPUT-ARGS &optional BUFFER)" t nil) -(register-definition-prefixes "rlogin" '("rlogin-")) - ;;; Generated autoloads from mail/rmail.el @@ -25915,14 +25924,6 @@ Then it should be a regexp matching your mail addresses. Setting this variable has an effect only before reading a mail.") (custom-autoload 'rmail-user-mail-address-regexp "rmail" t) -(define-obsolete-variable-alias 'rmail-dont-reply-to-names 'mail-dont-reply-to-names "\ -24.1") -(defvar rmail-default-dont-reply-to-names nil "\ -Regexp specifying part of the default value of `mail-dont-reply-to-names'. -This is used when the user does not set `mail-dont-reply-to-names' -explicitly.") -(make-obsolete-variable 'rmail-default-dont-reply-to-names 'mail-dont-reply-to-names "\ -24.1") (defvar rmail-ignored-headers (purecopy (concat "^via:\\|^mail-from:\\|^origin:\\|^references:\\|^sender:" "\\|^status:\\|^received:\\|^x400-originator:\\|^x400-recipients:" "\\|^x400-received:\\|^x400-mts-identifier:\\|^x400-content-type:" "\\|^\\(resent-\\|\\)message-id:\\|^summary-line:\\|^resent-date:" "\\|^nntp-posting-host:\\|^path:\\|^x-char.*:\\|^x-face:\\|^face:" "\\|^x-mailer:\\|^delivered-to:\\|^lines:" "\\|^content-transfer-encoding:\\|^x-coding-system:" "\\|^return-path:\\|^errors-to:\\|^return-receipt-to:" "\\|^precedence:\\|^mime-version:" "\\|^list-owner:\\|^list-help:\\|^list-post:\\|^list-subscribe:" "\\|^list-id:\\|^list-unsubscribe:\\|^list-archive:" "\\|^content-length:\\|^nntp-posting-date:\\|^user-agent" "\\|^importance:\\|^envelope-to:\\|^delivery-date\\|^openpgp:" "\\|^mbox-line:\\|^cancel-lock:" "\\|^DomainKey-Signature:\\|^dkim-signature:" "\\|^ARC-.*:" "\\|^Received-SPF:" "\\|^Authentication-Results:" "\\|^resent-face:\\|^resent-x.*:\\|^resent-organization:\\|^resent-openpgp:" "\\|^x-.*:")) "\ Regexp to match header fields that Rmail should normally hide. (See also `rmail-nonignored-headers', which overrides this regexp.) @@ -29377,6 +29378,15 @@ single space character, and leading/trailing whitespace is removed. (fn STRING)" nil nil) +(autoload 'named-let "subr-x" "\ +Looping construct taken from Scheme. +Like `let', bind variables in BINDINGS and then evaluate BODY, +but with the twist that BODY can evaluate itself recursively by +calling NAME, where the arguments passed to NAME are used +as the new values of the bound variables in the recursive invocation. + +(fn NAME BINDINGS &rest BODY)" nil t) +(function-put 'named-let 'lisp-indent-function 2) (autoload 'string-pixel-width "subr-x" "\ Return the width of STRING in pixels. @@ -29399,7 +29409,7 @@ this defaults to the current buffer. Query the user for a process and return the process object. (fn PROMPT)" nil nil) -(register-definition-prefixes "subr-x" '("hash-table-" "internal--thread-argument" "named-let" "replace-region-contents" "string-" "thread-" "with-buffer-unmodified-if-unchanged")) +(register-definition-prefixes "subr-x" '("hash-table-" "internal--thread-argument" "replace-region-contents" "string-" "thread-" "with-buffer-unmodified-if-unchanged")) ;;; Generated autoloads from progmodes/subword.el @@ -30346,6 +30356,7 @@ Communication with HOST is recorded in a buffer `*rsh-HOST*'. Normally input is edited in Emacs and sent a line at a time. (fn HOST)" t nil) +(make-obsolete 'rsh 'nil "29.1") (register-definition-prefixes "telnet" '("send-process-next-char" "telnet-")) @@ -32153,6 +32164,14 @@ which specify the range to operate on. ;;; Generated autoloads from mail/undigest.el +(autoload 'undigestify-rmail-message "undigest" "\ +Break up a digest message into its constituent messages. +Leaves original message, deleted, before the undigestified messages." t nil) +(autoload 'unforward-rmail-message "undigest" "\ +Extract a forwarded message from the containing message. +This puts the forwarded message into a separate rmail message following +the containing message. This command is only useful when messages are +forwarded with `rmail-enable-mime-composing' set to nil." t nil) (register-definition-prefixes "undigest" '("rmail-")) @@ -34476,18 +34495,6 @@ The mode's hook is called both when the mode is enabled and when it is disabled. (fn &optional ARG)" t nil) -(autoload 'view-return-to-alist-update "view" "\ -Update `view-return-to-alist' of buffer BUFFER. -Remove from `view-return-to-alist' all entries referencing dead -windows. Optional argument ITEM non-nil means add ITEM to -`view-return-to-alist' after purging. For a description of items -that can be added see the RETURN-TO-ALIST argument of the -function `view-mode-exit'. If `view-return-to-alist' contains an -entry for the selected window, purge that entry from -`view-return-to-alist' before adding ITEM. - -(fn BUFFER &optional ITEM)" nil nil) -(make-obsolete 'view-return-to-alist-update '"this function has no effect." "24.1") (autoload 'view-mode-enter "view" "\ Enter View mode and set up exit from view mode depending on optional arguments. Optional argument QUIT-RESTORE if non-nil must specify a valid @@ -34695,7 +34702,6 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) -(define-obsolete-function-alias 'which-func-mode 'which-function-mode "24.1") (defvar which-function-mode nil "\ Non-nil if Which-Function mode is enabled. See the `which-function-mode' command commit 6d6002806410246c9d8ead5e9b0f71aa2b486ae3 Author: Stefan Kangas Date: Wed Jul 13 20:01:55 2022 +0200 Prefer defvar-keymap in tab-bar.el * lisp/tab-bar.el: Prefer keymap-set. (tab-bar-map, tab-switcher-mode-map) (tab-bar-switch-repeat-map, tab-bar-move-repeat-map): Prefer defvar-keymap. diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index fdfbe207b5..c769dbabce 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -371,31 +371,28 @@ at the mouse-down event to the position at mouse-up event." (tab-bar-move-tab-to (if (null to) (1+ (tab-bar--current-tab-index)) to) from)))) -(defvar tab-bar-map - (let ((map (make-sparse-keymap))) - (define-key map [down-mouse-1] 'tab-bar-mouse-down-1) - (define-key map [drag-mouse-1] 'tab-bar-mouse-move-tab) - (define-key map [mouse-1] 'tab-bar-mouse-1) - (define-key map [down-mouse-2] 'tab-bar-mouse-close-tab) - (define-key map [mouse-2] 'ignore) - (define-key map [down-mouse-3] 'tab-bar-mouse-context-menu) - - (define-key map [mouse-4] 'tab-previous) - (define-key map [mouse-5] 'tab-next) - (define-key map [wheel-up] 'tab-previous) - (define-key map [wheel-down] 'tab-next) - (define-key map [wheel-left] 'tab-previous) - (define-key map [wheel-right] 'tab-next) - - (define-key map [S-mouse-4] 'tab-bar-move-tab-backward) - (define-key map [S-mouse-5] 'tab-bar-move-tab) - (define-key map [S-wheel-up] 'tab-bar-move-tab-backward) - (define-key map [S-wheel-down] 'tab-bar-move-tab) - (define-key map [S-wheel-left] 'tab-bar-move-tab-backward) - (define-key map [S-wheel-right] 'tab-bar-move-tab) - - map) - "Keymap for the commands used on the tab bar.") +(defvar-keymap tab-bar-map + :doc "Keymap for the commands used on the tab bar." + "" #'tab-bar-mouse-down-1 + "" #'tab-bar-mouse-move-tab + "" #'tab-bar-mouse-1 + "" #'tab-bar-mouse-close-tab + "" #'ignore + "" #'tab-bar-mouse-context-menu + + "" #'tab-previous + "" #'tab-next + "" #'tab-previous + "" #'tab-next + "" #'tab-previous + "" #'tab-next + + "S-" #'tab-bar-move-tab-backward + "S-" #'tab-bar-move-tab + "S-" #'tab-bar-move-tab-backward + "S-" #'tab-bar-move-tab + "S-" #'tab-bar-move-tab-backward + "S-" #'tab-bar-move-tab) (global-set-key [tab-bar] `(menu-item ,(purecopy "tab bar") ignore @@ -2006,26 +2003,25 @@ For more information, see the function `tab-switcher'." (defvar-local tab-switcher-column 3) -(defvar tab-switcher-mode-map - (let ((map (make-keymap))) - (suppress-keymap map t) - (define-key map "q" 'quit-window) - (define-key map "\C-m" 'tab-switcher-select) - (define-key map "d" 'tab-switcher-delete) - (define-key map "k" 'tab-switcher-delete) - (define-key map "\C-d" 'tab-switcher-delete-backwards) - (define-key map "\C-k" 'tab-switcher-delete) - (define-key map "x" 'tab-switcher-execute) - (define-key map " " 'tab-switcher-next-line) - (define-key map "n" 'tab-switcher-next-line) - (define-key map "p" 'tab-switcher-prev-line) - (define-key map "\177" 'tab-switcher-backup-unmark) - (define-key map "?" 'describe-mode) - (define-key map "u" 'tab-switcher-unmark) - (define-key map [mouse-2] 'tab-switcher-mouse-select) - (define-key map [follow-link] 'mouse-face) - map) - "Local keymap for `tab-switcher-mode' buffers.") +(defvar-keymap tab-switcher-mode-map + :doc "Local keymap for `tab-switcher-mode' buffers." + :full t + :suppress t + "q" #'quit-window + "RET" #'tab-switcher-select + "d" #'tab-switcher-delete + "k" #'tab-switcher-delete + "C-d" #'tab-switcher-delete-backwards + "C-k" #'tab-switcher-delete + "x" #'tab-switcher-execute + "SPC" #'tab-switcher-next-line + "n" #'tab-switcher-next-line + "p" #'tab-switcher-prev-line + "DEL" #'tab-switcher-backup-unmark + "?" #'describe-mode + "u" #'tab-switcher-unmark + "" #'tab-switcher-mouse-select + "" 'mouse-face) (define-derived-mode tab-switcher-mode nil "Window Configurations" "Major mode for selecting a window configuration. @@ -2401,42 +2397,38 @@ When `switch-to-buffer-obey-display-actions' is non-nil, (defalias 'tab-group 'tab-bar-change-tab-group) (defalias 'tab-list 'tab-switcher) -(define-key tab-prefix-map "n" 'tab-duplicate) -(define-key tab-prefix-map "N" 'tab-new-to) -(define-key tab-prefix-map "2" 'tab-new) -(define-key tab-prefix-map "1" 'tab-close-other) -(define-key tab-prefix-map "0" 'tab-close) -(define-key tab-prefix-map "u" 'tab-undo) -(define-key tab-prefix-map "o" 'tab-next) -(define-key tab-prefix-map "O" 'tab-previous) -(define-key tab-prefix-map "m" 'tab-move) -(define-key tab-prefix-map "M" 'tab-move-to) -(define-key tab-prefix-map "G" 'tab-group) -(define-key tab-prefix-map "r" 'tab-rename) -(define-key tab-prefix-map "\r" 'tab-switch) -(define-key tab-prefix-map "b" 'switch-to-buffer-other-tab) -(define-key tab-prefix-map "f" 'find-file-other-tab) -(define-key tab-prefix-map "\C-f" 'find-file-other-tab) -(define-key tab-prefix-map "\C-r" 'find-file-read-only-other-tab) -(define-key tab-prefix-map "t" 'other-tab-prefix) - -(defvar tab-bar-switch-repeat-map - (let ((map (make-sparse-keymap))) - (define-key map "o" 'tab-next) - (define-key map "O" 'tab-previous) - map) - "Keymap to repeat tab switch key sequences \\`C-x t o o O'. -Used in `repeat-mode'.") +(keymap-set tab-prefix-map "n" #'tab-duplicate) +(keymap-set tab-prefix-map "N" #'tab-new-to) +(keymap-set tab-prefix-map "2" #'tab-new) +(keymap-set tab-prefix-map "1" #'tab-close-other) +(keymap-set tab-prefix-map "0" #'tab-close) +(keymap-set tab-prefix-map "u" #'tab-undo) +(keymap-set tab-prefix-map "o" #'tab-next) +(keymap-set tab-prefix-map "O" #'tab-previous) +(keymap-set tab-prefix-map "m" #'tab-move) +(keymap-set tab-prefix-map "M" #'tab-move-to) +(keymap-set tab-prefix-map "G" #'tab-group) +(keymap-set tab-prefix-map "r" #'tab-rename) +(keymap-set tab-prefix-map "r" #'tab-switch) +(keymap-set tab-prefix-map "b" #'switch-to-buffer-other-tab) +(keymap-set tab-prefix-map "f" #'find-file-other-tab) +(keymap-set tab-prefix-map "C-f" #'find-file-other-tab) +(keymap-set tab-prefix-map "C-r" #'find-file-read-only-other-tab) +(keymap-set tab-prefix-map "t" #'other-tab-prefix) + +(defvar-keymap tab-bar-switch-repeat-map + :doc "Keymap to repeat tab switch key sequences \\`C-x t o o O'. +Used in `repeat-mode'." + "o" #'tab-next + "O" #'tab-previous) (put 'tab-next 'repeat-map 'tab-bar-switch-repeat-map) (put 'tab-previous 'repeat-map 'tab-bar-switch-repeat-map) -(defvar tab-bar-move-repeat-map - (let ((map (make-sparse-keymap))) - (define-key map "m" 'tab-move) - (define-key map "M" 'tab-bar-move-tab-backward) - map) - "Keymap to repeat tab move key sequences \\`C-x t m m M'. -Used in `repeat-mode'.") +(defvar-keymap tab-bar-move-repeat-map + :doc "Keymap to repeat tab move key sequences \\`C-x t m m M'. +Used in `repeat-mode'." + "m" #'tab-move + "M" #'tab-bar-move-tab-backward) (put 'tab-move 'repeat-map 'tab-bar-move-repeat-map) (put 'tab-bar-move-tab-backward 'repeat-map 'tab-bar-move-repeat-map) commit 806666982602de80e889c2e59c347eb9e0aabd77 Author: Stefan Kangas Date: Wed Jul 13 14:40:53 2022 +0200 * lisp/vc/vc-bzr.el (vc-bzr-program): Support breezy. diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index ee394a93af..072bd72b44 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -64,9 +64,13 @@ :version "22.2" :group 'vc) -(defcustom vc-bzr-program "bzr" +(defcustom vc-bzr-program + (or (executable-find "bzr") + (executable-find "brz") + "bzr") "Name of the bzr command (excluding any arguments)." - :type 'string) + :type 'string + :version "29.1") (defcustom vc-bzr-diff-switches nil "String or list of strings specifying switches for bzr diff under VC. commit 3d7a8320928a186bd567ff880ccf0fa872b969d1 Author: Lars Ingebrigtsen Date: Wed Jul 13 14:34:30 2022 +0200 Make smtpmail try all auth methods * lisp/mail/smtpmail.el (smtpmail-try-auth-methods): Try all valid methods, even if one fails (bug#48562). diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index 8cba2b14e1..fcb072d5d0 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -550,7 +550,6 @@ for `smtpmail-try-auth-method'.") :require (and ask-for-password '(:user :secret)) :create ask-for-password))) - (mech (or (plist-get auth-info :smtp-auth) (car mechs))) (user (plist-get auth-info :user)) (password (auth-info-password auth-info)) (save-function (and ask-for-password @@ -570,18 +569,26 @@ for `smtpmail-try-auth-method'.") :require '(:user :secret) :create t)) password (auth-info-password auth-info))) - (let ((result (catch 'done - (if (and mech user password) - (smtpmail-try-auth-method process mech user password) - ;; No mechanism, or no credentials. - mech)))) - (if (stringp result) - (progn - (auth-source-forget+ :host host :port port) - (throw 'done result)) - (when save-function - (funcall save-function)) - result)))) + (let ((mechs (or (ensure-list (plist-get auth-info :smtp-auth)) + mechs)) + (result "")) + (when (and mechs user password) + (while (and mechs + (stringp result)) + (setq result (catch 'done + (smtpmail-try-auth-method + process (pop mechs) user password)))) + ;; A string result is an error. + (if (stringp result) + (progn + ;; All methods failed. + ;; Forget the credentials. + (auth-source-forget+ :host host :port port) + (throw 'done result)) + ;; Success. + (when save-function + (funcall save-function)) + result))))) (cl-defgeneric smtpmail-try-auth-method (_process mech _user _password) "Perform authentication of type MECH for USER with PASSWORD. commit 9f6d8486b46ce4d2dfaba9a59ccc349359688878 Author: Po Lu Date: Wed Jul 13 20:16:21 2022 +0800 Fix recursive calls of x_connection_closed leading to dead terminal * src/xterm.c (x_connection_closed): Return if called again for the current display. (x_io_error_quitter): Fix attributes. (bug#56528) diff --git a/src/xterm.c b/src/xterm.c index fa54d5c9e2..284a08769a 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -23301,7 +23301,7 @@ static char *error_msg; /* Handle the loss of connection to display DPY. ERROR_MESSAGE is the text of an error message that lead to the connection loss. */ -static AVOID +static void x_connection_closed (Display *dpy, const char *error_message, bool ioerror) { struct x_display_info *dpyinfo; @@ -23313,6 +23313,15 @@ x_connection_closed (Display *dpy, const char *error_message, bool ioerror) Lisp_Object minibuf_frame, tmp; struct x_failable_request *failable; struct x_error_message_stack *stack; + static Display *current_display; + + /* Prevent recursive calls of this function for the same display. + This is because destroying a frame might still cause an IO error + in some cases. (bug#56528) */ + if (current_display == dpy) + return; + + current_display = dpy; dpyinfo = x_display_info_for_display (dpy); error_msg = alloca (strlen (error_message) + 1); @@ -23519,6 +23528,7 @@ For details, see etc/PROBLEMS.\n", /* Here, we absolutely have to use a non-local exit (e.g. signal, throw, longjmp), because returning from this function would get us back into Xlib's code which will directly call `exit'. */ + current_display = NULL; error ("%s", error_msg); } @@ -23623,7 +23633,7 @@ x_error_quitter (Display *display, XErrorEvent *event) It kills all frames on the display that we lost touch with. If that was the only one, it prints an error message and kills Emacs. */ -static _Noreturn ATTRIBUTE_COLD int +static int NO_INLINE x_io_error_quitter (Display *display) { char buf[256]; @@ -23631,6 +23641,8 @@ x_io_error_quitter (Display *display) snprintf (buf, sizeof buf, "Connection lost to X server '%s'", DisplayString (display)); x_connection_closed (display, buf, true); + + return 0; } commit ad4ccd4d907a6741668d3c7ba1385485315ee6e1 Merge: b3bc7c3e82 73524ee0da Author: Michael Albinus Date: Wed Jul 13 13:39:57 2022 +0200 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit b3bc7c3e82e1a920bed308d73d590be9cf3a0a8d Author: Michael Albinus Date: Wed Jul 13 13:38:11 2022 +0200 Adapt Tramp version integrated in Emacs 28.2 * lisp/net/trampver.el (customize-package-emacs-version-alist): Adapt Tramp version integrated in Emacs 28.2. diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el index 68fd110ec0..2b39add20d 100644 --- a/lisp/net/trampver.el +++ b/lisp/net/trampver.el @@ -104,7 +104,7 @@ ("2.3.3" . "26.1") ("2.3.3.26.1" . "26.1") ("2.3.5.26.2" . "26.2") ("2.3.5.26.3" . "26.3") ("2.4.3.27.1" . "27.1") ("2.4.5.27.2" . "27.2") - ("2.5.2.28.1" . "28.1"))) + ("2.5.2.28.1" . "28.1") ("2.5.3.28.2" . "28.2"))) (add-hook 'tramp-unload-hook (lambda () commit 73524ee0dafc29df062cc1face2c64589a6b3079 Author: Lars Ingebrigtsen Date: Wed Jul 13 13:37:05 2022 +0200 Revert "Make mouse-2 respect delete-selection mode" This reverts commit 215a700751f88bba18989e340181361a484d5b3a. This leads to unintended consequences for cua-mode, among others (bug#56530). diff --git a/lisp/delsel.el b/lisp/delsel.el index 723a52b17d..5310328e5f 100644 --- a/lisp/delsel.el +++ b/lisp/delsel.el @@ -300,9 +300,6 @@ to `delete-selection-mode'." (put 'yank-pop 'delete-selection 'yank) (put 'yank-from-kill-ring 'delete-selection 'yank) (put 'clipboard-yank 'delete-selection 'yank) -(put 'mouse-yank-primary 'delete-selection 'yank) -(put 'mouse-yank-secondary 'delete-selection 'yank) -(put 'mouse-yank-at-click 'delete-selection 'yank) (put 'insert-register 'delete-selection t) ;; delete-backward-char and delete-forward-char already delete the selection by ;; default, but not delete-char. commit 2f7cd9cd732f4e25a06d5e52fde7ff376a1c366e Author: Lars Ingebrigtsen Date: Wed Jul 13 13:24:00 2022 +0200 Make bibtex-mode not signal errors when used programmatically * lisp/textmodes/bibtex.el (bibtex-mode): Ensure that the font lock machinery is set up (bug#48447). diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el index 6763da046f..333cfa5169 100644 --- a/lisp/textmodes/bibtex.el +++ b/lisp/textmodes/bibtex.el @@ -3659,7 +3659,11 @@ if that value is non-nil. ?\s))))) (if (and buffer-file-name enable-local-variables) (add-hook 'hack-local-variables-hook fun nil t) - (funcall fun)))) + (funcall fun))) + ;; We may be using the mode programmatically to extract data, and we + ;; then need this to be set up first so that sexp-based movement + ;; commands don't bug out. + (font-lock-set-defaults)) (defun bibtex-entry-alist (dialect) "Return entry-alist for DIALECT." commit d858e0a18acabe436ee178c85bc9feb610c4eaf8 Author: Stefan Kangas Date: Wed Jul 13 12:40:54 2022 +0200 Make the rsh command obsolete * lisp/net/telnet.el (rsh): Make obsolete. (telnet-connect-command, telnet-mode): Adjust documentation for above change. diff --git a/etc/NEWS b/etc/NEWS index b46f33fd67..da2b158024 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -322,8 +322,8 @@ startup. Previously, these functions ignored 'initial-scratch-message' and left "*scratch*" in 'fundamental-mode'. --- -** The rlogin.el library is now obsolete. -Use something like `M-x shell RET ssh RET' instead. +** The rlogin.el library and 'rsh' command are now obsolete. +Use something like 'M-x shell RET ssh RET' instead. * Changes in Emacs 29.1 diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el index 802e7bc0a2..bea79e8933 100644 --- a/lisp/net/telnet.el +++ b/lisp/net/telnet.el @@ -23,11 +23,11 @@ ;;; Commentary: -;; This mode is intended to be used for telnet or rsh to a remote host; -;; `telnet' and `rsh' are the two entry points. Multiple telnet or rsh -;; sessions are supported. +;; This mode is intended to be used for telnet to a remote host; +;; `telnet' is the entry point. Multiple telnet sessions are +;; supported. ;; -;; Normally, input is sent to the remote telnet/rsh line-by-line, as you +;; Normally, input is sent to the remote telnet line-by-line, as you ;; type RET or LFD. C-c C-c sends a C-c to the remote immediately; ;; C-c C-z sends C-z immediately. C-c C-q followed by any character ;; sends that character immediately. @@ -93,7 +93,7 @@ Should be set to the number of terminal writes telnet will make rejecting one login and prompting again for a username and password.") (defvar telnet-connect-command nil - "Command used to start the `telnet' (or `rsh') connection.") + "Command used to start the `telnet' connection.") (defun telnet-interrupt-subjob () "Interrupt the program running through telnet on the remote host." @@ -244,7 +244,7 @@ Normally input is edited in Emacs and sent a line at a time." (put 'telnet-mode 'mode-class 'special) (define-derived-mode telnet-mode comint-mode "Telnet" - "This mode is for using telnet (or rsh) from a buffer to another host. + "This mode is for using telnet from a buffer to another host. It has most of the same commands as `comint-mode'. There is a variable `telnet-interrupt-string' which is the character sent to try to stop execution of a job on the remote host. @@ -259,6 +259,7 @@ Data is sent to the remote host when RET is typed." "Open a network login connection to host named HOST (a string). Communication with HOST is recorded in a buffer `*rsh-HOST*'. Normally input is edited in Emacs and sent a line at a time." + (declare (obsolete nil "29.1")) (interactive "sOpen rsh connection to host: ") (require 'shell) (let ((name (concat "rsh-" host )))