commit cd3a7f35de8b0f39524912529d6fceda26571276 (HEAD, refs/remotes/origin/master) Author: Michael Albinus Date: Thu May 2 09:51:41 2019 +0200 Fix tramp-compat-file-name-quoted-p * lisp/net/tramp-compat.el (tramp-compat-file-local-name) (tramp-compat-file-name-quoted-p): Declare them. (top): Do not use `eval-and-compile'. (tramp-compat-file-name-quoted-p): Check also func-arity of `file-name-quoted-p'. diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index ae743b2507..a05c841978 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -45,6 +45,9 @@ (require 'timer) (require 'ucs-normalize) +(declare-function tramp-compat-file-local-name 'tramp-compat) +(declare-function tramp-compat-file-name-quoted-p 'tramp-compat) + ;; For not existing functions, obsolete functions, or functions with a ;; changed argument list, there are compiler warnings. We want to ;; avoid them in cases we know what we do. @@ -187,43 +190,45 @@ This is a string of ten letters or dashes as in ls -l." ;; `file-local-name', `file-name-quoted-p', `file-name-quote' and ;; `file-name-unquote' are introduced in Emacs 26. -(eval-and-compile - (if (fboundp 'file-local-name) - (defalias 'tramp-compat-file-local-name #'file-local-name) - (defsubst tramp-compat-file-local-name (name) - "Return the local name component of NAME. +(if (fboundp 'file-local-name) + (defalias 'tramp-compat-file-local-name #'file-local-name) + (defsubst tramp-compat-file-local-name (name) + "Return the local name component of NAME. It returns a file name which can be used directly as argument of `process-file', `start-file-process', or `shell-command'." - (or (file-remote-p name 'localname) name))) - - (if (fboundp 'file-name-quoted-p) - (defalias 'tramp-compat-file-name-quoted-p #'file-name-quoted-p) - (defsubst tramp-compat-file-name-quoted-p (name &optional top) - "Whether NAME is quoted with prefix \"/:\". + (or (file-remote-p name 'localname) name))) + +;; `file-name-quoted-p' got a second argument in Emacs 27.1. +(if (and + (fboundp 'file-name-quoted-p) + (equal (tramp-compat-funcall 'func-arity #'file-name-quoted-p) '(1 . 2))) + (defalias 'tramp-compat-file-name-quoted-p #'file-name-quoted-p) + (defsubst tramp-compat-file-name-quoted-p (name &optional top) + "Whether NAME is quoted with prefix \"/:\". If NAME is a remote file name and TOP is nil, check the local part of NAME." - (let ((file-name-handler-alist (unless top file-name-handler-alist))) - (string-prefix-p "/:" (tramp-compat-file-local-name name))))) + (let ((file-name-handler-alist (unless top file-name-handler-alist))) + (string-prefix-p "/:" (tramp-compat-file-local-name name))))) - (if (fboundp 'file-name-quote) - (defalias 'tramp-compat-file-name-quote #'file-name-quote) - (defsubst tramp-compat-file-name-quote (name) - "Add the quotation prefix \"/:\" to file NAME. +(if (fboundp 'file-name-quote) + (defalias 'tramp-compat-file-name-quote #'file-name-quote) + (defsubst tramp-compat-file-name-quote (name) + "Add the quotation prefix \"/:\" to file NAME. If NAME is a remote file name, the local part of NAME is quoted." - (if (tramp-compat-file-name-quoted-p name) - name - (concat - (file-remote-p name) "/:" (tramp-compat-file-local-name name))))) - - (if (fboundp 'file-name-unquote) - (defalias 'tramp-compat-file-name-unquote #'file-name-unquote) - (defsubst tramp-compat-file-name-unquote (name) - "Remove quotation prefix \"/:\" from file NAME. + (if (tramp-compat-file-name-quoted-p name) + name + (concat + (file-remote-p name) "/:" (tramp-compat-file-local-name name))))) + +(if (fboundp 'file-name-unquote) + (defalias 'tramp-compat-file-name-unquote #'file-name-unquote) + (defsubst tramp-compat-file-name-unquote (name) + "Remove quotation prefix \"/:\" from file NAME. If NAME is a remote file name, the local part of NAME is unquoted." - (let ((localname (tramp-compat-file-local-name name))) - (when (tramp-compat-file-name-quoted-p localname) - (setq - localname (if (= (length localname) 2) "/" (substring localname 2)))) - (concat (file-remote-p name) localname))))) + (let ((localname (tramp-compat-file-local-name name))) + (when (tramp-compat-file-name-quoted-p localname) + (setq + localname (if (= (length localname) 2) "/" (substring localname 2)))) + (concat (file-remote-p name) localname)))) ;; `tramp-syntax' has changed its meaning in Emacs 26. We still ;; support old settings. @@ -241,7 +246,7 @@ If NAME is a remote file name, the local part of NAME is unquoted." '(cdr (mapcar #'car (get 'tramp-file-name 'cl-struct-slots))))) ;; The signature of `tramp-make-tramp-file-name' has been changed. -;; Therefore, we cannot us `url-tramp-convert-url-to-tramp' prior +;; Therefore, we cannot use `url-tramp-convert-url-to-tramp' prior ;; Emacs 26.1. We use `temporary-file-directory' as indicator. (defconst tramp-compat-use-url-tramp-p (fboundp 'temporary-file-directory) "Whether to use url-tramp.el.") commit 4299e5ef9af182cbc1d97f8a22b589901e6494b1 Author: Stefan Monnier Date: Wed May 1 17:53:39 2019 -0400 * lisp/mail/footnote.el: Consolidate the two marker-alists Consolidate footnote-text-marker-alist and footnote-pointer-marker-alist into a single footnote--markers-alist. (footnote--markers-alist): New var. (footnote-text-marker-alist, footnote-pointer-marker-alist): Delete vars. (footnote--refresh-footnotes, footnote--text-under-cursor) (footnote--calc-fn-alignment-column, footnote-add-footnote) (footnote-goto-footnote, footnote-back-to-message): Adjust accordingly. (footnote--make-hole, footnote-delete-footnote) (footnote-renumber-footnotes): Simplify accordingly. (footnote-cycle-style): Indicate style name in echo area. (footnote--renumber): Take a single `alist-elem` arg instead of `pointer-alist` and `text-alist`. (footnote--insert-text-marker, footnote--insert-pointer-marker): Add to footnote--markers-alist instead. (footnote--first-text-marker): New function. (footnote--get-area-point-min): Use it. footnote--goto-first): New function. (footnote--insert-footnote): Use it. (footnote-style-number): Use defvar-local. diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el index a1e909cee7..ef359b62b4 100644 --- a/lisp/mail/footnote.el +++ b/lisp/mail/footnote.el @@ -157,17 +157,14 @@ left with the first character of footnote text." ;;; Private variables -(defvar footnote-style-number nil - "Footnote style represented as an index into footnote-style-alist.") -(make-variable-buffer-local 'footnote-style-number) +(defvar-local footnote-style-number nil + "Footnote style represented as an index into `footnote-style-alist'.") -(defvar footnote-text-marker-alist nil - "List of markers pointing to text of footnotes in message buffer.") -(make-variable-buffer-local 'footnote-text-marker-alist) - -(defvar footnote-pointer-marker-alist nil - "List of markers pointing to footnote pointers in message buffer.") -(make-variable-buffer-local 'footnote-pointer-marker-alist) +(defvar-local footnote--markers-alist nil + "List of (FN TEXT . POINTERS). +Where FN is the footnote number, TEXT is a marker pointing to +the footnote's text, and POINTERS is a list of markers pointing +to the places from which the footnote is referenced.") (defvar footnote-mouse-highlight 'highlight ;; FIXME: This `highlight' property is not currently used. @@ -462,8 +459,8 @@ styles." (save-excursion ;; Take care of the pointers first (let ((i 0) locn alist) - (while (setq alist (nth i footnote-pointer-marker-alist)) - (setq locn (cdr alist)) + (while (setq alist (nth i footnote--markers-alist)) + (setq locn (cddr alist)) (while locn (goto-char (car locn)) ;; Try to handle the case where `footnote-start-tag' and @@ -486,8 +483,8 @@ styles." ;; Now take care of the text section (let ((i 0) alist) - (while (setq alist (nth i footnote-text-marker-alist)) - (goto-char (cdr alist)) + (while (setq alist (nth i footnote--markers-alist)) + (goto-char (cadr alist)) (when (looking-at (concat (regexp-quote footnote-start-tag) "\\(" index-regexp "+\\)" @@ -508,7 +505,8 @@ styles." (let ((old-desc (assq footnote-style footnote-style-alist))) (setq footnote-style (caar (or (cdr (memq old-desc footnote-style-alist)) footnote-style-alist))) - (footnote--refresh-footnotes (nth 2 old-desc)))) + (footnote--refresh-footnotes (nth 2 old-desc)) + (message "Style set to %s" footnote-style))) (defun footnote-set-style (style) "Select a specific style." @@ -532,11 +530,10 @@ styles." string 'footnote-number arg footnote-mouse-highlight t) (propertize string 'footnote-number arg))))) -(defun footnote--renumber (to pointer-alist text-alist) +(defun footnote--renumber (to alist-elem) "Renumber a single footnote." - (let* ((posn-list (cdr pointer-alist))) - (setcar pointer-alist to) - (setcar text-alist to) + (let* ((posn-list (cddr alist-elem))) + (setcar alist-elem to) (while posn-list (goto-char (car posn-list)) (when (looking-back (concat (regexp-quote footnote-start-tag) @@ -550,7 +547,7 @@ styles." footnote-end-tag) 'footnote-number to footnote-mouse-highlight t))) (setq posn-list (cdr posn-list))) - (goto-char (cdr text-alist)) + (goto-char (cadr alist-elem)) (when (looking-at (concat (regexp-quote footnote-start-tag) (footnote--current-regexp) (regexp-quote footnote-end-tag))) @@ -575,26 +572,43 @@ styles." (defun footnote--insert-text-marker (arg locn) "Insert a marker pointing to footnote ARG, at buffer location LOCN." - (let ((marker (make-marker))) - (unless (assq arg footnote-text-marker-alist) - (set-marker marker locn) - (setq footnote-text-marker-alist - (cons (cons arg marker) footnote-text-marker-alist)) - (setq footnote-text-marker-alist - (footnote--sort footnote-text-marker-alist))))) + (let ((entry (assq arg footnote--markers-alist))) + (unless (cadr entry) + (let ((marker (copy-marker locn))) + (if entry + (setf (cadr entry) marker) + (push `(,arg ,marker) footnote--markers-alist) + (setq footnote--markers-alist + (footnote--sort footnote--markers-alist))))))) (defun footnote--insert-pointer-marker (arg locn) "Insert a marker pointing to footnote ARG, at buffer location LOCN." - (let ((marker (make-marker)) - alist) - (set-marker marker locn) - (if (setq alist (assq arg footnote-pointer-marker-alist)) - (setf alist - (cons marker (cdr alist))) - (setq footnote-pointer-marker-alist - (cons (cons arg (list marker)) footnote-pointer-marker-alist)) - (setq footnote-pointer-marker-alist - (footnote--sort footnote-pointer-marker-alist))))) + (let ((entry (assq arg footnote--markers-alist)) + (marker (copy-marker locn))) + (if entry + (push marker (cddr entry)) + (push `(,arg nil ,marker) footnote--markers-alist) + (setq footnote--markers-alist + (footnote--sort footnote--markers-alist))))) + +(defun footnote--first-text-marker () + (let ((tmp footnote--markers-alist)) + (while (and tmp (null (cadr (car footnote--markers-alist)))) + ;; Skip entries which don't (yet) have a TEXT marker. + (set tmp (cdr tmp))) + (cadr (car tmp)))) + +(defun footnote--goto-first () + "Go to beginning of footnote area and return non-nil if successful. +Presumes we're within the footnote area already." + (cond + ((not (string-equal footnote-section-tag "")) + (re-search-backward + (concat "^" footnote-section-tag-regexp) nil t)) + (footnote--markers-alist + (let ((pos (footnote--first-text-marker))) + (when pos + (goto-char pos)))))) (defun footnote--insert-footnote (arg) "Insert a footnote numbered ARG, at (point)." @@ -602,11 +616,7 @@ styles." (footnote--insert-pointer-marker arg (point)) (footnote--insert-numbered-footnote arg t) (footnote--goto-char-point-max) - (if (cond - ((not (string-equal footnote-section-tag "")) - (re-search-backward (concat "^" footnote-section-tag-regexp) nil t)) - (footnote-text-marker-alist - (goto-char (cdar footnote-text-marker-alist)))) + (if (footnote--goto-first) (save-restriction (when footnote-narrow-to-footnotes-when-editing (footnote--narrow-to-footnotes)) @@ -624,12 +634,7 @@ styles." nil t) (unless (beginning-of-line) t)) (footnote--goto-char-point-max) - (cond - ((not (string-equal footnote-section-tag "")) - (re-search-backward - (concat "^" footnote-section-tag-regexp) nil t)) - (footnote-text-marker-alist - (goto-char (cdar footnote-text-marker-alist))))))) + (footnote--goto-first)))) (unless (looking-at "^$") (insert "\n")) (when (eobp) @@ -647,18 +652,18 @@ styles." "Return the number of the current footnote if in footnote text. Return nil if the cursor is not positioned over the text of a footnote." - (when (and footnote-text-marker-alist + (when (and footnote--markers-alist (<= (footnote--get-area-point-min) (point) (footnote--get-area-point-max))) (let ((i 1) alist-txt result) - (while (and (setq alist-txt (nth i footnote-text-marker-alist)) + (while (and (setq alist-txt (nth i footnote--markers-alist)) (null result)) - (when (< (point) (cdr alist-txt)) - (setq result (car (nth (1- i) footnote-text-marker-alist)))) + (when (< (point) (cadr alist-txt)) + (setq result (car (nth (1- i) footnote--markers-alist)))) (setq i (1+ i))) (when (and (null result) (null alist-txt)) - (setq result (car (nth (1- i) footnote-text-marker-alist)))) + (setq result (car (nth (1- i) footnote--markers-alist)))) result))) (defun footnote--under-cursor () @@ -675,7 +680,7 @@ Return nil if the cursor is not over a footnote." (string-width (concat footnote-start-tag footnote-end-tag (footnote--index-to-string - (caar (last footnote-text-marker-alist))))))) + (caar (last footnote--markers-alist))))))) (defun footnote--fill-prefix-string () "Return the fill prefix to be used by footnote mode." @@ -695,13 +700,12 @@ With optional arg BEFORE-TAG, return position of the `footnote-section-tag' instead, if applicable." (cond ;; FIXME: Shouldn't we use `footnote--get-area-point-max' instead? - ((not footnote-text-marker-alist) (point-max)) - ((not before-tag) (cdr (car footnote-text-marker-alist))) - ((string-equal footnote-section-tag "") - (cdr (car footnote-text-marker-alist))) + ((not (footnote--first-text-marker)) (point-max)) + ((not before-tag) (footnote--first-text-marker)) + ((string-equal footnote-section-tag "") (footnote--first-text-marker)) (t (save-excursion - (goto-char (cdr (car footnote-text-marker-alist))) + (goto-char (footnote--first-text-marker)) (if (re-search-backward (concat "^" footnote-section-tag-regexp) nil t) (match-beginning 0) (message "Footnote section tag not found!") @@ -721,7 +725,7 @@ instead, if applicable." ;; function, and repeat. ;; ;; TODO: integrate sanity checks at reasonable operational points. - (cdr (car footnote-text-marker-alist))))))) + (footnote--first-text-marker)))))) (defun footnote--get-area-point-max () "Return the end of footnote area. @@ -747,22 +751,20 @@ footnote area, returns `point-max'." (defun footnote--make-hole () (save-excursion (let ((i 0) - (notes (length footnote-pointer-marker-alist)) - alist-ptr alist-txt rc) + (notes (length footnote--markers-alist)) + alist-elem rc) (while (< i notes) - (setq alist-ptr (nth i footnote-pointer-marker-alist)) - (setq alist-txt (nth i footnote-text-marker-alist)) - (when (< (point) (- (cadr alist-ptr) 3)) + (setq alist-elem (nth i footnote--markers-alist)) + (when (< (point) (- (cl-caddr alist-elem) 3)) (unless rc - (setq rc (car alist-ptr))) + (setq rc (car alist-elem))) (save-excursion (message "Renumbering from %s to %s" - (footnote--index-to-string (car alist-ptr)) + (footnote--index-to-string (car alist-elem)) (footnote--index-to-string - (1+ (car alist-ptr)))) - (footnote--renumber (1+ (car alist-ptr)) - alist-ptr - alist-txt))) + (1+ (car alist-elem)))) + (footnote--renumber (1+ (car alist-elem)) + alist-elem))) (setq i (1+ i))) rc))) @@ -775,10 +777,10 @@ the buffer is narrowed to the footnote body. The restriction is removed by using `footnote-back-to-message'." (interactive "*") (let ((num - (if footnote-text-marker-alist - (if (< (point) (cl-cadar (last footnote-pointer-marker-alist))) + (if footnote--markers-alist + (if (< (point) (cl-caddar (last footnote--markers-alist))) (footnote--make-hole) - (1+ (caar (last footnote-text-marker-alist)))) + (1+ (caar (last footnote--markers-alist)))) 1))) (message "Adding footnote %d" num) (footnote--insert-footnote num) @@ -805,12 +807,11 @@ delete the footnote with that number." (when (and arg (or (not footnote-prompt-before-deletion) (y-or-n-p (format "Really delete footnote %d?" arg)))) - (let (alist-ptr alist-txt locn) - (setq alist-ptr (assq arg footnote-pointer-marker-alist)) - (setq alist-txt (assq arg footnote-text-marker-alist)) - (unless (and alist-ptr alist-txt) + (let (alist-elem locn) + (setq alist-elem (assq arg footnote--markers-alist)) + (unless alist-elem (error "Can't delete footnote %d" arg)) - (setq locn (cdr alist-ptr)) + (setq locn (cddr alist-elem)) (while (car locn) (save-excursion (goto-char (car locn)) @@ -821,7 +822,7 @@ delete the footnote with that number." (delete-region (match-beginning 0) (match-end 0)))) (setq locn (cdr locn))) (save-excursion - (goto-char (cdr alist-txt)) + (goto-char (cadr alist-elem)) (delete-region (point) (if footnote-spaced-footnotes @@ -830,13 +831,10 @@ delete the footnote with that number." (end-of-line) (next-single-char-property-change (point) 'footnote-number nil (footnote--goto-char-point-max)))))) - (setq footnote-pointer-marker-alist - (delq alist-ptr footnote-pointer-marker-alist)) - (setq footnote-text-marker-alist - (delq alist-txt footnote-text-marker-alist)) + (setq footnote--markers-alist + (delq alist-elem footnote--markers-alist)) (footnote-renumber-footnotes) - (when (and (null footnote-text-marker-alist) - (null footnote-pointer-marker-alist)) + (when (null footnote--markers-alist) (save-excursion (if (not (string-equal footnote-section-tag "")) (let* ((end (footnote--goto-char-point-max)) @@ -858,13 +856,12 @@ delete the footnote with that number." (interactive "*") (save-excursion (let ((i 0) - (notes (length footnote-pointer-marker-alist)) - alist-ptr alist-txt) + (notes (length footnote--markers-alist)) + alist-elem) (while (< i notes) - (setq alist-ptr (nth i footnote-pointer-marker-alist)) - (setq alist-txt (nth i footnote-text-marker-alist)) - (unless (= (1+ i) (car alist-ptr)) - (footnote--renumber (1+ i) alist-ptr alist-txt)) + (setq alist-elem (nth i footnote--markers-alist)) + (unless (= (1+ i) (car alist-elem)) + (footnote--renumber (1+ i) alist-elem)) (setq i (1+ i)))))) (defun footnote-goto-footnote (&optional arg) @@ -874,18 +871,18 @@ specified, jump to the text of that footnote." (interactive "P") (unless arg (setq arg (footnote--under-cursor))) - (let ((footnote (assq arg footnote-text-marker-alist))) + (let ((footnote (assq arg footnote--markers-alist))) (cond (footnote - (goto-char (cdr footnote))) + (goto-char (cadr footnote))) ((eq arg 0) (goto-char (point-max)) (cond ((not (string-equal footnote-section-tag "")) (re-search-backward (concat "^" footnote-section-tag-regexp)) (forward-line 1)) - (footnote-text-marker-alist - (goto-char (cdar footnote-text-marker-alist))))) + ((footnote--first-text-marker) + (goto-char (footnote--first-text-marker))))) (t (error "I don't see a footnote here"))))) @@ -899,7 +896,7 @@ being set it is automatically widened." (when note (when footnote-narrow-to-footnotes-when-editing (widen)) - (goto-char (cadr (assq note footnote-pointer-marker-alist)))))) + (goto-char (cl-caddr (assq note footnote--markers-alist)))))) (defvar footnote-mode-map (let ((map (make-sparse-keymap))) commit c9b820ddcfb7e44b4aa1ac349de9cf8453bca6bd Author: Stefan Monnier Date: Wed May 1 13:14:31 2019 -0400 * lisp/mail/footnote.el: Minor simplifications Remove redundant :group args. (footnote-mode-hook): Let define-minor-mode define it. (footnote--style-p): Delete function. (footnote--index-to-string): Inline it instead, and simplify. (footnote-cycle-style): Use a pointer into the alist as the "index" instead of a number. (footnote-set-style): Use footnote-style-alist as the completion table. Prefer `assq` over `footnote--assoc-index`. (footnote--assoc-index): Delete function. (footnote--renumber): Remove first (unused) argument; Adjust all callers. (footnote--sort): Use car-less-than-car. diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el index 81dc11de76..a1e909cee7 100644 --- a/lisp/mail/footnote.el +++ b/lisp/mail/footnote.el @@ -73,50 +73,38 @@ (defcustom footnote-mode-line-string " FN" "String to display in modes section of the mode-line." - :type 'string - :group 'footnote) - -(defcustom footnote-mode-hook nil - "Hook functions run when footnote-mode is activated." - :type 'hook - :group 'footnote) + :type 'string) (defcustom footnote-narrow-to-footnotes-when-editing nil "If non-nil, narrow to footnote text body while editing a footnote." - :type 'boolean - :group 'footnote) + :type 'boolean) (defcustom footnote-prompt-before-deletion t "If non-nil, prompt before deleting a footnote. There is currently no way to undo deletions." - :type 'boolean - :group 'footnote) + :type 'boolean) (defcustom footnote-spaced-footnotes t "If non-nil, insert an empty line between footnotes. Customizing this variable has no effect on buffers already displaying footnotes." - :type 'boolean - :group 'footnote) + :type 'boolean) (defcustom footnote-use-message-mode t ; Nowhere used. "If non-nil, assume Footnoting will be done in `message-mode'." - :type 'boolean - :group 'footnote) + :type 'boolean) (defcustom footnote-body-tag-spacing 2 "Number of spaces separating a footnote body tag and its text. Customizing this variable has no effect on buffers already displaying footnotes." - :type 'integer - :group 'footnote) + :type 'integer) (defcustom footnote-prefix [(control ?c) ?!] "Prefix key to use for Footnote command in Footnote minor mode. The value of this variable is checked as part of loading Footnote mode. After that, changing the prefix key requires manipulating keymaps." - :type 'key-sequence - :group 'footnote) + :type 'key-sequence) ;;; Interface variables that probably shouldn't be changed @@ -127,8 +115,7 @@ value of `footnote-section-tag-regexp' is ignored. Customizing this variable has no effect on buffers already displaying footnotes." :version "27.1" - :type 'string - :group 'footnote) + :type 'string) (defcustom footnote-section-tag-regexp ;; Even if `footnote-section-tag' has a trailing space, let's not require it @@ -139,31 +126,27 @@ This variable is disregarded when `footnote-section-tag' is the empty string. Customizing this variable has no effect on buffers already displaying footnotes." :version "27.1" - :type 'regexp - :group 'footnote) + :type 'regexp) ;; The following three should be consumed by footnote styles. (defcustom footnote-start-tag "[" "String used to denote start of numbered footnote. Should not be set to the empty string. Customizing this variable has no effect on buffers already displaying footnotes." - :type 'string - :group 'footnote) + :type 'string) (defcustom footnote-end-tag "]" "String used to denote end of numbered footnote. Should not be set to the empty string. Customizing this variable has no effect on buffers already displaying footnotes." - :type 'string - :group 'footnote) + :type 'string) (defcustom footnote-signature-separator (if (boundp 'message-signature-separator) message-signature-separator "^-- $") "Regexp used by Footnote mode to recognize signatures." - :type 'regexp - :group 'footnote) + :type 'regexp) (defcustom footnote-align-to-fn-text t "How to left-align footnote text. @@ -187,6 +170,8 @@ left with the first character of footnote text." (make-variable-buffer-local 'footnote-pointer-marker-alist) (defvar footnote-mouse-highlight 'highlight + ;; FIXME: This `highlight' property is not currently used. + ;; We should use `mouse-face' and make mouse clicks work on them. "Text property name to enable mouse over highlight.") (defvar footnote-mode) @@ -441,20 +426,15 @@ Customizing this variable has no effect on buffers already displaying footnotes. To change the style of footnotes in such a buffer use the command `footnote-set-style'." :type (cons 'choice (mapcar (lambda (x) (list 'const (car x))) - footnote-style-alist)) - :group 'footnote) + footnote-style-alist))) ;;; Style utilities & functions -(defun footnote--style-p (style) - "Return non-nil if style is a valid style known to `footnote-mode'." - (assq style footnote-style-alist)) (defun footnote--index-to-string (index) "Convert a binary index into a string to display as a footnote. Conversion is done based upon the current selected style." - (let ((alist (if (footnote--style-p footnote-style) - (assq footnote-style footnote-style-alist) - (nth 0 footnote-style-alist)))) + (let ((alist (or (assq footnote-style footnote-style-alist) + (nth 0 footnote-style-alist)))) (funcall (nth 1 alist) index))) (defun footnote--current-regexp () @@ -522,41 +502,27 @@ styles." nil "\\1")) (setq i (1+ i)))))) -(defun footnote--assoc-index (key alist) - "Give index of key in alist." - (let ((i 0) (max (length alist)) rc) - (while (and (null rc) - (< i max)) - (when (eq key (car (nth i alist))) - (setq rc i)) - (setq i (1+ i))) - rc)) - (defun footnote-cycle-style () "Select next defined footnote style." (interactive) - (let ((old (footnote--assoc-index footnote-style footnote-style-alist)) - (max (length footnote-style-alist)) - idx) - (setq idx (1+ old)) - (when (>= idx max) - (setq idx 0)) - (setq footnote-style (car (nth idx footnote-style-alist))) - (footnote--refresh-footnotes (nth 2 (nth old footnote-style-alist))))) - -(defun footnote-set-style (&optional style) + (let ((old-desc (assq footnote-style footnote-style-alist))) + (setq footnote-style (caar (or (cdr (memq old-desc footnote-style-alist)) + footnote-style-alist))) + (footnote--refresh-footnotes (nth 2 old-desc)))) + +(defun footnote-set-style (style) "Select a specific style." (interactive (list (intern (completing-read "Footnote Style: " - obarray #'footnote--style-p 'require-match)))) - (let ((old (footnote--assoc-index footnote-style footnote-style-alist))) + footnote-style-alist nil 'require-match)))) + (let ((old-desc (assq footnote-style footnote-style-alist))) (setq footnote-style style) - (footnote--refresh-footnotes (nth 2 (nth old footnote-style-alist))))) + (footnote--refresh-footnotes (nth 2 old-desc)))) ;; Internal functions (defun footnote--insert-numbered-footnote (arg &optional mousable) - "Insert numbered footnote at (point)." + "Insert numbered footnote at point." (let ((string (concat footnote-start-tag (footnote--index-to-string arg) footnote-end-tag))) @@ -566,7 +532,7 @@ styles." string 'footnote-number arg footnote-mouse-highlight t) (propertize string 'footnote-number arg))))) -(defun footnote--renumber (_from to pointer-alist text-alist) +(defun footnote--renumber (to pointer-alist text-alist) "Renumber a single footnote." (let* ((posn-list (cdr pointer-alist))) (setcar pointer-alist to) @@ -675,8 +641,7 @@ styles." (footnote--insert-text-marker arg old-point))) (defun footnote--sort (list) - (sort list (lambda (e1 e2) - (< (car e1) (car e2))))) + (sort list #'car-less-than-car)) (defun footnote--text-under-cursor () "Return the number of the current footnote if in footnote text. @@ -795,8 +760,7 @@ footnote area, returns `point-max'." (footnote--index-to-string (car alist-ptr)) (footnote--index-to-string (1+ (car alist-ptr)))) - (footnote--renumber (car alist-ptr) - (1+ (car alist-ptr)) + (footnote--renumber (1+ (car alist-ptr)) alist-ptr alist-txt))) (setq i (1+ i))) @@ -900,7 +864,7 @@ delete the footnote with that number." (setq alist-ptr (nth i footnote-pointer-marker-alist)) (setq alist-txt (nth i footnote-text-marker-alist)) (unless (= (1+ i) (car alist-ptr)) - (footnote--renumber (car alist-ptr) (1+ i) alist-ptr alist-txt)) + (footnote--renumber (1+ i) alist-ptr alist-txt)) (setq i (1+ i)))))) (defun footnote-goto-footnote (&optional arg) commit d4fa998c3142b5ae13664295dcf2136397b05f5a Author: Lars Ingebrigtsen Date: Wed May 1 19:04:36 2019 +0200 Restore previous calling signature of gnus-set-info diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 989347c9fd..3d7c37eac8 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -2892,7 +2892,7 @@ See Info node `(gnus)Formatting Variables'." (defun gnus-set-info (group info) (setcdr (gethash group gnus-newsrc-hashtb) - info)) + (list info))) ;;; commit 9e8e3975ad4ce02269168a30b75ce2b054b3387a Author: Stefan Monnier Date: Wed May 1 12:45:37 2019 -0400 * lisp/emacs-lisp/edebug.el: Better handle instrumentation of `end-of-defun` Remove redundant :group args. (edebug-read-top-level-form): Let-bind edebug-active. (edebug-active): Move before this new first use. diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 6dfcc24493..ab5553b4e8 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -70,8 +70,7 @@ Each time it is set to a new value, Edebug will call those functions once and then reset `edebug-setup-hook' to nil. You could use this to load up Edebug specifications associated with a package you are using, but only when you also use Edebug." - :type 'hook - :group 'edebug) + :type 'hook) ;; edebug-all-defs and edebug-all-forms need to be autoloaded ;; because the byte compiler binds them; as a result, if edebug @@ -88,8 +87,7 @@ You can use the command `edebug-all-defs' to toggle the value of this variable. You may wish to make it local to each buffer with \(make-local-variable \\='edebug-all-defs) in your `emacs-lisp-mode-hook'." - :type 'boolean - :group 'edebug) + :type 'boolean) ;; edebug-all-defs and edebug-all-forms need to be autoloaded ;; because the byte compiler binds them; as a result, if edebug @@ -100,8 +98,7 @@ variable. You may wish to make it local to each buffer with "Non-nil means evaluation of all forms will instrument for Edebug. This doesn't apply to loading or evaluations in the minibuffer. Use the command `edebug-all-forms' to toggle the value of this option." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-eval-macro-args nil "Non-nil means all macro call arguments may be evaluated. @@ -110,8 +107,7 @@ macro call arguments as if they will be evaluated. For each macro, an `edebug-form-spec' overrides this option. So to specify exceptions for macros that have some arguments evaluated and some not, use `def-edebug-spec' to specify an `edebug-form-spec'." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-max-depth 150 "Maximum recursion depth when instrumenting code. @@ -122,7 +118,6 @@ the error message \"Too deep - perhaps infinite loop in spec?\". Make this limit larger to countermand that, but you may also need to increase `max-lisp-eval-depth' and `max-specpdl-size'." :type 'integer - :group 'edebug :version "26.1") (defcustom edebug-save-windows t @@ -134,8 +129,7 @@ If the value is a list, only the listed windows are saved and restored. `edebug-toggle-save-windows' may be used to change this variable." - :type '(choice boolean (repeat string)) - :group 'edebug) + :type '(choice boolean (repeat string))) (defcustom edebug-save-displayed-buffer-points nil "If non-nil, save and restore point in all displayed buffers. @@ -148,8 +142,7 @@ window, the buffer's point will be changed to the window's point. Saving and restoring point in all buffers is expensive, since it requires selecting each window twice, so enable this only if you need it." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-initial-mode 'step "Initial execution mode for Edebug, if non-nil. @@ -159,8 +152,7 @@ go, Go-nonstop, trace, Trace-fast, continue, and Continue-fast." :type '(choice (const step) (const next) (const go) (const Go-nonstop) (const trace) (const Trace-fast) (const continue) - (const Continue-fast)) - :group 'edebug) + (const Continue-fast))) (defcustom edebug-trace nil "Non-nil means display a trace of function entry and exit. @@ -169,8 +161,7 @@ function entry or exit per line, indented by the recursion level. You can customize by replacing functions `edebug-print-trace-before' and `edebug-print-trace-after'." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-test-coverage nil "If non-nil, Edebug tests coverage of all expressions debugged. @@ -180,36 +171,30 @@ results are found. Use `edebug-display-freq-count' to display the frequency count and coverage information for a definition." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-continue-kbd-macro nil "If non-nil, continue defining or executing any keyboard macro. Use this with caution since it is not debugged." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-print-length 50 "If non-nil, default value of `print-length' for printing results in Edebug." - :type '(choice integer (const nil)) - :group 'edebug) + :type '(choice integer (const nil))) (defcustom edebug-print-level 50 "If non-nil, default value of `print-level' for printing results in Edebug." - :type '(choice integer (const nil)) - :group 'edebug) + :type '(choice integer (const nil))) (defcustom edebug-print-circle t "If non-nil, default value of `print-circle' for printing results in Edebug." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-unwrap-results nil "Non-nil if Edebug should unwrap results of expressions. That is, Edebug will try to remove its own instrumentation from the result. This is useful when debugging macros where the results of expressions are instrumented expressions." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-on-error t "Value bound to `debug-on-error' while Edebug is active. @@ -225,30 +210,25 @@ After execution is resumed, the error is signaled again." (repeat :menu-tag "When" :value (nil) (symbol :format "%v")) - (const :tag "always" t)) - :group 'edebug) + (const :tag "always" t))) (defcustom edebug-on-quit t "Value bound to `debug-on-quit' while Edebug is active." - :type 'boolean - :group 'edebug) + :type 'boolean) (defcustom edebug-global-break-condition nil "If non-nil, an expression to test for at every stop point. If the result is non-nil, then break. Errors are ignored." :type 'sexp - :risky t - :group 'edebug) + :risky t) (defcustom edebug-sit-for-seconds 1 "Number of seconds to pause when execution mode is `trace' or `continue'." - :type 'number - :group 'edebug) + :type 'number) (defcustom edebug-sit-on-break t "Whether or not to pause for `edebug-sit-for-seconds' on reaching a break." :type 'boolean - :group 'edebug :version "26.1") ;;; Form spec utilities. @@ -547,8 +527,13 @@ already is one.)" (edebug-read-top-level-form))))) +(defvar edebug-active nil) ;; Non-nil when edebug is active + (defun edebug-read-top-level-form () - (let ((starting-point (point))) + (let ((starting-point (point)) + ;; Don't enter Edebug while doing that, in case we're trying to + ;; instrument things like end-of-defun. + (edebug-active t)) (end-of-defun) (beginning-of-defun) (prog1 @@ -586,7 +571,7 @@ already is one.)" (defun edebug-uninstall-read-eval-functions () (interactive) (remove-function load-read-function #'edebug--read) - (advice-remove 'eval-defun 'edebug-eval-defun)) + (advice-remove 'eval-defun #'edebug-eval-defun)) ;;; Edebug internal data @@ -2225,8 +2210,6 @@ into `edebug--cl-macrolet-defs' which is checked in `edebug-list-form-args'." ;;; The debugger itself -(defvar edebug-active nil) ;; Non-nil when edebug is active - (defvar edebug-stack nil) ;; Stack of active functions evaluated via edebug. ;; Should be nil at the top level. @@ -2304,8 +2287,8 @@ and run its entry function, and set up `edebug-before' and `edebug-after'." (cl-letf* ((behavior (get func 'edebug-behavior)) (functions (cdr (assoc behavior edebug-behavior-alist))) - ((symbol-function #'edebug-before) (nth 1 functions)) - ((symbol-function #'edebug-after) (nth 2 functions))) + ((symbol-function 'edebug-before) (nth 1 functions)) + ((symbol-function 'edebug-after) (nth 2 functions))) (funcall (nth 0 functions) func args body))) (defun edebug-default-enter (function args body) @@ -2335,7 +2318,7 @@ and run its entry function, and set up `edebug-before' and (debug-on-error (or debug-on-error edebug-on-error)) (debug-on-quit edebug-on-quit)) (unwind-protect - (let ((signal-hook-function 'edebug-signal)) + (let ((signal-hook-function #'edebug-signal)) (setq edebug-execution-mode (or edebug-next-execution-mode edebug-initial-mode edebug-execution-mode) @@ -2905,7 +2888,7 @@ See `edebug-behavior-alist' for implementations.") (recursive-edit) ; <<<<<<<<<< Recursive edit ;; Do the following, even if quit occurs. - (setq signal-hook-function 'edebug-signal) + (setq signal-hook-function #'edebug-signal) (if edebug-backtrace-buffer (kill-buffer edebug-backtrace-buffer)) @@ -3810,7 +3793,7 @@ Options: (if (consp setting) (set (car setting) (cdr setting)) (kill-local-variable setting)))) - (remove-hook 'kill-buffer-hook 'edebug-kill-buffer t)) + (remove-hook 'kill-buffer-hook #'edebug-kill-buffer t)) (pcase-dolist (`(,var . ,val) '((buffer-read-only . t))) (push (if (local-variable-p var) (cons var (symbol-value var)) var) @@ -3818,7 +3801,7 @@ Options: (set (make-local-variable var) val)) ;; Append `edebug-kill-buffer' to the hook to avoid interfering with ;; other entries that are unguarded against deleted buffer. - (add-hook 'kill-buffer-hook 'edebug-kill-buffer t t))) + (add-hook 'kill-buffer-hook #'edebug-kill-buffer t t))) (defun edebug-kill-buffer () "Used on `kill-buffer-hook' when Edebug is operating in a buffer of Lisp code." @@ -4016,7 +3999,7 @@ This should be a list of `edebug---frame' objects.") (pop-to-buffer edebug-backtrace-buffer) (unless (derived-mode-p 'backtrace-mode) (backtrace-mode) - (add-hook 'backtrace-goto-source-functions 'edebug--backtrace-goto-source)) + (add-hook 'backtrace-goto-source-functions #'edebug--backtrace-goto-source)) (setq edebug-instrumented-backtrace-frames (backtrace-get-frames 'edebug-debugger :constructor #'edebug--make-frame) @@ -4396,8 +4379,8 @@ With prefix argument, make it a temporary breakpoint." ;; We still want to run unload-feature to completion (run-with-idle-timer 0 nil #'(lambda () (unload-feature 'edebug))))) (remove-hook 'called-interactively-p-functions - 'edebug--called-interactively-skip) - (remove-hook 'cl-read-load-hooks 'edebug--require-cl-read) + #'edebug--called-interactively-skip) + (remove-hook 'cl-read-load-hooks #'edebug--require-cl-read) (edebug-uninstall-read-eval-functions) ;; Continue standard unloading. nil) commit 5bd25c095eb7f7d148b47e6823c7eccd6416a693 Author: Stefan Monnier Date: Wed May 1 12:37:48 2019 -0400 * lisp/help.el (function-called-at-point): Use Elisp's forward-sexp-function diff --git a/lisp/help.el b/lisp/help.el index d1f473517d..4dfe471c10 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -265,17 +265,19 @@ If that doesn't give a function, return nil." (condition-case () (save-excursion (save-restriction - (narrow-to-region (max (point-min) - (- (point) 1000)) (point-max)) - ;; Move up to surrounding paren, then after the open. - (backward-up-list 1) - (forward-char 1) - ;; If there is space here, this is probably something - ;; other than a real Lisp function call, so ignore it. - (if (looking-at "[ \t]") - (error "Probably not a Lisp function call")) - (let ((obj (read (current-buffer)))) - (and (symbolp obj) (fboundp obj) obj)))) + (let ((forward-sexp-function nil)) ;Use elisp-mode's value + (narrow-to-region (max (point-min) + (- (point) 1000)) + (point-max)) + ;; Move up to surrounding paren, then after the open. + (backward-up-list 1) + (forward-char 1) + ;; If there is space here, this is probably something + ;; other than a real Lisp function call, so ignore it. + (if (looking-at "[ \t]") + (error "Probably not a Lisp function call")) + (let ((obj (read (current-buffer)))) + (and (symbolp obj) (fboundp obj) obj))))) (error nil)) (let* ((str (find-tag-default)) (sym (if str (intern-soft str)))) commit 5a4f58f7eef542a61663360866f69f477472090c Author: Basil L. Contovounesios Date: Wed May 1 14:51:37 2019 +0100 ; * etc/NEWS: Fix position of +++ marker diff --git a/etc/NEWS b/etc/NEWS index f6676e0e0b..9e3559d27e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -413,12 +413,12 @@ region using a given replacement-function in a non-destructive manner arguments mitigating performance issues when operating on huge buffers. ++++ ** The command 'delete-indentation' now operates on the active region. If the region is active, the command joins all the lines in the region. When there's no active region, the command works on the current and the previous or the next line, as before. -+++ * Changes in Specialized Modes and Packages in Emacs 27.1 commit 7124fec0b6de00b6372a5a3d28eedbf330718e08 Author: Glenn Morris Date: Wed May 1 06:27:17 2019 -0700 ; Auto-commit of loaddefs files. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index ccf2cdc87e..cb378ceaed 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -1799,7 +1799,7 @@ If `global-auto-revert-non-file-buffers' is non-nil, this mode may also revert some non-file buffers, as described in the documentation of that variable. It ignores buffers with modes matching `global-auto-revert-ignore-modes', and buffers with a -non-nil vale of `global-auto-revert-ignore-buffer'. +non-nil value of `global-auto-revert-ignore-buffer'. When a buffer is reverted, a message is generated. This can be suppressed by setting `auto-revert-verbose' to nil. @@ -5200,17 +5200,17 @@ If nil, use Emacs default.") (custom-autoload 'compilation-window-height "compile" t) -(defvar compilation-process-setup-function nil "\ +(defvar compilation-process-setup-function #'ignore "\ Function to call to customize the compilation process. This function is called immediately before the compilation process is started. It can be used to set any variables or functions that are used while processing the output of the compilation process.") -(defvar compilation-buffer-name-function nil "\ +(defvar compilation-buffer-name-function #'compilation--default-buffer-name "\ Function to compute the name of a compilation buffer. The function receives one argument, the name of the major mode of the compilation buffer. It should return a string. -If nil, compute the name with `(concat \"*\" (downcase major-mode) \"*\")'.") +By default, it returns `(concat \"*\" (downcase name-of-mode) \"*\")'.") (defvar compilation-finish-functions nil "\ Functions to call when a compilation process finishes. @@ -7632,14 +7632,14 @@ Display character C using printable string S. (autoload 'standard-display-g1 "disp-table" "\ Display character C as character SC in the g1 character set. This function assumes that your terminal uses the SO/SI characters; -it is meaningless for an X frame. +it is meaningless for a graphical frame. \(fn C SC)" nil nil) (autoload 'standard-display-graphic "disp-table" "\ Display character C as character GC in graphics character set. -This function assumes VT100-compatible escapes; it is meaningless for an -X frame. +This function assumes VT100-compatible escapes; it is meaningless +for a graphical frame. \(fn C GC)" nil nil) @@ -17538,8 +17538,9 @@ Return a regular expression matching image-file filenames." nil nil) (autoload 'insert-image-file "image-file" "\ Insert the image file FILE into the current buffer. -Optional arguments VISIT, BEG, END, and REPLACE are interpreted as for -the command `insert-file-contents'. +Optional arguments VISIT, BEG, END, and REPLACE are interpreted +as for the command `insert-file-contents'. Return list of +absolute file name and number of characters inserted. \(fn FILE &optional VISIT BEG END REPLACE)" nil nil) @@ -18691,15 +18692,17 @@ Major mode for editing JavaScript. \(fn)" t nil) (autoload 'js-jsx-mode "js" "\ -Major mode for editing JSX. +Major mode for editing JavaScript+JSX. -To customize the indentation for this mode, set the SGML offset -variables (`sgml-basic-offset', `sgml-attribute-offset' et al.) -locally, like so: +Simply makes `js-jsx-syntax' buffer-local and sets it to t. - (defun set-jsx-indentation () - (setq-local sgml-basic-offset js-indent-level)) - (add-hook \\='js-jsx-mode-hook #\\='set-jsx-indentation) +`js-mode' may detect and enable support for JSX automatically if +it appears to be used in a JavaScript file. You could also +customize `js-jsx-regexps' to improve that detection; or, you +could set `js-jsx-syntax' to t in your init file, or in a +.dir-locals.el file, or using file variables; or, you could call +`js-jsx-enable' in `js-mode-hook'. You may be better served by +one of the aforementioned options instead of using this mode. \(fn)" t nil) (defalias 'javascript-mode 'js-mode) @@ -35307,7 +35310,12 @@ first backend that could register the file is used. \(fn &optional VC-FILESET COMMENT)" t nil) (autoload 'vc-version-diff "vc" "\ -Report diffs between REV1 and REV2 revisions of the fileset. +Report diffs between revisions REV1 and REV2 in the repository history. +This compares two revisions of the current fileset. +If REV1 is nil, it defaults to the current revision, i.e. revision +of the last commit. +If REV2 is nil, it defaults to the work tree, i.e. the current +state of each file in the fileset. \(fn FILES REV1 REV2)" t nil) @@ -35334,8 +35342,14 @@ The merge base is a common ancestor between REV1 and REV2 revisions. \(fn FILES REV1 REV2)" t nil) (autoload 'vc-version-ediff "vc" "\ -Show differences between revisions of the fileset in the -repository history using ediff. +Show differences between REV1 and REV2 of FILES using ediff. +This compares two revisions of the files in FILES. Currently, +only a single file's revisions can be compared, i.e. FILES can +specify only one file name. +If REV1 is nil, it defaults to the current revision, i.e. revision +of the last commit. +If REV2 is nil, it defaults to the work tree, i.e. the current +state of each file in FILES. \(fn FILES REV1 REV2)" t nil) @@ -38171,43 +38185,45 @@ Zone out, completely." t nil) ;;;;;; "international/uni-digit.el" "international/uni-lowercase.el" ;;;;;; "international/uni-mirrored.el" "international/uni-name.el" ;;;;;; "international/uni-numeric.el" "international/uni-old-name.el" -;;;;;; "international/uni-titlecase.el" "international/uni-uppercase.el" -;;;;;; "isearch.el" "jit-lock.el" "jka-cmpr-hook.el" "language/burmese.el" -;;;;;; "language/cham.el" "language/chinese.el" "language/cyrillic.el" -;;;;;; "language/czech.el" "language/english.el" "language/ethiopic.el" -;;;;;; "language/european.el" "language/georgian.el" "language/greek.el" -;;;;;; "language/hebrew.el" "language/indian.el" "language/japanese.el" -;;;;;; "language/khmer.el" "language/korean.el" "language/lao.el" -;;;;;; "language/misc-lang.el" "language/romanian.el" "language/sinhala.el" -;;;;;; "language/slovak.el" "language/tai-viet.el" "language/thai.el" -;;;;;; "language/tibetan.el" "language/utf-8-lang.el" "language/vietnamese.el" -;;;;;; "ldefs-boot.el" "leim/ja-dic/ja-dic.el" "leim/leim-list.el" -;;;;;; "leim/quail/4Corner.el" "leim/quail/ARRAY30.el" "leim/quail/CCDOSPY.el" -;;;;;; "leim/quail/CTLau-b5.el" "leim/quail/CTLau.el" "leim/quail/ECDICT.el" -;;;;;; "leim/quail/ETZY.el" "leim/quail/PY-b5.el" "leim/quail/PY.el" -;;;;;; "leim/quail/Punct-b5.el" "leim/quail/Punct.el" "leim/quail/QJ-b5.el" -;;;;;; "leim/quail/QJ.el" "leim/quail/SW.el" "leim/quail/TONEPY.el" -;;;;;; "leim/quail/ZIRANMA.el" "leim/quail/ZOZY.el" "leim/quail/arabic.el" -;;;;;; "leim/quail/croatian.el" "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el" -;;;;;; "leim/quail/czech.el" "leim/quail/georgian.el" "leim/quail/greek.el" -;;;;;; "leim/quail/hanja-jis.el" "leim/quail/hanja.el" "leim/quail/hanja3.el" -;;;;;; "leim/quail/hebrew.el" "leim/quail/ipa-praat.el" "leim/quail/latin-alt.el" -;;;;;; "leim/quail/latin-ltx.el" "leim/quail/latin-post.el" "leim/quail/latin-pre.el" -;;;;;; "leim/quail/persian.el" "leim/quail/programmer-dvorak.el" -;;;;;; "leim/quail/py-punct.el" "leim/quail/pypunct-b5.el" "leim/quail/quick-b5.el" -;;;;;; "leim/quail/quick-cns.el" "leim/quail/rfc1345.el" "leim/quail/sami.el" -;;;;;; "leim/quail/sgml-input.el" "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" -;;;;;; "leim/quail/tamil-dvorak.el" "leim/quail/tsang-b5.el" "leim/quail/tsang-cns.el" -;;;;;; "leim/quail/vntelex.el" "leim/quail/vnvni.el" "leim/quail/welsh.el" -;;;;;; "loadup.el" "mail/blessmail.el" "mail/rmailedit.el" "mail/rmailkwd.el" -;;;;;; "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el" -;;;;;; "mail/rmailsum.el" "mail/undigest.el" "menu-bar.el" "mh-e/mh-gnus.el" -;;;;;; "mh-e/mh-loaddefs.el" "minibuffer.el" "mouse.el" "net/tramp-loaddefs.el" -;;;;;; "newcomment.el" "obarray.el" "org/ob-core.el" "org/ob-keys.el" -;;;;;; "org/ob-lob.el" "org/ob-matlab.el" "org/ob-tangle.el" "org/ob.el" -;;;;;; "org/org-archive.el" "org/org-attach.el" "org/org-bbdb.el" -;;;;;; "org/org-clock.el" "org/org-datetree.el" "org/org-element.el" -;;;;;; "org/org-feed.el" "org/org-footnote.el" "org/org-id.el" "org/org-indent.el" +;;;;;; "international/uni-special-lowercase.el" "international/uni-special-titlecase.el" +;;;;;; "international/uni-special-uppercase.el" "international/uni-titlecase.el" +;;;;;; "international/uni-uppercase.el" "isearch.el" "jit-lock.el" +;;;;;; "jka-cmpr-hook.el" "language/burmese.el" "language/cham.el" +;;;;;; "language/chinese.el" "language/cyrillic.el" "language/czech.el" +;;;;;; "language/english.el" "language/ethiopic.el" "language/european.el" +;;;;;; "language/georgian.el" "language/greek.el" "language/hebrew.el" +;;;;;; "language/indian.el" "language/japanese.el" "language/khmer.el" +;;;;;; "language/korean.el" "language/lao.el" "language/misc-lang.el" +;;;;;; "language/romanian.el" "language/sinhala.el" "language/slovak.el" +;;;;;; "language/tai-viet.el" "language/thai.el" "language/tibetan.el" +;;;;;; "language/utf-8-lang.el" "language/vietnamese.el" "ldefs-boot.el" +;;;;;; "leim/ja-dic/ja-dic.el" "leim/leim-list.el" "leim/quail/4Corner.el" +;;;;;; "leim/quail/ARRAY30.el" "leim/quail/CCDOSPY.el" "leim/quail/CTLau-b5.el" +;;;;;; "leim/quail/CTLau.el" "leim/quail/ECDICT.el" "leim/quail/ETZY.el" +;;;;;; "leim/quail/PY-b5.el" "leim/quail/PY.el" "leim/quail/Punct-b5.el" +;;;;;; "leim/quail/Punct.el" "leim/quail/QJ-b5.el" "leim/quail/QJ.el" +;;;;;; "leim/quail/SW.el" "leim/quail/TONEPY.el" "leim/quail/ZIRANMA.el" +;;;;;; "leim/quail/ZOZY.el" "leim/quail/arabic.el" "leim/quail/croatian.el" +;;;;;; "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el" "leim/quail/czech.el" +;;;;;; "leim/quail/georgian.el" "leim/quail/greek.el" "leim/quail/hanja-jis.el" +;;;;;; "leim/quail/hanja.el" "leim/quail/hanja3.el" "leim/quail/hebrew.el" +;;;;;; "leim/quail/ipa-praat.el" "leim/quail/latin-alt.el" "leim/quail/latin-ltx.el" +;;;;;; "leim/quail/latin-post.el" "leim/quail/latin-pre.el" "leim/quail/persian.el" +;;;;;; "leim/quail/programmer-dvorak.el" "leim/quail/py-punct.el" +;;;;;; "leim/quail/pypunct-b5.el" "leim/quail/quick-b5.el" "leim/quail/quick-cns.el" +;;;;;; "leim/quail/rfc1345.el" "leim/quail/sami.el" "leim/quail/sgml-input.el" +;;;;;; "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" "leim/quail/tamil-dvorak.el" +;;;;;; "leim/quail/tsang-b5.el" "leim/quail/tsang-cns.el" "leim/quail/vntelex.el" +;;;;;; "leim/quail/vnvni.el" "leim/quail/welsh.el" "loadup.el" "mail/blessmail.el" +;;;;;; "mail/rmailedit.el" "mail/rmailkwd.el" "mail/rmailmm.el" +;;;;;; "mail/rmailmsc.el" "mail/rmailsort.el" "mail/rmailsum.el" +;;;;;; "mail/undigest.el" "menu-bar.el" "mh-e/mh-gnus.el" "mh-e/mh-loaddefs.el" +;;;;;; "minibuffer.el" "mouse.el" "net/tramp-loaddefs.el" "newcomment.el" +;;;;;; "obarray.el" "org/ob-core.el" "org/ob-keys.el" "org/ob-lob.el" +;;;;;; "org/ob-matlab.el" "org/ob-tangle.el" "org/ob.el" "org/org-archive.el" +;;;;;; "org/org-attach.el" "org/org-bbdb.el" "org/org-clock.el" +;;;;;; "org/org-datetree.el" "org/org-element.el" "org/org-feed.el" +;;;;;; "org/org-footnote.el" "org/org-id.el" "org/org-indent.el" ;;;;;; "org/org-install.el" "org/org-irc.el" "org/org-mobile.el" ;;;;;; "org/org-plot.el" "org/org-table.el" "org/org-timer.el" "org/ox-ascii.el" ;;;;;; "org/ox-beamer.el" "org/ox-html.el" "org/ox-icalendar.el"