commit 1fc6afbdf1ce0f8b23780bd4d2630ed49f365013 (HEAD, refs/remotes/origin/master) Merge: 99b3d64e54 24b6e6edcf Author: Glenn Morris Date: Wed Mar 20 13:47:07 2019 -0700 Merge from origin/emacs-26 24b6e6e (origin/emacs-26) * etc/AUTHORS: Update. 2f22a17 * ; ChangeLog.3 update 0f523de Improve indexing of the user manual bd5795e Fix url-copy-file arglist eaa188a ; * admin/notes/bugtracker: Minor additions and updates. 5ed05fb Fix downloading updates for packages with non-ASCII descriptions e9f2d1f * etc/NEWS: Remove temporary markers. 24fc133 * doc/misc/cc-mode.texi (Config Basics): in @itemize, @asis -... 0f325d1 Don't clobber 'comint-input-autoexpand' in 'read-shell-command' bc75589 Document restrictions when setting window margins, fringes or... cc4cebf More improvements for 'read-buffer's doc string d026d9a * lisp/progmodes/cc-defs.el: Update c-version to 5.33.2 for E... 5dbf08b * src/minibuf.c (Fread_buffer): Minor doc fixes. (Bug#34749) # Conflicts: # etc/NEWS # lisp/url/url-handlers.el commit 99b3d64e54bb896e7b35567ac7022f9d3fb16bbb Author: Stefan Monnier Date: Wed Mar 20 12:51:31 2019 -0400 Eshell: Mostly cosmetic changes to be more explicit about dynbind * lisp/eshell/em-dirs.el (eshell-dirs-initialize): Reveal the lambdas. (eshell-expand-multiple-dots): Fix ^+$ => \`+\' in the regexp. * lisp/eshell/esh-cmd.el (eshell-this-command-hook): Declare as dynamically scoped. (eshell-trap-errors): Use `mapc funcall` since this can't have global/local settings like a true hook. (eshell-do-eval): Split the `let` case from the rest so we can use `cl-progv` rather than `eval` for it. (eshell/which): Use `fboundp` test instead of ugly gymnastics to try and hide the function call from the compiler. * lisp/eshell/esh-var.el (eshell-variable-aliases-list): Reveal the lambdas. (eshell-parse-variable-ref): Use backquotes. diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index 31588a472a..7a22867625 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -62,12 +62,11 @@ they lack somewhat in feel from the typical shell equivalents." (defcustom eshell-dirs-load-hook nil "A hook that gets run when `eshell-dirs' is loaded." :version "24.1" ; removed eshell-dirs-initialize - :type 'hook - :group 'eshell-dirs) + :type 'hook) (defcustom eshell-pwd-convert-function (if (eshell-under-windows-p) - 'expand-file-name - 'identity) + #'expand-file-name + #'identity) "The function used to normalize the value of Eshell's `pwd'. The value returned by `pwd' is also used when recording the last-visited directory in the last-dir-ring, so it will affect the @@ -75,8 +74,7 @@ form of the list used by `cd ='." :type '(radio (function-item file-truename) (function-item expand-file-name) (function-item identity) - (function :tag "Other")) - :group 'eshell-dirs) + (function :tag "Other"))) (defcustom eshell-ask-to-save-last-dir 'always "Determine if the last-dir-ring should be automatically saved. @@ -88,63 +86,53 @@ If set to t, always ask if any Eshell buffers are open at exit time. If set to `always', the list-dir-ring will always be saved, silently." :type '(choice (const :tag "Never" nil) (const :tag "Ask" t) - (const :tag "Always save" always)) - :group 'eshell-dirs) + (const :tag "Always save" always))) (defcustom eshell-cd-shows-directory nil "If non-nil, using `cd' will report the directory it changes to." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-cd-on-directory t "If non-nil, do a cd if a directory is in command position." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-directory-change-hook nil "A hook to run when the current directory changes." - :type 'hook - :group 'eshell-dirs) + :type 'hook) (defcustom eshell-list-files-after-cd nil "If non-nil, call \"ls\" with any remaining args after doing a cd. This is provided for convenience, since the same effect is easily achieved by adding a function to `eshell-directory-change-hook' that calls \"ls\" and references `eshell-last-arguments'." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-pushd-tohome nil "If non-nil, make pushd with no arg behave as `pushd ~' (like `cd'). This mirrors the optional behavior of tcsh." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-pushd-dextract nil "If non-nil, make \"pushd +n\" pop the nth dir to the stack top. This mirrors the optional behavior of tcsh." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-pushd-dunique nil "If non-nil, make pushd only add unique directories to the stack. This mirrors the optional behavior of tcsh." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-dirtrack-verbose t "If non-nil, show the directory stack following directory change. This is effective only if directory tracking is enabled." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) (defcustom eshell-last-dir-ring-file-name (expand-file-name "lastdir" eshell-directory-name) "If non-nil, name of the file to read/write the last-dir-ring. See also `eshell-read-last-dir-ring' and `eshell-write-last-dir-ring'. If it is nil, the last-dir-ring will not be written to disk." - :type 'file - :group 'eshell-dirs) + :type 'file) (defcustom eshell-last-dir-ring-size 32 "If non-nil, the size of the directory history ring. @@ -164,13 +152,11 @@ directories gets pushed, and its size is unlimited. explicitly very much, but every once in a while would like to return to a previously visited directory without having to type in the whole thing again." - :type 'integer - :group 'eshell-dirs) + :type 'integer) (defcustom eshell-last-dir-unique t "If non-nil, `eshell-last-dir-ring' contains only unique entries." - :type 'boolean - :group 'eshell-dirs) + :type 'boolean) ;;; Internal Variables: @@ -189,20 +175,22 @@ Thus, this does not include the current directory.") (setq eshell-variable-aliases-list (append eshell-variable-aliases-list - '(("-" (lambda (indices) - (if (not indices) - (unless (ring-empty-p eshell-last-dir-ring) - (expand-file-name - (ring-ref eshell-last-dir-ring 0))) - (expand-file-name - (eshell-apply-indices eshell-last-dir-ring indices))))) - ("+" "PWD") - ("PWD" (lambda (indices) - (expand-file-name (eshell/pwd))) t) - ("OLDPWD" (lambda (indices) + `(("-" (lambda (indices) + (if (not indices) (unless (ring-empty-p eshell-last-dir-ring) (expand-file-name - (ring-ref eshell-last-dir-ring 0)))) t)))) + (ring-ref eshell-last-dir-ring 0))) + (expand-file-name + (eshell-apply-indices eshell-last-dir-ring indices))))) + ("+" "PWD") + ("PWD" ,(lambda (_indices) + (expand-file-name (eshell/pwd))) + t) + ("OLDPWD" ,(lambda (_indices) + (unless (ring-empty-p eshell-last-dir-ring) + (expand-file-name + (ring-ref eshell-last-dir-ring 0)))) + t)))) (when eshell-cd-on-directory (make-local-variable 'eshell-interpreter-alist) @@ -213,14 +201,14 @@ Thus, this does not include the current directory.") eshell-interpreter-alist))) (add-hook 'eshell-parse-argument-hook - 'eshell-parse-user-reference nil t) + #'eshell-parse-user-reference nil t) (if (eshell-under-windows-p) (add-hook 'eshell-parse-argument-hook - 'eshell-parse-drive-letter nil t)) + #'eshell-parse-drive-letter nil t)) (when (eshell-using-module 'eshell-cmpl) (add-hook 'pcomplete-try-first-hook - 'eshell-complete-user-reference nil t)) + #'eshell-complete-user-reference nil t)) (make-local-variable 'eshell-dirstack) (make-local-variable 'eshell-last-dir-ring) @@ -230,9 +218,9 @@ Thus, this does not include the current directory.") (unless eshell-last-dir-ring (setq eshell-last-dir-ring (make-ring eshell-last-dir-ring-size))) - (add-hook 'eshell-exit-hook 'eshell-write-last-dir-ring nil t) + (add-hook 'eshell-exit-hook #'eshell-write-last-dir-ring nil t) - (add-hook 'kill-emacs-hook 'eshell-save-some-last-dir)) + (add-hook 'kill-emacs-hook #'eshell-save-some-last-dir)) (defun eshell-save-some-last-dir () "Save the list-dir-ring for any open Eshell buffers." @@ -309,11 +297,9 @@ Thus, this does not include the current directory.") (not (and (eshell-under-windows-p) (string-match "\\`[A-Za-z]:[\\/]\\'" path)))) (setq path (substring path 0 (1- (length path))))) - (if eshell-pwd-convert-function - (funcall eshell-pwd-convert-function path) - path))) + (funcall (or eshell-pwd-convert-function #'identity) path))) -(defun eshell-expand-multiple-dots (path) +(defun eshell-expand-multiple-dots (filename) ;; FIXME: This advice recommendation is rather odd: it's somewhat ;; dangerous and it claims not to work with minibuffer-completion, which ;; makes it much less interesting. @@ -326,16 +312,17 @@ in the minibuffer: (advice-add 'expand-file-name :around #'my-expand-multiple-dots) (defun my-expand-multiple-dots (orig-fun filename &rest args) (apply orig-fun (eshell-expand-multiple-dots filename) args))" - (while (string-match "\\(?:^\\|/\\)\\.\\.\\(\\.+\\)\\(?:$\\|/\\)" path) - (let* ((extra-dots (match-string 1 path)) + (while (string-match "\\(?:\\`\\|/\\)\\.\\.\\(\\.+\\)\\(?:\\'\\|/\\)" + filename) + (let* ((extra-dots (match-string 1 filename)) (len (length extra-dots)) replace-text) (while (> len 0) (setq replace-text (concat replace-text "/..") len (1- len))) - (setq path - (replace-match replace-text t t path 1)))) - path) + (setq filename + (replace-match replace-text t t filename 1)))) + filename) (defun eshell-find-previous-directory (regexp) "Find the most recent last-dir matching REGEXP." diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index ee4dbd5550..1ed5d5d701 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -122,24 +122,20 @@ however." (defcustom eshell-prefer-lisp-functions nil "If non-nil, prefer Lisp functions to external commands." - :type 'boolean - :group 'eshell-cmd) + :type 'boolean) (defcustom eshell-lisp-regexp "\\([(`]\\|#'\\)" "A regexp which, if matched at beginning of an argument, means Lisp. Such arguments will be passed to `read', and then evaluated." - :type 'regexp - :group 'eshell-cmd) + :type 'regexp) (defcustom eshell-pre-command-hook nil "A hook run before each interactive command is invoked." - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defcustom eshell-post-command-hook nil "A hook run after each interactive command is invoked." - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defcustom eshell-prepare-command-hook nil "A set of functions called to prepare a named command. @@ -149,8 +145,7 @@ the value of these symbols if necessary. To prevent a command from executing at all, set `eshell-last-command-name' to nil." - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defcustom eshell-named-command-hook nil "A set of functions called before a named command is invoked. @@ -165,7 +160,7 @@ In order to substitute an alternate command form for execution, the hook function should throw it using the tag `eshell-replace-command'. For example: - (add-hook \\='eshell-named-command-hook \\='subst-with-cd) + (add-hook \\='eshell-named-command-hook #\\='subst-with-cd) (defun subst-with-cd (command args) (throw \\='eshell-replace-command (eshell-parse-command \"cd\" args))) @@ -173,8 +168,7 @@ For example: Although useless, the above code will cause any non-glob, non-Lisp command (i.e., `ls' as opposed to `*ls' or `(ls)') to be replaced by a call to `cd' using the arguments that were passed to the function." - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defcustom eshell-pre-rewrite-command-hook '(eshell-no-command-conversion @@ -182,8 +176,7 @@ call to `cd' using the arguments that were passed to the function." "A hook run before command rewriting begins. The terms of the command to be rewritten is passed as arguments, and may be modified in place. Any return value is ignored." - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defcustom eshell-rewrite-command-hook '(eshell-rewrite-for-command @@ -202,8 +195,7 @@ so by adding a function to this hook. The first function to return a substitute command form is the one used. Each function is passed the command's full argument list, which is a list of sexps (typically forms or strings)." - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defvar eshell-post-rewrite-command-function #'identity "Function run after command rewriting is finished. @@ -228,16 +220,14 @@ If an entry is a function, it will be called with the name, and should return non-nil if the command is complex." :type '(repeat :tag "Commands" (choice (string :tag "Name") - (function :tag "Predicate"))) - :group 'eshell-cmd) + (function :tag "Predicate")))) ;;; User Variables: (defcustom eshell-cmd-load-hook nil "A hook that gets run when `eshell-cmd' is loaded." :version "24.1" ; removed eshell-cmd-initialize - :type 'hook - :group 'eshell-cmd) + :type 'hook) (defcustom eshell-debug-command nil "If non-nil, enable Eshell debugging code. @@ -247,9 +237,8 @@ you must re-load `esh-cmd.el'." :initialize 'custom-initialize-default :set (lambda (symbol value) (set symbol value) - (load-library "esh-cmd")) - :type 'boolean - :group 'eshell-cmd) + (load "esh-cmd")) + :type 'boolean) (defcustom eshell-deferrable-commands '(eshell-named-command @@ -259,16 +248,14 @@ you must re-load `esh-cmd.el'." If they return a process object, execution of the calling Eshell command will wait for completion (in the background) before finishing the command." - :type '(repeat function) - :group 'eshell-cmd) + :type '(repeat function)) (defcustom eshell-subcommand-bindings '((eshell-in-subcommand-p t) (default-directory default-directory) (process-environment (eshell-copy-environment))) "A list of `let' bindings for subcommand environments." - :type 'sexp - :group 'eshell-cmd) + :type 'sexp) (put 'risky-local-variable 'eshell-subcommand-bindings t) @@ -307,7 +294,7 @@ otherwise t.") (set (make-local-variable 'eshell-last-command-name) nil) (set (make-local-variable 'eshell-last-async-proc) nil) - (add-hook 'eshell-kill-hook 'eshell-resume-command nil t) + (add-hook 'eshell-kill-hook #'eshell-resume-command nil t) ;; make sure that if a command is over, and no process is being ;; waited for, that `eshell-current-command' is set to nil. This @@ -317,16 +304,17 @@ otherwise t.") (function (lambda () (setq eshell-current-command nil - eshell-last-async-proc nil))) nil t) + eshell-last-async-proc nil))) + nil t) (add-hook 'eshell-parse-argument-hook - 'eshell-parse-subcommand-argument nil t) + #'eshell-parse-subcommand-argument nil t) (add-hook 'eshell-parse-argument-hook - 'eshell-parse-lisp-argument nil t) + #'eshell-parse-lisp-argument nil t) (when (eshell-using-module 'eshell-cmpl) (add-hook 'pcomplete-try-first-hook - 'eshell-complete-lisp-symbols nil t))) + #'eshell-complete-lisp-symbols nil t))) (defun eshell-complete-lisp-symbols () "If there is a user reference, complete it." @@ -724,6 +712,8 @@ ensconced in a list." eshell-current-subjob-p) ,object)) +(defvar eshell-this-command-hook nil) + (defmacro eshell-trap-errors (object) "Trap any errors that occur, so they are not entirely fatal. Also, the variable `eshell-this-command-hook' is available for the @@ -736,9 +726,9 @@ this grossness will be made to disappear by using `call/cc'..." (eshell-condition-case err (prog1 ,object - (run-hooks 'eshell-this-command-hook)) + (mapc #'funcall eshell-this-command-hook)) (error - (run-hooks 'eshell-this-command-hook) + (mapc #'funcall eshell-this-command-hook) (eshell-errorn (error-message-string err)) (eshell-close-handles 1))))) @@ -1059,16 +1049,8 @@ be finished later after the completion of an asynchronous subprocess." ((eq (car form) 'setcdr) (setcar (cdr args) (eshell-do-eval (cadr args) synchronous-p)) (eval form)) - ((memq (car form) '(let catch condition-case unwind-protect)) - ;; `let', `condition-case' and `unwind-protect' have to be - ;; handled specially, because we only want to call - ;; `eshell-do-eval' on their first form. - ;; - ;; NOTE: This requires obedience by all forms which this - ;; function might encounter, that they do not contain - ;; other special forms. - (if (and (eq (car form) 'let) - (not (eq (car (cadr args)) 'eshell-do-eval))) + ((eq (car form) 'let) + (if (not (eq (car (cadr args)) 'eshell-do-eval)) (eshell-manipulate "evaluating let args" (dolist (letarg (car args)) (if (and (listp letarg) @@ -1076,6 +1058,21 @@ be finished later after the completion of an asynchronous subprocess." (setcdr letarg (list (eshell-do-eval (cadr letarg) synchronous-p))))))) + (cl-progv + (mapcar (lambda (binding) (if (consp binding) (car binding) binding)) + (car args)) + ;; These expressions should all be constants now. + (mapcar (lambda (binding) (if (consp binding) (eval (cadr binding)))) + (car args)) + (eshell-do-eval (macroexp-progn (cdr args)) synchronous-p))) + ((memq (car form) '(catch condition-case unwind-protect)) + ;; `condition-case' and `unwind-protect' have to be + ;; handled specially, because we only want to call + ;; `eshell-do-eval' on their first form. + ;; + ;; NOTE: This requires obedience by all forms which this + ;; function might encounter, that they do not contain + ;; other special forms. (unless (eq (car form) 'unwind-protect) (setq args (cdr args))) (unless (eq (caar args) 'eshell-do-eval) @@ -1158,10 +1155,9 @@ be finished later after the completion of an asynchronous subprocess." (setq name (substring name 1) direct t)) (if (and (not direct) - (eshell-using-module 'eshell-alias) + (fboundp 'eshell-lookup-alias) (setq alias - (funcall (symbol-function 'eshell-lookup-alias) - name))) + (eshell-lookup-alias name))) (setq program (concat name " is an alias, defined as \"" (cadr alias) "\""))) diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index 133a4f9c71..d8be72e359 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -128,60 +128,55 @@ variable value, a subcommand, or even the result of a Lisp form." (defcustom eshell-var-load-hook nil "A list of functions to call when loading `eshell-var'." :version "24.1" ; removed eshell-var-initialize - :type 'hook - :group 'eshell-var) + :type 'hook) (defcustom eshell-prefer-lisp-variables nil "If non-nil, prefer Lisp variables to environment variables." - :type 'boolean - :group 'eshell-var) + :type 'boolean) (defcustom eshell-complete-export-definition t "If non-nil, completing names for `export' shows current definition." - :type 'boolean - :group 'eshell-var) + :type 'boolean) (defcustom eshell-modify-global-environment nil "If non-nil, using `export' changes Emacs's global environment." - :type 'boolean - :group 'eshell-var) + :type 'boolean) (defcustom eshell-variable-name-regexp "[A-Za-z0-9_-]+" "A regexp identifying what constitutes a variable name reference. Note that this only applies for `$NAME'. If the syntax `$' is used, then NAME can contain any character, including angle brackets, if they are quoted with a backslash." - :type 'regexp - :group 'eshell-var) + :type 'regexp) (defcustom eshell-variable-aliases-list - '(;; for eshell.el - ("COLUMNS" (lambda (indices) (window-width)) t) - ("LINES" (lambda (indices) (window-height)) t) + `(;; for eshell.el + ("COLUMNS" ,(lambda (_indices) (window-width)) t) + ("LINES" ,(lambda (_indices) (window-height)) t) ;; for eshell-cmd.el - ("_" (lambda (indices) - (if (not indices) - (car (last eshell-last-arguments)) - (eshell-apply-indices eshell-last-arguments - indices)))) + ("_" ,(lambda (indices) + (if (not indices) + (car (last eshell-last-arguments)) + (eshell-apply-indices eshell-last-arguments + indices)))) ("?" eshell-last-command-status) ("$" eshell-last-command-result) ("0" eshell-command-name) - ("1" (lambda (indices) (nth 0 eshell-command-arguments))) - ("2" (lambda (indices) (nth 1 eshell-command-arguments))) - ("3" (lambda (indices) (nth 2 eshell-command-arguments))) - ("4" (lambda (indices) (nth 3 eshell-command-arguments))) - ("5" (lambda (indices) (nth 4 eshell-command-arguments))) - ("6" (lambda (indices) (nth 5 eshell-command-arguments))) - ("7" (lambda (indices) (nth 6 eshell-command-arguments))) - ("8" (lambda (indices) (nth 7 eshell-command-arguments))) - ("9" (lambda (indices) (nth 8 eshell-command-arguments))) - ("*" (lambda (indices) - (if (not indices) - eshell-command-arguments - (eshell-apply-indices eshell-command-arguments - indices))))) + ("1" ,(lambda (_indices) (nth 0 eshell-command-arguments))) + ("2" ,(lambda (_indices) (nth 1 eshell-command-arguments))) + ("3" ,(lambda (_indices) (nth 2 eshell-command-arguments))) + ("4" ,(lambda (_indices) (nth 3 eshell-command-arguments))) + ("5" ,(lambda (_indices) (nth 4 eshell-command-arguments))) + ("6" ,(lambda (_indices) (nth 5 eshell-command-arguments))) + ("7" ,(lambda (_indices) (nth 6 eshell-command-arguments))) + ("8" ,(lambda (_indices) (nth 7 eshell-command-arguments))) + ("9" ,(lambda (_indices) (nth 8 eshell-command-arguments))) + ("*" ,(lambda (indices) + (if (not indices) + eshell-command-arguments + (eshell-apply-indices eshell-command-arguments + indices))))) "This list provides aliasing for variable references. It is very similar in concept to what `eshell-user-aliases-list' does for commands. Each member of this defines the name of a command, @@ -197,8 +192,7 @@ function), and the arguments passed to this function would be the list '(10 20)', and nil." :type '(repeat (list string sexp (choice (const :tag "Copy to environment" t) - (const :tag "Use only in Eshell" nil)))) - :group 'eshell-var) + (const :tag "Use only in Eshell" nil))))) (put 'eshell-variable-aliases-list 'risky-local-variable t) @@ -397,6 +391,8 @@ process any indices that come after the variable reference." indices (and (not (eobp)) (eq (char-after) ?\[) (eshell-parse-indices)) + ;; This is an expression that will be evaluated by `eshell-do-eval', + ;; which only support let-binding of dynamically-scoped vars value `(let ((indices ',indices)) ,value)) (if get-len `(length ,value) @@ -419,18 +415,17 @@ Possible options are: (if (not end) (throw 'eshell-incomplete ?\{) (prog1 - (list 'eshell-convert - (list 'eshell-command-to-value - (list 'eshell-as-subcommand - (eshell-parse-command - (cons (1+ (point)) end))))) + `(eshell-convert + (eshell-command-to-value + (eshell-as-subcommand + ,(eshell-parse-command (cons (1+ (point)) end))))) (goto-char (1+ end)))))) ((memq (char-after) '(?\' ?\")) (let ((name (if (eq (char-after) ?\') (eshell-parse-literal-quote) (eshell-parse-double-quote)))) (if name - (list 'eshell-get-variable (eval name) 'indices)))) + `(eshell-get-variable ,(eval name) indices)))) ((eq (char-after) ?\<) (let ((end (eshell-find-delimiter ?\< ?\>))) (if (not end) @@ -439,37 +434,30 @@ Possible options are: (cmd (concat (buffer-substring (1+ (point)) end) " > " temp))) (prog1 - (list - 'let (list (list 'eshell-current-handles - (list 'eshell-create-handles temp - (list 'quote 'overwrite)))) - (list - 'progn - (list 'eshell-as-subcommand - (eshell-parse-command cmd)) - (list 'ignore - (list 'nconc 'eshell-this-command-hook - (list 'list - (list 'function - (list 'lambda nil - (list 'delete-file temp)))))) - (list 'quote temp))) + `(let ((eshell-current-handles + (eshell-create-handles ,temp 'overwrite))) + (progn + (eshell-as-subcommand ,(eshell-parse-command cmd)) + (ignore + (nconc eshell-this-command-hook + (list (function (lambda () + (delete-file ,temp)))))) + (quote ,temp))) (goto-char (1+ end))))))) ((eq (char-after) ?\() (condition-case nil - (list 'eshell-command-to-value - (list 'eshell-lisp-command - (list 'quote (read (current-buffer))))) + `(eshell-command-to-value + (eshell-lisp-command + ',(read (current-buffer)))) (end-of-file (throw 'eshell-incomplete ?\()))) ((assoc (char-to-string (char-after)) eshell-variable-aliases-list) (forward-char) - (list 'eshell-get-variable - (char-to-string (char-before)) 'indices)) + `(eshell-get-variable ,(char-to-string (char-before)) indices)) ((looking-at eshell-variable-name-regexp) (prog1 - (list 'eshell-get-variable (match-string 0) 'indices) + `(eshell-get-variable ,(match-string 0) indices) (goto-char (match-end 0)))) (t (error "Invalid variable reference")))) commit 24b6e6edcfe034f76de475657cb3997821cfd1f0 Author: Nicolas Petton Date: Wed Mar 20 17:36:29 2019 +0100 * etc/AUTHORS: Update. diff --git a/etc/AUTHORS b/etc/AUTHORS index 7b93876d3f..73c5245678 100644 --- a/etc/AUTHORS +++ b/etc/AUTHORS @@ -442,8 +442,8 @@ Bartosz Duszel: changed allout.el bib-mode.el cc-cmds.el hexl.el icon.el Basil L. Contovounesios: changed simple.el message.el sequences.texi bibtex.el css-mode-tests.el css-mode.el customize.texi display.texi - gnus-art.el json-tests.el json.el lists.texi man.el rcirc.el - shr-color.el text.texi + gnus-art.el json-tests.el json.el lists.texi man.el modes.texi rcirc.el + shr-color.el text.texi url-handlers.el Bastian Beischer: changed include.el mru-bookmark.el refs.el semantic/complete.el senator.el @@ -1355,7 +1355,7 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c] and changed xdisp.c msdos.c w32.c display.texi w32fns.c simple.el files.el fileio.c keyboard.c w32proc.c files.texi w32term.c text.texi dispnew.c frames.texi emacs.c dispextern.h lisp.h process.c term.c - window.c and 1124 other files + window.c and 1125 other files Emanuele Giaquinta: changed configure.ac rxvt.el charset.c etags.c fontset.c frame.el gnus-faq.texi loadup.el lread.c sh-script.el @@ -3598,7 +3598,7 @@ Nicolas Graner: changed message.el Nicolas Petton: wrote map-tests.el map.el seq-tests.el seq.el thunk-tests.el thunk.el and co-wrote auth-source-pass.el auth-source-tests.el subr-tests.el -and changed README sequences.texi configure.ac sed2v2.inp authors.el +and changed README configure.ac sed2v2.inp sequences.texi authors.el README.W32 emacs.png emacs23.png arc-mode.el cl-extra.el emacs.svg manoj-dark-theme.el Emacs.icns HISTORY Makefile.in auth-source.el emacs.ico fns.c make-tarball.txt obarray-tests.el obarray.el @@ -4846,6 +4846,8 @@ and changed ibuffer.el dired-tests.el ibuf-ext.el dired.el dired-aux.el Titus von der Malsburg: changed simple.el window.el +Tobias Bading: changed progmodes/compile.el + Tobias C. Rittweiler: changed font-lock.el searching.texi sendmail.el Tobias Ringström: changed etags.c commit 2f22a1793e21736f3cf64ec48800238e16c784a0 Author: Nicolas Petton Date: Wed Mar 20 17:35:43 2019 +0100 * ; ChangeLog.3 update diff --git a/ChangeLog.3 b/ChangeLog.3 index 8436cecf17..53c1bcf614 100644 --- a/ChangeLog.3 +++ b/ChangeLog.3 @@ -1,3 +1,273 @@ +2019-03-20 Eli Zaretskii + + Improve indexing of the user manual + + * doc/emacs/search.texi (Word Search): Improve indexing of + "M-s M-w". + +2019-03-19 Basil L. Contovounesios + + Fix url-copy-file arglist + + * lisp/url/url-handlers.el: Silence byte-compiler. + (url-copy-file): Add 6th argument following change to copy-file in + 2012-12-16T19:22:27+01:00!romain@orebokech.com. (bug#4410) + +2019-03-19 Eli Zaretskii + + Fix downloading updates for packages with non-ASCII descriptions + + * lisp/emacs-lisp/package.el (package--download-one-archive): + Make sure archive contents are written using UTF-8 encoding. + (Bug#34909) + (list-packages): Set buffer's encoding to UTF-8. + +2019-03-18 Nicolas Petton + + * etc/NEWS: Remove temporary markers. + +2019-03-15 Alan Mackenzie + + * doc/misc/cc-mode.texi (Config Basics): in @itemize, @asis -> @w{} + +2019-03-15 Eli Zaretskii + + Don't clobber 'comint-input-autoexpand' in 'read-shell-command' + + * lisp/shell.el (shell-completion-vars): Set only the + buffer-local value of 'comint-input-autoexpand'. (Bug#34815) + +2019-03-13 Martin Rudalics + + Document restrictions when setting window margins, fringes or scroll bars + + * src/window.c (Fset_window_margins, Fset_window_fringes) + (Fset_window_scroll_bars): In doc-strings tell that a window + must be large enough to accommodate fringes, sroll bars and + margins of the desired size. + * doc/lispref/display.texi (Fringe Size/Pos, Scroll Bars) + (Display Margins): Tell that windows must be large enough to + accommodate fringes, sroll bars and margins of the desired + size. + +2019-03-10 Eli Zaretskii + + More improvements for 'read-buffer's doc string + + * src/minibuf.c (Fread_buffer): Further improve the doc + string. (Bug#347694) + +2019-03-10 Alan Mackenzie + + * lisp/progmodes/cc-defs.el: Update c-version to 5.33.2 for Emacs 26.2 + +2019-03-09 Eli Zaretskii + + * src/minibuf.c (Fread_buffer): Minor doc fixes. (Bug#34749) + +2019-03-09 Eli Zaretskii + + Fix markup of fake keys in the ELisp manual + + * doc/lispref/keymaps.texi (Menu Bar, Tool Bar): Fix markup of + fake keys. (Bug#34785) + +2019-03-09 Eli Zaretskii + + Avoid errors in Auto Revert mode + + * lisp/autorevert.el (auto-revert-buffers): Cancel + auto-revert-timer only if it is non-nil. This avoids errors + on first invocation of Auto-Revert mode. + +2019-03-09 Michael Albinus + + Mention empty strings in file name expansion, emacs lisp reference + + * doc/lispref/files.texi (Files, File Name Expansion): + Mention also empty strings. + +2019-03-08 Alan Mackenzie + + cc-mode.texi: Work around makeinfo alignment bug. Fix problem with ss index + + * doc/misc/cc-mode.texi (top level): Using txicommandconditionals to + differentiate between the C and perl versions of Texinfo, create an "ss + index" unless we are both using the C Texinfo and are building the .dvi output + format. + (Config Basics): Work around a perl Texinfo alignment bug by writing a + separate version of an item list structure for this version, simplifying it + considerably. + +2019-03-08 Martin Rudalics + + Warn against recursive invocations of 'buffer-list-update-hook' (Bug#34765) + + * src/buffer.c (Vbuffer_list_update_hook): + * doc/lispref/buffers.texi (Buffer List): Warn against + recursive invocations of 'buffer-list-update-hook' (Bug#34765). + +2019-03-08 Martin Rudalics + + Provide more details in doc-string of 'delete-windows-on' (Bug#34749) + + * lisp/window.el (delete-windows-on): Provide more details in + doc-string (Bug#34749). + +2019-03-08 Eli Zaretskii + + Improve documentation of 'delete-windows-on' + + * doc/emacs/windows.texi (Change Window): Document + 'delete-windows-on'. + + * lisp/window.el (delete-windows-on): Doc fix. (Bug#34749) + +2019-03-08 Eli Zaretskii + + * lisp/frame.el (make-frame-command): Doc fix. (Bug#34715) + +2019-03-07 Eli Zaretskii + + Avoid undefined behavior in gdb-mi.el + + * lisp/progmodes/gdb-mi.el (gdb-send): Don't call match-string + if this is not a control command. (Bug#34769) + +2019-03-06 Martin Rudalics + + * lisp/window.el (fit-frame-to-buffer): Make doc-string more accurate. + +2019-03-05 Basil L. Contovounesios + + Minor spelling and grammar fixes (bug#34756) + + doc/misc/cc-mode.texi (Style Variables, Customizing Indentation): + doc/misc/ede.texi (Extending EDE, ede-project-placeholder) + (ede-target, ede-proj-target, ede-compilation-program, ede-compiler) + (ede-linker): Remove apostrophe from possessive "it's". + doc/lispintro/emacs-lisp-intro.texi (Find a File): + doc/misc/gnus-faq.texi (FAQ 2-2): Write "an other" as a single word. + doc/misc/gnus.texi (Article Buttons): + lisp/gnus/gnus-art.el (gnus-button-mid-or-mail-heuristic-alist) + (gnus-button-mid-or-mail-heuristic): Write singular number of + Message-IDs, rather than plural. + lisp/gnus/message.el (message-user-fqdn): Capitalize initialism. + +2019-03-04 Eli Zaretskii + + Minor improvement of documentation of '(when CONDITION . SPEC)' + + * doc/lispref/display.texi (Other Display Specs): Add a caveat + to using the '(when CONDITION . SPEC)' display specs. + +2019-03-02 Eli Zaretskii + + Improve documentation of 'auto-coding-functions' + + * doc/lispref/nonascii.texi (Default Coding Systems): Clarify + that the functions in 'auto-coding-functions' are called both + for decoding and for encoding. + + * lisp/international/mule.el (auto-coding-functions): Doc fix. + +2019-03-02 Eli Zaretskii + + Fix visiting XML files with non-Unix EOL format + + * lisp/international/mule.el (sgml-xml-auto-coding-function) + (sgml-html-meta-auto-coding-function): Don't use + 'buffer-file-coding-system' if the buffer is unibyte. + (Bug#34704) + +2019-03-02 Basil L. Contovounesios + + Update example major mode code in Elisp manual + + * doc/lispref/modes.texi (Example Major Modes): Update code examples + to reflect current state of lisp/textmodes/text-mode.el and + lisp/emacs-lisp/lisp-mode.el. (bug#34671) + +2019-03-01 Eli Zaretskii + + Fix a typo in the Calc manual + + * doc/misc/calc.texi (Algebraic Tutorial): Fix parentheses in + @example. (Bug#34689) + +2019-03-01 Eli Zaretskii + + Minor improvement in cross-references of the ELisp manual + + * doc/lispref/modes.texi (Minor Mode Conventions): Add + cross-references to related major-mode descriptions. (Bug#34678) + +2019-03-01 Tobias Bading (tiny change) + + Fix last change on 'compilation-parse-errors' + + * lisp/progmodes/compile.el (compilation-parse-errors): Fix + previous change in this function. (Bug#34479) + +2019-02-25 Dmitry Gutov + + Backport: js--re-search-backward-inner: Fix infloop + + Fix JS indentation infloop reported in + https://github.com/mooz/js2-mode/issues/513. + + * lisp/progmodes/js.el (js--re-search-backward-inner): Account for + multiline string literals. + * test/manual/indent/js.js: New test example. + + (cherry picked from commit b01a4295c2f9bb58858880e4e28b05cc8396791c) + +2019-02-23 Eli Zaretskii + + Minor improvement for docs of completion + + * doc/lispref/minibuf.texi (Completion Commands) + (Completion in Buffers, Programmed Completion): Add to text + that references completion tables a cross-reference to where + "completion table" is described. + (Programmed Completion): Fix the description of + 'completion-table-dynamic'. Add more cross-references. + +2019-02-22 Ken Brown + + Disable the timerfd interface on Cygwin + + * configure.ac (emacs_cv_have_timerfd): Set to "no" on Cygwin. + +2019-02-22 Eli Zaretskii + + Fix a typo in the doc string of 'regex-opt' + + * lisp/emacs-lisp/regexp-opt.el (regexp-opt): Fix example in + the doc string. (Bug#34596) + +2019-02-21 Michael Albinus + + Document bash 5.0.0 misbehavior in tramp.texi (Bug#34192) + + * doc/misc/tramp.texi (Frequently Asked Questions): Warn about + bash 5.0.0 and HISTSIZE=0. (Bug#34192) + +2019-02-20 Nicolas Petton + + Bump Emacs version to 26.1.92 + + * README: + * configure.ac: + * msdos/sed2v2.inp: + * nt/README.W32: Bump Emacs version to 26.1.92. + +2019-02-20 Nicolas Petton + + * ; ChangeLog.3 update + + * etc/AUTHORS: Update. + 2019-02-20 Glenn Morris Remove .art from the default list of ImageMagick extensions @@ -64676,7 +64946,7 @@ This file records repository revisions from commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to -commit a19bfb7a5e3557a69824cdbe7d414f5ef422555c (inclusive). +commit 0f523deec1c1e9e2a5a3474f912aa2183d3fe33d (inclusive). See ChangeLog.1 for earlier changes. ;; Local Variables: commit 9efc43f34adfff2f00162fb85685824557d00eb1 Author: Stefan Monnier Date: Wed Mar 20 12:30:53 2019 -0400 * lisp/pcomplete.el: Improve heuristic to rely less on c-t-subvert. (pcomplete-completions-at-point): Try and take \ escapes into account when guessing the beginning of the text we're completing. diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index d0f2a2e24d..e080074927 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el @@ -444,10 +444,28 @@ Same as `pcomplete' but using the standard completion UI." ;; table which expects strings using a prefix from the ;; buffer's text but internally uses the corresponding ;; prefix from pcomplete-stub. + ;; + (argbeg (pcomplete-begin)) + ;; When completing an envvar within an argument in Eshell + ;; (e.g. "cd /home/$US TAB"), `pcomplete-stub' will just be + ;; "US" whereas `argbeg' will point to the first "/". + ;; We could rely on c-t-subvert to handle the difference, + ;; but we try here to guess the "real" beginning so as to + ;; rely less on c-t-subvert. (beg (max (- (point) (length pcomplete-stub)) - (pcomplete-begin))) - (buftext (pcomplete-unquote-argument - (buffer-substring beg (point))))) + argbeg)) + buftext) + ;; Try and improve our guess of `beg' in case the difference + ;; between pcomplete-stub and the buffer's text is simply due to + ;; some chars removed by unquoting. Again, this is not + ;; indispensable but reduces the reliance on c-t-subvert and + ;; improves corner case behaviors. + (while (progn (setq buftext (pcomplete-unquote-argument + (buffer-substring beg (point)))) + (and (> beg argbeg) + (> (length pcomplete-stub) (length buftext)))) + (setq beg (max argbeg (- beg (- (length pcomplete-stub) + (length buftext)))))) (when completions (let ((table (completion-table-with-quoting commit d081450f379686a7794ff3484116fbc510c86fc0 Author: Paul Eggert Date: Wed Mar 20 09:23:05 2019 -0700 Fix pcomplete typo in recent regex typo fix Problem reported by Stefan Monnier in: https://lists.gnu.org/r/emacs-devel/2019-03/msg00682.html * lisp/pcomplete.el (pcomplete-parse-comint-arguments): Restore the trailing backslash (but two of them this time). diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index ef285db57e..d0f2a2e24d 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el @@ -768,7 +768,7 @@ this is `comint-dynamic-complete-functions'." (push (point) begins) (while (progn - (skip-chars-forward "^ \t\n") + (skip-chars-forward "^ \t\n\\\\") (when (eq (char-after) ?\\) (forward-char 1) (unless (eolp) commit 18fc4ac5294d85e37d9e544c04b5d4e89ef3237c Author: Stefan Monnier Date: Wed Mar 20 10:52:30 2019 -0400 * test/lisp/minibuffer-tests.el (completion-table-subvert-test): New test diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el index 77bfea9371..35df7cc17f 100644 --- a/test/lisp/minibuffer-tests.el +++ b/test/lisp/minibuffer-tests.el @@ -74,5 +74,11 @@ 'completion-table-with-predicate full-collection no-A nil)))))) +(ert-deftest completion-table-subvert-test () + (let* ((origtable '("A-hello" "A-there")) + (subvtable (completion-table-subvert origtable "B" "A"))) + (should (equal (try-completion "B-hel" subvtable) + "B-hello")))) + (provide 'completion-tests) ;;; completion-tests.el ends here commit 78c9c2a110aa94e82c90549c81e8911a006ee538 Author: Stefan Monnier Date: Wed Mar 20 09:58:28 2019 -0400 * lisp/minibuffer.el (completion-table-subvert): Fix typo from rev 5697ca55cb diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index df0acbb343..dbd24dfa0a 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -269,7 +269,7 @@ the form (concat S2 S)." (+ beg (- (length s1) (length s2)))) . ,(and (eq (car-safe res) 'boundaries) (cddr res))))) ((stringp res) - (if (string-prefix-p s2 string completion-ignore-case) + (if (string-prefix-p s2 res completion-ignore-case) (concat s1 (substring res (length s2))))) ((eq action t) (let ((bounds (completion-boundaries str table pred ""))) commit 65b395d7ccd6333c953328d7bf3116d52324285a Author: Mattias Engdegård Date: Wed Mar 20 10:37:36 2019 +0100 Repair eshell-query-kill-processes * lisp/eshell/esh-proc.el (eshell-query-kill-processes): Remove invalid `format-message' call; `eshell-round-robin-kill' wants just the format string. diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index 55251f5bfb..3432582cf4 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -498,7 +498,7 @@ See the variable `eshell-kill-processes-on-exit'." (buffer-name)))) (eshell-round-robin-kill (if (eq eshell-kill-processes-on-exit 'every) - (format-message "Kill Eshell child process `%s'? ")))) + "Kill Eshell child process `%s'? "))) (let ((buf (get-buffer "*Process List*"))) (if (and buf (buffer-live-p buf)) (kill-buffer buf))) commit 0f523deec1c1e9e2a5a3474f912aa2183d3fe33d Author: Eli Zaretskii Date: Wed Mar 20 11:29:04 2019 +0200 Improve indexing of the user manual * doc/emacs/search.texi (Word Search): Improve indexing of "M-s M-w". diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index ae22a90a16..9611d34186 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -665,6 +665,8 @@ matching}) has no effect on them. @kindex M-s M-w @findex eww-search-words @vindex eww-search-prefix +@cindex Internet search +@cindex search Internet for keywords To search the Web for the text in region, type @kbd{M-s M-w}. This command performs an Internet search for the words in region using the search engine whose @acronym{URL} is specified by the variable commit f13d97b4de02586cce49909aa2f3f51fcb5daa5f Author: Eli Zaretskii Date: Wed Mar 20 11:21:54 2019 +0200 Fix defining keyboard macros in CUA mode * lisp/emulation/cua-base.el (cua--prefix-override-replay): Push the key to replace wrapped in '(no-record . KEY)', so that it doesn't get recorded more than once. (Bug#34901) * src/keyboard.c (read_char): Handle the '(no-record . KEY)' event by substituting KEY for it. (syms_of_keyboard) : New DEFSYM. : Update the doc string. * doc/lispref/commands.texi (Event Input Misc): Document the '(no-record . EVENT)' form. diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 1eb580e1e0..cd44c1c87e 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -2880,6 +2880,14 @@ command's key sequence (as returned by, e.g., @code{this-command-keys}), as the events will already have been added once as they were read for the first time. An element of the form @w{@code{(t . @var{event})}} forces @var{event} to be added to the current command's key sequence. + +@cindex not recording input events +@cindex input events, prevent recording +Elements read from this list are normally recorded by the +record-keeping features (@pxref{Recording Input}) and while defining a +keyboard macro (@pxref{Keyboard Macros}). However, an element of the +form @w{@code{(no-record . @var{event})}} causes @var{event} to be +processed normally without recording it. @end defvar @defun listify-key-sequence key diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index 43e0956ea8..302ef12386 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el @@ -710,7 +710,8 @@ a cons (TYPE . COLOR), then both properties are affected." ;; C-x binding after the first C-x C-x was rewritten to just C-x). (prefix-command-preserve-state) ;; Push the key back on the event queue - (setq unread-command-events (cons key unread-command-events)))) + (setq unread-command-events (cons (cons 'no-record key) + unread-command-events)))) (defun cua--prefix-override-handler () "Start timer waiting for prefix key to be followed by another key. diff --git a/src/keyboard.c b/src/keyboard.c index 22e4377ee8..362bd66387 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2364,7 +2364,14 @@ read_char (int commandflag, Lisp_Object map, if (CONSP (c) && EQ (XCAR (c), Qt)) c = XCDR (c); else - reread = true; + { + if (CONSP (c) && EQ (XCAR (c), Qno_record)) + { + c = XCDR (c); + recorded = true; + } + reread = true; + } /* Undo what read_char_x_menu_prompt did when it unread additional keys returned by Fx_popup_menu. */ @@ -2745,7 +2752,14 @@ read_char (int commandflag, Lisp_Object map, if (CONSP (c) && EQ (XCAR (c), Qt)) c = XCDR (c); else - reread = true; + { + if (CONSP (c) && EQ (XCAR (c), Qno_record)) + { + c = XCDR (c); + recorded = true; + } + reread = true; + } } /* Read something from current KBOARD's side queue, if possible. */ @@ -2807,6 +2821,11 @@ read_char (int commandflag, Lisp_Object map, if (CONSP (c) && EQ (XCAR (c), Qt)) c = XCDR (c); + else if (CONSP (c) && EQ (XCAR (c), Qno_record)) + { + c = XCDR (c); + recorded = true; + } } non_reread: @@ -11193,6 +11212,7 @@ syms_of_keyboard (void) Fput (var, Qevent_symbol_elements, list1 (var)); } } + DEFSYM (Qno_record, "no-record"); button_down_location = make_nil_vector (5); staticpro (&button_down_location); @@ -11303,7 +11323,9 @@ so that you can determine whether the command was run by mouse or not. */); These events are processed first, before actual keyboard input. Events read from this list are not normally added to `this-command-keys', as they will already have been added once as they were read for the first time. -An element of the form (t . EVENT) forces EVENT to be added to that list. */); +An element of the form (t . EVENT) forces EVENT to be added to that list. +An element of the form (no-record . EVENT) means process EVENT, but do not +record it in the keyboard macros, recent-keys, and the dribble file. */); Vunread_command_events = Qnil; DEFVAR_LISP ("unread-post-input-method-events", Vunread_post_input_method_events, commit 047c1b19353ff58d8cd45935c7b44c911b70e312 Author: Stefan Monnier Date: Tue Mar 19 23:41:20 2019 -0400 * lisp/eshell/em-cmpl.el: Use completion-at-point i.s.o pcomplete (eshell-cmpl-initialize): Refrain from binding to the `tab` key, which prevents the tab -> TAB remapping. Use completion-at-point and completion-help-at-point. (eshell-complete-commands-list): Use `fboundp` test instead of ugly gymnastics to try and hide the function call from the compiler. (eshell-pcomplete): Make it an alias of completion-at-point. * doc/misc/eshell.texi (Completion): Change wording to reflect different default behavior. diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index ce3a30c3a9..716b4b7a50 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -499,15 +499,14 @@ be directories @emph{and} files. Eshell provides predefined completions for the built-in functions and some common external commands, and you can define your own for any command. -Eshell completion also works for lisp forms and glob patterns. If the -point is on a lisp form, then @key{TAB} will behave similarly to completion -in @code{elisp-mode} and @code{lisp-interaction-mode}. For glob -patterns, If there are few enough possible completions of the patterns, -they will be cycled when @key{TAB} is pressed, otherwise it will be removed -from the input line and the possible completions will be listed. - -If you want to see the entire list of possible completions when it's -below the cycling threshold, press @kbd{M-?}. +Eshell completion also works for lisp forms and glob patterns. If the point is +on a lisp form, then @key{TAB} will behave similarly to completion in +@code{elisp-mode} and @code{lisp-interaction-mode}. For glob patterns, the +pattern will be removed from the input line, and replaced by the +completion. + +If you want to see the entire list of possible completions (e.g. when it's +below the @code{completion-cycle-threshold}), press @kbd{M-?}. @subsection pcomplete Pcomplete, short for programmable completion, is the completion diff --git a/etc/NEWS b/etc/NEWS index f955308ebe..6b132eb41d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -985,6 +985,11 @@ default, and not just the opening element. ** Eshell +*** TAB completion uses the standard completion-at-point rather than pcomplete +Its UI is slightly different but can be customized to behave similarly, +e.g. Pcomplete's default cycling can be obtained with +(setq completion-cycle-threshold 5). + --- *** Expansion of history event designators is disabled by default. To restore the old behavior, use diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el index cd5c14afbe..25a6e88c8e 100644 --- a/lisp/eshell/em-cmpl.el +++ b/lisp/eshell/em-cmpl.el @@ -288,9 +288,10 @@ to writing a completion function." (function (lambda () (set (make-local-variable 'comint-file-name-quote-list) - eshell-special-chars-outside-quoting))) nil t) - (add-hook 'pcomplete-quote-arg-hook 'eshell-quote-backslash nil t) - (define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol) + eshell-special-chars-outside-quoting))) + nil t) + (add-hook 'pcomplete-quote-arg-hook #'eshell-quote-backslash nil t) + ;;(define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol) ; Redundant (define-key eshell-mode-map [(meta control ?i)] 'eshell-complete-lisp-symbol) (define-key eshell-command-map [(meta ?h)] 'eshell-completion-help) (define-key eshell-command-map [tab] 'pcomplete-expand-and-complete) @@ -298,15 +299,14 @@ to writing a completion function." 'pcomplete-expand-and-complete) (define-key eshell-command-map [space] 'pcomplete-expand) (define-key eshell-command-map [? ] 'pcomplete-expand) - (define-key eshell-mode-map [tab] 'eshell-pcomplete) - (define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete) + ;;(define-key eshell-mode-map [tab] 'completion-at-point) ;Redundant! + (define-key eshell-mode-map [(control ?i)] 'completion-at-point) (add-hook 'completion-at-point-functions #'pcomplete-completions-at-point nil t) ;; jww (1999-10-19): Will this work on anything but X? - (if (featurep 'xemacs) - (define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse) - (define-key eshell-mode-map [backtab] 'pcomplete-reverse)) - (define-key eshell-mode-map [(meta ??)] 'pcomplete-list)) + (define-key eshell-mode-map + (if (featurep 'xemacs) [iso-left-tab] [backtab]) 'pcomplete-reverse) + (define-key eshell-mode-map [(meta ??)] 'completion-help-at-point)) (defun eshell-completion-command-name () "Return the command name, possibly sans globbing." @@ -442,34 +442,24 @@ to writing a completion function." (if glob-name completions (setq completions - (append (and (eshell-using-module 'eshell-alias) - (funcall (symbol-function 'eshell-alias-completions) - filename)) + (append (if (fboundp 'eshell-alias-completions) + (eshell-alias-completions filename)) (eshell-winnow-list (mapcar (function (lambda (name) (substring name 7))) (all-completions (concat "eshell/" filename) - obarray 'functionp)) + obarray #'functionp)) nil '(eshell-find-alias-function)) completions)) (append (and (or eshell-show-lisp-completions (and eshell-show-lisp-alternatives (null completions))) - (all-completions filename obarray 'functionp)) + (all-completions filename obarray #'functionp)) completions))))))) -(defun eshell-pcomplete (&optional interactively) - "Eshell wrapper for `pcomplete'." - (interactive "p") - ;; Pretend to be pcomplete so that cycling works (bug#13293). - (setq this-command 'pcomplete) - (condition-case nil - (if interactively - (call-interactively 'pcomplete) - (pcomplete)) - (text-read-only (completion-at-point)))) ; Workaround for bug#12838. +(define-obsolete-function-alias 'eshell-pcomplete #'completion-at-point "27.1") (provide 'em-cmpl) commit e14c0d748efe35afc653151ff18c4dd93dcc456e Author: Paul Eggert Date: Tue Mar 19 18:45:17 2019 -0700 More minor regex cleanup Problems reported by Mattias Engdegård in: https://lists.gnu.org/r/emacs-devel/2019-03/msg00643.html plus a few others that I noticed. * lisp/auth-source-pass.el (auth-source-pass--parse-data): * lisp/org/org-datetree.el (org-datetree--find-create): * lisp/org/org-pcomplete.el (org-thing-at-point): * lisp/progmodes/js.el (js--end-of-do-while-loop-p): * lisp/textmodes/sgml-mode.el: (sgml-electric-tag-pair-before-change-function): * lisp/textmodes/texnfo-upd.el (texinfo-menu-copy-old-description): * lisp/url/url-http.el (url-http-parse-response): Fix regular expression and similar syntax. diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el index 29ff9c6685..4283ed0392 100644 --- a/lisp/auth-source-pass.el +++ b/lisp/auth-source-pass.el @@ -139,7 +139,7 @@ The secret is the first line of CONTENTS." (defun auth-source-pass--parse-data (contents) "Parse the password-store data in the string CONTENTS and return an alist. CONTENTS is the contents of a password-store formatted file." - (let ((lines (split-string contents "\n" t "\\\s"))) + (let ((lines (split-string contents "\n" t "[ \t]+"))) (seq-remove #'null (mapcar (lambda (line) (let ((pair (mapcar (lambda (s) (string-trim s)) diff --git a/lisp/org/org-datetree.el b/lisp/org/org-datetree.el index aea2c8d3d6..b4797de1e5 100644 --- a/lisp/org/org-datetree.el +++ b/lisp/org/org-datetree.el @@ -138,15 +138,16 @@ will be built under the headline at point." "^\\*+[ \t]+%d-%02d-\\([0123][0-9]\\) \\w+$" year month day)))) -(defun org-datetree--find-create (regex year &optional month day insert) - "Find the datetree matched by REGEX for YEAR, MONTH, or DAY. -REGEX is passed to `format' with YEAR, MONTH, and DAY as +(defun org-datetree--find-create + (regex-template year &optional month day insert) + "Find the datetree matched by REGEX-TEMPLATE for YEAR, MONTH, or DAY. +REGEX-TEMPLATE is passed to `format' with YEAR, MONTH, and DAY as arguments. Match group 1 is compared against the specified date component. If INSERT is non-nil and there is no match then it is inserted into the buffer." (when (or month day) (org-narrow-to-subtree)) - (let ((re (format regex year month day)) + (let ((re (format regex-template year month day)) match) (goto-char (point-min)) (while (and (setq match (re-search-forward re nil t)) diff --git a/lisp/org/org-pcomplete.el b/lisp/org/org-pcomplete.el index 49983c40a5..cf272de90a 100644 --- a/lisp/org/org-pcomplete.el +++ b/lisp/org/org-pcomplete.el @@ -49,10 +49,10 @@ "Examine the thing at point and let the caller know what it is. The return value is a string naming the thing at point." (let ((beg1 (save-excursion - (skip-chars-backward "[:alnum:]-_@") + (skip-chars-backward "-[:alnum:]_@") (point))) (beg (save-excursion - (skip-chars-backward "a-zA-Z0-9-_:$") + (skip-chars-backward "-a-zA-Z0-9_:$") (point))) (line-to-here (buffer-substring (point-at-bol) (point)))) (cond diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 0b6008a511..73b55e29a5 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -1884,7 +1884,7 @@ or as help on variables `cperl-tips', `cperl-problems', ;;Point is at start of real comment." ;; (let ((c (current-column)) target cnt prevc) ;; (if (= c comment-column) nil -;; (setq cnt (skip-chars-backward "[ \t]")) +;; (setq cnt (skip-chars-backward " \t")) ;; (setq target (max (1+ (setq prevc ;; (current-column))) ; Else indent at comment column ;; comment-column)) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index f1ec5ceea5..4d91da7334 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -1908,7 +1908,7 @@ the same column as the current line." (save-match-data (when (looking-at "\\s-*\\_") (if (save-excursion - (skip-chars-backward "[ \t\n]*}") + (skip-chars-backward " \t\n}") (looking-at "[ \t\n]*}")) (save-excursion (backward-list) (forward-symbol -1) (looking-at "\\_")) diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index e49144e290..9e3be99af1 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -894,7 +894,7 @@ Return non-nil if we skipped over matched tags." (condition-case err (save-excursion (goto-char end) - (skip-chars-backward "[:alnum:]-_.:") + (skip-chars-backward "-[:alnum:]_.:") (if (and ;; (<= (point) beg) ; This poses problems for downcase-word. (or (eq (char-before) ?<) (and (eq (char-before) ?/) @@ -902,7 +902,7 @@ Return non-nil if we skipped over matched tags." (null (get-char-property (point) 'text-clones))) (let* ((endp (eq (char-before) ?/)) (cl-start (point)) - (cl-end (progn (skip-chars-forward "[:alnum:]-_.:") (point))) + (cl-end (progn (skip-chars-forward "-[:alnum:]_.:") (point))) (match (if endp (when (sgml-skip-tag-backward 1) (forward-char 1) t) @@ -919,7 +919,8 @@ Return non-nil if we skipped over matched tags." (equal (buffer-substring cl-start cl-end) (buffer-substring (point) (save-excursion - (skip-chars-forward "[:alnum:]-_.:") + (skip-chars-forward + "-[:alnum:]_.:") (point)))) (or (not endp) (eq (char-after cl-end) ?>))) (when clones diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el index 8c6e23eae4..e960e992a8 100644 --- a/lisp/textmodes/texnfo-upd.el +++ b/lisp/textmodes/texnfo-upd.el @@ -642,7 +642,7 @@ appears in the texinfo file." "Return description field of old menu line as string. Point must be located just after the node name. Point left before description. Single argument, END-OF-MENU, is position limiting search." - (skip-chars-forward "[:.,\t\n ]+") + (skip-chars-forward ":.,\t\n ") ;; don't copy a carriage return at line beginning with asterisk! ;; don't copy @detailmenu or @end menu or @ignore as descriptions! ;; do copy a description that begins with an `@'! diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 46baa8a148..1fbc087073 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -517,7 +517,7 @@ Return the number of characters removed." (setq url-http-response-version (buffer-substring (point) (progn - (skip-chars-forward "[0-9].") + (skip-chars-forward "0-9.") (point)))) (setq url-http-response-status (read (current-buffer)))) commit b2dd61ffb0b4efc0419f4b5cbe279c2700b549e8 Author: Juri Linkov Date: Tue Mar 19 23:52:33 2019 +0200 * lisp/vc/vc.el (vc-diff-build-argument-list-internal): Add arg fileset. (vc-root-version-diff): Set vc-diff-build-argument-list-internal's optional arg 'fileset' to the root directory. (Bug#34532) diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index 7dd7346fe8..2052ace12b 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -950,8 +950,7 @@ In the latter case, VC mode is deactivated for this buffer." (bindings--define-key map [separator2] menu-bar-separator) (bindings--define-key map [vc-insert-header] '(menu-item "Insert Header" vc-insert-headers - :help "Insert headers into a file for use with a version control system. -")) + :help "Insert headers into a file for use with a version control system.")) (bindings--define-key map [vc-revert] '(menu-item "Revert to Base Version" vc-revert :help "Revert working copies of the selected file set to their repository contents")) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index aae21ec45a..0a638ec7d7 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1762,9 +1762,9 @@ Return t if the buffer had changes, nil otherwise." nil nil initial-input 'vc-revision-history default) (read-string prompt initial-input nil default)))) -(defun vc-diff-build-argument-list-internal () +(defun vc-diff-build-argument-list-internal (&optional fileset) "Build argument list for calling internal diff functions." - (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: why t? --Stef + (let* ((vc-fileset (or fileset (vc-deduce-fileset t))) ;FIXME: why t? --Stef (files (cadr vc-fileset)) (backend (car vc-fileset)) (first (car files)) @@ -1815,7 +1815,11 @@ Return t if the buffer had changes, nil otherwise." ;;;###autoload (defun vc-root-version-diff (_files rev1 rev2) "Report diffs between REV1 and REV2 revisions of the whole tree." - (interactive (vc-diff-build-argument-list-internal)) + (interactive + (vc-diff-build-argument-list-internal + (or (ignore-errors (vc-deduce-fileset t)) + (let ((backend (or (vc-deduce-backend) (vc-responsible-backend default-directory)))) + (list backend (list (vc-call-backend backend 'root default-directory))))))) ;; This is a mix of `vc-root-diff' and `vc-version-diff' (when (and (not rev1) rev2) (error "Not a valid revision range")) commit ded3c8de802d98635dc06faa178f91f99afdac53 Author: Juri Linkov Date: Tue Mar 19 23:43:18 2019 +0200 * lisp/frame.el (frame-monitor-attributes): Fall back to the last monitor when frames monitor attributes is still uninitialized. (Bug#34680) diff --git a/lisp/frame.el b/lisp/frame.el index c5802e30b6..7cfe546ca6 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1696,7 +1696,10 @@ keys and their meanings." (or frame (setq frame (selected-frame))) (cl-loop for attributes in (display-monitor-attributes-list frame) for frames = (cdr (assq 'frames attributes)) - if (memq frame frames) return attributes)) + if (memq frame frames) return attributes + ;; On broken frames monitor attributes, + ;; fall back to the last monitor. + finally return attributes)) (defun frame-monitor-attribute (attribute &optional frame x y) "Return the value of ATTRIBUTE on FRAME's monitor. commit 2c541d84785d9dc1dcb6eacb7d9f8862668c1893 Author: Juri Linkov Date: Tue Mar 19 23:32:48 2019 +0200 * lisp/frame.el (make-frame-on-monitor): Don't set height and width. Don't use x-parse-geometry. Delete nil from completions (Bug#34516) diff --git a/lisp/frame.el b/lisp/frame.el index dd1d5b030f..c5802e30b6 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -678,28 +678,20 @@ The optional argument DISPLAY can be a display name, and the optional argument PARAMETERS specifies additional frame parameters." (interactive (list (completing-read (format "Make frame on monitor: ") - (mapcar (lambda (a) - (cdr (assq 'name a))) - (display-monitor-attributes-list))))) - (let* ((monitor-geometry - (car (delq nil (mapcar (lambda (a) - (when (equal (cdr (assq 'name a)) monitor) - (cdr (assq 'workarea a)))) - (display-monitor-attributes-list display))))) - (frame-geometry - (when monitor-geometry - (x-parse-geometry (format "%dx%d+%d+%d" - (nth 2 monitor-geometry) - (nth 3 monitor-geometry) - (nth 0 monitor-geometry) - (nth 1 monitor-geometry))))) - (frame-geometry-in-pixels - (when frame-geometry - `((top . ,(cdr (assq 'top frame-geometry))) - (left . ,(cdr (assq 'left frame-geometry))) - (height . (text-pixels . ,(cdr (assq 'height frame-geometry)))) - (width . (text-pixels . ,(cdr (assq 'width frame-geometry)))))))) - (make-frame (append frame-geometry-in-pixels parameters)))) + (or (delq nil (mapcar (lambda (a) + (cdr (assq 'name a))) + (display-monitor-attributes-list))) + '(""))))) + (let* ((monitor-workarea + (catch 'done + (dolist (a (display-monitor-attributes-list display)) + (when (equal (cdr (assq 'name a)) monitor) + (throw 'done (cdr (assq 'workarea a))))))) + (geometry-parameters + (when monitor-workarea + `((top . ,(nth 1 monitor-workarea)) + (left . ,(nth 0 monitor-workarea)))))) + (make-frame (append geometry-parameters parameters)))) (declare-function x-close-connection "xfns.c" (terminal)) commit 53914a10558a0a579bb30d95da93d677901bc4a9 Author: Paul Eggert Date: Tue Mar 19 12:37:13 2019 -0700 Use ‘const’ to clarify GC marking Add ‘const’ to make the GC marking code a bit clearer. This can also help the compiler in some cases, I think because GCC can now determine more often that the value of a static C variable can be cached when its address is now converted to ‘Lisp Object const *’ before escaping. * src/alloc.c (staticvec, mark_maybe_objects, mark_memory) (mark_stack, staticpro, mark_object_root_visitor) (garbage_collect_1): * src/pdumper.c (dump_ptr_referrer, dump_emacs_reloc_to_lv) (dump_emacs_reloc_to_emacs_ptr_raw, dump_root_visitor): * src/lisp.h (vcopy, struct gc_root_visitor): * src/sysdep.c (stack_overflow): * src/thread.c (mark_one_thread): * src/thread.h (struct thread_state): Use pointer-to-const instead of plain pointer in some GC-related places where either will do. diff --git a/src/alloc.c b/src/alloc.c index 5244fb190f..8fb514f78f 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -508,7 +508,7 @@ static struct mem_node *mem_find (void *); value if we might unexec; otherwise some compilers put it into BSS. */ -Lisp_Object *staticvec[NSTATICS] +Lisp_Object const *staticvec[NSTATICS] #ifdef HAVE_UNEXEC = {&Vpurify_flag} #endif @@ -4829,9 +4829,9 @@ mark_maybe_object (Lisp_Object obj) } void -mark_maybe_objects (Lisp_Object *array, ptrdiff_t nelts) +mark_maybe_objects (Lisp_Object const *array, ptrdiff_t nelts) { - for (Lisp_Object *lim = array + nelts; array < lim; array++) + for (Lisp_Object const *lim = array + nelts; array < lim; array++) mark_maybe_object (*array); } @@ -4943,15 +4943,15 @@ mark_maybe_pointer (void *p) or END+OFFSET..START. */ static void ATTRIBUTE_NO_SANITIZE_ADDRESS -mark_memory (void *start, void *end) +mark_memory (void const *start, void const *end) { - char *pp; + char const *pp; /* Make START the pointer to the start of the memory region, if it isn't already. */ if (end < start) { - void *tem = start; + void const *tem = start; start = end; end = tem; } @@ -4976,14 +4976,14 @@ mark_memory (void *start, void *end) away. The only reference to the life string is through the pointer `s'. */ - for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT) + for (pp = start; (void const *) pp < end; pp += GC_POINTER_ALIGNMENT) { - mark_maybe_pointer (*(void **) pp); + mark_maybe_pointer (*(void *const *) pp); verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0); if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT || (uintptr_t) pp % alignof (Lisp_Object) == 0) - mark_maybe_object (*(Lisp_Object *) pp); + mark_maybe_object (*(Lisp_Object const *) pp); } } @@ -5185,7 +5185,7 @@ typedef union from the stack start. */ void -mark_stack (char *bottom, char *end) +mark_stack (char const *bottom, char const *end) { /* This assumes that the stack is a contiguous region in memory. If that's not the case, something has to be done here to iterate @@ -5726,7 +5726,7 @@ purecopy (Lisp_Object obj) VARADDRESS. */ void -staticpro (Lisp_Object *varaddress) +staticpro (Lisp_Object const *varaddress) { for (int i = 0; i < staticidx; i++) eassert (staticvec[i] != varaddress); @@ -5979,7 +5979,7 @@ visit_static_gc_roots (struct gc_root_visitor visitor) } static void -mark_object_root_visitor (Lisp_Object *root_ptr, +mark_object_root_visitor (Lisp_Object const *root_ptr, enum gc_root_type type, void *data) { @@ -6074,7 +6074,7 @@ garbage_collect_1 (struct gcstat *gcst) #if MAX_SAVE_STACK > 0 if (NILP (Vpurify_flag)) { - char *stack; + char const *stack; ptrdiff_t stack_size; if (&stack_top_variable < stack_bottom) { @@ -6110,9 +6110,7 @@ garbage_collect_1 (struct gcstat *gcst) /* Mark all the special slots that serve as the roots of accessibility. */ - struct gc_root_visitor visitor; - memset (&visitor, 0, sizeof (visitor)); - visitor.visit = mark_object_root_visitor; + struct gc_root_visitor visitor = { .visit = mark_object_root_visitor }; visit_static_gc_roots (visitor); mark_pinned_objects (); diff --git a/src/lisp.h b/src/lisp.h index cb142b9d8a..8ec892f17b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -631,7 +631,8 @@ extern _Noreturn void wrong_type_argument (Lisp_Object, Lisp_Object); subsequent starts. */ extern bool initialized; -extern struct gflags { +extern struct gflags +{ /* True means this Emacs instance was born to dump. */ #if defined HAVE_PDUMPER || defined HAVE_UNEXEC bool will_dump_ : 1; @@ -3316,10 +3317,10 @@ extern Lisp_Object Vascii_canon_table; /* Call staticpro (&var) to protect static variable `var'. */ -void staticpro (Lisp_Object *); +void staticpro (Lisp_Object const *); enum { NSTATICS = 2048 }; -extern Lisp_Object *staticvec[NSTATICS]; +extern Lisp_Object const *staticvec[NSTATICS]; extern int staticidx; @@ -3341,7 +3342,8 @@ struct frame; /* Copy COUNT Lisp_Objects from ARGS to contents of V starting from OFFSET. */ INLINE void -vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count) +vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object const *args, + ptrdiff_t count) { eassert (0 <= offset && 0 <= count && offset + count <= ASIZE (v)); memcpy (XVECTOR (v)->contents + offset, args, count * sizeof *args); @@ -3771,8 +3773,8 @@ extern void refill_memory_reserve (void); #endif extern void alloc_unexec_pre (void); extern void alloc_unexec_post (void); -extern void mark_maybe_objects (Lisp_Object *, ptrdiff_t); -extern void mark_stack (char *, char *); +extern void mark_maybe_objects (Lisp_Object const *, ptrdiff_t); +extern void mark_stack (char const *, char const *); extern void flush_stack_call_func (void (*func) (void *arg), void *arg); extern void garbage_collect (void); extern const char *pending_malloc_warning; @@ -3800,17 +3802,17 @@ extern Lisp_Object pure_listn (ptrdiff_t, Lisp_Object, ...); #define pure_list(...) \ pure_listn (ARRAYELTS (((Lisp_Object []) {__VA_ARGS__})), __VA_ARGS__) -enum gc_root_type { +enum gc_root_type +{ GC_ROOT_STATICPRO, GC_ROOT_BUFFER_LOCAL_DEFAULT, GC_ROOT_BUFFER_LOCAL_NAME, GC_ROOT_C_SYMBOL }; -struct gc_root_visitor { - void (*visit)(Lisp_Object *root_ptr, - enum gc_root_type type, - void *data); +struct gc_root_visitor +{ + void (*visit) (Lisp_Object const *, enum gc_root_type, void *); void *data; }; extern void visit_static_gc_roots (struct gc_root_visitor visitor); diff --git a/src/pdumper.c b/src/pdumper.c index 92e19497e5..fbf17d1629 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -674,7 +674,7 @@ DUMP_CLEAR_REFERRER (struct dump_context *ctx) } static Lisp_Object -dump_ptr_referrer (const char *label, void *address) +dump_ptr_referrer (const char *label, void const *address) { char buf[128]; buf[0] = '\0'; @@ -1631,7 +1631,7 @@ dump_emacs_reloc_to_dump_ptr_raw (struct dump_context *ctx, automatically queues the value for dumping if necessary. */ static void dump_emacs_reloc_to_lv (struct dump_context *ctx, - Lisp_Object *emacs_ptr, + Lisp_Object const *emacs_ptr, Lisp_Object value) { if (dump_object_self_representing_p (value)) @@ -1659,7 +1659,7 @@ dump_emacs_reloc_to_lv (struct dump_context *ctx, back into the Emacs image. */ static void dump_emacs_reloc_to_emacs_ptr_raw (struct dump_context *ctx, void *emacs_ptr, - void *target_emacs_ptr) + void const *target_emacs_ptr) { if (!ctx->flags.dump_object_contents) return; @@ -1738,7 +1738,8 @@ dump_remember_fixup_ptr_raw (struct dump_context *ctx, } static void -dump_root_visitor (Lisp_Object *root_ptr, enum gc_root_type type, void *data) +dump_root_visitor (Lisp_Object const *root_ptr, enum gc_root_type type, + void *data) { struct dump_context *ctx = data; Lisp_Object value = *root_ptr; diff --git a/src/sysdep.c b/src/sysdep.c index 6d85692ab1..fe5a44ea2d 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -1850,8 +1850,8 @@ stack_overflow (siginfo_t *siginfo) /* The known top and bottom of the stack. The actual stack may extend a bit beyond these boundaries. */ - char *bot = stack_bottom; - char *top = current_thread->stack_top; + char const *bot = stack_bottom; + char const *top = current_thread->stack_top; /* Log base 2 of the stack heuristic ratio. This ratio is the size of the known stack divided by the size of the guard area past the diff --git a/src/thread.c b/src/thread.c index 33d113295b..59e5b6617e 100644 --- a/src/thread.c +++ b/src/thread.c @@ -617,7 +617,7 @@ static void mark_one_thread (struct thread_state *thread) { /* Get the stack top now, in case mark_specpdl changes it. */ - void *stack_top = thread->stack_top; + void const *stack_top = thread->stack_top; mark_specpdl (thread->m_specpdl, thread->m_specpdl_ptr); diff --git a/src/thread.h b/src/thread.h index e46545baf2..cb7e60f21f 100644 --- a/src/thread.h +++ b/src/thread.h @@ -65,7 +65,7 @@ struct thread_state /* m_stack_bottom must be the first non-Lisp field. */ /* An address near the bottom of the stack. Tells GC how to save a copy of the stack. */ - char *m_stack_bottom; + char const *m_stack_bottom; #define stack_bottom (current_thread->m_stack_bottom) /* The address of an object near the C stack top, used to determine @@ -75,7 +75,7 @@ struct thread_state error in Emacs. If the C function F calls G which calls H which calls ... F, then at least one of the functions in the chain should set this to the address of a local variable. */ - void *stack_top; + void const *stack_top; struct catchtag *m_catchlist; #define catchlist (current_thread->m_catchlist) commit 3ed1621d843e057ad879fbed3605d32f55a065b9 Author: Mattias Engdegård Date: Tue Mar 12 14:39:47 2019 +0100 Disallow reversed char ranges in `rx' (any "a-Z0-9") generated "[0-9]", and (any (?9 . ?0)) generated "[9-0]". Reversed ranges are either mistakes or abuse. Neither should be allowed. etc/NEWS: Explain the change. lisp/emacs-lisp/rx.el (rx): Document. (rx-check-any-string, rx-check-any): Add error checks for reversed ranges. test/lisp/emacs-lisp/rx-tests.el (rx-char-any-range-bad): New test. diff --git a/etc/NEWS b/etc/NEWS index f25c3f5dc3..f955308ebe 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1336,6 +1336,13 @@ they are now allocated like any other pseudovector. As a result, the 'misc' component, and the 'misc-objects-consed' variable has been removed. ++++ +** Reversed character ranges are no longer permitted in rx. +Previously, ranges where the starting character is greater than the +ending character were silently omitted. +For example, '(rx (any "@z-a" (?9 . ?0)))' would match '@' only. +Now, such rx expressions generate an error. + * Lisp Changes in Emacs 27.1 diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index f6deb45d44..fdd24317c6 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el @@ -482,7 +482,10 @@ The original order is not preserved. Ranges, \"A-Z\", become pairs, (?A . ?Z)." (let ((start (funcall decode-char (aref str i))) (end (funcall decode-char (aref str (+ i 2))))) (cond ((< start end) (push (cons start end) ret)) - ((= start end) (push start ret))) + ((= start end) (push start ret)) + (t + (error "Rx character range `%c-%c' is reversed" + start end))) (setq i (+ i 3)))) (t ;; Single character. @@ -503,7 +506,10 @@ The original order is not preserved. Ranges, \"A-Z\", become pairs, (?A . ?Z)." (null (string-match "\\`\\[\\[:[-a-z]+:\\]\\]\\'" translation))) (error "Invalid char class `%s' in Rx `any'" arg)) (list (substring translation 1 -1)))) ; strip outer brackets - ((and (integerp (car-safe arg)) (integerp (cdr-safe arg))) + ((and (characterp (car-safe arg)) (characterp (cdr-safe arg))) + (unless (<= (car arg) (cdr arg)) + (error "Rx character range `%c-%c' is reversed" + (car arg) (cdr arg))) (list arg)) ((stringp arg) (rx-check-any-string arg)) ((error @@ -916,6 +922,7 @@ CHAR matches any character in SET .... SET may be a character or string. Ranges of characters can be specified as `A-Z' in strings. Ranges may also be specified as conses like `(?A . ?Z)'. + Reversed ranges like `Z-A' and `(?Z . ?A)' are not permitted. SET may also be the name of a character class: `digit', `control', `hex-digit', `blank', `graph', `print', `alnum', diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index 7dd5e3b8de..4a5919edf0 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -40,6 +40,10 @@ (should (equal (rx (any "\a-\n")) "[\a-\n]"))) +(ert-deftest rx-char-any-range-bad () + (should-error (rx (any "0-9a-Z"))) + (should-error (rx (any (?0 . ?9) (?a . ?Z))))) + (ert-deftest rx-char-any-raw-byte () "Test raw bytes in character alternatives." ;; Separate raw characters. commit bd5795e0d1eb1632909393612dd53b6beda606f0 Author: Basil L. Contovounesios Date: Tue Mar 19 16:00:18 2019 +0000 Fix url-copy-file arglist * lisp/url/url-handlers.el: Silence byte-compiler. (url-copy-file): Add 6th argument following change to copy-file in 2012-12-16T19:22:27+01:00!romain@orebokech.com. (bug#4410) diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el index 3af4e9e7b1..91f9b7f520 100644 --- a/lisp/url/url-handlers.el +++ b/lisp/url/url-handlers.el @@ -41,6 +41,9 @@ (declare-function mm-decode-string "mm-bodies" (string charset)) ;; mm-decode loads mail-parse. (declare-function mail-content-type-get "mail-parse" (ct attribute)) +;; mm-bodies loads mm-util. +(declare-function mm-charset-to-coding-system "mm-util" + (charset &optional lbt allow-override silent)) ;; Implementation status ;; --------------------- @@ -250,15 +253,15 @@ the arguments that would have been passed to OPERATION." ;; The actual implementation ;;;###autoload (defun url-copy-file (url newname &optional ok-if-already-exists - _keep-time _preserve-uid-gid) + _keep-time _preserve-uid-gid _preserve-permissions) "Copy URL to NEWNAME. Both args must be strings. -Signals a `file-already-exists' error if file NEWNAME already exists, +Signal a `file-already-exists' error if file NEWNAME already exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. A number as third arg means request confirmation if NEWNAME already exists. This is what happens in interactive use with M-x. Fourth arg KEEP-TIME non-nil means give the new file the same last-modified time as the old one. (This works on only some systems.) -Fifth arg PRESERVE-UID-GID is ignored. +Args PRESERVE-UID-GID and PRESERVE-PERMISSIONS are ignored. A prefix arg makes KEEP-TIME non-nil." (if (and (file-exists-p newname) (not ok-if-already-exists)) @@ -341,7 +344,7 @@ if it had been inserted from a file named URL." (unless buffer (signal 'file-error (list url "No Data"))) (with-current-buffer buffer ;; XXX: This is HTTP/S specific and should be moved to url-http - ;; instead. See https://debbugs.gnu.org/17549. + ;; instead. See bug#17549. (when (bound-and-true-p url-http-response-status) ;; Don't signal an error if VISIT is non-nil, because ;; 'insert-file-contents' doesn't. This is required to @@ -354,7 +357,7 @@ if it had been inserted from a file named URL." (< url-http-response-status 300))) (let ((desc (nth 2 (assq url-http-response-status url-http-codes)))) (kill-buffer buffer) - ;; Signal file-error per https://debbugs.gnu.org/16733. + ;; Signal file-error per bug#16733. (signal 'file-error (list url desc)))))) (url-insert-buffer-contents buffer url visit beg end replace))) commit eaa188a6a076a3da3bcf7aec5b552fa4a1f9b5ed Author: Eli Zaretskii Date: Tue Mar 19 14:26:14 2019 +0200 ; * admin/notes/bugtracker: Minor additions and updates. diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker index c39458184f..cda258339e 100644 --- a/admin/notes/bugtracker +++ b/admin/notes/bugtracker @@ -241,21 +241,29 @@ report, and Bcc: the control server (note the commands have no effect if you just send them to the bug-report number). Bcc: is better than Cc: in case people use Reply-to-All in response. +For the full documentation of control commands, see +https://debbugs.gnu.org/server-control.html + Some useful control commands: +*** To close a bug and indicate in what Emacs version it was fixed +close 123 VERSION + +where VERSION is XX.YY numerical version number, like 42.1. + *** To reopen a closed bug: reopen 123 *** Bugs can be tagged in various ways (eg wontfix, patch, etc). The available tags are: -patch wontfix moreinfo unreproducible fixed notabug +patch wontfix moreinfo unreproducible fixed notabug security confirmed See https://debbugs.gnu.org/Developer#tags The list of tags can be prefixed with +, - or =, meaning to add (the default), remove, or reset the tags. E.g.: tags 123 + wontfix -** URL shortcuts +*** URL shortcuts https://debbugs.gnu.org/... @@ -266,7 +274,7 @@ from:submitter@email.address severity:severity # all bugs of given severity tag:tag # all bugs with given tag -** Usertags +*** Usertags See @@ -410,21 +418,21 @@ reassign 1234 emacs Note that reassigning clears the list of found versions, even if the new packages includes the original one. -** To remove spam from the tracker, move it to the 'spam' pseudo-package: +*** To remove spam from the tracker, move it to the 'spam' pseudo-package: reassign 123 spam (Should not be necessary any more, now that the input is moderated.) -** To change the title of a bug: +*** To change the title of a bug: retitle 123 Some New Title -** To change the submitter address: +*** To change the submitter address: submitter 123 none@example.com Note that it does not seem to work to specify "Submitter:" in the pseudo-header when first reporting a bug. -** How does archiving work? +*** How does archiving work? You can still send mail to a bug after it is closed. After 28 days with no activity, the bug is archived, at which point no more changes can be made. If you try to send mail to the bug after that (or merge with commit 5ed05fbf62799bb55723860c3eb5141acecb26f6 Author: Eli Zaretskii Date: Tue Mar 19 13:16:50 2019 +0200 Fix downloading updates for packages with non-ASCII descriptions * lisp/emacs-lisp/package.el (package--download-one-archive): Make sure archive contents are written using UTF-8 encoding. (Bug#34909) (list-packages): Set buffer's encoding to UTF-8. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 3118e38fcd..1a185de4a5 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1538,14 +1538,16 @@ similar to an entry in `package-alist'. Save the cached copy to (member name package-unsigned-archives)) ;; If we don't care about the signature, save the file and ;; we're done. - (progn (write-region content nil local-file nil 'silent) + (progn (let ((coding-system-for-write 'utf-8)) + (write-region content nil local-file nil 'silent)) (package--update-downloads-in-progress archive)) ;; If we care, check it (perhaps async) and *then* write the file. (package--check-signature location file content async ;; This function will be called after signature checking. (lambda (&optional good-sigs) - (write-region content nil local-file nil 'silent) + (let ((coding-system-for-write 'utf-8)) + (write-region content nil local-file nil 'silent)) ;; Write out good signatures into archive-contents.signed file. (when good-sigs (write-region (mapconcat #'epg-signature-to-string good-sigs "\n") @@ -3425,6 +3427,9 @@ short description." ;; Generate the Package Menu. (let ((buf (get-buffer-create "*Packages*"))) (with-current-buffer buf + ;; Since some packages have their descriptions include non-ASCII + ;; characters... + (setq buffer-file-coding-system 'utf-8) (package-menu-mode) ;; Fetch the remote list of packages. commit c0936672876bccc15e7899e83d8ab99910f8feee Author: Paul Eggert Date: Mon Mar 18 17:44:21 2019 -0700 Remove buggy regexp use in comint-output-filter This reverts commit 2012-07-02T16:18:02!monnier@iro.umontreal.ca which perhaps could be rethought and recommitted, and perhaps it’s no longer needed now that comint-use-prompt-regexp is almost always nil. * lisp/comint.el (comint-output-filter): Don’t try to skip repeated prompts, since comint-prompt-regexp typically begins with "^" and the resulting "^^" in the regular expression does not have the desired effect. Noted by Mattias Engdegård in: https://lists.gnu.org/r/emacs-devel/2019-03/msg00380.html diff --git a/lisp/comint.el b/lisp/comint.el index a71821baa5..d21cc1378f 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2072,20 +2072,6 @@ Make backspaces delete the previous character." (goto-char (process-mark process)) (set-marker comint-last-output-start (point)) - ;; Try to skip repeated prompts, which can occur as a result of - ;; commands sent without inserting them in the buffer. - (let ((bol (save-excursion (forward-line 0) (point)))) ;No fields. - (when (and (not (bolp)) - (looking-back comint-prompt-regexp bol)) - (let* ((prompt (buffer-substring bol (point))) - (prompt-re (concat "\\`" (regexp-quote prompt)))) - (while (string-match prompt-re string) - (setq string (substring string (match-end 0))))))) - (while (string-match (concat "\\(^" comint-prompt-regexp - "\\)\\1+") - string) - (setq string (replace-match "\\1" nil nil string))) - ;; insert-before-markers is a bad thing. XXX ;; Luckily we don't have to use it any more, we use ;; window-point-insertion-type instead. commit bc2a93d5b7c3d749b31927452e31b32bdb1b9108 Author: Paul Eggert Date: Mon Mar 18 17:02:01 2019 -0700 Fix more regular expression typos Problem reported by Mattias Engdegård in: https://lists.gnu.org/r/emacs-devel/2019-03/msg00548.html except that I didn’t address the issues involving Hebrew, or involving comint-prompt-regexp. * lisp/align.el (align-rules-list, align-exclude-rules-list): * lisp/auth-source-pass.el (auth-source-pass--parse-secret) (auth-source-pass--parse-data): * lisp/cedet/data-debug.el (data-debug-next) (data-debug-prev, data-debug-expand-or-contract): * lisp/comint.el (comint-within-quotes): * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): * lisp/emulation/viper-ex.el (ex-cmd-complete): * lisp/gnus/gnus-cite.el (gnus-message-search-citation-line): * lisp/gnus/nnir.el (nnir-imap-end-of-input): * lisp/mail/mail-extr.el (mail-extr-all-letters): * lisp/minibuffer.el (minibuffer-maybe-quote-filename): * lisp/nxml/rng-nxml.el (rng-complete-tag) (rng-complete-end-tag, rng-complete-attribute-name): * lisp/obsolete/vip.el (vip-get-ex-token, vip-get-ex-pat): * lisp/org/org-pcomplete.el (org-thing-at-point): * lisp/org/org.el (org-set-tags) (org-increase-number-at-point) (org-fill-line-break-nobreak-p): * lisp/pcomplete.el (pcomplete-parse-comint-arguments): * lisp/progmodes/ada-mode.el (ada-compile-goto-error): * lisp/progmodes/cperl-mode.el (cperl-highlight-charclass) (cperl-find-pods-heres, cperl-not-bad-style-regexp) (cperl-regext-to-level-start): * lisp/progmodes/ebnf-yac.el (ebnf-yac-skip-spaces): * lisp/progmodes/flymake-proc.el (flymake-proc-master-tex-init): * lisp/progmodes/flymake.el (flymake-diag-region): * lisp/progmodes/fortran.el (fortran-current-line-indentation): * lisp/progmodes/idlw-complete-structtag.el: (idlwave-complete-structure-tag): * lisp/progmodes/idlwave.el (idlwave-complete-sysvar-or-tag): * lisp/progmodes/prolog.el (prolog-pred-end) (prolog-clause-info): * lisp/progmodes/ruby-mode.el (ruby-forward-sexp) (ruby-backward-sexp): * lisp/progmodes/verilog-mode.el (verilog-repair-open-comma): * lisp/term.el (term-within-quotes): * lisp/textmodes/bib-mode.el (bib-capitalize-title-stop-words): * lisp/textmodes/refbib.el (r2b-capitalize-title-stop-words): * lisp/textmodes/reftex-parse.el (reftex-nth-arg): * lisp/textmodes/rst.el (rst-svn-rev): * lisp/url/url-http.el (url-http-parse-response): * test/lisp/progmodes/f90-tests.el (f90-test-bug3730): Fix regular expression typos. diff --git a/lisp/align.el b/lisp/align.el index 594d15eee1..a81498be5d 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -452,7 +452,7 @@ The possible settings for `align-region-separate' are: (tab-stop . nil)) (make-assignment - (regexp . "^\\s-*\\w+\\(\\s-*\\):?=\\(\\s-*\\)\\([^\t\n \\\\]\\|$\\)") + (regexp . "^\\s-*\\w+\\(\\s-*\\):?=\\(\\s-*\\)\\([^\t\n \\]\\|$\\)") (group . (1 2)) (modes . '(makefile-mode)) (tab-stop . nil)) @@ -759,7 +759,7 @@ The following attributes are meaningful: (lambda (end reverse) (funcall (if reverse 're-search-backward 're-search-forward) - (concat "[^ \t\n\\\\]" + (concat "[^ \t\n\\]" (regexp-quote comment-start) "\\(.+\\)$") end t)))) (modes . align-open-comment-modes)) diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el index deb805a6e1..29ff9c6685 100644 --- a/lisp/auth-source-pass.el +++ b/lisp/auth-source-pass.el @@ -134,12 +134,12 @@ ENTRY is the name of a password-store entry." (defun auth-source-pass--parse-secret (contents) "Parse the password-store data in the string CONTENTS and return its secret. The secret is the first line of CONTENTS." - (car (split-string contents "\\\n" t))) + (car (split-string contents "\n" t))) (defun auth-source-pass--parse-data (contents) "Parse the password-store data in the string CONTENTS and return an alist. CONTENTS is the contents of a password-store formatted file." - (let ((lines (split-string contents "\\\n" t "\\\s"))) + (let ((lines (split-string contents "\n" t "\\\s"))) (seq-remove #'null (mapcar (lambda (line) (let ((pair (mapcar (lambda (s) (string-trim s)) diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el index ba312433d3..eeec6b5834 100644 --- a/lisp/cedet/data-debug.el +++ b/lisp/cedet/data-debug.el @@ -920,14 +920,14 @@ If PARENT is non-nil, it is somehow related as a parent to thing." (interactive) (forward-line 1) (beginning-of-line) - (skip-chars-forward " *-><[]" (point-at-eol))) + (skip-chars-forward "- *><[]" (point-at-eol))) (defun data-debug-prev () "Go to the previous line in the Ddebug buffer." (interactive) (forward-line -1) (beginning-of-line) - (skip-chars-forward " *-><[]" (point-at-eol))) + (skip-chars-forward "- *><[]" (point-at-eol))) (defun data-debug-next-expando () "Go to the next line in the Ddebug buffer. @@ -1014,7 +1014,7 @@ Do nothing if already contracted." (data-debug-current-line-expanded-p)) (data-debug-contract-current-line) (data-debug-expand-current-line)) - (skip-chars-forward " *-><[]" (point-at-eol))) + (skip-chars-forward "- *><[]" (point-at-eol))) (defun data-debug-expand-or-contract-mouse (event) "Expand or contract anything at event EVENT." diff --git a/lisp/comint.el b/lisp/comint.el index a5fca7ea2a..a71821baa5 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1618,8 +1618,8 @@ Go to the history element by the absolute history position HIST-POS." (defun comint-within-quotes (beg end) "Return t if the number of quotes between BEG and END is odd. Quotes are single and double." - (let ((countsq (comint-how-many-region "\\(^\\|[^\\\\]\\)'" beg end)) - (countdq (comint-how-many-region "\\(^\\|[^\\\\]\\)\"" beg end))) + (let ((countsq (comint-how-many-region "\\(^\\|[^\\]\\)'" beg end)) + (countdq (comint-how-many-region "\\(^\\|[^\\]\\)\"" beg end))) (or (= (mod countsq 2) 1) (= (mod countdq 2) 1)))) (defun comint-how-many-region (regexp beg end) diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index dca2f16956..fa6f85c588 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -1511,7 +1511,7 @@ may require more formatting") (line-end-position)))))))) ;; Continuation of above. Make sure our sentence is capitalized. (save-excursion - (skip-chars-forward "\"\\*") + (skip-chars-forward "\"*") (if (looking-at "[a-z]") (if (checkdoc-autofix-ask-replace (match-beginning 0) (match-end 0) diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el index f5090573c8..45b91cd9c0 100644 --- a/lisp/emulation/viper-ex.el +++ b/lisp/emulation/viper-ex.el @@ -565,7 +565,7 @@ reversed." (let (save-pos dist compl-list string-to-complete completion-result) (save-excursion - (setq dist (skip-chars-backward "[a-zA-Z!=>&~]") + (setq dist (skip-chars-backward "a-zA-Z!=>&~") save-pos (point))) (if (or (= dist 0) diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el index 2216d4a042..7e431e79fc 100644 --- a/lisp/gnus/gnus-cite.el +++ b/lisp/gnus/gnus-cite.el @@ -1128,7 +1128,7 @@ Returns nil if there is no such line before LIMIT, t otherwise." (let ((cdepth (min (length (apply 'concat (split-string (match-string-no-properties 0) - "[ \t [:alnum:]]+"))) + "[\t [:alnum:]]+"))) gnus-message-max-citation-depth)) (mlist (make-list (* (1+ gnus-message-max-citation-depth) 2) nil)) (start (point-at-bol)) diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 7c94abde0d..37a38a58d4 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -1185,7 +1185,7 @@ returning the one at the supplied position." (defun nnir-imap-end-of-input () "Are we at the end of input?" - (skip-chars-forward "[[:blank:]]") + (skip-chars-forward "[:blank:]") (looking-at "$")) diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el index ae849d7b62..cb57d8ea01 100644 --- a/lisp/mail/mail-extr.el +++ b/lisp/mail/mail-extr.el @@ -293,7 +293,7 @@ by translating things like \"foo!bar!baz@host\" into \"baz@bar.UUCP\"." ;; multipart names. ;; #### should . be in here? (defconst mail-extr-all-letters - (purecopy (concat mail-extr-all-letters-but-separators "---"))) + (purecopy (concat mail-extr-all-letters-but-separators "-"))) ;; Any character that can start a name. ;; Keep this set as minimal as possible. @@ -305,19 +305,11 @@ by translating things like \"foo!bar!baz@host\" into \"baz@bar.UUCP\"." (defconst mail-extr-leading-garbage "\\W+") -;; (defconst mail-extr-non-name-chars -;; (purecopy (concat "^" mail-extr-all-letters "."))) ;; (defconst mail-extr-non-begin-name-chars ;; (purecopy (concat "^" mail-extr-first-letters))) ;; (defconst mail-extr-non-end-name-chars ;; (purecopy (concat "^" mail-extr-last-letters))) -;; Matches an initial not followed by both a period and a space. -;; (defconst mail-extr-bad-initials-pattern -;; (purecopy -;; (format "\\(\\([^%s]\\|\\`\\)[%s]\\)\\(\\.\\([^ ]\\)\\| \\|\\([^%s .]\\)\\|\\'\\)" -;; mail-extr-all-letters mail-extr-first-letters mail-extr-all-letters))) - ;; Matches periods used instead of spaces. Must not match the period ;; following an initial. (defconst mail-extr-bad-dot-pattern diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c5d714846d..df0acbb343 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2297,7 +2297,7 @@ Useful to give the user default values that won't be substituted." (if (and (not (file-name-quoted-p filename)) (file-name-absolute-p filename) (string-match-p (if (memq system-type '(windows-nt ms-dos)) - "[/\\\\]~" "/~") + "[/\\]~" "/~") (file-local-name filename))) (file-name-quote filename) (minibuffer--double-dollars filename))) diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el index c110937b34..05b59316d1 100644 --- a/lisp/nxml/rng-nxml.el +++ b/lisp/nxml/rng-nxml.el @@ -160,7 +160,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." (and rng-collecting-text (rng-flush-text)) (let ((target-names (rng-match-possible-start-tag-names))) `(,(1+ lt-pos) - ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point)) + ,(save-excursion (skip-chars-forward "-[:alnum:]_.:") (point)) ,(apply-partially #'rng-complete-qname-function target-names nil extra-strings) :exit-function @@ -207,7 +207,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." (cdar rng-open-elements)) (cdar rng-open-elements)))) `(,(+ (match-beginning 0) 2) - ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point)) + ,(save-excursion (skip-chars-forward "-[:alnum:]_.:") (point)) ,(list start-tag-name) ;Sole completion candidate. :exit-function ,(lambda (_completion status) @@ -247,7 +247,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." "xmlns")) rng-undeclared-prefixes))) `(,attribute-start - ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point)) + ,(save-excursion (skip-chars-forward "-[:alnum:]_.:") (point)) ,(apply-partially #'rng-complete-qname-function target-names t extra-strings) :exit-function diff --git a/lisp/obsolete/vip.el b/lisp/obsolete/vip.el index 0360db9bca..bc4b90031e 100644 --- a/lisp/obsolete/vip.el +++ b/lisp/obsolete/vip.el @@ -2216,7 +2216,7 @@ a token has type \(command, address, end-mark\) and value." (while (and (not (eolp)) cont) ;;(re-search-forward "[^/]*/") (re-search-forward "[^/]*\\(/\\|\n\\)") - (if (not (vip-looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\/")) + (if (not (vip-looking-back "[^\\]\\(\\\\\\\\\\)*\\\\/")) (setq cont nil)))) (backward-char 1) (setq ex-token (buffer-substring (point) (mark))) @@ -2229,7 +2229,7 @@ a token has type \(command, address, end-mark\) and value." (while (and (not (eolp)) cont) ;;(re-search-forward "[^\\?]*\\?") (re-search-forward "[^\\?]*\\(\\?\\|\n\\)") - (if (not (vip-looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\\\?")) + (if (not (vip-looking-back "[^\\]\\(\\\\\\\\\\)*\\\\\\?")) (setq cont nil)) (backward-char 1) (if (not (looking-at "\n")) (forward-char 1)))) @@ -2325,7 +2325,7 @@ a token has type \(command, address, end-mark\) and value." (while (and (not (eolp)) cont) (re-search-forward "[^/]*\\(/\\|\n\\)") ;;(re-search-forward "[^/]*/") - (if (not (vip-looking-back "[^\\\\]\\(\\\\\\\\\\)*\\\\/")) + (if (not (vip-looking-back "[^\\]\\(\\\\\\\\\\)*\\\\/")) (setq cont nil)))) (setq ex-token (if (= (mark) (point)) "" diff --git a/lisp/org/org-pcomplete.el b/lisp/org/org-pcomplete.el index b8a2f68759..49983c40a5 100644 --- a/lisp/org/org-pcomplete.el +++ b/lisp/org/org-pcomplete.el @@ -82,7 +82,7 @@ The return value is a string naming the thing at point." (not (equal (char-after (point-at-bol)) ?*)) (save-excursion (move-beginning-of-line 1) - (skip-chars-backward "[ \t\n]") + (skip-chars-backward " \t\n") ;; org-drawer-regexp matches a whole line but while ;; looking-back, we just ignore trailing whitespaces (or (looking-back (substring org-drawer-regexp 0 -1) diff --git a/lisp/org/org.el b/lisp/org/org.el index e3c78ae90d..bf7e305b7a 100644 --- a/lisp/org/org.el +++ b/lisp/org/org.el @@ -14953,7 +14953,7 @@ When JUST-ALIGN is non-nil, only align tags." (unless (equal tags "") (let* ((level (save-excursion (beginning-of-line) - (skip-chars-forward "\\*"))) + (skip-chars-forward "*"))) (offset (if (bound-and-true-p org-indent-mode) (* (1- org-indent-indentation-per-level) (1- level)) @@ -20615,7 +20615,7 @@ this numeric value." (unless inc (setq inc 1)) (let ((pos (point)) (beg (skip-chars-backward "-+^/*0-9eE.")) - (end (skip-chars-forward "-+^/*0-9eE^.")) nap) + (end (skip-chars-forward "-+^/*0-9eE.")) nap) (setq nap (buffer-substring-no-properties (+ pos beg) (+ pos beg end))) (delete-region (+ pos beg) (+ pos beg end)) @@ -22837,7 +22837,7 @@ assumed to be significant there." (defun org-fill-line-break-nobreak-p () "Non-nil when a new line at point would create an Org line break." (save-excursion - (skip-chars-backward "[ \t]") + (skip-chars-backward " \t") (skip-chars-backward "\\\\") (looking-at "\\\\\\\\\\($\\|[^\\]\\)"))) diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index d4ee2c38fa..ef285db57e 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el @@ -768,7 +768,7 @@ this is `comint-dynamic-complete-functions'." (push (point) begins) (while (progn - (skip-chars-forward "^ \t\n\\") + (skip-chars-forward "^ \t\n") (when (eq (char-after) ?\\) (forward-char 1) (unless (eolp) diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el index 59dc1d0fda..e01f1e8ecb 100644 --- a/lisp/progmodes/ada-mode.el +++ b/lisp/progmodes/ada-mode.el @@ -767,7 +767,7 @@ the 4 file locations can be clicked on and jumped to." (interactive "d") (goto-char pos) - (skip-chars-backward "-a-zA-Z0-9_:./\\") + (skip-chars-backward "-a-zA-Z0-9_:./\\\\") (cond ;; special case: looking at a filename:line not at the beginning of a line ;; or a simple line reference "at line ..." diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 970c5669c6..0b6008a511 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -3507,18 +3507,18 @@ Should be called with the point before leading colon of an attribute." (defsubst cperl-highlight-charclass (endbracket dashface bsface onec-space) (let ((l '(1 5 7)) ll lle lll ;; 2 groups, the first takes the whole match (include \[trnfabe]) - (singleChar (concat "\\(" "[^\\\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"))) + (singleChar (concat "\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"))) (while ; look for unescaped - between non-classes (re-search-forward ;; On 19.33, certain simplifications lead ;; to bugs (as in [^a-z] \\| [trnfabe] ) (concat ; 1: SingleChar (include \[trnfabe]) singleChar - ;;"\\(" "[^\\\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)" + ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)" "\\(" ; 3: DASH SingleChar (match optionally) "\\(-\\)" ; 4: DASH singleChar ; 5: SingleChar - ;;"\\(" "[^\\\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)" + ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)" "\\)?" "\\|" "\\(" ; 7: other escapes @@ -4455,13 +4455,13 @@ the sections using `cperl-pod-head-face', `cperl-pod-face', ;; Apparently, I can't put \] into a charclass ;; in m]]: m][\\\]\]] produces [\\]] ;;; POSIX? [:word:] [:^word:] only inside [] -;;; "\\=\\(\\\\.\\|[^][\\\\]\\|\\[:\\^?\sw+:]\\|\\[[^:]\\)*]") +;;; "\\=\\(\\\\.\\|[^][\\]\\|\\[:\\^?\sw+:]\\|\\[[^:]\\)*]") (while ; look for unescaped ] (and argument (re-search-forward (if (eq (char-after b) ?\] ) - "\\=\\(\\\\[^]]\\|[^]\\\\]\\)*\\\\]" - "\\=\\(\\\\.\\|[^]\\\\]\\)*]") + "\\=\\(\\\\[^]]\\|[^]\\]\\)*\\\\]" + "\\=\\(\\\\.\\|[^]\\]\\)*]") (1- e) 'toend)) ;; Is this ] an end of POSIX class? (if (save-excursion @@ -4580,7 +4580,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face', ;; Works also if the outside delimiters are (). (or;;(if (eq (char-after b) ?\) ) ;;(re-search-forward - ;; "[^\\\\]\\(\\\\\\\\\\)*\\\\)" + ;; "[^\\]\\(\\\\\\\\\\)*\\\\)" ;; (1- e) 'toend) (search-forward ")" (1- e) 'toend) ;;) @@ -7261,7 +7261,7 @@ One may build such TAGS files from CPerl mode menu." ".->" ; a->b "->" ; a SPACE ->b "\\[-" ; a[-1] - "\\\\[&$@*\\\\]" ; \&func + "\\\\[&$@*\\]" ; \&func "^=" ; =head "\\$." ; $| "<<[a-zA-Z_'\"`]" ; < i 0) - (skip-chars-backward " \t\n,.:;|&^~=!?\\+\\-\\*") + (skip-chars-backward "- \t\n,.:;|&^~=!?+*") (forward-char -1) (cond ((looking-at "\\s)") (goto-char (scan-sexps (1+ (point)) -1)) @@ -1546,7 +1546,7 @@ With ARG, do it many times. Negative ARG means move forward." ((looking-at "\\s\"\\|\\\\\\S_") (let ((c (char-to-string (char-before (match-end 0))))) (while (and (search-backward c) - (eq (logand (skip-chars-backward "\\") 1) + (eq (logand (skip-chars-backward "\\\\") 1) 1)))) nil) ((looking-at "\\s.\\|\\s\\") diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index f9c3177be4..9e241c70e7 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -10494,7 +10494,7 @@ Presumes that any newlines end a list element." (looking-at "[(,]"))) (not (save-excursion ; Not `endif, or user define (backward-char 1) - (skip-chars-backward "[a-zA-Z0-9_`]") + (skip-chars-backward "a-zA-Z0-9_`") (looking-at "`")))) (insert ",")))) diff --git a/lisp/term.el b/lisp/term.el index 693362cc73..586a887a29 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -1984,8 +1984,8 @@ A useful command to bind to SPC. See `term-replace-by-expanded-history'." (defun term-within-quotes (beg end) "Return t if the number of quotes between BEG and END is odd. Quotes are single and double." - (let ((countsq (term-how-many-region "\\(^\\|[^\\\\]\\)'" beg end)) - (countdq (term-how-many-region "\\(^\\|[^\\\\]\\)\"" beg end))) + (let ((countsq (term-how-many-region "\\(^\\|[^\\]\\)'" beg end)) + (countdq (term-how-many-region "\\(^\\|[^\\]\\)\"" beg end))) (or (= (mod countsq 2) 1) (= (mod countdq 2) 1)))) (defun term-how-many-region (regexp beg end) diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el index 81dfb6c99c..7a5d3ef775 100644 --- a/lisp/textmodes/bib-mode.el +++ b/lisp/textmodes/bib-mode.el @@ -198,7 +198,7 @@ named by variable `unread-bib-file'." (defvar bib-capitalize-title-stop-words (concat - "the\\|and\\|of\\|is\\|a\\|an\\|of\\|for\\|in\\|to\\|in\\|on\\|at\\|" + "the\\|and\\|of\\|is\\|a\\|an\\|for\\|in\\|to\\|on\\|at\\|" "by\\|with\\|that\\|its") "Words not to be capitalized in a title (unless the first word).") diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el index f8013c73bb..3ba52e61ea 100644 --- a/lisp/textmodes/refbib.el +++ b/lisp/textmodes/refbib.el @@ -137,7 +137,7 @@ This is in addition to the `r2b-capitalize-title-stop-words'.") (defvar r2b-capitalize-title-stop-words (concat - "the\\|and\\|of\\|is\\|a\\|an\\|of\\|for\\|in\\|to\\|in\\|on\\|at\\|" + "the\\|and\\|of\\|is\\|a\\|an\\|for\\|in\\|to\\|on\\|at\\|" "by\\|with\\|that\\|its") "Words not to be capitalized in a title (unless the first word).") diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el index 2f9b7268fc..005816e965 100644 --- a/lisp/textmodes/reftex-parse.el +++ b/lisp/textmodes/reftex-parse.el @@ -1000,7 +1000,7 @@ OPT-ARGS is a list of argument numbers which are optional." (eq (following-char) ?\{)) (cl-incf cnt))) (if (and (= n cnt) - (> (skip-chars-forward "{\\[") 0)) + (> (skip-chars-forward "{[") 0)) (reftex-context-substring) nil)))) diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index 0fc2f170a6..ba5d7e4f46 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -225,7 +225,7 @@ and before TAIL-RE and DELIM-RE in VAR or DEFAULT for no match." "The SVN revision of this file. SVN revision is the upstream (docutils) revision.") (defconst rst-svn-timestamp - (rst-extract-version "\\$" "LastChangedDate: " ".+?+" " " + (rst-extract-version "\\$" "LastChangedDate: " ".+" " " "$LastChangedDate: 2017-01-08 10:54:35 +0100 (Sun, 08 Jan 2017) $") "The SVN time stamp of this file.") diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 651a2cc94c..46baa8a148 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -513,7 +513,7 @@ Return the number of characters removed." (url-http-debug "url-http-parse-response called in (%s)" (buffer-name)) (goto-char (point-min)) (skip-chars-forward " \t\n") ; Skip any blank crap - (skip-chars-forward "HTTP/") ; Skip HTTP Version + (skip-chars-forward "/HPT") ; Skip HTTP Version "HTTP/". (setq url-http-response-version (buffer-substring (point) (progn diff --git a/test/lisp/progmodes/f90-tests.el b/test/lisp/progmodes/f90-tests.el index 3cd7392bbc..b164238841 100644 --- a/test/lisp/progmodes/f90-tests.el +++ b/test/lisp/progmodes/f90-tests.el @@ -98,7 +98,7 @@ end subroutine test") (insert "(/ x /)") (f90-do-auto-fill) (beginning-of-line) - (skip-chars-forward "[ \t]") + (skip-chars-forward " \t") (should (equal "&(/" (buffer-substring (point) (+ 3 (point))))))) ;; TODO bug#5593 commit e9f2d1f9f6bfd14d245bcbcbfa4a5222166c4dbb Author: Nicolas Petton Date: Mon Mar 18 22:49:50 2019 +0100 * etc/NEWS: Remove temporary markers. diff --git a/etc/NEWS b/etc/NEWS index 9ee1a4f284..c927872f4d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -18,14 +18,12 @@ with a prefix argument or by typing 'C-u C-h C-n'. * Installation Changes in Emacs 26.2 ---- ** Building Emacs with the '--with-xwidgets' option now requires WebKit2. To build Emacs with xwidgets support, you will need to install the webkit2gtk-4.0 package; version 2.12 or later is required. (This change was actually made in Emacs 26.1, but was not called out in its NEWS.) -+++ ** Installing Emacs now installs the emacs-module.h file. The emacs-module.h file is now installed in the system-wide include directory as part of the Emacs installation. This allows to build @@ -37,10 +35,8 @@ Emacs modules outside of the Emacs source tree. * Changes in Emacs 26.2 ---- ** Emacs is now compliant with the latest version 11.0 of the Unicode Standard. ---- ** New variable 'xft-ignore-color-fonts'. Default t means don't try to load color fonts when using Xft, as they often cause crashes. Set it to nil if you really need those fonts. @@ -53,7 +49,6 @@ often cause crashes. Set it to nil if you really need those fonts. ** Dired -+++ *** The 'Z' command on a directory name compresses all of its files. It produces a compressed '.tar.gz' archive with all the files in the directory and all of its subdirectories. For symmetry, 'Z' on a @@ -66,17 +61,14 @@ partially called out in its NEWS; 'tgz' handling was added in 26.1.) ** Ibuffer ---- *** New toggle 'ibuffer-do-toggle-lock', bound to 'L'. ** Imenu ---- *** The value for 'imenu-auto-rescan-maxout' has been increased to 600000. ** Gnus ---- *** Mailutils movemail will now be used if found at runtime. The default value of 'mail-source-movemail-program' is now "movemail". This ensures that the movemail program from GNU Mailutils will be used @@ -86,12 +78,10 @@ absolute file name of the desired executable. ** Shadowfile ---- *** shadowfile.el has been rewritten to support Tramp file names. ** Shell mode ---- *** Shell mode buffers now have 'scroll-conservatively' set to 101. This is so as to better emulate the scrolling behavior of a text terminal when new output is added to the screen buffer. To get back @@ -102,13 +92,11 @@ in its NEWS.) ** VC ---- *** VC support for Mercurial was improved. Emacs now avoids invoking 'hg' as much as possible, for faster operation. (This and the following changes were actually made in Emacs 26.1, but were not called out in its NEWS.) ---- **** New vc-hg options. The new option 'vc-hg-parse-hg-data-structures' controls whether vc-hg will try parsing the Mercurial data structures directly instead of @@ -120,7 +108,6 @@ The new option 'vc-hg-use-file-version-for-mode-line-version' controls whether the version shown on the mode line is that of the visited file or of the repository working copy. ---- **** Display of Mercurial revisions in the mode line has changed. Previously, the mode line displayed the local number (1, 2, 3, ...) of the revision. Starting with Emacs 26.1, the default has changed, and @@ -134,17 +121,14 @@ option 'vc-hg-symbolic-revision-styles' to the value '("{rev}")'. * Incompatible Lisp Changes in Emacs 26.2 ---- ** shadowfile config files have changed their syntax. Existing files "~/.emacs.d/shadows" and "~/.emacs.d/shadow_todo" must be removed prior using the changed 'shadow-*' commands. -+++ ** 'thread-alive-p' has been renamed to 'thread-live-p'. The old name is an alias of the new name. Future Emacs version will obsolete it. ---- ** 'while-no-input' does not return due to input from subprocesses. Input that arrived from subprocesses while some code executed inside the 'while-no-input' form injected an internal buffer-switch event @@ -157,22 +141,18 @@ remove 'buffer-switch' from the list of events in * Lisp Changes in Emacs 26.2 -+++ ** The new function 'read-answer' accepts either long or short answers depending on the new customizable variable 'read-answer-short'. -+++ ** New function 'assoc-delete-all'. Like 'assq-delete-all', but uses 'equal' for comparison. ---- ** The function 'thing-at-point' behaves as before Emacs 26.1. The behavior of 'thing-at-point' when called with argument 'list' has changed in Emacs 26.1, in that it didn't consider text inside comments and strings as a potential list. This change is now reverted, and 'thing-at-point' behaves like it did before Emacs 26.1. ---- ** To cater to use cases where comments and strings are to be ignored when looking for a list, the function 'list-at-point' now takes an optional argument to do so. commit 7f6c6253c939a2034b840c279c3e4dca973b263a Author: Stefan Monnier Date: Mon Mar 18 14:57:10 2019 -0400 * src/fileio.c: Don't convert \r to \n just because of C-x $ (choose_write_coding_system): Setup the \r to \n conversion only if selective-display is t. diff --git a/src/fileio.c b/src/fileio.c index cac8ed0aee..7b9446c7e1 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -4854,7 +4854,7 @@ choose_write_coding_system (Lisp_Object start, Lisp_Object end, Lisp_Object file val = coding_inherit_eol_type (val, eol_parent); setup_coding_system (val, coding); - if (!STRINGP (start) && !NILP (BVAR (current_buffer, selective_display))) + if (!STRINGP (start) && EQ (Qt, BVAR (current_buffer, selective_display))) coding->mode |= CODING_MODE_SELECTIVE_DISPLAY; return val; } commit fa80f93ad1596d9c7e3dc1b7d0af61a1cc0b9ed3 Author: Stefan Monnier Date: Mon Mar 18 14:25:49 2019 -0400 * lisp/locate.el (locate-mode): Setup invisibility for Dired commands Also, use lexical-binding. diff --git a/lisp/locate.el b/lisp/locate.el index 106f805038..452f74610f 100644 --- a/lisp/locate.el +++ b/lisp/locate.el @@ -1,4 +1,4 @@ -;;; locate.el --- interface to the locate command +;;; locate.el --- interface to the locate command -*- lexical-binding:t -*- ;; Copyright (C) 1996, 1998, 2001-2019 Free Software Foundation, Inc. @@ -261,7 +261,7 @@ that is, with a prefix arg, you get the default behavior." "Run locate (like this): " (cons (concat (car locate-cmd) " " - (mapconcat 'identity (cdr locate-cmd) " ")) + (mapconcat #'identity (cdr locate-cmd) " ")) (+ 2 (length (car locate-cmd)))) nil nil 'locate-history-list)) (let* ((default (locate-word-at-point)) @@ -313,7 +313,7 @@ then `locate-post-command-hook'." (and (not arg) locate-prompt-for-command)))) ;; Find the Locate buffer - (save-window-excursion + (save-window-excursion ;FIXME: What window-excursion? (set-buffer (get-buffer-create locate-buffer-name)) (locate-mode) (let ((inhibit-read-only t) @@ -327,7 +327,7 @@ then `locate-post-command-hook'." (if run-locate-command (shell-command search-string locate-buffer-name) - (apply 'call-process locate-cmd nil t nil locate-cmd-args)) + (apply #'call-process locate-cmd nil t nil locate-cmd-args)) (and filter (locate-filter-output filter)) @@ -466,8 +466,8 @@ do not work in subdirectories. ;; Avoid clobbering this variable (make-local-variable 'dired-subdir-alist) (setq default-directory "/" - buffer-read-only t - selective-display t) + buffer-read-only t) + (add-to-invisibility-spec '(dired . t)) (dired-alist-add-1 default-directory (point-min-marker)) (set (make-local-variable 'dired-directory) "/") (set (make-local-variable 'dired-subdir-switches) locate-ls-subdir-switches) @@ -554,7 +554,7 @@ do not work in subdirectories. locate-regexp-match (concat locate-regexp-match ":\n")) - (insert (apply 'format locate-format-string (reverse locate-format-args))) + (insert (apply #'format locate-format-string (reverse locate-format-args))) (save-excursion (goto-char (point-min)) commit 799eb257970b1f6aeb5833417b6dd943d6479977 Author: Stefan Monnier Date: Mon Mar 18 08:09:42 2019 -0400 Ebrowse: Use invisibility-spec instead of selective-display * lisp/progmodes/ebrowse.el: Use lexical-binding. (ebrowse-tree-mode): Set invisibility-spec instead of selective-display. (ebrowse--hidden-p, ebrowse--hide, ebrowse--unhide): New functions. (ebrowse-expand-all, ebrowse-unhide-base-classes, ebrowse-hide-line) (ebrowse-mouse-1-in-tree-buffer): Use them. (ebrowse-output): Remove macro, use with-silent-modifications instead. (ebrowse-save-selective): Remove macro, not needed any more. (ebrowse-trim-string, ebrowse-read, ebrowse-collapse-fn): No need to pay attention to \r. (ebrowse-files-list): Use push. (ebrowse-view/find-file-and-search-pattern): Use add-hook here... (ebrowse-find-pattern): ...and remove-hook here. (ebrowse-view/find-position): Use add/remove-hook. diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el index f501f7353b..3faec4959b 100644 --- a/lisp/progmodes/ebrowse.el +++ b/lisp/progmodes/ebrowse.el @@ -1,4 +1,4 @@ -;;; ebrowse.el --- Emacs C++ class browser & tags facility +;;; ebrowse.el --- Emacs C++ class browser & tags facility -*- lexical-binding:t -*- ;; Copyright (C) 1992-2019 Free Software Foundation, Inc. @@ -233,30 +233,12 @@ Compare items with `eq' or TEST if specified." found)) -(defmacro ebrowse-output (&rest body) - "Eval BODY with a writable current buffer. -Preserve buffer's modified state." - (declare (indent 0) (debug t)) - (let ((modified (make-symbol "--ebrowse-output--"))) - `(let (buffer-read-only (,modified (buffer-modified-p))) - (unwind-protect - (progn ,@body) - (set-buffer-modified-p ,modified))))) - - (defmacro ebrowse-ignoring-completion-case (&rest body) "Eval BODY with `completion-ignore-case' bound to t." (declare (indent 0) (debug t)) `(let ((completion-ignore-case t)) ,@body)) -(defmacro ebrowse-save-selective (&rest body) - "Eval BODY with `selective-display' restored at the end." - (declare (indent 0) (debug t)) - ;; FIXME: Don't use selective-display. - `(let ((selective-display selective-display)) - ,@body)) - (defmacro ebrowse-for-all-trees (spec &rest body) "For all trees in SPEC, eval BODY." (declare (indent 1) (debug ((sexp form) body))) @@ -303,7 +285,7 @@ If a buffer with name NEW-NAME already exists, delete it first." (defun ebrowse-trim-string (string) "Return a copy of STRING with leading white space removed. Replace sequences of newlines with a single space." - (when (string-match "^[ \t\n\r]+" string) + (when (string-match "^[ \t\n]+" string) (setq string (substring string (match-end 0)))) (cl-loop while (string-match "[\n]+" string) finally return string do @@ -688,7 +670,7 @@ MARKED-ONLY non-nil means include marked classes only." "Return a list containing all files mentioned in a tree. MARKED-ONLY non-nil means include marked classes only." (let (list) - (maphash (lambda (file _dummy) (setq list (cons file list))) + (maphash (lambda (file _dummy) (push file list)) (ebrowse-files-table marked-only)) list)) @@ -865,7 +847,7 @@ and TREE is a list of `ebrowse-ts' structures forming the class tree." ;; Read Lisp objects. Temporarily increase `gc-cons-threshold' to ;; prevent a GC that would not free any memory. (let ((gc-cons-threshold 2000000)) - (while (not (progn (skip-chars-forward " \t\n\r") (eobp))) + (while (not (progn (skip-chars-forward " \t\n") (eobp))) (let* ((root (read (current-buffer))) (old-root-ptr (ebrowse-class-in-tree root tree))) (ebrowse-show-progress "Reading data" (null tree)) @@ -996,7 +978,6 @@ if for some reason a circle is in the inheritance graph." (ebrowse-qualified-class-name (ebrowse-ts-class (car subclass))) classes) - as next = nil do ;; Replace the subclass tree with the one found in ;; CLASSES if there is already an entry for that class @@ -1096,8 +1077,7 @@ Tree mode key bindings: (set (make-local-variable 'ebrowse--frozen-flag) nil) (setq mode-line-buffer-identification ident) (setq buffer-read-only t) - (setq selective-display t) - (setq selective-display-ellipses t) + (add-to-invisibility-spec '(ebrowse . t)) (set (make-local-variable 'revert-buffer-function) #'ebrowse-revert-tree-buffer-from-file) (set (make-local-variable 'ebrowse--header) header) @@ -1107,7 +1087,7 @@ Tree mode key bindings: (and tree (ebrowse-build-tree-obarray tree))) (set (make-local-variable 'ebrowse--frozen-flag) nil) - (add-hook 'write-file-functions 'ebrowse-write-file-hook-fn nil t) + (add-hook 'write-file-functions #'ebrowse-write-file-hook-fn nil t) (modify-syntax-entry ?_ (char-to-string (char-syntax ?a))) (when tree (ebrowse-redraw-tree) @@ -1184,7 +1164,7 @@ If given a numeric N-TIMES argument, mark that many classes." ;; by a regexp replace over the whole buffer. The reason for this ;; is that classes might have multiple base classes. If this is ;; the case, they are displayed more than once in the tree. - (ebrowse-output + (with-silent-modifications (cl-loop for tree in to-change as regexp = (concat "^.*\\b" @@ -1213,7 +1193,7 @@ If given a numeric N-TIMES argument, mark that many classes." "Display class marker signs in the tree between START and END." (interactive) (save-excursion - (ebrowse-output + (with-silent-modifications (catch 'end (goto-char (point-min)) (dolist (root ebrowse--tree) @@ -1242,8 +1222,8 @@ If given a numeric N-TIMES argument, mark that many classes." With PREFIX, insert that many filenames." (interactive "p") (unless ebrowse--show-file-names-flag - (ebrowse-output - (dotimes (i prefix) + (with-silent-modifications + (dotimes (_ prefix) (let ((tree (ebrowse-tree-at-point)) start file-name-existing) @@ -1393,6 +1373,18 @@ Pop to member buffer if no prefix ARG, to tree buffer otherwise." +;;; Functions to hide/unhide text + +(defun ebrowse--hidden-p (&optional pos) + (eq (get-char-property (or pos (point)) 'invisible) 'ebrowse)) + +(defun ebrowse--hide (start end) + (put-text-property start end 'invisible 'ebrowse)) + +(defun ebrowse--unhide (start end) + ;; FIXME: This also removes other invisible properties! + (remove-text-properties start end '(invisible))) + ;;; Misc tree buffer commands (defun ebrowse-set-tree-indentation () @@ -1418,16 +1410,14 @@ Read a class name from the minibuffer if CLASS is nil." (setf class (completing-read "Goto class: " (ebrowse-tree-obarray-as-alist) nil t))) - (ebrowse-save-selective - (goto-char (point-min)) - (widen) - (setf selective-display nil) - (setq ebrowse--last-regexp (concat "\\b" class "\\b")) - (if (re-search-forward ebrowse--last-regexp nil t) - (progn - (goto-char (match-beginning 0)) - (ebrowse-unhide-base-classes)) - (error "Not found"))))) + (goto-char (point-min)) + (widen) + (setq ebrowse--last-regexp (concat "\\b" class "\\b")) + (if (re-search-forward ebrowse--last-regexp nil t) + (progn + (goto-char (match-beginning 0)) + (ebrowse-unhide-base-classes)) + (error "Not found")))) @@ -1556,7 +1546,7 @@ and possibly kill the viewed buffer." (setq original-frame-configuration ebrowse--frame-configuration exit-action ebrowse--view-exit-action)) ;; Delete the frame in which we viewed. - (mapc 'delete-frame + (mapc #'delete-frame (cl-loop for frame in (frame-list) when (not (assq frame original-frame-configuration)) collect frame)) @@ -1610,9 +1600,7 @@ specifies where to find/view the result." (cond (view (setf ebrowse-temp-position-to-view struc ebrowse-temp-info-to-view info) - (unless (boundp 'view-mode-hook) - (setq view-mode-hook nil)) - (push 'ebrowse-find-pattern view-mode-hook) + (add-hook 'view-mode-hook #'ebrowse-find-pattern) (pcase where ('other-window (view-file-other-window file)) ('other-frame (ebrowse-view-file-other-frame file)) @@ -1676,7 +1664,7 @@ a pattern. To be able to do a search in a viewed buffer, INFO is a list (TREE-HEADER TREE-OR-MEMBER MEMBER-LIST)." (unless position - (pop view-mode-hook) + (remove-hook 'view-mode-hook #'ebrowse-find-pattern) (setf viewing t position ebrowse-temp-position-to-view info ebrowse-temp-info-to-view)) @@ -1685,7 +1673,7 @@ INFO is a list (TREE-HEADER TREE-OR-MEMBER MEMBER-LIST)." (start (ebrowse-bs-point position)) (offset 100) found) - (pcase-let ((`(,header ,class-or-member ,member-list) info)) + (pcase-let ((`(,_header ,class-or-member ,member-list) info)) ;; If no pattern is specified, construct one from the member name. (when (stringp pattern) (setq pattern (concat "^.*" (regexp-quote pattern)))) @@ -1749,7 +1737,7 @@ QUIETLY non-nil means don't display progress messages." (interactive) (or quietly (message "Displaying...")) (save-excursion - (ebrowse-output + (with-silent-modifications (erase-buffer) (ebrowse-draw-tree-fn))) (ebrowse-update-tree-buffer-mode-line) @@ -1816,7 +1804,8 @@ This function may look weird, but this is faster than recursion." (nconc (copy-sequence (ebrowse-ts-subclasses tree)) stack2) stack1 (nconc (make-list (length (ebrowse-ts-subclasses tree)) - (1+ level)) stack1))))) + (1+ level)) + stack1))))) @@ -1844,69 +1833,60 @@ With prefix ARG, expand all sub-trees." "Expand or fold all trees in the buffer. COLLAPSE non-nil means fold them." (interactive "P") - (let ((line-end (if collapse "^\n" "^\r")) - (insertion (if collapse "\r" "\n"))) - (ebrowse-output + (with-silent-modifications + (if (not collapse) + (ebrowse--unhide (point-min) (point-max)) (save-excursion (goto-char (point-min)) - (while (not (progn (skip-chars-forward line-end) (eobp))) - (when (or (not collapse) - (looking-at "\n ")) - (delete-char 1) - (insert insertion)) - (when collapse - (skip-chars-forward "\n "))))))) + (while (progn (end-of-line) (not (eobp))) + (when (looking-at "\n ") + (ebrowse--hide (point) (line-end-position 2))) + (skip-chars-forward "\n ")))))) (defun ebrowse-unhide-base-classes () "Unhide the line the cursor is on and all base classes." - (ebrowse-output + (with-silent-modifications (save-excursion (let (indent last-indent) - (skip-chars-backward "^\r\n") - (when (not (looking-at "[\r\n][^ \t]")) - (skip-chars-forward "\r\n \t") + (forward-line 0) + (when (not (looking-at "\n[^ \t]")) + (skip-chars-forward "\n \t") (while (and (or (null last-indent) ;first time (> indent 1)) ;not root class - (re-search-backward "[\r\n][ \t]*" nil t)) + (re-search-backward "\n[ \t]*" nil t)) (setf indent (- (match-end 0) (match-beginning 0))) (when (or (null last-indent) (< indent last-indent)) (setf last-indent indent) - (when (looking-at "\r") - (delete-char 1) - (insert 10))) - (backward-char 1))))))) + (when (ebrowse--hidden-p) + (ebrowse--unhide (point) (line-end-position 2)))))))))) (defun ebrowse-hide-line (collapse) "Hide/show a single line in the tree. COLLAPSE non-nil means hide." - (save-excursion - (ebrowse-output - (skip-chars-forward "^\r\n") - (delete-char 1) - (insert (if collapse 13 10))))) + (with-silent-modifications + (funcall (if collapse #'ebrowse--hide #'ebrowse--unhide) + (line-end-position) (line-end-position 2)))) (defun ebrowse-collapse-fn (collapse) "Collapse or expand a branch of the tree. COLLAPSE non-nil means collapse the branch." - (ebrowse-output + (with-silent-modifications (save-excursion (beginning-of-line) (skip-chars-forward "> \t") (let ((indentation (current-column))) (while (and (not (eobp)) (save-excursion - (skip-chars-forward "^\r\n") - (goto-char (1+ (point))) + (forward-line 1) (skip-chars-forward "> \t") (> (current-column) indentation))) (ebrowse-hide-line collapse) - (skip-chars-forward "^\r\n") - (goto-char (1+ (point)))))))) + (forward-line 1)))))) ;;; Electric tree selection @@ -2164,7 +2144,7 @@ See `Electric-command-loop' for a description of STATE and CONDITION." ;;;###autoload (define-derived-mode ebrowse-member-mode special-mode "Ebrowse-Members" "Major mode for Ebrowse member buffers." - (mapc 'make-local-variable + (mapc #'make-local-variable '(ebrowse--decl-column ;display column ebrowse--n-columns ;number of short columns ebrowse--column-width ;width of columns above @@ -2587,7 +2567,7 @@ TAGS-FILE is the file name of the BROWSE file." (let ((display-fn (if ebrowse--long-display-flag 'ebrowse-draw-member-long-fn 'ebrowse-draw-member-short-fn))) - (ebrowse-output + (with-silent-modifications (erase-buffer) ;; Show this class (ebrowse-draw-member-buffer-class-line) @@ -2708,7 +2688,7 @@ means the member buffer is standalone. CLASS is its class." (defun ebrowse-draw-member-long-fn (member-list tree) "Display member buffer for MEMBER-LIST in long form. TREE is the class tree of MEMBER-LIST." - (dolist (member-struc (mapcar 'ebrowse-member-display-p member-list)) + (dolist (member-struc (mapcar #'ebrowse-member-display-p member-list)) (when member-struc (let ((name (ebrowse-ms-name member-struc)) (start (point))) @@ -3243,7 +3223,8 @@ from point as default. Value is a list (CLASS-NAME MEMBER-NAME)." (if members (let* ((name (ebrowse-ignoring-completion-case (completing-read prompt members nil nil member-name))) - (completion-result (try-completion name members))) + ;; (completion-result (try-completion name members)) + ) ;; Cannot rely on `try-completion' returning t for exact ;; matches! It returns the name as a string. (unless (gethash name members) @@ -3750,6 +3731,7 @@ looks like a function call to the member." ;; Get the member name NAME (class-name is ignored). (let ((name fix-name) class-name regexp) (unless name + (ignore class-name) ;Can't use an underscore to silence the warning :-(! (cl-multiple-value-setq (class-name name) (cl-values-list (ebrowse-tags-read-name header "Find calls of: ")))) ;; Set tags loop form to search for member and begin loop. @@ -3794,14 +3776,13 @@ If VIEW is non-nil, view the position, otherwise find it." (find-file (ebrowse-position-file-name position)) (goto-char (ebrowse-position-point position))) (t - (unwind-protect - (progn - (push (function - (lambda () - (goto-char (ebrowse-position-point position)))) - view-mode-hook) - (view-file (ebrowse-position-file-name position))) - (pop view-mode-hook))))) + (let ((fn (lambda () + (goto-char (ebrowse-position-point position))))) + (unwind-protect + (progn + (add-hook 'view-mode-hook fn) + (view-file (ebrowse-position-file-name position))) + (remove-hook 'view-mode-hook fn)))))) (defun ebrowse-push-position (marker info &optional target) @@ -3904,6 +3885,7 @@ Runs the hook `ebrowse-electric-position-mode-hook'." (setq mode-line-buffer-identification "Electric Position Menu") (when (memq 'mode-name mode-line-format) (setq mode-line-format (copy-sequence mode-line-format)) + ;; FIXME: Why not set `mode-name' to "Positions"? (setcar (memq 'mode-name mode-line-format) "Positions")) (set (make-local-variable 'Helper-return-blurb) "return to buffer editing") (setq truncate-lines t @@ -4050,7 +4032,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in." (erase-buffer) (setf (ebrowse-hs-member-table header) nil) (insert (prin1-to-string header) " ") - (mapc 'ebrowse-save-class tree) + (mapc #'ebrowse-save-class tree) (write-file file-name) (message "Tree written to file `%s'" file-name)) (kill-buffer temp-buffer) @@ -4065,7 +4047,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in." (insert "[ebrowse-ts ") (prin1 (ebrowse-ts-class class)) ;class name (insert "(") ;list of subclasses - (mapc 'ebrowse-save-class (ebrowse-ts-subclasses class)) + (mapc #'ebrowse-save-class (ebrowse-ts-subclasses class)) (insert ")") (dolist (func ebrowse-member-list-accessors) (prin1 (funcall func class)) @@ -4252,12 +4234,12 @@ NUMBER-OF-STATIC-VARIABLES:" (unwind-protect (progn (add-hook 'electric-buffer-menu-mode-hook - 'ebrowse-hack-electric-buffer-menu) + #'ebrowse-hack-electric-buffer-menu) (add-hook 'electric-buffer-menu-mode-hook - 'ebrowse-install-1-to-9-keys) + #'ebrowse-install-1-to-9-keys) (call-interactively 'electric-buffer-list)) (remove-hook 'electric-buffer-menu-mode-hook - 'ebrowse-hack-electric-buffer-menu))) + #'ebrowse-hack-electric-buffer-menu))) ;;; Mouse support @@ -4400,8 +4382,7 @@ EVENT is the mouse event." (pcase (event-click-count event) (2 (pcase property ('class-name - (let ((collapsed (save-excursion (skip-chars-forward "^\r\n") - (looking-at "\r")))) + (let ((collapsed (ebrowse--hidden-p (line-end-position)))) (ebrowse-collapse-fn (not collapsed)))) ('mark (ebrowse-toggle-mark-at-point 1))))))) @@ -4411,9 +4392,7 @@ EVENT is the mouse event." (provide 'ebrowse) ;; Local variables: -;; eval:(put 'ebrowse-output 'lisp-indent-hook 0) ;; eval:(put 'ebrowse-ignoring-completion-case 'lisp-indent-hook 0) -;; eval:(put 'ebrowse-save-selective 'lisp-indent-hook 0) ;; eval:(put 'ebrowse-for-all-trees 'lisp-indent-hook 1) ;; End: commit 5055e14dda041f4a4985d3663f19fa8ccb37cad6 Author: Stefan Monnier Date: Sun Mar 17 13:35:20 2019 -0400 Dired: Use invisibility-spec instead of selective-display * lisp/dired.el (dired-subdir-regexp): No need to pay attention to \r. (dired-remember-hidden): Use pcase-dolist and dired--hidden-p. (dired-mode): Set invisibility-spec instead of selective-display. (dired--hidden-p, dired--hide, dired--unhide, dired--find-hidden-pos): New functions. (dired-move-to-end-of-filename): Use dired--hidden-p. (dired-next-subdir): No need to pay attention to \r. (dired-fun-in-all-buffers): Use push. * lisp/dired-aux.el (dired-unhide-subdir, dired-hide-subdir, dired-hide-all): Use the new functions and with-silent-modifications. (dired-add-entry): Use dired--hidden-p. (dired-goto-subdir): No need to pay attention to \r. (dired-hide-check): Remove. (dired-subdir-hidden-p): Use dired--hidden-p. (dired-do-find-regexp): Use file-name-as-directory. diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 4be93c3220..b81c0d1a4f 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -148,7 +148,7 @@ the string of command switches used as the third argument of `diff'." (read-string "Options for diff: " (if (stringp diff-switches) diff-switches - (mapconcat 'identity diff-switches " "))))))) + (mapconcat #'identity diff-switches " "))))))) (let ((current (dired-get-filename t))) (when (or (equal (expand-file-name file) (expand-file-name current)) @@ -173,7 +173,7 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'." (list (read-string "Options for diff: " (if (stringp diff-switches) diff-switches - (mapconcat 'identity diff-switches " ")))) + (mapconcat #'identity diff-switches " ")))) nil)) (diff-backup (dired-get-filename) switches)) @@ -227,12 +227,12 @@ Examples of PREDICATE: (setq file-alist2 (delq (assoc "." file-alist2) file-alist2)) (setq file-alist2 (delq (assoc ".." file-alist2) file-alist2)) (setq file-list1 (mapcar - 'cadr + #'cadr (dired-file-set-difference file-alist1 file-alist2 predicate)) file-list2 (mapcar - 'cadr + #'cadr (dired-file-set-difference file-alist2 file-alist1 predicate))) @@ -491,7 +491,7 @@ Uses the shell command coming from variables `lpr-command' and lpr-switches)) (command (dired-mark-read-string "Print %s with: " - (mapconcat 'identity + (mapconcat #'identity (cons lpr-command (if (stringp lpr-switches) (list lpr-switches) @@ -597,7 +597,7 @@ with a prefix argument." (possibilities (file-name-all-completions base-versions (file-name-directory fn))) - (versions (mapcar 'backup-extract-version possibilities))) + (versions (mapcar #'backup-extract-version possibilities))) (if versions (setq dired-file-version-alist (cons (cons fn versions) @@ -822,27 +822,28 @@ can be produced by `dired-get-marked-files', for example." retval)) (lambda (x) (concat cmd-prefix command dired-mark-separator x))))) (concat - (cond (on-each - (format "%s%s" - (mapconcat stuff-it (mapcar 'shell-quote-argument file-list) - cmd-sep) - ;; POSIX shells running a list of commands in the background - ;; (LIST = cmd_1 & [cmd_2 & ... cmd_i & ... cmd_N &]) - ;; return once cmd_N ends, i.e., the shell does not - ;; wait for cmd_i to finish before executing cmd_i+1. - ;; That means, running (shell-command LIST) may not show - ;; the output of all the commands (Bug#23206). - ;; Add 'wait' to force those POSIX shells to wait until - ;; all commands finish. - (or (and parallel-in-background (not w32-shell) - "&wait") - ""))) - (t - (let ((files (mapconcat 'shell-quote-argument - file-list dired-mark-separator))) - (when (cdr file-list) - (setq files (concat dired-mark-prefix files dired-mark-postfix))) - (funcall stuff-it files)))) + (cond + (on-each + (format "%s%s" + (mapconcat stuff-it (mapcar #'shell-quote-argument file-list) + cmd-sep) + ;; POSIX shells running a list of commands in the background + ;; (LIST = cmd_1 & [cmd_2 & ... cmd_i & ... cmd_N &]) + ;; return once cmd_N ends, i.e., the shell does not + ;; wait for cmd_i to finish before executing cmd_i+1. + ;; That means, running (shell-command LIST) may not show + ;; the output of all the commands (Bug#23206). + ;; Add 'wait' to force those POSIX shells to wait until + ;; all commands finish. + (or (and parallel-in-background (not w32-shell) + "&wait") + ""))) + (t + (let ((files (mapconcat #'shell-quote-argument + file-list dired-mark-separator))) + (when (cdr file-list) + (setq files (concat dired-mark-prefix files dired-mark-postfix))) + (funcall stuff-it files)))) (or (and in-background "&") "")))) ;; This is an extra function so that it can be redefined by ange-ftp. @@ -872,7 +873,7 @@ Else returns nil for success." (set-buffer err-buffer) (erase-buffer) (setq default-directory dir ; caller's default-directory - err (not (eq 0 (apply 'process-file program nil t nil arguments)))) + err (not (eq 0 (apply #'process-file program nil t nil arguments)))) (if err (progn (dired-log (concat program " " (prin1-to-string arguments) "\n")) @@ -1349,7 +1350,7 @@ See Info node `(emacs)Subdir switches' for more details." ;; Replace space by old marker without moving point. ;; Faster than goto+insdel inside a save-excursion? (when char - (subst-char-in-region opoint (1+ opoint) ?\040 char))))) + (subst-char-in-region opoint (1+ opoint) ?\s char))))) (dired-move-to-filename)) ;;;###autoload @@ -1403,8 +1404,8 @@ files matching `dired-omit-regexp'." (catch 'not-found (if (string= directory cur-dir) (progn - (skip-chars-forward "^\r\n") - (if (eq (following-char) ?\r) + (end-of-line) + (if (dired--hidden-p) (dired-unhide-subdir)) ;; We are already where we should be, except when ;; point is before the subdir line or its total line. @@ -1414,7 +1415,7 @@ files matching `dired-omit-regexp'." ;; else try to find correct place to insert (if (dired-goto-subdir directory) (progn ;; unhide if necessary - (if (= (following-char) ?\r) + (if (dired--hidden-p) ;; Point is at end of subdir line. (dired-unhide-subdir)) ;; found - skip subdir and `total' line @@ -1523,7 +1524,7 @@ files matching `dired-omit-regexp'." (point)) (line-beginning-position 2))) (setq file (directory-file-name file)) - (dired-add-entry file (if (eq ?\040 marker) nil marker))))) + (dired-add-entry file (if (eq ?\s marker) nil marker))))) ;;; Copy, move/rename, making hard and symbolic links @@ -2562,7 +2563,7 @@ Optional third arg LIMIT (>= 1) is a limit to the length of the resulting list. Thus, if SEP is a regexp that only matches itself, - (mapconcat 'identity (dired-split SEP STRING) SEP) + (mapconcat #'identity (dired-split SEP STRING) SEP) is always equal to STRING." (let* ((start (string-match pat str)) @@ -2610,7 +2611,7 @@ When called interactively and not on a subdir line, go to this subdir's line." (defun dired-goto-subdir (dir) "Go to end of header line of DIR in this dired buffer. Return value of point on success, otherwise return nil. -The next char is either \\n, or \\r if DIR is hidden." +The next char is \\n." (interactive (prog1 ; let push-mark display its message (list (expand-file-name @@ -2625,8 +2626,8 @@ The next char is either \\n, or \\r if DIR is hidden." (and elt (goto-char (dired-get-subdir-min elt)) ;; dired-subdir-hidden-p and dired-add-entry depend on point being - ;; at either \r or \n after this function succeeds. - (progn (skip-chars-forward "^\r\n") + ;; at \n after this function succeeds. + (progn (end-of-line) (point))))) ;;;###autoload @@ -2699,18 +2700,13 @@ Lower levels are unaffected." ;;; hiding (defun dired-unhide-subdir () - (let (buffer-read-only) - (subst-char-in-region (dired-subdir-min) (dired-subdir-max) ?\r ?\n))) - -(defun dired-hide-check () - (or selective-display - (error "selective-display must be t for subdir hiding to work!"))) + (with-silent-modifications + (dired--unhide (dired-subdir-min) (dired-subdir-max)))) (defun dired-subdir-hidden-p (dir) - (and selective-display - (save-excursion - (dired-goto-subdir dir) - (= (following-char) ?\r)))) + (save-excursion + (dired-goto-subdir dir) + (dired--hidden-p))) ;;;###autoload (defun dired-hide-subdir (arg) @@ -2718,8 +2714,7 @@ Lower levels are unaffected." Optional prefix arg is a repeat factor. Use \\[dired-hide-all] to (un)hide all directories." (interactive "p") - (dired-hide-check) - (let ((modflag (buffer-modified-p))) + (with-silent-modifications (while (>= (setq arg (1- arg)) 0) (let* ((cur-dir (dired-current-directory)) (hidden-p (dired-subdir-hidden-p cur-dir)) @@ -2728,12 +2723,11 @@ Use \\[dired-hide-all] to (un)hide all directories." buffer-read-only) ;; keep header line visible, hide rest (goto-char (dired-get-subdir-min elt)) - (skip-chars-forward "^\n\r") + (end-of-line) (if hidden-p - (subst-char-in-region (point) end-pos ?\r ?\n) - (subst-char-in-region (point) end-pos ?\n ?\r))) - (dired-next-subdir 1 t)) - (restore-buffer-modified-p modflag))) + (dired--unhide (point) end-pos) + (dired--hide (point) end-pos))) + (dired-next-subdir 1 t)))) ;;;###autoload (defun dired-hide-all (&optional ignored) @@ -2741,28 +2735,20 @@ Use \\[dired-hide-all] to (un)hide all directories." If there is already something hidden, make everything visible again. Use \\[dired-hide-subdir] to (un)hide a particular subdirectory." (interactive "P") - (dired-hide-check) - (let ((modflag (buffer-modified-p)) - buffer-read-only) - (if (save-excursion - (goto-char (point-min)) - (search-forward "\r" nil t)) - ;; unhide - bombs on \r in filenames - (subst-char-in-region (point-min) (point-max) ?\r ?\n) + (with-silent-modifications + (if (text-property-any (point-min) (point-max) 'invisible 'dired) + (dired--unhide (point-min) (point-max)) ;; hide - (let ((pos (point-max)) ; pos of end of last directory - (alist dired-subdir-alist)) - (while alist ; while there are dirs before pos - (subst-char-in-region (dired-get-subdir-min (car alist)) ; pos of prev dir - (save-excursion - (goto-char pos) ; current dir - ;; we're somewhere on current dir's line - (forward-line -1) - (point)) - ?\n ?\r) - (setq pos (dired-get-subdir-min (car alist))) ; prev dir gets current dir - (setq alist (cdr alist))))) - (restore-buffer-modified-p modflag))) + (let ((pos (point-max))) ; pos of end of last directory + (dolist (subdir dired-subdir-alist) + (let ((start (dired-get-subdir-min subdir)) ; pos of prev dir + (end (save-excursion + (goto-char pos) ; current dir + ;; we're somewhere on current dir's line + (forward-line -1) + (point)))) + (dired--hide start end)) + (setq pos (dired-get-subdir-min subdir))))))) ; prev dir gets current dir ;;;###end dired-ins.el @@ -2788,8 +2774,8 @@ When off, it uses the original predicate." nil nil nil (if dired-isearch-filenames-mode (add-function :before-while (local 'isearch-filter-predicate) - #'dired-isearch-filter-filenames - '((isearch-message-prefix . "filename "))) + #'dired-isearch-filter-filenames + '((isearch-message-prefix . "filename "))) (remove-function (local 'isearch-filter-predicate) #'dired-isearch-filter-filenames)) (when isearch-mode @@ -2805,13 +2791,13 @@ Intended to be added to `isearch-mode-hook'." (get-text-property (point) 'dired-filename))) (define-key isearch-mode-map "\M-sff" 'dired-isearch-filenames-mode) (dired-isearch-filenames-mode 1) - (add-hook 'isearch-mode-end-hook 'dired-isearch-filenames-end nil t))) + (add-hook 'isearch-mode-end-hook #'dired-isearch-filenames-end nil t))) (defun dired-isearch-filenames-end () "Clean up the Dired file name search after terminating isearch." (define-key isearch-mode-map "\M-sff" nil) (dired-isearch-filenames-mode -1) - (remove-hook 'isearch-mode-end-hook 'dired-isearch-filenames-end t) + (remove-hook 'isearch-mode-end-hook #'dired-isearch-filenames-end t) (unless isearch-suspended (custom-reevaluate-setting 'dired-isearch-filenames))) @@ -2905,7 +2891,7 @@ REGEXP should use constructs supported by your local `grep' command." (declare-function rgrep-find-ignored-directories "grep" (dir)) (let* ((files (dired-get-marked-files nil nil nil nil t)) (ignores (nconc (mapcar - (lambda (s) (concat s "/")) + #'file-name-as-directory (rgrep-find-ignored-directories default-directory)) grep-find-ignored-files)) (xrefs (mapcan diff --git a/lisp/dired.el b/lisp/dired.el index 98f493ecc6..fc0b71238b 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -364,12 +364,12 @@ This is an alist of the form (SUBDIR . SWITCHES).") (defvaralias 'dired-move-to-filename-regexp 'directory-listing-before-filename-regexp) -(defvar dired-subdir-regexp "^. \\([^\n\r]+\\)\\(:\\)[\n\r]" +(defvar dired-subdir-regexp "^. \\(.+\\)\\(:\\)\n" "Regexp matching a maybe hidden subdirectory line in `ls -lR' output. Subexpression 1 is the subdirectory proper, no trailing colon. The match starts at the beginning of the line and ends after the end -of the line (\\n or \\r). -Subexpression 2 must end right before the \\n or \\r.") +of the line. +Subexpression 2 must end right before the \\n.") (defgroup dired-faces nil "Faces used by Dired." @@ -548,7 +548,7 @@ Return value is the number of files marked, or nil if none were marked." (setq count 0) (when ,msg (message "%s %ss%s..." - (cond ((eq dired-marker-char ?\040) "Unmarking") + (cond ((eq dired-marker-char ?\s) "Unmarking") ((eq dired-del-marker dired-marker-char) "Flagging") (t "Marking")) @@ -568,7 +568,7 @@ Return value is the number of files marked, or nil if none were marked." count ,msg (dired-plural-s count) - (if (eq dired-marker-char ?\040) "un" "") + (if (eq dired-marker-char ?\s) "un" "") (if (eq dired-marker-char dired-del-marker) "flagged" "marked")))) (and (> count 0) count))) @@ -1539,9 +1539,8 @@ change; the point does." (defun dired-remember-marks (beg end) "Return alist of files and their marks, from BEG to END." - (if selective-display ; must unhide to make this work. - (let ((inhibit-read-only t)) - (subst-char-in-region beg end ?\r ?\n))) + (if (dired--find-hidden-pos (point-min) (point-max)) + (dired--unhide (point-min) (point-max))) ;Must unhide to make this work. (let (fil chr alist) (save-excursion (goto-char beg) @@ -1568,15 +1567,12 @@ Each element of ALIST looks like (FILE . MARKERCHAR)." (defun dired-remember-hidden () "Return a list of names of subdirs currently hidden." - (let ((l dired-subdir-alist) dir pos result) - (while l - (setq dir (car (car l)) - pos (cdr (car l)) - l (cdr l)) + (let (result) + (pcase-dolist (`(,dir . ,pos) dired-subdir-alist) (goto-char pos) - (skip-chars-forward "^\r\n") - (if (eq (following-char) ?\r) - (setq result (cons dir result)))) + (end-of-line) + (if (dired--hidden-p) + (push dir result))) result)) (defun dired-insert-old-subdirs (old-subdir-alist) @@ -2135,9 +2131,9 @@ Keybindings: mode-name "Dired" ;; case-fold-search nil buffer-read-only t - selective-display t ; for subdirectory hiding mode-line-buffer-identification (propertized-buffer-identification "%17b")) + (add-to-invisibility-spec '(dired . t)) ;; Ignore dired-hide-details-* value of invisible text property by default. (when (eq buffer-invisibility-spec t) (setq buffer-invisibility-spec (list t))) @@ -2160,8 +2156,8 @@ Keybindings: (when (featurep 'dnd) (setq-local dnd-protocol-alist (append dired-dnd-protocol-alist dnd-protocol-alist))) - (add-hook 'file-name-at-point-functions 'dired-file-name-at-point nil t) - (add-hook 'isearch-mode-hook 'dired-isearch-filenames-setup nil t) + (add-hook 'file-name-at-point-functions #'dired-file-name-at-point nil t) + (add-hook 'isearch-mode-hook #'dired-isearch-filenames-setup nil t) (run-mode-hooks 'dired-mode-hook)) ;; Idiosyncratic dired commands that don't deal with marks. @@ -2266,7 +2262,8 @@ directory in another window." (error "File no longer exists; type `g' to update Dired buffer"))))) ;; Force C-m keybinding rather than `f' or `e' in the mode doc: -(define-obsolete-function-alias 'dired-advertised-find-file 'dired-find-file "23.2") +(define-obsolete-function-alias 'dired-advertised-find-file + #'dired-find-file "23.2") (defun dired-find-file () "In Dired, visit the file or directory named on this line." (interactive) @@ -2514,6 +2511,34 @@ See options: `dired-hide-details-hide-symlink-targets' and 'remove-from-invisibility-spec) 'dired-hide-details-link)) +;;; Functions to hide/unhide text + +(defun dired--find-hidden-pos (start end) + (text-property-any start end 'invisible 'dired)) + +(defun dired--hidden-p (&optional pos) + (eq (get-char-property (or pos (point)) 'invisible) 'dired)) + +(defun dired--hide (start end) + ;; The old code used selective-display which only works at + ;; a line-granularity, so it used start and end positions that where + ;; approximate ("anywhere on the line is fine"). + (save-excursion + (put-text-property (progn (goto-char start) (line-end-position)) + (progn (goto-char end) (line-end-position)) + 'invisible 'dired))) + +(defun dired--unhide (start end) + ;; The old code used selective-display which only works at + ;; a line-granularity, so it used start and end positions that where + ;; approximate ("anywhere on the line is fine"). + ;; FIXME: This also removes other invisible properties! + (save-excursion + (remove-text-properties + (progn (goto-char start) (line-end-position)) + (progn (goto-char end) (line-end-position)) + '(invisible)))) + ;;; Functions for finding the file name in a dired buffer line. (defvar dired-permission-flags-regexp @@ -2553,12 +2578,11 @@ Return the position of the beginning of the filename, or nil if none found." ;; This is the UNIX version. (if (get-text-property (point) 'dired-filename) (goto-char (next-single-property-change (point) 'dired-filename)) - (let (opoint file-type executable symlink hidden used-F eol) - (setq used-F (dired-check-switches dired-actual-switches "F" "classify") - opoint (point) - eol (line-end-position) - hidden (and selective-display - (save-excursion (search-forward "\r" eol t)))) + (let ((opoint (point)) + (used-F (dired-check-switches dired-actual-switches "F" "classify")) + (eol (line-end-position)) + (hidden (dired--hidden-p)) + file-type executable symlink) (if hidden nil (save-excursion ;; Find out what kind of file this is: @@ -2795,7 +2819,7 @@ You can then feed the file name(s) to other commands with \\[yank]." (if pos (progn (goto-char pos) - (or no-skip (skip-chars-forward "^\n\r")) + (or no-skip (end-of-line)) (point)) (if no-error-if-not-found nil ; return nil if not found @@ -3187,17 +3211,17 @@ non-empty directories is allowed." (dired-move-to-filename)) (defun dired-fun-in-all-buffers (directory file fun &rest args) - ;; In all buffers dired'ing DIRECTORY, run FUN with ARGS. - ;; If the buffer has a wildcard pattern, check that it matches FILE. - ;; (FILE does not include a directory component.) - ;; FILE may be nil, in which case ignore it. - ;; Return list of buffers where FUN succeeded (i.e., returned non-nil). + "In all buffers dired'ing DIRECTORY, run FUN with ARGS. +If the buffer has a wildcard pattern, check that it matches FILE. +(FILE does not include a directory component.) +FILE may be nil, in which case ignore it. +Return list of buffers where FUN succeeded (i.e., returned non-nil)." (let (success-list) - (dolist (buf (dired-buffers-for-dir (expand-file-name directory) - file)) + (dolist (buf (dired-buffers-for-dir (expand-file-name directory) file)) (with-current-buffer buf (if (apply fun args) - (setq success-list (cons (buffer-name buf) success-list))))) + (push buf success-list)))) + ;; FIXME: AFAICT, this return value is not used by any of the callers! success-list)) ;; Delete the entry for FILE from @@ -3430,7 +3454,7 @@ no ARGth marked file is found before this line." (and (dired-goto-file file) (progn (beginning-of-line) - (if (not (equal ?\040 (following-char))) + (if (not (equal ?\s (following-char))) (following-char)))))) (defun dired-mark-files-in-region (start end) @@ -3488,7 +3512,7 @@ If looking at a subdir, unmark all its files except `.' and `..'. If the region is active in Transient Mark mode, unmark all files in the active region." (interactive (list current-prefix-arg t)) - (let ((dired-marker-char ?\040)) + (let ((dired-marker-char ?\s)) (dired-mark arg interactive))) (defun dired-flag-file-deletion (arg &optional interactive) @@ -3527,11 +3551,11 @@ As always, hidden subdirs are not affected." ;; use subst instead of insdel because it does not move ;; the gap and thus should be faster and because ;; other characters are left alone automatically - (apply 'subst-char-in-region + (apply #'subst-char-in-region (point) (1+ (point)) - (if (eq ?\040 (following-char)) ; SPC - (list ?\040 dired-marker-char) - (list dired-marker-char ?\040)))) + (if (eq ?\s (following-char)) + (list ?\s dired-marker-char) + (list dired-marker-char ?\s)))) (forward-line 1))))) ;;; Commands to mark or flag files based on their characteristics or names. @@ -3562,7 +3586,7 @@ object files--just `.o' will mark more than you might think." (dired-get-filename nil t) t)) "\\'")))) 'dired-regexp-history) - (if current-prefix-arg ?\040))) + (if current-prefix-arg ?\s))) (let ((dired-marker-char (or marker-char dired-marker-char))) (dired-mark-if (and (not (looking-at-p dired-re-dot)) @@ -3585,7 +3609,7 @@ since it was last visited." (list (read-regexp (concat (if current-prefix-arg "Unmark" "Mark") " files containing (regexp): ") nil 'dired-regexp-history) - (if current-prefix-arg ?\040))) + (if current-prefix-arg ?\s))) (let ((dired-marker-char (or marker-char dired-marker-char))) (dired-mark-if (and (not (looking-at-p dired-re-dot)) @@ -3622,14 +3646,14 @@ The match is against the non-directory part of the filename. Use `^' "Mark all symbolic links. With prefix argument, unmark or unflag all those files." (interactive "P") - (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))) + (let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (dired-mark-if (looking-at-p dired-re-sym) "symbolic link"))) (defun dired-mark-directories (unflag-p) "Mark all directory file lines except `.' and `..'. With prefix argument, unmark or unflag all those files." (interactive "P") - (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))) + (let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (dired-mark-if (and (looking-at-p dired-re-dir) (not (looking-at-p dired-re-dot))) "directory file"))) @@ -3638,7 +3662,7 @@ With prefix argument, unmark or unflag all those files." "Mark all executable files. With prefix argument, unmark or unflag all those files." (interactive "P") - (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))) + (let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (dired-mark-if (looking-at-p dired-re-exe) "executable file"))) ;; dired-x.el has a dired-mark-sexp interactive command: mark @@ -3648,7 +3672,7 @@ With prefix argument, unmark or unflag all those files." "Flag for deletion files whose names suggest they are auto save files. A prefix argument says to unmark or unflag those files instead." (interactive "P") - (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker))) + (let ((dired-marker-char (if unflag-p ?\s dired-del-marker))) (dired-mark-if ;; It is less than general to check for # here, ;; but it's the only way this runs fast enough. @@ -3887,7 +3911,7 @@ The idea is to set this buffer-locally in special Dired buffers.") (force-mode-line-update))) (define-obsolete-function-alias 'dired-sort-set-modeline - 'dired-sort-set-mode-line "24.3") + #'dired-sort-set-mode-line "24.3") (defun dired-sort-toggle-or-edit (&optional arg) "Toggle sorting by date, and refresh the Dired buffer. @@ -4129,7 +4153,7 @@ Ask means pop up a menu for the user to select one of copy, move or link." (dired dired-dir) ;; The following elements of `misc-data' are the keys ;; from `dired-subdir-alist'. - (mapc 'dired-maybe-insert-subdir (cdr misc-data)) + (mapc #'dired-maybe-insert-subdir (cdr misc-data)) (current-buffer)) (message "Desktop: Directory %s no longer exists." dir) (when desktop-missing-file-warning (sit-for 1)) commit 2f50a990b756a0b3477455e28abc0dbd8d33a27e Author: Stefan Monnier Date: Sun Mar 17 12:16:59 2019 -0400 * doc/lispref/display.texi (Selective Display): Declare it deprecated diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index c4cb83977f..be934de5ee 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1034,8 +1034,8 @@ hiding certain lines on the screen. @cindex explicit selective display The first variant, explicit selective display, was designed for use in a Lisp program: it controls which lines are hidden by altering the text. This kind of -hiding is now obsolete; instead you can get the same effect with the -@code{invisible} property (@pxref{Invisible Text}). +hiding is now obsolete and deprecated; instead you should use the +@code{invisible} property (@pxref{Invisible Text}) to get the same effect. In the second variant, the choice of lines to hide is made automatically based on indentation. This variant is designed to be a commit 03a9a75c5b8bfb5187bffdcca2d52419ef5f950a Author: Eli Zaretskii Date: Sun Mar 17 17:49:37 2019 +0200 Fix 'define-charset' after dumping with pdumper * src/charset.h: * src/charset.c (charset_table_used): Now static. (charset_table_size): Now extern. * src/pdumper.c (dump_charset_table): Dump the entire charset_table, not just its used slots. (Bug#34826) diff --git a/src/charset.c b/src/charset.c index 56ab8d7018..c0700f972e 100644 --- a/src/charset.c +++ b/src/charset.c @@ -62,8 +62,8 @@ Lisp_Object Vcharset_hash_table; /* Table of struct charset. */ struct charset *charset_table; -static int charset_table_size; -int charset_table_used; +int charset_table_size; +static int charset_table_used; /* Special charsets corresponding to symbols. */ int charset_ascii; diff --git a/src/charset.h b/src/charset.h index ee697b8d3e..7042a71a46 100644 --- a/src/charset.h +++ b/src/charset.h @@ -248,7 +248,7 @@ extern Lisp_Object Vcharset_hash_table; /* Table of struct charset. */ extern struct charset *charset_table; -extern int charset_table_used; +extern int charset_table_size; #define CHARSET_FROM_ID(id) (charset_table + (id)) diff --git a/src/pdumper.c b/src/pdumper.c index 56ac531363..92e19497e5 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -3212,7 +3212,11 @@ dump_charset_table (struct dump_context *ctx) ctx->flags.pack_objects = true; dump_align_output (ctx, DUMP_ALIGNMENT); dump_off offset = ctx->offset; - for (int i = 0; i < charset_table_used; ++i) + /* We are dumping the entire table, not just the used slots, because + otherwise when we restore from the pdump file, the actual size of + the table will be smaller than charset_table_size, and we will + crash if/when a new charset is defined. */ + for (int i = 0; i < charset_table_size; ++i) dump_charset (ctx, i); dump_emacs_reloc_to_dump_ptr_raw (ctx, &charset_table, offset); ctx->flags = old_flags; commit 3320fe2deeba6dcc40e934e8a03bef4945c86aff Author: Stefan Monnier Date: Sat Mar 16 20:11:45 2019 -0400 * lisp/subr.el (combine-change-calls-1): Don't combine syntax-ppss flushes diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el index 11cab1d693..d09d6c1225 100644 --- a/lisp/emacs-lisp/syntax.el +++ b/lisp/emacs-lisp/syntax.el @@ -533,6 +533,11 @@ running the hook." ;; Setup the before-change function if necessary. (unless (or ppss-cache ppss-last) + ;; We should be either the very last function on + ;; before-change-functions or the very first on + ;; after-change-functions. + ;; Note: combine-change-calls-1 needs to be kept in sync + ;; with this! (add-hook 'before-change-functions 'syntax-ppss-flush-cache t t)) diff --git a/lisp/subr.el b/lisp/subr.el index 4024c68e68..6c0ad00afa 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3686,7 +3686,7 @@ the specified region. It must not change `before-change-functions' or `after-change-functions'. Additionally, the buffer modifications of BODY are recorded on -the buffer's undo list as a single \(apply ...) entry containing +the buffer's undo list as a single (apply ...) entry containing the function `undo--wrap-and-run-primitive-undo'." (let ((old-bul buffer-undo-list) (end-marker (copy-marker end t)) @@ -3699,7 +3699,14 @@ the function `undo--wrap-and-run-primitive-undo'." (if (eq buffer-undo-list t) (setq result (funcall body)) (let (;; (inhibit-modification-hooks t) - before-change-functions after-change-functions) + (before-change-functions + ;; Ugly Hack: if the body uses syntax-ppss/syntax-propertize + ;; (e.g. via a regexp-search or sexp-movement trigerring + ;; on-the-fly syntax-propertize), make sure that this gets + ;; properly refreshed after subsequent changes. + (if (memq #'syntax-ppss-flush-cache before-change-functions) + '(syntax-ppss-flush-cache))) + after-change-functions) (setq result (funcall body))) (let ((ap-elt (list 'apply commit cc06d76865a7a98b5fd4edd03a044f2baefb85a9 Author: Alexander Gramiak Date: Sat Mar 16 11:46:39 2019 -0600 Define macros to abstract support for external menu/tool-bars * src/lisp.h (HAVE_EXT_MENU_BAR) (HAVE_EXT_TOOL_BAR): Define. *src/dispnew.c: *src/frame.c: *src/frame.h: *src/keyboard.c: *src/menu.c: *src/menu.h: *src/window.c: *src/window.h: *src/xdisp.c: *src/xfns: Use the new macros. diff --git a/src/dispnew.c b/src/dispnew.c index 7596528fed..ccb08ec1b9 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -767,7 +767,7 @@ clear_current_matrices (register struct frame *f) clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix); #endif -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* Clear the matrix of the tool-bar window, if any. */ if (WINDOWP (f->tool_bar_window)) clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix); @@ -792,7 +792,7 @@ clear_desired_matrices (register struct frame *f) clear_glyph_matrix (XWINDOW (f->menu_bar_window)->desired_matrix); #endif -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) if (WINDOWP (f->tool_bar_window)) clear_glyph_matrix (XWINDOW (f->tool_bar_window)->desired_matrix); #endif @@ -2106,7 +2106,7 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f) } #endif -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) { /* Allocate/ reallocate matrices of the tool bar window. If we don't have a tool bar window yet, make one. */ @@ -2188,7 +2188,7 @@ free_glyphs (struct frame *f) } #endif -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* Free the tool bar window and its glyph matrices. */ if (!NILP (f->tool_bar_window)) { @@ -3082,7 +3082,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p) update_window (XWINDOW (f->menu_bar_window), true); #endif -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* Update the tool-bar window, if present. */ if (WINDOWP (f->tool_bar_window)) { diff --git a/src/frame.c b/src/frame.c index 46bdf22231..d0c77149ba 100644 --- a/src/frame.c +++ b/src/frame.c @@ -70,7 +70,7 @@ static struct frame *last_nonminibuf_frame; bool frame_garbaged; /* The default tool bar height for future frames. */ -#if defined USE_GTK || defined HAVE_NS +#ifdef HAVE_EXT_TOOL_BAR enum { frame_default_tool_bar_height = 0 }; #else int frame_default_tool_bar_height; @@ -712,7 +712,7 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit, if ((FRAME_TERMCAP_P (f) && !pretend) || FRAME_MSDOS_P (f)) FrameCols (FRAME_TTY (f)) = new_cols; -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) if (WINDOWP (f->tool_bar_window)) { XWINDOW (f->tool_bar_window)->pixel_width = new_windows_width; @@ -848,7 +848,7 @@ make_frame (bool mini_p) f->no_accept_focus = false; f->z_group = z_group_none; f->tooltip = false; -#if ! defined (USE_GTK) && ! defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR f->last_tool_bar_item = -1; #endif #ifdef NS_IMPL_COCOA diff --git a/src/frame.h b/src/frame.h index 5bac24b077..ed62e7ace0 100644 --- a/src/frame.h +++ b/src/frame.h @@ -181,7 +181,7 @@ struct frame Lisp_Object menu_bar_window; #endif -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* A window used to display the tool-bar of a frame. */ Lisp_Object tool_bar_window; @@ -209,7 +209,7 @@ struct frame /* Cache of realized faces. */ struct face_cache *face_cache; -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* Tool-bar item index of the item on which a mouse button was pressed. */ int last_tool_bar_item; #endif @@ -257,13 +257,13 @@ struct frame /* Set to true when current redisplay has updated frame. */ bool_bf updated_p : 1; -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* Set to true to minimize tool-bar height even when auto-resize-tool-bar is set to grow-only. */ bool_bf minimize_tool_bar_window_p : 1; #endif -#if defined (USE_GTK) || defined (HAVE_NS) +#ifdef HAVE_EXT_TOOL_BAR /* True means using a tool bar that comes from the toolkit. */ bool_bf external_tool_bar : 1; #endif @@ -278,9 +278,8 @@ struct frame /* True if it needs to be redisplayed. */ bool_bf redisplay : 1; -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) - /* True means using a menu bar that comes from the X toolkit. */ +#ifdef HAVE_EXT_MENU_BAR + /* True means using a menu bar that comes from the toolkit. */ bool_bf external_menu_bar : 1; #endif @@ -714,7 +713,7 @@ fset_tool_bar_position (struct frame *f, Lisp_Object val) f->tool_bar_position = val; } #endif /* USE_GTK */ -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) INLINE void fset_tool_bar_window (struct frame *f, Lisp_Object val) { @@ -882,7 +881,7 @@ default_pixels_per_inch_y (void) /* True if this frame should display a tool bar in a way that does not use any text lines. */ -#if defined (USE_GTK) || defined (HAVE_NS) +#ifdef HAVE_EXT_TOOL_BAR #define FRAME_EXTERNAL_TOOL_BAR(f) (f)->external_tool_bar #else #define FRAME_EXTERNAL_TOOL_BAR(f) false @@ -911,8 +910,7 @@ default_pixels_per_inch_y (void) /* True if this frame should display a menu bar in a way that does not use any text lines. */ -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR #define FRAME_EXTERNAL_MENU_BAR(f) (f)->external_menu_bar #else #define FRAME_EXTERNAL_MENU_BAR(f) false @@ -1258,7 +1256,7 @@ SET_FRAME_VISIBLE (struct frame *f, int v) extern Lisp_Object selected_frame; extern Lisp_Object old_selected_frame; -#if ! (defined USE_GTK || defined HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR extern int frame_default_tool_bar_height; #endif diff --git a/src/keyboard.c b/src/keyboard.c index 760cd623f6..22e4377ee8 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3869,8 +3869,7 @@ kbd_buffer_get_event (KBOARD **kbp, } break; -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR case MENU_BAR_ACTIVATE_EVENT: { kbd_fetch_ptr = next_kbd_event (event); @@ -3950,8 +3949,7 @@ kbd_buffer_get_event (KBOARD **kbp, { obj = make_lispy_event (&event->ie); -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR /* If this was a menu selection, then set the flag to inhibit writing to last_nonmenu_event. Don't do this if the event we're returning is (menu-bar), though; that indicates the @@ -5232,7 +5230,7 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, static bool toolkit_menubar_in_use (struct frame *f) { -#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || defined (HAVE_NTGUI) +#ifdef HAVE_EXT_MENU_BAR return !(!FRAME_WINDOW_P (f)); #else return false; @@ -5925,8 +5923,7 @@ make_lispy_event (struct input_event *event) return list3 (head, position, files); } -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR case MENU_BAR_EVENT: if (EQ (event->arg, event->frame_or_window)) /* This is the prefix key. We translate this to @@ -8136,7 +8133,7 @@ parse_tool_bar_item (Lisp_Object key, Lisp_Object item) if (menu_separator_name_p (SSDATA (caption))) { set_prop (TOOL_BAR_ITEM_TYPE, Qt); -#if !defined (USE_GTK) && !defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR /* If we use build_desired_tool_bar_string to render the tool bar, the separator is rendered as an image. */ set_prop (TOOL_BAR_ITEM_IMAGES, diff --git a/src/lisp.h b/src/lisp.h index 4391e17374..cb142b9d8a 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3327,6 +3327,17 @@ extern int staticidx; struct window; struct frame; +/* Define if the windowing system provides a menu bar. */ +#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) || defined (USE_GTK) +#define HAVE_EXT_MENU_BAR true +#endif + +/* Define if the windowing system provides a tool-bar. */ +#if defined (USE_GTK) || defined (HAVE_NS) +#define HAVE_EXT_TOOL_BAR true +#endif + /* Copy COUNT Lisp_Objects from ARGS to contents of V starting from OFFSET. */ INLINE void diff --git a/src/menu.c b/src/menu.c index 7d255fddac..7f46e68e73 100644 --- a/src/menu.c +++ b/src/menu.c @@ -170,8 +170,7 @@ ensure_menu_items (int items) } } -#if (defined USE_X_TOOLKIT || defined USE_GTK || defined HAVE_NS \ - || defined HAVE_NTGUI) +#ifdef HAVE_EXT_MENU_BAR /* Begin a submenu. */ @@ -195,7 +194,7 @@ push_submenu_end (void) menu_items_submenu_depth--; } -#endif /* USE_X_TOOLKIT || USE_GTK || HAVE_NS || defined HAVE_NTGUI */ +#endif /* HAVE_EXT_MENU_BAR */ /* Indicate boundary between left and right. */ diff --git a/src/menu.h b/src/menu.h index d425cdf010..0321c27454 100644 --- a/src/menu.h +++ b/src/menu.h @@ -35,8 +35,7 @@ extern void discard_menu_items (void); extern void save_menu_items (void); extern bool parse_single_submenu (Lisp_Object, Lisp_Object, Lisp_Object); extern void list_of_panes (Lisp_Object); -#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) +#ifdef HAVE_EXT_MENU_BAR extern void free_menubar_widget_value_tree (widget_value *); extern void update_submenu_strings (widget_value *); extern void find_and_call_menu_selection (struct frame *, int, diff --git a/src/window.c b/src/window.c index ae039b76ad..85d7bcade9 100644 --- a/src/window.c +++ b/src/window.c @@ -1599,7 +1599,7 @@ window_from_coordinates (struct frame *f, int x, int y, cw.window = &window, cw.x = x, cw.y = y; cw.part = part; foreach_window (f, check_window_containing, &cw); -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* If not found above, see if it's in the tool bar window, if a tool bar exists. */ if (NILP (window) @@ -6398,7 +6398,7 @@ and redisplay normally--don't erase and redraw the frame. */) /* Invalidate pixel data calculated for all compositions. */ for (i = 0; i < n_compositions; i++) composition_table[i]->font = NULL; -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) WINDOW_XFRAME (w)->minimize_tool_bar_window_p = 1; #endif Fredraw_frame (WINDOW_FRAME (w)); diff --git a/src/window.h b/src/window.h index b450173eb2..4235a6eade 100644 --- a/src/window.h +++ b/src/window.h @@ -739,7 +739,7 @@ wset_next_buffers (struct window *w, Lisp_Object val) #endif /* True if W is a tool bar window. */ -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) #define WINDOW_TOOL_BAR_P(W) \ (WINDOWP (WINDOW_XFRAME (W)->tool_bar_window) \ && (W) == XWINDOW (WINDOW_XFRAME (W)->tool_bar_window)) diff --git a/src/xdisp.c b/src/xdisp.c index 5ae8fc1cf6..3172b3be89 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -12237,8 +12237,7 @@ update_menu_bar (struct frame *f, bool save_match_data, bool hooks_run) if (FRAME_WINDOW_P (f) ? -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR FRAME_EXTERNAL_MENU_BAR (f) #else FRAME_MENU_BAR_LINES (f) > 0 @@ -12291,8 +12290,7 @@ update_menu_bar (struct frame *f, bool save_match_data, bool hooks_run) fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f))); /* Redisplay the menu bar in case we changed it. */ -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR if (FRAME_WINDOW_P (f)) { #if defined (HAVE_NS) @@ -12306,11 +12304,11 @@ update_menu_bar (struct frame *f, bool save_match_data, bool hooks_run) /* On a terminal screen, the menu bar is an ordinary screen line, and this makes it get updated. */ w->update_mode_line = true; -#else /* ! (USE_X_TOOLKIT || HAVE_NTGUI || HAVE_NS || USE_GTK) */ +#else /* ! (HAVE_EXT_MENU_BAR) */ /* In the non-toolkit version, the menu bar is an ordinary screen line, and this makes it get updated. */ w->update_mode_line = true; -#endif /* ! (USE_X_TOOLKIT || HAVE_NTGUI || HAVE_NS || USE_GTK) */ +#endif /* HAVE_EXT_MENU_BAR */ unbind_to (count, Qnil); set_buffer_internal_1 (prev); @@ -12348,7 +12346,7 @@ fast_set_selected_frame (Lisp_Object frame) static void update_tool_bar (struct frame *f, bool save_match_data) { -#if defined (USE_GTK) || defined (HAVE_NS) +#ifdef HAVE_EXT_TOOL_BAR bool do_update = FRAME_EXTERNAL_TOOL_BAR (f); #else bool do_update = (WINDOWP (f->tool_bar_window) @@ -12433,7 +12431,7 @@ update_tool_bar (struct frame *f, bool save_match_data) } } -#if ! defined (USE_GTK) && ! defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR /* Set F->desired_tool_bar_string to a Lisp string representing frame F's desired tool-bar contents. F->tool_bar_items must have @@ -12768,7 +12766,7 @@ tool_bar_height (struct frame *f, int *n_rows, bool pixelwise) return (it.current_y + FRAME_LINE_HEIGHT (f) - 1) / FRAME_LINE_HEIGHT (f); } -#endif /* !USE_GTK && !HAVE_NS */ +#endif /* ! (HAVE_EXT_TOOL_BAR) */ DEFUN ("tool-bar-height", Ftool_bar_height, Stool_bar_height, 0, 2, 0, @@ -12779,7 +12777,7 @@ PIXELWISE non-nil means return the height of the tool bar in pixels. */) { int height = 0; -#if ! defined (USE_GTK) && ! defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR struct frame *f = decode_any_frame (frame); if (WINDOWP (f->tool_bar_window) @@ -12804,13 +12802,13 @@ static bool redisplay_tool_bar (struct frame *f) { f->tool_bar_redisplayed = true; -#if defined (USE_GTK) || defined (HAVE_NS) +#ifdef HAVE_EXT_TOOL_BAR if (FRAME_EXTERNAL_TOOL_BAR (f)) update_frame_tool_bar (f); return false; -#else /* !USE_GTK && !HAVE_NS */ +#else /* ! (HAVE_EXT_TOOL_BAR) */ struct window *w; struct it it; @@ -12959,10 +12957,10 @@ redisplay_tool_bar (struct frame *f) f->minimize_tool_bar_window_p = false; return false; -#endif /* USE_GTK || HAVE_NS */ +#endif /* HAVE_EXT_TOOL_BAR */ } -#if ! defined (USE_GTK) && ! defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR /* Get information about the tool-bar item which is displayed in GLYPH on frame F. Return in *PROP_IDX the index where tool-bar item @@ -13200,7 +13198,7 @@ note_tool_bar_highlight (struct frame *f, int x, int y) help_echo_string = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_CAPTION); } -#endif /* !USE_GTK && !HAVE_NS */ +#endif /* ! (HAVE_EXT_TOOL_BAR) */ #endif /* HAVE_WINDOW_SYSTEM */ @@ -17658,8 +17656,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p) if (FRAME_WINDOW_P (f)) { -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ - || defined (HAVE_NS) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR redisplay_menu_p = FRAME_EXTERNAL_MENU_BAR (f); #else redisplay_menu_p = FRAME_MENU_BAR_LINES (f) > 0; @@ -17674,7 +17671,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p) #ifdef HAVE_WINDOW_SYSTEM if (FRAME_WINDOW_P (f)) { -#if defined (USE_GTK) || defined (HAVE_NS) +#ifdef HAVE_EXT_TOOL_BAR if (FRAME_EXTERNAL_TOOL_BAR (f)) redisplay_tool_bar (f); #else @@ -19709,7 +19706,7 @@ If there's no tool-bar, or if the tool-bar is not drawn by Emacs, do nothing. */) (Lisp_Object row, Lisp_Object glyphs) { -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) struct frame *sf = SELECTED_FRAME (); struct glyph_matrix *m = XWINDOW (sf->tool_bar_window)->current_matrix; EMACS_INT vpos; @@ -20335,7 +20332,7 @@ extend_face_to_end_of_line (struct it *it) /* Mode line and the header line don't have margins, and likewise the frame's tool-bar window, if there is any. */ if (!(it->glyph_row->mode_line_p -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) || (WINDOWP (f->tool_bar_window) && it->w == XWINDOW (f->tool_bar_window)) #endif @@ -30020,7 +30017,7 @@ show_mouse_face (Mouse_HLInfo *hlinfo, enum draw_glyphs_face draw) /* Change the mouse cursor. */ if (FRAME_WINDOW_P (f) && NILP (do_mouse_tracking)) { -#if ! defined (USE_GTK) && ! defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR if (draw == DRAW_NORMAL_TEXT && !EQ (hlinfo->mouse_face_window, f->tool_bar_window)) FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor); @@ -31422,7 +31419,7 @@ note_mouse_highlight (struct frame *f, int x, int y) w = XWINDOW (window); frame_to_window_pixel_xy (w, &x, &y); -#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR) /* Handle tool-bar window differently since it doesn't display a buffer. */ if (EQ (window, f->tool_bar_window)) @@ -32447,7 +32444,7 @@ expose_frame (struct frame *f, int x, int y, int w, int h) TRACE ((stderr, "(%d, %d, %d, %d)\n", r.x, r.y, r.width, r.height)); mouse_face_overwritten_p = expose_window_tree (XWINDOW (f->root_window), &r); -#if ! defined (USE_GTK) && ! defined (HAVE_NS) +#ifndef HAVE_EXT_TOOL_BAR if (WINDOWP (f->tool_bar_window)) mouse_face_overwritten_p |= expose_window (XWINDOW (f->tool_bar_window), &r); diff --git a/src/xfns.c b/src/xfns.c index a627b7e19e..f238a3daa1 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5132,7 +5132,7 @@ frame_geometry (Lisp_Object frame, Lisp_Object attribute) inner_right = native_right - internal_border_width; inner_bottom = native_bottom - internal_border_width; -#if defined (USE_X_TOOLKIT) || defined (USE_GTK) +#ifdef HAVE_EXT_MENU_BAR menu_bar_external = true; menu_bar_height = FRAME_MENUBAR_HEIGHT (f); native_top += menu_bar_height; @@ -5143,7 +5143,7 @@ frame_geometry (Lisp_Object frame, Lisp_Object attribute) #endif menu_bar_width = menu_bar_height ? native_width : 0; -#if defined (USE_GTK) +#ifdef HAVE_EXT_TOOL_BAR tool_bar_external = true; if (EQ (FRAME_TOOL_BAR_POSITION (f), Qleft)) { commit 7d8fe1f9f66110b23972869496e2000e9c35bb6d Author: Paul Eggert Date: Sat Mar 16 11:38:36 2019 -0700 Fix regexp typo in vc-git--program-version * lisp/vc/vc-git.el (vc-git--program-version): Require a period after ".windows", instead of allowing any char. diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index c990b0659d..6b8ed7e2c1 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -253,7 +253,7 @@ The following place holders should be present in the string: ;; Git for Windows appends ".windows.N" to the ;; numerical version reported by Git. (string-match - "git version \\([0-9.]+\\)\\(\\.windows.[0-9]+\\)?$" + "git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$" version-string)) (match-string 1 version-string) "0"))))) commit 8832cc5f91a420db6bea65f381a3fb3597eb7523 Author: Mattias Engdegård Date: Sat Mar 16 11:36:38 2019 -0700 Fix some ineffective backslashes in string literals Deal with lone backslashes that have no effect in string literals, but indicate that something is amiss. * lisp/auth-source-pass.el (auth-source-pass-entries): * lisp/textmodes/artist.el (artist-figlet-get-font-list-windows): * lisp/org/ob-abc.el (org-babel-expand-body:abc, org-babel-execute:abc): * lisp/org/ob-forth.el (org-babel-forth-session-execute): * lisp/vc/vc-git.el (vc-git--program-version): Add backslash in regexp for correctness. * lisp/gnus/nnmail.el (nnmail-split-abbrev-alist): Replace `\||' with `\\|' to follow the obvious regexp intent. * lisp/org/org-list.el (org-plain-list-ordered-item-terminator): Add backslash in doc comment so that it appears as intended. * lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1, c-end-of-decl-1): * lisp/progmodes/f90.el (f90-font-lock-keywords-2): * lisp/progmodes/etags.el (etags-tags-completion-table): * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): * test/lisp/emacs-lisp/cl-print-tests.el (cl-print-tests-1): Remove superfluous backslashes from regexp. * test/lisp/emacs-lisp/rx-tests.el (rx-char-any): Remove superfluous backslash from doc comment. diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el index e37cadb07c..deb805a6e1 100644 --- a/lisp/auth-source-pass.el +++ b/lisp/auth-source-pass.el @@ -189,7 +189,7 @@ often." (let ((store-dir (expand-file-name "~/.password-store/"))) (mapcar (lambda (file) (file-name-sans-extension (file-relative-name file store-dir))) - (directory-files-recursively store-dir "\.gpg$")))) + (directory-files-recursively store-dir "\\.gpg$")))) (defun auth-source-pass--find-all-by-entry-name (entryname user) "Search the store for all entries either matching ENTRYNAME/USER or ENTRYNAME. diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el index f6d7525293..a95cdb4a4f 100644 --- a/lisp/gnus/nnmail.el +++ b/lisp/gnus/nnmail.el @@ -489,7 +489,7 @@ Example: (from . "from\\|sender\\|resent-from") (nato . "to\\|cc\\|resent-to\\|resent-cc") (naany . "from\\|to\\|cc\\|sender\\|resent-from\\|resent-to\\|resent-cc") - (list . "list-id\\|list-post\\|x-mailing-list\||x-beenthere\\|x-loop")) + (list . "list-id\\|list-post\\|x-mailing-list\\|x-beenthere\\|x-loop")) "Alist of abbreviations allowed in `nnmail-split-fancy'." :group 'nnmail-split :type '(repeat (cons :format "%v" symbol regexp))) diff --git a/lisp/org/ob-abc.el b/lisp/org/ob-abc.el index cefbe716e1..43ee1d9921 100644 --- a/lisp/org/ob-abc.el +++ b/lisp/org/ob-abc.el @@ -47,7 +47,7 @@ (value (cdr pair))) (setq body (replace-regexp-in-string - (concat "\$" (regexp-quote name)) + (concat "\\$" (regexp-quote name)) (if (stringp value) value (format "%S" value)) body)))) vars) @@ -59,7 +59,7 @@ (message "executing Abc source code block") (let* ((cmdline (cdr (assq :cmdline params))) (out-file (let ((file (cdr (assq :file params)))) - (if file (replace-regexp-in-string "\.pdf$" ".ps" file) + (if file (replace-regexp-in-string "\\.pdf$" ".ps" file) (error "abc code block requires :file header argument")))) (in-file (org-babel-temp-file "abc-")) (render (concat "abcm2ps" " " cmdline diff --git a/lisp/org/ob-forth.el b/lisp/org/ob-forth.el index 8ca292656a..88ed964fd7 100644 --- a/lisp/org/ob-forth.el +++ b/lisp/org/ob-forth.el @@ -53,7 +53,7 @@ This function is called by `org-babel-execute-src-block'" (defun org-babel-forth-session-execute (body params) (require 'forth-mode) (let ((proc (forth-proc)) - (rx " \\(\n:\\|compiled\n\\\|ok\n\\)") + (rx " \\(\n:\\|compiled\n\\|ok\n\\)") (result-start)) (with-current-buffer (process-buffer (forth-proc)) (mapcar (lambda (line) diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el index ef85b402f0..22692d224a 100644 --- a/lisp/org/org-list.el +++ b/lisp/org/org-list.el @@ -236,7 +236,7 @@ into (defcustom org-plain-list-ordered-item-terminator t "The character that makes a line with leading number an ordered list item. -Valid values are ?. and ?\). To get both terminators, use t. +Valid values are ?. and ?\\). To get both terminators, use t. This variable needs to be set before org.el is loaded. If you need to make a change while Emacs is running, use the customize diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index fd66928099..cc3753a7eb 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -8968,7 +8968,7 @@ This function might do hidden buffer changes." (setq at-decl-end (looking-at (cond ((eq context '<>) "[,>]") - ((not (memq context '(nil top))) "[,\)]") + ((not (memq context '(nil top))) "[,)]") (t "[,;]")))) ;; Now we've collected info about various characteristics of @@ -10321,7 +10321,7 @@ comment at the start of cc-engine.el for more info." ;; Check for `c-opt-block-decls-with-vars-key' ;; before the first paren. (c-syntactic-re-search-forward - (concat "[;=\(\[{]\\|\\(" + (concat "[;=([{]\\|\\(" c-opt-block-decls-with-vars-key "\\)") lim t t t) @@ -10329,7 +10329,7 @@ comment at the start of cc-engine.el for more info." (not (eq (char-before) ?_)) ;; Check that the first following paren is ;; the block. - (c-syntactic-re-search-forward "[;=\(\[{]" + (c-syntactic-re-search-forward "[;=([{]" lim t t t) (eq (char-before) ?{)))))) ;; The declaration doesn't have any of the diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index c2715be537..910c320ab8 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -1281,7 +1281,7 @@ buffer-local values of tags table format variables." ;; This regexp matches an explicit tag name or the place where ;; it would start. (while (re-search-forward - "[\f\t\n\r()=,; ]?\177\\\(?:\\([^\n\001]+\\)\001\\)?" + "[\f\t\n\r()=,; ]?\177\\(?:\\([^\n\001]+\\)\001\\)?" nil t) (push (prog1 (if (match-beginning 1) ;; There is an explicit tag name. diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index 3ec145b547..9de80635e9 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el @@ -648,7 +648,7 @@ forall\\|block\\|critical\\)\\)\\_>" \\|enumerator\\|procedure\\|\ logical\\|double[ \t]*precision\\|type[ \t]*(\\(?:\\sw\\|\\s_\\)+)\\|none\\)[ \t]*" (1 font-lock-keyword-face) (2 font-lock-type-face)) - '("\\_<\\(namelist\\|common\\)[ \t]*/\\(\\(?:\\sw\\|\\s_\\)+\\)?\/" + '("\\_<\\(namelist\\|common\\)[ \t]*/\\(\\(?:\\sw\\|\\s_\\)+\\)?/" (1 font-lock-keyword-face) (2 font-lock-constant-face nil t)) "\\_" '("\\(&\\)[ \t]*\\(!\\|$\\)" (1 font-lock-keyword-face)) diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 707875d130..5998ac8e39 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1867,7 +1867,7 @@ It will be properly highlighted even when the call omits parens.") ("^[ \t]*def +\\(`\\)" (1 "_")) ;; Ternary operator colon followed by opening paren or bracket ;; (semi-important for indentation). - ("\\(:\\)\\(?:[\({]\\|\\[[^]]\\)" + ("\\(:\\)\\(?:[({]\\|\\[[^]]\\)" (1 (string-to-syntax "."))) ;; Regular expressions. Start with matching unescaped slash. ("\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*\\(/\\)" diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index d75a1ca2f9..e9b17795a9 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -2895,7 +2895,7 @@ Returns a list of strings." dir-list) (mapcar (lambda (file) - (replace-regexp-in-string "\.flf\\'" "" file)) + (replace-regexp-in-string "\\.flf\\'" "" file)) result)))) (defun artist-figlet-choose-font () diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index c6806ba5cd..c990b0659d 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -253,7 +253,7 @@ The following place holders should be present in the string: ;; Git for Windows appends ".windows.N" to the ;; numerical version reported by Git. (string-match - "git version \\([0-9.]+\\)\\(\.windows.[0-9]+\\)?$" + "git version \\([0-9.]+\\)\\(\\.windows.[0-9]+\\)?$" version-string)) (match-string 1 version-string) "0"))))) diff --git a/test/lisp/emacs-lisp/cl-print-tests.el b/test/lisp/emacs-lisp/cl-print-tests.el index e163fb8a8d..406c528dce 100644 --- a/test/lisp/emacs-lisp/cl-print-tests.el +++ b/test/lisp/emacs-lisp/cl-print-tests.el @@ -34,7 +34,7 @@ (let ((print-circle t)) (should (equal (cl-prin1-to-string `((x . ,x) (y . ,x))) "((x . #1=#s(cl-print--test :a 1 :b 2)) (y . #1#))"))) - (should (string-match "\\`#f(compiled-function (x) \"[^\"]+\" [^\)]*)\\'" + (should (string-match "\\`#f(compiled-function (x) \"[^\"]+\" [^)]*)\\'" (cl-prin1-to-string (symbol-function #'caar)))))) (ert-deftest cl-print-tests-2 () diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index fa3d9b0d5e..7dd5e3b8de 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -25,7 +25,7 @@ ;;; Code: (ert-deftest rx-char-any () - "Test character alternatives with `\]' and `-' (Bug#25123)." + "Test character alternatives with `]' and `-' (Bug#25123)." (should (string-match (rx string-start (1+ (char (?\] . ?\{) (?< . ?\]) (?- . ?:))) string-end) commit 34dd4e0a83e19882f61c9a2ac99ecc12632d13d4 Author: Eli Zaretskii Date: Sat Mar 16 13:59:03 2019 +0200 Improve locale and language environment setting at startup * lisp/international/mule-cmds.el (locale-language-names): Add more locales and their language environments. (set-locale-environment): Use w32-multibyte-code-page, if non-zero, as locale-coding-system. (Bug#34684) * src/w32fns.c (globals_of_w32fns) : New variable. * etc/NEWS: Mention w32-multibyte-code-page. diff --git a/etc/NEWS b/etc/NEWS index 000d211c1a..f25c3f5dc3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1736,6 +1736,14 @@ versions of MS-Windows. Set this variable to 50 if for some reason you need the old behavior (and please report such situations to Emacs developers). +--- +** New variable 'w32-multibyte-code-page'. +This variable holds the value of the multibyte code page used by the +system. It is usually zero, which indicates that 'w32-ansi-code-page' +is being used, except in Far Eastern locales. When this variable is +non-zero, Emacs at startup sets 'locale-coding-system' to the +corresponding encoding, instead of using 'w32-ansi-code-page'. + +++ ** On NS the behaviour of drag and drop can now be modified by use of modifier keys in line with Apples guidelines. This makes the drag and diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 3c1769a02f..5f87d89941 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -2181,22 +2181,27 @@ See `set-language-info-alist' for use in programs." (defconst locale-language-names (purecopy '( - ;; Locale names of the form LANGUAGE[_TERRITORY][.CODESET][@MODIFIER] - ;; as specified in the Single Unix Spec, Version 2. - ;; LANGUAGE is a language code taken from ISO 639:1988 (E/F) - ;; with additions from ISO 639/RA Newsletter No.1/1989; - ;; see Internet RFC 2165 (1997-06) and - ;; http://www.evertype.com/standards/iso639/iso639-en.html - ;; TERRITORY is a country code taken from ISO 3166 - ;; http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html. - ;; CODESET and MODIFIER are implementation-dependent. + ;; Locale names of the form LANGUAGE[_TERRITORY][.CODESET][@MODIFIER] + ;; as specified in the Single Unix Spec, Version 2. + ;; LANGUAGE is a language code taken from ISO 639:1988 (E/F) + ;; with additions from ISO 639/RA Newsletter No.1/1989; + ;; see Internet RFC 2165 (1997-06) and + ;; http://www.evertype.com/standards/iso639/iso639-en.html + ;; TERRITORY is a country code taken from ISO 3166 + ;; http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html. + ;; CODESET and MODIFIER are implementation-dependent. + + ;; Language names for which there are no locales (yet) are + ;; commented out. ;; jasonr comments: MS Windows uses three letter codes for ;; languages instead of the two letter ISO codes that POSIX - ;; uses. In most cases the first two letters are the same, so - ;; most of the regexps in locale-language-names work. Japanese - ;; and Chinese are exceptions, which are listed in the - ;; non-standard section at the bottom of locale-language-names. + ;; uses. In most cases the first two letters are the same, so + ;; most of the regexps in locale-language-names work. Japanese, + ;; Chinese, and some others are exceptions, which are listed in the + ;; non-standard section at the bottom of locale-language-names, or + ;; in the main section, if otherwise we would pick up the wrong + ;; entry (because the first matching entry is used). ("aa_DJ" . "Latin-1") ; Afar ("aa" . "UTF-8") @@ -2204,11 +2209,12 @@ See `set-language-info-alist' for use in programs." ("af" . "Latin-1") ; Afrikaans ("am" "Ethiopic" utf-8) ; Amharic ("an" . "Latin-9") ; Aragonese + ("arn" . "UTF-8") ; MS-Windows Mapudungun, Mapuche ("ar" . "Arabic") - ; as Assamese + ("as" . "UTF-8") ; Assamese ; ay Aymara ("az" . "UTF-8") ; Azerbaijani - ; ba Bashkir + ("ba" . "UTF-8") ; Bashkir, Cyrillic script ("be" "Belarusian" cp1251) ; Belarusian [Byelorussian until early 1990s] ("bg" "Bulgarian" cp1251) ; Bulgarian ; bh Bihari @@ -2219,12 +2225,12 @@ See `set-language-info-alist' for use in programs." ("bs" . "Latin-2") ; Bosnian ("byn" . "UTF-8") ; Bilin; Blin ("ca" "Catalan" iso-8859-1) ; Catalan - ; co Corsican + ("co" . "UTF-8") ; Corsican ("cs" "Czech" iso-8859-2) ("cy" "Welsh" iso-8859-14) ("da" . "Latin-1") ; Danish ("de" "German" iso-8859-1) - ; dv Divehi + ("dv" . "UTF-8") ; Divehi ; dz Bhutani ("ee" . "Latin-4") ; Ewe ("el" "Greek" iso-8859-7) @@ -2238,6 +2244,8 @@ See `set-language-info-alist' for use in programs." ("et" . "Latin-9") ; Estonian ("eu" . "Latin-1") ; Basque ("fa" "Persian" utf-8) ; Persian + ("fil" . "UTF-8") ; Filipino + ("fpo" . "UTF-8") ; MS-Windows Filipino ("fi" . "Latin-9") ; Finnish ("fj" . "Latin-1") ; Fiji ("fo" . "Latin-1") ; Faroese @@ -2246,6 +2254,7 @@ See `set-language-info-alist' for use in programs." ("ga" . "Latin-1") ; Irish Gaelic (new orthography) ("gd" . "Latin-9") ; Scots Gaelic ("gez" "Ethiopic" utf-8) ; Geez + ("gla" . "Latin-9") ; MS-Windows Scots Gaelic ("gl" . "Latin-1") ; Gallegan; Galician ; gn Guarani ("gu" "Gujarati" utf-8) ; Gujarati @@ -2256,27 +2265,33 @@ See `set-language-info-alist' for use in programs." ("hni_IN" . "UTF-8") ; Chhattisgarhi ("hr" "Croatian" iso-8859-2) ; Croatian ("hu" . "Latin-2") ; Hungarian - ; hy Armenian + ("hy" . "UTF-8") ; Armenian ; ia Interlingua ("id" . "Latin-1") ; Indonesian ; ie Interlingue - ; ik Inupiak + ("ig" . "UTF-8") ; Igbo (Nigeria) + ("ibo" . "UTF-8") ; MS-Windows Igbo + ; ik Inupiak, Inupiaq ("is" . "Latin-1") ; Icelandic ("it" "Italian" iso-8859-1) ; Italian ; iu Inuktitut ("iw" "Hebrew" iso-8859-8) ("ja" "Japanese" euc-jp) ; jw Javanese + ("kal" . "Latin-1") ; MS-Windows Greenlandic ("ka" "Georgian" georgian-ps) ; Georgian - ; kk Kazakh + ("kk" . "UTF-8") ; Kazakh ("kl" . "Latin-1") ; Greenlandic ("km" "Khmer" utf-8) ; Cambodian, Khmer + ("knk" "Devanagari" utf-8) ; MS-Windows Konkani + ("kok" "Devanagari" utf-8) ; Konkani ("kn" "Kannada" utf-8) ("ko" "Korean" euc-kr) ("ks" . "UTF-8") ; Kashmiri ; ku Kurdish ("kw" . "Latin-1") ; Cornish ("ky" . "UTF-8") ; Kirghiz + ("lao" "Lao" utf-8) ; MS-Windows Lao ("la" . "Latin-1") ; Latin ("lb" . "Latin-1") ; Luxemburgish ("lg" . "Latin-6") ; Ganda, a.k.a. Luganda @@ -2287,18 +2302,22 @@ See `set-language-info-alist' for use in programs." ; mg Malagasy ("mi" . "Latin-7") ; Maori ("mk" "Cyrillic-ISO" iso-8859-5) ; Macedonian + ("mlt" . "Latin-3") ; MS-Windows Maltese ("ml" "Malayalam" utf-8) ("mn" . "UTF-8") ; Mongolian - ; mo Moldavian + ; mo Moldavian (retired) + ("mri" . "Latin-7") ; MS-Windows Maori ("mr" "Devanagari" utf-8) ; Marathi ("ms" . "Latin-1") ; Malay ("mt" . "Latin-3") ; Maltese + ("mym" "Malayalam" utf-8) ; MS-Windows Malayalam ("my" "Burmese" utf-8) ; Burmese ; na Nauru ("nb" . "Latin-1") ; Norwegian ("ne" "Devanagari" utf-8) ; Nepali ("nl" "Dutch" iso-8859-1) ("nn" . "Latin-1") ; Norwegian Nynorsk + ("non" . "Latin-1") ; MS-Windows Norwegian Nynorsk ("no" . "Latin-1") ; Norwegian ("nr_ZA" . "UTF-8") ; South Ndebele ("nso_ZA" . "UTF-8") ; Pedi @@ -2308,7 +2327,8 @@ See `set-language-info-alist' for use in programs." ("or" "Oriya" utf-8) ("pa" "Punjabi" utf-8) ; Punjabi ("pl" "Polish" iso-8859-2) ; Polish - ; ps Pashto, Pushto + ("ps" . "UTF-8") ; Pashto, Pushto + ("pas" . "UTF-8") ; MS-Windows Pashto ("pt_BR" "Brazilian Portuguese" iso-8859-1) ; Brazilian Portuguese ("pt" . "Latin-1") ; Portuguese ; qu Quechua @@ -2318,7 +2338,7 @@ See `set-language-info-alist' for use in programs." ("ru_RU.koi8r" "Cyrillic-KOI8" koi8-r) ("ru_RU" "Russian" iso-8859-5) ("ru_UA" "Russian" koi8-u) - ; rw Kinyarwanda + ("rw" . "UTF-8") ; Kinyarwanda ("sa" . "Devanagari") ; Sanskrit ; sd Sindhi ("se" . "UTF-8") ; Northern Sami @@ -2339,6 +2359,7 @@ See `set-language-info-alist' for use in programs." ; su Sundanese ("sv" "Swedish" iso-8859-1) ; Swedish ("sw" . "Latin-1") ; Swahili + ("taj" "Tajik" koi8-t) ; MS-Windows Tajik w/Cyrillic script ("ta" "Tamil" utf-8) ("te" "Telugu" utf-8) ; Telugu ("tg" "Tajik" koi8-t) @@ -2348,15 +2369,17 @@ See `set-language-info-alist' for use in programs." ("th" "Thai" iso-8859-11) ("ti" "Ethiopic" utf-8) ; Tigrinya ("tig_ER" . "UTF-8") ; Tigre - ; tk Turkmen + ("tk" . "Latin-5") ; Turkmen + ("tuk" . "Latin-5") ; MS-Windows Turkmen ("tl" . "Latin-1") ; Tagalog ("tn" . "Latin-9") ; Setswana, Tswana ; to Tonga ("tr" "Turkish" iso-8859-9) + ("tsn" . "Latin-9") ; MS-Windows Tswana ("ts" . "Latin-1") ; Tsonga ("tt" . "UTF-8") ; Tatar ; tw Twi - ; ug Uighur + ("ug" . "UTF-8") ; Uighur ("uk" "Ukrainian" koi8-u) ("ur" . "UTF-8") ; Urdu ("uz_UZ@cyrillic" . "UTF-8"); Uzbek @@ -2365,10 +2388,10 @@ See `set-language-info-alist' for use in programs." ("vi" "Vietnamese" utf-8) ; vo Volapuk ("wa" . "Latin-1") ; Walloon - ; wo Wolof + ("wo" . "UTF-8") ; Wolof ("xh" . "Latin-1") ; Xhosa ("yi" . "Windows-1255") ; Yiddish - ; yo Yoruba + ("yo" . "UTF-8") ; Yoruba ; za Zhuang ("zh_HK" . "Chinese-Big5") ; zh_HK/BIG5-HKSCS \ @@ -2378,6 +2401,9 @@ See `set-language-info-alist' for use in programs." ("zh_CN.GB18030" "Chinese-GB18030") ("zh_CN.UTF-8" . "Chinese-GBK") ("zh_CN" . "Chinese-GB") + ("zhh" . "Chinese-Big5") ; MS-Windows Chinese (Hong Kong S.A.R.) + ("zhi" . "Chinese-GBK") ; MS-Windows Chinese (Singapore) + ("zhm" . "Chinese-Big5") ; MS-Windows Chinese (Macao S.A.R.) ("zh" . "Chinese-GB") ("zu" . "Latin-1") ; Zulu @@ -2395,12 +2421,23 @@ See `set-language-info-alist' for use in programs." ("sp" . "Cyrillic-ISO") ; Serbian (Cyrillic alphabet), e.g. X11R6.4 ("su" . "Latin-1") ; Finnish, e.g. Solaris 2.6 ("jp" . "Japanese") ; e.g. MS Windows - ("chs" . "Chinese-GBK") ; MS Windows Chinese Simplified - ("cht" . "Chinese-BIG5") ; MS Windows Chinese Traditional + ("chs" . "Chinese-GBK") ; MS Windows Chinese Simplified (PRC) + ("cht" . "Chinese-BIG5") ; MS Windows Chinese Traditional (Taiwan) ("gbz" . "UTF-8") ; MS Windows Dari Persian ("div" . "UTF-8") ; MS Windows Divehi (Maldives) ("wee" . "Latin-2") ; MS Windows Lower Sorbian ("wen" . "Latin-2") ; MS Windows Upper Sorbian + ("ind" . "Latin-1") ; MS-Windows Indonesian + ("sme" . "UTF-8") ; MS-Windows Northern Sami (Norway) + ("smf" . "UTF-8") ; MS-Windows Northern Sami (Sweden) + ("smg" . "ITF-8") ; MS-Windows Northern Sami (Finland) + ("kdi" "Kannada" utf-8) ; MS-Windows Kannada + ("mar" "Devanagari" utf-8) ; MS-Windows Marathi + ("khm" "Khmer" utf-8) ; MS-Windows Khmer + ("iri" . "Latin-1") ; MS-Windows Irish Gaelic + ; mwk MS-Windows Mohawk (Canada) + ("uig" . "UTF-8") ; MS-Windows Uighur + ("kin" . "UTF-8") ; MS-Windows Kinyarwanda )) "Alist of locale regexps vs the corresponding languages and coding systems. Each element has this form: @@ -2702,10 +2739,20 @@ See also `locale-charset-language-names', `locale-language-names', (output-coding (if noninteractive (intern (format "cp%d" (w32-get-console-output-codepage))) - code-page-coding))) - (when (coding-system-p code-page-coding) + code-page-coding)) + (multibyte-code-page-coding + (or (and (boundp 'w32-multibyte-code-page) + (not (zerop w32-multibyte-code-page)) + (intern (format "cp%d" w32-multibyte-code-page))) + code-page-coding)) + (locale-coding + (if noninteractive + code-page-coding + multibyte-code-page-coding))) + (when (and (coding-system-p code-page-coding) + (coding-system-p locale-coding)) (or output-coding (setq output-coding code-page-coding)) - (unless frame (setq locale-coding-system code-page-coding)) + (unless frame (setq locale-coding-system locale-coding)) (set-keyboard-coding-system code-page-coding frame) (set-terminal-coding-system output-coding frame) (setq default-file-name-coding-system ansi-code-page-coding)))) diff --git a/src/w32fns.c b/src/w32fns.c index 4f53d93d8b..1fbf32760d 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -48,6 +48,7 @@ along with GNU Emacs. If not, see . */ #ifdef WINDOWSNT #include +#include /* for _getmbcp */ #endif /* WINDOWSNT */ #if CYGWIN @@ -10908,6 +10909,15 @@ globals_of_w32fns (void) doc: /* The ANSI code page used by the system. */); w32_ansi_code_page = GetACP (); +#ifndef CYGWIN + DEFVAR_INT ("w32-multibyte-code-page", + w32_multibyte_code_page, + doc: /* The current multibyte code page used by the system. +A value of zero indicates that the single-byte code page is in use, +see `w32-ansi-code-page'. */); + w32_multibyte_code_page = _getmbcp (); +#endif + if (os_subtype == OS_NT) w32_unicode_gui = 1; else commit 164b78c714dd5300cc1e6f630dc596856486b432 Author: Paul Eggert Date: Fri Mar 15 18:31:31 2019 -0700 Bring back Emacs 26 compatibility to flymake.el * lisp/progmodes/flymake.el (flymake--schedule-timer-maybe): Revert to using seconds-to-time, since this file is part of ELPA and needs to work on Emacs 26 too. diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 7afcf7891d..830d700963 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1005,7 +1005,9 @@ Do it only if `flymake-no-changes-timeout' is non-nil." (setq flymake-timer (run-with-idle-timer - (encode-time flymake-no-changes-timeout) + ;; This can use encode-time instead of seconds-to-time, + ;; once we can assume Emacs 27 or later. + (seconds-to-time flymake-no-changes-timeout) nil (lambda (buffer) (when (buffer-live-p buffer) commit 0eeb8c5920640be7309e00c9dcba6b7a07f741c1 Author: Paul Eggert Date: Fri Mar 15 18:24:20 2019 -0700 Use bool for menu_items_inuse * src/menu.c (menu_items_inuse): Now bool, instead of a Lisp_Object that is always Qt or Qnil. All uses changed. diff --git a/src/keyboard.h b/src/keyboard.h index 0898c752ea..65c7402ddb 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -327,9 +327,9 @@ extern Lisp_Object item_properties; takes care of protecting all the data from GC. */ extern Lisp_Object menu_items; -/* If non-nil, means that the global vars defined here are already in use. +/* Whether the global vars defined here are already in use. Used to detect cases where we try to re-enter this non-reentrant code. */ -extern Lisp_Object menu_items_inuse; +extern bool menu_items_inuse; /* Number of slots currently allocated in menu_items. */ extern int menu_items_allocated; diff --git a/src/menu.c b/src/menu.c index ea387dacbd..7d255fddac 100644 --- a/src/menu.c +++ b/src/menu.c @@ -60,9 +60,9 @@ have_boxes (void) Lisp_Object menu_items; -/* If non-nil, means that the global vars defined here are already in use. +/* Whether the global vars defined here are already in use. Used to detect cases where we try to re-enter this non-reentrant code. */ -Lisp_Object menu_items_inuse; +bool menu_items_inuse; /* Number of slots currently allocated in menu_items. */ int menu_items_allocated; @@ -80,7 +80,7 @@ static int menu_items_submenu_depth; void init_menu_items (void) { - if (!NILP (menu_items_inuse)) + if (menu_items_inuse) error ("Trying to use a menu from within a menu-entry"); if (NILP (menu_items)) @@ -89,7 +89,7 @@ init_menu_items (void) menu_items = make_nil_vector (menu_items_allocated); } - menu_items_inuse = Qt; + menu_items_inuse = true; menu_items_used = 0; menu_items_n_panes = 0; menu_items_submenu_depth = 0; @@ -105,7 +105,7 @@ finish_menu_items (void) void unuse_menu_items (void) { - menu_items_inuse = Qnil; + menu_items_inuse = false; } /* Call when finished using the data for the current menu @@ -121,7 +121,7 @@ discard_menu_items (void) menu_items = Qnil; menu_items_allocated = 0; } - eassert (NILP (menu_items_inuse)); + eassert (!menu_items_inuse); } /* This undoes save_menu_items, and it is called by the specpdl unwind @@ -131,7 +131,7 @@ static void restore_menu_items (Lisp_Object saved) { menu_items = XCAR (saved); - menu_items_inuse = (! NILP (menu_items) ? Qt : Qnil); + menu_items_inuse = ! NILP (menu_items); menu_items_allocated = (VECTORP (menu_items) ? ASIZE (menu_items) : 0); saved = XCDR (saved); menu_items_used = XFIXNUM (XCAR (saved)); @@ -147,12 +147,12 @@ restore_menu_items (Lisp_Object saved) void save_menu_items (void) { - Lisp_Object saved = list4 (!NILP (menu_items_inuse) ? menu_items : Qnil, + Lisp_Object saved = list4 (menu_items_inuse ? menu_items : Qnil, make_fixnum (menu_items_used), make_fixnum (menu_items_n_panes), make_fixnum (menu_items_submenu_depth)); record_unwind_protect (restore_menu_items, saved); - menu_items_inuse = Qnil; + menu_items_inuse = false; menu_items = Qnil; } @@ -1578,8 +1578,6 @@ syms_of_menu (void) { menu_items = Qnil; staticpro (&menu_items); - menu_items_inuse = Qnil; - staticpro (&menu_items_inuse); defsubr (&Sx_popup_menu); defsubr (&Sx_popup_dialog); diff --git a/src/xmenu.c b/src/xmenu.c index fd7dea4cf8..22d1cc21aa 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -144,7 +144,7 @@ x_menu_set_in_use (bool in_use) { Lisp_Object frames, frame; - menu_items_inuse = in_use ? Qt : Qnil; + menu_items_inuse = in_use; popup_activated_flag = in_use; #ifdef USE_X_TOOLKIT if (popup_activated_flag) commit 24fc1337c169aeb1095dcc58bf8d4bbe48abefc0 Author: Alan Mackenzie Date: Fri Mar 15 11:43:11 2019 +0000 * doc/misc/cc-mode.texi (Config Basics): in @itemize, @asis -> @w{} diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 0c77cc0ee6..0102a4ace8 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -2307,7 +2307,7 @@ that takes precedence is the one that appears latest in this list: @end ifclear @c Version of list for Texinfo >= 5.x @ifset txicommandconditionals -@itemize @asis +@itemize @w{} @item Style @item File Style@footnote{In earlier versions of @ccmode{}, a File Style setting took precedence over any other setting apart from a File Local Variable setting.} @item Top-level command or ``customization interface'' commit 0f325d193e3787bf0e69d539783dd1ce414463c3 Author: Eli Zaretskii Date: Fri Mar 15 11:15:06 2019 +0200 Don't clobber 'comint-input-autoexpand' in 'read-shell-command' * lisp/shell.el (shell-completion-vars): Set only the buffer-local value of 'comint-input-autoexpand'. (Bug#34815) diff --git a/lisp/shell.el b/lisp/shell.el index e30825cd66..78227ca735 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -483,7 +483,7 @@ Shell buffers. It implements `shell-completion-execonly' for ;; Don't use pcomplete's defaulting mechanism, rely on ;; shell-dynamic-complete-functions instead. (set (make-local-variable 'pcomplete-default-completion-function) #'ignore) - (setq comint-input-autoexpand shell-input-autoexpand) + (setq-local comint-input-autoexpand shell-input-autoexpand) ;; Not needed in shell-mode because it's inherited from comint-mode, but ;; placed here for read-shell-command. (add-hook 'completion-at-point-functions 'comint-completion-at-point nil t)) commit 18fb250d6748bd31672a9d2bdd5dff99ac7f7743 Author: Philippe Vaucher Date: Sat Mar 2 20:03:41 2019 +0100 Customize tabulated-list sort indicators This allows the user to customize the sorting indicators displayed near the current column. * lisp/emacs-lisp/tabulated-list.el (tabulated-list): New group. (tabulated-list-gui-sort-indicator-asc) (tabulated-list-gui-sort-indicator-desc) (tabulated-list-tty-sort-indicator-asc) (tabulated-list-tty-sort-indicator-desc): New defcustomd. (tabulated-list-glyphless-char-display): Remove. (tabulated-list-make-glyphless-char-display-table): New function. * doc/lispref/modes.texi (Tabulated List Mode): Add documentation for new options. * etc/NEWS: Mention the new options. diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 3f6bee9821..1afbc5a5ce 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1015,6 +1015,29 @@ list-processes}). The listing command should create or switch to a buffer, turn on the derived mode, specify the tabulated data, and finally call @code{tabulated-list-print} to populate the buffer. +@defopt tabulated-list-gui-sort-indicator-asc +This variable specifies the character to be used on GUI frames as an +indication that the column is sorted in the ascending order. + +Whenever you change the sort direction in Tabulated List buffers, this +indicator toggles between ascending (``asc'') and descending (``desc''). +@end defopt + +@defopt tabulated-list-gui-sort-indicator-desc +Like @code{tabulated-list-gui-sort-indicator-asc}, but used when the +column is sorted in the descending order. +@end defopt + +@defopt tabulated-list-tty-sort-indicator-asc +Like @code{tabulated-list-gui-sort-indicator-asc}, but used for +text-mode frames. +@end defopt + +@defopt tabulated-list-tty-sort-indicator-desc +Like @code{tabulated-list-tty-sort-indicator-asc}, but used when the +column is sorted in the descending order. +@end defopt + @defvar tabulated-list-format This buffer-local variable specifies the format of the Tabulated List data. Its value should be a vector. Each element of the vector diff --git a/etc/NEWS b/etc/NEWS index 31772abe6c..000d211c1a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -923,7 +923,7 @@ been instrumented by Edebug. the XTerm window title. This feature is experimental and is disabled by default. -** grep +** Grep +++ *** rgrep, lgrep and zrgrep now hide part of the command line @@ -1194,6 +1194,17 @@ the 128...255 range, as expected. This allows to create and parent immediately a minibuffer-only child frame when making a frame. +** Tabulated List mode + ++++ +** New user options for tabulated list sort indicators. +You can now customize which sorting indicator character to display +near the current column in Tabulated Lists (see variables +'tabulated-list-gui-sort-indicator-asc', +'tabulated-list-gui-sort-indicator-desc', +'tabulated-list-tty-sort-indicator-asc', and +'tabulated-list-tty-sort-indicator-desc'). + * New Modes and Packages in Emacs 27.1 diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 12d0151d67..b23ce21027 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -36,6 +36,43 @@ ;;; Code: +(defgroup tabulated-list nil + "Tabulated-list customization group." + :group 'convenience + :group 'display) + +(defcustom tabulated-list-gui-sort-indicator-asc ?▼ + "Indicator for columns sorted in ascending order, for GUI frames. +See `tabulated-list-tty-sort-indicator-asc' for the indicator used on +text-mode frames." + :group 'tabulated-list + :type 'character + :version "27.1") + +(defcustom tabulated-list-gui-sort-indicator-desc ?▲ + "Indicator for columns sorted in descending order, for GUI frames. +See `tabulated-list-tty-sort-indicator-desc' for the indicator used on +text-mode frames." + :group 'tabulated-list + :type 'character + :version "27.1") + +(defcustom tabulated-list-tty-sort-indicator-asc ?v + "Indicator for columns sorted in ascending order, for text-mode frames. +See `tabulated-list-gui-sort-indicator-asc' for the indicator used on GUI +frames." + :group 'tabulated-list + :type 'character + :version "27.1") + +(defcustom tabulated-list-tty-sort-indicator-desc ?^ + "Indicator for columns sorted in ascending order, for text-mode frames. +See `tabulated-list-gui-sort-indicator-asc' for the indicator used on GUI +frames." + :group 'tabulated-list + :type 'character + :version "27.1") + ;; The reason `tabulated-list-format' and other variables are ;; permanent-local is to make it convenient to switch to a different ;; major mode, switch back, and have the original Tabulated List data @@ -174,14 +211,20 @@ If ADVANCE is non-nil, move forward by one line afterwards." map) "Local keymap for `tabulated-list-mode' sort buttons.") -(defvar tabulated-list-glyphless-char-display +(defun tabulated-list-make-glyphless-char-display-table () + "Make the `glyphless-char-display' table used for text-mode frames. +This table is used for displaying the sorting indicators, see +variables `tabulated-list-tty-sort-indicator-asc' and +`tabulated-list-tty-sort-indicator-desc' for more information." (let ((table (make-char-table 'glyphless-char-display nil))) (set-char-table-parent table glyphless-char-display) - ;; Some text terminals can't display the Unicode arrows; be safe. - (aset table 9650 (cons nil "^")) - (aset table 9660 (cons nil "v")) - table) - "The `glyphless-char-display' table in Tabulated List buffers.") + (aset table + tabulated-list-gui-sort-indicator-desc + (cons nil (char-to-string tabulated-list-tty-sort-indicator-desc))) + (aset table + tabulated-list-gui-sort-indicator-asc + (cons nil (char-to-string tabulated-list-tty-sort-indicator-asc))) + table)) (defvar tabulated-list--header-string nil "Holds the header if `tabulated-list-use-header-line' is nil. @@ -231,8 +274,11 @@ Populated by `tabulated-list-init-header'.") (concat label (cond ((> (+ 2 (length label)) width) "") - ((cdr tabulated-list-sort-key) " ▲") - (t " ▼"))) + ((cdr tabulated-list-sort-key) + (format " %c" + tabulated-list-gui-sort-indicator-desc)) + (t (format " %c" + tabulated-list-gui-sort-indicator-asc)))) 'face 'bold 'tabulated-list-column-name label button-props)) @@ -655,7 +701,8 @@ as the ewoc pretty-printer." (setq-local truncate-lines t) (setq-local buffer-undo-list t) (setq-local revert-buffer-function #'tabulated-list-revert) - (setq-local glyphless-char-display tabulated-list-glyphless-char-display) + (setq-local glyphless-char-display + (tabulated-list-make-glyphless-char-display-table)) ;; Avoid messing up the entries' display just because the first ;; column of the first entry happens to begin with a R2L letter. (setq bidi-paragraph-direction 'left-to-right) commit c72c2b04c2ed1688c9903cd87e7925b74a307541 Author: Eli Zaretskii Date: Fri Mar 15 10:02:58 2019 +0200 * etc/NEWS: Document Sami input methods. (Bug#34866) diff --git a/etc/NEWS b/etc/NEWS index 410c1821ae..31772abe6c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -236,6 +236,13 @@ regular expression was previously invalid, but is now accepted: --- ** New input methods 'hawaiian-postfix' and 'hawaiian-prefix'. +--- +** New input methods for several variants of the Sami language. +The Sami input methods include: 'norwegian-sami-prefix', +'bergsland-hasselbrink-sami-prefix', 'southern-sami-prefix', +'ume-sami-prefix', 'northern-sami-prefix', 'inari-sami-prefix', +'skolt-sami-prefix', and 'kildin-sami-prefix'. + +++ ** In Japanese environments that do not specify encodings and are not based on MS-Windows, the default encoding is now utf-8 instead of commit 4baacfe1b43f7ce34c007490475632bd73b88662 Author: Wojciech Gac Date: Fri Mar 15 02:01:48 2019 +0100 Add notice and fix missing character diff --git a/lisp/leim/quail/sami.el b/lisp/leim/quail/sami.el index 4b45e894da..d4cf4ec96e 100644 --- a/lisp/leim/quail/sami.el +++ b/lisp/leim/quail/sami.el @@ -1,6 +1,39 @@ +;;; sami.el --- Quail package for inputting Sámi -*-coding: utf-8;-*- + +;; Copyright (C) 1998, 2001-2019 Free Software Foundation, Inc. + +;; Author: Wojciech S. Gac +;; Maintainer: Wojciech S. Gac > +;; Keywords: i18n, multilingual, input method, Sámi + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . ;;; Commentary: +;; This file implements the following input methods for the Sámi +;; language +;; - norwegian-sami-prefix +;; - bergsland-hasselbrink-sami-prefix +;; - southern-sami-prefix +;; - ume-sami-prefix +;; - northern-sami-prefix +;; - inari-sami-prefix +;; - skolt-sami-prefix +;; - kildin-sami-prefix + ;;; Code (require 'quail) @@ -644,6 +677,7 @@ Alphabet (parenthesized letters are used in foreign names only): ("b" ?б) ("n" ?н) ("'n" ?ӊ) + (",n" ?ӈ) ("m" ?м) ("'m" ?ӎ) ("," ?,) @@ -711,8 +745,11 @@ Alphabet (parenthesized letters are used in foreign names only): ("B" ?Б) ("N" ?Н) ("'N" ?Ӊ) + (",N" ?Ӈ) ("M" ?М) ("'M" ?Ӎ) ("<" ?<) (">" ?>) ("?" ??)) + +;;; sami.el ends here commit f5a795d6ec73a0642f7eb95e2a9827e514824c14 Author: Wojciech Gac Date: Wed Mar 13 08:09:31 2019 +0100 Add remaining Sami input methods diff --git a/lisp/leim/quail/sami.el b/lisp/leim/quail/sami.el index 763826dbda..4b45e894da 100644 --- a/lisp/leim/quail/sami.el +++ b/lisp/leim/quail/sami.el @@ -5,34 +5,471 @@ (require 'quail) -;; (quail-define-package -;; "northern-sami-prefix" "Sámi" "/NoS" nil -;; "Northern Sámi input method +(quail-define-package + "norwegian-sami-prefix" "Sámi" "/NSoS" nil + "Norwegian Southern Sámi input method -;; Alphabet: -;; А а Á á B b C c Č č D d Đ đ E e -;; F f G g H h I i J j K k L l M m -;; N n Ŋ ŋ O o P p R r S s Š š T t -;; Ŧ ŧ U u V v Z z Ž ž -;; " -;; nil t nil nil nil nil nil nil nil nil t) +Alphabet (parenthesized letters are used in foreign names): +А а B b (C c) D d E e F f G g H h +I i (Ï ï) J j K k L l M m N n O o +P p (Q q) R r S s T t U u V v (W w) +(X x) Y y (Z z) Æ æ Ø ø Å å +" + nil t nil nil nil nil nil nil nil nil t) -;; (quail-define-rules) +(quail-define-rules + ("А" ?А) + ("а" ?а) + ("B" ?B) + ("b" ?b) + ("C" ?C) + ("c" ?c) + ("D" ?D) + ("d" ?d) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + (":I" ?Ï) + (":i" ?ï) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("O" ?O) + ("o" ?o) + ("P" ?P) + ("p" ?p) + ("Q" ?Q) + ("q" ?q) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("T" ?T) + ("t" ?t) + ("U" ?U) + ("u" ?u) + ("V" ?V) + ("v" ?v) + ("W" ?W) + ("w" ?w) + ("X" ?X) + ("x" ?x) + ("Y" ?Y) + ("y" ?y) + ("Z" ?Z) + ("z" ?z) + ("AE" ?Æ) + ("ae" ?æ) + ("/O" ?Ø) + ("/o" ?ø) + ("/A" ?Å) + ("/a" ?å)) -;; (quail-define-package -;; "inari-sami-prefix" "Sámi" "/InS" nil -;; "Inari Sámi input method +(quail-define-package + "bergsland-hasselbrink-sami-prefix" "Sámi" "/BHS" nil + "Bergsland-Hasselbrink Southern Sámi input method -;; Alphabet (parenthesized letters are used in foreign names only): -;; А а Â â B b C c Č č D d Đ đ E e -;; F f G g H h I i J j K k L l M m -;; N n O o P p (Q q) R r S s Š š T t -;; U u V v (W w) (X x) Y y Z z Ž ž Ä ä -;; Á á Å å Ö ö -;; " -;; nil t nil nil nil nil nil nil nil nil t) +Alphabet: +А а Â â Á á B b C c Č č D d Đ đ +E e F f G g H h I i Î î J j K k +L l M m N n Ŋ ŋ O o P p R r S s +Š š T t U u V v Y y Z z Ž ž Ä ä +Æ æ Ö ö Å å ' +" + nil t nil nil nil nil nil nil nil nil t) -;; (quail-define-rules) +(quail-define-rules + ("А" ?А) + ("а" ?а) + ("^A" ?Â) + ("^a" ?â) + ("'A" ?Á) + ("'a" ?á) + ("B" ?B) + ("b" ?b) + ("C" ?C) + ("c" ?c) + ("^C" ?Č) + ("^c" ?č) + ("D" ?D) + ("d" ?d) + ("-D" ?Đ) + ("-d" ?đ) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + ("^I" ?Î) + ("^i" ?î) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("/N" ?Ŋ) + ("/n" ?ŋ) + ("O" ?O) + ("o" ?o) + ("P" ?P) + ("p" ?p) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("^S" ?Š) + ("^s" ?š) + ("T" ?T) + ("t" ?t) + ("U" ?U) + ("u" ?u) + ("V" ?V) + ("v" ?v) + ("Y" ?Y) + ("y" ?y) + ("Z" ?Z) + ("z" ?z) + ("^Z" ?Ž) + ("^z" ?ž) + (":A" ?Ä) + (":a" ?ä) + ("AE" ?Æ) + ("ae" ?æ) + (":O" ?Ö) + (":o" ?ö) + ("/A" ?Å) + ("/a" ?å)) + +(quail-define-package + "southern-sami-prefix" "Sámi" "/SoS" nil + "Contemporary Southern Sámi input method + +Alphabet (parenthesized letters are used in foreign names): +А а B b (C c) D d E e F f G g H h +I i (Ï ï) J j K k L l M m N n O o +P p (Q q) R r S s T t U u V v (W w) +(X x) Y y (Z z) Ä ä Ö ö Å å +" + nil t nil nil nil nil nil nil nil nil t) + +(quail-define-rules + ("А" ?А) + ("а" ?а) + ("B" ?B) + ("b" ?b) + ("C" ?C) + ("c" ?c) + ("D" ?D) + ("d" ?d) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + (":I" ?Ï) + (":i" ?ï) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("O" ?O) + ("o" ?o) + ("P" ?P) + ("p" ?p) + ("Q" ?Q) + ("q" ?q) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("T" ?T) + ("t" ?t) + ("U" ?U) + ("u" ?u) + ("V" ?V) + ("v" ?v) + ("W" ?W) + ("w" ?w) + ("X" ?X) + ("x" ?x) + ("Y" ?Y) + ("y" ?y) + ("Z" ?Z) + ("z" ?z) + (":A" ?Ä) + (":a" ?ä) + (":O" ?Ö) + (":o" ?ö) + ("/A" ?Å) + ("/a" ?å)) + +(quail-define-package + "ume-sami-prefix" "Sámi" "/UmS" nil + "Ume Sámi input method + +Alphabet: +А а Á á B b D d Đ đ E e F f G g +H h I i Ï ï J j K k L l M m N n +Ŋ ŋ O o P p R r S s T t Ŧ ŧ U u +Ü ü V v Y y Å å Ä ä Ö ö +" + nil t nil nil nil nil nil nil nil nil t) + +(quail-define-rules + ("А" ?А) + ("а" ?а) + ("'A" ?Á) + ("'a" ?á) + ("B" ?B) + ("b" ?b) + ("D" ?D) + ("d" ?d) + ("-D" ?Đ) + ("-d" ?đ) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + (":I" ?Ï) + (":i" ?ï) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("/N" ?Ŋ) + ("/n" ?ŋ) + ("O" ?O) + ("o" ?o) + ("P" ?P) + ("p" ?p) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("T" ?T) + ("t" ?t) + ("-T" ?Ŧ) + ("-t" ?ŧ) + ("U" ?U) + ("u" ?u) + (":U" ?Ü) + (":u" ?ü) + ("V" ?V) + ("v" ?v) + ("Y" ?Y) + ("y" ?y) + ("/A" ?Å) + ("/a" ?å) + (":A" ?Ä) + (":a" ?ä) + (":O" ?Ö) + (":o" ?ö) + ) + +(quail-define-package + "northern-sami-prefix" "Sámi" "/NoS" nil + "Northern Sámi input method + +Alphabet: +А а Á á B b C c Č č D d Đ đ E e +F f G g H h I i J j K k L l M m +N n Ŋ ŋ O o P p R r S s Š š T t +Ŧ ŧ U u V v Z z Ž ž +" + nil t nil nil nil nil nil nil nil nil t) + +(quail-define-rules + ("А" ?А) + ("а" ?а) + ("'A" ?Á) + ("'a" ?á) + ("B" ?B) + ("b" ?b) + ("C" ?C) + ("c" ?c) + ("^C" ?Č) + ("^c" ?č) + ("D" ?D) + ("d" ?d) + ("-D" ?Đ) + ("-d" ?đ) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("/N" ?Ŋ) + ("/n" ?ŋ) + ("O" ?O) + ("o" ?o) + ("P" ?P) + ("p" ?p) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("^S" ?Š) + ("^s" ?š) + ("T" ?T) + ("t" ?t) + ("-T" ?Ŧ) + ("-t" ?ŧ) + ("U" ?U) + ("u" ?u) + ("V" ?V) + ("v" ?v) + ("Z" ?Z) + ("z" ?z) + ("^Z" ?Ž) + ("^z" ?ž) + ) + +(quail-define-package + "inari-sami-prefix" "Sámi" "/InS" nil + "Inari Sámi input method + +Alphabet (parenthesized letters are used in foreign names only): +А а Â â B b C c Č č D d Đ đ E e +F f G g H h I i J j K k L l M m +N n O o P p (Q q) R r S s Š š T t +U u V v (W w) (X x) Y y Z z Ž ž Ä ä +Á á Å å Ö ö +" + nil t nil nil nil nil nil nil nil nil t) + +(quail-define-rules + ("А" ?А) + ("а" ?а) + ("^A" ?Â) + ("^a" ?â) + ("B" ?B) + ("b" ?b) + ("C" ?C) + ("c" ?c) + ("^C" ?Č) + ("^c" ?č) + ("D" ?D) + ("d" ?d) + ("-D" ?Đ) + ("-d" ?đ) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("O" ?O) + ("o" ?o) + ("P" ?P) + ("p" ?p) + ("Q" ?Q) + ("q" ?q) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("^S" ?Š) + ("^s" ?š) + ("T" ?T) + ("t" ?t) + ("U" ?U) + ("u" ?u) + ("V" ?V) + ("v" ?v) + ("W" ?W) + ("w" ?w) + ("X" ?X) + ("x" ?x) + ("Y" ?Y) + ("y" ?y) + ("Z" ?Z) + ("z" ?z) + ("^Z" ?Ž) + ("^z" ?ž) + (":A" ?Ä) + (":a" ?ä) + ("'A" ?Á) + ("'a" ?á) + ("/A" ?Å) + ("/a" ?å) + (":O" ?Ö) + (":o" ?ö)) (quail-define-package "skolt-sami-prefix" "Sámi" "/SkS" nil commit 0b5f5954e1e660b102785125ed92545b3ce2cd4a Author: Wojciech Gac Date: Wed Mar 13 02:10:19 2019 +0100 Add Skolt Sami and Inari Sami input methods diff --git a/lisp/leim/quail/sami.el b/lisp/leim/quail/sami.el new file mode 100644 index 0000000000..763826dbda --- /dev/null +++ b/lisp/leim/quail/sami.el @@ -0,0 +1,281 @@ + +;;; Commentary: + +;;; Code + +(require 'quail) + +;; (quail-define-package +;; "northern-sami-prefix" "Sámi" "/NoS" nil +;; "Northern Sámi input method + +;; Alphabet: +;; А а Á á B b C c Č č D d Đ đ E e +;; F f G g H h I i J j K k L l M m +;; N n Ŋ ŋ O o P p R r S s Š š T t +;; Ŧ ŧ U u V v Z z Ž ž +;; " +;; nil t nil nil nil nil nil nil nil nil t) + +;; (quail-define-rules) + +;; (quail-define-package +;; "inari-sami-prefix" "Sámi" "/InS" nil +;; "Inari Sámi input method + +;; Alphabet (parenthesized letters are used in foreign names only): +;; А а Â â B b C c Č č D d Đ đ E e +;; F f G g H h I i J j K k L l M m +;; N n O o P p (Q q) R r S s Š š T t +;; U u V v (W w) (X x) Y y Z z Ž ž Ä ä +;; Á á Å å Ö ö +;; " +;; nil t nil nil nil nil nil nil nil nil t) + +;; (quail-define-rules) + +(quail-define-package + "skolt-sami-prefix" "Sámi" "/SkS" nil + "Skolt Sámi input method + +Alphabet (parenthesized letters are used in foreign names only): +А а Â â B b C c Č č Ʒ ʒ Ǯ ǯ D d +Đ đ E e F f G g Ǧ ǧ Ǥ ǥ H h I i +J j K k Ǩ ǩ L l M m N n Ŋ ŋ O o +Õ õ P p (Q q) R r S s Š š T t U u +V v (W w) (X x) (Y y) Z z Ž ž Å å Ä ä +(Ö ö) ʹ +" + nil t nil nil nil nil nil nil nil nil t) + +(quail-define-rules + ("A" ?А) + ("a" ?а) + ("^A" ?Â) + ("^a" ?â) + ("B" ?B) + ("b" ?b) + ("C" ?C) + ("c" ?c) + ("^C" ?Č) + ("^c" ?č) + ("/X" ?Ʒ) + ("/x" ?ʒ) + ("^X" ?Ǯ) + ("^x" ?ǯ) + ("D" ?D) + ("d" ?d) + ("-D" ?Đ) + ("-d" ?đ) + ("E" ?E) + ("e" ?e) + ("F" ?F) + ("f" ?f) + ("G" ?G) + ("g" ?g) + ("^G" ?Ǧ) + ("^g" ?ǧ) + ("-G" ?Ǥ) + ("-g" ?ǥ) + ("H" ?H) + ("h" ?h) + ("I" ?I) + ("i" ?i) + ("J" ?J) + ("j" ?j) + ("K" ?K) + ("k" ?k) + ("^K" ?Ǩ) + ("^k" ?ǩ) + ("L" ?L) + ("l" ?l) + ("M" ?M) + ("m" ?m) + ("N" ?N) + ("n" ?n) + ("/N" ?Ŋ) + ("/n" ?ŋ) + ("O" ?O) + ("o" ?o) + ("~O" ?Õ) + ("~o" ?õ) + ("P" ?P) + ("p" ?p) + ("Q" ?Q) + ("q" ?q) + ("R" ?R) + ("r" ?r) + ("S" ?S) + ("s" ?s) + ("^S" ?Š) + ("^s" ?š) + ("T" ?T) + ("t" ?t) + ("U" ?U) + ("u" ?u) + ("V" ?V) + ("v" ?v) + ("W" ?W) + ("w" ?w) + ("X" ?X) + ("x" ?x) + ("Y" ?Y) + ("y" ?y) + ("Z" ?Z) + ("z" ?z) + ("^Z" ?Ž) + ("^z" ?ž) + ("/A" ?Å) + ("/a" ?å) + (":A" ?Ä) + (":a" ?ä) + (":O" ?Ö) + (":o" ?ö)) + +(quail-define-package + "kildin-sami-prefix" "Sámi" "/KiS" nil + "Kildin Sámi input method + +Alphabet (parenthesized letters are used in foreign names only): +А а А̄ а̄ Ӓ ӓ Б б В в Г г Д д Е е Е̄ е̄ +Ё ё Ё̄ ё̄ Ж ж З з Һ һ (') И и Ӣ ӣ Й й +Ј ј (Ҋ ҋ) К к Л л Ӆ ӆ М м Ӎ ӎ Н н Ӊ ӊ +Ӈ ӈ О о О̄ о̄ П п Р р Ҏ ҏ С с Т т У у +Ӯ ӯ Ф ф Х х Ц ц Ч ч Ш ш Щ щ Ъ ъ Ы ы +Ь ь Ҍ ҍ Э э Э̄ э̄ Ӭ ӭ Ю ю Ю̄ ю̄ Я я Я̄ я̄ +") + +(quail-define-rules + ("1" ?1) + ("2" ?2) + ("3" ?3) + ("4" ?4) + ("5" ?5) + ("6" ?6) + ("7" ?7) + ("8" ?8) + ("9" ?9) + ("0" ?0) + ("-" ?-) + ("=" ?ч) + ("`" ?ю) + ("-`" ["ю̄"]) + ("q" ?я) + ("-q" ["я̄"]) + ("w" ?в) + ("e" ?е) + ("-e" ["е̄"]) + ("-@" ["ё̄"]) + ("r" ?р) + ("-r" ?ҏ) + ("t" ?т) + ("y" ?ы) + ("u" ?у) + ("-u" ?ӯ) + ("i" ?и) + ("o" ?о) + ("-o" ["о̄"]) + ("p" ?п) + ("[" ?ш) + ("]" ?щ) + ("a" ?а) + ("-a" ["а̄"]) + (":a" ?ӓ) + ("s" ?с) + ("d" ?д) + ("f" ?ф) + ("g" ?г) + ("h" ?х) + ("/h" ?һ) + ("j" ?й) + ("-j" ["ӣ"]) + ("'j" ?ҋ) + ("/j" ?ј) + ("k" ?к) + ("l" ?л) + ("'l" ?ӆ) + (";" ?\;) + ("'" ?') + ("\\" ?э) + ("-\\" ["э̄"]) + (":\\" ?ӭ) + ("z" ?з) + ("x" ?ь) + ("-x" ?ҍ) + ("c" ?ц) + ("v" ?ж) + ("b" ?б) + ("n" ?н) + ("'n" ?ӊ) + ("m" ?м) + ("'m" ?ӎ) + ("," ?,) + ("." ?.) + ("/" ?/) + + ("!" ?!) + ("@" ?ё) + ("#" ?ъ) + ("$" ?Ё) + ("%" ?%) + ("^" ?^) + ("&" ?&) + ("*" ?*) + ("(" ?\() + (")" ?\)) + ("_" ?_) + ("+" ?Ч) + ("~" ?Ю) + ("-~" ["Ю̄"]) + ("Q" ?Я) + ("-Q" ["Я̄"]) + ("W" ?В) + ("E" ?Е) + ("-E" ["Е̄"]) + ("-$" ["Ё̄"]) + ("R" ?Р) + ("-R" ?Ҏ) + ("T" ?Т) + ("Y" ?Ы) + ("U" ?У) + ("-U" ["Ӯ"]) + ("I" ?И) + ("O" ?О) + ("-O" ["О̄"]) + ("P" ?П) + ("{" ?Ш) + ("}" ?Щ) + ("A" ?А) + ("-A" ["А̄"]) + (":A" ?Ӓ) + ("S" ?С) + ("D" ?Д) + ("F" ?Ф) + ("G" ?Г) + ("H" ?Х) + ("/H" ?Һ) + ("J" ?Й) + ("-J" ["Ӣ"]) + ("'J" ?Ҋ) + ("/J" ?Ј) + ("K" ?К) + ("L" ?Л) + ("'L" ?Ӆ) + (":" ?:) + ("\"" ?\") + ("|" ?Э) + ("-|" ["Э̄"]) + (":|" ?Ӭ) + ("Z" ?З) + ("X" ?Ь) + ("-X" ?Ҍ) + ("C" ?Ц) + ("V" ?Ж) + ("B" ?Б) + ("N" ?Н) + ("'N" ?Ӊ) + ("M" ?М) + ("'M" ?Ӎ) + ("<" ?<) + (">" ?>) + ("?" ??)) commit 020e69d992c98fd852e835c9bd707a8d137090f2 Author: Stefan Monnier Date: Wed Mar 13 18:22:57 2019 -0400 * lisp/doc-view.el (doc-view--text-view-mode): Derive from text-mode. diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 53ae351abd..a706907260 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -1480,10 +1480,9 @@ For now these keys are useful: ;; can easily distinguish when we want to toggle back because ;; text-mode is a likely candidate for a default major-mode ;; (bug#34451). -(defun doc-view--text-view-mode () +(define-derived-mode doc-view--text-view-mode text-mode "DV/Text" "View mode used in DocView's text buffers." - (view-mode) - (setq major-mode 'doc-view--text-view-mode)) + (view-mode)) (defun doc-view-open-text () "Display the current doc's contents as text." @@ -1496,6 +1495,10 @@ For now these keys are useful: (buffer-undo-list t) (dv-bfn doc-view--buffer-file-name)) (erase-buffer) + ;; FIXME: Replacing the buffer's PDF content with its txt rendering + ;; is pretty risky. We should probably use *another* + ;; buffer instead, so there's much less risk of + ;; overwriting the PDF file with some text rendering. (set-buffer-multibyte t) (insert-file-contents txt) (doc-view--text-view-mode) @@ -1504,6 +1507,9 @@ For now these keys are useful: (doc-view-minor-mode) (add-hook 'write-file-functions (lambda () + ;; FIXME: If the user changes major mode and then + ;; saves the buffer, the PDF file will be clobbered + ;; with its txt rendering! (when (eq major-mode 'doc-view--text-view-mode) (error "Cannot save text contents of document %s" buffer-file-name))) commit 82b4e9ffacaa8bf3dc30daf5f9f50c72699cc717 Author: Basil L. Contovounesios Date: Wed Mar 13 18:30:07 2019 +0000 Fix file attribute accessor typo in Elisp manual This was introduced in 662bee7d70ccd3903e123b08c7ec9108a1a2ce0b 2018-09-24T01:30:46Z!eggert@cs.ucla.edu. * doc/lispref/files.texi (File Attributes): Fix typo referring to wrong file attribute accessor. diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 0e57cf9666..7bc1cc454b 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -1306,7 +1306,7 @@ The file's @acronym{GID}, likewise (@code{file-attribute-group-id}). @item The time of last access as a Lisp timestamp -(@code{file-attribute-status-change-time}). The timestamp is in the +(@code{file-attribute-access-time}). The timestamp is in the style of @code{current-time} (@pxref{Time of Day}) and is truncated to that of the filesystem's timestamp resolution; for example, on some FAT-based filesystems, only the date of last access is recorded, so commit 3bd7ba1bdf29ac731a8e65bc0b82b5e5a721c35b Author: Glenn Morris Date: Wed Mar 13 17:33:25 2019 -0400 * test/lisp/progmodes/python-tests.el (python-syntax-after-python-backspace): Expect failure again. ; since 5feaf90 diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el index 26aaff463c..94c846ecb1 100644 --- a/test/lisp/progmodes/python-tests.el +++ b/test/lisp/progmodes/python-tests.el @@ -184,8 +184,7 @@ aliqua." (ert-deftest python-syntax-after-python-backspace () ;; `python-indent-dedent-line-backspace' garbles syntax - ;; But it seems that since da7580, the test passes. -;;; :expected-result :failed + :expected-result :failed (python-tests-with-temp-buffer "\"\"\"" (goto-char (point-max)) commit 7dda131ab02b36362ae63744db66413a9f1df58d Author: Stefan Monnier Date: Wed Mar 13 15:55:39 2019 -0400 * lisp/emacs-lisp/easy-mmode.el: Fix most obvious bug#34723 (easy-mmode-define-navigation): Don't scroll in the opposite direction of the movement. diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 0cb9a6fa12..8ac0a1d593 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -628,6 +628,7 @@ BODY is executed after moving to the destination location." ,body (when was-narrowed (funcall #',narrowfun))))))) (unless name (setq name base-name)) + ;; FIXME: Move most of those functions's bodies to helper functions! `(progn (defun ,next-sym (&optional count) ,(format "Go to the next COUNT'th %s. @@ -649,7 +650,11 @@ Interactively, COUNT is the prefix numeric argument, and defaults to 1." name) `(re-search-forward ,re nil t 2))) (point-max)))) (unless (pos-visible-in-window-p endpt nil t) - (recenter '(0))))))) + (let ((ws (window-start))) + (recenter '(0)) + (if (< (window-start) ws) + ;; recenter scrolled in the wrong direction! + (set-window-start nil ws)))))))) ,@body)) (put ',next-sym 'definition-name ',base) (defun ,prev-sym (&optional count) commit fd71d626dc0554bcb770dc4b97b06edcf42516fb Author: Stefan Monnier Date: Wed Mar 13 14:25:28 2019 -0400 * lisp/mail/hashcash.el (hashcash-insert-payment-async): Fix last change diff --git a/lisp/mail/hashcash.el b/lisp/mail/hashcash.el index 519c6d94e1..6068952997 100644 --- a/lisp/mail/hashcash.el +++ b/lisp/mail/hashcash.el @@ -243,8 +243,9 @@ Only start calculation. Results are inserted when ready." (hashcash-generate-payment-async (hashcash-payment-to arg) (hashcash-payment-required arg) - (lambda (process payment) - (hashcash-insert-payment-async-2 (current-buffer) process payment))))) + (let ((buf (current-buffer))) + (lambda (process payment) + (hashcash-insert-payment-async-2 buf process payment)))))) (defun hashcash-insert-payment-async-2 (buffer process pay) (when (buffer-live-p buffer) commit 5feaf906e110097a443af78f549f01c1bd527e25 Author: Stefan Monnier Date: Wed Mar 13 13:40:36 2019 -0400 * lisp/progmodes/python.el (python-rx-constituents): Fix ordering in `or` The previous code worked earlier because of a bug in `rx` (which used `regexp-opt` without passing it to `keep-order` argument), but now that `rx` has been fixed the underlying bug here reared its ugly head. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 65d5d90cd5..5d0d03d502 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -438,7 +438,7 @@ It returns a file name which can be used directly as argument of (* ?\\ ?\\) (any ?\' ?\"))) (* ?\\ ?\\) ;; Match single or triple quotes of any kind. - (group (or "\"" "\"\"\"" "'" "'''"))))) + (group (or "\"\"\"" "\"" "'''" "'"))))) (coding-cookie . ,(rx line-start ?# (* space) (or ;; # coding= commit 9486d87cfe7a68d43a44eecd660d2fbe8f0fcb73 Author: Eli Zaretskii Date: Wed Mar 13 18:53:08 2019 +0200 Avoid gratuitous errors in 'url-retrieve-synchronously' * lisp/url/url-http.el (url-http-debug): * lisp/url/url-util.el (url-debug): Don't signal an error if quit-flag is non-nil, but not t. This could happen because some unrelated code is running inside while-no-input. (Bug#34763) diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 76faac1380..651a2cc94c 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -150,7 +150,7 @@ request.") ;; These routines will allow us to implement persistent HTTP ;; connections. (defsubst url-http-debug (&rest args) - (if quit-flag + (if (eq quit-flag t) (let ((proc (get-buffer-process (current-buffer)))) ;; The user hit C-g, honor it! Some things can get in an ;; incredibly tight loop (chunked encoding) diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index cb80ec6cef..72ff4f171c 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -61,7 +61,7 @@ If a list, it is a list of the types of messages to be logged." ;;;###autoload (defun url-debug (tag &rest args) - (if quit-flag + (if (eq quit-flag t) (error "Interrupted!")) (if (or (eq url-debug t) (numberp url-debug) commit 8b3008261d4c3f7ed7508c0f7205d9fc3640df46 Author: Stefan Monnier Date: Wed Mar 13 10:27:46 2019 -0400 * lisp/battery.el (battery-bsd-apm): Group indices together; use pcase diff --git a/lisp/battery.el b/lisp/battery.el index 64661fd5b9..49b01d5b54 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -625,37 +625,54 @@ The following %-sequences are provided: (_ "ms"))) (apm-cmd (concat "/usr/sbin/apm -abl" apm-flag)) (apm-output (split-string (shell-command-to-string apm-cmd))) - (battery-status-index (if (equal os-name "FreeBSD") 1 0)) - (apm-mode-index (if (equal os-name "FreeBSD") 3 4)) - (battery-percentage-index (if (equal os-name "FreeBSD") 2 1)) - (battery-life-index (if (equal os-name "FreeBSD") 4 3)) - (ac-index (if (equal os-name "FreeBSD") 0 3)) + (indices (pcase os-name + ;; FreeBSD's manpage documents that multiple + ;; outputs are ordered by "the order in which + ;; they're listed in the manpage", which is alphabetical + ;; and is also the order in which we pass them. + ("FreeBSD" '((ac . 0) + (battery-status . 1) + (battery-percent . 2) + (apm-mode . 3) + (battery-life . 4))) + ;; For NetBSD and OpenBSD, the manpage doesn't document + ;; the order. The previous code used this order, so let's + ;; assume it's right. + (_ '((ac . 3) + (battery-status . 0) + (battery-percent . 1) + (apm-mode . 4) + (battery-life . 2))))) ;; Battery status (battery-status - (let ((stat (string-to-number (nth battery-status-index apm-output)))) - (cond ((eq stat 0) '("high" . "")) - ((eq stat 1) '("low" . "-")) - ((eq stat 2) '("critical" . "!")) - ((eq stat 3) '("charging" . "+")) - ((eq stat 4) '("absent" . nil))))) + (pcase (string-to-number + (nth (alist-get 'battery-status indices) apm-output)) + (0 '("high" . "")) + (1 '("low" . "-")) + (2 '("critical" . "!")) + (3 '("charging" . "+")) + (4 '("absent" . nil)))) ;; Battery percentage - (battery-percentage (nth battery-percentage-index apm-output)) + (battery-percentage + (nth (alist-get 'battery-percent indices) apm-output)) ;; Battery life - (battery-life (nth battery-life-index apm-output)) + (battery-life (nth (alist-get 'battery-life indices) apm-output)) ;; AC status (line-status - (let ((ac (string-to-number (nth ac-index apm-output)))) - (cond ((eq ac 0) "disconnected") - ((eq ac 1) "connected") - ((eq ac 2) "backup power")))) + (pcase (string-to-number (nth (alist-get 'ac indices) apm-output)) + (0 "disconnected") + (1 "connected") + (2 "backup power"))) ;; Advanced power savings mode (apm-mode - (let ((apm (string-to-number (nth apm-mode-index apm-output)))) + (let ((apm (string-to-number + (nth (alist-get 'apm-mode indices) apm-output)))) (if (string= os-name "OpenBSD") - (cond ((eq apm 0) "manual") - ((eq apm 1) "automatic") - ((eq apm 2) "cool running")) - (if (eq apm 1) "on" "off")))) + (pcase apm + (0 "manual") + (1 "automatic") + (2 "cool running")) + (if (eql apm 1) "on" "off")))) seconds minutes hours remaining-time) (unless (member battery-life '("unknown" "-1")) (if (member os-name '("OpenBSD" "NetBSD")) commit 18f55afbbcd4a8bcd96a7349e051ff45b91bc137 Author: Ahmed Khanzada Date: Wed Mar 13 10:10:19 2019 -0400 * lisp/battery.el (battery-bsd-apm): Make it work on FreeBSD Copyright-paperwork-exempt: yes Use flag "t" to get remaining time, and adjust to different output order. diff --git a/lisp/battery.el b/lisp/battery.el index efd2a2181a..64661fd5b9 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -617,34 +617,43 @@ The following %-sequences are provided: %h Remaining battery charge time in hours %t Remaining battery charge time in the form `h:min'" (let* ((os-name (car (split-string - (shell-command-to-string "/usr/bin/uname")))) - (apm-flag (if (equal os-name "OpenBSD") "P" "s")) - (apm-cmd (concat "/usr/sbin/apm -ablm" apm-flag)) - (apm-output (split-string (shell-command-to-string apm-cmd))) - ;; Battery status - (battery-status - (let ((stat (string-to-number (nth 0 apm-output)))) - (cond ((eq stat 0) '("high" . "")) - ((eq stat 1) '("low" . "-")) - ((eq stat 2) '("critical" . "!")) - ((eq stat 3) '("charging" . "+")) - ((eq stat 4) '("absent" . nil))))) - ;; Battery percentage - (battery-percentage (nth 1 apm-output)) - ;; Battery life - (battery-life (nth 2 apm-output)) - ;; AC status - (line-status - (let ((ac (string-to-number (nth 3 apm-output)))) - (cond ((eq ac 0) "disconnected") - ((eq ac 1) "connected") - ((eq ac 2) "backup power")))) - ;; Advanced power savings mode - (apm-mode - (let ((apm (string-to-number (nth 4 apm-output)))) - (if (string= os-name "OpenBSD") - (cond ((eq apm 0) "manual") - ((eq apm 1) "automatic") + ;; FIXME: Can't we use something like `system-type'? + (shell-command-to-string "/usr/bin/uname")))) + (apm-flag (pcase os-name + ("OpenBSD" "mP") + ("FreeBSD" "st") + (_ "ms"))) + (apm-cmd (concat "/usr/sbin/apm -abl" apm-flag)) + (apm-output (split-string (shell-command-to-string apm-cmd))) + (battery-status-index (if (equal os-name "FreeBSD") 1 0)) + (apm-mode-index (if (equal os-name "FreeBSD") 3 4)) + (battery-percentage-index (if (equal os-name "FreeBSD") 2 1)) + (battery-life-index (if (equal os-name "FreeBSD") 4 3)) + (ac-index (if (equal os-name "FreeBSD") 0 3)) + ;; Battery status + (battery-status + (let ((stat (string-to-number (nth battery-status-index apm-output)))) + (cond ((eq stat 0) '("high" . "")) + ((eq stat 1) '("low" . "-")) + ((eq stat 2) '("critical" . "!")) + ((eq stat 3) '("charging" . "+")) + ((eq stat 4) '("absent" . nil))))) + ;; Battery percentage + (battery-percentage (nth battery-percentage-index apm-output)) + ;; Battery life + (battery-life (nth battery-life-index apm-output)) + ;; AC status + (line-status + (let ((ac (string-to-number (nth ac-index apm-output)))) + (cond ((eq ac 0) "disconnected") + ((eq ac 1) "connected") + ((eq ac 2) "backup power")))) + ;; Advanced power savings mode + (apm-mode + (let ((apm (string-to-number (nth apm-mode-index apm-output)))) + (if (string= os-name "OpenBSD") + (cond ((eq apm 0) "manual") + ((eq apm 1) "automatic") ((eq apm 2) "cool running")) (if (eq apm 1) "on" "off")))) seconds minutes hours remaining-time) commit bc75589b905f70753ce2ce5f854efb423781287e Author: Martin Rudalics Date: Wed Mar 13 10:45:28 2019 +0100 Document restrictions when setting window margins, fringes or scroll bars * src/window.c (Fset_window_margins, Fset_window_fringes) (Fset_window_scroll_bars): In doc-strings tell that a window must be large enough to accommodate fringes, sroll bars and margins of the desired size. * doc/lispref/display.texi (Fringe Size/Pos, Scroll Bars) (Display Margins): Tell that windows must be large enough to accommodate fringes, sroll bars and margins of the desired size. diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 7892c15b46..e3ee62ffb6 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -3916,6 +3916,9 @@ fringe, and likewise @var{right} for the right fringe. A value of @var{outside-margins} is non-@code{nil}, that specifies that fringes should appear outside of the display margins. +If @var{window} is not large enough to accommodate fringes of the +desired width, this leaves the fringes of @var{window} unchanged. + The values specified here may be later overridden by invoking @code{set-window-buffer} (@pxref{Buffers and Windows}) on @var{window} with its @var{keep-margins} argument @code{nil} or omitted. @@ -4337,6 +4340,9 @@ vertical scroll bar. The possible values are @code{bottom}, @code{t}, which means to use the frame's default, and @code{nil} for no horizontal scroll bar. +If @var{window} is not large enough to accommodate a scroll bar of the +desired dimension, this leaves the corresponding scroll bar unchanged. + The values specified here may be later overridden by invoking @code{set-window-buffer} (@pxref{Buffers and Windows}) on @var{window} with its @var{keep-margins} argument @code{nil} or omitted. @@ -4926,6 +4932,9 @@ This function specifies the margin widths for window @var{window}, in character cell units. The argument @var{left} controls the left margin, and @var{right} controls the right margin (default @code{0}). +If @var{window} is not large enough to accommodate margins of the +desired width, this leaves the margins of @var{window} unchanged. + The values specified here may be later overridden by invoking @code{set-window-buffer} (@pxref{Buffers and Windows}) on @var{window} with its @var{keep-margins} argument @code{nil} or omitted. diff --git a/src/window.c b/src/window.c index 7b879d0e1e..04183abb7c 100644 --- a/src/window.c +++ b/src/window.c @@ -7076,7 +7076,9 @@ reserve for the left marginal area. Optional third arg RIGHT-WIDTH does the same for the right marginal area. A nil width parameter means no margin. -Return t if any margin was actually changed and nil otherwise. */) +Leave margins unchanged if WINDOW is not large enough to accommodate +margins of the desired width. Return t if any margin was actually +changed and nil otherwise. */) (Lisp_Object window, Lisp_Object left_width, Lisp_Object right_width) { struct window *w = set_window_margins (decode_live_window (window), @@ -7158,11 +7160,14 @@ the left fringe. Optional third arg RIGHT-WIDTH specifies the right fringe width. If a fringe width arg is nil, that means to use the frame's default fringe width. Default fringe widths can be set with the command `set-fringe-style'. + If optional fourth arg OUTSIDE-MARGINS is non-nil, draw the fringes outside of the display margins. By default, fringes are drawn between display marginal areas and the text area. -Return t if any fringe was actually changed and nil otherwise. */) +Leave fringes unchanged if WINDOW is not large enough to accommodate +fringes of the desired width. Return t if any fringe was actually +changed and nil otherwise. */) (Lisp_Object window, Lisp_Object left_width, Lisp_Object right_width, Lisp_Object outside_margins) { @@ -7287,6 +7292,8 @@ horizontal scroll bar: bottom, nil, or t where nil means to not display a horizontal scroll bar on WINDOW and t means to use WINDOW frame's horizontal scroll bar type. +If WINDOW is not large enough to accommodate a scroll bar of the +desired dimension, leave the corresponding scroll bar unchanged. Return t if scroll bars were actually changed and nil otherwise. */) (Lisp_Object window, Lisp_Object width, Lisp_Object vertical_type, Lisp_Object height, Lisp_Object horizontal_type) commit c8bf09ed0b3ab0ef3c22c3dcfa9e18f44cb3be1b Author: Christopher Wellons Date: Tue Mar 12 16:35:28 2019 -0400 * lisp/mail/hashcash.el: Get rid of backquoted lambdas Copyright-paperwork-exempt: yes (hashcash-generate-payment-async): η-reduce. (hashcash-insert-payment-async): Use proper closure. diff --git a/lisp/mail/hashcash.el b/lisp/mail/hashcash.el index 59200eaab8..519c6d94e1 100644 --- a/lisp/mail/hashcash.el +++ b/lisp/mail/hashcash.el @@ -182,8 +182,7 @@ Return immediately. Call CALLBACK with process and result when ready." (setq hashcash-process-alist (cons (cons process (current-buffer)) hashcash-process-alist)) - (set-process-filter process `(lambda (process output) - (funcall ,callback process output)))) + (set-process-filter process callback)) (funcall callback nil nil))) (defun hashcash-check-payment (token str val) @@ -244,8 +243,8 @@ Only start calculation. Results are inserted when ready." (hashcash-generate-payment-async (hashcash-payment-to arg) (hashcash-payment-required arg) - `(lambda (process payment) - (hashcash-insert-payment-async-2 ,(current-buffer) process payment))))) + (lambda (process payment) + (hashcash-insert-payment-async-2 (current-buffer) process payment))))) (defun hashcash-insert-payment-async-2 (buffer process pay) (when (buffer-live-p buffer) commit 3ec05e1c3b4c46cf48e7039175d96596dd4b94be Author: Michael Albinus Date: Tue Mar 12 19:40:16 2019 +0100 * lisp/net/tramp-adb.el (tramp-adb-handle-make-process): Use proper range when deleting the region. diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 33ff4ccace..632ad12667 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -1011,7 +1011,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." ;; order to cleanup the prompt afterwards. (tramp-adb-maybe-open-connection v) (widen) - (delete-region mark (point)) + (delete-region mark (point-max)) (narrow-to-region (point-max) (point-max)) ;; Send the command. (let* ((p (tramp-get-connection-process v)) @@ -1127,12 +1127,14 @@ This happens for Android >= 4.0." (tramp-adb-maybe-open-connection vec) (tramp-message vec 6 "%s" command) (tramp-send-string vec command) - ;; fixme: Race condition + ;; FIXME: Race condition. (tramp-adb-wait-for-output (tramp-get-connection-process vec)) (with-current-buffer (tramp-get-connection-buffer vec) (save-excursion (goto-char (point-min)) - ;; We can't use stty to disable echo of command. + ;; We can't use stty to disable echo of command. stty is said + ;; to be added to toybox 0.7.6. busybox shall have it, but this + ;; isn't used any longer for Android. (delete-matching-lines (regexp-quote command)) ;; When the local machine is W32, there are still trailing ^M. ;; There must be a better solution by setting the correct coding commit aa1a4cceca2d93d83c721ce83950230739073727 Author: Alan Mackenzie Date: Tue Mar 12 18:33:31 2019 +0000 Correct the indentation of CC Mode brace lists while preserving the indentation of nested C++ uniform initialization. * lisp/progmodes/cc-align.el (c-lineup-2nd-brace-entry-in-arglist) (c-lineup-class-decl-init-+, c-lineup-class-decl-init-after-brace): New indentation functions. * lisp/progmodes/cc-engine.el (c-forward-class-decl): New function. (c-do-declarators): New function, partially extracted from c-font-lock-declarators, which now calls the new function. (c-inside-bracelist-p): Amend the introductory comment. (c-add-stmt-syntax): Add code to prevent the spurious recognition of a 'defun-block-intro when a brace pair is used as an initializer. (c-evaluate-offset): No longer ignore vectors of length >= 2. (c-calc-offset): Refactor clumsily nested `if'/`or' into a cond form. * lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Replace the bulk of this function by a call to the new c-forward-class-decl. * lisp/progmodes/cc-langs.el (c-type-decl-prefix-key): Recognize "~" as a type decl operator. * lisp/progmodes/cc-mode.el (c-fl-decl-start): While searching backward for a "}" at an EOD, deal with actually finding the end of a brace list. * doc/misc/cc-mode.texi (List Line-Up): document c-lineup-2nd-brace-entry-in-arglist, c-lineup-class-decl-init-+, and c-lineup-class-decl-init-after-brace. * lisp/progmodes/cc-styles.el (c-style-alist): In styles "gnu", "bsd", "stroustrup", "python", and "java", change the offset for brace-list-intro from the default value or c-lineup-arglist-intro-after-paren to a list beginning with the symbol first, followed by two of the new alignment functions, followed by +. * lisp/progmodes/cc-vars.el (c-offset-alist): Change the default value of brace-list-entry from c-lineup-under-anchor back to 0. diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 0c77cc0ee6..170149eb55 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -5638,9 +5638,9 @@ any problems writing custom line-up functions for AWK mode. The calling convention for line-up functions is described fully in @ref{Custom Line-Up}. Roughly speaking, the return value is either an -offset itself (such as @code{+} or @code{[0]}) or it's @code{nil}, -meaning ``this function is inappropriate in this case; try a -different one''. @xref{c-offsets-alist}. +offset itself (such as @code{+} or @code{[0]}), another line-up +function, or it's @code{nil}, meaning ``this function is inappropriate +in this case - try a different one''. @xref{c-offsets-alist}. The subsections below describe all the standard line-up functions, categorized by the sort of token the lining-up centers around. For @@ -5995,6 +5995,125 @@ brace block. @comment ------------------------------------------------------------ +@defun c-lineup-2nd-brace-entry-in-arglist +@findex lineup-2nd-brace-entry-in-arglist (c-) +Line up the second entry of a brace block under the first, when the +first line is also contained in an arglist or an enclosing brace +@emph{on that line}. + +I.e. handle something like the following: + +@example +@group +set_line (line_t @{point_t@{0.4, 0.2@}, + point_t@{0.2, 0.5@}, @hereFn{brace-list-intro} + .....@}); + ^ enclosing parenthesis. +@end group +@end example + + +The middle line of that example will have a syntactic context with +three syntactic symbols, @code{arglist-cont-nonempty}, +@code{brace-list-intro}, and @code{brace-list-entry} (@pxref{Brace +List Symbols}). + +This function is intended for use in a list. If the construct being +analyzed isn't like the preceding, the function returns nil. +Otherwise it returns the function +@code{c-lineup-arglist-intro-after-paren}, which the caller then uses +to perform indentation. + +@workswith{} @code{brace-list-intro}. +@end defun + +@comment ------------------------------------------------------------ + +@defun c-lineup-class-decl-init-+ +@findex lineup-class-decl-init-+ (c-) +Line up the second entry of a class (etc.) initializer +@code{c-basic-offset} characters in from the identifier when: +@enumerate +@item +The type is a class, struct, union, etc. (but not an enum); +@item +There is a brace block in the type declaration, specifying it; and +@item +The first element of the initializer is on the same line as its +opening brace. +@end enumerate + +I.e. we have a construct like this: + +@example +@group +struct STR @{ + int i; float f; +@} str_1 = @{1, 1.7@}, + str_2 = @{2, + 3.1 @hereFn{brace-list-intro} + @}; + @sssTBasicOffset{} +@end group +@end example + + +Note that the syntactic context of the @code{brace-list-intro} line +also has a syntactic element with the symbol @code{brace-list-entry} +(@pxref{Brace List Symbols}). + +This function is intended for use in a list. If the above structure +isn't present, the function returns nil, allowing a different offset +specification to indent the line. + +@workswith{} @code{brace-list-intro}. +@end defun + +@comment ------------------------------------------------------------ + +@defun c-lineup-class-decl-init-after-brace +@findex lineup-class-decl-init-after-brace (c-) +Line up the second entry of a class (etc.) initializer after its +opening brace when: +@enumerate +@item +The type is a class, struct, union, etc. (but not an enum); +@item +There is a brace block in the type declaration, specifying it; and +@item +The first element of the initializer is on the same line as its +opening brace. +@end enumerate + +I.e. we have a construct like this: + +@example +@group +struct STR @{ + int i; float f; +@} str_1 = @{1, 1.7@}, + str_2 = @{2, + 3.1 @hereFn{brace-list-intro} + @}; +@end group +@end example + + +Note that the syntactic context of the @code{brace-list-intro} line +also has a syntactic element with the symbol @code{brace-list-entry} +(@pxref{Brace List Symbols}). Also note that this function works by +returning the symbol @code{c-lineup-arglist-intro-after-paren}, which +the caller then uses to perform the indentation. + +This function is intended for use in a list. If the above structure +isn't present, the function returns nil, allowing a different offset +specification to indent the line. + +@workswith{} @code{brace-list-intro}. +@end defun + +@comment ------------------------------------------------------------ + @defun c-lineup-multi-inher @findex lineup-multi-inher @r{(c-)} Line up the classes in C++ multiple inheritance clauses and member diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el index 1f94bfd4fe..009f58ea58 100644 --- a/lisp/progmodes/cc-align.el +++ b/lisp/progmodes/cc-align.el @@ -1083,6 +1083,130 @@ arglist-cont." (vector (+ (current-column) c-basic-offset)))) (vector 0))))) +(defun c-lineup-2nd-brace-entry-in-arglist (langelem) + "Lineup the second entry of a brace block under the first, when the first +line is also contained in an arglist or an enclosing brace ON THAT LINE. + +I.e. handle something like the following: + + set_line (line_t {point_t{0.4, 0.2}, + point_t{0.2, 0.5}, <---- brace-list-intro + .....}); + ^ enclosing parenthesis. + +The middle line of that example will have a syntactic context +with three syntactic symbols, arglist-cont-nonempty, brace-list-intro, and +brace-list-entry. + +This function is intended for use in a list. If the construct +being analyzed isn't like the preceding, the function returns nil. +Otherwise it returns the function `c-lineup-arglist-intro-after-paren', which +the caller then uses to perform indentation. + +Works with brace-list-intro." + ;; brace-list-intro and brace-list-entry are both present for the second + ;; entry of the list when the first entry is on the same line as the opening + ;; brace. + (and (assq 'brace-list-intro c-syntactic-context) + (assq 'brace-list-entry c-syntactic-context) + (or (assq 'arglist-cont-nonempty c-syntactic-context) ; "(" earlier on + ; the line. + (save-excursion ; "{" earlier on the line + (goto-char (c-langelem-pos + (assq 'brace-list-intro c-syntactic-context))) + (and + (eq (c-backward-token-2 + 1 nil + (c-point 'bol (c-langelem-pos + (assq 'brace-list-entry + c-syntactic-context)))) + 0) + (eq (char-after) ?{)))) + 'c-lineup-arglist-intro-after-paren)) + +(defun c-lineup-class-decl-init-+ (langelem) + "Line up the second entry of a class (etc.) initializer c-basic-offset +characters in from the identifier when: +\(i) The type is a class, struct, union, etc. (but not an enum); +\(ii) There is a brace block in the type declaration, specifying it; and +\(iii) The first element of the initializer is on the same line as its opening +brace. + +I.e. we have a construct like this: + + struct STR { + int i; float f; + } str_1 = {1, 1.7}, + str_2 = {2, + 3.1 <---- brace-list-intro + }; + <--> <---- c-basic-offset + +Note that the syntactic context of the brace-list-intro line also has a +syntactic element with the symbol brace-list-entry. + +This function is intended for use in a list. If the above structure isn't +present, this function returns nil, allowing a different offset specification +to indent the line. + +Works with: brace-list-intro." + (and (assq 'brace-list-intro c-syntactic-context) + (assq 'brace-list-entry c-syntactic-context) + (let ((init-pos (c-point 'boi (c-langelem-pos + (assq 'brace-list-entry + c-syntactic-context)))) + ) + (save-excursion + (goto-char (c-langelem-pos (assq 'brace-list-intro + c-syntactic-context))) + (and + (c-forward-class-decl) + (not (c-do-declarators init-pos t nil nil nil)) + (eq (point) init-pos) + (vector (+ (current-column) c-basic-offset))))))) + +(defun c-lineup-class-decl-init-after-brace (langelem) + "Line up the second entry of a class (etc.) initializer after its opening +brace when: +\(i) The type is a class, struct, union, etc. (but not an enum); +\(ii) There is a brace block in the type declaration, specifying it; and +\(iii) The first element of the initializer is on the same line as its opening +brace. + +I.e. we have a construct like this: + + struct STR { + int i; float f; + } str_1 = {1, 1.7}, + str_2 = {2, + 3.1 <---- brace-list-intro + }; + +Note that the syntactic context of the brace-list-intro line also has a +syntactic element with the symbol brace-list-entry. Also note that this +function works by returning the symbol `c-lineup-arglist-intro-after-paren', +which the caller then uses to perform the indentation. + +This function is intended for use in a list. If the above structure isn't +present, this function returns nil, allowing a different offset specification +to indent the line. + +Works with: brace-list-intro." + (and (assq 'brace-list-intro c-syntactic-context) + (assq 'brace-list-entry c-syntactic-context) + (let ((init-pos (c-point 'boi (c-langelem-pos + (assq 'brace-list-entry + c-syntactic-context)))) + ) + (save-excursion + (goto-char (c-langelem-pos (assq 'brace-list-intro + c-syntactic-context))) + (and + (c-forward-class-decl) + (not (c-do-declarators init-pos t nil nil nil)) + (eq (point) init-pos) + 'c-lineup-arglist-intro-after-paren))))) + (defun c-lineup-cpp-define (_langelem) "Line up macro continuation lines according to the indentation of the construct preceding the macro. E.g.: diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 301d07c9c9..fd66928099 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -8040,49 +8040,28 @@ comment at the start of cc-engine.el for more info." (or res (goto-char here)) res)) +(defun c-forward-class-decl () + "From the beginning of a struct/union, etc. move forward to +after the brace block which defines it, leaving point at the +start of the next token and returning point. On failure leave +point unchanged and return nil." + (let ((here (point))) + (if + (and + (looking-at c-class-key) + (eq (c-forward-token-2) 0) + (c-on-identifier) + (eq (c-forward-token-2) 0) + (eq (char-after) ?{) + (c-go-list-forward)) + (progn + (c-forward-syntactic-ws) + (point)) + (goto-char here) + nil))) ;; Handling of large scale constructs like statements and declarations. -;; Macro used inside `c-forward-decl-or-cast-1'. It ought to be a -;; defsubst or perhaps even a defun, but it contains lots of free -;; variables that refer to things inside `c-forward-decl-or-cast-1'. -(defmacro c-fdoc-shift-type-backward (&optional short) - ;; `c-forward-decl-or-cast-1' can consume an arbitrary length list - ;; of types when parsing a declaration, which means that it - ;; sometimes consumes the identifier in the declaration as a type. - ;; This is used to "backtrack" and make the last type be treated as - ;; an identifier instead. - `(progn - ,(unless short - ;; These identifiers are bound only in the inner let. - '(setq identifier-type at-type - identifier-start type-start - got-parens nil - got-identifier t - got-suffix t - got-suffix-after-parens id-start - paren-depth 0)) - - (if (setq at-type (if (eq backup-at-type 'prefix) - t - backup-at-type)) - (setq type-start backup-type-start - id-start backup-id-start) - (setq type-start start-pos - id-start start-pos)) - - ;; When these flags already are set we've found specifiers that - ;; unconditionally signal these attributes - backtracking doesn't - ;; change that. So keep them set in that case. - (or at-type-decl - (setq at-type-decl backup-at-type-decl)) - (or maybe-typeless - (setq maybe-typeless backup-maybe-typeless)) - - ,(unless short - ;; This identifier is bound only in the inner let. - '(setq start id-start)))) - (defun c-forward-declarator (&optional limit accept-anon) ;; Assuming point is at the start of a declarator, move forward over it, ;; leaving point at the next token after it (e.g. a ) or a ; or a ,). @@ -8235,6 +8214,176 @@ comment at the start of cc-engine.el for more info." (goto-char here) nil))) +(defun c-do-declarators + (cdd-limit cdd-list cdd-not-top cdd-comma-prop cdd-function) + "Assuming point is at the start of a comma separated list of declarators, +apply CDD-FUNCTION to each declarator (when CDD-LIST is non-nil) or just the +first declarator (when CDD-LIST is nil). When CDD-FUNCTION is nil, no +function is applied. + +CDD-FUNCTION is supplied with 6 arguments: +0. The start position of the declarator's identifier; +1. The end position of this identifier; +\[Note: if there is no identifier, as in int (*);, both of these are nil.] +2. The position of the next token after the declarator (CLARIFY!!!). +3. CDD-NOT-TOP; +4. Non-nil if the identifier is of a function. +5. When there is an initialization following the declarator (such as \"= +....\" or \"( ....\".), the character which introduces this initialization, +otherwise nil. + +Additionally, if CDD-COMMA-PROP is non-nil, mark the separating commas with +this value of the c-type property, when CDD-LIST is non-nil. + +Stop at or before CDD-LIMIT (which may NOT be nil). + +If CDD-NOT-TOP is non-nil, we are not at the top-level (\"top-level\" includes +being directly inside a class or namespace, etc.). + +Return non-nil if we've reached the token after the last declarator (often a +semicolon, or a comma when CDD-LIST is nil); otherwise (when we hit CDD-LIMIT, +or fail otherwise) return nil, leaving point at the beginning of the putative +declarator that could not be processed. + +This function might do hidden buffer changes." + ;; N.B.: We use the "cdd-" prefix in this routine to try to prevent + ;; confusion with possible reference to common variable names from within + ;; CDD-FUNCTION. + (let + ((cdd-pos (point)) cdd-next-pos cdd-id-start cdd-id-end + cdd-decl-res cdd-got-func cdd-got-type cdd-got-init + c-last-identifier-range cdd-exhausted) + + ;; The following `while' applies `cdd-function' to a single declarator id + ;; each time round. It loops only when CDD-LIST is non-nil. + (while + (and (not cdd-exhausted) + (setq cdd-decl-res (c-forward-declarator cdd-limit))) + (setq cdd-next-pos (point) + cdd-id-start (car cdd-decl-res) + cdd-id-end (cadr cdd-decl-res) + cdd-got-func (and (eq (char-after) ?\() + (or (not (c-major-mode-is 'c++-mode)) + (not cdd-not-top) + (car (cddr (cddr cdd-decl-res))) ; Id is in + ; parens, etc. + (save-excursion + (forward-char) + (c-forward-syntactic-ws) + (looking-at "[*&]"))) + (not (car (cddr cdd-decl-res))) + (or (not (c-major-mode-is 'c++-mode)) + (save-excursion + (let (c-last-identifier-range) + (forward-char) + (c-forward-syntactic-ws) + (catch 'is-function + (while + (progn + (if (eq (char-after) ?\)) + (throw 'is-function t)) + (setq cdd-got-type (c-forward-type)) + (cond + ((null cdd-got-type) + (throw 'is-function nil)) + ((not (eq cdd-got-type 'maybe)) + (throw 'is-function t))) + (c-forward-declarator nil t) + (eq (char-after) ?,)) + (forward-char) + (c-forward-syntactic-ws)) + t))))) + cdd-got-init (and (cadr (cddr cdd-decl-res)) + (char-after))) + + ;; Jump past any initializer or function prototype to see if + ;; there's a ',' to continue at. + (cond (cdd-got-func + ;; Skip a parenthesized initializer (C++) or a function + ;; prototype. + (if (c-go-list-forward (point) cdd-limit) ; over the parameter list. + (c-forward-syntactic-ws cdd-limit) + (setq cdd-exhausted t))) ; unbalanced parens + + (cdd-got-init ; "=" sign OR opening "(", "[", or "{" + ;; Skip an initializer expression. If we're at a '=' + ;; then accept a brace list directly after it to cope + ;; with array initializers. Otherwise stop at braces + ;; to avoid going past full function and class blocks. + (if (and (if (and (eq cdd-got-init ?=) + (= (c-forward-token-2 1 nil cdd-limit) 0) + (looking-at "{")) + (c-go-list-forward (point) cdd-limit) + t) + ;; FIXME: Should look for c-decl-end markers here; + ;; we might go far into the following declarations + ;; in e.g. ObjC mode (see e.g. methods-4.m). + (c-syntactic-re-search-forward "[;,{]" cdd-limit 'move t)) + (backward-char) + (setq cdd-exhausted t) + )) + + (t (c-forward-syntactic-ws cdd-limit))) + + (if cdd-function + (funcall cdd-function cdd-id-start cdd-id-end cdd-next-pos + cdd-not-top cdd-got-func cdd-got-init)) + + ;; If a ',' is found we set cdd-pos to the next declarator and iterate. + (if (and cdd-list (< (point) cdd-limit) (looking-at ",")) + (progn + (when cdd-comma-prop + (c-put-char-property (point) 'c-type cdd-comma-prop)) + (forward-char) + (c-forward-syntactic-ws cdd-limit) + (setq cdd-pos (point))) + (setq cdd-exhausted t))) + + (if (> (point) cdd-pos) + t + (goto-char cdd-pos) + nil))) + +;; Macro used inside `c-forward-decl-or-cast-1'. It ought to be a +;; defsubst or perhaps even a defun, but it contains lots of free +;; variables that refer to things inside `c-forward-decl-or-cast-1'. +(defmacro c-fdoc-shift-type-backward (&optional short) + ;; `c-forward-decl-or-cast-1' can consume an arbitrary length list + ;; of types when parsing a declaration, which means that it + ;; sometimes consumes the identifier in the declaration as a type. + ;; This is used to "backtrack" and make the last type be treated as + ;; an identifier instead. + `(progn + ,(unless short + ;; These identifiers are bound only in the inner let. + '(setq identifier-type at-type + identifier-start type-start + got-parens nil + got-identifier t + got-suffix t + got-suffix-after-parens id-start + paren-depth 0)) + + (if (setq at-type (if (eq backup-at-type 'prefix) + t + backup-at-type)) + (setq type-start backup-type-start + id-start backup-id-start) + (setq type-start start-pos + id-start start-pos)) + + ;; When these flags already are set we've found specifiers that + ;; unconditionally signal these attributes - backtracking doesn't + ;; change that. So keep them set in that case. + (or at-type-decl + (setq at-type-decl backup-at-type-decl)) + (or maybe-typeless + (setq maybe-typeless backup-maybe-typeless)) + + ,(unless short + ;; This identifier is bound only in the inner let. + '(setq start id-start)))) + (defun c-forward-decl-or-cast-1 (preceding-token-end context last-cast-end) ;; Move forward over a declaration or a cast if at the start of one. ;; The point is assumed to be at the start of some token. Nil is @@ -10727,12 +10876,17 @@ comment at the start of cc-engine.el for more info." ))) (defun c-inside-bracelist-p (containing-sexp paren-state accept-in-paren) - ;; return the buffer position of the beginning of the brace list - ;; statement if we're inside a brace list, otherwise return nil. - ;; CONTAINING-SEXP is the buffer pos of the innermost containing - ;; paren. PAREN-STATE is the remainder of the state of enclosing - ;; braces. ACCEPT-IN-PAREN is non-nil iff we will accept as a brace - ;; list a brace directly enclosed in a parenthesis. + ;; return the buffer position of the beginning of the brace list statement + ;; if CONTAINING-SEXP is inside a brace list, otherwise return nil. + ;; + ;; CONTAINING-SEXP is the buffer pos of the innermost containing paren. NO + ;; IT ISN'T!!! [This function is badly designed, and probably needs + ;; reformulating without its first argument, and the critical position being + ;; at point.] + ;; + ;; PAREN-STATE is the remainder of the state of enclosing braces. + ;; ACCEPT-IN-PAREN is non-nil iff we will accept as a brace list a brace + ;; directly enclosed in a parenthesis. ;; ;; The "brace list" here is recognized solely by its context, not by ;; its contents. @@ -10852,7 +11006,8 @@ comment at the start of cc-engine.el for more info." (defun c-looking-at-statement-block () ;; Point is at an opening brace. If this is a statement block (i.e. the ;; elements in the block are terminated by semicolons, or the block is - ;; empty, or the block contains a keyword) return t. Otherwise, return nil. + ;; empty, or the block contains a keyword) return non-nil. Otherwise, + ;; return nil. (let ((here (point))) (prog1 (if (c-go-list-forward) @@ -11356,7 +11511,7 @@ comment at the start of cc-engine.el for more info." (if (and (eq step-type 'same) (/= paren-pos (point))) - (let (inexpr) + (let (inexpr bspec) (cond ((save-excursion (goto-char paren-pos) @@ -11378,6 +11533,13 @@ comment at the start of cc-engine.el for more info." (c-looking-at-statement-block)) (c-add-syntax 'defun-block-intro nil) (c-add-syntax 'brace-list-intro nil))) + ((save-excursion + (goto-char paren-pos) + (setq bspec (c-looking-at-or-maybe-in-bracelist + containing-sexp containing-sexp)) + (and (consp bspec) + (eq (cdr bspec) 'in-paren))) + (c-add-syntax 'brace-list-intro (car bspec))) (t (c-add-syntax 'defun-block-intro nil)))) (c-add-syntax 'statement-block-intro nil))) @@ -13242,7 +13404,7 @@ Cannot combine absolute offsets %S and %S in `add' method" nil)))) (if (or (null res) (integerp res) - (and (vectorp res) (= (length res) 1) (integerp (aref res 0)))) + (and (vectorp res) (>= (length res) 1) (integerp (aref res 0)))) res (c-benign-error "Error evaluating offset %S for %s: Got invalid value %S" offset symbol res) @@ -13265,12 +13427,11 @@ Cannot combine absolute offsets %S and %S in `add' method" (if c-strict-syntax-p (c-benign-error "No offset found for syntactic symbol %s" symbol)) (setq offset 0)) - (if (vectorp offset) - offset - (or (and (numberp offset) offset) - (and (symbolp offset) (symbol-value offset)) - 0)) - )) + (cond + ((or (vectorp offset) (numberp offset)) + offset) + ((and (symbolp offset) (symbol-value offset))) + (t 0)))) (defun c-get-offset (langelem) ;; This is a compatibility wrapper for `c-calc-offset' in case diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index 0588032fdb..0b41eff157 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -1032,114 +1032,41 @@ casts and declarations are fontified. Used on level 2 and higher." ;;(message "c-font-lock-declarators from %s to %s" (point) limit) (c-fontify-types-and-refs - ((pos (point)) next-pos id-start - decl-res - id-face got-type got-init - c-last-identifier-range - (separator-prop (if types 'c-decl-type-start 'c-decl-id-start))) - - ;; The following `while' fontifies a single declarator id each time round. - ;; It loops only when LIST is non-nil. - (while - (and pos (setq decl-res (c-forward-declarator))) - (setq next-pos (point) - id-start (car decl-res) - id-face (if (and (eq (char-after) ?\() - (or (not (c-major-mode-is 'c++-mode)) - (not not-top) - (car (cddr (cddr decl-res))) ; Id is in - ; parens, etc. - (save-excursion - (forward-char) - (c-forward-syntactic-ws) - (looking-at "[*&]"))) - (not (car (cddr decl-res))) - (or (not (c-major-mode-is 'c++-mode)) - (save-excursion - (let (c-last-identifier-range) - (forward-char) - (c-forward-syntactic-ws) - (catch 'is-function - (while - (progn - (if (eq (char-after) ?\)) - (throw 'is-function t)) - (setq got-type (c-forward-type)) - (cond - ((null got-type) - (throw 'is-function nil)) - ((not (eq got-type 'maybe)) - (throw 'is-function t))) - (c-forward-declarator nil t) - (eq (char-after) ?,)) - (forward-char) - (c-forward-syntactic-ws)) - t))))) - 'font-lock-function-name-face - 'font-lock-variable-name-face) - got-init (and (cadr (cddr decl-res)) ; got-init - (char-after))) - - (if types - ;; Register and fontify the identifier as a type. - (let ((c-promote-possible-types t)) - (goto-char id-start) - (c-forward-type)) - ;; Fontify the last symbol in the identifier if it isn't fontified - ;; already. The check is necessary only in certain cases where this - ;; function is used "sloppily", e.g. in `c-simple-decl-matchers'. - (when (and c-last-identifier-range - (not (get-text-property (car c-last-identifier-range) - 'face))) - (c-put-font-lock-face (car c-last-identifier-range) - (cdr c-last-identifier-range) - id-face))) - - (goto-char next-pos) - (setq pos nil) ; So as to terminate the enclosing `while' form. - (if (and template-class - (eq got-init ?=) ; C++ ""? - (c-forward-token-2 1 nil limit) ; Over "=" - (let ((c-promote-possible-types t)) - (c-forward-type t))) ; Over "Y" - (setq list nil)) ; Shouldn't be needed. We can't have a list, here. - - (when list - ;; Jump past any initializer or function prototype to see if - ;; there's a ',' to continue at. - (cond ((eq id-face 'font-lock-function-name-face) - ;; Skip a parenthesized initializer (C++) or a function - ;; prototype. - (if (c-safe (c-forward-sexp 1) t) ; over the parameter list. - (c-forward-syntactic-ws limit) - (goto-char limit))) ; unbalanced parens - - (got-init ; "=" sign OR opening "(", "[", or "{" - ;; Skip an initializer expression. If we're at a '=' - ;; then accept a brace list directly after it to cope - ;; with array initializers. Otherwise stop at braces - ;; to avoid going past full function and class blocks. - (and (if (and (eq got-init ?=) - (= (c-forward-token-2 1 nil limit) 0) - (looking-at "{")) - (c-safe (c-forward-sexp) t) ; over { .... } - t) - (< (point) limit) - ;; FIXME: Should look for c-decl-end markers here; - ;; we might go far into the following declarations - ;; in e.g. ObjC mode (see e.g. methods-4.m). - (c-syntactic-re-search-forward "[;,{]" limit 'move t) - (backward-char))) - - (t (c-forward-syntactic-ws limit))) - - ;; If a ',' is found we set pos to the next declarator and iterate. - (when (and (< (point) limit) (looking-at ",")) - (c-put-char-property (point) 'c-type separator-prop) - (forward-char) - (c-forward-syntactic-ws limit) - (setq pos (point)))))) ; acts to make the `while' form continue. - nil) + () + (c-do-declarators + limit list not-top + (if types 'c-decl-type-start 'c-decl-id-start) + (lambda (id-start id-end end-pos not-top is-function init-char) + (if types + ;; Register and fontify the identifier as a type. + (let ((c-promote-possible-types t)) + (goto-char id-start) + (c-forward-type)) + ;; The following doesn't work properly (yet, 2018-09-22). + ;; (c-put-font-lock-face id-start id-end + ;; (if is-function + ;; 'font-lock-function-name-face + ;; 'font-lock-variable-name-face)) + (when (and c-last-identifier-range + (not (get-text-property (car c-last-identifier-range) + 'face))) + ;; We use `c-last-identifier-range' rather than `id-start' and + ;; `id-end', since the latter two can be erroneous. E.g. in + ;; "~Foo", `id-start' is at the tilde. This is a bug in + ;; `c-forward-declarator'. + (c-put-font-lock-face (car c-last-identifier-range) + (cdr c-last-identifier-range) + (if is-function + 'font-lock-function-name-face + 'font-lock-variable-name-face)))) + (and template-class + (eq init-char ?=) ; C++ ""? + (progn + (goto-char end-pos) + (c-forward-token-2 1 nil limit) ; Over "=" + (let ((c-promote-possible-types t)) + (c-forward-type t)))))) + nil)) (defun c-get-fontification-context (match-pos not-front-decl &optional toplev) ;; Return a cons (CONTEXT . RESTRICTED-<>-ARGLISTS) for MATCH-POS. diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 53342713b4..7cc8029e0a 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -3258,7 +3258,7 @@ Identifier syntax is in effect when this is matched \(see "\\|" "\\.\\.\\." "\\|" - "[*(&]" + "[*(&~]" "\\|" (c-lang-const c-type-decl-prefix-key) "\\|" diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 4e63bd9144..8343978fc3 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1803,7 +1803,16 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".") ;; Go to a less nested declaration each time round this loop. (and (setq old-pos (point)) - (c-syntactic-skip-backward "^;{}" bod-lim t) + (let (pseudo) + (while + (progn + (c-syntactic-skip-backward "^;{}" bod-lim t) + (and (eq (char-before) ?}) + (save-excursion + (backward-char) + (setq pseudo (c-cheap-inside-bracelist-p (c-parse-state)))))) + (goto-char pseudo)) + t) (> (point) bod-lim) (progn (c-forward-syntactic-ws) ;; Have we got stuck in a comment at EOB? diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el index d2c4100871..92ea67128f 100644 --- a/lisp/progmodes/cc-styles.el +++ b/lisp/progmodes/cc-styles.el @@ -68,7 +68,9 @@ (arglist-close . c-lineup-arglist) (inline-open . 0) (brace-list-open . +) - (brace-list-intro . c-lineup-arglist-intro-after-paren) + (brace-list-intro . (first + c-lineup-2nd-brace-entry-in-arglist + c-lineup-class-decl-init-+ +)) (topmost-intro-cont . (first c-lineup-topmost-intro-cont c-lineup-gnu-DEFUN-intro-cont)))) @@ -95,6 +97,9 @@ (label . 0) (statement-cont . +) (inline-open . 0) + (brace-list-intro . (first + c-lineup-2nd-brace-entry-in-arglist + c-lineup-class-decl-init-+ +)) (inexpr-class . 0)))) ("stroustrup" @@ -104,6 +109,9 @@ (substatement-open . 0) (substatement-label . 0) (label . 0) + (brace-list-intro . (first + c-lineup-2nd-brace-entry-in-arglist + c-lineup-class-decl-init-+ +)) (statement-cont . +)))) ("whitesmith" @@ -194,6 +202,9 @@ (c-offsets-alist . ((substatement-open . 0) (inextern-lang . 0) (arglist-intro . +) + (brace-list-intro . (first + c-lineup-2nd-brace-entry-in-arglist + c-lineup-class-decl-init-+ +)) (knr-argdecl-intro . +))) (c-hanging-braces-alist . ((brace-list-open) (brace-list-intro) @@ -219,6 +230,9 @@ (statement-cont . +) (arglist-intro . c-lineup-arglist-intro-after-paren) (arglist-close . c-lineup-arglist) + (brace-list-intro . (first + c-lineup-2nd-brace-entry-in-arglist + c-lineup-class-decl-init-+ +)) (access-label . 0) (inher-cont . c-lineup-java-inher) (func-decl-cont . c-lineup-java-throws)))) diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el index 8953488267..6e8acd4c0d 100644 --- a/lisp/progmodes/cc-vars.el +++ b/lisp/progmodes/cc-vars.el @@ -1115,7 +1115,7 @@ can always override the use of `c-default-style' by making calls to ;; Anchor pos: At the brace list decl start(*). (brace-list-intro . +) ;; Anchor pos: At the brace list decl start(*). - (brace-list-entry . c-lineup-under-anchor) + (brace-list-entry . 0) ;; Anchor pos: At the first non-ws char after the open paren if ;; the first token is on the same line, otherwise boi at that ;; token. commit d58c29b345b40b836eeb0d9452a5940beda01fff Author: Martin Rudalics Date: Tue Mar 12 10:48:19 2019 +0100 Revert last tweak in 'comint-output-filter' * lisp/comint.el (comint-output-filter): Revert last tweak because it can hang gdb indefinitely. diff --git a/lisp/comint.el b/lisp/comint.el index e5012be982..a5fca7ea2a 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2081,7 +2081,7 @@ Make backspaces delete the previous character." (prompt-re (concat "\\`" (regexp-quote prompt)))) (while (string-match prompt-re string) (setq string (substring string (match-end 0))))))) - (while (string-match (concat "\\(" comint-prompt-regexp + (while (string-match (concat "\\(^" comint-prompt-regexp "\\)\\1+") string) (setq string (replace-match "\\1" nil nil string))) commit 1d65985a2b758ba41fe4a7965a282861d7b23d0a Author: Paul Eggert Date: Mon Mar 11 11:07:30 2019 -0700 Reindent pdumper per usual Emacs style * src/pdumper.c, src/pdumper.h: Reindent. diff --git a/src/pdumper.c b/src/pdumper.c index 36a06d9828..56ac531363 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -130,13 +130,13 @@ along with GNU Emacs. If not, see . */ and have the same layout, where pointers are either 32 or 64 bits long, and where bytes have eight bits --- that is, a general-purpose computer made after 1990. */ -verify (sizeof (ptrdiff_t) == sizeof (void*)); +verify (sizeof (ptrdiff_t) == sizeof (void *)); verify (sizeof (intptr_t) == sizeof (ptrdiff_t)); -verify (sizeof (void (*)(void)) == sizeof (void*)); +verify (sizeof (void (*)(void)) == sizeof (void *)); verify (sizeof (ptrdiff_t) <= sizeof (Lisp_Object)); verify (sizeof (ptrdiff_t) <= sizeof (EMACS_INT)); -verify (sizeof (off_t) == sizeof (int32_t) || - sizeof (off_t) == sizeof (int64_t)); +verify (sizeof (off_t) == sizeof (int32_t) + || sizeof (off_t) == sizeof (int64_t)); verify (CHAR_BIT == 8); #define DIVIDE_ROUND_UP(x, y) (((x) + (y) - 1) / (y)) @@ -207,15 +207,13 @@ enum dump_reloc_type RELOC_DUMP_TO_DUMP_PTR_RAW, /* dump_mpz = [rebuild bignum] */ RELOC_BIGNUM, - /* dump_lv = make_lisp_ptr ( - dump_lv + dump_base, - type - RELOC_DUMP_TO_DUMP_LV) + /* dump_lv = make_lisp_ptr (dump_lv + dump_base, + type - RELOC_DUMP_TO_DUMP_LV) (Special case for symbols: make_lisp_symbol) Must be second-last. */ RELOC_DUMP_TO_DUMP_LV, - /* dump_lv = make_lisp_ptr ( - dump_lv + emacs_basis(), - type - RELOC_DUMP_TO_DUMP_LV) + /* dump_lv = make_lisp_ptr (dump_lv + emacs_basis(), + type - RELOC_DUMP_TO_DUMP_LV) (Special case for symbols: make_lisp_symbol.) Must be last. */ RELOC_DUMP_TO_EMACS_LV = RELOC_DUMP_TO_DUMP_LV + 8, @@ -336,11 +334,12 @@ dump_reloc_set_offset (struct dump_reloc *reloc, dump_off offset) error ("dump relocation out of range"); } -static void dump_fingerprint (const char* label, const uint8_t* xfingerprint) { +static void +dump_fingerprint (const char *label, const uint8_t *xfingerprint) +{ fprintf (stderr, "%s: ", label); - for (int i = 0; i <32; ++i) { + for (int i = 0; i < 32; ++i) fprintf (stderr, "%02x", (unsigned) xfingerprint[i]); - } fprintf (stderr, "\n"); } @@ -604,8 +603,8 @@ struct link_weight /* Dump file creation */ static dump_off dump_object (struct dump_context *ctx, Lisp_Object object); -static dump_off dump_object_for_offset ( - struct dump_context *ctx, Lisp_Object object); +static dump_off dump_object_for_offset (struct dump_context *ctx, + Lisp_Object object); /* Like the Lisp function `push'. Return NEWELT. */ static Lisp_Object @@ -694,7 +693,7 @@ _Noreturn static void error_unsupported_dump_object (struct dump_context *ctx, Lisp_Object object, - const char* msg) + const char *msg) { if (dump_tracking_referrers_p (ctx)) print_paths_to_root (ctx, object); @@ -732,9 +731,9 @@ dump_builtin_symbol_p (Lisp_Object object) { if (!SYMBOLP (object)) return false; - char* bp = (char*) lispsym; + char *bp = (char *) lispsym; struct Lisp_Symbol *s = XSYMBOL (object); - char* sp = (char*) s; + char *sp = (char *) s; return bp <= sp && sp < bp + sizeof (lispsym); } @@ -959,16 +958,16 @@ dump_note_reachable (struct dump_context *ctx, Lisp_Object object) /* If this object lives in the Emacs image and not on the heap, return a pointer to the object data. Otherwise, return NULL. */ -static void* +static void * dump_object_emacs_ptr (Lisp_Object lv) { if (SUBRP (lv)) return XSUBR (lv); if (dump_builtin_symbol_p (lv)) return XSYMBOL (lv); - if (XTYPE (lv) == Lisp_Vectorlike && - PSEUDOVECTOR_TYPEP (&XVECTOR (lv)->header, PVEC_THREAD) && - main_thread_p (XTHREAD (lv))) + if (XTYPE (lv) == Lisp_Vectorlike + && PSEUDOVECTOR_TYPEP (&XVECTOR (lv)->header, PVEC_THREAD) + && main_thread_p (XTHREAD (lv))) return XTHREAD (lv); return NULL; } @@ -995,11 +994,10 @@ dump_queue_empty_p (struct dump_queue *dump_queue) Fhash_table_count (dump_queue->link_weights))); if (!is_empty) { - eassert ( - !dump_tailq_empty_p (&dump_queue->zero_weight_objects) || - !dump_tailq_empty_p (&dump_queue->one_weight_normal_objects) || - !dump_tailq_empty_p (&dump_queue->one_weight_strong_objects) || - !dump_tailq_empty_p (&dump_queue->fancy_weight_objects)); + eassert (!dump_tailq_empty_p (&dump_queue->zero_weight_objects) + || !dump_tailq_empty_p (&dump_queue->one_weight_normal_objects) + || !dump_tailq_empty_p (&dump_queue->one_weight_strong_objects) + || !dump_tailq_empty_p (&dump_queue->fancy_weight_objects)); } else { @@ -1085,16 +1083,16 @@ dump_queue_enqueue (struct dump_queue *dump_queue, the object will have a single weight. Put the object on the appropriate single-weight queue. */ weights = Qnil; + struct dump_tailq *tailq; if (!use_single_queues) - dump_tailq_prepend (&dump_queue->fancy_weight_objects, object); + tailq = &dump_queue->fancy_weight_objects; else if (weight.value == WEIGHT_NORMAL.value) - dump_tailq_prepend ( - &dump_queue->one_weight_normal_objects, object); + tailq = &dump_queue->one_weight_normal_objects; else if (weight.value == WEIGHT_STRONG.value) - dump_tailq_prepend ( - &dump_queue->one_weight_strong_objects, object); + tailq = &dump_queue->one_weight_strong_objects; else emacs_abort (); + dump_tailq_prepend (tailq, object); } else if (use_single_queues && NILP (XCDR (weights))) dump_tailq_prepend (&dump_queue->fancy_weight_objects, object); @@ -1169,8 +1167,7 @@ dump_queue_scan_fancy (struct dump_queue *dump_queue, while (!NILP (*cons_ptr)) { Lisp_Object queued_object = XCAR (*cons_ptr); - float score = dump_queue_compute_score ( - dump_queue, queued_object, basis); + float score = dump_queue_compute_score (dump_queue, queued_object, basis); if (first || score >= highest_score) { highest_score_cons_ptr = cons_ptr; @@ -1206,12 +1203,11 @@ dump_queue_sequence (struct dump_queue *dump_queue, We organize these queues so that score is strictly decreasing, so examining the head is sufficient. */ static void -dump_queue_find_score_of_one_weight_queue ( - struct dump_queue *dump_queue, - dump_off basis, - struct dump_tailq *one_weight_queue, - float *out_score, - int *out_sequence) +dump_queue_find_score_of_one_weight_queue (struct dump_queue *dump_queue, + dump_off basis, + struct dump_tailq *one_weight_queue, + float *out_score, + int *out_sequence) { /* Transparently discard stale objects from the head of this queue. */ do @@ -1248,27 +1244,27 @@ dump_queue_dequeue (struct dump_queue *dump_queue, dump_off basis) eassert (EQ (Fhash_table_count (dump_queue->sequence_numbers), Fhash_table_count (dump_queue->link_weights))); - eassert ( - XFIXNUM (Fhash_table_count (dump_queue->sequence_numbers)) - <= (dump_tailq_length (&dump_queue->fancy_weight_objects) + - dump_tailq_length (&dump_queue->zero_weight_objects) + - dump_tailq_length (&dump_queue->one_weight_normal_objects) + - dump_tailq_length (&dump_queue->one_weight_strong_objects))); + eassert (XFIXNUM (Fhash_table_count (dump_queue->sequence_numbers)) + <= (dump_tailq_length (&dump_queue->fancy_weight_objects) + + dump_tailq_length (&dump_queue->zero_weight_objects) + + dump_tailq_length (&dump_queue->one_weight_normal_objects) + + dump_tailq_length (&dump_queue->one_weight_strong_objects))); bool dump_object_counts = true; if (dump_object_counts) - dump_trace ( - "dump_queue_dequeue basis=%d fancy=%u zero=%u " - "normal=%u strong=%u hash=%u\n", - basis, - (unsigned) dump_tailq_length (&dump_queue->fancy_weight_objects), - (unsigned) dump_tailq_length (&dump_queue->zero_weight_objects), - (unsigned) dump_tailq_length (&dump_queue->one_weight_normal_objects), - (unsigned) dump_tailq_length (&dump_queue->one_weight_strong_objects), - (unsigned) XFIXNUM (Fhash_table_count (dump_queue->link_weights))); + dump_trace + ("dump_queue_dequeue basis=%d fancy=%u zero=%u " + "normal=%u strong=%u hash=%u\n", + basis, + (unsigned) dump_tailq_length (&dump_queue->fancy_weight_objects), + (unsigned) dump_tailq_length (&dump_queue->zero_weight_objects), + (unsigned) dump_tailq_length (&dump_queue->one_weight_normal_objects), + (unsigned) dump_tailq_length (&dump_queue->one_weight_strong_objects), + (unsigned) XFIXNUM (Fhash_table_count (dump_queue->link_weights))); static const int nr_candidates = 3; - struct candidate { + struct candidate + { float score; dump_off sequence; } candidates[nr_candidates]; @@ -1279,10 +1275,8 @@ dump_queue_dequeue (struct dump_queue *dump_queue, dump_off basis) { if (candidates[0].sequence < 0) *fancy_cons = XCDR (*fancy_cons); /* Discard stale object. */ - candidates[0].score = dump_queue_scan_fancy ( - dump_queue, - basis, - &fancy_cons); + candidates[0].score = dump_queue_scan_fancy (dump_queue, basis, + &fancy_cons); candidates[0].sequence = candidates[0].score > -INFINITY ? dump_queue_sequence (dump_queue, XCAR (*fancy_cons)) @@ -1290,29 +1284,27 @@ dump_queue_dequeue (struct dump_queue *dump_queue, dump_off basis) } while (candidates[0].sequence < 0); - dump_queue_find_score_of_one_weight_queue ( - dump_queue, - basis, - &dump_queue->one_weight_normal_objects, - &candidates[1].score, - &candidates[1].sequence); + dump_queue_find_score_of_one_weight_queue + (dump_queue, basis, + &dump_queue->one_weight_normal_objects, + &candidates[1].score, + &candidates[1].sequence); - dump_queue_find_score_of_one_weight_queue ( - dump_queue, - basis, - &dump_queue->one_weight_strong_objects, - &candidates[2].score, - &candidates[2].sequence); + dump_queue_find_score_of_one_weight_queue + (dump_queue, basis, + &dump_queue->one_weight_strong_objects, + &candidates[2].score, + &candidates[2].sequence); int best = -1; for (int i = 0; i < nr_candidates; ++i) { eassert (candidates[i].sequence >= 0); - if (candidates[i].score > -INFINITY && - (best < 0 || - candidates[i].score > candidates[best].score || - (candidates[i].score == candidates[best].score - && candidates[i].sequence < candidates[best].sequence))) + if (candidates[i].score > -INFINITY + && (best < 0 + || candidates[i].score > candidates[best].score + || (candidates[i].score == candidates[best].score + && candidates[i].sequence < candidates[best].sequence))) best = i; } @@ -1355,13 +1347,12 @@ dump_queue_dequeue (struct dump_queue *dump_queue, dump_off basis) dump_off_from_lisp (XCAR (basis_weight_pair)); dump_off link_weight = dump_off_from_lisp (XCDR (basis_weight_pair)); - dump_trace ( - " link_basis=%d distance=%d weight=%d contrib=%f\n", - link_basis, - basis - link_basis, - link_weight, - (double) dump_calc_link_score ( - basis, link_basis, link_weight)); + dump_trace + (" link_basis=%d distance=%d weight=%d contrib=%f\n", + link_basis, + basis - link_basis, + link_weight, + (double) dump_calc_link_score (basis, link_basis, link_weight)); } } @@ -1379,8 +1370,8 @@ dump_object_needs_dumping_p (Lisp_Object object) associated data too, and these data-carrying objects need to be included in the dump despite all references to them being bitwise-invariant. */ - return !dump_object_self_representing_p (object) || - dump_object_emacs_ptr (object); + return (!dump_object_self_representing_p (object) + || dump_object_emacs_ptr (object)); } static void @@ -1555,10 +1546,8 @@ dump_reloc_dump_to_emacs_lv (struct dump_context *ctx, been adjusted to account for the location of the running Emacs and dump file). */ static void -dump_emacs_reloc_copy_from_dump (struct dump_context *ctx, - dump_off dump_offset, - void* emacs_ptr, - dump_off size) +dump_emacs_reloc_copy_from_dump (struct dump_context *ctx, dump_off dump_offset, + void *emacs_ptr, dump_off size) { eassert (size >= 0); eassert (size < (1 << EMACS_RELOC_LENGTH_BITS)); @@ -1624,8 +1613,7 @@ DEFINE_EMACS_IMMEDIATE_FN (dump_emacs_reloc_immediate_bool, bool); into the dump. */ static void dump_emacs_reloc_to_dump_ptr_raw (struct dump_context *ctx, - const void* emacs_ptr, - dump_off dump_offset) + const void *emacs_ptr, dump_off dump_offset) { if (!ctx->flags.dump_object_contents) return; @@ -1657,13 +1645,12 @@ dump_emacs_reloc_to_lv (struct dump_context *ctx, right type, but we might as well maintain the invariant that the types on ctx->emacs_relocs correspond to the types of emacs_relocs we actually emit. */ - dump_push ( - &ctx->emacs_relocs, - list3 (make_fixnum (dump_object_emacs_ptr (value) - ? RELOC_EMACS_EMACS_LV - : RELOC_EMACS_DUMP_LV), - dump_off_to_lisp (emacs_offset (emacs_ptr)), - value)); + dump_push (&ctx->emacs_relocs, + list3 (make_fixnum (dump_object_emacs_ptr (value) + ? RELOC_EMACS_EMACS_LV + : RELOC_EMACS_DUMP_LV), + dump_off_to_lisp (emacs_offset (emacs_ptr)), + value)); dump_enqueue_object (ctx, value, WEIGHT_NONE); } } @@ -1671,8 +1658,7 @@ dump_emacs_reloc_to_lv (struct dump_context *ctx, /* Add an emacs relocation that makes a raw pointer in Emacs point back into the Emacs image. */ static void -dump_emacs_reloc_to_emacs_ptr_raw (struct dump_context *ctx, - void* emacs_ptr, +dump_emacs_reloc_to_emacs_ptr_raw (struct dump_context *ctx, void *emacs_ptr, void *target_emacs_ptr) { if (!ctx->flags.dump_object_contents) @@ -1720,12 +1706,11 @@ dump_remember_fixup_lv (struct dump_context *ctx, return; dump_push (&ctx->fixups, - list3 ( - make_fixnum (fixup_subtype == LV_FIXUP_LISP_OBJECT - ? DUMP_FIXUP_LISP_OBJECT - : DUMP_FIXUP_LISP_OBJECT_RAW), - dump_off_to_lisp (dump_offset), - value)); + list3 (make_fixnum (fixup_subtype == LV_FIXUP_LISP_OBJECT + ? DUMP_FIXUP_LISP_OBJECT + : DUMP_FIXUP_LISP_OBJECT_RAW), + dump_off_to_lisp (dump_offset), + value)); } /* Remember to fix up the dump file such that the pointer-sized value @@ -1741,16 +1726,15 @@ dump_remember_fixup_ptr_raw (struct dump_context *ctx, /* We should not be generating relocations into the to-be-copied-into-Emacs dump region. */ - eassert (ctx->header.discardable_start == 0 || - new_dump_offset < ctx->header.discardable_start || - (ctx->header.cold_start != 0 && - new_dump_offset >= ctx->header.cold_start)); + eassert (ctx->header.discardable_start == 0 + || new_dump_offset < ctx->header.discardable_start + || (ctx->header.cold_start != 0 + && new_dump_offset >= ctx->header.cold_start)); dump_push (&ctx->fixups, - list3 ( - make_fixnum (DUMP_FIXUP_PTR_DUMP_RAW), - dump_off_to_lisp (dump_offset), - dump_off_to_lisp (new_dump_offset))); + list3 (make_fixnum (DUMP_FIXUP_PTR_DUMP_RAW), + dump_off_to_lisp (dump_offset), + dump_off_to_lisp (new_dump_offset))); } static void @@ -1870,8 +1854,8 @@ dump_field_lv_or_rawptr (struct dump_context *ctx, intptr_t out_value; dump_off out_field_offset = ctx->obj_offset + relpos; dump_off target_offset = dump_recall_object (ctx, value); - if (DANGEROUS && - target_offset > 0 && dump_object_emacs_ptr (value) == NULL) + if (DANGEROUS + && target_offset > 0 && dump_object_emacs_ptr (value) == NULL) { /* We've already dumped the referenced object, so we can emit the value and a relocation directly instead of indirecting @@ -1970,7 +1954,7 @@ dump_field_ptr_to_dump_offset (struct dump_context *ctx, dump_off relpos = field_relpos (in_start, in_field); dump_reloc_dump_to_dump_ptr_raw (ctx, ctx->obj_offset + relpos); intptr_t outval = target_dump_offset; - memcpy ((char*) out + relpos, &outval, sizeof (outval)); + memcpy ((char *) out + relpos, &outval, sizeof (outval)); } /* Mark a field as pointing to a place inside Emacs. @@ -2001,14 +1985,13 @@ dump_field_emacs_ptr (struct dump_context *ctx, rel_emacs_ptr = emacs_offset ((void *)abs_emacs_ptr); dump_reloc_dump_to_emacs_ptr_raw (ctx, ctx->obj_offset + relpos); } - cpyptr ((char*) out + relpos, &rel_emacs_ptr); + cpyptr ((char *) out + relpos, &rel_emacs_ptr); } static void -_dump_object_start_pseudovector ( - struct dump_context *ctx, - union vectorlike_header *out_hdr, - const union vectorlike_header *in_hdr) +_dump_object_start_pseudovector (struct dump_context *ctx, + union vectorlike_header *out_hdr, + const union vectorlike_header *in_hdr) { eassert (in_hdr->size & PSEUDOVECTOR_FLAG); ptrdiff_t vec_size = vectorlike_nbytes (in_hdr); @@ -2032,10 +2015,9 @@ finish_dump_pvec (struct dump_context *ctx, } static void -dump_pseudovector_lisp_fields ( - struct dump_context *ctx, - union vectorlike_header *out_hdr, - const union vectorlike_header *in_hdr) +dump_pseudovector_lisp_fields (struct dump_context *ctx, + union vectorlike_header *out_hdr, + const union vectorlike_header *in_hdr) { const struct Lisp_Vector *in = (const struct Lisp_Vector *) in_hdr; struct Lisp_Vector *out = (struct Lisp_Vector *) out_hdr; @@ -2079,10 +2061,8 @@ dump_interval_tree (struct dump_context *ctx, if (!tree->up_obj) { eassert (parent_offset != 0); - dump_field_ptr_to_dump_offset ( - ctx, &out, - tree, &tree->up.interval, - parent_offset); + dump_field_ptr_to_dump_offset (ctx, &out, tree, &tree->up.interval, + parent_offset); } else dump_field_lv (ctx, &out, tree, &tree->up.obj, WEIGHT_STRONG); @@ -2095,15 +2075,15 @@ dump_interval_tree (struct dump_context *ctx, dump_field_lv (ctx, &out, tree, &tree->plist, WEIGHT_STRONG); dump_off offset = dump_object_finish (ctx, &out, sizeof (out)); if (tree->left) - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct interval, left), - dump_interval_tree (ctx, tree->left, offset)); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct interval, left), + dump_interval_tree (ctx, tree->left, offset)); if (tree->right) - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct interval, right), - dump_interval_tree (ctx, tree->right, offset)); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct interval, right), + dump_interval_tree (ctx, tree->right, offset)); return offset; } @@ -2140,15 +2120,15 @@ dump_string (struct dump_context *ctx, const struct Lisp_String *string) dump_field_fixup_later (ctx, &out, string, &string->u.s.data); dump_remember_cold_op (ctx, COLD_OP_STRING, - make_lisp_ptr ((void*) string, Lisp_String)); + make_lisp_ptr ((void *) string, Lisp_String)); } dump_off offset = dump_object_finish (ctx, &out, sizeof (out)); if (string->u.s.intervals) - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct Lisp_String, u.s.intervals), - dump_interval_tree (ctx, string->u.s.intervals, 0)); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct Lisp_String, u.s.intervals), + dump_interval_tree (ctx, string->u.s.intervals, 0)); return offset; } @@ -2166,16 +2146,10 @@ dump_marker (struct dump_context *ctx, const struct Lisp_Marker *marker) DUMP_FIELD_COPY (out, marker, insertion_type); if (marker->buffer) { - dump_field_lv_rawptr ( - ctx, out, - marker, &marker->buffer, - Lisp_Vectorlike, - WEIGHT_NORMAL); - dump_field_lv_rawptr ( - ctx, out, - marker, &marker->next, - Lisp_Vectorlike, - WEIGHT_STRONG); + dump_field_lv_rawptr (ctx, out, marker, &marker->buffer, + Lisp_Vectorlike, WEIGHT_NORMAL); + dump_field_lv_rawptr (ctx, out, marker, &marker->next, + Lisp_Vectorlike, WEIGHT_STRONG); DUMP_FIELD_COPY (out, marker, charpos); DUMP_FIELD_COPY (out, marker, bytepos); } @@ -2249,14 +2223,13 @@ dump_bignum (struct dump_context *ctx, Lisp_Object object) dump_remember_cold_op (ctx, COLD_OP_BIGNUM, object); /* Write the offset of that exported blob here. */ - dump_off value_offset = - bignum_offset + - (dump_off) offsetof (struct Lisp_Bignum, value); + dump_off value_offset + = (bignum_offset + + (dump_off) offsetof (struct Lisp_Bignum, value)); dump_push (&ctx->fixups, - list3 ( - make_fixnum (DUMP_FIXUP_BIGNUM_DATA), - dump_off_to_lisp (value_offset), - object)); + list3 (make_fixnum (DUMP_FIXUP_BIGNUM_DATA), + dump_off_to_lisp (value_offset), + object)); /* When we load the dump, slurp the data blob and turn it into a real bignum. Attach the relocation to the start of the @@ -2412,10 +2385,10 @@ dump_blv (struct dump_context *ctx, dump_field_lv (ctx, &out, blv, &blv->valcell, WEIGHT_STRONG); dump_off offset = dump_object_finish (ctx, &out, sizeof (out)); if (blv->fwd) - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct Lisp_Buffer_Local_Value, fwd), - dump_fwd (ctx, blv->fwd)); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct Lisp_Buffer_Local_Value, fwd), + dump_fwd (ctx, blv->fwd)); return offset; } @@ -2425,8 +2398,7 @@ dump_recall_symbol_aux (struct dump_context *ctx, Lisp_Object symbol) Lisp_Object symbol_aux = ctx->symbol_aux; if (NILP (symbol_aux)) return 0; - return dump_off_from_lisp ( - Fgethash (symbol, symbol_aux, make_fixnum (0))); + return dump_off_from_lisp (Fgethash (symbol, symbol_aux, make_fixnum (0))); } static void @@ -2438,9 +2410,7 @@ dump_remember_symbol_aux (struct dump_context *ctx, } static void -dump_pre_dump_symbol ( - struct dump_context *ctx, - struct Lisp_Symbol *symbol) +dump_pre_dump_symbol (struct dump_context *ctx, struct Lisp_Symbol *symbol) { Lisp_Object symbol_lv = make_lisp_symbol (symbol); eassert (!dump_recall_symbol_aux (ctx, symbol_lv)); @@ -2448,16 +2418,12 @@ dump_pre_dump_symbol ( switch (symbol->u.s.redirect) { case SYMBOL_LOCALIZED: - dump_remember_symbol_aux ( - ctx, - symbol_lv, - dump_blv (ctx, symbol->u.s.val.blv)); + dump_remember_symbol_aux (ctx, symbol_lv, + dump_blv (ctx, symbol->u.s.val.blv)); break; case SYMBOL_FORWARDED: - dump_remember_symbol_aux ( - ctx, - symbol_lv, - dump_fwd (ctx, symbol->u.s.val.fwd)); + dump_remember_symbol_aux (ctx, symbol_lv, + dump_fwd (ctx, symbol->u.s.val.fwd)); break; default: break; @@ -2481,8 +2447,8 @@ dump_symbol (struct dump_context *ctx, { if (offset != DUMP_OBJECT_ON_SYMBOL_QUEUE) { - eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE || - offset == DUMP_OBJECT_NOT_SEEN); + eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE + || offset == DUMP_OBJECT_NOT_SEEN); DUMP_CLEAR_REFERRER (ctx); struct dump_flags old_flags = ctx->flags; ctx->flags.dump_object_contents = false; @@ -2540,21 +2506,21 @@ dump_symbol (struct dump_context *ctx, { case SYMBOL_LOCALIZED: aux_offset = dump_recall_symbol_aux (ctx, make_lisp_symbol (symbol)); - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct Lisp_Symbol, u.s.val.blv), - (aux_offset - ? aux_offset - : dump_blv (ctx, symbol->u.s.val.blv))); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct Lisp_Symbol, u.s.val.blv), + (aux_offset + ? aux_offset + : dump_blv (ctx, symbol->u.s.val.blv))); break; case SYMBOL_FORWARDED: aux_offset = dump_recall_symbol_aux (ctx, make_lisp_symbol (symbol)); - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct Lisp_Symbol, u.s.val.fwd), - (aux_offset - ? aux_offset - : dump_fwd (ctx, symbol->u.s.val.fwd))); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct Lisp_Symbol, u.s.val.fwd), + (aux_offset + ? aux_offset + : dump_fwd (ctx, symbol->u.s.val.fwd))); break; default: break; @@ -2563,9 +2529,8 @@ dump_symbol (struct dump_context *ctx, } static dump_off -dump_vectorlike_generic ( - struct dump_context *ctx, - const union vectorlike_header *header) +dump_vectorlike_generic (struct dump_context *ctx, + const union vectorlike_header *header) { #if CHECK_STRUCTS && !defined (HASH_vectorlike_header_00A5A4BFB2) # error "vectorlike_header changed. See CHECK_STRUCTS comment." @@ -2586,9 +2551,8 @@ dump_vectorlike_generic ( we'll count on sizeof(Lisp_Object) >= GCALIGN builds to catch this class of problem. */ - eassert ( - ((size & PSEUDOVECTOR_REST_MASK) >> PSEUDOVECTOR_REST_BITS) - <= (sizeof (Lisp_Object) < GCALIGNMENT) ? 1 : 0); + eassert ((size & PSEUDOVECTOR_REST_MASK) >> PSEUDOVECTOR_REST_BITS + <= (sizeof (Lisp_Object) < GCALIGNMENT)); size &= PSEUDOVECTOR_SIZE_MASK; } @@ -2608,7 +2572,7 @@ dump_vectorlike_generic ( /* Don't use sizeof(out), since that incorporates unwanted padding. Instead, use the size through the last non-Lisp field. */ - size_t sz = (char*)&out.min_char + sizeof (out.min_char) - (char*)&out; + size_t sz = (char *)&out.min_char + sizeof (out.min_char) - (char *)&out; eassert (sz < DUMP_OFF_MAX); dump_object_start (ctx, &out, (dump_off) sz); DUMP_FIELD_COPY (&out, sct, header.size); @@ -2631,8 +2595,8 @@ dump_vectorlike_generic ( scribble beyond that start. */ dump_off prefix_size = ctx->offset - prefix_start_offset; eassert (prefix_size > 0); - dump_off skip_start = ptrdiff_t_to_dump_off ( - (char*) &v->contents[skip] - (char*) v); + dump_off skip_start = ptrdiff_t_to_dump_off ((char *) &v->contents[skip] + - (char *) v); eassert (skip_start >= prefix_size); dump_write_zero (ctx, skip_start - prefix_size); @@ -2672,10 +2636,10 @@ dump_hash_table_stable_p (const struct Lisp_Hash_Table *hash) if (!NILP (HASH_HASH (hash, i))) { Lisp_Object key = HASH_KEY (hash, i); - bool key_stable = (dump_builtin_symbol_p (key) || - FIXNUMP (key) || - (is_equal && STRINGP (key)) || - ((is_equal || is_eql) && FLOATP (key))); + bool key_stable = (dump_builtin_symbol_p (key) + || FIXNUMP (key) + || (is_equal && STRINGP (key)) + || ((is_equal || is_eql) && FLOATP (key))); if (!key_stable) return false; } @@ -2713,10 +2677,8 @@ check_hash_table_rehash (Lisp_Object table_orig) Lisp_Object key_value_pair = dump_pop (&expected_contents); Lisp_Object key = XCAR (key_value_pair); Lisp_Object expected_value = XCDR (key_value_pair); - Lisp_Object found_value = Fgethash ( - key, - table_rehashed, - Qdump_emacs_portable__sort_predicate_copied /* arbitrary */); + Lisp_Object arbitrary = Qdump_emacs_portable__sort_predicate_copied; + Lisp_Object found_value = Fgethash (key, table_rehashed, arbitrary); eassert (EQ (expected_value, found_value)); Fremhash (key, table_rehashed); } @@ -2740,13 +2702,13 @@ dump_hash_table (struct dump_context *ctx, because we need to assemble a list of weak tables) punt the hash table to the end of the dump, where we can lump all such hash tables together. */ - if (!(is_stable || !NILP (hash_in->weak)) && - ctx->flags.defer_hash_tables) + if (!(is_stable || !NILP (hash_in->weak)) + && ctx->flags.defer_hash_tables) { if (offset != DUMP_OBJECT_ON_HASH_TABLE_QUEUE) { - eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE || - offset == DUMP_OBJECT_NOT_SEEN); + eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE + || offset == DUMP_OBJECT_NOT_SEEN); /* We still want to dump the actual keys and values now. */ dump_enqueue_object (ctx, hash_in->key_and_value, WEIGHT_NONE); /* We'll get to the rest later. */ @@ -2758,7 +2720,7 @@ dump_hash_table (struct dump_context *ctx, } if (PDUMPER_CHECK_REHASHING) - check_hash_table_rehash (make_lisp_ptr ((void*)hash_in, Lisp_Vectorlike)); + check_hash_table_rehash (make_lisp_ptr ((void *) hash_in, Lisp_Vectorlike)); struct Lisp_Hash_Table hash_munged = *hash_in; struct Lisp_Hash_Table *hash = &hash_munged; @@ -2819,13 +2781,13 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) if (buffer->base_buffer) { eassert (buffer->base_buffer->base_buffer == NULL); - base_offset = dump_object_for_offset ( - ctx, - make_lisp_ptr (buffer->base_buffer, Lisp_Vectorlike)); + base_offset = dump_object_for_offset + (ctx, + make_lisp_ptr (buffer->base_buffer, Lisp_Vectorlike)); } - eassert ((base_offset == 0 && buffer->text == &in_buffer->own_text) || - (base_offset > 0 && buffer->text != &in_buffer->own_text)); + eassert ((base_offset == 0 && buffer->text == &in_buffer->own_text) + || (base_offset > 0 && buffer->text != &in_buffer->own_text)); START_DUMP_PVEC (ctx, &buffer->header, struct buffer, out); dump_pseudovector_lisp_fields (ctx, &out->header, &buffer->header); @@ -2839,10 +2801,9 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) if (BUFFER_LIVE_P (buffer)) { dump_field_fixup_later (ctx, out, buffer, &buffer->own_text.beg); - dump_remember_cold_op ( - ctx, - COLD_OP_BUFFER, - make_lisp_ptr ((void*) in_buffer, Lisp_Vectorlike)); + dump_remember_cold_op (ctx, COLD_OP_BUFFER, + make_lisp_ptr ((void *) in_buffer, + Lisp_Vectorlike)); } else eassert (buffer->own_text.beg == NULL); @@ -2870,10 +2831,10 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) } eassert (ctx->obj_offset > 0); - dump_remember_fixup_ptr_raw ( - ctx, - ctx->obj_offset + dump_offsetof (struct buffer, text), - base_offset + dump_offsetof (struct buffer, own_text)); + dump_remember_fixup_ptr_raw + (ctx, + ctx->obj_offset + dump_offsetof (struct buffer, text), + base_offset + dump_offsetof (struct buffer, own_text)); dump_field_lv_rawptr (ctx, out, buffer, &buffer->next, Lisp_Vectorlike, WEIGHT_NORMAL); @@ -2887,9 +2848,8 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) if (buffer->base_buffer) { eassert (ctx->obj_offset != base_offset); - dump_field_ptr_to_dump_offset ( - ctx, out, buffer, &buffer->base_buffer, - base_offset); + dump_field_ptr_to_dump_offset (ctx, out, buffer, &buffer->base_buffer, + base_offset); } DUMP_FIELD_COPY (out, buffer, indirections); @@ -2924,10 +2884,10 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) WEIGHT_STRONG); dump_off offset = finish_dump_pvec (ctx, &out->header); if (!buffer->base_buffer && buffer->own_text.intervals) - dump_remember_fixup_ptr_raw ( - ctx, - offset + dump_offsetof (struct buffer, own_text.intervals), - dump_interval_tree (ctx, buffer->own_text.intervals, 0)); + dump_remember_fixup_ptr_raw + (ctx, + offset + dump_offsetof (struct buffer, own_text.intervals), + dump_interval_tree (ctx, buffer->own_text.intervals, 0)); return offset; } @@ -3003,8 +2963,8 @@ dump_vectorlike (struct dump_context *ctx, harmless data carriers that we can dump like other Lisp objects. Fonts themselves are window-system-specific and need to be recreated on each startup. */ - if ((v->header.size & PSEUDOVECTOR_SIZE_MASK) != FONT_SPEC_MAX && - (v->header.size & PSEUDOVECTOR_SIZE_MASK) != FONT_ENTITY_MAX) + if ((v->header.size & PSEUDOVECTOR_SIZE_MASK) != FONT_SPEC_MAX + && (v->header.size & PSEUDOVECTOR_SIZE_MASK) != FONT_ENTITY_MAX) error_unsupported_dump_object(ctx, lv, "font"); FALLTHROUGH; case PVEC_NORMAL_VECTOR: @@ -3118,8 +3078,8 @@ dump_object (struct dump_context *ctx, Lisp_Object object) { if (offset != DUMP_OBJECT_ON_COLD_QUEUE) { - eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE || - offset == DUMP_OBJECT_NOT_SEEN); + eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE + || offset == DUMP_OBJECT_NOT_SEEN); offset = DUMP_OBJECT_ON_COLD_QUEUE; dump_remember_object (ctx, object, offset); dump_remember_cold_op (ctx, COLD_OP_OBJECT, object); @@ -3127,13 +3087,13 @@ dump_object (struct dump_context *ctx, Lisp_Object object) return offset; } - void* obj_in_emacs = dump_object_emacs_ptr (object); + void *obj_in_emacs = dump_object_emacs_ptr (object); if (obj_in_emacs && ctx->flags.defer_copied_objects) { if (offset != DUMP_OBJECT_ON_COPIED_QUEUE) { - eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE || - offset == DUMP_OBJECT_NOT_SEEN); + eassert (offset == DUMP_OBJECT_ON_NORMAL_QUEUE + || offset == DUMP_OBJECT_NOT_SEEN); /* Even though we're not going to dump this object right away, we still want to scan and enqueue its referents. */ @@ -3265,10 +3225,10 @@ dump_finalizer_list_head_ptr (struct dump_context *ctx, { struct Lisp_Finalizer *value = *ptr; if (value != &finalizers && value != &doomed_finalizers) - dump_emacs_reloc_to_dump_ptr_raw ( - ctx, ptr, - dump_object_for_offset (ctx, - make_lisp_ptr (value, Lisp_Vectorlike))); + dump_emacs_reloc_to_dump_ptr_raw + (ctx, ptr, + dump_object_for_offset (ctx, + make_lisp_ptr (value, Lisp_Vectorlike))); } static void @@ -3280,19 +3240,13 @@ dump_metadata_for_pdumper (struct dump_context *ctx) for (int i = 0; i < nr_remembered_data; ++i) { - dump_emacs_reloc_to_emacs_ptr_raw ( - ctx, - &remembered_data[i].mem, - remembered_data[i].mem); - dump_emacs_reloc_immediate_int ( - ctx, - &remembered_data[i].sz, - remembered_data[i].sz); + dump_emacs_reloc_to_emacs_ptr_raw (ctx, &remembered_data[i].mem, + remembered_data[i].mem); + dump_emacs_reloc_immediate_int (ctx, &remembered_data[i].sz, + remembered_data[i].sz); } - dump_emacs_reloc_immediate_int ( - ctx, - &nr_remembered_data, - nr_remembered_data); + dump_emacs_reloc_immediate_int (ctx, &nr_remembered_data, + nr_remembered_data); } /* Sort the list of copied objects in CTX. */ @@ -3380,10 +3334,10 @@ dump_cold_string (struct dump_context *ctx, Lisp_Object string) error ("string too large"); dump_off total_size = ptrdiff_t_to_dump_off (SBYTES (string) + 1); eassert (total_size > 0); - dump_remember_fixup_ptr_raw ( - ctx, - string_offset + dump_offsetof (struct Lisp_String, u.s.data), - ctx->offset); + dump_remember_fixup_ptr_raw + (ctx, + string_offset + dump_offsetof (struct Lisp_String, u.s.data), + ctx->offset); dump_write (ctx, XSTRING (string)->u.s.data, total_size); } @@ -3395,10 +3349,10 @@ dump_cold_charset (struct dump_context *ctx, Lisp_Object data) int cs_i = XFIXNUM (XCAR (data)); DISALLOW_IMPLICIT_CONVERSION; dump_off cs_dump_offset = dump_off_from_lisp (XCDR (data)); - dump_remember_fixup_ptr_raw ( - ctx, - cs_dump_offset + dump_offsetof (struct charset, code_space_mask), - ctx->offset); + dump_remember_fixup_ptr_raw + (ctx, + cs_dump_offset + dump_offsetof (struct charset, code_space_mask), + ctx->offset); struct charset *cs = charset_table + cs_i; dump_write (ctx, cs->code_space_mask, 256); } @@ -3421,10 +3375,10 @@ dump_cold_buffer (struct dump_context *ctx, Lisp_Object data) + 1; if (nbytes > DUMP_OFF_MAX) error ("buffer too large"); - dump_remember_fixup_ptr_raw ( - ctx, - buffer_offset + dump_offsetof (struct buffer, own_text.beg), - ctx->offset); + dump_remember_fixup_ptr_raw + (ctx, + buffer_offset + dump_offsetof (struct buffer, own_text.beg), + ctx->offset); dump_write (ctx, b->own_text.beg, ptrdiff_t_to_dump_off (nbytes)); } @@ -3436,10 +3390,10 @@ dump_cold_bignum (struct dump_context *ctx, Lisp_Object object) eassert (sz_nlimbs < DUMP_OFF_MAX); dump_align_output (ctx, alignof (mp_limb_t)); dump_off nlimbs = (dump_off) sz_nlimbs; - Lisp_Object descriptor = list2 ( - dump_off_to_lisp (ctx->offset), - dump_off_to_lisp ((mpz_sgn (bignum->value) < 0 - ? -nlimbs : nlimbs))); + Lisp_Object descriptor + = list2 (dump_off_to_lisp (ctx->offset), + dump_off_to_lisp ((mpz_sgn (bignum->value) < 0 + ? -nlimbs : nlimbs))); Fputhash (object, descriptor, ctx->bignum_data); for (mp_size_t i = 0; i < nlimbs; ++i) { @@ -3608,8 +3562,8 @@ dump_drain_user_remembered_data_cold (struct dump_context *ctx) Lisp_Subr structures always live in Emacs, not the dump. */ - dump_emacs_reloc_to_emacs_ptr_raw ( - ctx, mem, dump_object_emacs_ptr (lv)); + dump_emacs_reloc_to_emacs_ptr_raw + (ctx, mem, dump_object_emacs_ptr (lv)); } else { @@ -3650,16 +3604,15 @@ dump_check_dump_off (struct dump_context *ctx, dump_off dump_offset) static void dump_check_emacs_off (dump_off emacs_off) { - eassert (labs (emacs_off) <= 60*1024*1024); + eassert (labs (emacs_off) <= 60 * 1024 * 1024); } static struct dump_reloc dump_decode_dump_reloc (Lisp_Object lreloc) { struct dump_reloc reloc; - dump_reloc_set_type ( - &reloc, - (enum dump_reloc_type) XFIXNUM (dump_pop (&lreloc))); + dump_reloc_set_type (&reloc, + (enum dump_reloc_type) XFIXNUM (dump_pop (&lreloc))); eassert (reloc.type <= RELOC_DUMP_TO_EMACS_LV + Lisp_Float); dump_reloc_set_offset (&reloc, dump_off_from_lisp (dump_pop (&lreloc))); eassert (NILP (lreloc)); @@ -3688,8 +3641,7 @@ dump_check_overlap_dump_reloc (Lisp_Object lreloc_a, { struct dump_reloc reloc_a = dump_decode_dump_reloc (lreloc_a); struct dump_reloc reloc_b = dump_decode_dump_reloc (lreloc_b); - eassert (dump_reloc_get_offset (reloc_a) < - dump_reloc_get_offset (reloc_b)); + eassert (dump_reloc_get_offset (reloc_a) < dump_reloc_get_offset (reloc_b)); return Qnil; } #endif @@ -3816,8 +3768,8 @@ dump_merge_emacs_relocs (Lisp_Object lreloc_a, Lisp_Object lreloc_b) } #endif - if (XFIXNUM (XCAR (lreloc_a)) != RELOC_EMACS_COPY_FROM_DUMP || - XFIXNUM (XCAR (lreloc_b)) != RELOC_EMACS_COPY_FROM_DUMP) + if (XFIXNUM (XCAR (lreloc_a)) != RELOC_EMACS_COPY_FROM_DUMP + || XFIXNUM (XCAR (lreloc_b)) != RELOC_EMACS_COPY_FROM_DUMP) return Qnil; struct emacs_reloc reloc_a = decode_emacs_reloc (NULL, lreloc_a); @@ -3868,9 +3820,9 @@ drain_reloc_list (struct dump_context *ctx, { Lisp_Object reloc = dump_pop (&relocs); Lisp_Object merged; - while (merger != NULL && - !NILP (relocs) && - ((merged = merger (reloc, XCAR (relocs))), !NILP (merged))) + while (merger != NULL + && !NILP (relocs) + && (merged = merger (reloc, XCAR (relocs)), !NILP (merged))) { reloc = merged; relocs = XCDR (relocs); @@ -3895,7 +3847,7 @@ dump_do_fixup (struct dump_context *ctx, dump_off prev_dump_fixup_offset = dump_off_from_lisp (XCAR (XCDR (prev_fixup))); eassert (dump_fixup_offset - prev_dump_fixup_offset - >= sizeof (void*)); + >= sizeof (void *)); } #endif Lisp_Object arg = dump_pop (&fixup); @@ -4053,10 +4005,12 @@ types. */) error ("No other Lisp threads can be running when this function is called"); /* Clear out any detritus in memory. */ - do { - number_finalizers_run = 0; - garbage_collect (); - } while (number_finalizers_run); + do + { + number_finalizers_run = 0; + garbage_collect (); + } + while (number_finalizers_run); ptrdiff_t count = SPECPDL_INDEX (); @@ -4166,13 +4120,15 @@ types. */) objects to the queue by side effect during dumping. We accumulate some types of objects in special lists to get more locality for these object types at runtime. */ - do { - dump_drain_deferred_hash_tables (ctx); - dump_drain_deferred_symbols (ctx); - dump_drain_normal_queue (ctx); - } while (!dump_queue_empty_p (&ctx->dump_queue) || - !NILP (ctx->deferred_hash_tables) || - !NILP (ctx->deferred_symbols)); + do + { + dump_drain_deferred_hash_tables (ctx); + dump_drain_deferred_symbols (ctx); + dump_drain_normal_queue (ctx); + } + while (!dump_queue_empty_p (&ctx->dump_queue) + || !NILP (ctx->deferred_hash_tables) + || !NILP (ctx->deferred_symbols)); dump_sort_copied_objects (ctx); @@ -4231,27 +4187,16 @@ types. */) /* Emit instructions for Emacs to execute when loading the dump. Note that this relocation information ends up in the cold section of the dump. */ - drain_reloc_list ( - ctx, - dump_emit_dump_reloc, - emacs_reloc_merger, - &ctx->dump_relocs, - &ctx->header.dump_relocs); + drain_reloc_list (ctx, dump_emit_dump_reloc, emacs_reloc_merger, + &ctx->dump_relocs, &ctx->header.dump_relocs); unsigned number_hot_relocations = ctx->number_hot_relocations; ctx->number_hot_relocations = 0; unsigned number_discardable_relocations = ctx->number_discardable_relocations; ctx->number_discardable_relocations = 0; - drain_reloc_list ( - ctx, - dump_emit_dump_reloc, - emacs_reloc_merger, - &ctx->object_starts, - &ctx->header.object_starts); - drain_reloc_list ( - ctx, dump_emit_emacs_reloc, - dump_merge_emacs_relocs, - &ctx->emacs_relocs, - &ctx->header.emacs_relocs); + drain_reloc_list (ctx, dump_emit_dump_reloc, emacs_reloc_merger, + &ctx->object_starts, &ctx->header.object_starts); + drain_reloc_list (ctx, dump_emit_emacs_reloc, dump_merge_emacs_relocs, + &ctx->emacs_relocs, &ctx->header.emacs_relocs); const dump_off cold_end = ctx->offset; @@ -4337,14 +4282,15 @@ pdumper_remember_scalar_impl (void *mem, ptrdiff_t nbytes) } void -pdumper_remember_lv_ptr_raw_impl (void* ptr, enum Lisp_Type type) +pdumper_remember_lv_ptr_raw_impl (void *ptr, enum Lisp_Type type) { pdumper_remember_user_data_1 (ptr, -type); } /* Dump runtime */ -enum dump_memory_protection { +enum dump_memory_protection +{ DUMP_MEMORY_ACCESS_NONE = 1, DUMP_MEMORY_ACCESS_READ = 2, DUMP_MEMORY_ACCESS_READWRITE = 3, @@ -4438,9 +4384,9 @@ dump_anonymous_allocate_posix (void *base, { retry = false; ret = mmap (base, size, mem_prot, mem_flags, -1, 0); - if (ret == MAP_FAILED && - errno == EINVAL && - (mem_flags & MAP_POPULATE)) + if (ret == MAP_FAILED + && errno == EINVAL + && (mem_flags & MAP_POPULATE)) { /* This system didn't understand MAP_POPULATE, so try again without it. */ @@ -4492,12 +4438,8 @@ dump_anonymous_release (void *addr, size_t size) } static void * -dump_map_file_w32 ( - void *base, - int fd, - off_t offset, - size_t size, - enum dump_memory_protection protection) +dump_map_file_w32 (void *base, int fd, off_t offset, size_t size, + enum dump_memory_protection protection) { #if VM_SUPPORTED != VM_MS_WINDOWS (void) base; @@ -4522,13 +4464,12 @@ dump_map_file_w32 ( if (file == INVALID_HANDLE_VALUE) goto out; - section = CreateFileMapping ( - file, - /*lpAttributes=*/NULL, - PAGE_READONLY, - /*dwMaximumSizeHigh=*/0, - /*dwMaximumSizeLow=*/0, - /*lpName=*/NULL); + section = CreateFileMapping (file, + /*lpAttributes=*/NULL, + PAGE_READONLY, + /*dwMaximumSizeHigh=*/0, + /*dwMaximumSizeLow=*/0, + /*lpName=*/NULL); if (!section) { errno = EINVAL; @@ -4566,12 +4507,8 @@ dump_map_file_w32 ( } static void * -dump_map_file_posix ( - void *base, - int fd, - off_t offset, - size_t size, - enum dump_memory_protection protection) +dump_map_file_posix (void *base, int fd, off_t offset, size_t size, + enum dump_memory_protection protection) { #if VM_SUPPORTED != VM_POSIX (void) base; @@ -4615,12 +4552,8 @@ dump_map_file_posix ( /* Map a file into memory. */ static void * -dump_map_file ( - void *base, - int fd, - off_t offset, - size_t size, - enum dump_memory_protection protection) +dump_map_file (void *base, int fd, off_t offset, size_t size, + enum dump_memory_protection protection) { void *ret = NULL; if (VM_SUPPORTED == VM_MS_WINDOWS) @@ -4662,7 +4595,8 @@ struct dump_memory_map_spec enum dump_memory_protection protection; }; -struct dump_memory_map { +struct dump_memory_map +{ struct dump_memory_map_spec spec; void *mapping; /* Actual mapped memory. */ void (*release)(struct dump_memory_map *); @@ -4715,7 +4649,8 @@ dump_mmap_release (struct dump_memory_map *map) } /* Allows heap-allocated dump_mmap to "free" maps individually. */ -struct dump_memory_map_heap_control_block { +struct dump_memory_map_heap_control_block +{ int refcount; void *mem; }; @@ -4736,10 +4671,8 @@ dump_mmap_release_heap (struct dump_memory_map *map) /* Implement dump_mmap using malloc and read. */ static bool -dump_mmap_contiguous_heap ( - struct dump_memory_map *maps, - int nr_maps, - size_t total_size) +dump_mmap_contiguous_heap (struct dump_memory_map *maps, int nr_maps, + size_t total_size) { bool ret = false; struct dump_memory_map_heap_control_block *cb = calloc (1, sizeof (*cb)); @@ -4807,10 +4740,8 @@ needs_mmap_retry_p (void) } static bool -dump_mmap_contiguous_vm ( - struct dump_memory_map *maps, - int nr_maps, - size_t total_size) +dump_mmap_contiguous_vm (struct dump_memory_map *maps, int nr_maps, + size_t total_size) { bool ret = false; void *resv = NULL; @@ -4855,19 +4786,18 @@ dump_mmap_contiguous_vm ( continue; if (spec.fd < 0) - map->mapping = dump_anonymous_allocate ( - mem, spec.size, spec.protection); + map->mapping = dump_anonymous_allocate (mem, spec.size, + spec.protection); else - map->mapping = dump_map_file ( - mem, spec.fd, spec.offset, spec.size, spec.protection); + map->mapping = dump_map_file (mem, spec.fd, spec.offset, + spec.size, spec.protection); mem += spec.size; - if (need_retry && - map->mapping == NULL && - (errno == EBUSY + if (need_retry && map->mapping == NULL + && (errno == EBUSY #ifdef CYGWIN - || errno == EINVAL + || errno == EINVAL #endif - )) + )) { retry = true; continue; @@ -4910,9 +4840,7 @@ dump_mmap_contiguous_vm ( Return true on success or false on failure with errno set. */ static bool -dump_mmap_contiguous ( - struct dump_memory_map *maps, - int nr_maps) +dump_mmap_contiguous (struct dump_memory_map *maps, int nr_maps) { if (!nr_maps) return true; @@ -4936,7 +4864,8 @@ dump_mmap_contiguous ( typedef uint_fast32_t dump_bitset_word; -struct dump_bitset { +struct dump_bitset +{ dump_bitset_word *restrict bits; ptrdiff_t number_words; }; @@ -4981,7 +4910,7 @@ dump_bitset__set_bit_value (struct dump_bitset *bitset, { int xword_size = sizeof (bitset->bits[0]); int bits_per_word = xword_size * CHAR_BIT; - dump_bitset_word * slot = dump_bitset__bit_slot (bitset, bit_number); + dump_bitset_word *slot = dump_bitset__bit_slot (bitset, bit_number); dump_bitset_word bit = 1; bit <<= bit_number % bits_per_word; if (bit_is_set) @@ -5082,8 +5011,8 @@ static const struct dump_reloc * dump_find_relocation (const struct dump_table_locator *const table, const dump_off key) { - const struct dump_reloc *const relocs = dump_ptr ( - dump_public.start, table->offset); + const struct dump_reloc *const relocs = dump_ptr (dump_public.start, + table->offset); const struct dump_reloc *found = NULL; ptrdiff_t idx_left = 0; ptrdiff_t idx_right = table->nr_entries; @@ -5100,8 +5029,8 @@ dump_find_relocation (const struct dump_table_locator *const table, { found = mid; idx_right = idx_mid; - if (idx_right <= idx_left || - key > dump_reloc_get_offset (relocs[idx_right - 1])) + if (idx_right <= idx_left + || key > dump_reloc_get_offset (relocs[idx_right - 1])) break; } } @@ -5120,8 +5049,7 @@ pdumper_cold_object_p_impl (const void *obj) { eassert (pdumper_object_p (obj)); eassert (pdumper_object_p_precise (obj)); - dump_off offset = ptrdiff_t_to_dump_off ( - (uintptr_t) obj - dump_public.start); + dump_off offset = ptrdiff_t_to_dump_off ((uintptr_t) obj - dump_public.start); return offset >= dump_private.header.cold_start; } @@ -5129,8 +5057,7 @@ enum Lisp_Type pdumper_find_object_type_impl (const void *obj) { eassert (pdumper_object_p (obj)); - dump_off offset = ptrdiff_t_to_dump_off ( - (uintptr_t) obj - dump_public.start); + dump_off offset = ptrdiff_t_to_dump_off ((uintptr_t) obj - dump_public.start); if (offset % DUMP_ALIGNMENT != 0) return PDUMPER_NO_OBJECT; const struct dump_reloc *reloc = @@ -5182,9 +5109,8 @@ dump_read_all (int fd, void *buf, size_t bytes_to_read) /* Some platforms accept only int-sized values to read. */ unsigned chunk_to_read = INT_MAX; if (bytes_to_read - bytes_read < chunk_to_read) - chunk_to_read = (unsigned)(bytes_to_read - bytes_read); - ssize_t chunk = - read (fd, (char*) buf + bytes_read, chunk_to_read); + chunk_to_read = (unsigned) (bytes_to_read - bytes_read); + ssize_t chunk = read (fd, (char *) buf + bytes_read, chunk_to_read); if (chunk < 0) return chunk; if (chunk == 0) @@ -5200,25 +5126,24 @@ dump_read_all (int fd, void *buf, size_t bytes_to_read) static int dump_reloc_size (const struct dump_reloc reloc) { - if (sizeof (Lisp_Object) == sizeof (void*)) + if (sizeof (Lisp_Object) == sizeof (void *)) return sizeof (Lisp_Object); - if (reloc.type == RELOC_DUMP_TO_EMACS_PTR_RAW || - reloc.type == RELOC_DUMP_TO_DUMP_PTR_RAW) - return sizeof (void*); + if (reloc.type == RELOC_DUMP_TO_EMACS_PTR_RAW + || reloc.type == RELOC_DUMP_TO_DUMP_PTR_RAW) + return sizeof (void *); return sizeof (Lisp_Object); } static Lisp_Object -dump_make_lv_from_reloc ( - const uintptr_t dump_base, - const struct dump_reloc reloc) +dump_make_lv_from_reloc (const uintptr_t dump_base, + const struct dump_reloc reloc) { const dump_off reloc_offset = dump_reloc_get_offset (reloc); uintptr_t value = dump_read_word_from_dump (dump_base, reloc_offset); enum Lisp_Type lisp_type; - if (RELOC_DUMP_TO_DUMP_LV <= reloc.type && - reloc.type < RELOC_DUMP_TO_EMACS_LV) + if (RELOC_DUMP_TO_DUMP_LV <= reloc.type + && reloc.type < RELOC_DUMP_TO_EMACS_LV) { lisp_type = reloc.type - RELOC_DUMP_TO_DUMP_LV; value += dump_base; @@ -5245,9 +5170,8 @@ dump_make_lv_from_reloc ( /* Actually apply a dump relocation. */ static inline void -dump_do_dump_relocation ( - const uintptr_t dump_base, - const struct dump_reloc reloc) +dump_do_dump_relocation (const uintptr_t dump_base, + const struct dump_reloc reloc) { const dump_off reloc_offset = dump_reloc_get_offset (reloc); @@ -5294,9 +5218,8 @@ dump_do_dump_relocation ( } static void -dump_do_all_dump_relocations ( - const struct dump_header *const header, - const uintptr_t dump_base) +dump_do_all_dump_relocations (const struct dump_header *const header, + const uintptr_t dump_base) { struct dump_reloc *r = dump_ptr (dump_base, header->dump_relocs.offset); dump_off nr_entries = header->dump_relocs.nr_entries; @@ -5305,9 +5228,8 @@ dump_do_all_dump_relocations ( } static void -dump_do_emacs_relocation ( - const uintptr_t dump_base, - const struct emacs_reloc reloc) +dump_do_emacs_relocation (const uintptr_t dump_base, + const struct emacs_reloc reloc) { ptrdiff_t pval; Lisp_Object lv; @@ -5356,9 +5278,8 @@ dump_do_emacs_relocation ( } static void -dump_do_all_emacs_relocations ( - const struct dump_header *const header, - const uintptr_t dump_base) +dump_do_all_emacs_relocations (const struct dump_header *const header, + const uintptr_t dump_base) { const dump_off nr_entries = header->emacs_relocs.nr_entries; struct emacs_reloc *r = dump_ptr (dump_base, header->emacs_relocs.offset); @@ -5429,9 +5350,9 @@ pdumper_load (const char *dump_filename) if (memcmp (header->magic, dump_magic, sizeof (dump_magic)) != 0) { - if (header->magic[0] == '!' && - ((header->magic[0] = dump_magic[0]), - memcmp (header->magic, dump_magic, sizeof (dump_magic)) == 0)) + if (header->magic[0] == '!' + && (header->magic[0] = dump_magic[0], + memcmp (header->magic, dump_magic, sizeof (dump_magic)) == 0)) { err = PDUMPER_LOAD_FAILED_DUMP; goto out; @@ -5459,9 +5380,7 @@ pdumper_load (const char *dump_filename) adj_discardable_start = header->discardable_start; dump_page_size = dump_get_page_size (); /* Snap to next page boundary. */ - adj_discardable_start = ROUNDUP ( - adj_discardable_start, - dump_page_size); + adj_discardable_start = ROUNDUP (adj_discardable_start, dump_page_size); eassert (adj_discardable_start % dump_page_size == 0); eassert (adj_discardable_start <= header->cold_start); diff --git a/src/pdumper.h b/src/pdumper.h index 7be8a8f877..ab2f426c1e 100644 --- a/src/pdumper.h +++ b/src/pdumper.h @@ -63,14 +63,13 @@ pdumper_remember_scalar (void *data, ptrdiff_t nbytes) #endif } -extern void pdumper_remember_lv_ptr_raw_impl ( - void *ptr, enum Lisp_Type type); +extern void pdumper_remember_lv_ptr_raw_impl (void *ptr, enum Lisp_Type type); /* Remember the pointer at *PTR. *PTR must be null or point to a Lisp object. TYPE is the rough type of Lisp object to which *PTR points. */ INLINE void -pdumper_remember_lv_ptr_raw (void* ptr, enum Lisp_Type type) +pdumper_remember_lv_ptr_raw (void *ptr, enum Lisp_Type type) { #ifdef HAVE_PDUMPER pdumper_remember_lv_ptr_raw_impl (ptr, type); @@ -130,7 +129,8 @@ enum pdumper_load_result enum pdumper_load_result pdumper_load (const char *dump_filename); -struct pdumper_loaded_dump { +struct pdumper_loaded_dump +{ uintptr_t start; uintptr_t end; }; commit 7fddde1f06def311c198303e6ac5a26256f17eb7 Author: Eli Zaretskii Date: Mon Mar 11 17:32:38 2019 +0200 Fix show-trailing-whitespace in R2L text * src/xdisp.c (highlight_trailing_whitespace): Allow for stretch glyphs at the left edge of R2L lines, when skipping glyphs inserted by the display engine. This unbreaks show-trailing-whitespace in R2L lines. diff --git a/src/xdisp.c b/src/xdisp.c index 6d30afda6d..5ae8fc1cf6 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -20578,7 +20578,7 @@ highlight_trailing_whitespace (struct it *it) else { while (glyph <= start - && glyph->type == CHAR_GLYPH + && (glyph->type == CHAR_GLYPH || glyph->type == STRETCH_GLYPH) && NILP (glyph->object)) ++glyph; } commit 93c0527a6afbdd5228ff5590d03a35f738a47d18 Author: Paul Eggert Date: Mon Mar 11 08:20:54 2019 -0700 Fix a small pdumper memory leak * src/pdumper.c (dump_mmap_reset): Free the private area here ... (dump_mm_heap_cb_release): ... instead of here. (dump_mmap_release_heap): Simplify by avoiding a local. (dump_mmap_contiguous): Reindent GNU style. diff --git a/src/pdumper.c b/src/pdumper.c index dd272a0389..36a06d9828 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -1950,7 +1950,7 @@ dump_field_fixup_later (struct dump_context *ctx, const void *in_start, const void *in_field) { - // TODO: more error checking + /* TODO: more error checking. */ (void) field_relpos (in_start, in_field); } @@ -2067,7 +2067,7 @@ dump_interval_tree (struct dump_context *ctx, #if CHECK_STRUCTS && !defined (HASH_interval_1B38941C37) # error "interval changed. See CHECK_STRUCTS comment." #endif - // TODO: output tree breadth-first? + /* TODO: output tree breadth-first? */ struct interval out; dump_object_start (ctx, &out, sizeof (out)); DUMP_FIELD_COPY (&out, tree, total_length); @@ -4100,7 +4100,7 @@ types. */) /* We want to consolidate certain object types that we know are very likely to be modified. */ ctx->flags.defer_hash_tables = true; - // ctx->flags.defer_symbols = true; XXX + /* ctx->flags.defer_symbols = true; XXX */ /* These objects go into special sections. */ ctx->flags.defer_cold_objects = true; @@ -4701,7 +4701,9 @@ dump_mmap_reset (struct dump_memory_map *map) { map->mapping = NULL; map->release = NULL; + void *private = map->private; map->private = NULL; + free (private); } static void @@ -4723,17 +4725,13 @@ dump_mm_heap_cb_release (struct dump_memory_map_heap_control_block *cb) { eassert (cb->refcount > 0); if (--cb->refcount == 0) - { - free (cb->mem); - free (cb); - } + free (cb->mem); } static void dump_mmap_release_heap (struct dump_memory_map *map) { - struct dump_memory_map_heap_control_block *cb = map->private; - dump_mm_heap_cb_release (cb); + dump_mm_heap_cb_release (map->private); } /* Implement dump_mmap using malloc and read. */ @@ -4932,9 +4930,7 @@ dump_mmap_contiguous ( total_size += maps[i].spec.size; } - return (VM_SUPPORTED ? - dump_mmap_contiguous_vm : - dump_mmap_contiguous_heap) + return (VM_SUPPORTED ? dump_mmap_contiguous_vm : dump_mmap_contiguous_heap) (maps, nr_maps, total_size); } commit 95373b69b34f9756d2f05b19798b763d22aa5f0a Author: Martin Rudalics Date: Mon Mar 11 09:57:23 2019 +0100 Rewrite minibuffer window resizing code * src/frame.c (resize_mini_frames): New variable. * src/window.c (resize_mini_window_apply): New function. (grow_mini_window, shrink_mini_window): Remove PIXELWISE argument. Call resize_mini_window_apply to apply changes. (Fresize_mini_window_internal): Call resize_mini_window_apply to apply changes. (Qwindow__resize_mini_frame): New symbol. * src/window.h (grow_mini_window, shrink_mini_window): Adjust external declarations. * src/xdisp.c (resize_mini_window): For minibuffer-only frames call 'window--resize-mini-frame' if resize_mini_frames is non-nil. Offload parts of logic to grow_mini_window and shrink_mini_window which are now called without the PIXELWISE argument. (Vresize_mini_windows): Mention 'resize-mini-frames' in doc-string. * lisp/cus-start.el (resize-mini-frames): Add customization support. * lisp/window.el (window--resize-mini-window): Simplify code. (window--resize-mini-frame): New function. * doc/lispref/minibuf.texi (Minibuffer Windows): Describe new option 'resize-mini-frames'. * etc/NEWS: Mention new option 'resize-mini-frames'. diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index a2b6e14550..6c37fa92d6 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -2402,6 +2402,25 @@ will not work. If you want to prevent resizing of minibuffer windows when displaying long messages, bind the @code{message-truncate-lines} variable instead (@pxref{Echo Area Customization}). +The option @code{resize-mini-windows} does not affect the behavior of +minibuffer-only frames (@pxref{Frame Layout}). The following option +allows to automatically resize such frames as well. + +@defopt resize-mini-frames +If this is @code{nil}, minibuffer-only frames are never resized +automatically. + +If this is a function, that function is called with the +minibuffer-only frame to be resized as sole argument. At the time +this function is called, the buffer of the minibuffer window of that +frame is the buffer whose contents will be shown the next time that +window is redisplayed. The function is expected to fit the frame to +the buffer in some appropriate way. + +Any other non-@code{nil} value means to resize minibuffer-only frames +by calling @code{fit-frame-to-buffer} (@pxref{Resizing Windows}). +@end defopt + @node Minibuffer Contents @section Minibuffer Contents diff --git a/etc/NEWS b/etc/NEWS index 3dc21dfe89..410c1821ae 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1468,6 +1468,11 @@ return the total and body sizes of any window during last redisplay. See the section "(elisp) Window Hooks" in the Elisp manual for a detailed explanation of the new behavior. ++++ +*** New option 'resize-mini-frames'. +This option allows to automatically resize minibuffer-only frames +similarly to how minibuffer windows are resized on "normal" frames. + +++ ** New buffer display action alist entry 'dedicated'. Such an entry allows to specify the dedicated status of a window diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 44ce2929d6..baa05d0a89 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -314,7 +314,13 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (other :tag "hidden by keypress" 1)) "22.1") (make-pointer-invisible mouse boolean "23.2") - (menu-bar-mode frames boolean nil + (resize-mini-frames + frames (choice + (const :tag "Never" nil) + (const :tag "Fit frame to buffer" t) + (function :tag "User-defined function")) + "27.1") + (menu-bar-mode frames boolean nil ;; FIXME? ;; :initialize custom-initialize-default :set custom-set-minor-mode) diff --git a/lisp/window.el b/lisp/window.el index a8b65657a4..b769be0633 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -2753,7 +2753,7 @@ as small) as possible, but don't signal an error." ;; Sanitize DELTA. (cond ((<= (+ height delta) 0) - (setq delta (- (frame-char-height (window-frame window)) height))) + (setq delta (- (frame-char-height frame) height))) ((> delta min-delta) (setq delta min-delta))) @@ -3381,6 +3381,12 @@ routines." pixel-delta (/ pixel-delta (frame-char-height frame))))) +(defun window--resize-mini-frame (frame) + "Resize minibuffer-only frame FRAME." + (if (functionp resize-mini-frames) + (funcall resize-mini-frames frame) + (fit-frame-to-buffer frame))) + (defun window--sanitize-window-sizes (horizontal) "Assert that all windows on selected frame are large enough. If necessary and possible, make sure that every window on frame diff --git a/src/frame.c b/src/frame.c index c336369dbb..46bdf22231 100644 --- a/src/frame.c +++ b/src/frame.c @@ -6079,6 +6079,19 @@ setting this variable does not change that frame's previous association. This variable is local to the current terminal and cannot be buffer-local. */); + DEFVAR_LISP ("resize-mini-frames", resize_mini_frames, + doc: /* Non-nil means resize minibuffer-only frames automatically. +If this is nil, do not resize minibuffer-only frames automatically. + +If this is a function, call that function with the minibuffer-only +frame that shall be resized as sole argument. The buffer of the root +window of that frame is the buffer whose text will be eventually shown +in the minibuffer window. + +Any other non-nil value means to resize minibuffer-only frames by +calling `fit-frame-to-buffer'. */); + resize_mini_frames = Qnil; + DEFVAR_LISP ("focus-follows-mouse", focus_follows_mouse, doc: /* Non-nil if window system changes focus when you move the mouse. You should set this variable to tell Emacs how your window manager diff --git a/src/window.c b/src/window.c index c498ae81cd..ae039b76ad 100644 --- a/src/window.c +++ b/src/window.c @@ -5168,118 +5168,111 @@ Signal an error when WINDOW is the only window on its frame. */) Resizing Mini-Windows ***********************************************************************/ -/* Grow mini-window W by DELTA lines, DELTA >= 0, or as much as we - can. */ +/** + * resize_mini_window_apply: + * + * Assign new window sizes after resizing a mini window W by DELTA + * pixels. No error checking performed. + */ +static void +resize_mini_window_apply (struct window *w, int delta) +{ + struct frame *f = XFRAME (w->frame); + Lisp_Object root = FRAME_ROOT_WINDOW (f); + struct window *r = XWINDOW (root); + + block_input (); + w->pixel_height = w->pixel_height + delta; + w->total_lines = w->pixel_height / FRAME_LINE_HEIGHT (f); + + window_resize_apply (r, false); + + w->pixel_top = r->pixel_top + r->pixel_height; + w->top_line = r->top_line + r->total_lines; + + /* Enforce full redisplay of the frame. */ + /* FIXME: Shouldn't some of the caller do it? */ + fset_redisplay (f); + adjust_frame_glyphs (f); + unblock_input (); +} + +/** + * grow_mini_window: + * + * Grow mini-window W by DELTA pixels. If DELTA is negative, this may + * shrink the minibuffer window to the minimum height to display one + * line of text. + */ void -grow_mini_window (struct window *w, int delta, bool pixelwise) +grow_mini_window (struct window *w, int delta) { struct frame *f = XFRAME (w->frame); - struct window *r; - Lisp_Object root, height; - int line_height, pixel_height; + int old_height = WINDOW_PIXEL_HEIGHT (w); + int min_height = FRAME_LINE_HEIGHT (f); eassert (MINI_WINDOW_P (w)); - eassert (delta >= 0); - if (delta > 0) - { - root = FRAME_ROOT_WINDOW (f); - r = XWINDOW (root); - height = call3 (Qwindow__resize_root_window_vertically, - root, make_fixnum (- delta), pixelwise ? Qt : Qnil); - if (FIXNUMP (height) && window_resize_check (r, false)) - { - block_input (); - window_resize_apply (r, false); + if (old_height + delta < min_height) + /* Never shrink mini-window to less than its minimum + height. */ + delta = old_height > min_height ? min_height - old_height : 0; - if (pixelwise) - { - pixel_height = min (-XFIXNUM (height), INT_MAX - w->pixel_height); - line_height = pixel_height / FRAME_LINE_HEIGHT (f); - } - else - { - line_height = min (-XFIXNUM (height), - ((INT_MAX - w->pixel_height) - / FRAME_LINE_HEIGHT (f))); - pixel_height = line_height * FRAME_LINE_HEIGHT (f); - } + if (delta != 0) + { + Lisp_Object root = FRAME_ROOT_WINDOW (f); + struct window *r = XWINDOW (root); + Lisp_Object grow; - /* Grow the mini-window. */ - w->pixel_top = r->pixel_top + r->pixel_height; - w->top_line = r->top_line + r->total_lines; - /* Make sure the mini-window has always at least one line. */ - w->pixel_height = max (w->pixel_height + pixel_height, - FRAME_LINE_HEIGHT (f)); - w->total_lines = max (w->total_lines + line_height, 1); - - /* Enforce full redisplay of the frame. */ - /* FIXME: Shouldn't window--resize-root-window-vertically do it? */ - fset_redisplay (f); - adjust_frame_glyphs (f); - unblock_input (); - } - else - error ("Failed to grow minibuffer window"); + FRAME_WINDOWS_FROZEN (f) = true; + grow = call3 (Qwindow__resize_root_window_vertically, + root, make_fixnum (- delta), Qt); + if (FIXNUMP (grow) && window_resize_check (r, false)) + resize_mini_window_apply (w, -XFIXNUM (grow)); } } -/* Shrink mini-window W to one line. */ +/** + * shrink_mini_window: + * + * Shrink mini-window W to the minimum height needed to display one + * line of text. + */ void -shrink_mini_window (struct window *w, bool pixelwise) +shrink_mini_window (struct window *w) { struct frame *f = XFRAME (w->frame); - struct window *r; - Lisp_Object root, delta; - EMACS_INT height, unit; + int delta = WINDOW_PIXEL_HEIGHT (w) - FRAME_LINE_HEIGHT (f); eassert (MINI_WINDOW_P (w)); - height = pixelwise ? w->pixel_height : w->total_lines; - unit = pixelwise ? FRAME_LINE_HEIGHT (f) : 1; - if (height > unit) + if (delta > 0) { - root = FRAME_ROOT_WINDOW (f); - r = XWINDOW (root); - delta = call3 (Qwindow__resize_root_window_vertically, - root, make_fixnum (height - unit), - pixelwise ? Qt : Qnil); - if (FIXNUMP (delta) && window_resize_check (r, false)) - { - block_input (); - window_resize_apply (r, false); - - /* Shrink the mini-window. */ - w->top_line = r->top_line + r->total_lines; - w->total_lines = 1; - w->pixel_top = r->pixel_top + r->pixel_height; - w->pixel_height = FRAME_LINE_HEIGHT (f); - /* Enforce full redisplay of the frame. */ - /* FIXME: Shouldn't window--resize-root-window-vertically do it? */ - fset_redisplay (f); - adjust_frame_glyphs (f); - unblock_input (); - } - /* If the above failed for whatever strange reason we must make a - one window frame here. The same routine will be needed when - shrinking the frame (and probably when making the initial - *scratch* window). For the moment leave things as they are. */ - else - error ("Failed to shrink minibuffer window"); + Lisp_Object root = FRAME_ROOT_WINDOW (f); + struct window *r = XWINDOW (root); + Lisp_Object grow; + + FRAME_WINDOWS_FROZEN (f) = false; + grow = call3 (Qwindow__resize_root_window_vertically, + root, make_fixnum (delta), Qt); + + if (FIXNUMP (grow) && window_resize_check (r, false)) + resize_mini_window_apply (w, -XFIXNUM (grow)); } } -DEFUN ("resize-mini-window-internal", Fresize_mini_window_internal, Sresize_mini_window_internal, 1, 1, 0, - doc: /* Resize minibuffer window WINDOW. */) +DEFUN ("resize-mini-window-internal", Fresize_mini_window_internal, + Sresize_mini_window_internal, 1, 1, 0, + doc: /* Resize mini window WINDOW. */) (Lisp_Object window) { struct window *w = XWINDOW (window); struct window *r; struct frame *f; - int height; + int old_height, delta; - CHECK_WINDOW (window); + CHECK_LIVE_WINDOW (window); f = XFRAME (w->frame); if (!EQ (FRAME_MINIBUF_WINDOW (XFRAME (w->frame)), window)) @@ -5288,26 +5281,18 @@ DEFUN ("resize-mini-window-internal", Fresize_mini_window_internal, Sresize_mini error ("Cannot resize a minibuffer-only frame"); r = XWINDOW (FRAME_ROOT_WINDOW (f)); - height = r->pixel_height + w->pixel_height; + old_height = r->pixel_height + w->pixel_height; + delta = XFIXNUM (w->new_pixel) - w->pixel_height; if (window_resize_check (r, false) && XFIXNUM (w->new_pixel) > 0 - && height == XFIXNUM (r->new_pixel) + XFIXNUM (w->new_pixel)) + && old_height == XFIXNUM (r->new_pixel) + XFIXNUM (w->new_pixel)) { - block_input (); - window_resize_apply (r, false); - - w->pixel_height = XFIXNAT (w->new_pixel); - w->total_lines = w->pixel_height / FRAME_LINE_HEIGHT (f); - w->pixel_top = r->pixel_top + r->pixel_height; - w->top_line = r->top_line + r->total_lines; + resize_mini_window_apply (w, delta); - fset_redisplay (f); - adjust_frame_glyphs (f); - unblock_input (); return Qt; } else - error ("Failed to resize minibuffer window"); + error ("Cannot resize mini window"); } /* Mark window cursors off for all windows in the window tree rooted @@ -8047,6 +8032,7 @@ syms_of_window (void) DEFSYM (Qwindow__resize_root_window, "window--resize-root-window"); DEFSYM (Qwindow__resize_root_window_vertically, "window--resize-root-window-vertically"); + DEFSYM (Qwindow__resize_mini_frame, "window--resize-mini-frame"); DEFSYM (Qwindow__sanitize_window_sizes, "window--sanitize-window-sizes"); DEFSYM (Qwindow__pixel_to_total, "window--pixel-to-total"); DEFSYM (Qsafe, "safe"); diff --git a/src/window.h b/src/window.h index d816bb1683..b450173eb2 100644 --- a/src/window.h +++ b/src/window.h @@ -1063,8 +1063,8 @@ extern Lisp_Object window_from_coordinates (struct frame *, int, int, extern void resize_frame_windows (struct frame *, int, bool, bool); extern void restore_window_configuration (Lisp_Object); extern void delete_all_child_windows (Lisp_Object); -extern void grow_mini_window (struct window *, int, bool); -extern void shrink_mini_window (struct window *, bool); +extern void grow_mini_window (struct window *, int); +extern void shrink_mini_window (struct window *); extern int window_relative_x_coord (struct window *, enum window_part, int); void run_window_change_functions (void); diff --git a/src/xdisp.c b/src/xdisp.c index 0af5e39dfb..6d30afda6d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11259,15 +11259,10 @@ bool resize_mini_window (struct window *w, bool exact_p) { struct frame *f = XFRAME (w->frame); - bool window_height_changed_p = false; + int old_height = WINDOW_PIXEL_HEIGHT (w); eassert (MINI_WINDOW_P (w)); - /* By default, start display at the beginning. */ - set_marker_both (w->start, w->contents, - BUF_BEGV (XBUFFER (w->contents)), - BUF_BEGV_BYTE (XBUFFER (w->contents))); - /* Don't resize windows while redisplaying a window; it would confuse redisplay functions when the size of the window they are displaying changes from under them. Such a resizing can happen, @@ -11278,19 +11273,30 @@ resize_mini_window (struct window *w, bool exact_p) return false; /* Nil means don't try to resize. */ - if (NILP (Vresize_mini_windows) + if ((NILP (Vresize_mini_windows) + && (NILP (resize_mini_frames) || !FRAME_MINIBUF_ONLY_P (f))) || (FRAME_X_P (f) && FRAME_X_OUTPUT (f) == NULL)) return false; - if (!FRAME_MINIBUF_ONLY_P (f)) + /* By default, start display at the beginning. */ + set_marker_both (w->start, w->contents, + BUF_BEGV (XBUFFER (w->contents)), + BUF_BEGV_BYTE (XBUFFER (w->contents))); + + if (FRAME_MINIBUF_ONLY_P (f)) + { + if (!NILP (resize_mini_frames)) + safe_call1 (Qwindow__resize_mini_frame, WINDOW_FRAME (w)); + } + else { struct it it; - int total_height = (WINDOW_PIXEL_HEIGHT (XWINDOW (FRAME_ROOT_WINDOW (f))) - + WINDOW_PIXEL_HEIGHT (w)); + int old_height = WINDOW_PIXEL_HEIGHT (w); int unit = FRAME_LINE_HEIGHT (f); int height, max_height; struct text_pos start; struct buffer *old_current_buffer = NULL; + int windows_height = FRAME_WINDOWS_HEIGHT (f); if (current_buffer != XBUFFER (w->contents)) { @@ -11302,14 +11308,14 @@ resize_mini_window (struct window *w, bool exact_p) /* Compute the max. number of lines specified by the user. */ if (FLOATP (Vmax_mini_window_height)) - max_height = XFLOAT_DATA (Vmax_mini_window_height) * total_height; + max_height = XFLOAT_DATA (Vmax_mini_window_height) * windows_height; else if (FIXNUMP (Vmax_mini_window_height)) max_height = XFIXNUM (Vmax_mini_window_height) * unit; else - max_height = total_height / 4; + max_height = windows_height / 4; /* Correct that max. height if it's bogus. */ - max_height = clip_to_bounds (unit, max_height, total_height); + max_height = clip_to_bounds (unit, max_height, windows_height); /* Find out the height of the text in the window. */ if (it.line_wrap == TRUNCATE) @@ -11335,63 +11341,27 @@ resize_mini_window (struct window *w, bool exact_p) } else SET_TEXT_POS (start, BEGV, BEGV_BYTE); + SET_MARKER_FROM_TEXT_POS (w->start, start); if (EQ (Vresize_mini_windows, Qgrow_only)) { /* Let it grow only, until we display an empty message, in which case the window shrinks again. */ - if (height > WINDOW_PIXEL_HEIGHT (w)) - { - int old_height = WINDOW_PIXEL_HEIGHT (w); - - FRAME_WINDOWS_FROZEN (f) = true; - grow_mini_window (w, height - WINDOW_PIXEL_HEIGHT (w), true); - window_height_changed_p = WINDOW_PIXEL_HEIGHT (w) != old_height; - } - else if (height < WINDOW_PIXEL_HEIGHT (w) - && (exact_p || BEGV == ZV)) - { - int old_height = WINDOW_PIXEL_HEIGHT (w); - - FRAME_WINDOWS_FROZEN (f) = false; - shrink_mini_window (w, true); - window_height_changed_p = WINDOW_PIXEL_HEIGHT (w) != old_height; - } - } - else - { - /* Always resize to exact size needed. */ - if (height > WINDOW_PIXEL_HEIGHT (w)) - { - int old_height = WINDOW_PIXEL_HEIGHT (w); - - FRAME_WINDOWS_FROZEN (f) = true; - grow_mini_window (w, height - WINDOW_PIXEL_HEIGHT (w), true); - window_height_changed_p = WINDOW_PIXEL_HEIGHT (w) != old_height; - } - else if (height < WINDOW_PIXEL_HEIGHT (w)) - { - int old_height = WINDOW_PIXEL_HEIGHT (w); - - FRAME_WINDOWS_FROZEN (f) = false; - shrink_mini_window (w, true); - - if (height) - { - FRAME_WINDOWS_FROZEN (f) = true; - grow_mini_window (w, height - WINDOW_PIXEL_HEIGHT (w), true); - } - - window_height_changed_p = WINDOW_PIXEL_HEIGHT (w) != old_height; - } + if (height > old_height) + grow_mini_window (w, height - old_height); + else if (height < old_height && (exact_p || BEGV == ZV)) + shrink_mini_window (w); } + else if (height != old_height) + /* Always resize to exact size needed. */ + grow_mini_window (w, height - old_height); if (old_current_buffer) set_buffer_internal (old_current_buffer); } - return window_height_changed_p; + return WINDOW_PIXEL_HEIGHT (w) != old_height; } @@ -33091,7 +33061,11 @@ A value of nil means don't automatically resize mini-windows. A value of t means resize them to fit the text displayed in them. A value of `grow-only', the default, means let mini-windows grow only; they return to their normal size when the minibuffer is closed, or the -echo area becomes empty. */); +echo area becomes empty. + +This variable does not affect resizing of the minibuffer window of +minibuffer-only frames. These are handled by 'resize-mini-frames' +only. */); /* Contrary to the doc string, we initialize this to nil, so that loading loadup.el won't try to resize windows before loading window.el, where some functions we need to call for this live. commit 27466c62fdc977e8d3b23c5ae4f529a64ac7374f Author: Paul Eggert Date: Sun Mar 10 23:46:26 2019 -0700 * src/editfns.c: Fix docstring typo. diff --git a/src/editfns.c b/src/editfns.c index 7f11037f1e..d6ad7474fe 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -4486,7 +4486,7 @@ functions if all the text being accessed has this property. */); doc: /* Non-nil means `format' %x and %o treat integers as unsigned. This has machine-dependent results. Nil means to treat integers as signed, which is portable and is the default; for example, if N is a -negative integer, (read (format "#x%x") N) returns N only when this +negative integer, (read (format "#x%x" N)) returns N only when this variable is nil. This variable is experimental; email 32252@debbugs.gnu.org if you need commit 9b4d34fa7884d6b67ec19593c5d2d3b587434966 Author: Paul Eggert Date: Sun Mar 10 23:39:48 2019 -0700 Improve binary-as-unsigned treatment (Bug#34792) * etc/NEWS: * src/editfns.c (Fformat, binary_as_unsigned): Update now that we always have bignums. (syms_of_editfns) [!defined lisp_h_FIXNUMP]: Remove now-obsolete code, since lisp_h_FIXNUMP is always defined now. * test/src/editfns-tests.el (read-large-integer): Simplify, now that we can assume binary-as-unsigned defaults to nil. diff --git a/etc/NEWS b/etc/NEWS index 0a1d9ea222..3dc21dfe89 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1490,10 +1490,10 @@ between two strings. '(quote x)' instead of 'x you will have to bind it to nil where applicable. +++ -** Numbers formatted via '%o' or '%x' may now be formatted as signed integers. +** Numbers formatted via '%o' or '%x' are now formatted as signed integers. This avoids problems in calls like '(read (format "#x%x" -1))', and is -more compatible with bignums, a planned feature. To get this -behavior, set the experimental variable 'binary-as-unsigned' to nil, +more compatible with bignums. To get the traditional machine-dependent +behavior, set the experimental variable 'binary-as-unsigned' to t, and if the new behavior breaks your code please email 32252@debbugs.gnu.org. Because '%o' and '%x' can now format signed integers, they now support the '+' and space flags. diff --git a/src/editfns.c b/src/editfns.c index f5a9e0a640..7f11037f1e 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -3001,8 +3001,8 @@ the next available argument, or the argument explicitly specified: %S means print any object as an s-expression (using `prin1'). The argument used for %d, %o, %x, %e, %f, %g or %c must be a number. -The value of `binary-as-unsigned' determines whether it's printed as - signed or unsigned by %o, %x, and %X. +%o, %x, and %X treat arguments as unsigned if `binary-as-unsigned' is t + (this is experimental; email 32252@debbugs.gnu.org if you need it). Use %% to put a single % into the output. A %-sequence other than %% may contain optional field number, flag, @@ -4485,17 +4485,13 @@ functions if all the text being accessed has this property. */); binary_as_unsigned, doc: /* Non-nil means `format' %x and %o treat integers as unsigned. This has machine-dependent results. Nil means to treat integers as -signed, which is portable; for example, if N is a negative integer, -(read (format "#x%x") N) returns N only when this variable is nil. +signed, which is portable and is the default; for example, if N is a +negative integer, (read (format "#x%x") N) returns N only when this +variable is nil. This variable is experimental; email 32252@debbugs.gnu.org if you need it to be non-nil. */); - /* For now, default to true if bignums exist, false in traditional Emacs. */ -#ifdef lisp_h_FIXNUMP binary_as_unsigned = false; -#else - binary_as_unsigned = true; -#endif defsubr (&Spropertize); defsubr (&Schar_equal); diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index a01dc4a478..449f00f378 100644 --- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -184,12 +184,11 @@ 'integer)) (should (eq (type-of (read (format "#32rG%x" most-positive-fixnum))) 'integer)) - (let ((binary-as-unsigned nil)) - (dolist (fmt '("%d" "%s" "#o%o" "#x%x")) - (dolist (val (list most-negative-fixnum (1+ most-negative-fixnum) - -1 0 1 - (1- most-positive-fixnum) most-positive-fixnum)) - (should (eq val (read (format fmt val)))))))) + (dolist (fmt '("%d" "%s" "#o%o" "#x%x")) + (dolist (val (list most-negative-fixnum (1+ most-negative-fixnum) + -1 0 1 + (1- most-positive-fixnum) most-positive-fixnum)) + (should (eq val (read (format fmt val))))))) (ert-deftest format-%o-invalid-float () (should-error (format "%o" -1e-37) commit e81c44fdb4110a1e5af97669c1a7ef8277528b6c Author: Paul Eggert Date: Sun Mar 10 23:08:37 2019 -0700 More regexp corrections and tweaks Problems reported by Mattias Engdegård in: https://lists.gnu.org/r/emacs-devel/2019-03/msg00247.html * lisp/align.el (align-rules-list): * lisp/comint.el (comint-output-filter): * lisp/language/china-util.el (encode-hz-region): * lisp/progmodes/cperl-mode.el (cperl-indent-exp): * lisp/progmodes/idlwave.el (idlwave-is-pointer-dereference): * lisp/progmodes/scheme.el (dsssl-font-lock-keywords): * lisp/textmodes/texinfmt.el (texinfo-accent-commands): * test/src/regex-emacs-tests.el (regex-tests-re-even-escapes): Fix some regular-expression typos. diff --git a/lisp/align.el b/lisp/align.el index 43918811b9..594d15eee1 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -399,7 +399,7 @@ The possible settings for `align-region-separate' are: (lambda (end reverse) (funcall (if reverse 're-search-backward 're-search-forward) - (concat "[^ \t\n\\\\]" + (concat "[^ \t\n\\]" (regexp-quote comment-start) "\\(.+\\)$") end t)))) (modes . align-open-comment-modes)) diff --git a/lisp/comint.el b/lisp/comint.el index a5fca7ea2a..e5012be982 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2081,7 +2081,7 @@ Make backspaces delete the previous character." (prompt-re (concat "\\`" (regexp-quote prompt)))) (while (string-match prompt-re string) (setq string (substring string (match-end 0))))))) - (while (string-match (concat "\\(^" comint-prompt-regexp + (while (string-match (concat "\\(" comint-prompt-regexp "\\)\\1+") string) (setq string (replace-match "\\1" nil nil string))) diff --git a/lisp/language/china-util.el b/lisp/language/china-util.el index 70710bac18..1638565133 100644 --- a/lisp/language/china-util.el +++ b/lisp/language/china-util.el @@ -168,7 +168,7 @@ Return the length of resulting text." ;; ESC ESC -> ESC (delete-char 1) (forward-char -1) - (if (looking-at iso2022-gb-designation) + (if (looking-at "\e\\$A") (progn (delete-region (match-beginning 0) (match-end 0)) (insert hz-gb-designation) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index a9402e17a9..970c5669c6 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -4924,7 +4924,7 @@ conditional/loop constructs." (if (looking-at "\\(state\\|my\\|local\\|our\\)\\>") (forward-sexp -1)))) (if (looking-at - (concat "\\(\\elsif\\|if\\|unless\\|while\\|until" + (concat "\\(elsif\\|if\\|unless\\|while\\|until" "\\|for\\(each\\)?\\>\\(\\(" cperl-maybe-white-and-comment-rex "\\(state\\|my\\|local\\|our\\)\\)?" diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el index 25bc788ffc..5ff22571b9 100644 --- a/lisp/progmodes/idlwave.el +++ b/lisp/progmodes/idlwave.el @@ -3690,7 +3690,7 @@ constants - a double quote followed by an octal digit." (save-excursion (forward-char) (re-search-backward (concat "\\(" idlwave-idl-keywords - "\\|[[(*+-/=,^><]\\)\\s-*\\*") limit t)))) + "\\|[-[(*+/=,^><]\\)\\s-*\\*") limit t)))) ;; Statement templates diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index 62f521ee94..507a4c7085 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -433,7 +433,7 @@ that variable's value is a string." ;; (make-regexp '("case" "cond" "else" "if" "lambda" ;; "let" "let*" "letrec" "and" "or" "map" "with-mode")) "and\\|c\\(ase\\|ond\\)\\|else\\|if\\|" - "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode" + "l\\(ambda\\|et\\(\\|\\*\\|rec\\)\\)\\|map\\|or\\|with-mode" "\\)\\>") 1) ;; DSSSL syntax diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el index 61c31a511c..4bfecb48b6 100644 --- a/lisp/textmodes/texinfmt.el +++ b/lisp/textmodes/texinfmt.el @@ -552,13 +552,7 @@ if large. You can use `Info-split' to do this manually." (defvar texinfo-accent-commands (concat - "@^\\|" - "@`\\|" - "@'\\|" - "@\"\\|" - "@,\\|" - "@=\\|" - "@~\\|" + "@[\"',=^`~]\\|" "@OE{\\|" "@oe{\\|" "@AA{\\|" diff --git a/test/src/regex-emacs-tests.el b/test/src/regex-emacs-tests.el index 9a40316573..0ae50c94d4 100644 --- a/test/src/regex-emacs-tests.el +++ b/test/src/regex-emacs-tests.el @@ -278,7 +278,7 @@ on success" (defconst regex-tests-re-even-escapes - "\\(?:^\\|[^\\\\]\\)\\(?:\\\\\\\\\\)*" + "\\(?:^\\|[^\\]\\)\\(?:\\\\\\\\\\)*" "Regex that matches an even number of \\ characters") (defconst regex-tests-re-odd-escapes commit e2f35443796d423ea5f96a99da425a927327deb2 Author: Paul Eggert Date: Sun Mar 10 23:03:48 2019 -0700 Update from Gnulib This incorporates: 2019-03-10 alloca-opt: Fix conflict mingw's new file 2019-03-03 getloadavg: Write NULL for the null pointer Reported by Michal Privoznik . * lib/getloadavg.c (getloadavg): Write NULL instead of 0. * build-aux/config.guess, build-aux/move-if-change: * doc/misc/texinfo.tex, lib/alloca.in.h, lib/getloadavg.c: * m4/alloca.m4: Copy from Gnulib. * lib/gnulib.mk.in: Regenerate. diff --git a/build-aux/config.guess b/build-aux/config.guess index 8ef92de0e5..79d1317f52 100755 --- a/build-aux/config.guess +++ b/build-aux/config.guess @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2019 Free Software Foundation, Inc. -timestamp='2019-02-19' +timestamp='2019-03-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -985,22 +985,50 @@ EOF exit ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -1433,6 +1461,130 @@ EOF exit ;; esac +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) /* >= ULTRIX4 */ + printf ("mips-dec-ultrix4\n"); exit (0); +#else +#if defined(ULTRIX3) || defined(ultrix3) || defined(SIGLOST) + printf ("mips-dec-ultrix3\n"); exit (0); +#endif +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in diff --git a/build-aux/move-if-change b/build-aux/move-if-change index 9538fdbac2..9073f1a500 100755 --- a/build-aux/move-if-change +++ b/build-aux/move-if-change @@ -36,9 +36,10 @@ The variable CMPPROG can be used to specify an alternative to 'cmp'. Report bugs to ." +year=`expr "$VERSION" : '\([^-]*\)'` version=`expr "$VERSION" : '\([^ ]*\)'` version="move-if-change (gnulib) $version -Copyright (C) 2011 Free Software Foundation, Inc. +Copyright $year Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 929418c760..5ae97d767d 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2019-02-23.16} +\def\texinfoversion{2019-03-09.13} % % Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc. @@ -258,8 +258,8 @@ % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. -% In the second call \prevchapterdefs is the same as \lastchapterdefs, -% and \prevsectiondefs is the same as \lastsectiondefs. +% In the second call \prevchapterdefs is the same as \currentchapterdefs, +% and \prevsectiondefs is the same as \currentsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. @@ -267,11 +267,11 @@ % % See page 260 of The TeXbook. \def\domark{% - \toks0=\expandafter{\lastchapterdefs}% - \toks2=\expandafter{\lastsectiondefs}% + \toks0=\expandafter{\currentchapterdefs}% + \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% - \toks8=\expandafter{\lastcolordefs}% + \toks8=\expandafter{\currentcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom @@ -288,19 +288,19 @@ % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% - \ifcase0\topmark\fi + \ifcase0\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} -\def\getcolormarks{\ifcase2\topmark\fi} +\def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. -\def\lastchapterdefs{} -\def\lastsectiondefs{} -\def\lastsection{} +\def\currentchapterdefs{} +\def\currentsectiondefs{} +\def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} -\def\lastcolordefs{} +\def\currentcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset @@ -310,11 +310,35 @@ % Main output routine. % \chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} +\newtoks\defaultoutput +\defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} +\output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox +% When outputting the double column layout for indices, an output routine +% is run several times, which hides the original value of \topmark. This +% can lead to a page heading being output and duplicating the chapter heading +% of the index. Hence, save the contents of \topmark at the beginning of +% the output routine. The saved contents are valid until we actually +% \shipout a page. +% +% (We used to run a short output routine to actually set \topmark and +% \firstmark to the right values, but if this was called with an empty page +% containing whatsits for writing index entries, the whatsits would be thrown +% away and the index auxiliary file would remain empty.) +% +\newtoks\savedtopmark +\newif\iftopmarksaved +\topmarksavedtrue +\def\savetopmark{% + \iftopmarksaved\else + \global\savedtopmark=\expandafter{\topmark}% + \global\topmarksavedtrue + \fi +} + % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written @@ -326,23 +350,17 @@ \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % - % Common context changes for both heading and footing. - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars} - % % Retrieve the information for the headings from the marks in the page, % and call Plain TeX's \makeheadline and \makefootline, which use the % values in \headline and \footline. % % This is used to check if we are on the first page of a chapter. - \ifcase1\topmark\fi + \ifcase1\the\savedtopmark\fi \let\prevchaptername\thischaptername \ifcase0\firstmark\fi \let\curchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi - \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi % \ifx\curchaptername\prevchaptername \let\thischapterheading\thischapter @@ -353,7 +371,14 @@ \def\thischapterheading{}% \fi % + % Common context changes for both heading and footing. + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars} + % \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% + % + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% @@ -362,14 +387,8 @@ % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - % We don't want .vr (or whatever) entries like this: - % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}} - % "\acronym" won't work when it's read back in; - % it needs to be - % {\code {{\backslashcurfont }acronym} + \atdummies % don't expand commands in the output. + \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi @@ -384,8 +403,9 @@ \unvbox\footlinebox \fi % - }% end of \shipout\vbox - }% end of group with \indexdummies + }% + }% + \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } @@ -1161,7 +1181,7 @@ % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% - \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } @@ -1169,7 +1189,7 @@ \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} - \def\lastcolordefs{} + \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt @@ -1547,7 +1567,7 @@ % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% - \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } @@ -1555,7 +1575,7 @@ \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} - \def\lastcolordefs{} + \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt @@ -3032,41 +3052,33 @@ \global\def/{\normalslash} } -% we put a little stretch before and after the breakable chars, to help -% line breaking of long url's. The unequal skips make look better in -% cmtt at least, especially for dots. -\def\urefprestretchamount{.13em} -\def\urefpoststretchamount{.1em} -\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax} -\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax} -% -\def\urefcodeamp{\urefprestretch \&\urefpoststretch} -\def\urefcodedot{\urefprestretch .\urefpoststretch} -\def\urefcodehash{\urefprestretch \#\urefpoststretch} -\def\urefcodequest{\urefprestretch ?\urefpoststretch} +\def\urefcodeamp{\urefprebreak \&\urefpostbreak} +\def\urefcodedot{\urefprebreak .\urefpostbreak} +\def\urefcodehash{\urefprebreak \#\urefpostbreak} +\def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% - \urefprestretch \slashChar + \urefprebreak \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. - \ifx\next/\else \urefpoststretch \fi + \ifx\next/\else \urefpostbreak \fi } } -% One more complication: by default we'll break after the special -% characters, but some people like to break before the special chars, so -% allow that. Also allow no breaking at all, for manual control. +% By default we'll break after the special characters, but some people like to +% break before the special chars, so allow that. Also allow no breaking at +% all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore - \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} + \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter - \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} + \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% @@ -3076,6 +3088,14 @@ \def\wordbefore{before} \def\wordnone{none} +% Allow a ragged right output to aid breaking long URL's. Putting stretch in +% between characters of the URL doesn't look good. +\def\urefallowbreak{% + \hskip 0pt plus 1fil\relax + \allowbreak + \hskip 0pt plus -1fil\relax +} + \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. @@ -4832,23 +4852,8 @@ \def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}} -% Used when writing an index entry out to an index file to prevent -% expansion of Texinfo commands that can appear in an index entry. -% -\def\indexdummies{% - \escapechar = `\\ % use backslash in output files. - \definedummyletter\@% - \definedummyletter\ % - % - % For texindex which always views { and } as separators. - \def\{{\lbracechar{}}% - \def\}{\rbracechar{}}% - % - % Do the redefinitions. - \definedummies -} - -% Used for the aux and toc files, where @ is the escape character. +% Used for the aux, toc and index files to prevent expansion of Texinfo +% commands. % \def\atdummies{% \definedummyletter\@% @@ -4878,8 +4883,7 @@ \def\definedummyletter#1{\def#1{\string#1}}% \let\definedummyaccent\definedummyletter -% Called from \indexdummies and \atdummies, to effectively prevent -% the expansion of commands. +% Called from \atdummies to prevent the expansion of commands. % \def\definedummies{% % @@ -5044,11 +5048,9 @@ \commondummyword\xref } -% This does nothing, but for a time it was recommended to use -% \usebracesinindexestrue to be able to use braces in index entries. - \let\indexlbrace\relax \let\indexrbrace\relax +\let\indexatchar\relax {\catcode`\@=0 \catcode`\\=13 @@ -5082,10 +5084,8 @@ } \gdef\indexnonalnumreappear{% - \useindexbackslash \let-\normaldash \let<\normalless - \def\@{@}% } } @@ -5196,36 +5196,16 @@ -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. -% TODO: Two-level index? Operation index? - -% Workhorse for all indexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% +\def\doind#1#2{% \iflinks {% - \requireopenindexfile{#1}% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi % + \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % - \safewhatsit\dosubindwrite + \def\indextext{#2}% + \safewhatsit\doindwrite }% \fi } @@ -5247,21 +5227,7 @@ \fi} \def\indexisfl{fl} -% Output \ as {\indexbackslash}, because \ is an escape character in -% the index files. -\let\indexbackslash=\relax -{\catcode`\@=0 \catcode`\\=\active - @gdef@useindexbackslash{@def\{{@indexbackslash}}} -} - -% Definition for writing index entry text. -\def\sortas#1{\ignorespaces}% - -% Definition for writing index entry sort key. Should occur at the at -% the beginning of the index entry, like -% @cindex @sortas{september} \september -% The \ignorespaces takes care of following space, but there's no way -% to remove space before it. +% Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% @@ -5272,51 +5238,109 @@ \xdef\indexsortkey{#1}\endgroup} } +% The default definition +\def\sortas#1{}% -% Write the entry in \toks0 to the index file. +% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": +% * Set \bracedtext to "{aaa}{bbb}" +% * Set \fullindexsortkey to "aaa @subentry ZZZ" % -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% +\def\splitindexentry#1{% + \gdef\fullindexsortkey{}% + \xdef\bracedtext{}% + \def\sep{}% + \expandafter\doindexsegment#1\subentry\finish\subentry +} + +% append the results from the next segment +\def\doindexsegment#1\subentry{% + \def\segment{#1}% + \ifx\segment\isfinish + \else + % + % Fully expand the segment, throwing away any @sortas directives, and + % trim spaces. + \edef\trimmed{\segment}% + \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% + % + \xdef\bracedtext{\bracedtext{\trimmed}}% + % + % Get the string to sort by. Process the segment with all + % font commands turned off. + \bgroup + \let\sortas\indexwritesortas + \indexnofonts + % The braces around the commands are recognized by texindex. + \def\lbracechar{{\indexlbrace}}% + \def\rbracechar{{\indexrbrace}}% + \let\{=\lbracechar + \let\}=\rbracechar + \def\@{{\indexatchar}}% + \def\atchar##1{\@}% + % + \let\indexsortkey\empty + % Execute the segment and throw away the typeset output. This executes + % any @sortas commands in this segment. + \setbox\dummybox = \hbox{\segment}% + \ifx\indexsortkey\empty{% + \indexnonalnumdisappear + \xdef\trimmed{\segment}% + \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% + \xdef\indexsortkey{\trimmed}% + \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi + }\fi + % + % Append to \fullindexsortkey. + \edef\tmp{\gdef\noexpand\fullindexsortkey{% + \fullindexsortkey\sep\indexsortkey}}% + \tmp + \egroup + \def\sep{\subentry}% + % + \expandafter\doindexsegment \fi +} +\def\isfinish{\finish}% +\newbox\dummybox % used above + +\let\subentry\relax + +% Write the entry in \toks0 to the index file. +% +\def\doindwrite{% + \maybemarginindex % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \useindexbackslash % \indexbackslash isn't defined now so it will be output - % as is; and it will print as backslash. - % The braces around \indexbrace are recognized by texindex. - % - % Get the string to sort by, by processing the index entry with all - % font commands turned off. - {\indexnofonts - \def\lbracechar{{\indexlbrace}}% - \def\rbracechar{{\indexrbrace}}% - \let\{=\lbracechar - \let\}=\rbracechar - \indexnonalnumdisappear - \xdef\indexsortkey{}% - \let\sortas=\indexwritesortas - \edef\temp{\the\toks0}% - \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas - \ifx\indexsortkey\empty - \xdef\indexsortkey{\temp}% - \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi - \fi - }% + \atdummies + % + % For texindex which always views { and } as separators. + \def\{{\lbracechar{}}% + \def\}{\rbracechar{}}% + % + % Split the entry into primary entry and any subentries, and get the index + % sort key. + \splitindexentry\indextext % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. + % \edef\temp{% \write\writeto{% - \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}% + \string\entry{\fullindexsortkey}{\noexpand\folio}\bracedtext}% }% \temp } -\newbox\dummybox % used above + +% Put the index entry in the margin if desired (undocumented). +\def\maybemarginindex{% + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% + \fi +} +\let\SETmarginindex=\relax + % Take care of unwanted page breaks/skips around a whatsit: % @@ -5418,11 +5442,6 @@ \def\tindex {\tpindex} \def\pindex {\pgindex} -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. @@ -5436,14 +5455,10 @@ \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 12 % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi + % + % See if the index file exists and is nonempty. \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, @@ -5453,8 +5468,6 @@ \putwordIndexNonexistent \typeout{No file \jobname.\indexname s.}% \else - \catcode`\\ = 0 - % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. @@ -5462,29 +5475,7 @@ \ifeof 1 \putwordIndexIsEmpty \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\ttbackslash}% - \let\indexlbrace\{ % Likewise, set these sequences for braces - \let\indexrbrace\} % used in the sort key. - \begindoublecolumns - \let\dotheinsertentrybox\dotheinsertentryboxwithpenalty - % - % Read input from the index file line by line. - \loopdo - \ifeof1 \else - \read 1 to \nextline - \fi - % - \indexinputprocessing - \thisline - % - \ifeof1\else - \let\thisline\nextline - \repeat - %% - \enddoublecolumns + \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 @@ -5492,6 +5483,40 @@ \def\loopdo#1\repeat{\def\body{#1}\loopdoxxx} \def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next} +% If the index file starts with a backslash, forgo reading the index +% file altogether. If somebody upgrades texinfo.tex they may still have +% old index files using \ as the escape character. Reading this would +% at best lead to typesetting garbage, at worst a TeX syntax error. +\def\printindexzz#1#2\finish{% + % NB this won't work if the index file starts with a group... + \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 + \message{skipping sorted index file}% + (Skipped sorted index file in obsolete format) + \else + \printindexzzz + \fi +} + +\def\printindexzzz{% + \begindoublecolumns + \let\dotheinsertentrybox\dotheinsertentryboxwithpenalty + % + % Read input from the index file line by line. + \loopdo + \ifeof1 \else + \read 1 to \nextline + \fi + % + \indexinputprocessing + \thisline + % + \ifeof1\else + \let\thisline\nextline + \repeat + %% + \enddoublecolumns +} + \def\indexinputprocessing{% \ifeof1 \let\firsttoken\relax @@ -5511,12 +5536,18 @@ \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% + % special control sequences used in the index sort key + \let\indexlbrace\{% + \let\indexrbrace\}% + \let\indexatchar\@% + % % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. - \def\indexbackslash{\math{\backslash}}% - \let\\=\indexbackslash + \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % + % In case @\ is used for backslash + \uppercase{\let\\=~} % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% @@ -5793,34 +5824,13 @@ \newbox\partialpage \newdimen\doublecolumnhsize -% Use inside an output routine to save \topmark and \firstmark -\def\savemarks{% - \global\savedtopmark=\expandafter{\topmark }% - \global\savedfirstmark=\expandafter{\firstmark }% -} -\newtoks\savedtopmark -\newtoks\savedfirstmark - -% Set \topmark and \firstmark for next time \output runs. -% Can't be run from withinside \output (because any material -% added while an output routine is active, including -% penalties, is saved for after it finishes). The page so far -% should be empty, otherwise what's on it will be thrown away. -\def\restoremarks{% - \mark{\the\savedtopmark}% - \bgroup\output = {% - \setbox\dummybox=\box\PAGE - }abc\eject\egroup - % "abc" because output routine doesn't fire for a completely empty page. - \mark{\the\savedfirstmark}% -} - \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% + \savetopmark % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output @@ -5838,15 +5848,8 @@ \unvbox\PAGE \kern-\topskip \kern\baselineskip }% - \savemarks }% \eject % run that output routine to set \partialpage - \restoremarks - % - % We recover the two marks that the last output routine saved in order - % to propagate the information in marks added around a chapter heading, - % which could be otherwise be lost by the time the final page is output. - % % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% @@ -5887,6 +5890,7 @@ % \def\doublecolumnout{% % + \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 @@ -5942,7 +5946,7 @@ % \output = {% % Split the last of the double-column material. - \savemarks + \savetopmark \balancecolumns }% \eject % call the \output just set @@ -5950,10 +5954,9 @@ % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. - \global\output = {\onepageout{\pagecontents\PAGE}}% + \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns - \restoremarks % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns @@ -6468,27 +6471,22 @@ \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi - % FIXME: \chapmacro is currently called from inside \titlepage when - % \setcontentsaftertitlepage to print the "Table of Contents" heading, but - % this should probably be done by \sectionheading with an option to print - % in chapter size. - % % Insert the first mark before the heading break (see notes for \domark). - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \let\prevchapterdefs=\currentchapterdefs + \let\prevsectiondefs=\currentsectiondefs + \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% - \xdef\lastchapterdefs{% + \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible @@ -6499,7 +6497,7 @@ }% \else \toks0={#1}% - \xdef\lastchapterdefs{% + \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible @@ -6519,18 +6517,18 @@ % % Now the second mark, after the heading break. No break points % between here and the heading. - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs + \let\prevchapterdefs=\currentchapterdefs + \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % - % Have to define \lastsection before calling \donoderef, because the + % Have to define \currentsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. - \gdef\lastsection{#1}% + \gdef\currentsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. @@ -6619,10 +6617,10 @@ \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). - \let\prevsectiondefs=\lastsectiondefs + \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword - \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword @@ -6630,7 +6628,7 @@ \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% - \xdef\lastsectiondefs{% + \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible @@ -6643,7 +6641,7 @@ \else \ifx\sectionlevel\seckeyword \toks0={#1}% - \xdef\lastsectiondefs{% + \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible @@ -6669,28 +6667,28 @@ % % Now the second mark, after the heading break. No break points % between here and the heading. - \global\let\prevsectiondefs=\lastsectiondefs + \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% - \gdef\lastsection{#1}% + \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, - % and don't redefine \lastsection. + % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% - \gdef\lastsection{#1}% + \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% - \gdef\lastsection{#1}% + \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. @@ -7347,13 +7345,9 @@ % @raggedright does more-or-less normal line breaking but no right -% justification. From plain.tex. Don't stretch around special -% characters in urls in this environment, since the stretch at the right -% should be enough. +% justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax - \def\urefprestretchamount{0pt}% - \def\urefpoststretchamount{0pt}% } \let\Eraggedright\par @@ -7728,6 +7722,21 @@ \fi\fi } +% \dosubind {index}{topic}{subtopic} +% +% If SUBTOPIC is present, precede it with a space, and call \doind. +% (At some time during the 20th century, this made a two-level entry in an +% index such as the operation index. Nobody seemed to notice the change in +% behaviour though.) +\def\dosubind#1#2#3{% + \def\thirdarg{#3}% + \ifx\thirdarg\empty + \doind{#1}{#2}% + \else + \doind{#1}{#2\space#3}% + \fi +} + % Untyped functions: % @deffn category name args @@ -7742,7 +7751,6 @@ % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } @@ -8033,33 +8041,17 @@ % alias because \c means cedilla in @tex or @math \let\texinfoc=\c -\newcount\savedcatcodeone -\newcount\savedcatcodetwo - % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M \def\xeatspaces{\eatspaces}% % - % Temporarily undo catcode changes of \printindex. Set catcode of @ to - % 0 so that @-commands in macro expansions aren't printed literally when - % formatting an index file, where \ is used as the escape character. - \savedcatcodeone=\catcode`\@ - \savedcatcodetwo=\catcode`\\ - \catcode`\@=0 - \catcode`\\=\active - % % Process the macro body under the current catcode regime. \scantokens{#1@texinfoc}% % - \catcode`\@=\savedcatcodeone - \catcode`\\=\savedcatcodetwo - % % The \texinfoc is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. - % We avoid surrounding the call to \scantokens with \bgroup and \egroup - % to allow macros to open or close groups themselves. } % Used for copying and captions @@ -8754,7 +8746,7 @@ % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \lastsection, +% 1) NAME-title - the current sectioning name taken from \currentsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. @@ -8776,7 +8768,7 @@ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% - \toks0 = \expandafter{\lastsection}% + \toks0 = \expandafter{\currentsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout @@ -9574,13 +9566,13 @@ \global\advance\floatno by 1 % {% - % This magic value for \lastsection is output by \setref as the + % This magic value for \currentsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % - \edef\lastsection{\floatmagic=\safefloattype}% + \edef\currentsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi @@ -9703,7 +9695,7 @@ % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic -% \lastsection value which we \setref above. +% \currentsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % diff --git a/lib/alloca.in.h b/lib/alloca.in.h index ec81e119a0..a581d58f83 100644 --- a/lib/alloca.in.h +++ b/lib/alloca.in.h @@ -36,6 +36,12 @@ #ifndef alloca # ifdef __GNUC__ + /* Some version of mingw have an that causes trouble when + included after 'alloca' gets defined as a macro. As a workaround, include + this first and define 'alloca' as a macro afterwards. */ +# if (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ +# include_next +# endif # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca diff --git a/lib/getloadavg.c b/lib/getloadavg.c index 353664777f..08c14efcfc 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -424,17 +424,17 @@ getloadavg (double loadavg[], int nelem) int saved_errno; kc = kstat_open (); - if (kc == 0) + if (kc == NULL) return -1; ksp = kstat_lookup (kc, "unix", 0, "system_misc"); - if (ksp == 0) + if (ksp == NULL) return -1; if (kstat_read (kc, ksp, 0) == -1) return -1; kn = kstat_data_lookup (ksp, "avenrun_1min"); - if (kn == 0) + if (kn == NULL) { /* Return -1 if no load average information is available. */ nelem = 0; @@ -447,14 +447,14 @@ getloadavg (double loadavg[], int nelem) if (nelem >= 2) { kn = kstat_data_lookup (ksp, "avenrun_5min"); - if (kn != 0) + if (kn != NULL) { loadavg[elem++] = (double) kn->value.ul / FSCALE; if (nelem >= 3) { kn = kstat_data_lookup (ksp, "avenrun_15min"); - if (kn != 0) + if (kn != NULL) loadavg[elem++] = (double) kn->value.ul / FSCALE; } } @@ -895,7 +895,7 @@ getloadavg (double loadavg[], int nelem) /* We pass 0 for the kernel, corefile, and swapfile names to use the currently running kernel. */ kd = kvm_open (0, 0, 0, O_RDONLY, 0); - if (kd != 0) + if (kd != NULL) { /* nlist the currently running kernel. */ kvm_nlist (kd, name_list); diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in index d8e51ad403..0d9a885be3 100644 --- a/lib/gnulib.mk.in +++ b/lib/gnulib.mk.in @@ -479,6 +479,7 @@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTK_OBJ = @GTK_OBJ@ GZIP_PROG = @GZIP_PROG@ +HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ @@ -1149,7 +1150,7 @@ ifneq (,$(GL_GENERATE_ALLOCA_H)) alloca.h: alloca.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/alloca.in.h; \ + sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \ } > $@-t && \ mv -f $@-t $@ else diff --git a/m4/alloca.m4 b/m4/alloca.m4 index 46d60f9c8c..29bd289b02 100644 --- a/m4/alloca.m4 +++ b/m4/alloca.m4 @@ -1,4 +1,4 @@ -# alloca.m4 serial 14 +# alloca.m4 serial 15 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2019 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation @@ -37,6 +37,13 @@ AC_DEFUN([gl_FUNC_ALLOCA], fi AC_SUBST([ALLOCA_H]) AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) + + if test $ac_cv_working_alloca_h = yes; then + HAVE_ALLOCA_H=1 + else + HAVE_ALLOCA_H=0 + fi + AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. commit 89082c823c738b8e3b436e4af1307eefe193eac9 Author: Glenn Morris Date: Sun Mar 10 17:50:09 2019 -0700 ; Auto-commit of loaddefs files. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index cd2b2be340..0e8e5f699b 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -33,25 +33,17 @@ Quit current game \\[5x5-quit-game] \(fn &optional SIZE)" t nil) (autoload '5x5-crack-randomly "5x5" "\ -Attempt to crack 5x5 using random solutions. - -\(fn)" t nil) +Attempt to crack 5x5 using random solutions." t nil) (autoload '5x5-crack-mutating-current "5x5" "\ -Attempt to crack 5x5 by mutating the current solution. - -\(fn)" t nil) +Attempt to crack 5x5 by mutating the current solution." t nil) (autoload '5x5-crack-mutating-best "5x5" "\ -Attempt to crack 5x5 by mutating the best solution. - -\(fn)" t nil) +Attempt to crack 5x5 by mutating the best solution." t nil) (autoload '5x5-crack-xor-mutate "5x5" "\ Attempt to crack 5x5 by xoring the current and best solution. -Mutate the result. - -\(fn)" t nil) +Mutate the result." t nil) (autoload '5x5-crack "5x5" "\ Attempt to find a solution for 5x5. @@ -99,9 +91,7 @@ Ada mode is the major mode for editing Ada code. ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ -Insert a descriptive header at the top of the file. - -\(fn)" t nil) +Insert a descriptive header at the top of the file." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ada-stmt" '("ada-"))) @@ -149,9 +139,7 @@ ChangeLog entry, one element will be chosen at random.") (custom-autoload 'add-log-mailing-address "add-log" t) (autoload 'prompt-for-change-log-name "add-log" "\ -Prompt for a change log name. - -\(fn)" nil nil) +Prompt for a change log name." nil nil) (autoload 'find-change-log "add-log" "\ Find a change log file for \\[add-change-log-entry] and return the name. @@ -242,9 +230,7 @@ identifiers followed by `:' or `='. See variables `add-log-current-defun-header-regexp' and `add-log-current-defun-function'. -Has a preference of looking backwards. - -\(fn)" nil nil) +Has a preference of looking backwards." nil nil) (autoload 'change-log-merge "add-log" "\ Merge the contents of change log file OTHER-LOG with this buffer. @@ -490,16 +476,12 @@ to be colored. \(fn BEG END TITLE &optional RULES EXCLUDE-RULES)" t nil) (autoload 'align-unhighlight-rule "align" "\ -Remove any highlighting that was added by `align-highlight-rule'. - -\(fn)" t nil) +Remove any highlighting that was added by `align-highlight-rule'." t nil) (autoload 'align-newline-and-indent "align" "\ A replacement function for `newline-and-indent', aligning as it goes. The alignment is done by calling `align' on the region that was -indented. - -\(fn)" t nil) +indented." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "align" '("align-"))) @@ -523,9 +505,7 @@ Establishes allout processing as part of visiting a file if `allout-auto-activation' is non-nil, or removes it otherwise. The proper way to use this is through customizing the setting of -`allout-auto-activation'. - -\(fn)" nil nil) +`allout-auto-activation'." nil nil) (defvar allout-auto-activation nil "\ Configure allout outline mode auto-activation. @@ -577,9 +557,7 @@ With value nil, inhibit any automatic allout-mode activation.") (put 'allout-layout 'safe-local-variable (lambda (x) (or (numberp x) (listp x) (memq x '(: * + -))))) (autoload 'allout-mode-p "allout" "\ -Return t if `allout-mode' is active in current buffer. - -\(fn)" nil t) +Return t if `allout-mode' is active in current buffer." nil t) (autoload 'allout-mode "allout" "\ Toggle Allout outline mode. @@ -990,9 +968,7 @@ the buffer *Birthday-Present-for-Name*. (push (purecopy '(ansi-color 3 4 2)) package--builtin-versions) (autoload 'ansi-color-for-comint-mode-on "ansi-color" "\ -Set `ansi-color-for-comint-mode' to t. - -\(fn)" t nil) +Set `ansi-color-for-comint-mode' to t." t nil) (autoload 'ansi-color-process-output "ansi-color" "\ Maybe translate SGR control sequences of comint output into text properties. @@ -1033,9 +1009,7 @@ the rules. If the file for a super-grammar cannot be determined, special file names are used according to variable `antlr-unknown-file-formats' and a commentary with value `antlr-help-unknown-file-text' is added. The -*Help* buffer always starts with the text in `antlr-help-rules-intro'. - -\(fn)" t nil) +*Help* buffer always starts with the text in `antlr-help-rules-intro'." t nil) (autoload 'antlr-mode "antlr-mode" "\ Major mode for editing ANTLR grammar files. @@ -1044,9 +1018,7 @@ Major mode for editing ANTLR grammar files. (autoload 'antlr-set-tabs "antlr-mode" "\ Use ANTLR's convention for TABs according to `antlr-tab-offset-alist'. -Used in `antlr-mode'. Also a useful function in `java-mode-hook'. - -\(fn)" nil nil) +Used in `antlr-mode'. Also a useful function in `java-mode-hook'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "antlr-mode" '("antlr-"))) @@ -1566,9 +1538,7 @@ let-binding.") (push (purecopy '(auth-source-pass 4 0 1)) package--builtin-versions) (autoload 'auth-source-pass-enable "auth-source-pass" "\ -Enable auth-source-password-store. - -\(fn)" nil nil) +Enable auth-source-password-store." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "auth-source-pass" '("auth-source-pass-"))) @@ -1654,9 +1624,7 @@ Major mode for editing Autoconf configure.ac files. (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'. - -\(fn)" t nil) +Matches the visited file name against the elements of `auto-insert-alist'." t nil) (autoload 'define-auto-insert "autoinsert" "\ Associate CONDITION with (additional) ACTION in `auto-insert-alist'. @@ -1738,9 +1706,7 @@ write its autoloads into the specified file instead. Update loaddefs.el autoloads in batch mode. Calls `update-directory-autoloads' on the command line arguments. Definitions are written to `generated-autoload-file' (which -should be non-nil). - -\(fn)" nil nil) +should be non-nil)." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "autoload" '("autoload-" "generate" "make-autoload" "no-update-autoloads"))) @@ -1774,9 +1740,7 @@ without being changed in the part that is already in the buffer. Turn on Auto-Revert Mode. This function is designed to be added to hooks, for example: - (add-hook \\='c-mode-hook #\\='turn-on-auto-revert-mode) - -\(fn)" nil nil) + (add-hook \\='c-mode-hook #\\='turn-on-auto-revert-mode)" nil nil) (autoload 'auto-revert-tail-mode "autorevert" "\ Toggle reverting tail of buffer when the file grows. @@ -1807,9 +1771,7 @@ Use `auto-revert-mode' for changes other than appends! Turn on Auto-Revert Tail Mode. This function is designed to be added to hooks, for example: - (add-hook \\='my-logfile-mode-hook #\\='turn-on-auto-revert-tail-mode) - -\(fn)" nil nil) + (add-hook \\='my-logfile-mode-hook #\\='turn-on-auto-revert-tail-mode)" nil nil) (defvar global-auto-revert-mode nil "\ Non-nil if Global Auto-Revert mode is enabled. @@ -1907,9 +1869,7 @@ definition of \"random distance\".) (autoload 'backtrace "backtrace" "\ Print a trace of Lisp function calls currently active. -Output stream used is value of `standard-output'. - -\(fn)" nil nil) +Output stream used is value of `standard-output'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "backtrace" '("backtrace-"))) @@ -1942,9 +1902,7 @@ Run script using `bat-run' and `bat-run-args'. (autoload 'battery "battery" "\ Display battery status information in the echo area. The text being displayed in the echo area is controlled by the variables -`battery-echo-area-format' and `battery-status-function'. - -\(fn)" t nil) +`battery-echo-area-format' and `battery-status-function'." t nil) (defvar display-battery-mode nil "\ Non-nil if Display-Battery mode is enabled. @@ -2443,9 +2401,7 @@ probably because we were called from there. \(fn BOOKMARK-NAME &optional BATCH)" t nil) (autoload 'bookmark-write "bookmark" "\ -Write bookmarks to a file (reading the file name with the minibuffer). - -\(fn)" t nil) +Write bookmarks to a file (reading the file name with the minibuffer)." t nil) (function-put 'bookmark-write 'interactive-only 'bookmark-save) @@ -2492,18 +2448,14 @@ unique numeric suffixes \"<2>\", \"<3>\", etc. Display a list of existing bookmarks. The list is displayed in a buffer named `*Bookmark List*'. The leftmost column displays a D if the bookmark is flagged for -deletion, or > if it is flagged for displaying. - -\(fn)" t nil) +deletion, or > if it is flagged for displaying." t nil) (defalias 'list-bookmarks 'bookmark-bmenu-list) (defalias 'edit-bookmarks 'bookmark-bmenu-list) (autoload 'bookmark-bmenu-search "bookmark" "\ -Incremental search of bookmarks, hiding the non-matches as we go. - -\(fn)" t nil) +Incremental search of bookmarks, hiding the non-matches as we go." t nil) (defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark functions"))) (bindings--define-key map [load] '(menu-item "Load a Bookmark File..." bookmark-load :help "Load bookmarks from a bookmark file)")) (bindings--define-key map [write] '(menu-item "Save Bookmarks As..." bookmark-write :help "Write bookmarks to a file (reading the file name with the minibuffer)")) (bindings--define-key map [save] '(menu-item "Save Bookmarks" bookmark-save :help "Save currently defined bookmarks")) (bindings--define-key map [edit] '(menu-item "Edit Bookmark List" bookmark-bmenu-list :help "Display a list of existing bookmarks")) (bindings--define-key map [delete] '(menu-item "Delete Bookmark..." bookmark-delete :help "Delete a bookmark from the bookmark list")) (bindings--define-key map [rename] '(menu-item "Rename Bookmark..." bookmark-rename :help "Change the name of a bookmark")) (bindings--define-key map [locate] '(menu-item "Insert Location..." bookmark-locate :help "Insert the name of the file associated with a bookmark")) (bindings--define-key map [insert] '(menu-item "Insert Contents..." bookmark-insert :help "Insert the text of the file pointed to by a bookmark")) (bindings--define-key map [set] '(menu-item "Set Bookmark..." bookmark-set :help "Set a bookmark named inside a file.")) (bindings--define-key map [jump] '(menu-item "Jump to Bookmark..." bookmark-jump :help "Jump to a bookmark (a point in some file)")) map)) @@ -2547,9 +2499,7 @@ narrowed. \(fn &optional BUFFER)" t nil) (autoload 'browse-url-of-dired-file "browse-url" "\ -In Dired, ask a WWW browser to display the file named on this line. - -\(fn)" t nil) +In Dired, ask a WWW browser to display the file named on this line." t nil) (autoload 'browse-url-of-region "browse-url" "\ Ask a WWW browser to display the current region. @@ -2872,21 +2822,15 @@ from `browse-url-elinks-wrapper'. (autoload 'bs-cycle-next "bs" "\ Select next buffer defined by buffer cycling. The buffers taking part in buffer cycling are defined -by buffer configuration `bs-cycle-configuration-name'. - -\(fn)" t nil) +by buffer configuration `bs-cycle-configuration-name'." t nil) (autoload 'bs-cycle-previous "bs" "\ Select previous buffer defined by buffer cycling. The buffers taking part in buffer cycling are defined -by buffer configuration `bs-cycle-configuration-name'. - -\(fn)" t nil) +by buffer configuration `bs-cycle-configuration-name'." t nil) (autoload 'bs-customize "bs" "\ -Customization of group bs for Buffer Selection Menu. - -\(fn)" t nil) +Customization of group bs for Buffer Selection Menu." t nil) (autoload 'bs-show "bs" "\ Make a menu of buffers so you can manipulate buffers or the buffer list. @@ -2923,9 +2867,7 @@ columns on its right towards the left. \\[bubbles-set-game-easy] sets the difficulty to easy. \\[bubbles-set-game-medium] sets the difficulty to medium. \\[bubbles-set-game-difficult] sets the difficulty to difficult. -\\[bubbles-set-game-hard] sets the difficulty to hard. - -\(fn)" t nil) +\\[bubbles-set-game-hard] sets the difficulty to hard." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bubbles" '("bubbles-"))) @@ -3065,9 +3007,7 @@ invoked interactively. (autoload 'batch-byte-compile-if-not-done "bytecomp" "\ Like `byte-compile-file' but doesn't recompile if already up to date. Use this from the command line, with `-batch'; -it won't work in an interactive Emacs. - -\(fn)" nil nil) +it won't work in an interactive Emacs." nil nil) (autoload 'batch-byte-compile "bytecomp" "\ Run `byte-compile-file' on the files remaining on the command line. @@ -3627,9 +3567,7 @@ See Info node `(calc)Defining Functions'. (autoload 'calculator "calculator" "\ Run the Emacs calculator. -See the documentation for `calculator-mode' for more information. - -\(fn)" t nil) +See the documentation for `calculator-mode' for more information." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calculator" '("calculator-"))) @@ -3739,9 +3677,7 @@ it fails. ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ -Return the syntactic context of the current line. - -\(fn)" nil nil) +Return the syntactic context of the current line." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-engine" '("c-"))) @@ -3919,9 +3855,7 @@ should be used. This function attempts to use file contents to determine whether the code is C or C++ and based on that chooses whether to enable -`c-mode' or `c++-mode'. - -\(fn)" nil nil) +`c-mode' or `c++-mode'." nil nil) (autoload 'c++-mode "cc-mode" "\ Major mode for editing C++ code. @@ -4494,9 +4428,7 @@ to the action header. \(fn)" t nil) (autoload 'cfengine-auto-mode "cfengine" "\ -Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents. - -\(fn)" t nil) +Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cfengine" '("cfengine"))) @@ -4574,9 +4506,7 @@ Return t when OBJ is a list of strings. (autoload 'checkdoc "checkdoc" "\ Interactively check the entire buffer for style errors. The current status of the check will be displayed in a buffer which -the users will view as each check is completed. - -\(fn)" t nil) +the users will view as each check is completed." t nil) (autoload 'checkdoc-interactive "checkdoc" "\ Interactively check the current buffer for doc string errors. @@ -4604,9 +4534,7 @@ checkdoc status window instead of the usual behavior. Evaluate and check documentation for the current buffer. Evaluation is done first because good documentation for something that doesn't work is just not useful. Comments, doc strings, and rogue -spacing are all verified. - -\(fn)" t nil) +spacing are all verified." t nil) (autoload 'checkdoc-current-buffer "checkdoc" "\ Check current buffer for document, comment, error style, and rogue spaces. @@ -4664,9 +4592,7 @@ Optional argument TAKE-NOTES causes all errors to be logged. Evaluate the current form with `eval-defun' and check its documentation. Evaluation is done first so the form will be read before the documentation is checked. If there is a documentation error, then the display -of what was evaluated will be overwritten by the diagnostic message. - -\(fn)" t nil) +of what was evaluated will be overwritten by the diagnostic message." t nil) (autoload 'checkdoc-defun "checkdoc" "\ Examine the doc string of the function or variable under point. @@ -4680,65 +4606,47 @@ space at the end of each line. (autoload 'checkdoc-ispell "checkdoc" "\ Check the style and spelling of everything interactively. Calls `checkdoc' with spell-checking turned on. -Prefix argument is the same as for `checkdoc' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc'" t nil) (autoload 'checkdoc-ispell-current-buffer "checkdoc" "\ Check the style and spelling of the current buffer. Calls `checkdoc-current-buffer' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-current-buffer' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-current-buffer'" t nil) (autoload 'checkdoc-ispell-interactive "checkdoc" "\ Check the style and spelling of the current buffer interactively. Calls `checkdoc-interactive' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-interactive' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-interactive'" t nil) (autoload 'checkdoc-ispell-message-interactive "checkdoc" "\ Check the style and spelling of message text interactively. Calls `checkdoc-message-interactive' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-message-interactive' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-message-interactive'" t nil) (autoload 'checkdoc-ispell-message-text "checkdoc" "\ Check the style and spelling of message text interactively. Calls `checkdoc-message-text' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-message-text' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-message-text'" t nil) (autoload 'checkdoc-ispell-start "checkdoc" "\ Check the style and spelling of the current buffer. Calls `checkdoc-start' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-start' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-start'" t nil) (autoload 'checkdoc-ispell-continue "checkdoc" "\ Check the style and spelling of the current buffer after point. Calls `checkdoc-continue' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-continue' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-continue'" t nil) (autoload 'checkdoc-ispell-comments "checkdoc" "\ Check the style and spelling of the current buffer's comments. Calls `checkdoc-comments' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-comments' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-comments'" t nil) (autoload 'checkdoc-ispell-defun "checkdoc" "\ Check the style and spelling of the current defun with Ispell. Calls `checkdoc-defun' with spell-checking turned on. -Prefix argument is the same as for `checkdoc-defun' - -\(fn)" t nil) +Prefix argument is the same as for `checkdoc-defun'" t nil) (autoload 'checkdoc-minor-mode "checkdoc" "\ Toggle automatic docstring checking (Checkdoc minor mode). @@ -4757,9 +4665,7 @@ checking of documentation strings. \(fn &optional ARG)" t nil) (autoload 'checkdoc-package-keywords "checkdoc" "\ -Find package keywords that aren't in `finder-known-keywords'. - -\(fn)" t nil) +Find package keywords that aren't in `finder-known-keywords'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "checkdoc" '("checkdoc-"))) @@ -4776,9 +4682,7 @@ Return the length of resulting text. \(fn BEG END)" t nil) (autoload 'decode-hz-buffer "china-util" "\ -Decode HZ/ZW encoded text in the current buffer. - -\(fn)" t nil) +Decode HZ/ZW encoded text in the current buffer." t nil) (autoload 'encode-hz-region "china-util" "\ Encode the text in the current region to HZ. @@ -4787,9 +4691,7 @@ Return the length of resulting text. \(fn BEG END)" t nil) (autoload 'encode-hz-buffer "china-util" "\ -Encode the text in the current buffer to HZ. - -\(fn)" t nil) +Encode the text in the current buffer to HZ." t nil) (autoload 'post-read-decode-hz "china-util" "\ @@ -4823,9 +4725,7 @@ The number of commands listed is controlled by `list-command-history-max'. Calls value of `list-command-history-filter' (if non-nil) on each history element to judge if that element should be excluded from the list. -The buffer is left in Command History mode. - -\(fn)" t nil) +The buffer is left in Command History mode." t nil) (autoload 'command-history "chistory" "\ Examine commands from `command-history' in a buffer. @@ -4838,9 +4738,7 @@ and digits provide prefix arguments. Tab does not indent. \\{command-history-map} This command always recompiles the Command History listing -and runs the normal hook `command-history-hook'. - -\(fn)" t nil) +and runs the normal hook `command-history-hook'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "chistory" '("command-history-" "default-command-history-filter" "list-command-history-"))) @@ -5526,9 +5424,7 @@ doesn't have enough contents to decide, this is identical to See also `conf-space-mode', `conf-colon-mode', `conf-javaprop-mode', `conf-ppd-mode' and `conf-xdefaults-mode'. -\\{conf-mode-map} - -\(fn)" t nil) +\\{conf-mode-map}" t nil) (autoload 'conf-unix-mode "conf-mode" "\ Conf Mode starter for Unix style Conf files. @@ -5720,9 +5616,7 @@ interactively. Convert 2 digit years to 4 digit years. Uses heuristic: year >= 50 means 19xx, < 50 means 20xx. If `copyright-year-ranges' (which see) is non-nil, also -independently replaces consecutive years with a range. - -\(fn)" t nil) +independently replaces consecutive years with a range." t nil) (autoload 'copyright "copyright" "\ Insert a copyright by $ORGANIZATION notice at cursor. @@ -5932,9 +5826,7 @@ Run `perldoc' on WORD. \(fn WORD)" t nil) (autoload 'cperl-perldoc-at-point "cperl-mode" "\ -Run a `perldoc' on the word around point. - -\(fn)" t nil) +Run a `perldoc' on the word around point." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cperl-mode" '("cperl-" "pod2man-program"))) @@ -5952,9 +5844,7 @@ A prefix arg suppresses display of that buffer. \(fn ARG)" t nil) (autoload 'cpp-parse-edit "cpp" "\ -Edit display information for cpp conditionals. - -\(fn)" t nil) +Edit display information for cpp conditionals." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cpp" '("cpp-"))) @@ -6233,9 +6123,7 @@ the resulting list value now. Otherwise, add an entry to Select a customization buffer which you can use to set user options. User options are structured into \"groups\". Initially the top-level group `Emacs' and its immediate subgroups -are shown; the contents of those subgroups are initially hidden. - -\(fn)" t nil) +are shown; the contents of those subgroups are initially hidden." t nil) (autoload 'customize-mode "cus-edit" "\ Customize options related to a major or minor mode. @@ -6338,19 +6226,13 @@ suggest to customize that face, if it's customizable. \(fn &optional FACE)" t nil) (autoload 'customize-unsaved "cus-edit" "\ -Customize all options and faces set in this session but not saved. - -\(fn)" t nil) +Customize all options and faces set in this session but not saved." t nil) (autoload 'customize-rogue "cus-edit" "\ -Customize all user variables modified outside customize. - -\(fn)" t nil) +Customize all user variables modified outside customize." t nil) (autoload 'customize-saved "cus-edit" "\ -Customize all saved options and faces. - -\(fn)" t nil) +Customize all saved options and faces." t nil) (autoload 'customize-apropos "cus-edit" "\ Customize loaded options, faces and groups matching PATTERN. @@ -6383,9 +6265,7 @@ Customize all loaded groups matching REGEXP. (autoload 'custom-prompt-customize-unsaved-options "cus-edit" "\ Prompt user to customize any unsaved customization options. Return non-nil if user chooses to customize, for use in -`kill-emacs-query-functions'. - -\(fn)" nil nil) +`kill-emacs-query-functions'." nil nil) (autoload 'custom-buffer-create "cus-edit" "\ Create a buffer containing OPTIONS. @@ -6449,14 +6329,10 @@ and hence will not set `custom-file' to that file either.") (custom-autoload 'custom-file "cus-edit" t) (autoload 'custom-save-all "cus-edit" "\ -Save all customizations in `custom-file'. - -\(fn)" nil nil) +Save all customizations in `custom-file'." nil nil) (autoload 'customize-save-customized "cus-edit" "\ -Save all user options which have been set in this session. - -\(fn)" t nil) +Save all user options which have been set in this session." t nil) (autoload 'custom-menu-create "cus-edit" "\ Create menu for customization group SYMBOL. @@ -6889,9 +6765,7 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ -Format a buffer of ciphertext for cryptanalysis and enter Decipher mode. - -\(fn)" t nil) +Format a buffer of ciphertext for cryptanalysis and enter Decipher mode." t nil) (autoload 'decipher-mode "decipher" "\ Major mode for decrypting monoalphabetic substitution ciphers. @@ -6907,9 +6781,7 @@ The most useful commands are: \\[decipher-frequency-count] Display the frequency of each ciphertext letter \\[decipher-adjacency-list] Show adjacency list for current letter (lists letters appearing next to it) \\[decipher-make-checkpoint] Save the current cipher alphabet (checkpoint) -\\[decipher-restore-checkpoint] Restore a saved cipher alphabet (checkpoint) - -\(fn)" t nil) +\\[decipher-restore-checkpoint] Restore a saved cipher alphabet (checkpoint)" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "decipher" '("decipher-"))) @@ -6920,9 +6792,7 @@ The most useful commands are: (push (purecopy '(delim-col 2 1)) package--builtin-versions) (autoload 'delimit-columns-customize "delim-col" "\ -Customization of `columns' group. - -\(fn)" t nil) +Customization of `columns' group." t nil) (autoload 'delimit-columns-region "delim-col" "\ Prettify all columns in a text region. @@ -7101,9 +6971,7 @@ of `eldoc-echo-area-use-multiline-p' variable and width of minibuffer window for width limit. This function is meant to be used as a value of -`eldoc-documentation-function' variable. - -\(fn)" nil nil) +`eldoc-documentation-function' variable." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "descr-text" '("describe-"))) @@ -7262,9 +7130,7 @@ a regular expression in the list `desktop-clear-preserve-buffers'. Furthermore, it clears the variables listed in `desktop-globals-to-clear'. When called interactively and `desktop-restore-frames' is non-nil, it also deletes all frames except the selected one (and its minibuffer frame, -if different). - -\(fn)" t nil) +if different)." t nil) (autoload 'desktop-save "desktop" "\ Save the desktop in a desktop file. @@ -7296,9 +7162,7 @@ without further confirmation. (autoload 'desktop-remove "desktop" "\ Delete desktop file in `desktop-dirname'. -This function also sets `desktop-dirname' to nil. - -\(fn)" t nil) +This function also sets `desktop-dirname' to nil." t nil) (autoload 'desktop-read "desktop" "\ Read and process the desktop file in directory DIRNAME. @@ -7320,14 +7184,10 @@ directory DIRNAME. \(fn DIRNAME)" t nil) (autoload 'desktop-save-in-desktop-dir "desktop" "\ -Save the desktop in directory `desktop-dirname'. - -\(fn)" t nil) +Save the desktop in directory `desktop-dirname'." t nil) (autoload 'desktop-revert "desktop" "\ -Revert to the last loaded desktop. - -\(fn)" t nil) +Revert to the last loaded desktop." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "desktop" '("desktop-"))) @@ -7359,9 +7219,7 @@ NODISPLAY is non-nil, don't redisplay the article buffer. \(fn &optional NODISPLAY)" t nil) (autoload 'gnus-article-outlook-deuglify-article "deuglify" "\ -Deuglify broken Outlook (Express) articles and redisplay. - -\(fn)" t nil) +Deuglify broken Outlook (Express) articles and redisplay." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "deuglify" '("gnus-"))) @@ -7720,9 +7578,7 @@ redefine OBJECT if it is a symbol. ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ -Return a new, empty display table. - -\(fn)" nil nil) +Return a new, empty display table." nil nil) (autoload 'display-table-slot "disp-table" "\ Return the value of the extra slot in DISPLAY-TABLE named SLOT. @@ -7746,9 +7602,7 @@ Describe the display table DT in a help buffer. \(fn DT)" nil nil) (autoload 'describe-current-display-table "disp-table" "\ -Describe the display table in use in the selected window and buffer. - -\(fn)" t nil) +Describe the display table in use in the selected window and buffer." t nil) (autoload 'standard-display-8bit "disp-table" "\ Display characters representing raw bytes in the range L to H literally. @@ -7946,9 +7800,7 @@ Turning on DNS mode runs `dns-mode-hook'. (defalias 'zone-mode 'dns-mode) (autoload 'dns-mode-soa-increment-serial "dns-mode" "\ -Locate SOA record and increment the serial field. - -\(fn)" t nil) +Locate SOA record and increment the serial field." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dns-mode" '("dns-mode-"))) @@ -7972,16 +7824,12 @@ and DVI files (as PNG images) in Emacs buffers. You can use \\\\[doc-view-toggle-display] to toggle between displaying the document or editing it as text. -\\{doc-view-mode-map} - -\(fn)" t nil) +\\{doc-view-mode-map}" t nil) (autoload 'doc-view-mode-maybe "doc-view" "\ Switch to `doc-view-mode' if possible. If the required external tools are not available, then fallback -to the next best mode. - -\(fn)" nil nil) +to the next best mode." nil nil) (autoload 'doc-view-minor-mode "doc-view" "\ Toggle displaying buffer via Doc View (Doc View minor mode). @@ -8008,9 +7856,7 @@ See the command `doc-view-mode' for more information on this mode. ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ -Switch to *doctor* buffer and start giving psychotherapy. - -\(fn)" t nil) +Switch to *doctor* buffer and start giving psychotherapy." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "doctor" '("doc" "make-doctor-variables"))) @@ -8069,9 +7915,7 @@ strings when pressed twice. See `double-map' for details. (push (purecopy '(dunnet 2 2)) package--builtin-versions) (autoload 'dunnet "dunnet" "\ -Switch to *dungeon* buffer and start game. - -\(fn)" t nil) +Switch to *dungeon* buffer and start game." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dunnet" '("dun" "obj-special"))) @@ -8432,9 +8276,7 @@ To implement dynamic menus, either call this from (push (purecopy '(ebnf2ps 4 4)) package--builtin-versions) (autoload 'ebnf-customize "ebnf2ps" "\ -Customization for ebnf group. - -\(fn)" t nil) +Customization for ebnf group." t nil) (autoload 'ebnf-print-directory "ebnf2ps" "\ Generate and print a PostScript syntactic chart image of DIRECTORY. @@ -8505,9 +8347,7 @@ Generate and spool a PostScript syntactic chart image of the buffer. Like `ebnf-print-buffer' except that the PostScript image is saved in a local buffer to be sent to the printer later. -Use the command `ebnf-despool' to send the spooled images to the printer. - -\(fn)" t nil) +Use the command `ebnf-despool' to send the spooled images to the printer." t nil) (autoload 'ebnf-spool-region "ebnf2ps" "\ Generate a PostScript syntactic chart image of the region and spool locally. @@ -8557,9 +8397,7 @@ The EPS file name has the following form: file name used in this case will be \"ebnf--A_B_+_C.eps\". WARNING: This function does *NOT* ask any confirmation to override existing - files. - -\(fn)" t nil) + files." t nil) (autoload 'ebnf-eps-region "ebnf2ps" "\ Generate a PostScript syntactic chart image of the region in an EPS file. @@ -8608,9 +8446,7 @@ See also `ebnf-syntax-buffer'. \(fn FILE &optional DO-NOT-KILL-BUFFER-WHEN-DONE)" t nil) (autoload 'ebnf-syntax-buffer "ebnf2ps" "\ -Do a syntactic analysis of the current buffer. - -\(fn)" t nil) +Do a syntactic analysis of the current buffer." t nil) (autoload 'ebnf-syntax-region "ebnf2ps" "\ Do a syntactic analysis of a region. @@ -8618,9 +8454,7 @@ Do a syntactic analysis of a region. \(fn FROM TO)" t nil) (autoload 'ebnf-setup "ebnf2ps" "\ -Return the current ebnf2ps setup. - -\(fn)" nil nil) +Return the current ebnf2ps setup." nil nil) (autoload 'ebnf-find-style "ebnf2ps" "\ Return style definition if NAME is already defined; otherwise, return nil. @@ -8686,9 +8520,7 @@ Returns the old style symbol. See also `ebnf-push-style'. -See `ebnf-style-database' documentation. - -\(fn)" t nil) +See `ebnf-style-database' documentation." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf2ps" '("ebnf-"))) @@ -8710,9 +8542,7 @@ Tree mode key bindings: \(fn)" t nil) (autoload 'ebrowse-electric-choose-tree "ebrowse" "\ -Return a buffer containing a tree or nil if no tree found or canceled. - -\(fn)" t nil) +Return a buffer containing a tree or nil if no tree found or canceled." t nil) (autoload 'ebrowse-member-mode "ebrowse" "\ Major mode for Ebrowse member buffers. @@ -8720,54 +8550,34 @@ Major mode for Ebrowse member buffers. \(fn)" t nil) (autoload 'ebrowse-tags-view-declaration "ebrowse" "\ -View declaration of member at point. - -\(fn)" t nil) +View declaration of member at point." t nil) (autoload 'ebrowse-tags-find-declaration "ebrowse" "\ -Find declaration of member at point. - -\(fn)" t nil) +Find declaration of member at point." t nil) (autoload 'ebrowse-tags-view-definition "ebrowse" "\ -View definition of member at point. - -\(fn)" t nil) +View definition of member at point." t nil) (autoload 'ebrowse-tags-find-definition "ebrowse" "\ -Find definition of member at point. - -\(fn)" t nil) +Find definition of member at point." t nil) (autoload 'ebrowse-tags-find-declaration-other-window "ebrowse" "\ -Find declaration of member at point in other window. - -\(fn)" t nil) +Find declaration of member at point in other window." t nil) (autoload 'ebrowse-tags-view-definition-other-window "ebrowse" "\ -View definition of member at point in other window. - -\(fn)" t nil) +View definition of member at point in other window." t nil) (autoload 'ebrowse-tags-find-definition-other-window "ebrowse" "\ -Find definition of member at point in other window. - -\(fn)" t nil) +Find definition of member at point in other window." t nil) (autoload 'ebrowse-tags-find-declaration-other-frame "ebrowse" "\ -Find definition of member at point in other frame. - -\(fn)" t nil) +Find definition of member at point in other frame." t nil) (autoload 'ebrowse-tags-view-definition-other-frame "ebrowse" "\ -View definition of member at point in other frame. - -\(fn)" t nil) +View definition of member at point in other frame." t nil) (autoload 'ebrowse-tags-find-definition-other-frame "ebrowse" "\ -Find definition of member at point in other frame. - -\(fn)" t nil) +Find definition of member at point in other frame." t nil) (autoload 'ebrowse-tags-complete-symbol "ebrowse" "\ Perform completion on the C++ symbol preceding point. @@ -8819,14 +8629,10 @@ Prefix arg ARG says how much. \(fn ARG)" t nil) (autoload 'ebrowse-electric-position-menu "ebrowse" "\ -List positions in the position stack in an electric buffer. - -\(fn)" t nil) +List positions in the position stack in an electric buffer." t nil) (autoload 'ebrowse-save-tree "ebrowse" "\ -Save current tree in same file it was loaded from. - -\(fn)" t nil) +Save current tree in same file it was loaded from." t nil) (autoload 'ebrowse-save-tree-as "ebrowse" "\ Write the current tree data structure to a file. @@ -8836,9 +8642,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in. \(fn &optional FILE-NAME)" t nil) (autoload 'ebrowse-statistics "ebrowse" "\ -Display statistics for a class tree. - -\(fn)" t nil) +Display statistics for a class tree." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebrowse" '("ebrowse-" "electric-buffer-menu-mode-hook"))) @@ -8896,9 +8700,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;; Generated autoloads from ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ -Read the .ecompleterc file. - -\(fn)" nil nil) +Read the .ecompleterc file." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ecomplete" '("ecomplete-"))) @@ -9256,19 +9058,13 @@ If the current defun is actually a call to `defvar' or `defcustom', evaluating it this way resets the variable using its initial value expression even if the variable already has some other value. \(Normally `defvar' and `defcustom' do not alter the value if there -already is one.) - -\(fn)" t nil) +already is one.)" t nil) (autoload 'edebug-all-defs "edebug" "\ -Toggle edebugging of all definitions. - -\(fn)" t nil) +Toggle edebugging of all definitions." t nil) (autoload 'edebug-all-forms "edebug" "\ -Toggle edebugging of all forms. - -\(fn)" t nil) +Toggle edebugging of all forms." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edebug" '("cancel-edebug-on-entry" "edebug" "get-edebug-spec" "global-edebug-"))) @@ -9299,9 +9095,7 @@ arguments after setting up the Ediff buffers. (autoload 'ediff-current-file "ediff" "\ Start ediff between current buffer and its file on disk. This command can be used instead of `revert-buffer'. If there is -nothing to revert then this command fails. - -\(fn)" t nil) +nothing to revert then this command fails." t nil) (autoload 'ediff-backup "ediff" "\ Run Ediff on FILE and its backup file. @@ -9563,9 +9357,7 @@ arguments after setting up the Ediff buffers. (autoload 'ediff-version "ediff" "\ Return string describing the version of Ediff. -When called interactively, displays the version. - -\(fn)" t nil) +When called interactively, displays the version." t nil) (autoload 'ediff-documentation "ediff" "\ Display Ediff's manual. @@ -9574,44 +9366,28 @@ With optional NODE, goes to that node. \(fn &optional NODE)" t nil) (autoload 'ediff-files-command "ediff" "\ -Call `ediff-files' with the next two command line arguments. - -\(fn)" nil nil) +Call `ediff-files' with the next two command line arguments." nil nil) (autoload 'ediff3-files-command "ediff" "\ -Call `ediff3-files' with the next three command line arguments. - -\(fn)" nil nil) +Call `ediff3-files' with the next three command line arguments." nil nil) (autoload 'ediff-merge-command "ediff" "\ -Call `ediff-merge-files' with the next two command line arguments. - -\(fn)" nil nil) +Call `ediff-merge-files' with the next two command line arguments." nil nil) (autoload 'ediff-merge-with-ancestor-command "ediff" "\ -Call `ediff-merge-files-with-ancestor' with the next three command line arguments. - -\(fn)" nil nil) +Call `ediff-merge-files-with-ancestor' with the next three command line arguments." nil nil) (autoload 'ediff-directories-command "ediff" "\ -Call `ediff-directories' with the next three command line arguments. - -\(fn)" nil nil) +Call `ediff-directories' with the next three command line arguments." nil nil) (autoload 'ediff-directories3-command "ediff" "\ -Call `ediff-directories3' with the next four command line arguments. - -\(fn)" nil nil) +Call `ediff-directories3' with the next four command line arguments." nil nil) (autoload 'ediff-merge-directories-command "ediff" "\ -Call `ediff-merge-directories' with the next three command line arguments. - -\(fn)" nil nil) +Call `ediff-merge-directories' with the next three command line arguments." nil nil) (autoload 'ediff-merge-directories-with-ancestor-command "ediff" "\ -Call `ediff-merge-directories-with-ancestor' with the next four command line arguments. - -\(fn)" nil nil) +Call `ediff-merge-directories-with-ancestor' with the next four command line arguments." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff" '("ediff-"))) @@ -9627,10 +9403,7 @@ Call `ediff-merge-directories-with-ancestor' with the next four command line arg ;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (0 0 0 0)) ;;; Generated autoloads from vc/ediff-help.el -(autoload 'ediff-customize "ediff-help" "\ - - -\(fn)" t nil) +(autoload 'ediff-customize "ediff-help" nil t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-help" '("ediff-"))) @@ -9654,9 +9427,7 @@ Call `ediff-merge-directories-with-ancestor' with the next four command line arg ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ -Display Ediff's registry. - -\(fn)" t nil) +Display Ediff's registry." t nil) (defalias 'eregistry 'ediff-show-registry) @@ -9677,16 +9448,12 @@ Display Ediff's registry. (autoload 'ediff-toggle-multiframe "ediff-util" "\ Switch from multiframe display to single-frame display and back. To change the default, set the variable `ediff-window-setup-function', -which see. - -\(fn)" t nil) +which see." t nil) (autoload 'ediff-toggle-use-toolbar "ediff-util" "\ Enable or disable Ediff toolbar. Works only in versions of Emacs that support toolbars. -To change the default, set the variable `ediff-use-toolbar-p', which see. - -\(fn)" t nil) +To change the default, set the variable `ediff-use-toolbar-p', which see." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-util" '("ediff-"))) @@ -9769,9 +9536,7 @@ Argument BOTTOM is the bottom margin in number of lines or percent of window. \(fn TOP BOTTOM)" t nil) (autoload 'edt-emulation-on "edt" "\ -Turn on EDT Emulation. - -\(fn)" t nil) +Turn on EDT Emulation." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edt" '("edt-"))) @@ -9999,15 +9764,11 @@ A complicated directory may require a lot of memory. (autoload 'elint-current-buffer "elint" "\ Lint the current buffer. -If necessary, this first calls `elint-initialize'. - -\(fn)" t nil) +If necessary, this first calls `elint-initialize'." t nil) (autoload 'elint-defun "elint" "\ Lint the function at point. -If necessary, this first calls `elint-initialize'. - -\(fn)" t nil) +If necessary, this first calls `elint-initialize'." t nil) (autoload 'elint-initialize "elint" "\ Initialize elint. @@ -10049,9 +9810,7 @@ For example, to instrument all ELP functions, do the following: Display current profiling results. If `elp-reset-after-results' is non-nil, then current profiling information for all instrumented functions is reset after results are -displayed. - -\(fn)" t nil) +displayed." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elp" '("elp-"))) @@ -10261,15 +10020,9 @@ Run Emerge on two buffers, giving another buffer as the ancestor. \(fn BUFFER-A BUFFER-B BUFFER-ANCESTOR &optional STARTUP-HOOKS QUIT-HOOKS)" t nil) -(autoload 'emerge-files-command "emerge" "\ - - -\(fn)" nil nil) - -(autoload 'emerge-files-with-ancestor-command "emerge" "\ +(autoload 'emerge-files-command "emerge" nil nil nil) - -\(fn)" nil nil) +(autoload 'emerge-files-with-ancestor-command "emerge" nil nil nil) (autoload 'emerge-files-remote "emerge" "\ @@ -10532,24 +10285,16 @@ Insert selected KEYS after the point. ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ -Decrypt marked files. - -\(fn)" t nil) +Decrypt marked files." t nil) (autoload 'epa-dired-do-verify "epa-dired" "\ -Verify marked files. - -\(fn)" t nil) +Verify marked files." t nil) (autoload 'epa-dired-do-sign "epa-dired" "\ -Sign marked files. - -\(fn)" t nil) +Sign marked files." t nil) (autoload 'epa-dired-do-encrypt "epa-dired" "\ -Encrypt marked files. - -\(fn)" t nil) +Encrypt marked files." t nil) ;;;*** @@ -10561,15 +10306,9 @@ Encrypt marked files. \(fn OPERATION &rest ARGS)" nil nil) -(autoload 'epa-file-enable "epa-file" "\ - - -\(fn)" t nil) - -(autoload 'epa-file-disable "epa-file" "\ +(autoload 'epa-file-enable "epa-file" nil t nil) - -\(fn)" t nil) +(autoload 'epa-file-disable "epa-file" nil t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epa-file" '("epa-"))) @@ -10590,17 +10329,13 @@ if ARG is `toggle'; disable the mode otherwise. (autoload 'epa-mail-decrypt "epa-mail" "\ Decrypt OpenPGP armors in the current buffer. -The buffer is expected to contain a mail message. - -\(fn)" t nil) +The buffer is expected to contain a mail message." t nil) (function-put 'epa-mail-decrypt 'interactive-only 't) (autoload 'epa-mail-verify "epa-mail" "\ Verify OpenPGP cleartext signed messages in the current buffer. -The buffer is expected to contain a mail message. - -\(fn)" t nil) +The buffer is expected to contain a mail message." t nil) (function-put 'epa-mail-verify 'interactive-only 't) @@ -10629,9 +10364,7 @@ SIGNERS is a list of keys to sign the message with. (autoload 'epa-mail-import-keys "epa-mail" "\ Import keys in the OpenPGP armor format in the current buffer. -The buffer is expected to contain a mail message. - -\(fn)" t nil) +The buffer is expected to contain a mail message." t nil) (function-put 'epa-mail-import-keys 'interactive-only 't) @@ -10689,9 +10422,7 @@ version requirement is met. \(fn PROTOCOL &optional NO-CACHE PROGRAM-ALIST)" nil nil) (autoload 'epg-configuration "epg-config" "\ -Return a list of internal configuration parameters of `epg-gpg-program'. - -\(fn)" nil nil) +Return a list of internal configuration parameters of `epg-gpg-program'." nil nil) (make-obsolete 'epg-configuration 'epg-find-configuration '"25.1") @@ -10719,9 +10450,7 @@ Look at CONFIG and try to expand GROUP. (push (purecopy '(erc 5 3)) package--builtin-versions) (autoload 'erc-select-read-args "erc" "\ -Prompt the user for values of nick, server, port, and password. - -\(fn)" nil nil) +Prompt the user for values of nick, server, port, and password." nil nil) (autoload 'erc "erc" "\ ERC is a powerful, modular, and extensible IRC client. @@ -10928,14 +10657,10 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. (autoload 'erc-determine-network "erc-networks" "\ Return the name of the network or \"Unknown\" as a symbol. Use the server parameter NETWORK if provided, otherwise parse the server name and -search for a match in `erc-networks-alist'. - -\(fn)" nil nil) +search for a match in `erc-networks-alist'." nil nil) (autoload 'erc-server-select "erc-networks" "\ -Interactively select a server to connect to using `erc-server-alist'. - -\(fn)" t nil) +Interactively select a server to connect to using `erc-server-alist'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-networks" '("erc-"))) @@ -11122,9 +10847,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). (put 'ert-with-test-buffer 'lisp-indent-function 1) (autoload 'ert-kill-all-test-buffers "ert-x" "\ -Kill all test buffers that are still live. - -\(fn)" t nil) +Kill all test buffers that are still live." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ert-x" '("ert-"))) @@ -11338,14 +11061,9 @@ Returns t if it visits a tags table, or nil if there are no more in the list. Return a list of files in the current tags table. Assumes the tags table is the current buffer. The file names are returned as they appeared in the `etags' command that created the table, usually -without directory names. +without directory names." nil nil) -\(fn)" nil nil) - -(autoload 'tags-lazy-completion-table "etags" "\ - - -\(fn)" nil nil) +(autoload 'tags-lazy-completion-table "etags" nil nil nil) (defun tags-completion-at-point-function () (if (or tags-table-list tags-file-name) (progn @@ -11536,22 +11254,15 @@ Display list of all tags in tags table REGEXP matches. (autoload 'select-tags-table "etags" "\ Select a tags table file from a menu of those you have already used. The list of tags tables to select from is stored in `tags-table-set-list'; -see the doc of that variable if you want to add names to the list. - -\(fn)" t nil) +see the doc of that variable if you want to add names to the list." t nil) (autoload 'complete-tag "etags" "\ Perform tags completion on the text around point. Completes to the set of names listed in the current tags table. The string to complete is chosen in the same way as the default -for \\[find-tag] (which see). - -\(fn)" t nil) - -(autoload 'etags--xref-backend "etags" "\ +for \\[find-tag] (which see)." t nil) - -\(fn)" nil nil) +(autoload 'etags--xref-backend "etags" nil nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "etags" '("default-tags-table-function" "etags-" "file-of-tag" "find-tag-" "goto-tag-location-function" "initialize-new-tags-table" "last-tag" "list-tags-function" "select-tags-table-" "snarf-tag-function" "tag" "verify-tags-table-function" "xref-"))) @@ -11561,10 +11272,7 @@ for \\[find-tag] (which see). ;;;;;; 0 0)) ;;; Generated autoloads from language/ethio-util.el -(autoload 'setup-ethiopic-environment-internal "ethio-util" "\ - - -\(fn)" nil nil) +(autoload 'setup-ethiopic-environment-internal "ethio-util" nil nil nil) (autoload 'ethio-sera-to-fidel-buffer "ethio-util" "\ Convert the current buffer from SERA to FIDEL. @@ -11653,9 +11361,7 @@ The markers \"\" and \"\" themselves are not deleted. \(fn &optional FORCE)" t nil) (autoload 'ethio-modify-vowel "ethio-util" "\ -Modify the vowel of the FIDEL that is under the cursor. - -\(fn)" t nil) +Modify the vowel of the FIDEL that is under the cursor." t nil) (autoload 'ethio-replace-space "ethio-util" "\ Replace ASCII spaces with Ethiopic word separators in the region. @@ -11678,14 +11384,10 @@ This function is deprecated. \(fn ARG)" t nil) (autoload 'ethio-fidel-to-tex-buffer "ethio-util" "\ -Convert each fidel characters in the current buffer into a fidel-tex command. - -\(fn)" t nil) +Convert each fidel characters in the current buffer into a fidel-tex command." t nil) (autoload 'ethio-tex-to-fidel-buffer "ethio-util" "\ -Convert fidel-tex commands in the current buffer into fidel chars. - -\(fn)" t nil) +Convert fidel-tex commands in the current buffer into fidel chars." t nil) (autoload 'ethio-fidel-to-java-buffer "ethio-util" "\ Convert Ethiopic characters into the Java escape sequences. @@ -11694,24 +11396,16 @@ Each escape sequence is of the form \\uXXXX, where XXXX is the character's codepoint (in hex) in Unicode. If `ethio-java-save-lowercase' is non-nil, use [0-9a-f]. -Otherwise, [0-9A-F]. - -\(fn)" nil nil) +Otherwise, [0-9A-F]." nil nil) (autoload 'ethio-java-to-fidel-buffer "ethio-util" "\ -Convert the Java escape sequences into corresponding Ethiopic characters. - -\(fn)" nil nil) +Convert the Java escape sequences into corresponding Ethiopic characters." nil nil) (autoload 'ethio-find-file "ethio-util" "\ -Transliterate file content into Ethiopic depending on filename suffix. - -\(fn)" nil nil) +Transliterate file content into Ethiopic depending on filename suffix." nil nil) (autoload 'ethio-write-file "ethio-util" "\ -Transliterate Ethiopic characters in ASCII depending on the file extension. - -\(fn)" nil nil) +Transliterate Ethiopic characters in ASCII depending on the file extension." nil nil) (autoload 'ethio-insert-ethio-space "ethio-util" "\ Insert the Ethiopic word delimiter (the colon-like character). @@ -11774,9 +11468,7 @@ queries the server for the existing fields and displays a corresponding form. (autoload 'eudc-load-eudc "eudc" "\ Load the Emacs Unified Directory Client. -This does nothing except loading eudc by autoload side-effect. - -\(fn)" t nil) +This does nothing except loading eudc by autoload side-effect." t nil) (defvar eudc-tools-menu (let ((map (make-sparse-keymap "Directory Servers"))) (define-key map [phone] `(menu-item ,(purecopy "Get Phone") eudc-get-phone :help ,(purecopy "Get the phone field of name from the directory server"))) (define-key map [email] `(menu-item ,(purecopy "Get Email") eudc-get-email :help ,(purecopy "Get the email field of NAME from the directory server"))) (define-key map [separator-eudc-email] menu-bar-separator) (define-key map [expand-inline] `(menu-item ,(purecopy "Expand Inline Query") eudc-expand-inline :help ,(purecopy "Query the directory server, and expand the query string before point"))) (define-key map [query] `(menu-item ,(purecopy "Query with Form") eudc-query-form :help ,(purecopy "Display a form to query the directory server"))) (define-key map [separator-eudc-query] menu-bar-separator) (define-key map [new] `(menu-item ,(purecopy "New Server") eudc-set-server :help ,(purecopy "Set the directory server to SERVER using PROTOCOL"))) (define-key map [load] `(menu-item ,(purecopy "Load Hotlist of Servers") eudc-load-eudc :help ,(purecopy "Load the Emacs Unified Directory Client"))) map)) @@ -11828,14 +11520,10 @@ Display a button for the JPEG DATA. (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ Insert record at point into the BBDB database. -This function can only be called from a directory query result buffer. - -\(fn)" t nil) +This function can only be called from a directory query result buffer." t nil) (autoload 'eudc-try-bbdb-insert "eudc-export" "\ -Call `eudc-insert-record-at-point-into-bbdb' if on a record. - -\(fn)" t nil) +Call `eudc-insert-record-at-point-into-bbdb' if on a record." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc-export" '("eudc-"))) @@ -11846,9 +11534,7 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ -Edit the hotlist of directory servers in a specialized buffer. - -\(fn)" t nil) +Edit the hotlist of directory servers in a specialized buffer." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc-hotlist" '("eudc-hotlist-"))) @@ -11942,9 +11628,7 @@ Search the web for the text between BEG and END. If region is active (and not whitespace), search the web for the text between BEG and END. Else, prompt the user for a search string. See the `eww-search-prefix' variable for the search -engine used. - -\(fn)" t nil) +engine used." t nil) (autoload 'eww-mode "eww" "\ Mode for browsing the web. @@ -11957,9 +11641,7 @@ Mode for browsing the web. \(fn URL &optional NEW-WINDOW)" nil nil) (autoload 'eww-list-bookmarks "eww" "\ -Display the bookmarks. - -\(fn)" t nil) +Display the bookmarks." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eww" '("eww-"))) @@ -11995,9 +11677,7 @@ executable. (autoload 'executable-make-buffer-file-executable-if-script-p "executable" "\ Make file executable according to umask if not already executable. If file already has any execute bits set at all, do not change existing -file modes. - -\(fn)" nil nil) +file modes." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "executable" '("executable-"))) @@ -12032,21 +11712,15 @@ If ARG is omitted, point is placed at the end of the expanded text. (autoload 'expand-abbrev-hook "expand" "\ Abbrev hook used to do the expansion job of expand abbrevs. -See `expand-add-abbrevs'. Value is non-nil if expansion was done. - -\(fn)" nil nil) +See `expand-add-abbrevs'. Value is non-nil if expansion was done." nil nil) (autoload 'expand-jump-to-previous-slot "expand" "\ Move the cursor to the previous slot in the last abbrev expansion. -This is used only in conjunction with `expand-add-abbrevs'. - -\(fn)" t nil) +This is used only in conjunction with `expand-add-abbrevs'." t nil) (autoload 'expand-jump-to-next-slot "expand" "\ Move the cursor to the next slot in the last abbrev expansion. -This is used only in conjunction with `expand-add-abbrevs'. - -\(fn)" t nil) +This is used only in conjunction with `expand-add-abbrevs'." t nil) (define-key abbrev-map "p" 'expand-jump-to-previous-slot) (define-key abbrev-map "n" 'expand-jump-to-next-slot) @@ -12300,9 +11974,7 @@ Besides the choice of face, it is the same as `buffer-face-mode'. (push (purecopy '(faceup 0 0 6)) package--builtin-versions) (autoload 'faceup-view-buffer "faceup" "\ -Display the faceup representation of the current buffer. - -\(fn)" t nil) +Display the faceup representation of the current buffer." t nil) (autoload 'faceup-write-file "faceup" "\ Save the faceup representation of the current buffer to the file FILE-NAME. @@ -12322,9 +11994,7 @@ Convert BUFFER containing Faceup markup to a new buffer and display it. \(fn &optional BUFFER)" t nil) (autoload 'faceup-clean-buffer "faceup" "\ -Remove faceup markup from buffer. - -\(fn)" t nil) +Remove faceup markup from buffer." t nil) (autoload 'faceup-defexplainer "faceup" "\ Define an Ert explainer function for FUNCTION. @@ -12345,9 +12015,7 @@ FUNCTION must return an explanation when the test fails and (autoload 'feedmail-send-it "feedmail" "\ Send the current mail buffer using the Feedmail package. This is a suitable value for `send-mail-function'. It can be used -with various lower-level mechanisms to provide features such as queueing. - -\(fn)" nil nil) +with various lower-level mechanisms to provide features such as queueing." nil nil) (autoload 'feedmail-run-the-queue-no-prompts "feedmail" "\ Like `feedmail-run-the-queue', but suppress confirmation prompts. @@ -12447,14 +12115,10 @@ If `dired-at-point-require-prefix' is set, the prefix meaning is reversed. (autoload 'ffap-guess-file-name-at-point "ffap" "\ Try to get a file name at point. -This hook is intended to be put in `file-name-at-point-functions'. - -\(fn)" nil nil) +This hook is intended to be put in `file-name-at-point-functions'." nil nil) (autoload 'ffap-bindings "ffap" "\ -Evaluate the forms in variable `ffap-bindings'. - -\(fn)" t nil) +Evaluate the forms in variable `ffap-bindings'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ffap" '("dired-at-point-" "ffap-" "find-file-literally-at-point"))) @@ -12620,19 +12284,13 @@ Delete all MODE settings of file-local VARIABLE from .dir-locals.el. \(fn MODE VARIABLE)" t nil) (autoload 'copy-file-locals-to-dir-locals "files-x" "\ -Copy file-local variables to .dir-locals.el. - -\(fn)" t nil) +Copy file-local variables to .dir-locals.el." t nil) (autoload 'copy-dir-locals-to-file-locals "files-x" "\ -Copy directory-local variables to the Local Variables list. - -\(fn)" t nil) +Copy directory-local variables to the Local Variables list." t nil) (autoload 'copy-dir-locals-to-file-locals-prop-line "files-x" "\ -Copy directory-local variables to the -*- line. - -\(fn)" t nil) +Copy directory-local variables to the -*- line." t nil) (defvar enable-connection-local-variables t "\ Non-nil means enable use of connection-local variables.") @@ -12673,13 +12331,11 @@ will not be changed. \(fn CRITERIA)" nil nil) -(autoload 'with-connection-local-profiles "files-x" "\ -Apply connection-local variables according to PROFILES in current buffer. +(autoload 'with-connection-local-variables "files-x" "\ +Apply connection-local variables according to `default-directory'. Execute BODY, and unwind connection-local variables. -\(fn PROFILES &rest BODY)" nil t) - -(function-put 'with-connection-local-profiles 'lisp-indent-function '1) +\(fn &rest BODY)" nil t) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "files-x" '("connection-local-" "dir-locals-to-string" "hack-connection-local-variables" "modify-" "read-file-local-variable"))) @@ -12690,9 +12346,7 @@ Execute BODY, and unwind connection-local variables. (autoload 'filesets-init "filesets" "\ Filesets initialization. -Set up hooks, load the cache file -- if existing -- and build the menu. - -\(fn)" nil nil) +Set up hooks, load the cache file -- if existing -- and build the menu." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "filesets" '("filesets-"))) @@ -13024,19 +12678,13 @@ See `find-function-on-key'. \(fn KEY)" t nil) (autoload 'find-function-at-point "find-func" "\ -Find directly the function at point in the other window. - -\(fn)" t nil) +Find directly the function at point in the other window." t nil) (autoload 'find-variable-at-point "find-func" "\ -Find directly the variable at point in the other window. - -\(fn)" t nil) +Find directly the variable at point in the other window." t nil) (autoload 'find-function-setup-keys "find-func" "\ -Define some key bindings for the find-function family of functions. - -\(fn)" nil nil) +Define some key bindings for the find-function family of functions." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "find-func" '("find-" "read-library-name"))) @@ -13069,9 +12717,7 @@ Change the filter on a `find-lisp-find-dired' buffer to REGEXP. (push (purecopy '(finder 1 0)) package--builtin-versions) (autoload 'finder-list-keywords "finder" "\ -Display descriptions of the keywords in the Finder buffer. - -\(fn)" t nil) +Display descriptions of the keywords in the Finder buffer." t nil) (autoload 'finder-commentary "finder" "\ Display FILE's commentary section. @@ -13080,9 +12726,7 @@ FILE should be in a form suitable for passing to `locate-library'. \(fn FILE)" t nil) (autoload 'finder-by-keyword "finder" "\ -Find packages matching a given keyword. - -\(fn)" t nil) +Find packages matching a given keyword." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "finder" '("finder-" "generated-finder-keywords-file"))) @@ -13213,14 +12857,10 @@ special *Flymake log* buffer. \(fn &optional ARG)" t nil) (autoload 'flymake-mode-on "flymake" "\ -Turn Flymake mode on. - -\(fn)" nil nil) +Turn Flymake mode on." nil nil) (autoload 'flymake-mode-off "flymake" "\ -Turn Flymake mode off. - -\(fn)" nil nil) +Turn Flymake mode off." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flymake" '("flymake-"))) @@ -13255,9 +12895,7 @@ REPORT-FN is Flymake's callback. ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ -Turn on `flyspell-mode' for comments and strings. - -\(fn)" t nil) +Turn on `flyspell-mode' for comments and strings." t nil) (defvar flyspell-mode nil "Non-nil if Flyspell mode is enabled.") (autoload 'flyspell-mode "flyspell" "\ @@ -13297,19 +12935,13 @@ in your init file. \(fn &optional ARG)" t nil) (autoload 'turn-on-flyspell "flyspell" "\ -Unconditionally turn on Flyspell mode. - -\(fn)" nil nil) +Unconditionally turn on Flyspell mode." nil nil) (autoload 'turn-off-flyspell "flyspell" "\ -Unconditionally turn off Flyspell mode. - -\(fn)" nil nil) +Unconditionally turn off Flyspell mode." nil nil) (autoload 'flyspell-mode-off "flyspell" "\ -Turn Flyspell mode off. - -\(fn)" nil nil) +Turn Flyspell mode off." nil nil) (autoload 'flyspell-region "flyspell" "\ Flyspell text between BEG and END. @@ -13320,9 +12952,7 @@ of a misspelled word removed when you've corrected it. \(fn BEG END)" t nil) (autoload 'flyspell-buffer "flyspell" "\ -Flyspell whole buffer. - -\(fn)" t nil) +Flyspell whole buffer." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flyspell" '("flyspell-" "mail-mode-flyspell-verify" "make-flyspell-overlay" "sgml-mode-flyspell-verify" "tex"))) @@ -13340,14 +12970,10 @@ Flyspell whole buffer. ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ -Turn on Follow mode. Please see the function `follow-mode'. - -\(fn)" nil nil) +Turn on Follow mode. Please see the function `follow-mode'." nil nil) (autoload 'turn-off-follow-mode "follow" "\ -Turn off Follow mode. Please see the function `follow-mode'. - -\(fn)" nil nil) +Turn off Follow mode. Please see the function `follow-mode'." nil nil) (autoload 'follow-mode "follow" "\ Toggle Follow mode. @@ -14204,14 +13830,10 @@ prompt the user for the name of an NNTP server to use. ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ -Start Gnus unplugged. - -\(fn)" t nil) +Start Gnus unplugged." t nil) (autoload 'gnus-plugged "gnus-agent" "\ -Start Gnus plugged. - -\(fn)" t nil) +Start Gnus plugged." t nil) (autoload 'gnus-slave-unplugged "gnus-agent" "\ Read news as a slave unplugged. @@ -14227,14 +13849,10 @@ customize gnus-agent to nil. This will modify the `gnus-setup-news-hook', and `message-send-mail-real-function' variables, and install the Gnus agent -minor mode in all Gnus buffers. - -\(fn)" t nil) +minor mode in all Gnus buffers." t nil) (autoload 'gnus-agent-possibly-save-gcc "gnus-agent" "\ -Save GCC if Gnus is unplugged. - -\(fn)" nil nil) +Save GCC if Gnus is unplugged." nil nil) (autoload 'gnus-agent-rename-group "gnus-agent" "\ Rename fully-qualified OLD-GROUP as NEW-GROUP. @@ -14255,9 +13873,7 @@ supported. \(fn GROUP)" nil nil) (autoload 'gnus-agent-get-undownloaded-list "gnus-agent" "\ -Construct list of articles that have not been downloaded. - -\(fn)" nil nil) +Construct list of articles that have not been downloaded." nil nil) (autoload 'gnus-agent-possibly-alter-active "gnus-agent" "\ Possibly expand a group's active range to include articles @@ -14273,14 +13889,10 @@ variables. Returns the first non-nil value found. \(fn GROUP SYMBOL)" nil nil) (autoload 'gnus-agent-batch-fetch "gnus-agent" "\ -Start Gnus and fetch session. - -\(fn)" t nil) +Start Gnus and fetch session." t nil) (autoload 'gnus-agent-batch "gnus-agent" "\ -Start Gnus, send queue and fetch session. - -\(fn)" t nil) +Start Gnus, send queue and fetch session." t nil) (autoload 'gnus-agent-regenerate "gnus-agent" "\ Regenerate all agent covered files. @@ -14296,9 +13908,7 @@ CLEAN is obsolete and ignored. ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ -Make the current buffer look like a nice article. - -\(fn)" nil nil) +Make the current buffer look like a nice article." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-art" '("article-" "gnus-"))) @@ -14323,9 +13933,7 @@ Make the current buffer look like a nice article. ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ -Set a bookmark for this article. - -\(fn)" t nil) +Set a bookmark for this article." t nil) (autoload 'gnus-bookmark-jump "gnus-bookmark" "\ Jump to a Gnus bookmark (BMK-NAME). @@ -14336,9 +13944,7 @@ Jump to a Gnus bookmark (BMK-NAME). Display a list of existing Gnus bookmarks. The list is displayed in a buffer named `*Gnus Bookmark List*'. The leftmost column displays a D if the bookmark is flagged for -deletion, or > if it is flagged for displaying. - -\(fn)" t nil) +deletion, or > if it is flagged for displaying." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-bookmark" '("gnus-bookmark-"))) @@ -14351,9 +13957,7 @@ deletion, or > if it is flagged for displaying. Go through all groups and put the articles into the cache. Usage: -$ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache - -\(fn)" t nil) +$ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache" t nil) (autoload 'gnus-cache-generate-active "gnus-cache" "\ Generate the cache active file. @@ -14427,9 +14031,7 @@ DELAY is a string, giving the length of the time. Possible values are: \(fn DELAY)" t nil) (autoload 'gnus-delay-send-queue "gnus-delay" "\ -Send all the delayed messages that are due now. - -\(fn)" t nil) +Send all the delayed messages that are due now." t nil) (autoload 'gnus-delay-initialize "gnus-delay" "\ Initialize the gnus-delay package. @@ -14473,9 +14075,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ -Convenience method to turn on gnus-dired-mode. - -\(fn)" t nil) +Convenience method to turn on gnus-dired-mode." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-dired" '("gnus-dired-"))) @@ -14485,9 +14085,7 @@ Convenience method to turn on gnus-dired-mode. ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ -Reminder user if there are unsent drafts. - -\(fn)" t nil) +Reminder user if there are unsent drafts." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-draft" '("gnus-"))) @@ -14520,14 +14118,10 @@ Return file from DIR with extension EXT, omitting matches of OMIT, processed by (autoload 'gnus-random-x-face "gnus-fun" "\ Return X-Face header data chosen randomly from `gnus-x-face-directory'. -Files matching `gnus-x-face-omit-files' are not considered. - -\(fn)" t nil) +Files matching `gnus-x-face-omit-files' are not considered." t nil) (autoload 'gnus-insert-random-x-face-header "gnus-fun" "\ -Insert a random X-Face header from `gnus-x-face-directory'. - -\(fn)" t nil) +Insert a random X-Face header from `gnus-x-face-directory'." t nil) (autoload 'gnus-x-face-from-file "gnus-fun" "\ Insert an X-Face header based on an image FILE. @@ -14561,14 +14155,10 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to (autoload 'gnus-random-face "gnus-fun" "\ Return randomly chosen Face from `gnus-face-directory'. -Files matching `gnus-face-omit-files' are not considered. - -\(fn)" t nil) +Files matching `gnus-face-omit-files' are not considered." t nil) (autoload 'gnus-insert-random-face-header "gnus-fun" "\ -Insert a random Face header from `gnus-face-directory'. - -\(fn)" nil nil) +Insert a random Face header from `gnus-face-directory'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-fun" '("gnus-"))) @@ -14652,9 +14242,7 @@ Pop up a frame and enter GROUP. (autoload 'gnus-batch-score "gnus-kill" "\ Run batched scoring. -Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score - -\(fn)" t nil) +Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-kill" '("gnus-"))) @@ -14677,10 +14265,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (0 0 0 0)) ;;; Generated autoloads from gnus/gnus-ml.el -(autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ - - -\(fn)" nil nil) +(autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" nil nil nil) (autoload 'gnus-mailing-list-insinuate "gnus-ml" "\ Setup group parameters from List-Post header. @@ -14744,9 +14329,7 @@ instead. This variable is set by `gnus-group-split-setup'. Use information from group parameters in order to split mail. See `gnus-group-split-fancy' for more information. -`gnus-group-split' is a valid value for `nnmail-split-methods'. - -\(fn)" nil nil) +`gnus-group-split' is a valid value for `nnmail-split-methods'." nil nil) (autoload 'gnus-group-split-fancy "gnus-mlspl" "\ Uses information from group parameters in order to split mail. @@ -14844,9 +14427,7 @@ or equal to `gnus-notifications-minimum-level' and send a notification using `notifications-notify' for it. This is typically a function to add in -`gnus-after-getting-new-news-hook' - -\(fn)" nil nil) +`gnus-after-getting-new-news-hook'" nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-notifications" '("gnus-notifications-"))) @@ -14857,21 +14438,15 @@ This is typically a function to add in (autoload 'gnus-treat-from-picon "gnus-picon" "\ Display picons in the From header. -If picons are already displayed, remove them. - -\(fn)" t nil) +If picons are already displayed, remove them." t nil) (autoload 'gnus-treat-mail-picon "gnus-picon" "\ Display picons in the Cc and To headers. -If picons are already displayed, remove them. - -\(fn)" t nil) +If picons are already displayed, remove them." t nil) (autoload 'gnus-treat-newsgroups-picon "gnus-picon" "\ Display picons in the Newsgroups and Followup-To headers. -If picons are already displayed, remove them. - -\(fn)" t nil) +If picons are already displayed, remove them." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-picon" '("gnus-picon-"))) @@ -14951,14 +14526,10 @@ Add NUM into sorted LIST by side effect. ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ -Initialize the Gnus registry. - -\(fn)" t nil) +Initialize the Gnus registry." t nil) (autoload 'gnus-registry-install-hooks "gnus-registry" "\ -Install the registry hooks. - -\(fn)" t nil) +Install the registry hooks." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-registry" '("gnus-"))) @@ -14994,22 +14565,15 @@ Update the Sieve script in gnus-sieve-file, by replacing the region between gnus-sieve-region-start and gnus-sieve-region-end with \(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost), then execute gnus-sieve-update-shell-command. -See the documentation for these variables and functions for details. - -\(fn)" t nil) +See the documentation for these variables and functions for details." t nil) (autoload 'gnus-sieve-generate "gnus-sieve" "\ Generate the Sieve script in gnus-sieve-file, by replacing the region between gnus-sieve-region-start and gnus-sieve-region-end with \(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost). -See the documentation for these variables and functions for details. - -\(fn)" t nil) - -(autoload 'gnus-sieve-article-add-rule "gnus-sieve" "\ +See the documentation for these variables and functions for details." t nil) - -\(fn)" t nil) +(autoload 'gnus-sieve-article-add-rule "gnus-sieve" nil t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-sieve" '("gnus-sieve-"))) @@ -15178,9 +14742,7 @@ By default, goto-address binds `goto-address-at-point' to mouse-2 and C-c RET only on URLs and e-mail addresses. Also fontifies the buffer appropriately (see `goto-address-fontify-p' and -`goto-address-highlight-p' for more information). - -\(fn)" t nil) +`goto-address-highlight-p' for more information)." t nil) (put 'goto-address 'safe-local-eval-function t) (autoload 'goto-address-mode "goto-addr" "\ @@ -15293,14 +14855,9 @@ History list for grep-find.") (autoload 'grep-process-setup "grep" "\ Setup compilation variables and buffer for `grep'. -Set up `compilation-exit-message-function' and run `grep-setup-hook'. +Set up `compilation-exit-message-function' and run `grep-setup-hook'." nil nil) -\(fn)" nil nil) - -(autoload 'grep-compute-defaults "grep" "\ - - -\(fn)" nil nil) +(autoload 'grep-compute-defaults "grep" nil nil nil) (autoload 'grep-mode "grep" "\ Sets `grep-last-buffer' and `compilation-window-height'. @@ -15627,9 +15184,7 @@ and `handwrite-13pt' set up for various sizes of output. Variables: `handwrite-linespace' (default 12) `handwrite-fontsize' (default 11) `handwrite-numlines' (default 60) - `handwrite-pagenumbering' (default nil) - -\(fn)" t nil) + `handwrite-pagenumbering' (default nil)" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "handwrite" '("handwrite-" "menu-bar-handwrite-map"))) @@ -15656,17 +15211,13 @@ Towers of Hanoi, UNIX doomsday version. Displays 32-ring towers that have been progressing at one move per second since 1970-01-01 00:00:00 GMT. -Repent before ring 31 moves. - -\(fn)" t nil) +Repent before ring 31 moves." t nil) (autoload 'hanoi-unix-64 "hanoi" "\ Like hanoi-unix, but pretend to have a 64-bit clock. This is, necessarily (as of Emacs 20.3), a crock. When the current-time interface is made s2G-compliant, hanoi.el will need -to be updated. - -\(fn)" t nil) +to be updated." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hanoi" '("hanoi-"))) @@ -15733,9 +15284,7 @@ can also be t, if that is the value of the `kbd-help' property. Return the keyboard help string at point. If the `kbd-help' text or overlay property at point produces a string, return it. Otherwise, use the `help-echo' property. -If this produces no string either, return nil. - -\(fn)" nil nil) +If this produces no string either, return nil." nil nil) (autoload 'display-local-help "help-at-pt" "\ Display local help in the echo area. @@ -15752,15 +15301,11 @@ mainly meant for use from Lisp. (autoload 'help-at-pt-cancel-timer "help-at-pt" "\ Cancel any timer set by `help-at-pt-set-timer'. -This disables `help-at-pt-display-when-idle'. - -\(fn)" t nil) +This disables `help-at-pt-display-when-idle'." t nil) (autoload 'help-at-pt-set-timer "help-at-pt" "\ Enable `help-at-pt-display-when-idle'. -This is done by setting a timer, if none is currently active. - -\(fn)" t nil) +This is done by setting a timer, if none is currently active." t nil) (defvar help-at-pt-display-when-idle 'never "\ Automatically show local help on point-over. @@ -15963,14 +15508,10 @@ Commands: \(fn)" t nil) (autoload 'help-mode-setup "help-mode" "\ -Enter Help Mode in the current buffer. - -\(fn)" nil nil) +Enter Help Mode in the current buffer." nil nil) (autoload 'help-mode-finish "help-mode" "\ -Finalize Help Mode setup in current buffer. - -\(fn)" nil nil) +Finalize Help Mode setup in current buffer." nil nil) (autoload 'help-setup-xref "help-mode" "\ Invoked from commands using the \"*Help*\" buffer to install some xref info. @@ -15992,9 +15533,7 @@ If `help-xref-following' is non-nil, this is the name of the current buffer. Signal an error if this buffer is not derived from `help-mode'. Otherwise, return \"*Help*\", creating a buffer with that name if -it does not already exist. - -\(fn)" nil nil) +it does not already exist." nil nil) (autoload 'help-make-xrefs "help-mode" "\ Parse and hyperlink documentation cross-references in the given BUFFER. @@ -16058,14 +15597,10 @@ BOOKMARK is a bookmark name or a bookmark record. ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ -Describe local key bindings of current mode. - -\(fn)" t nil) +Describe local key bindings of current mode." t nil) (autoload 'Helper-help "helper" "\ -Provide help for current mode. - -\(fn)" t nil) +Provide help for current mode." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "helper" '("Helper-"))) @@ -16166,9 +15701,7 @@ and edit the file in `hexl-mode'. (autoload 'hexlify-buffer "hexl" "\ Convert a binary buffer to hexl format. -This discards the buffer's undo information. - -\(fn)" t nil) +This discards the buffer's undo information." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hexl" '("dehexlify-buffer" "hexl-"))) @@ -16328,9 +15861,7 @@ unless you use a prefix argument. Uses `find-tag-default-as-symbol-regexp' to retrieve the symbol at point. This uses Font lock mode if it is enabled; otherwise it uses overlays, -in which case the highlighting will not update as you type. - -\(fn)" t nil) +in which case the highlighting will not update as you type." t nil) (defalias 'unhighlight-regexp 'hi-lock-unface-buffer) @@ -16348,9 +15879,7 @@ Write interactively added patterns, if any, into buffer at point. Interactively added patterns are those normally specified using `highlight-regexp' and `highlight-lines-matching-regexp'; they can -be found in variable `hi-lock-interactive-patterns'. - -\(fn)" t nil) +be found in variable `hi-lock-interactive-patterns'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hi-lock" '("hi-lock-" "turn-on-hi-lock-if-enabled"))) @@ -16465,9 +15994,7 @@ Key bindings: \(fn &optional ARG)" t nil) (autoload 'turn-off-hideshow "hideshow" "\ -Unconditionally turn off `hs-minor-mode'. - -\(fn)" nil nil) +Unconditionally turn off `hs-minor-mode'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hideshow" '("hs-"))) @@ -16527,14 +16054,10 @@ This allows you to manually remove highlighting from uninteresting changes. \(fn BEG END)" t nil) (autoload 'highlight-changes-next-change "hilit-chg" "\ -Move to the beginning of the next change, if in Highlight Changes mode. - -\(fn)" t nil) +Move to the beginning of the next change, if in Highlight Changes mode." t nil) (autoload 'highlight-changes-previous-change "hilit-chg" "\ -Move to the beginning of the previous change, if in Highlight Changes mode. - -\(fn)" t nil) +Move to the beginning of the previous change, if in Highlight Changes mode." t nil) (autoload 'highlight-changes-rotate-faces "hilit-chg" "\ Rotate the faces if in Highlight Changes mode and the changes are visible. @@ -16548,9 +16071,7 @@ You can automatically rotate colors when the buffer is saved by adding this function to `write-file-functions' as a buffer-local value. To do this, eval the following in the buffer to be saved: - (add-hook \\='write-file-functions \\='highlight-changes-rotate-faces nil t) - -\(fn)" t nil) + (add-hook \\='write-file-functions \\='highlight-changes-rotate-faces nil t)" t nil) (autoload 'highlight-compare-buffers "hilit-chg" "\ Compare two buffers and highlight the differences. @@ -17417,51 +16938,37 @@ RET Select the buffer at the front of the list of matches. \\[ido-completion-help] Show list of matching buffers in separate window. \\[ido-enter-find-file] Drop into `ido-find-file'. \\[ido-kill-buffer-at-head] Kill buffer at head of buffer list. -\\[ido-toggle-ignore] Toggle ignoring buffers listed in `ido-ignore-buffers'. - -\(fn)" t nil) +\\[ido-toggle-ignore] Toggle ignoring buffers listed in `ido-ignore-buffers'." t nil) (autoload 'ido-switch-buffer-other-window "ido" "\ Switch to another buffer and show it in another window. The buffer name is selected interactively by typing a substring. -For details of keybindings, see `ido-switch-buffer'. - -\(fn)" t nil) +For details of keybindings, see `ido-switch-buffer'." t nil) (autoload 'ido-display-buffer "ido" "\ Display a buffer in another window but don't select it. The buffer name is selected interactively by typing a substring. -For details of keybindings, see `ido-switch-buffer'. - -\(fn)" t nil) +For details of keybindings, see `ido-switch-buffer'." t nil) (autoload 'ido-display-buffer-other-frame "ido" "\ Display a buffer preferably in another frame. The buffer name is selected interactively by typing a substring. -For details of keybindings, see `ido-switch-buffer'. - -\(fn)" t nil) +For details of keybindings, see `ido-switch-buffer'." t nil) (autoload 'ido-kill-buffer "ido" "\ Kill a buffer. The buffer name is selected interactively by typing a substring. -For details of keybindings, see `ido-switch-buffer'. - -\(fn)" t nil) +For details of keybindings, see `ido-switch-buffer'." t nil) (autoload 'ido-insert-buffer "ido" "\ Insert contents of a buffer in current buffer after point. The buffer name is selected interactively by typing a substring. -For details of keybindings, see `ido-switch-buffer'. - -\(fn)" t nil) +For details of keybindings, see `ido-switch-buffer'." t nil) (autoload 'ido-switch-buffer-other-frame "ido" "\ Switch to another buffer and show it in another frame. The buffer name is selected interactively by typing a substring. -For details of keybindings, see `ido-switch-buffer'. - -\(fn)" t nil) +For details of keybindings, see `ido-switch-buffer'." t nil) (autoload 'ido-find-file-in-dir "ido" "\ Switch to another file starting from DIR. @@ -17509,100 +17016,72 @@ RET Select the file at the front of the list of matches. \\[ido-toggle-case] Toggle case-sensitive searching of file names. \\[ido-toggle-literal] Toggle literal reading of this file. \\[ido-completion-help] Show list of matching files in separate window. -\\[ido-toggle-ignore] Toggle ignoring files listed in `ido-ignore-files'. - -\(fn)" t nil) +\\[ido-toggle-ignore] Toggle ignoring files listed in `ido-ignore-files'." t nil) (autoload 'ido-find-file-other-window "ido" "\ Switch to another file and show it in another window. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-find-alternate-file "ido" "\ Find another file, select its buffer, kill previous buffer. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-find-alternate-file-other-window "ido" "\ Find file as a replacement for the file in the next window. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-find-file-read-only "ido" "\ Edit file read-only with name obtained via minibuffer. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-find-file-read-only-other-window "ido" "\ Edit file read-only in other window with name obtained via minibuffer. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-find-file-read-only-other-frame "ido" "\ Edit file read-only in other frame with name obtained via minibuffer. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-display-file "ido" "\ Display a file in another window but don't select it. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-find-file-other-frame "ido" "\ Switch to another file and show it in another frame. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-write-file "ido" "\ Write current buffer to a file. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-insert-file "ido" "\ Insert contents of file in current buffer. The file name is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-dired "ido" "\ Call `dired' the Ido way. The directory is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-dired-other-window "ido" "\ \"Edit\" a directory. Like `ido-dired' but selects in another window. The directory is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-dired-other-frame "ido" "\ \"Edit\" a directory. Like `ido-dired' but makes a new frame. The directory is selected interactively by typing a substring. -For details of keybindings, see `ido-find-file'. - -\(fn)" t nil) +For details of keybindings, see `ido-find-file'." t nil) (autoload 'ido-read-buffer "ido" "\ Ido replacement for the built-in `read-buffer'. @@ -17707,9 +17186,7 @@ be determined. (autoload 'image-type-from-buffer "image" "\ Determine the image type from data in the current buffer. Value is a symbol specifying the image type or nil if type cannot -be determined. - -\(fn)" nil nil) +be determined." nil nil) (autoload 'image-type-from-file-header "image" "\ Determine the type of image file FILE from its first few bytes. @@ -17750,9 +17227,7 @@ The buffer is considered to contain an auto-detectable image if its beginning matches an image type in `image-type-header-regexps', and that image type is present in `image-type-auto-detectable' with a non-nil value. If that value is non-nil, but not t, then the image type -must be available. - -\(fn)" nil nil) +must be available." nil nil) (autoload 'create-image "image" "\ Create an image. @@ -17888,9 +17363,7 @@ Emacs visits them in Image mode. They are also added to `image-type-file-name-regexps', so that the `image-type' function recognizes these files as having image type `imagemagick'. -If Emacs is compiled without ImageMagick support, this does nothing. - -\(fn)" nil nil) +If Emacs is compiled without ImageMagick support, this does nothing." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image" '("image"))) @@ -17976,9 +17449,7 @@ With prefix argument ARG, remove tag from file at point. \(fn ARG)" t nil) (autoload 'image-dired-jump-thumbnail-buffer "image-dired" "\ -Jump to thumbnail buffer. - -\(fn)" t nil) +Jump to thumbnail buffer." t nil) (autoload 'image-dired-minor-mode "image-dired" "\ Setup easy-to-use keybindings for the commands to be used in dired mode. @@ -17995,19 +17466,13 @@ if ARG is `toggle'; disable the mode otherwise. (define-obsolete-function-alias 'image-dired-setup-dired-keybindings 'image-dired-minor-mode "26.1") (autoload 'image-dired-display-thumbs-append "image-dired" "\ -Append thumbnails to `image-dired-thumbnail-buffer'. - -\(fn)" t nil) +Append thumbnails to `image-dired-thumbnail-buffer'." t nil) (autoload 'image-dired-display-thumb "image-dired" "\ -Shorthand for `image-dired-display-thumbs' with prefix argument. - -\(fn)" t nil) +Shorthand for `image-dired-display-thumbs' with prefix argument." t nil) (autoload 'image-dired-dired-display-external "image-dired" "\ -Display file at point using an external viewer. - -\(fn)" t nil) +Display file at point using an external viewer." t nil) (autoload 'image-dired-dired-display-image "image-dired" "\ Display current image file. @@ -18017,9 +17482,7 @@ With prefix argument ARG, display image in its original size. \(fn &optional ARG)" t nil) (autoload 'image-dired-dired-comment-files "image-dired" "\ -Add comment to current or marked files in dired. - -\(fn)" t nil) +Add comment to current or marked files in dired." t nil) (autoload 'image-dired-mark-tagged-files "image-dired" "\ Use regexp to mark files with matching tag. @@ -18027,16 +17490,12 @@ A `tag' is a keyword, a piece of meta data, associated with an image file and stored in image-dired's database file. This command lets you input a regexp and this will be matched against all tags on all image files in the database file. The files that have a -matching tag will be marked in the dired buffer. - -\(fn)" t nil) +matching tag will be marked in the dired buffer." t nil) (autoload 'image-dired-dired-edit-comment-and-tags "image-dired" "\ Edit comment and tags of current or marked image files. Edit comment and tags for all marked image files in an -easy-to-use form. - -\(fn)" t nil) +easy-to-use form." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image-dired" '("image-dired-"))) @@ -18070,9 +17529,7 @@ the variable is set using \\[customize].") (custom-autoload 'image-file-name-regexps "image-file" nil) (autoload 'image-file-name-regexp "image-file" "\ -Return a regular expression matching image-file filenames. - -\(fn)" nil nil) +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. @@ -18118,9 +17575,7 @@ You can use \\\\[image-toggle-display] or \\\\[i to toggle between display as an image and display as text or hex. Key bindings: -\\{image-mode-map} - -\(fn)" t nil) +\\{image-mode-map}" t nil) (autoload 'image-minor-mode "image-mode" "\ Toggle Image minor mode in this buffer. @@ -18139,9 +17594,7 @@ actual image. (autoload 'image-mode-to-text "image-mode" "\ Set a non-image mode as major mode in combination with image minor mode. A non-mage major mode found from `auto-mode-alist' or fundamental mode -displays an image file as text. - -\(fn)" nil nil) +displays an image file as text." nil nil) (autoload 'image-bookmark-jump "image-mode" "\ @@ -18284,9 +17737,7 @@ See the command `imenu' for more information. (autoload 'imenu-add-menubar-index "imenu" "\ Add an Imenu \"Index\" entry on the menu bar for the current buffer. -A trivial interface to `imenu-add-to-menubar' suitable for use in a hook. - -\(fn)" t nil) +A trivial interface to `imenu-add-to-menubar' suitable for use in a hook." t nil) (autoload 'imenu "imenu" "\ Jump to a place in the buffer chosen using a buffer menu or mouse menu. @@ -18404,21 +17855,15 @@ See a list of available Info commands in `Info-mode'. \(fn &optional FILE-OR-NODE BUFFER)" t nil) (autoload 'info-emacs-manual "info" "\ -Display the Emacs manual in Info mode. - -\(fn)" t nil) +Display the Emacs manual in Info mode." t nil) (autoload 'info-emacs-bug "info" "\ -Display the \"Reporting Bugs\" section of the Emacs manual in Info mode. - -\(fn)" t nil) +Display the \"Reporting Bugs\" section of the Emacs manual in Info mode." t nil) (autoload 'info-standalone "info" "\ Run Emacs as a standalone Info reader. Usage: emacs -f info-standalone [filename] -In standalone mode, \\\\[Info-exit] exits Emacs itself. - -\(fn)" nil nil) +In standalone mode, \\\\[Info-exit] exits Emacs itself." nil nil) (autoload 'Info-on-current-buffer "info" "\ Use Info mode to browse the current Info buffer. @@ -18428,9 +17873,7 @@ otherwise, that defaults to `Top'. \(fn &optional NODENAME)" t nil) (autoload 'Info-directory "info" "\ -Go to the Info directory node. - -\(fn)" t nil) +Go to the Info directory node." t nil) (autoload 'Info-index "info" "\ Look up a string TOPIC in the index for this manual and go to that entry. @@ -18542,9 +17985,7 @@ the variable `Info-file-list-for-emacs'. (autoload 'Info-speedbar-browser "info" "\ Initialize speedbar to display an Info node browser. -This will add a speedbar major display mode. - -\(fn)" t nil) +This will add a speedbar major display mode." t nil) (autoload 'Info-bookmark-jump "info" "\ This implements the `handler' function interface for the record @@ -18572,9 +18013,7 @@ completion alternatives to currently visited manuals. Throw away all cached data. This command is useful if the user wants to start at the beginning without quitting Emacs, for example, after some Info documents were updated on the -system. - -\(fn)" t nil) +system." t nil) (put 'info-lookup-symbol 'info-file "emacs") (autoload 'info-lookup-symbol "info-look" "\ @@ -18657,9 +18096,7 @@ info files don't necessarily have a \".info\" extension and in particular the Emacs manuals normally don't. If you have a source code directory in `Info-directory-list' then a lot of extraneous files might be read. This will be time consuming but -should be harmless. - -\(fn)" t nil) +should be harmless." t nil) (autoload 'info-xref-check-all-custom "info-xref" "\ Check info references in all customize groups and variables. @@ -18668,9 +18105,7 @@ of the `custom-links' for a variable. Any `custom-load' autoloads in variables are loaded in order to get full link information. This will be a lot of Lisp packages -and can take a long time. - -\(fn)" t nil) +and can take a long time." t nil) (autoload 'info-xref-docstrings "info-xref" "\ Check docstring info node references in source files. @@ -18724,23 +18159,17 @@ should be saved in place of the original visited file. The subfiles are written in the same directory the original file is in, with names generated by appending `-' and a number to the original file name. The indirect file still functions as an Info file, but it -contains just the tag table and a directory of subfiles. - -\(fn)" t nil) +contains just the tag table and a directory of subfiles." t nil) (autoload 'Info-validate "informat" "\ Check current buffer for validity as an Info file. -Check that every node pointer points to an existing node. - -\(fn)" t nil) +Check that every node pointer points to an existing node." t nil) (autoload 'batch-info-validate "informat" "\ Runs `Info-validate' on the files remaining on the command line. Must be used only with -batch, and kills Emacs on completion. Each file will be processed even if an error occurred previously. -For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" - -\(fn)" nil nil) +For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\"" nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "informat" '("Info-validate-"))) @@ -18784,14 +18213,10 @@ Only checks one based on which kind of Emacs is being run. ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ -Select an input method and turn it on in interactive search. - -\(fn)" t nil) +Select an input method and turn it on in interactive search." t nil) (autoload 'isearch-toggle-input-method "isearch-x" "\ -Toggle input method in interactive search. - -\(fn)" t nil) +Toggle input method in interactive search." t nil) (autoload 'isearch-process-search-multibyte-characters "isearch-x" "\ @@ -18810,9 +18235,7 @@ Toggle input method in interactive search. Active isearchb mode for subsequent alphanumeric keystrokes. Executing this command again will terminate the search; or, if the search has not yet begun, will toggle to the last buffer -accessed via isearchb. - -\(fn)" t nil) +accessed via isearchb." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "isearchb" '("isearchb"))) @@ -18911,9 +18334,7 @@ Warn that format is write-only. \(fn &rest IGNORE)" t nil) (autoload 'iso-cvt-define-menu "iso-cvt" "\ -Add submenus to the File menu, to convert to and from various formats. - -\(fn)" t nil) +Add submenus to the File menu, to convert to and from various formats." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "iso-cvt" '("iso-"))) @@ -19032,9 +18453,7 @@ SPC: Accept word this time. `m': Place typed-in value in personal dictionary, then recheck current word. `C-l': Redraw screen. `C-r': Recursive edit. -`C-z': Suspend Emacs or iconify frame. - -\(fn)" nil nil) +`C-z': Suspend Emacs or iconify frame." nil nil) (autoload 'ispell-kill-ispell "ispell" "\ Kill current Ispell process (so that you may start a fresh one). @@ -19060,14 +18479,10 @@ amount for last line processed. \(fn REG-START REG-END &optional RECHECKP SHIFT)" t nil) (autoload 'ispell-comments-and-strings "ispell" "\ -Check comments and strings in the current buffer for spelling errors. - -\(fn)" t nil) +Check comments and strings in the current buffer for spelling errors." t nil) (autoload 'ispell-buffer "ispell" "\ -Check the current buffer for spelling errors interactively. - -\(fn)" t nil) +Check the current buffer for spelling errors interactively." t nil) (autoload 'ispell-buffer-with-debug "ispell" "\ `ispell-buffer' with some output sent to `ispell-debug-buffer' buffer. @@ -19076,9 +18491,7 @@ If APPEND is non-n il, append the info to previous buffer if exists. \(fn &optional APPEND)" t nil) (autoload 'ispell-continue "ispell" "\ -Continue a halted spelling session beginning with the current word. - -\(fn)" t nil) +Continue a halted spelling session beginning with the current word." t nil) (autoload 'ispell-complete-word "ispell" "\ Try to complete the word before or at point. @@ -19090,9 +18503,7 @@ Standard ispell choices are then available. \(fn &optional INTERIOR-FRAG)" t nil) (autoload 'ispell-complete-word-interior-frag "ispell" "\ -Completes word matching character sequence inside a word. - -\(fn)" t nil) +Completes word matching character sequence inside a word." t nil) (autoload 'ispell "ispell" "\ Interactively check a region or buffer for spelling errors. @@ -19102,9 +18513,7 @@ that region. Otherwise spell-check the buffer. Ispell dictionaries are not distributed with Emacs. If you are looking for a dictionary, please see the distribution of the GNU ispell program, or do an Internet search; there are various dictionaries -available on the net. - -\(fn)" t nil) +available on the net." t nil) (autoload 'ispell-minor-mode "ispell" "\ Toggle last-word spell checking (Ispell minor mode). @@ -19145,9 +18554,7 @@ in your init file: You can bind this to the key C-c i in GNUS or mail by adding to `news-reply-mode-hook' or `mail-mode-hook' the following lambda expression: - (function (lambda () (local-set-key \"\\C-ci\" \\='ispell-message))) - -\(fn)" t nil) + (function (lambda () (local-set-key \"\\C-ci\" \\='ispell-message)))" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ispell" '("check-ispell-version" "ispell-"))) @@ -19173,10 +18580,7 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;;;; 0 0)) ;;; Generated autoloads from language/japan-util.el -(autoload 'setup-japanese-environment-internal "japan-util" "\ - - -\(fn)" nil nil) +(autoload 'setup-japanese-environment-internal "japan-util" nil nil nil) (autoload 'japanese-katakana "japan-util" "\ Convert argument to Katakana and return that. @@ -19266,9 +18670,7 @@ It is not recommended to set this variable permanently to anything but nil.") Uninstall jka-compr. This removes the entries in `file-name-handler-alist' and `auto-mode-alist' and `inhibit-local-variables-suffixes' that were added -by `jka-compr-installed'. - -\(fn)" nil nil) +by `jka-compr-installed'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "jka-compr" '("compression-error" "jka-compr-"))) @@ -19556,10 +18958,7 @@ If kbd macro currently being defined end it before activating it. The kind of Korean keyboard for Korean input method. \"\" for 2, \"3\" for 3.") -(autoload 'setup-korean-environment-internal "korea-util" "\ - - -\(fn)" nil nil) +(autoload 'setup-korean-environment-internal "korea-util" nil nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "korea-util" '("exit-korean-environment" "isearch-" "korean-key-bindings" "quail-hangul-switch-" "toggle-korean-input-method"))) @@ -20023,9 +19422,7 @@ argument.") (autoload 'lpr-buffer "lpr" "\ Print buffer contents without pagination or page headers. See the variables `lpr-switches' and `lpr-command' -for customization of the printer command. - -\(fn)" t nil) +for customization of the printer command." t nil) (autoload 'print-buffer "lpr" "\ Paginate and print buffer contents. @@ -20039,9 +19436,7 @@ Otherwise, the switches in `lpr-headers-switches' are used in the print command itself; we expect them to request pagination. See the variables `lpr-switches' and `lpr-command' -for further customization of the printer command. - -\(fn)" t nil) +for further customization of the printer command." t nil) (autoload 'lpr-region "lpr" "\ Print region contents without pagination or page headers. @@ -20235,14 +19630,9 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ -Define keys for accessing mail header history. For use in hooks. - -\(fn)" nil nil) - -(autoload 'mail-hist-enable "mail-hist" "\ +Define keys for accessing mail header history. For use in hooks." nil nil) - -\(fn)" nil nil) +(autoload 'mail-hist-enable "mail-hist" nil nil nil) (defvar mail-hist-keep-history t "\ Non-nil means keep a history for headers and text of outgoing mail.") @@ -20254,9 +19644,7 @@ Put headers and contents of this message into mail header history. Each header has its own independent history, as does the body of the message. -This function normally would be called when the message is sent. - -\(fn)" nil nil) +This function normally would be called when the message is sent." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-hist" '("mail-hist-"))) @@ -20389,9 +19777,7 @@ the entries in your `mail-personal-alias-file'. \(fn &optional ARG)" t nil) (autoload 'mail-abbrevs-setup "mailabbrev" "\ -Initialize use of the `mailabbrev' package. - -\(fn)" nil nil) +Initialize use of the `mailabbrev' package." nil nil) (autoload 'build-mail-abbrevs "mailabbrev" "\ Read mail aliases from personal mail alias file and set `mail-abbrevs'. @@ -20452,9 +19838,7 @@ 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'. - -\(fn)" nil nil) +For use on `completion-at-point-functions'." nil nil) (autoload 'mail-complete "mailalias" "\ Perform completion on header field or word preceding point. @@ -20482,9 +19866,7 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. (autoload 'mailclient-send-it "mailclient" "\ Pass current buffer on to the system's mail client. Suitable value for `send-mail-function'. -The mail client is taken to be the handler of mailto URLs. - -\(fn)" nil nil) +The mail client is taken to be the handler of mailto URLs." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mailclient" '("mailclient-"))) @@ -20636,9 +20018,7 @@ An adapted `makefile-mode' that knows about imake. (autoload 'make-command-summary "makesum" "\ Make a summary of current key bindings in the buffer *Summary*. -Previous contents of that buffer are killed first. - -\(fn)" t nil) +Previous contents of that buffer are killed first." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "makesum" '("double-column"))) @@ -20711,7 +20091,7 @@ Default bookmark handler for Man buffers. ;;;### (autoloads nil "map" "emacs-lisp/map.el" (0 0 0 0)) ;;; Generated autoloads from emacs-lisp/map.el -(push (purecopy '(map 1 2)) package--builtin-versions) +(push (purecopy '(map 2 0)) package--builtin-versions) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "map" '("map-"))) @@ -20868,14 +20248,10 @@ If ARG, allow editing of the cancellation message. (autoload 'message-supersede "message" "\ Start composing a message to supersede the current message. This is done simply by taking the old article and adding a Supersedes -header line with the old Message-ID. - -\(fn)" t nil) +header line with the old Message-ID." t nil) (autoload 'message-recover "message" "\ -Reread contents of current buffer from its last auto-save file. - -\(fn)" t nil) +Reread contents of current buffer from its last auto-save file." t nil) (autoload 'message-forward "message" "\ Forward the current message via mail. @@ -20895,9 +20271,7 @@ Optional DIGEST will use digest to forward. \(fn FORWARD-BUFFER)" nil nil) (autoload 'message-insinuate-rmail "message" "\ -Let RMAIL use message to forward. - -\(fn)" t nil) +Let RMAIL use message to forward." t nil) (autoload 'message-resend "message" "\ Resend the current article to ADDRESS. @@ -20908,9 +20282,7 @@ Resend the current article to ADDRESS. Re-mail the current message. This only makes sense if the current message is a bounce message that contains some mail you have written which has been bounced back to -you. - -\(fn)" t nil) +you." t nil) (autoload 'message-mail-other-window "message" "\ Like `message-mail' command, but display mail buffer in another window. @@ -20975,9 +20347,7 @@ Major mode for editing MetaPost sources. (autoload 'metamail-interpret-header "metamail" "\ Interpret a header part of a MIME message in current buffer. -Its body part is not interpreted at all. - -\(fn)" t nil) +Its body part is not interpreted at all." t nil) (autoload 'metamail-interpret-body "metamail" "\ Interpret a body part of a MIME message in current buffer. @@ -21041,15 +20411,11 @@ redisplayed as output is inserted. (autoload 'mh-smail "mh-comp" "\ Compose a message with the MH mail system. -See `mh-send' for more details on composing mail. - -\(fn)" t nil) +See `mh-send' for more details on composing mail." t nil) (autoload 'mh-smail-other-window "mh-comp" "\ Compose a message with the MH mail system in other window. -See `mh-send' for more details on composing mail. - -\(fn)" t nil) +See `mh-send' for more details on composing mail." t nil) (autoload 'mh-smail-batch "mh-comp" "\ Compose a message with the MH mail system. @@ -21120,9 +20486,7 @@ Quit editing and delete draft message. If for some reason you are not happy with the draft, you can use this command to kill the draft buffer and delete the draft message. Use the command \\[kill-buffer] if you don't want to -delete the draft message. - -\(fn)" t nil) +delete the draft message." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-comp" '("mh-"))) @@ -21146,9 +20510,7 @@ delete the draft message. (put 'mh-lib-progs 'risky-local-variable t) (autoload 'mh-version "mh-e" "\ -Display version information about MH-E and the MH mail handling system. - -\(fn)" t nil) +Display version information about MH-E and the MH mail handling system." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-e" '("defcustom-mh" "defface-mh" "defgroup-mh" "mh-"))) @@ -21408,9 +20770,7 @@ The relevant variables are `clean-buffer-list-delay-general', While processing buffers, this procedure displays messages containing the current date/time, buffer name, how many seconds ago it was displayed (can be nil if the buffer was never displayed) and its -lifetime, i.e., its \"age\" when it will be purged. - -\(fn)" t nil) +lifetime, i.e., its \"age\" when it will be purged." t nil) (autoload 'midnight-delay-set "midnight" "\ Modify `midnight-timer' according to `midnight-delay'. @@ -21477,14 +20837,10 @@ Ignores CHAR at point. \(fn ARG CHAR)" t nil) (autoload 'mark-beginning-of-buffer "misc" "\ -Set mark at the beginning of the buffer. - -\(fn)" t nil) +Set mark at the beginning of the buffer." t nil) (autoload 'mark-end-of-buffer "misc" "\ -Set mark at the end of the buffer. - -\(fn)" t nil) +Set mark at the end of the buffer." t nil) (autoload 'upcase-char "misc" "\ Uppercasify ARG chars starting from point. Point doesn't move. @@ -21511,9 +20867,7 @@ upper atmosphere. These cause momentary pockets of higher-pressure air to form, which act as lenses that deflect incoming cosmic rays, focusing them to strike the drive platter and flip the desired bit. You can type `M-x butterfly C-M-c' to run it. This is a permuted -variation of `C-x M-c M-butterfly' from url `http://xkcd.com/378/'. - -\(fn)" t nil) +variation of `C-x M-c M-butterfly' from url `http://xkcd.com/378/'." t nil) (autoload 'list-dynamic-libraries "misc" "\ Display a list of all dynamic libraries known to Emacs. @@ -21574,9 +20928,7 @@ Sequence of files visited by multiple file buffers Isearch.") (autoload 'multi-isearch-setup "misearch" "\ Set up isearch to search multiple buffers. -Intended to be added to `isearch-mode-hook'. - -\(fn)" nil nil) +Intended to be added to `isearch-mode-hook'." nil nil) (autoload 'multi-isearch-buffers "misearch" "\ Start multi-buffer Isearch on a list of BUFFERS. @@ -21759,9 +21111,7 @@ Assume text has been decoded if DECODED is non-nil. ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ -Translate the current buffer from MML to MIME. - -\(fn)" nil nil) +Translate the current buffer from MML to MIME." nil nil) (autoload 'mml-attach-file "mml" "\ Attach a file to the outgoing MIME message. @@ -21850,10 +21200,7 @@ will be computed and used. \(fn CONT)" nil nil) -(autoload 'mml2015-self-encrypt "mml2015" "\ - - -\(fn)" nil nil) +(autoload 'mml2015-self-encrypt "mml2015" nil nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mml2015" '("mml2015-"))) @@ -21990,9 +21337,7 @@ To test this function, evaluate: ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ -Main entry point for MPC. - -\(fn)" t nil) +Main entry point for MPC." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mpc" '("mpc-" "tag-browser-tagtypes"))) @@ -22002,9 +21347,7 @@ Main entry point for MPC. ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ -Multiplication puzzle with GNU Emacs. - -\(fn)" t nil) +Multiplication puzzle with GNU Emacs." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mpuz" '("mpuz-"))) @@ -22113,14 +21456,10 @@ in place of `..': `default-process-coding-system' for read eol-type of `default-process-coding-system' for read `default-process-coding-system' for write - eol-type of `default-process-coding-system' - -\(fn)" t nil) + eol-type of `default-process-coding-system'" t nil) (autoload 'describe-current-coding-system "mule-diag" "\ -Display coding systems currently used, in detail. - -\(fn)" t nil) +Display coding systems currently used, in detail." t nil) (autoload 'list-coding-systems "mule-diag" "\ Display a list of all coding systems. @@ -22132,9 +21471,7 @@ but still contains full information about each coding system. \(fn &optional ARG)" t nil) (autoload 'list-coding-categories "mule-diag" "\ -Display a list of all coding categories. - -\(fn)" nil nil) +Display a list of all coding categories." nil nil) (autoload 'describe-font "mule-diag" "\ Display information about a font whose name is FONTNAME. @@ -22157,9 +21494,7 @@ see the function `describe-fontset' for the format of the list. \(fn ARG)" t nil) (autoload 'list-input-methods "mule-diag" "\ -Display information about all input methods. - -\(fn)" t nil) +Display information about all input methods." t nil) (autoload 'mule-diag "mule-diag" "\ Display diagnosis of the multilingual environment (Mule). @@ -22167,9 +21502,7 @@ Display diagnosis of the multilingual environment (Mule). This shows various information related to the current multilingual environment, including lists of input methods, coding systems, character sets, and fontsets (if Emacs is running under a window -system which uses fontsets). - -\(fn)" t nil) +system which uses fontsets)." t nil) (autoload 'font-show-log "mule-diag" "\ Show log of font listing and opening. @@ -22349,29 +21682,19 @@ QUALITY can be: ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ -Run `ifconfig-program' and display diagnostic output. - -\(fn)" t nil) +Run `ifconfig-program' and display diagnostic output." t nil) (autoload 'iwconfig "net-utils" "\ -Run `iwconfig-program' and display diagnostic output. - -\(fn)" t nil) +Run `iwconfig-program' and display diagnostic output." t nil) (autoload 'netstat "net-utils" "\ -Run `netstat-program' and display diagnostic output. - -\(fn)" t nil) +Run `netstat-program' and display diagnostic output." t nil) (autoload 'arp "net-utils" "\ -Run `arp-program' and display diagnostic output. - -\(fn)" t nil) +Run `arp-program' and display diagnostic output." t nil) (autoload 'route "net-utils" "\ -Run `route-program' and display diagnostic output. - -\(fn)" t nil) +Run `route-program' and display diagnostic output." t nil) (autoload 'traceroute "net-utils" "\ Run `traceroute-program' for TARGET. @@ -22396,9 +21719,7 @@ This command uses `nslookup-program' for looking up the DNS information. \(fn HOST &optional NAME-SERVER)" t nil) (autoload 'nslookup "net-utils" "\ -Run `nslookup-program'. - -\(fn)" t nil) +Run `nslookup-program'." t nil) (autoload 'dns-lookup-host "net-utils" "\ Look up the DNS information for HOST (name or IP address). @@ -22440,10 +21761,7 @@ The port is deduced from `network-connection-service-alist'. \(fn ARG SEARCH-STRING)" t nil) -(autoload 'whois-reverse-lookup "net-utils" "\ - - -\(fn)" t nil) +(autoload 'whois-reverse-lookup "net-utils" nil t nil) (autoload 'network-connection-to-service "net-utils" "\ Open a network connection to SERVICE on HOST. @@ -22590,9 +21908,7 @@ gnutls-boot (as returned by `gnutls-boot-parameters'). (autoload 'newsticker-running-p "newst-backend" "\ Check whether newsticker is running. Return t if newsticker is running, nil otherwise. Newsticker is -considered to be running if the newsticker timer list is not empty. - -\(fn)" nil nil) +considered to be running if the newsticker timer list is not empty." nil nil) (autoload 'newsticker-start "newst-backend" "\ Start the newsticker. @@ -22612,9 +21928,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ -Start newsticker plainview. - -\(fn)" t nil) +Start newsticker plainview." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-plainview" '("newsticker-"))) @@ -22625,9 +21939,7 @@ Start newsticker plainview. ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ -Start reading news. You may want to bind this to a key. - -\(fn)" t nil) +Start reading news. You may want to bind this to a key." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-reader" '("newsticker-"))) @@ -22641,16 +21953,12 @@ Start reading news. You may want to bind this to a key. Check whether newsticker's actual ticker is running. Return t if ticker is running, nil otherwise. Newsticker is considered to be running if the newsticker timer list is not -empty. - -\(fn)" nil nil) +empty." nil nil) (autoload 'newsticker-start-ticker "newst-ticker" "\ Start newsticker's ticker (but not the news retrieval). Start display timer for the actual ticker if wanted and not -running already. - -\(fn)" t nil) +running already." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-ticker" '("newsticker-"))) @@ -22661,9 +21969,7 @@ running already. ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ -Start newsticker treeview. - -\(fn)" t nil) +Start newsticker treeview." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-treeview" '("newsticker-"))) @@ -22744,9 +22050,7 @@ symbol in the alist. (autoload 'nnfolder-generate-active-file "nnfolder" "\ Look for mbox folders in the nnfolder directory and make them into groups. -This command does not work if you use short group names. - -\(fn)" t nil) +This command does not work if you use short group names." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnfolder" '("nnfolder-"))) @@ -23492,9 +22796,7 @@ Many aspects this mode can be customized using (add-to-list 'auto-mode-alist '("\\.m\\'" . octave-maybe-mode)) (autoload 'octave-maybe-mode "octave" "\ -Select `octave-mode' if the current buffer seems to hold Octave code. - -\(fn)" nil nil) +Select `octave-mode' if the current buffer seems to hold Octave code." nil nil) (autoload 'octave-mode "octave" "\ Major mode for editing Octave code. @@ -23604,14 +22906,10 @@ FULL is given. \(fn &optional HERE FULL MESSAGE)" t nil) (autoload 'turn-on-orgtbl "org" "\ -Unconditionally turn on `orgtbl-mode'. - -\(fn)" nil nil) +Unconditionally turn on `orgtbl-mode'." nil nil) (autoload 'org-clock-persistence-insinuate "org" "\ -Set up hooks for clock persistence. - -\(fn)" nil nil) +Set up hooks for clock persistence." nil nil) (autoload 'org-mode "org" "\ Outline-based notes management and organizer, alias @@ -23709,14 +23007,10 @@ if ARG is `toggle'; disable the mode otherwise. \(fn &optional ARG)" t nil) (autoload 'turn-on-orgstruct "org" "\ -Unconditionally turn on `orgstruct-mode'. - -\(fn)" nil nil) +Unconditionally turn on `orgstruct-mode'." nil nil) (autoload 'turn-on-orgstruct++ "org" "\ -Unconditionally turn on `orgstruct++-mode'. - -\(fn)" nil nil) +Unconditionally turn on `orgstruct++-mode'." nil nil) (autoload 'org-run-like-in-org-mode "org" "\ Run a command, pretending that the current buffer is in Org mode. @@ -23746,18 +23040,14 @@ active region. (autoload 'org-insert-link-global "org" "\ Insert a link like Org mode does. -This command can be called in any mode to insert a link in Org syntax. - -\(fn)" t nil) +This command can be called in any mode to insert a link in Org syntax." t nil) (autoload 'org-open-at-point-global "org" "\ Follow a link or time-stamp like Org mode does. This command can be called in any mode to follow an external link or a time-stamp that has Org mode syntax. Its behavior is undefined when called on internal links (e.g., fuzzy links). -Raise an error when there is nothing to follow. - -\(fn)" t nil) +Raise an error when there is nothing to follow. " t nil) (autoload 'org-open-link-from-string "org" "\ Open a link in the string S, as if it was in Org mode. @@ -23776,9 +23066,7 @@ With `\\[universal-argument] \\[universal-argument]' prefix, restrict available (autoload 'org-cycle-agenda-files "org" "\ Cycle through the files in `org-agenda-files'. If the current buffer visits an agenda file, find the next one in the list. -If the current buffer does not, find the first agenda file. - -\(fn)" t nil) +If the current buffer does not, find the first agenda file." t nil) (autoload 'org-submit-bug-report "org" "\ Submit a bug report on Org via mail. @@ -23787,9 +23075,7 @@ Don't hesitate to report any problems or inaccurate documentation. If you don't have setup sending mail from (X)Emacs, please copy the output buffer into your mail program, as it gives us important -information about your Org version and configuration. - -\(fn)" t nil) +information about your Org version and configuration." t nil) (autoload 'org-reload "org" "\ Reload all Org Lisp files. @@ -23798,9 +23084,7 @@ With prefix arg UNCOMPILED, load the uncompiled versions. \(fn &optional UNCOMPILED)" t nil) (autoload 'org-customize "org" "\ -Call the customize function with org as argument. - -\(fn)" t nil) +Call the customize function with org as argument." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org" '("org" "turn-on-org-cdlatex"))) @@ -24038,9 +23322,7 @@ in the file. Otherwise, restriction will be to the current subtree. (autoload 'org-calendar-goto-agenda "org-agenda" "\ Compute the Org agenda for the calendar date displayed at the cursor. -This is a command that has to be installed in `calendar-mode-map'. - -\(fn)" t nil) +This is a command that has to be installed in `calendar-mode-map'." t nil) (autoload 'org-agenda-to-appt "org-agenda" "\ Activate appointments found in `org-agenda-files'. @@ -24152,9 +23434,7 @@ of the day at point (if any) or the current HH:MM time. \(fn &optional GOTO KEYS)" t nil) (autoload 'org-capture-import-remember-templates "org-capture" "\ -Set `org-capture-templates' to be similar to `org-remember-templates'. - -\(fn)" t nil) +Set `org-capture-templates' to be similar to `org-remember-templates'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-capture" '("org-"))) @@ -24172,14 +23452,9 @@ Set `org-capture-templates' to be similar to `org-remember-templates'. ;;; Generated autoloads from org/org-colview.el (autoload 'org-columns-remove-overlays "org-colview" "\ -Remove all currently active column overlays. - -\(fn)" t nil) +Remove all currently active column overlays." t nil) -(autoload 'org-columns-get-format-and-top-level "org-colview" "\ - - -\(fn)" nil nil) +(autoload 'org-columns-get-format-and-top-level "org-colview" nil nil nil) (autoload 'org-columns "org-colview" "\ Turn on column view on an Org mode file. @@ -24225,14 +23500,10 @@ PARAMS is a property list of parameters: \(fn PARAMS)" nil nil) (autoload 'org-columns-insert-dblock "org-colview" "\ -Create a dynamic block capturing a column view table. - -\(fn)" t nil) +Create a dynamic block capturing a column view table." t nil) (autoload 'org-agenda-columns "org-colview" "\ -Turn on or update column view in the agenda. - -\(fn)" t nil) +Turn on or update column view in the agenda." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-colview" '("org-"))) @@ -24242,9 +23513,7 @@ Turn on or update column view in the agenda. ;;; Generated autoloads from org/org-compat.el (autoload 'org-check-version "org-compat" "\ -Try very hard to provide sensible version strings. - -\(fn)" nil t) +Try very hard to provide sensible version strings." nil t) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-compat" '("org-"))) @@ -24284,9 +23553,7 @@ Try very hard to provide sensible version strings. ;;; Generated autoloads from org/org-duration.el (autoload 'org-duration-set-regexps "org-duration" "\ -Set duration related regexps. - -\(fn)" t nil) +Set duration related regexps." t nil) (autoload 'org-duration-p "org-duration" "\ Non-nil when string S is a time duration. @@ -24567,15 +23834,11 @@ Load FILE with optional arguments NOERROR and MUSTSUFFIX. (autoload 'org-release "org-version" "\ The release version of Org. -Inserted by installing Org mode or when a release is made. - -\(fn)" nil nil) +Inserted by installing Org mode or when a release is made." nil nil) (autoload 'org-git-version "org-version" "\ The Git version of Org mode. -Inserted by installing Org or when a release is made. - -\(fn)" nil nil) +Inserted by installing Org or when a release is made." nil nil) ;;;*** @@ -24771,9 +24034,7 @@ that code in the early init-file. (autoload 'package-activate-all "package" "\ Activate all installed packages. -The variable `package-load-list' controls which packages to load. - -\(fn)" nil nil) +The variable `package-load-list' controls which packages to load." nil nil) (autoload 'package-import-keyring "package" "\ Import keys from FILE. @@ -24813,9 +24074,7 @@ Specially, if current buffer is a directory, the -pkg.el description file is not mandatory, in which case the information is derived from the main .el file in the directory. -Downloads and installs required packages as needed. - -\(fn)" t nil) +Downloads and installs required packages as needed." t nil) (autoload 'package-install-file "package" "\ Install a package from a file. @@ -24826,9 +24085,7 @@ directory. (autoload 'package-install-selected-packages "package" "\ Ensure packages in `package-selected-packages' are installed. -If some packages are not installed propose to install them. - -\(fn)" t nil) +If some packages are not installed propose to install them." t nil) (autoload 'package-reinstall "package" "\ Reinstall package PKG. @@ -24842,9 +24099,7 @@ Remove packages that are no more needed. Packages that are no more needed by other packages in `package-selected-packages' and their dependencies -will be deleted. - -\(fn)" t nil) +will be deleted." t nil) (autoload 'describe-package "package" "\ Display the full documentation of PACKAGE (a symbol). @@ -24867,9 +24122,7 @@ short description. Return the version number of the package in which this is used. Assumes it is used from an Elisp file placed inside the top-level directory of an installed ELPA package. -The return value is a string (or nil in case we can't find it). - -\(fn)" nil nil) +The return value is a string (or nil in case we can't find it)." nil nil) (function-put 'package-get-version 'pure 't) @@ -25068,10 +24321,7 @@ Emacs Lisp manual for more information and examples. (put 'pcase 'function-documentation '(pcase--make-docstring)) -(autoload 'pcase--make-docstring "pcase" "\ - - -\(fn)" nil nil) +(autoload 'pcase--make-docstring "pcase" nil nil nil) (autoload 'pcase-exhaustive "pcase" "\ The exhaustive version of `pcase' (which see). @@ -25160,9 +24410,7 @@ for the result of evaluating EXP (first arg to `pcase'). ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ -Completion rules for the `cvs' command. - -\(fn)" nil nil) +Completion rules for the `cvs' command." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-cvs" '("pcmpl-cvs-"))) @@ -25172,29 +24420,19 @@ Completion rules for the `cvs' command. ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ -Completion for `gzip'. - -\(fn)" nil nil) +Completion for `gzip'." nil nil) (autoload 'pcomplete/bzip2 "pcmpl-gnu" "\ -Completion for `bzip2'. - -\(fn)" nil nil) +Completion for `bzip2'." nil nil) (autoload 'pcomplete/make "pcmpl-gnu" "\ -Completion for GNU `make'. - -\(fn)" nil nil) +Completion for GNU `make'." nil nil) (autoload 'pcomplete/tar "pcmpl-gnu" "\ -Completion for the GNU tar utility. - -\(fn)" nil nil) +Completion for the GNU tar utility." nil nil) (autoload 'pcomplete/find "pcmpl-gnu" "\ -Completion for the GNU find utility. - -\(fn)" nil nil) +Completion for the GNU find utility." nil nil) (defalias 'pcomplete/gdb 'pcomplete/xargs) @@ -25206,19 +24444,13 @@ Completion for the GNU find utility. ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ -Completion for GNU/Linux `kill', using /proc filesystem. - -\(fn)" nil nil) +Completion for GNU/Linux `kill', using /proc filesystem." nil nil) (autoload 'pcomplete/umount "pcmpl-linux" "\ -Completion for GNU/Linux `umount'. - -\(fn)" nil nil) +Completion for GNU/Linux `umount'." nil nil) (autoload 'pcomplete/mount "pcmpl-linux" "\ -Completion for GNU/Linux `mount'. - -\(fn)" nil nil) +Completion for GNU/Linux `mount'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-linux" '("pcmpl-linux-" "pcomplete-pare-list"))) @@ -25228,9 +24460,7 @@ Completion for GNU/Linux `mount'. ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ -Completion for the `rpm' command. - -\(fn)" nil nil) +Completion for the `rpm' command." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-rpm" '("pcmpl-rpm-"))) @@ -25240,54 +24470,36 @@ Completion for the `rpm' command. ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ -Completion for `cd'. - -\(fn)" nil nil) +Completion for `cd'." nil nil) (defalias 'pcomplete/pushd 'pcomplete/cd) (autoload 'pcomplete/rmdir "pcmpl-unix" "\ -Completion for `rmdir'. - -\(fn)" nil nil) +Completion for `rmdir'." nil nil) (autoload 'pcomplete/rm "pcmpl-unix" "\ -Completion for `rm'. - -\(fn)" nil nil) +Completion for `rm'." nil nil) (autoload 'pcomplete/xargs "pcmpl-unix" "\ -Completion for `xargs'. - -\(fn)" nil nil) +Completion for `xargs'." nil nil) (defalias 'pcomplete/time 'pcomplete/xargs) (autoload 'pcomplete/which "pcmpl-unix" "\ -Completion for `which'. - -\(fn)" nil nil) +Completion for `which'." nil nil) (autoload 'pcomplete/chown "pcmpl-unix" "\ -Completion for the `chown' command. - -\(fn)" nil nil) +Completion for the `chown' command." nil nil) (autoload 'pcomplete/chgrp "pcmpl-unix" "\ -Completion for the `chgrp' command. - -\(fn)" nil nil) +Completion for the `chgrp' command." nil nil) (autoload 'pcomplete/ssh "pcmpl-unix" "\ -Completion rules for the `ssh' command. - -\(fn)" nil nil) +Completion rules for the `ssh' command." nil nil) (autoload 'pcomplete/scp "pcmpl-unix" "\ Completion rules for the `scp' command. -Includes files as well as host names followed by a colon. - -\(fn)" nil nil) +Includes files as well as host names followed by a colon." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-unix" '("pcmpl-"))) @@ -25297,23 +24509,17 @@ Includes files as well as host names followed by a colon. ;;; Generated autoloads from pcmpl-x.el (autoload 'pcomplete/tlmgr "pcmpl-x" "\ -Completion for the `tlmgr' command. - -\(fn)" nil nil) +Completion for the `tlmgr' command." nil nil) (autoload 'pcomplete/ack "pcmpl-x" "\ Completion for the `ack' command. Start an argument with `-' to complete short options and `--' for -long options. - -\(fn)" nil nil) +long options." nil nil) (defalias 'pcomplete/ack-grep 'pcomplete/ack) (autoload 'pcomplete/ag "pcmpl-x" "\ -Completion for the `ag' command. - -\(fn)" nil nil) +Completion for the `ag' command." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-x" '("pcmpl-x-"))) @@ -25330,36 +24536,24 @@ completion functions list (it should occur fairly early in the list). \(fn &optional INTERACTIVELY)" t nil) (autoload 'pcomplete-reverse "pcomplete" "\ -If cycling completion is in use, cycle backwards. - -\(fn)" t nil) +If cycling completion is in use, cycle backwards." t nil) (autoload 'pcomplete-expand-and-complete "pcomplete" "\ Expand the textual value of the current argument. -This will modify the current buffer. - -\(fn)" t nil) +This will modify the current buffer." t nil) (autoload 'pcomplete-continue "pcomplete" "\ -Complete without reference to any cycling completions. - -\(fn)" t nil) +Complete without reference to any cycling completions." t nil) (autoload 'pcomplete-expand "pcomplete" "\ Expand the textual value of the current argument. -This will modify the current buffer. - -\(fn)" t nil) +This will modify the current buffer." t nil) (autoload 'pcomplete-help "pcomplete" "\ -Display any help information relative to the current argument. - -\(fn)" t nil) +Display any help information relative to the current argument." t nil) (autoload 'pcomplete-list "pcomplete" "\ -Show the list of possible completions for the current argument. - -\(fn)" t nil) +Show the list of possible completions for the current argument." t nil) (autoload 'pcomplete-comint-setup "pcomplete" "\ Setup a comint buffer to use pcomplete. @@ -25370,9 +24564,7 @@ this is `comint-dynamic-complete-functions'. \(fn COMPLETEF-SYM)" nil nil) (autoload 'pcomplete-shell-setup "pcomplete" "\ -Setup `shell-mode' to use pcomplete. - -\(fn)" nil nil) +Setup `shell-mode' to use pcomplete." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcomplete" '("pcomplete-"))) @@ -25630,9 +24822,7 @@ by supplying an argument. Entry to this mode calls the value of `picture-mode-hook' if non-nil. Note that Picture mode commands will work outside of Picture mode, but -they are not by default assigned to keys. - -\(fn)" t nil) +they are not by default assigned to keys." t nil) (defalias 'edit-picture 'picture-mode) @@ -25714,9 +24904,7 @@ Move left and right bats and try to bounce the ball to your opponent. pong-mode keybindings:\\ -\\{pong-mode-map} - -\(fn)" t nil) +\\{pong-mode-map}" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pong" '("pong-"))) @@ -25746,9 +24934,7 @@ to make output that `read' can handle, whenever this is possible. \(fn OBJECT)" nil nil) (autoload 'pp-buffer "pp" "\ -Prettify the current buffer with printed representation of a Lisp object. - -\(fn)" nil nil) +Prettify the current buffer with printed representation of a Lisp object." nil nil) (autoload 'pp "pp" "\ Output the pretty-printed representation of OBJECT, any Lisp object. @@ -26010,16 +25196,12 @@ See also documentation for `pr-list-directory'. (autoload 'pr-printify-buffer "printing" "\ Replace nonprinting characters in buffer with printable representations. The printable representations use ^ (for ASCII control characters) or hex. -The characters tab, linefeed, space, return and formfeed are not affected. - -\(fn)" t nil) +The characters tab, linefeed, space, return and formfeed are not affected." t nil) (autoload 'pr-printify-region "printing" "\ Replace nonprinting characters in region with printable representations. The printable representations use ^ (for ASCII control characters) or hex. -The characters tab, linefeed, space, return and formfeed are not affected. - -\(fn)" t nil) +The characters tab, linefeed, space, return and formfeed are not affected." t nil) (autoload 'pr-txt-directory "printing" "\ Print directory using text printer. @@ -26035,19 +25217,13 @@ See also documentation for `pr-list-directory'. \(fn &optional DIR FILE-REGEXP)" t nil) (autoload 'pr-txt-buffer "printing" "\ -Print buffer using text printer. - -\(fn)" t nil) +Print buffer using text printer." t nil) (autoload 'pr-txt-region "printing" "\ -Print region using text printer. - -\(fn)" t nil) +Print region using text printer." t nil) (autoload 'pr-txt-mode "printing" "\ -Print major mode using text printer. - -\(fn)" t nil) +Print major mode using text printer." t nil) (autoload 'pr-despool-preview "printing" "\ Preview spooled PostScript. @@ -26145,9 +25321,7 @@ file name. \(fn N-UP IFILENAME &optional OFILENAME)" t nil) (autoload 'pr-toggle-file-duplex "printing" "\ -Toggle duplex for PostScript file. - -\(fn)" t nil) +Toggle duplex for PostScript file." t nil) (autoload 'pr-toggle-file-tumble "printing" "\ Toggle tumble for PostScript file. @@ -26155,34 +25329,22 @@ Toggle tumble for PostScript file. If tumble is off, produces a printing suitable for binding on the left or right. If tumble is on, produces a printing suitable for binding at the top or -bottom. - -\(fn)" t nil) +bottom." t nil) (autoload 'pr-toggle-file-landscape "printing" "\ -Toggle landscape for PostScript file. - -\(fn)" t nil) +Toggle landscape for PostScript file." t nil) (autoload 'pr-toggle-ghostscript "printing" "\ -Toggle printing using ghostscript. - -\(fn)" t nil) +Toggle printing using ghostscript." t nil) (autoload 'pr-toggle-faces "printing" "\ -Toggle printing with faces. - -\(fn)" t nil) +Toggle printing with faces." t nil) (autoload 'pr-toggle-spool "printing" "\ -Toggle spooling. - -\(fn)" t nil) +Toggle spooling." t nil) (autoload 'pr-toggle-duplex "printing" "\ -Toggle duplex. - -\(fn)" t nil) +Toggle duplex." t nil) (autoload 'pr-toggle-tumble "printing" "\ Toggle tumble. @@ -26190,54 +25352,34 @@ Toggle tumble. If tumble is off, produces a printing suitable for binding on the left or right. If tumble is on, produces a printing suitable for binding at the top or -bottom. - -\(fn)" t nil) +bottom." t nil) (autoload 'pr-toggle-landscape "printing" "\ -Toggle landscape. - -\(fn)" t nil) +Toggle landscape." t nil) (autoload 'pr-toggle-upside-down "printing" "\ -Toggle upside-down. - -\(fn)" t nil) +Toggle upside-down." t nil) (autoload 'pr-toggle-line "printing" "\ -Toggle line number. - -\(fn)" t nil) +Toggle line number." t nil) (autoload 'pr-toggle-zebra "printing" "\ -Toggle zebra stripes. - -\(fn)" t nil) +Toggle zebra stripes." t nil) (autoload 'pr-toggle-header "printing" "\ -Toggle printing header. - -\(fn)" t nil) +Toggle printing header." t nil) (autoload 'pr-toggle-header-frame "printing" "\ -Toggle printing header frame. - -\(fn)" t nil) +Toggle printing header frame." t nil) (autoload 'pr-toggle-lock "printing" "\ -Toggle menu lock. - -\(fn)" t nil) +Toggle menu lock." t nil) (autoload 'pr-toggle-region "printing" "\ -Toggle whether the region is automagically detected. - -\(fn)" t nil) +Toggle whether the region is automagically detected." t nil) (autoload 'pr-toggle-mode "printing" "\ -Toggle auto mode. - -\(fn)" t nil) +Toggle auto mode." t nil) (autoload 'pr-customize "printing" "\ Customization of the `printing' group. @@ -26255,19 +25397,13 @@ Help for the printing package. \(fn &rest IGNORE)" t nil) (autoload 'pr-ps-name "printing" "\ -Interactively select a PostScript printer. - -\(fn)" t nil) +Interactively select a PostScript printer." t nil) (autoload 'pr-txt-name "printing" "\ -Interactively select a text printer. - -\(fn)" t nil) +Interactively select a text printer." t nil) (autoload 'pr-ps-utility "printing" "\ -Interactively select a PostScript utility. - -\(fn)" t nil) +Interactively select a PostScript utility." t nil) (autoload 'pr-show-ps-setup "printing" "\ Show current ps-print settings. @@ -26460,16 +25596,12 @@ pattern to search for. (autoload 'project-find-file "project" "\ Visit a file (with completion) in the current project's roots. The completion default is the filename at point, if one is -recognized. - -\(fn)" t nil) +recognized." t nil) (autoload 'project-or-external-find-file "project" "\ Visit a file (with completion) in the current project's roots or external roots. The completion default is the filename at point, if one is -recognized. - -\(fn)" t nil) +recognized." t nil) (autoload 'project-search "project" "\ Search for REGEXP in all the files of the project. @@ -26627,9 +25759,7 @@ Any other value is treated as t.") (custom-autoload 'ps-print-color-p "ps-print" t) (autoload 'ps-print-customize "ps-print" "\ -Customization of ps-print group. - -\(fn)" t nil) +Customization of ps-print group." t nil) (autoload 'ps-print-buffer "ps-print" "\ Generate and print a PostScript image of the buffer. @@ -26671,9 +25801,7 @@ Generate and spool a PostScript image of the buffer. Like `ps-print-buffer' except that the PostScript image is saved in a local buffer to be sent to the printer later. -Use the command `ps-despool' to send the spooled images to the printer. - -\(fn)" t nil) +Use the command `ps-despool' to send the spooled images to the printer." t nil) (autoload 'ps-spool-buffer-with-faces "ps-print" "\ Generate and spool a PostScript image of the buffer. @@ -26681,9 +25809,7 @@ Like the command `ps-spool-buffer', but includes font, color, and underline information in the generated image. This command works only if you are using a window system, so it has a way to determine color values. -Use the command `ps-despool' to send the spooled images to the printer. - -\(fn)" t nil) +Use the command `ps-despool' to send the spooled images to the printer." t nil) (autoload 'ps-spool-region "ps-print" "\ Generate a PostScript image of the region and spool locally. @@ -26720,9 +25846,7 @@ image in a file with that name. Display the correspondence between a line length and a font size. Done using the current ps-print setup. Try: pr -t file | awk \\='{printf \"%3d %s -\", length($0), $0}\\=' | sort -r | head - -\(fn)" t nil) +\", length($0), $0}\\=' | sort -r | head" t nil) (autoload 'ps-nb-pages-buffer "ps-print" "\ Display number of pages to print this buffer, for various font heights. @@ -26737,9 +25861,7 @@ The table depends on the current ps-print setup. \(fn NB-LINES)" t nil) (autoload 'ps-setup "ps-print" "\ -Return the current PostScript-generation setup. - -\(fn)" nil nil) +Return the current PostScript-generation setup." nil nil) (autoload 'ps-extend-face-list "ps-print" "\ Extend face in ALIST-SYM. @@ -26890,9 +26012,7 @@ them into characters should be done separately. ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ -Return the title of the current Quail package. - -\(fn)" nil nil) +Return the title of the current Quail package." nil nil) (autoload 'quail-use-package "quail" "\ Start using Quail package PACKAGE-NAME. @@ -27276,9 +26396,7 @@ Browse the URL, with `completing-read' prompt, associated with LOOKUP. \(fn LOOKUP)" t nil) (autoload 'quickurl-edit-urls "quickurl" "\ -Pull `quickurl-url-file' into a buffer for hand editing. - -\(fn)" t nil) +Pull `quickurl-url-file' into a buffer for hand editing." t nil) (autoload 'quickurl-list-mode "quickurl" "\ A mode for browsing the quickurl URL list. @@ -27290,9 +26408,7 @@ The key bindings for `quickurl-list-mode' are: \(fn)" t nil) (autoload 'quickurl-list "quickurl" "\ -Display `quickurl-list' as a formatted list using `quickurl-list-mode'. - -\(fn)" t nil) +Display `quickurl-list' as a formatted list using `quickurl-list-mode'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quickurl" '("quickurl-"))) @@ -27362,9 +26478,7 @@ the regexp builder. It displays a buffer named \"*RE-Builder*\" in another window, initially containing an empty regexp. As you edit the regexp in the \"*RE-Builder*\" buffer, the -matching parts of the target buffer will be highlighted. - -\(fn)" t nil) +matching parts of the target buffer will be highlighted." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "re-builder" '("re-builder-unload-function" "reb-"))) @@ -27455,9 +26569,7 @@ Copy the region-rectangle and save it as the last killed one. \(fn START END)" t nil) (autoload 'yank-rectangle "rect" "\ -Yank the last killed rectangle with upper left corner at point. - -\(fn)" t nil) +Yank the last killed rectangle with upper left corner at point." t nil) (autoload 'insert-rectangle "rect" "\ Insert text of RECTANGLE with upper left corner at point. @@ -27599,9 +26711,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. (autoload 'reftex-index-phrases-mode "reftex-index" nil t) (autoload 'turn-on-reftex "reftex" "\ -Turn on RefTeX mode. - -\(fn)" nil nil) +Turn on RefTeX mode." nil nil) (autoload 'reftex-mode "reftex" "\ Minor mode with distinct support for \\label, \\ref and \\cite in LaTeX. @@ -27643,9 +26753,7 @@ on the menu bar. (autoload 'reftex-reset-scanning-information "reftex" "\ Reset the symbols containing information from buffer scanning. -This enforces rescanning the buffer on next use. - -\(fn)" nil nil) +This enforces rescanning the buffer on next use." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex" '("reftex-"))) @@ -27745,6 +26853,9 @@ Each string should be unique in STRINGS and should not contain any regexps, quoted or not. Optional PAREN specifies how the returned regexp is surrounded by grouping constructs. +If STRINGS is the empty list, the return value is a regexp that +never matches anything. + The optional argument PAREN can be any of the following: a string @@ -27766,8 +26877,14 @@ nil necessary to ensure that a postfix operator appended to it will apply to the whole expression. -The resulting regexp is equivalent to but usually more efficient -than that of a simplified version: +The optional argument KEEP-ORDER, if nil or omitted, allows the +returned regexp to match the strings in any order. If non-nil, +the match is guaranteed to be performed in the order given, as if +the strings were made into a regexp by joining them with the +`\\|' operator. + +Up to reordering, the resulting regexp is equivalent to but +usually more efficient than that of a simplified version: (defun simplified-regexp-opt (strings &optional paren) (let ((parens @@ -27776,11 +26893,11 @@ than that of a simplified version: ((eq paren \\='symbols) \\='(\"\\\\_<\\\\(\" . \"\\\\)\\\\_>\")) ((null paren) \\='(\"\\\\(?:\" . \"\\\\)\")) (t \\='(\"\\\\(\" . \"\\\\)\"))))) - (concat (car paren) + (concat (car parens) (mapconcat \\='regexp-quote strings \"\\\\|\") - (cdr paren)))) + (cdr parens)))) -\(fn STRINGS &optional PAREN)" nil nil) +\(fn STRINGS &optional PAREN KEEP-ORDER)" nil nil) (autoload 'regexp-opt-depth "regexp-opt" "\ Return the depth of REGEXP. @@ -27828,14 +26945,10 @@ Call `remember' in another frame. (autoload 'remember-clipboard "remember" "\ Remember the contents of the current clipboard. -Most useful for remembering things from other applications. - -\(fn)" t nil) +Most useful for remembering things from other applications." t nil) (autoload 'remember-diary-extract-entries "remember" "\ -Extract diary entries from the region. - -\(fn)" nil nil) +Extract diary entries from the region." nil nil) (autoload 'remember-notes "remember" "\ Return the notes buffer, creating it if needed, and maybe switch to it. @@ -28285,9 +27398,7 @@ Instead, these commands are available: \\[rmail-summary-by-recipients] Summarize only messages with particular recipient(s). \\[rmail-summary-by-regexp] Summarize only messages with particular regexp(s). \\[rmail-summary-by-topic] Summarize only messages with subject line regexp(s). -\\[rmail-toggle-header] Toggle display of complete header. - -\(fn)" t nil) +\\[rmail-toggle-header] Toggle display of complete header." t nil) (autoload 'rmail-input "rmail" "\ Run Rmail on file FILENAME. @@ -28510,9 +27621,7 @@ Return a pattern. (autoload 'rng-nxml-mode-init "rng-nxml" "\ Initialize `nxml-mode' to take advantage of `rng-validate-mode'. This is typically called from `nxml-mode-hook'. -Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. - -\(fn)" t nil) +Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-nxml" '("rng-"))) @@ -28670,14 +27779,10 @@ To terminate the ROT13 display, delete that window. As long as that window is not deleted, any buffer displayed in it will become instantly encoded in ROT13. -See also `toggle-rot13-mode'. - -\(fn)" t nil) +See also `toggle-rot13-mode'." t nil) (autoload 'toggle-rot13-mode "rot13" "\ -Toggle the use of ROT13 encoding for the current window. - -\(fn)" t nil) +Toggle the use of ROT13 encoding for the current window." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rot13" '("rot13-"))) @@ -30184,9 +29289,7 @@ before you edit the message, so you can edit or delete the lines.") (autoload 'sendmail-query-once "sendmail" "\ Query for `send-mail-function' and send mail with it. -This also saves the value of `send-mail-function' via Customize. - -\(fn)" nil nil) +This also saves the value of `send-mail-function' via Customize." nil nil) (define-mail-user-agent 'sendmail-user-agent 'sendmail-user-agent-compose 'mail-send-and-exit) @@ -30428,9 +29531,7 @@ part): \\{ses-mode-print-map} These are active only in the minibuffer, when entering or editing a formula: -\\{ses-mode-edit-map} - -\(fn)" t nil) +\\{ses-mode-edit-map}" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ses" '("1value" "noreturn" "ses"))) @@ -30640,9 +29741,7 @@ sites in the cluster. Declare a single file to be shared between sites. It may have different filenames on each site. When this file is edited, the new version will be copied to each of the other locations. Sites can be -specific hostnames, or names of clusters (see `shadow-define-cluster'). - -\(fn)" t nil) +specific hostnames, or names of clusters (see `shadow-define-cluster')." t nil) (autoload 'shadow-define-regexp-group "shadowfile" "\ Make each of a group of files be shared between hosts. @@ -30650,14 +29749,10 @@ Prompts for regular expression; files matching this are shared between a list of sites, which are also prompted for. The filenames must be identical on all hosts (if they aren't, use `shadow-define-literal-group' instead of this function). Each site can be either a hostname or the name of a cluster (see -`shadow-define-cluster'). - -\(fn)" t nil) +`shadow-define-cluster')." t nil) (autoload 'shadow-initialize "shadowfile" "\ -Set up file shadowing. - -\(fn)" t nil) +Set up file shadowing." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shadowfile" '("shadow"))) @@ -31004,9 +30099,7 @@ if ARG is `toggle'; disable the mode otherwise. (autoload 'smerge-start-session "smerge-mode" "\ Turn on `smerge-mode' and move point to first conflict marker. -If no conflict maker is found, turn off `smerge-mode'. - -\(fn)" t nil) +If no conflict maker is found, turn off `smerge-mode'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smerge-mode" '("smerge-"))) @@ -31048,15 +30141,10 @@ interactively. If there's no argument, do it at the current buffer. ;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (0 0 0 0)) ;;; Generated autoloads from mail/smtpmail.el -(autoload 'smtpmail-send-it "smtpmail" "\ - - -\(fn)" nil nil) +(autoload 'smtpmail-send-it "smtpmail" nil nil nil) (autoload 'smtpmail-send-queued-mail "smtpmail" "\ -Send mail that was queued as a result of setting `smtpmail-queue-mail'. - -\(fn)" t nil) +Send mail that was queued as a result of setting `smtpmail-queue-mail'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smtpmail" '("smtpmail-"))) @@ -31079,9 +30167,7 @@ Snake mode keybindings: \\[snake-move-left] Makes the snake move left \\[snake-move-right] Makes the snake move right \\[snake-move-up] Makes the snake move up -\\[snake-move-down] Makes the snake move down - -\(fn)" t nil) +\\[snake-move-down] Makes the snake move down" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "snake" '("snake-"))) @@ -31098,9 +30184,7 @@ Comments start with -- and end with newline or another --. Delete converts tabs to spaces as it moves back. \\{snmp-mode-map} Turning on snmp-mode runs the hooks in `snmp-common-mode-hook', then -`snmp-mode-hook'. - -\(fn)" t nil) +`snmp-mode-hook'." t nil) (autoload 'snmpv2-mode "snmp-mode" "\ Major mode for editing SNMPv2 MIBs. @@ -31110,9 +30194,7 @@ Comments start with -- and end with newline or another --. Delete converts tabs to spaces as it moves back. \\{snmp-mode-map} Turning on snmp-mode runs the hooks in `snmp-common-mode-hook', -then `snmpv2-mode-hook'. - -\(fn)" t nil) +then `snmpv2-mode-hook'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "snmp-mode" '("snmp"))) @@ -31465,16 +30547,12 @@ Customize `spam-report-url-ping-function' to use this function. Add spam-report support to the Agent. Spam reports will be queued with \\[spam-report-url-to-file] when the Agent is unplugged, and will be submitted in a batch when the -Agent is plugged. - -\(fn)" t nil) +Agent is plugged." t nil) (autoload 'spam-report-deagentize "spam-report" "\ Remove spam-report support from the Agent. Spam reports will be queued with the method used when -\\[spam-report-agentize] was run. - -\(fn)" t nil) +\\[spam-report-agentize] was run." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spam-report" '("spam-report-"))) @@ -31512,9 +30590,7 @@ supported at a time. (autoload 'speedbar-get-focus "speedbar" "\ Change frame focus to or from the speedbar frame. If the selected frame is not speedbar, then speedbar frame is -selected. If the speedbar frame is active, then select the attached frame. - -\(fn)" t nil) +selected. If the speedbar frame is active, then select the attached frame." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "speedbar" '("speedbar-"))) @@ -31524,14 +30600,10 @@ selected. If the speedbar frame is active, then select the attached frame. ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ -Adds that special touch of class to your outgoing mail. - -\(fn)" t nil) +Adds that special touch of class to your outgoing mail." t nil) (autoload 'snarf-spooks "spook" "\ -Return a vector containing the lines from `spook-phrases-file'. - -\(fn)" nil nil) +Return a vector containing the lines from `spook-phrases-file'." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spook" '("spook-phrase"))) @@ -32280,14 +31352,10 @@ Displays the command which STROKE maps to, reading STROKE interactively. \(fn STROKE)" t nil) (autoload 'strokes-help "strokes" "\ -Get instruction on using the Strokes package. - -\(fn)" t nil) +Get instruction on using the Strokes package." t nil) (autoload 'strokes-load-user-strokes "strokes" "\ -Load user-defined strokes from file named by `strokes-file'. - -\(fn)" t nil) +Load user-defined strokes from file named by `strokes-file'." t nil) (autoload 'strokes-list-strokes "strokes" "\ Pop up a buffer containing an alphabetical listing of strokes in STROKES-MAP. @@ -32338,9 +31406,7 @@ Optional FORCE non-nil will ignore the buffer's read-only status. \(fn &optional BUFFER FORCE)" t nil) (autoload 'strokes-compose-complex-stroke "strokes" "\ -Read a complex stroke and insert its glyph into the current buffer. - -\(fn)" t nil) +Read a complex stroke and insert its glyph into the current buffer." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "strokes" '("strokes-"))) @@ -32360,9 +31426,7 @@ Studlify-case the current word, or COUNT words if given an argument. \(fn COUNT)" t nil) (autoload 'studlify-buffer "studly" "\ -Studlify-case the current buffer. - -\(fn)" t nil) +Studlify-case the current buffer." t nil) ;;;*** @@ -32497,9 +31561,7 @@ original message but it does require a few things: The region need not be active (and typically isn't when this function is called). Also, the hook `sc-pre-hook' is run before, -and `sc-post-hook' is run after the guts of this function. - -\(fn)" nil nil) +and `sc-post-hook' is run after the guts of this function." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "supercite" '("sc-"))) @@ -32739,10 +31801,7 @@ all the table specific features. \(fn &optional ARG)" t nil) -(autoload 'table-unrecognize "table" "\ - - -\(fn)" t nil) +(autoload 'table-unrecognize "table" nil t nil) (autoload 'table-recognize-region "table" "\ Recognize all tables within region. @@ -32766,10 +31825,7 @@ the table specific features. \(fn &optional ARG)" t nil) -(autoload 'table-unrecognize-table "table" "\ - - -\(fn)" t nil) +(autoload 'table-unrecognize-table "table" nil t nil) (autoload 'table-recognize-cell "table" "\ Recognize a table cell that contains current point. @@ -32781,10 +31837,7 @@ plain text and loses all the table specific features. \(fn &optional FORCE NO-COPY ARG)" t nil) -(autoload 'table-unrecognize-cell "table" "\ - - -\(fn)" t nil) +(autoload 'table-unrecognize-cell "table" nil t nil) (autoload 'table-heighten-cell "table" "\ Heighten the current cell by N lines by expanding the cell vertically. @@ -32875,15 +31928,11 @@ DIRECTION is one of symbols; right, left, above or below. (autoload 'table-split-cell-vertically "table" "\ Split current cell vertically. -Creates a cell above and a cell below the current point location. - -\(fn)" t nil) +Creates a cell above and a cell below the current point location." t nil) (autoload 'table-split-cell-horizontally "table" "\ Split current cell horizontally. -Creates a cell on the left and a cell on the right of the current point location. - -\(fn)" t nil) +Creates a cell on the left and a cell on the right of the current point location." t nil) (autoload 'table-split-cell "table" "\ Split current cell in ORIENTATION. @@ -33150,9 +32199,7 @@ companion command to `table-capture' this way. Convert a table into plain text by removing the frame from a table. Remove the frame from a table and deactivate the table. This command converts a table into plain text without frames. It is a companion to -`table-capture' which does the opposite process. - -\(fn)" t nil) +`table-capture' which does the opposite process." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "table" '("*table--" "table-"))) @@ -33174,9 +32221,7 @@ Connect to display DISPLAY for the Emacs talk group. \(fn DISPLAY)" t nil) (autoload 'talk "talk" "\ -Connect to the Emacs talk group from the current X display or tty frame. - -\(fn)" t nil) +Connect to the Emacs talk group from the current X display or tty frame." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "talk" '("talk-"))) @@ -33364,9 +32409,7 @@ If BYTE-COMPILE is non-nil, byte compile each function after instrumenting. \(fn FILENAME &optional BYTE-COMPILE)" t nil) (autoload 'testcover-this-defun "testcover" "\ -Start coverage on function under point. - -\(fn)" t nil) +Start coverage on function under point." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "testcover" '("testcover-"))) @@ -33393,7 +32436,7 @@ tetris-mode keybindings: \\[tetris-rotate-next] Rotates the shape anticlockwise \\[tetris-move-bottom] Drops the shape to the bottom of the playing area -\(fn)" t nil) +" t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tetris" '("tetris-"))) @@ -33548,9 +32591,7 @@ Tries to determine (by looking at the beginning of the file) whether this file is for plain TeX, LaTeX, or SliTeX and calls `plain-tex-mode', `latex-mode', or `slitex-mode', respectively. If it cannot be determined, such as if there are no commands in the file, the value of `tex-default-mode' -says which mode to use. - -\(fn)" t nil) +says which mode to use." t nil) (defalias 'TeX-mode 'tex-mode) @@ -33688,10 +32729,7 @@ Entering SliTeX mode runs the hook `text-mode-hook', then the hook \(fn)" t nil) -(autoload 'tex-start-shell "tex-mode" "\ - - -\(fn)" nil nil) +(autoload 'tex-start-shell "tex-mode" nil nil nil) (autoload 'doctex-mode "tex-mode" "\ Major mode to edit DocTeX files. @@ -33862,9 +32900,7 @@ Compose Thai characters in STRING and return the resulting string. \(fn STRING)" nil nil) (autoload 'thai-compose-buffer "thai-util" "\ -Compose Thai characters in the current buffer. - -\(fn)" t nil) +Compose Thai characters in the current buffer." t nil) (autoload 'thai-composition-function "thai-util" "\ @@ -33926,19 +32962,13 @@ a symbol as a valid THING. \(fn THING &optional NO-PROPERTIES)" nil nil) (autoload 'sexp-at-point "thingatpt" "\ -Return the sexp at point, or nil if none is found. - -\(fn)" nil nil) +Return the sexp at point, or nil if none is found." nil nil) (autoload 'symbol-at-point "thingatpt" "\ -Return the symbol at point, or nil if none is found. - -\(fn)" nil nil) +Return the symbol at point, or nil if none is found." nil nil) (autoload 'number-at-point "thingatpt" "\ -Return the number at point, or nil if none is found. - -\(fn)" nil nil) +Return the number at point, or nil if none is found." nil nil) (autoload 'list-at-point "thingatpt" "\ Return the Lisp list at point, or nil if none is found. @@ -33962,9 +32992,7 @@ An EVENT has the format \(fn EVENT)" t nil) (autoload 'list-threads "thread" "\ -Display a list of threads. - -\(fn)" t nil) +Display a list of threads." t nil) (put 'list-threads 'disabled "Beware: manually canceling threads can ruin your Emacs session.") (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thread" '("thread-list-"))) @@ -33987,21 +33015,15 @@ and SAME-WINDOW to show thumbs in the same window. \(fn DIR &optional REG SAME-WINDOW)" t nil) (autoload 'thumbs-dired-show-marked "thumbs" "\ -In dired, make a thumbs buffer with marked files. - -\(fn)" t nil) +In dired, make a thumbs buffer with marked files." t nil) (autoload 'thumbs-dired-show "thumbs" "\ -In dired, make a thumbs buffer with all files in current directory. - -\(fn)" t nil) +In dired, make a thumbs buffer with all files in current directory." t nil) (defalias 'thumbs 'thumbs-show-from-dir) (autoload 'thumbs-dired-setroot "thumbs" "\ -In dired, call the setroot program on the image at point. - -\(fn)" t nil) +In dired, call the setroot program on the image at point." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thumbs" '("thumbs-"))) @@ -34062,15 +33084,11 @@ are decomposed into normal Tibetan character sequences. (autoload 'tibetan-decompose-buffer "tibet-util" "\ Decomposes Tibetan characters in the buffer into their components. -See also the documentation of the function `tibetan-decompose-region'. - -\(fn)" t nil) +See also the documentation of the function `tibetan-decompose-region'." t nil) (autoload 'tibetan-compose-buffer "tibet-util" "\ Composes Tibetan character components in the buffer. -See also docstring of the function tibetan-compose-region. - -\(fn)" t nil) +See also docstring of the function tibetan-compose-region." t nil) (autoload 'tibetan-post-read-conversion "tibet-util" "\ @@ -34137,9 +33155,7 @@ Otherwise, if `tildify-space-string' variable, remove the hard space and leave only the space character. -This function is meant to be used as a `post-self-insert-hook'. - -\(fn)" t nil) +This function is meant to be used as a `post-self-insert-hook'." t nil) (autoload 'tildify-mode "tildify" "\ Adds electric behavior to space character. @@ -34178,9 +33194,7 @@ Enable display of time, load level, and mail flag in mode lines. This display updates automatically every minute. If `display-time-day-and-date' is non-nil, the current day and date are displayed as well. -This runs the normal hook `display-time-hook' after each update. - -\(fn)" t nil) +This runs the normal hook `display-time-hook' after each update." t nil) (defvar display-time-mode nil "\ Non-nil if Display-Time mode is enabled. @@ -34211,9 +33225,7 @@ runs the normal hook `display-time-hook' after each update. (autoload 'display-time-world "time" "\ Enable updating display of times in various time zones. `display-time-world-list' specifies the zones. -To turn off the world time display, go to that window and type `q'. - -\(fn)" t nil) +To turn off the world time display, go to that window and type `q'." t nil) (autoload 'emacs-uptime "time" "\ Return a string giving the uptime of this instance of Emacs. @@ -34223,9 +33235,7 @@ For example, the Unix uptime command format is \"%D, %z%2h:%.2m\". \(fn &optional FORMAT)" t nil) (autoload 'emacs-init-time "time" "\ -Return a string giving the duration of the Emacs initialization. - -\(fn)" t nil) +Return a string giving the duration of the Emacs initialization." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "time" '("display-time-" "legacy-style-world-list" "time--display-world-list" "zoneinfo-style-world-list"))) @@ -34355,9 +33365,7 @@ The format of the time stamp is set by the variable `time-stamp-pattern' or `time-stamp-format'. The variables `time-stamp-pattern', `time-stamp-line-limit', `time-stamp-start', `time-stamp-end', `time-stamp-count', and `time-stamp-inserts-lines' control finding -the template. - -\(fn)" t nil) +the template." t nil) (autoload 'time-stamp-toggle-active "time-stamp" "\ Toggle `time-stamp-active', setting whether \\[time-stamp] updates a buffer. @@ -34443,15 +33451,11 @@ working on. (autoload 'timeclock-query-out "timeclock" "\ Ask the user whether to clock out. -This is a useful function for adding to `kill-emacs-query-functions'. - -\(fn)" nil nil) +This is a useful function for adding to `kill-emacs-query-functions'." nil nil) (autoload 'timeclock-reread-log "timeclock" "\ Re-read the timeclock, to account for external changes. -Returns the new value of `timeclock-discrepancy'. - -\(fn)" t nil) +Returns the new value of `timeclock-discrepancy'." t nil) (autoload 'timeclock-workday-remaining-string "timeclock" "\ Return a string representing the amount of time left today. @@ -34828,9 +33832,7 @@ Unload Tramp file name handlers from `file-name-handler-alist'." (dolist (fnh fi If non-nil, external packages signal that they are in file name completion.") (autoload 'tramp-unload-tramp "tramp" "\ -Discard Tramp from loading remote files. - -\(fn)" t nil) +Discard Tramp from loading remote files." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp" '("tramp-" "with-"))) @@ -35029,9 +34031,7 @@ Associate another buffer with this one in two-column minor mode. Can also be used to associate a just previously visited file, by accepting the proposed default buffer. -\(See \\[describe-mode] .) - -\(fn)" t nil) +\(See \\[describe-mode] .)" t nil) (autoload '2C-split "two-column" "\ Split a two-column text at point, into two buffers in two-column minor mode. @@ -35155,16 +34155,12 @@ During the break, a demo selected from the functions listed in `type-break-demo-functions' is run. After the typing break is finished, the next break is scheduled -as per the function `type-break-schedule'. - -\(fn)" t nil) +as per the function `type-break-schedule'." t nil) (autoload 'type-break-statistics "type-break" "\ Print statistics about typing breaks in a temporary buffer. This includes the last time a typing break was taken, when the next one is -scheduled, the keystroke thresholds and the current keystroke count, etc. - -\(fn)" t nil) +scheduled, the keystroke thresholds and the current keystroke count, etc." t nil) (autoload 'type-break-guesstimate-keystroke-threshold "type-break" "\ Guess values for the minimum/maximum keystroke threshold for typing breaks. @@ -35314,9 +34310,7 @@ Convert old-style Rmail Babyl files to mbox format. Specify the input Rmail Babyl file names as command line arguments. For each Rmail file, the corresponding output file name is made by adding `.mail' at the end. -For example, invoke `emacs -batch -f batch-unrmail RMAIL'. - -\(fn)" nil nil) +For example, invoke `emacs -batch -f batch-unrmail RMAIL'." nil nil) (autoload 'unrmail "unrmail" "\ Convert old-style Rmail Babyl file FILE to mbox format file TO-FILE. @@ -35896,9 +34890,7 @@ parses to ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ -Setup variables that expose info about you and your system. - -\(fn)" t nil) +Setup variables that expose info about you and your system." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-privacy" '("url-device-type"))) @@ -36360,9 +35352,7 @@ saving the buffer. (autoload 'vc-root-dir "vc" "\ Return the root directory for the current VC tree. -Return nil if the root directory cannot be identified. - -\(fn)" nil nil) +Return nil if the root directory cannot be identified." nil nil) (autoload 'vc-revision-other-window "vc" "\ Visit revision REV of the current file in another window. @@ -36374,9 +35364,7 @@ If `F.~REV~' already exists, use it instead of checking it out again. (autoload 'vc-insert-headers "vc" "\ Insert headers into a file for use with a version control system. Headers desired are inserted at point, and are pulled from -the variable `vc-BACKEND-header'. - -\(fn)" t nil) +the variable `vc-BACKEND-header'." t nil) (autoload 'vc-merge "vc" "\ Perform a version control merge operation. @@ -36390,9 +35378,7 @@ between two revisions into the current fileset. This asks for two revisions to merge from in the minibuffer. If the first revision is a branch number, then merge all changes from that branch. If the first revision is empty, merge the most recent -changes from the current branch. - -\(fn)" t nil) +changes from the current branch." t nil) (autoload 'vc-message-unresolved-conflicts "vc" "\ Display a message indicating unresolved conflicts in FILENAME. @@ -36402,9 +35388,7 @@ Display a message indicating unresolved conflicts in FILENAME. (defalias 'vc-resolve-conflicts 'smerge-ediff) (autoload 'vc-find-conflicted-file "vc" "\ -Visit the next conflicted file in the current project. - -\(fn)" t nil) +Visit the next conflicted file in the current project." t nil) (autoload 'vc-create-tag "vc" "\ Descending recursively from DIR, make a tag called NAME. @@ -36476,9 +35460,7 @@ mark. (autoload 'vc-revert "vc" "\ Revert working copies of the selected fileset to their repository contents. This asks for confirmation if the buffer contents are not identical -to the working revision (except for keyword expansion). - -\(fn)" t nil) +to the working revision (except for keyword expansion)." t nil) (define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1") @@ -37605,9 +36587,7 @@ positions (integers or markers) specifying the stretch of the region. \(fn FROM TO)" t nil) (autoload 'viet-decode-viqr-buffer "viet-util" "\ -Convert `VIQR' mnemonics of the current buffer to Vietnamese characters. - -\(fn)" t nil) +Convert `VIQR' mnemonics of the current buffer to Vietnamese characters." t nil) (autoload 'viet-encode-viqr-region "viet-util" "\ Convert Vietnamese characters of the current region to `VIQR' mnemonics. @@ -37617,9 +36597,7 @@ positions (integers or markers) specifying the stretch of the region. \(fn FROM TO)" t nil) (autoload 'viet-encode-viqr-buffer "viet-util" "\ -Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. - -\(fn)" t nil) +Convert Vietnamese characters of the current buffer to `VIQR' mnemonics." t nil) (autoload 'viqr-post-read-conversion "viet-util" "\ @@ -37887,9 +36865,7 @@ This function runs the normal hook `view-mode-hook'. \(fn &optional QUIT-RESTORE EXIT-ACTION)" nil nil) (autoload 'View-exit-and-edit "view" "\ -Exit View mode and make the current buffer editable. - -\(fn)" t nil) +Exit View mode and make the current buffer editable." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "view" '("View-" "view-"))) @@ -37901,14 +36877,10 @@ Exit View mode and make the current buffer editable. (autoload 'toggle-viper-mode "viper" "\ Toggle Viper on/off. -If Viper is enabled, turn it off. Otherwise, turn it on. - -\(fn)" t nil) +If Viper is enabled, turn it off. Otherwise, turn it on." t nil) (autoload 'viper-mode "viper" "\ -Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. - -\(fn)" t nil) +Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper" '("set-viper-state-in-major-mode" "this-major-mode-requires-vi-state" "viper-"))) @@ -38102,9 +37074,7 @@ buffer, the target of the links, and the permission bits of the files. After typing \\[wdired-finish-edit], Emacs modifies the files and directories to reflect your edits. -See `wdired-mode'. - -\(fn)" t nil) +See `wdired-mode'." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "wdired" '("wdired-"))) @@ -38120,9 +37090,7 @@ See the documentation for the `webjump-sites' variable for how to customize the hotlist. Please submit bug reports and other feedback to the author, Neil W. Van Dyke -. - -\(fn)" t nil) +." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "webjump" '("webjump-"))) @@ -38443,9 +37411,7 @@ The problems cleaned up are: `space-after-tab::space', replace TABs by SPACEs. See `whitespace-style', `indent-tabs-mode' and `tab-width' for -documentation. - -\(fn)" t nil) +documentation." t nil) (autoload 'whitespace-cleanup-region "whitespace" "\ Cleanup some blank problems at region. @@ -38607,9 +37573,7 @@ Recommended as a parent keymap for modes using widgets. Note that such modes will need to require wid-edit.") (autoload 'widget-setup "wid-edit" "\ -Setup current buffer so editing string widgets works. - -\(fn)" nil nil) +Setup current buffer so editing string widgets works." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "wid-edit" '("widget-"))) @@ -38746,24 +37710,16 @@ a single modifier. Default value of PREFIX is `C-x' and MODIFIERS is `shift'. \(fn &optional PREFIX MODIFIERS)" t nil) (autoload 'windmove-swap-states-left "windmove" "\ -Swap the states with the window on the left from the current one. - -\(fn)" t nil) +Swap the states with the window on the left from the current one." t nil) (autoload 'windmove-swap-states-up "windmove" "\ -Swap the states with the window above from the current one. - -\(fn)" t nil) +Swap the states with the window above from the current one." t nil) (autoload 'windmove-swap-states-down "windmove" "\ -Swap the states with the window below from the current one. - -\(fn)" t nil) +Swap the states with the window below from the current one." t nil) (autoload 'windmove-swap-states-right "windmove" "\ -Swap the states with the window on the right from the current one. - -\(fn)" t nil) +Swap the states with the window on the right from the current one." t nil) (autoload 'windmove-swap-states-default-keybindings "windmove" "\ Set up keybindings for directional window swap states. @@ -38839,9 +37795,7 @@ should be a topic string and non-nil RE-CACHE forces re-caching. \(fn &optional TOPIC RE-CACHE)" t nil) (autoload 'woman-dired-find-file "woman" "\ -In dired, run the WoMan man-page browser on this file. - -\(fn)" t nil) +In dired, run the WoMan man-page browser on this file." t nil) (autoload 'woman-find-file "woman" "\ Find, decode and browse a specific UN*X man-page source file FILE-NAME. @@ -38964,20 +37918,13 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0)) ;;; Generated autoloads from progmodes/xref.el -(autoload 'xref-find-backend "xref" "\ - - -\(fn)" nil nil) +(autoload 'xref-find-backend "xref" nil nil nil) (autoload 'xref-pop-marker-stack "xref" "\ -Pop back to where \\[xref-find-definitions] was last invoked. - -\(fn)" t nil) +Pop back to where \\[xref-find-definitions] was last invoked." t nil) (autoload 'xref-marker-stack-empty-p "xref" "\ -Return t if the marker stack is empty; nil otherwise. - -\(fn)" nil nil) +Return t if the marker stack is empty; nil otherwise." nil nil) (autoload 'xref-find-definitions "xref" "\ Find the definition of the identifier at point. @@ -39111,9 +38058,7 @@ Yenc decode region between START and END using an internal decoder. \(fn START END)" t nil) (autoload 'yenc-extract-filename "yenc" "\ -Extract file name from an yenc header. - -\(fn)" nil nil) +Extract file name from an yenc header." nil nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "yenc" '("yenc-"))) @@ -39130,9 +38075,7 @@ Extract file name from an yenc header. ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ -Zone out, completely. - -\(fn)" t nil) +Zone out, completely." t nil) (if (fboundp 'register-definition-prefixes) (register-definition-prefixes "zone" '("zone-"))) @@ -39210,43 +38153,44 @@ Zone out, completely. ;;;;;; "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/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/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" commit 66943d0c9cbb0cca33e1fc88a09af14b6abf45dd Author: Dmitry Gutov Date: Mon Mar 11 02:30:08 2019 +0200 (ruby-add-log-current-method): Recognize methods ending with ? or ! * lisp/progmodes/ruby-mode.el (ruby-add-log-current-method): Recognize method names ending with ? or !. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index e575d6cc16..707875d130 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1614,7 +1614,7 @@ See `add-log-current-defun-function'." (concat "^[ \t]*" re "[ \t]+" "\\(" ;; \\. and :: for class methods - "\\([A-Za-z_]" ruby-symbol-re "*\\|\\.\\|::" "\\)" + "\\([A-Za-z_]" ruby-symbol-re "*[?!]?\\|\\.\\|::" "\\)" "+\\)"))) (definition-re (funcall make-definition-re ruby-defun-beg-re)) (module-re (funcall make-definition-re "\\(class\\|module\\)"))) commit 5aefaf43858412c905dea912ea5ed93d7fe85be8 Author: Dmitry Gutov Date: Mon Mar 11 02:22:54 2019 +0200 project--find-regexp-in-files: Use 'grep -E' * lisp/progmodes/project.el (project--find-regexp-in-files): Use 'grep -E' because we convert the regexp to extended already. diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 533e27be7e..dabc4ab6b4 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -390,7 +390,7 @@ pattern to search for." (status nil) (hits nil) (xrefs nil) - (command (format "xargs -0 grep %s -nHe %s" + (command (format "xargs -0 grep %s -nHE %s" (if (and case-fold-search (isearch-no-upper-case-p regexp t)) "-i" commit cc4cebf5f7f23be26d89ec6cd7890cb5ac36326c Author: Eli Zaretskii Date: Sun Mar 10 20:20:07 2019 +0200 More improvements for 'read-buffer's doc string * src/minibuf.c (Fread_buffer): Further improve the doc string. (Bug#347694) diff --git a/src/minibuf.c b/src/minibuf.c index 216c01a7ad..6964f350ff 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -1111,20 +1111,20 @@ A user option, or customizable variable, is one for which DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 4, 0, doc: /* Read the name of a buffer and return it as a string. -Prompt with PROMPT. +Prompt with PROMPT, which should be a string ending with a colon and a space. +Provides completion on buffer names the user types. Optional second arg DEF is value to return if user enters an empty line, instead of that empty string. If DEF is a list of default values, return its first element. -Optional third arg REQUIRE-MATCH determines whether non-existing - buffer names are allowed. It has the same meaning as the +Optional third arg REQUIRE-MATCH has the same meaning as the REQUIRE-MATCH argument of `completing-read'. -The argument PROMPT should be a string ending with a colon and a space. +Optional arg PREDICATE, if non-nil, is a function limiting the buffers that +can be considered. It will be called with each potential candidate, and +should return non-nil to accept the candidate for completion, nil otherwise. If `read-buffer-completion-ignore-case' is non-nil, completion ignores case while reading the buffer name. If `read-buffer-function' is non-nil, this works by calling it as a -function, instead of the usual behavior. -Optional arg PREDICATE if non-nil is a function limiting the buffers that can -be considered. */) +function, instead of the usual behavior. */) (Lisp_Object prompt, Lisp_Object def, Lisp_Object require_match, Lisp_Object predicate) { commit de0dc6b8bf8607899f6b26ef2fedce4eb444b95a Author: Michael Albinus Date: Sun Mar 10 15:56:24 2019 +0100 Changes in Tramp adb process handling * lisp/net/tramp-adb.el (tramp-methods) : Add `tramp-remote-shell' and `tramp-remote-shell-args'. (tramp-adb-file-name-handler-alist): Use `tramp-handle-shell-command' rather than `tramp-adb-handle-shell-command'. (tramp-adb-handle-shell-command): Remove. (tramp-adb-handle-make-process): Use a proper prompt. (tramp-adb-wait-for-output): Simplify. diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index b40e69ef63..33ff4ccace 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -78,8 +78,11 @@ It is used for TCP/IP devices." (tramp--with-startup (add-to-list 'tramp-methods `(,tramp-adb-method - (tramp-tmpdir "/data/local/tmp") - (tramp-default-port 5555))) + ;; Used in `tramp-handle-shell-command'. + (tramp-remote-shell "/system/bin/sh") + (tramp-remote-shell-args ("-c")) + (tramp-tmpdir "/data/local/tmp") + (tramp-default-port 5555))) (add-to-list 'tramp-default-host-alist `(,tramp-adb-method nil "")) @@ -153,7 +156,7 @@ It is used for TCP/IP devices." (set-file-selinux-context . ignore) (set-file-times . tramp-adb-handle-set-file-times) (set-visited-file-modtime . tramp-handle-set-visited-file-modtime) - (shell-command . tramp-adb-handle-shell-command) + (shell-command . tramp-handle-shell-command) (start-file-process . tramp-handle-start-file-process) (substitute-in-file-name . tramp-handle-substitute-in-file-name) (temporary-file-directory . tramp-handle-temporary-file-directory) @@ -922,80 +925,6 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (keyboard-quit) ret)))) -(defun tramp-adb-handle-shell-command - (command &optional output-buffer error-buffer) - "Like `shell-command' for Tramp files." - (let* ((asynchronous (string-match-p "[ \t]*&[ \t]*\\'" command)) - ;; We cannot use `shell-file-name' and `shell-command-switch', - ;; they are variables of the local host. - (args (list "sh" "-c" (substring command 0 asynchronous))) - current-buffer-p - (output-buffer - (cond - ((bufferp output-buffer) output-buffer) - ((stringp output-buffer) (get-buffer-create output-buffer)) - (output-buffer - (setq current-buffer-p t) - (current-buffer)) - (t (get-buffer-create - (if asynchronous - "*Async Shell Command*" - "*Shell Command Output*"))))) - (error-buffer - (cond - ((bufferp error-buffer) error-buffer) - ((stringp error-buffer) (get-buffer-create error-buffer)))) - (buffer - (if (and (not asynchronous) error-buffer) - (with-parsed-tramp-file-name default-directory nil - (list output-buffer (tramp-make-tramp-temp-file v))) - output-buffer)) - (p (get-buffer-process output-buffer))) - - ;; Check whether there is another process running. Tramp does not - ;; support 2 (asynchronous) processes in parallel. - (when p - (if (yes-or-no-p "A command is running. Kill it? ") - (ignore-errors (kill-process p)) - (tramp-user-error p "Shell command in progress"))) - - (if current-buffer-p - (progn - (barf-if-buffer-read-only) - (push-mark nil t)) - (with-current-buffer output-buffer - (setq buffer-read-only nil) - (erase-buffer))) - - (if (and (not current-buffer-p) (integerp asynchronous)) - (prog1 - ;; Run the process. - (apply #'start-file-process "*Async Shell*" buffer args) - ;; Display output. - (pop-to-buffer output-buffer) - (setq mode-line-process '(":%s")) - (shell-mode)) - - (prog1 - ;; Run the process. - (apply #'process-file (car args) nil buffer nil (cdr args)) - ;; Insert error messages if they were separated. - (when (listp buffer) - (with-current-buffer error-buffer - (insert-file-contents (cadr buffer))) - (delete-file (cadr buffer))) - (if current-buffer-p - ;; This is like exchange-point-and-mark, but doesn't - ;; activate the mark. It is cleaner to avoid activation, - ;; even though the command loop would deactivate the mark - ;; because we inserted text. - (goto-char (prog1 (mark t) - (set-marker (mark-marker) (point) - (current-buffer)))) - ;; There's some output, display it. - (when (with-current-buffer output-buffer (> (point-max) (point-min))) - (display-message-or-buffer output-buffer))))))) - ;; We use BUFFER also as connection buffer during setup. Because of ;; this, its original contents must be saved, and restored once ;; connection has been setup. @@ -1085,9 +1014,13 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (delete-region mark (point)) (narrow-to-region (point-max) (point-max)) ;; Send the command. - (let ((tramp-adb-prompt (regexp-quote command))) - (tramp-adb-send-command v command)) - (let ((p (tramp-get-connection-process v))) + (let* ((p (tramp-get-connection-process v)) + (prompt + (tramp-get-connection-property p "prompt" nil))) + (tramp-set-connection-property + p "prompt" (regexp-quote command)) + (tramp-adb-send-command v command) + (tramp-set-connection-property p "prompt" prompt) ;; Stop process if indicated. (when stop (stop-process p)) @@ -1239,37 +1172,29 @@ FMT and ARGS are passed to `error'." (unless (buffer-live-p (process-buffer proc)) (delete-process proc) (tramp-error proc 'file-error "Process `%s' not available, try again" proc)) - (with-current-buffer (process-buffer proc) - (if (tramp-wait-for-regexp - proc timeout - (tramp-get-connection-property proc "prompt" tramp-adb-prompt)) - (let ((inhibit-read-only t)) - (goto-char (point-min)) - ;; ADB terminal sends "^H" sequences. - (when (re-search-forward "<\b+" (point-at-eol) t) - (forward-line 1) - (delete-region (point-min) (point))) - ;; Delete the prompt. - (goto-char (point-min)) - (when (re-search-forward - (tramp-get-connection-property proc "prompt" tramp-adb-prompt) - (point-at-eol) t) - (forward-line 1) - (delete-region (point-min) (point))) - (goto-char (point-max)) - (re-search-backward - (tramp-get-connection-property proc "prompt" tramp-adb-prompt) nil t) - (delete-region (point) (point-max))) - (if timeout + (let ((prompt (tramp-get-connection-property proc "prompt" tramp-adb-prompt))) + (with-current-buffer (process-buffer proc) + (if (tramp-wait-for-regexp proc timeout prompt) + (let ((inhibit-read-only t)) + (goto-char (point-min)) + ;; ADB terminal sends "^H" sequences. + (when (re-search-forward "<\b+" (point-at-eol) t) + (forward-line 1) + (delete-region (point-min) (point))) + ;; Delete the prompt. + (goto-char (point-min)) + (when (re-search-forward prompt (point-at-eol) t) + (forward-line 1) + (delete-region (point-min) (point))) + (goto-char (point-max)) + (re-search-backward prompt nil t) + (delete-region (point) (point-max))) + (if timeout + (tramp-error + proc 'file-error + "[[Remote prompt `%s' not found in %d secs]]" prompt timeout) (tramp-error - proc 'file-error - "[[Remote adb prompt `%s' not found in %d secs]]" - (tramp-get-connection-property proc "prompt" tramp-adb-prompt) - timeout) - (tramp-error - proc 'file-error - "[[Remote prompt `%s' not found]]" - (tramp-get-connection-property proc "prompt" tramp-adb-prompt)))))) + proc 'file-error "[[Remote prompt `%s' not found]]" prompt)))))) (defun tramp-adb-maybe-open-connection (vec) "Maybe open a connection VEC. commit d6826546c4703d3a459dbf5f1f9453793e96a008 Author: Ken Brown Date: Sat Mar 9 17:06:54 2019 -0500 Use a runtime test for timerfd on Cygwin (Bug#34618) * src/atimer.c [HAVE_TIMERFD] (have_buggy_timerfd): New function. (init_atimer) Use it. diff --git a/src/atimer.c b/src/atimer.c index d36c4f1f5a..8387b8aa0e 100644 --- a/src/atimer.c +++ b/src/atimer.c @@ -28,7 +28,10 @@ along with GNU Emacs. If not, see . */ #ifdef HAVE_TIMERFD #include -# include +#include +# ifdef CYGWIN +# include +# endif #endif #ifdef MSDOS @@ -557,13 +560,28 @@ Return t if all self-tests are passed, nil otherwise. */) #endif /* ENABLE_CHECKING */ +/* Cygwin has the timerfd interface starting with release 3.0.0, but + it is buggy until release 3.0.2. */ +#ifdef HAVE_TIMERFD +static bool +have_buggy_timerfd (void) +{ +# ifdef CYGWIN + struct utsname name; + return uname (&name) < 0 || strverscmp (name.release, "3.0.2") < 0; +# else + return false; +# endif +} +#endif + void init_atimer (void) { #ifdef HAVE_ITIMERSPEC # ifdef HAVE_TIMERFD /* Until this feature is considered stable, you can ask to not use it. */ - timerfd = (egetenv ("EMACS_IGNORE_TIMERFD") ? -1 : + timerfd = (egetenv ("EMACS_IGNORE_TIMERFD") || have_buggy_timerfd () ? -1 : timerfd_create (CLOCK_REALTIME, TFD_NONBLOCK | TFD_CLOEXEC)); # endif if (timerfd < 0) commit d026d9ad999028c034d69f2477495c6c3e193fc9 Author: Alan Mackenzie Date: Sun Mar 10 14:27:38 2019 +0000 * lisp/progmodes/cc-defs.el: Update c-version to 5.33.2 for Emacs 26.2 diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el index a06de49bd3..40318b149d 100644 --- a/lisp/progmodes/cc-defs.el +++ b/lisp/progmodes/cc-defs.el @@ -87,7 +87,7 @@ ;;; Variables also used at compile time. -(defconst c-version "5.33.1" +(defconst c-version "5.33.2" "CC Mode version number.") (defconst c-version-sym (intern c-version)) commit e70a65d403a67c25b17229bce8f173f0ab1b2f74 Author: Stefan Monnier Date: Sun Mar 10 03:54:46 2019 -0400 * lisp/speedbar.el: Minor tweaks (speedbar-directory-buttons-follow): Use file-name-as-directory. (speedbar-ignored-directory-expressions) (speedbar-supported-extension-expressions): Use `sym` in the setter. (speedbar-frame-mode): Use with-current-buffer. (speedbar-item-info-tag-helper): Use 'cond'. (speedbar-highlight-one-tag-line): Don't use position beyond EOB. diff --git a/lisp/speedbar.el b/lisp/speedbar.el index a7fd564e94..399ef4557b 100644 --- a/lisp/speedbar.el +++ b/lisp/speedbar.el @@ -647,9 +647,9 @@ speedbar is loaded. You may place anything you like in this list before speedbar has been loaded." :group 'speedbar :type '(repeat (regexp :tag "Directory Regexp")) - :set (lambda (_sym val) - (setq speedbar-ignored-directory-expressions val - speedbar-ignored-directory-regexp + :set (lambda (sym val) + (set sym val) + (setq speedbar-ignored-directory-regexp (speedbar-extension-list-to-regex val)))) (defcustom speedbar-directory-unshown-regexp "^\\(\\..*\\)\\'" @@ -701,9 +701,9 @@ need to also modify `completion-ignored-extension' which will also help file completion." :group 'speedbar :type '(repeat (regexp :tag "Extension Regexp")) - :set (lambda (_sym val) - (set 'speedbar-supported-extension-expressions val) - (set 'speedbar-file-regexp (speedbar-extension-list-to-regex val)))) + :set (lambda (sym val) + (set sym val) + (setq speedbar-file-regexp (speedbar-extension-list-to-regex val)))) (setq speedbar-file-regexp (speedbar-extension-list-to-regex speedbar-supported-extension-expressions)) @@ -972,9 +972,8 @@ supported at a time. (interactive "P") ;; Get the buffer to play with (if (not (buffer-live-p speedbar-buffer)) - (save-excursion - (setq speedbar-buffer (get-buffer-create " SPEEDBAR")) - (set-buffer speedbar-buffer) + (with-current-buffer + (setq speedbar-buffer (get-buffer-create " SPEEDBAR")) (speedbar-mode))) ;; Do the frame thing (dframe-frame-mode arg @@ -1476,57 +1475,59 @@ instead of reading it from the speedbar buffer." Return nil if not applicable." (save-excursion (beginning-of-line) - (if (re-search-forward " [-+=]?> \\([^\n]+\\)" (line-end-position) t) - (let* ((tag (match-string 1)) - (attr (speedbar-line-token)) - (item nil) - (semantic-tagged (if (fboundp 'semantic-tag-p) - (semantic-tag-p attr)))) - (if semantic-tagged - (with-no-warnings - (save-excursion - (when (and (semantic-tag-overlay attr) - (semantic-tag-buffer attr)) - (set-buffer (semantic-tag-buffer attr))) - (dframe-message - (funcall semantic-sb-info-format-tag-function attr) - ))) - (looking-at "\\([0-9]+\\):") - (setq item (file-name-nondirectory (speedbar-line-directory))) - (dframe-message "Tag: %s in %s" tag item))) - (if (re-search-forward "{[+-]} \\([^\n]+\\)$" (line-end-position) t) - (dframe-message "Group of tags \"%s\"" (match-string 1)) - (if (re-search-forward " [+-]?[()|@] \\([^\n]+\\)$" nil t) - (let* ((detailtext (match-string 1)) - (detail (or (speedbar-line-token) detailtext)) - (parent (save-excursion - (beginning-of-line) - (let ((dep (if (looking-at "[0-9]+:") - (1- (string-to-number (match-string 0))) - 0))) - (re-search-backward (concat "^" - (int-to-string dep) - ":") - nil t)) - (if (looking-at "[0-9]+: +[-+=>]> \\([^\n]+\\)$") - (speedbar-line-token) - nil)))) - (if (featurep 'semantic) - (with-no-warnings - (if (semantic-tag-p detail) - (dframe-message - (funcall semantic-sb-info-format-tag-function detail parent)) - (if parent - (dframe-message "Detail: %s of tag %s" detail - (if (semantic-tag-p parent) - (semantic-format-tag-name parent nil t) - parent)) - (dframe-message "Detail: %s" detail)))) - ;; Not using `semantic': - (if parent - (dframe-message "Detail: %s of tag %s" detail parent) - (dframe-message "Detail: %s" detail)))) - nil))))) + (cond + ((re-search-forward " [-+=]?> \\([^\n]+\\)" (line-end-position) t) + (let* ((tag (match-string 1)) + (attr (speedbar-line-token)) + (item nil) + (semantic-tagged (if (fboundp 'semantic-tag-p) + (semantic-tag-p attr)))) + (if semantic-tagged + (with-no-warnings + (save-excursion + (when (and (semantic-tag-overlay attr) + (semantic-tag-buffer attr)) + (set-buffer (semantic-tag-buffer attr))) + (dframe-message + (funcall semantic-sb-info-format-tag-function attr) + ))) + (looking-at "\\([0-9]+\\):") + (setq item (file-name-nondirectory (speedbar-line-directory))) + (dframe-message "Tag: %s in %s" tag item)))) + ((re-search-forward "{[+-]} \\([^\n]+\\)$" (line-end-position) t) + (dframe-message "Group of tags \"%s\"" (match-string 1))) + ((re-search-forward " [+-]?[()|@] \\([^\n]+\\)$" nil t) + (let* ((detailtext (match-string 1)) + (detail (or (speedbar-line-token) detailtext)) + (parent (save-excursion + (beginning-of-line) + (let ((dep (if (looking-at "[0-9]+:") + (1- (string-to-number (match-string 0))) + 0))) + (re-search-backward (concat "^" + (int-to-string dep) + ":") + nil t)) + (if (looking-at "[0-9]+: +[-+=>]> \\([^\n]+\\)$") + (speedbar-line-token) + nil)))) + (cond + ((featurep 'semantic) + (with-no-warnings + (if (semantic-tag-p detail) + (dframe-message + (funcall semantic-sb-info-format-tag-function detail parent)) + (if parent + (dframe-message "Detail: %s of tag %s" detail + (if (semantic-tag-p parent) + (semantic-format-tag-name parent nil t) + parent)) + (dframe-message "Detail: %s" detail))))) + ;; Not using `semantic': + (parent + (dframe-message "Detail: %s of tag %s" detail parent)) + (t + (dframe-message "Detail: %s" detail)))))))) (defun speedbar-files-item-info () "Display info in the minibuffer about the button the mouse is over." @@ -3388,9 +3389,7 @@ expanded. INDENT is the current indentation level." "Speedbar click handler for default directory buttons. TEXT is the button clicked on. TOKEN is the directory to follow. INDENT is the current indentation level and is unused." - (if (string-match "^[A-Za-z]:$" token) - (setq default-directory (concat token "/")) - (setq default-directory token)) + (setq default-directory (file-name-as-directory token)) ;; Because we leave speedbar as the current buffer, ;; update contents will change directory without ;; having to touch the attached frame. @@ -3964,7 +3963,7 @@ TEXT is the buffer's name, TOKEN and INDENT are unused." (speedbar-unhighlight-one-tag-line) (setq speedbar-highlight-one-tag-line (speedbar-make-overlay (line-beginning-position) - (1+ (line-end-position)))) + (line-beginning-position 2))) (speedbar-overlay-put speedbar-highlight-one-tag-line 'face 'speedbar-highlight-face) (add-hook 'pre-command-hook 'speedbar-unhighlight-one-tag-line)) commit affd2a0cee901404251ea1d2ef01bfb618f5213a Author: Tassilo Horn Date: Sat Mar 9 22:05:38 2019 +0100 Make doc-view work with text-mode as default major-mode (bug#34451) * lisp/doc-view.el (doc-view--text-view-mode): New alias for view-mode. (doc-view-open-text): Use it. (doc-view-toggle-display): Use it. diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 7ae7c6a96c..53ae351abd 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -1476,6 +1476,15 @@ For now these keys are useful: (interactive) (tooltip-show (doc-view-current-info))) +;; We define an own major mode for DocView's text display so that we +;; can easily distinguish when we want to toggle back because +;; text-mode is a likely candidate for a default major-mode +;; (bug#34451). +(defun doc-view--text-view-mode () + "View mode used in DocView's text buffers." + (view-mode) + (setq major-mode 'doc-view--text-view-mode)) + (defun doc-view-open-text () "Display the current doc's contents as text." (interactive) @@ -1489,13 +1498,13 @@ For now these keys are useful: (erase-buffer) (set-buffer-multibyte t) (insert-file-contents txt) - (text-mode) + (doc-view--text-view-mode) (setq-local doc-view--buffer-file-name dv-bfn) (set-buffer-modified-p nil) (doc-view-minor-mode) (add-hook 'write-file-functions (lambda () - (when (eq major-mode 'text-mode) + (when (eq major-mode 'doc-view--text-view-mode) (error "Cannot save text contents of document %s" buffer-file-name))) nil t)) @@ -1519,7 +1528,7 @@ For now these keys are useful: ;; normal mode. (doc-view-fallback-mode) (doc-view-minor-mode 1)) - ((eq major-mode 'text-mode) + ((eq major-mode 'doc-view--text-view-mode) (let ((buffer-undo-list t)) ;; We're currently viewing the document's text contents, so switch ;; back to . commit dfc805532d77a3553a2eb6cb7035a041a8db848d Author: Christopher Wellons Date: Sat Mar 9 15:49:49 2019 -0500 * list/emulation/viper: Use user-error for "Viper bell" Copyright-paperwork-exempt: yes * lisp/emulation/viper-init.el (viper-ViperBell): New constant. * lisp/emulation/viper-cmd.el (viper-prefix-arg-com) (viper-forward-char, viper-backward-char, viper-goto-col) (viper-find-char, viper-paren-match, viper-put-back, viper-Put-back) (viper-delete-char, viper-mark-point, viper-goto-mark-subr): * lisp/emulation/viper-ex.el (ex-delete): Use it and `user-error`. diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el index f041f25ae9..f52ce72a6d 100644 --- a/lisp/emulation/viper-cmd.el +++ b/lisp/emulation/viper-cmd.el @@ -1124,7 +1124,7 @@ as a Meta key and any number of multiple escapes are allowed." ;; it is an error. (progn ;; new com is (CHAR . OLDCOM) - (if (viper-memq-char char '(?# ?\")) (error "Viper bell")) + (if (viper-memq-char char '(?# ?\")) (user-error viper-ViperBell)) (setq com (cons char com)) (setq cont nil)) ;; If com is nil we set com as char, and read more. Again, if char is @@ -1143,7 +1143,7 @@ as a Meta key and any number of multiple escapes are allowed." (let ((reg (read-char))) (if (viper-valid-register reg) (setq viper-use-register reg) - (error "Viper bell")) + (user-error viper-ViperBell)) (setq char (read-char)))) (t (setq com char) @@ -1165,7 +1165,7 @@ as a Meta key and any number of multiple escapes are allowed." (viper-regsuffix-command-p char) (viper= char ?!) ; bang command (viper= char ?g) ; the gg command (like G0) - (error "Viper bell")) + (user-error viper-ViperBell)) (setq cmd-to-exec-at-end (viper-exec-form-in-vi `(key-binding (char-to-string ,char))))) @@ -1199,7 +1199,7 @@ as a Meta key and any number of multiple escapes are allowed." ((equal com '(?= . ?=)) (viper-line (cons value ?=))) ;; gg acts as G0 ((equal (car com) ?g) (viper-goto-line 0)) - (t (error "Viper bell"))))) + (t (user-error viper-ViperBell))))) (if cmd-to-exec-at-end (progn @@ -2609,9 +2609,9 @@ On reaching end of line, stop and signal error." ;; the forward motion before the 'viper-execute-com', but, of ;; course, 'dl' doesn't work on an empty line, so we have to ;; catch that condition before 'viper-execute-com' - (if (and (eolp) (bolp)) (error "Viper bell") (forward-char val)) + (if (and (eolp) (bolp)) (user-error viper-ViperBell) (forward-char val)) (if com (viper-execute-com 'viper-forward-char val com)) - (if (eolp) (progn (backward-char 1) (error "Viper bell")))) + (if (eolp) (progn (backward-char 1) (user-error viper-ViperBell)))) (forward-char val) (if com (viper-execute-com 'viper-forward-char val com))))) @@ -2626,7 +2626,7 @@ On reaching beginning of line, stop and signal error." (if com (viper-move-marker-locally 'viper-com-point (point))) (if viper-ex-style-motion (progn - (if (bolp) (error "Viper bell") (backward-char val)) + (if (bolp) (user-error viper-ViperBell) (backward-char val)) (if com (viper-execute-com 'viper-backward-char val com))) (backward-char val) (if com (viper-execute-com 'viper-backward-char val com))))) @@ -2953,7 +2953,7 @@ On reaching beginning of line, stop and signal error." (if com (viper-execute-com 'viper-goto-col val com)) (save-excursion (end-of-line) - (if (> val (current-column)) (error "Viper bell"))) + (if (> val (current-column)) (user-error viper-ViperBell))) )) @@ -3084,7 +3084,7 @@ If point is on a widget or a button, simulate clicking on that widget/button." ;; If FORWARD then search is forward, otherwise backward. OFFSET is used to ;; adjust point after search. (defun viper-find-char (arg char forward offset) - (or (char-or-string-p char) (error "Viper bell")) + (or (char-or-string-p char) (user-error viper-ViperBell)) (let ((arg (if forward arg (- arg))) (cmd (if (eq viper-intermediate-command 'viper-repeat) (nth 5 viper-d-com) @@ -3424,7 +3424,7 @@ controlled by the sign of prefix numeric value." (if com (viper-move-marker-locally 'viper-com-point (point))) (backward-sexp 1) (if com (viper-execute-com 'viper-paren-match nil com))) - (t (error "Viper bell")))))) + (t (user-error viper-ViperBell)))))) (defun viper-toggle-parse-sexp-ignore-comments () (interactive) @@ -4001,7 +4001,7 @@ Null string will repeat previous search." (let ((reg viper-use-register)) (setq viper-use-register nil) (error viper-EmptyRegister reg)) - (error "Viper bell"))) + (user-error viper-ViperBell))) (setq viper-use-register nil) (if (viper-end-with-a-newline-p text) (progn @@ -4051,7 +4051,7 @@ Null string will repeat previous search." (let ((reg viper-use-register)) (setq viper-use-register nil) (error viper-EmptyRegister reg)) - (error "Viper bell"))) + (user-error viper-ViperBell))) (setq viper-use-register nil) (if (viper-end-with-a-newline-p text) (beginning-of-line)) (viper-set-destructive-command @@ -4096,7 +4096,7 @@ Null string will repeat previous search." (> val (viper-chars-in-region (point) (viper-line-pos 'end)))) (setq val (viper-chars-in-region (point) (viper-line-pos 'end)))) (if (and viper-ex-style-motion (eolp)) - (if (bolp) (error "Viper bell") (setq val 0))) ; not bol---simply back 1 ch + (if (bolp) (user-error viper-ViperBell) (setq val 0))) ; not bol---simply back 1 ch (save-excursion (viper-forward-char-carefully val) (setq end-del-pos (point))) @@ -4366,7 +4366,7 @@ and regexp replace." ((viper= char ?,) (viper-cycle-through-mark-ring)) ((viper= char ?^) (push-mark viper-saved-mark t t)) ((viper= char ?D) (mark-defun)) - (t (error "Viper bell")) + (t (user-error viper-ViperBell)) ))) ;; Algorithm: If first invocation of this command save mark on ring, goto @@ -4465,7 +4465,7 @@ One can use \\=`\\=` and \\='\\=' to temporarily jump 1 step back." (switch-to-buffer buff) (goto-char viper-com-point) (viper-change-state-to-vi) - (error "Viper bell"))))) + (user-error viper-ViperBell))))) ((and (not skip-white) (viper= char ?`)) (if com (viper-move-marker-locally 'viper-com-point (point))) (if (and (viper-same-line (point) viper-last-jump) diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el index 4496f1cf7d..f5090573c8 100644 --- a/lisp/emulation/viper-ex.el +++ b/lisp/emulation/viper-ex.el @@ -1240,7 +1240,7 @@ reversed." (read-string "[Hit return to confirm] ") (quit (save-excursion (kill-buffer " *delete text*")) - (error "Viper bell"))) + (user-error viper-ViperBell))) (save-excursion (kill-buffer " *delete text*"))) (if ex-buffer (cond ((viper-valid-register ex-buffer '(Letter)) diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el index 0ad9a7a373..5a80804e75 100644 --- a/lisp/emulation/viper-init.el +++ b/lisp/emulation/viper-init.el @@ -268,6 +268,7 @@ that deletes a file.") (defconst viper-BadAddress "Ill-formed address" "") (defconst viper-FirstAddrExceedsSecond "First address exceeds second" "") (defconst viper-NoFileSpecified "No file specified" "") +(defconst viper-ViperBell "Viper bell" "") ;; Is t until viper-mode executes for the very first time. ;; Prevents recursive descend into startup messages. commit 7073db2b64726e4970e5a62bad01c49b68582178 Author: Tassilo Horn Date: Sat Mar 9 21:27:24 2019 +0100 Name buffer according to attachment filename (bug#34478). * lisp/gnus/mm-decode.el (mm-display-external): Name buffer showing the attachment according to the attachment's filename, i.e. "*mm* " instead of " *mm*12345". diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 2a769fccf5..b689b51d6a 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -890,6 +890,7 @@ external if displayed external." (when method (message "Viewing with %s" method)) (let ((mm (current-buffer)) + (attachment-filename (mm-handle-filename handle)) (non-viewer (assq 'non-viewer (mailcap-mime-info (mm-handle-media-type handle) t)))) @@ -899,6 +900,9 @@ external if displayed external." (when (and (boundp 'gnus-summary-buffer) (bufferp gnus-summary-buffer) (buffer-name gnus-summary-buffer)) + (when attachment-filename + (with-current-buffer mm + (rename-buffer (format "*mm* %s" attachment-filename) t))) ;; So that we pop back to the right place, sort of. (switch-to-buffer gnus-summary-buffer) (switch-to-buffer mm)) commit 466466db76f7ee1a97b7d929743288a21236783c Author: Ken Brown Date: Sat Mar 9 14:22:54 2019 -0500 Re-enable the timerfd interface on Cygwin * configure.ac (emacs_cv_have_timerfd): No longer set this to "no" on Cygwin. (Bug#34618) diff --git a/configure.ac b/configure.ac index cc2a597010..110ea2909a 100644 --- a/configure.ac +++ b/configure.ac @@ -4294,10 +4294,6 @@ AC_SUBST(LIBS_TERMCAP) AC_SUBST(TERMCAP_OBJ) # GNU/Linux-specific timer functions. -# Bug#34618. -if test "$opsys" = "cygwin"; then - emacs_cv_have_timerfd=no -fi AC_CACHE_CHECK([for timerfd interface], [emacs_cv_have_timerfd], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include commit 5625eb7c245b8cfc5a8631316c11fe56453ce874 Author: Eli Zaretskii Date: Sat Mar 9 20:58:56 2019 +0200 ; * src/editfns.c (Fformat): Fix last change. (Bug#34792) diff --git a/src/editfns.c b/src/editfns.c index af39d358bd..f5a9e0a640 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -2989,10 +2989,8 @@ the next available argument, or the argument explicitly specified: %s means print a string argument. Actually, prints any object, with `princ'. %d means print as signed number in decimal. -%o means print a number in octal. The value of `binary-as-unsigned' - determines whether it's printed as signed or unsigned. -%x means print a number in hex. The value of `binary-as-unsigned' - determines whether it's printed as signed or unsigned. +%o means print a number in octal. +%x means print a number in hex. %X is like %x, but uses upper case. %e means print a number in exponential notation. %f means print a number in decimal-point notation. @@ -3003,6 +3001,8 @@ the next available argument, or the argument explicitly specified: %S means print any object as an s-expression (using `prin1'). The argument used for %d, %o, %x, %e, %f, %g or %c must be a number. +The value of `binary-as-unsigned' determines whether it's printed as + signed or unsigned by %o, %x, and %X. Use %% to put a single % into the output. A %-sequence other than %% may contain optional field number, flag, commit a4fa053f0e65bec2c5aa1e10a758cb4cc012921f Author: Ivan Andrus Date: Sat Mar 9 11:03:05 2019 -0700 Mention `binary-as-unsigned' in `format' docstring (Bug#34792) * src/src/editfns.c (format): Update docstring to mention binary-as-unsigned (Bug#34792) diff --git a/src/editfns.c b/src/editfns.c index bffb5db43e..af39d358bd 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -2989,8 +2989,10 @@ the next available argument, or the argument explicitly specified: %s means print a string argument. Actually, prints any object, with `princ'. %d means print as signed number in decimal. -%o means print as unsigned number in octal. -%x means print as unsigned number in hex. +%o means print a number in octal. The value of `binary-as-unsigned' + determines whether it's printed as signed or unsigned. +%x means print a number in hex. The value of `binary-as-unsigned' + determines whether it's printed as signed or unsigned. %X is like %x, but uses upper case. %e means print a number in exponential notation. %f means print a number in decimal-point notation. commit 5dbf08bf45c525696c23c1d6ea6696b551e13515 Author: Eli Zaretskii Date: Sat Mar 9 20:20:47 2019 +0200 * src/minibuf.c (Fread_buffer): Minor doc fixes. (Bug#34749) diff --git a/src/minibuf.c b/src/minibuf.c index e3510105d0..216c01a7ad 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -1110,9 +1110,10 @@ A user option, or customizable variable, is one for which } DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 4, 0, - doc: /* Read the name of a buffer and return as a string. + doc: /* Read the name of a buffer and return it as a string. Prompt with PROMPT. -Optional second arg DEF is value to return if user enters an empty line. +Optional second arg DEF is value to return if user enters an empty line, + instead of that empty string. If DEF is a list of default values, return its first element. Optional third arg REQUIRE-MATCH determines whether non-existing buffer names are allowed. It has the same meaning as the commit 3b63afd73b541ea559aa58edc1901c8b30e2af40 Merge: e1819a254f 0589de55c4 Author: Glenn Morris Date: Sat Mar 9 10:07:46 2019 -0800 Merge from origin/emacs-26 0589de5 (origin/emacs-26) Fix markup of fake keys in the ELisp manual 82d4b98 Avoid errors in Auto Revert mode a3b1935 Mention empty strings in file name expansion, emacs lisp refe... a38da0d cc-mode.texi: Work around makeinfo alignment bug. Fix proble... 464ee80 Warn against recursive invocations of 'buffer-list-update-hoo... 60b5c10 Provide more details in doc-string of 'delete-windows-on' (Bu... f0be0f1 Improve documentation of 'delete-windows-on' f1bddc7 * lisp/frame.el (make-frame-command): Doc fix. (Bug#34715) 2848623 Avoid undefined behavior in gdb-mi.el dbf1837 * lisp/window.el (fit-frame-to-buffer): Make doc-string more ... 099ef44 Minor spelling and grammar fixes (bug#34756) 52fd400 Minor improvement of documentation of '(when CONDITION . SPEC)' f872b65 Improve documentation of 'auto-coding-functions' 04cad5e Fix visiting XML files with non-Unix EOL format a89fabe Update example major mode code in Elisp manual # Conflicts: # lisp/autorevert.el # lisp/window.el commit e1819a254f28a7dcba3c395c345fe237a512e92e Merge: 9fe7f23359 911231545f Author: Eli Zaretskii Date: Sat Mar 9 19:48:25 2019 +0200 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit 9fe7f233597d8a6ac72a61e1fb197e45a8c73370 Author: Eli Zaretskii Date: Sat Mar 9 19:45:13 2019 +0200 Consult 'face-remapping-alist' for 'internal-border' face * src/xterm.c (x_clear_under_internal_border) (x_after_update_window_line): * src/w32fns.c (x_clear_under_internal_border): * src/w32term.c (x_after_update_window_line): Consult 'face-remapping-alist' when using the 'internal-border' face. diff --git a/src/w32fns.c b/src/w32fns.c index 4a32d49635..4f53d93d8b 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1650,12 +1650,16 @@ x_clear_under_internal_border (struct frame *f) /* Clear border if it's larger than before. */ if (border != 0) { - HDC hdc = get_frame_dc (f); int width = FRAME_PIXEL_WIDTH (f); int height = FRAME_PIXEL_HEIGHT (f); - struct face *face = FACE_FROM_ID_OR_NULL (f, INTERNAL_BORDER_FACE_ID); + int face_id = + !NILP (Vface_remapping_alist) + ? lookup_basic_face (NULL, f, INTERNAL_BORDER_FACE_ID) + : INTERNAL_BORDER_FACE_ID; + struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); block_input (); + HDC hdc = get_frame_dc (f); if (face) { /* Fill border with internal border face. */ diff --git a/src/w32term.c b/src/w32term.c index bdd02d0540..0f0d6482fc 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -800,29 +800,32 @@ x_after_update_window_line (struct window *w, struct glyph_row *desired_row) height > 0)) { int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y)); + int face_id = + !NILP (Vface_remapping_alist) + ? lookup_basic_face (NULL, f, INTERNAL_BORDER_FACE_ID) + : INTERNAL_BORDER_FACE_ID; + struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); block_input (); - { - HDC hdc = get_frame_dc (f); - struct face *face = FACE_FROM_ID_OR_NULL (f, INTERNAL_BORDER_FACE_ID); - if (face) - { - /* Fill border with internal border face. */ - unsigned long color = face->background; + HDC hdc = get_frame_dc (f); + if (face) + { + /* Fill border with internal border face. */ + unsigned long color = face->background; + + w32_fill_area (f, hdc, color, 0, y, width, height); + w32_fill_area (f, hdc, color, FRAME_PIXEL_WIDTH (f) - width, + y, width, height); + } + else + { + w32_clear_area (f, hdc, 0, y, width, height); + w32_clear_area (f, hdc, FRAME_PIXEL_WIDTH (f) - width, + y, width, height); + } + release_frame_dc (f, hdc); - w32_fill_area (f, hdc, color, 0, y, width, height); - w32_fill_area (f, hdc, color, FRAME_PIXEL_WIDTH (f) - width, - y, width, height); - } - else - { - w32_clear_area (f, hdc, 0, y, width, height); - w32_clear_area (f, hdc, FRAME_PIXEL_WIDTH (f) - width, - y, width, height); - } - release_frame_dc (f, hdc); - } unblock_input (); } } diff --git a/src/xterm.c b/src/xterm.c index 73a38de371..1b0c2f5ec5 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -1302,7 +1302,11 @@ x_clear_under_internal_border (struct frame *f) #else int margin = FRAME_TOP_MARGIN_HEIGHT (f); #endif - struct face *face = FACE_FROM_ID_OR_NULL (f, INTERNAL_BORDER_FACE_ID); + int face_id = + !NILP (Vface_remapping_alist) + ? lookup_basic_face (NULL, f, INTERNAL_BORDER_FACE_ID) + : INTERNAL_BORDER_FACE_ID; + struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); block_input (); @@ -1365,7 +1369,11 @@ x_after_update_window_line (struct window *w, struct glyph_row *desired_row) height > 0)) { int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y)); - struct face *face = FACE_FROM_ID_OR_NULL (f, INTERNAL_BORDER_FACE_ID); + int face_id = + !NILP (Vface_remapping_alist) + ? lookup_basic_face (NULL, f, INTERNAL_BORDER_FACE_ID) + : INTERNAL_BORDER_FACE_ID; + struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); block_input (); if (face) commit 911231545f57cf659deddb69950f005f948d8329 Author: Alan Mackenzie Date: Sat Mar 9 17:41:11 2019 +0000 CC Mode: Correct some incorrect regular expressions: * lisp/progmodes/cc-awk.el (c-awk-regexp-char-list-re): "^" -> "\\^". R*x?R* -> \(R*x\)?R*. * lisp/progmodes/cc-mode.el (c-after-change-re-mark-unbalanced-strings): "|" -> "\\|". diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el index 70b1237cb8..70aa3c4b1f 100644 --- a/lisp/progmodes/cc-awk.el +++ b/lisp/progmodes/cc-awk.el @@ -188,8 +188,8 @@ "\\[:[a-z]+:\\]") ;; Matches a character class spec (e.g. [:alpha:]). (defconst c-awk-regexp-char-list-re - (concat "\\[" c-awk-escaped-newlines*-re "^?" c-awk-escaped-newlines*-re "]?" - "\\(" c-awk-esc-pair-re "\\|" c-awk-regexp-char-class-re + (concat "\\[\\(" c-awk-escaped-newlines*-re "\\^\\)?" c-awk-escaped-newlines*-re "]?" + "\\(" c-awk-esc-pair-re "\\|" c-awk-regexp-char-class-re "\\|" "[^]\n\r]" "\\)*" "\\(]\\|$\\)")) ;; Matches a regexp char list, up to (but not including) EOL if the ] is ;; missing. diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 1b527094ca..4e63bd9144 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1349,7 +1349,7 @@ Note that the style variables are always made local to the buffer." ;; We're at the start of a string. (memq (char-before) c-string-delims))) (if (c-unescaped-nls-in-string-p (1- (point))) - (looking-at "\\(\\\\\\(.\\|\n|\r\\)\\|[^\"]\\)*") + (looking-at "\\(\\\\\\(.\\|\n\\|\r\\)\\|[^\"]\\)*") (looking-at (cdr (assq (char-before) c-string-innards-re-alist)))) (cond ((memq (char-after (match-end 0)) '(?\n ?\r)) commit 21f54feee8c83e2c5fd8eeb6741cbd479a7b19eb Author: Michael Albinus Date: Sat Mar 9 16:44:24 2019 +0100 Do not hardcode "/bin/sh" in compile. Bug#24338, Bug#29723 * doc/emacs/custom.texi (Connection Variables): New node. * doc/emacs/emacs.texi (Top): Add entry for Connection Variables. * doc/emacs/misc.texi (Single Shell): Mention default value for remote buffers. * doc/lispref/variables.texi (Connection Local Variables): Describe `with-connection-local-variables' instead of `with-connection-local-profiles'. * doc/misc/tramp.texi (Remote processes): Refer to Emacs manual. Mention default connection-local settings for `shell-file-name' and `shell-command-switch'. * etc/NEWS: Mention connection-local variables changes. * lisp/files-x.el (hack-connection-local-variables): Push connection-local variables to `file-local-variables-alist'. (connection-local-criteria-for-default-directory): New defsubst. (with-connection-local-variables): Rename from `with-connection-local-profiles'. Adapt implementation. * lisp/files.el (hack-local-variables): Call `hack-connection-local-variables'. * lisp/shell.el (shell): Use `with-connection-local-variables'. * lisp/subr.el (start-file-process-shell-command): * lisp/progmodes/compile.el (compilation-start): Use `with-connection-local-variables'. Do not set "/bin/sh" for remote buffers, trust settings of `shell-file-name'. (Bug#24338), (Bug#29723) * lisp/net/ange-ftp.el (ange-ftp-compress, ange-ftp-uncompress): Use `shell-command-switch'. * lisp/net/tramp-adb.el (tramp-adb-connection-local-default-profile): New defvar. Add it to connection-local profiles after loading "shell". * lisp/net/tramp-integration.el (tramp-compat): Require tramp-compat. (tramp-compat-exec-path): Do not declare anymore. (tramp-connection-local-safe-shell-file-names): New defvar. (tramp-connection-local-default-profile): New defconst. Activate it after loading "shell". (shell-file-name, shell-command-switch): Add safe-local-variable property. * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp): Add tramp-autoload cookie. * test/lisp/files-x-tests.el (remote-shell-file-name): Add safe-local-variable property to remote-* variables. (tramp-connection-local-default-profile): Declare. (files-x-test-with-connection-local-variables): Rename from `files-x-test-with-connection-local-profiles'. Adapt implementation. * test/lisp/net/tramp-tests.el (tramp-test34-connection-local-variables): New test. (tramp-test34-explicit-shell-file-name): Run it also for tramp-adb. Bind connection-local-{profile,criteria}-alist. Use tramp-adb specific `shell-file-name'. Add safe-local-variable property to `explicit-shell-file-name' and `explicit-sh-args'. diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 474149fcae..c649c17029 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -765,6 +765,8 @@ expects (@pxref{Examining}). * Locals:: Per-buffer values of variables. * File Variables:: How files can specify variable values. * Directory Variables:: How variable values can be specified by directory. +* Connection Variables:: Variables which are valid for buffers with a + remote default directory. @end menu @node Examining @@ -1421,6 +1423,52 @@ variables are handled in the same way as unsafe file-local variables do not visit a file directly but perform work within a directory, such as Dired buffers (@pxref{Dired}). +@node Connection Variables +@subsection Per-Connection Local Variables +@cindex local variables, for all remote connections +@cindex connection-local variables +@cindex per-connection local variables + + Most of the variables reflect the situation on the local machine. +Often, they must use a different value when you operate in buffers +with a remote default directory. Think about the shell to be applied +when calling @code{shell} -- it might be @file{/bin/bash} on your +local machine, and @file{/bin/ksh} on a remote machine. + + This can be accomplished with @dfn{connection-local variables}. +Directory and file local variables override connection-local +variables. Unsafe connection-local variables are handled in the same +way as unsafe file-local variables (@pxref{Safe File Variables}). + +@findex connection-local-set-profile-variables +@findex connection-local-set-profiles + Connection-local variables are declared as a group of +variables/value pairs in a @dfn{profile}, using the +@code{connection-local-set-profile-variables} function. The function +@code{connection-local-set-profiles} activates profiles for a given +criteria, identifying a remote machine: + +@example +(connection-local-set-profile-variables 'remote-ksh + '((shell-file-name . "/bin/ksh") + (shell-command-switch . "-c"))) + +(connection-local-set-profile-variables 'remote-bash + '((shell-file-name . "/bin/bash") + (shell-command-switch . "-c"))) + +(connection-local-set-profiles + '(:application tramp :machine "remotemachine") 'remote-ksh) +@end example + + This code declares two different profiles, @code{remote-ksh} and +@code{remote-bash}. The profile @code{remote-ksh} is applied to all +buffers which have a remote default directory matching the regexp +@code{"remotemachine} as host name. Such a criteria can also +discriminate for the properties @code{:protocol} (this is the Tramp +method) or @code{:user} (a remote user name). The @code{nil} criteria +matches all buffers with a remote default directory. + @node Key Bindings @section Customizing Key Bindings @cindex key bindings diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 950ddc0112..7edc1a5fae 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -1135,6 +1135,8 @@ Variables * Locals:: Per-buffer values of variables. * File Variables:: How files can specify variable values. * Directory Variables:: How variable values can be specified by directory. +* Connection Variables:: Variables which are valid for buffers with a + remote default directory. Local Variables in Files diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index a3aa71e267..7d7065a441 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -795,6 +795,10 @@ to @command{gpg}. This will output the list of keys to the name is relative, Emacs searches the directories listed in @code{exec-path} (@pxref{Shell}). + If the default directory is remote (@pxref{Remote Files}), the +default value is @file{/bin/sh}. This can be changed by declaring +@code{shell-file-name} connection-local (@pxref{Connection Variables}). + To specify a coding system for @kbd{M-!} or @kbd{M-|}, use the command @kbd{C-x @key{RET} c} immediately beforehand. @xref{Communication Coding}. diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index f1e0e37e6d..aca7d2f5e9 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -2191,9 +2191,9 @@ This function looks for connection-local variables according to @var{criteria}, and immediately applies them in the current buffer. @end defun -@defmac with-connection-local-profiles profiles &rest body -All connection-local variables, which are specified by a connection -profile in @var{profiles}, are applied. +@defmac with-connection-local-variables &rest body +All connection-local variables, which are specified by +@code{default-directory}, are applied. After that, @var{body} is executed, and the connection-local variables are unwound. Example: @@ -2207,8 +2207,15 @@ are unwound. Example: @end group @group -(with-connection-local-profiles '(remote-perl) - do something useful) +(connection-local-set-profiles + '(:application 'tramp :protocol "ssh" :machine "remotehost") + 'remote-perl) +@end group + +@group +(let ((default-directory "/ssh:remotehost:/working/dir/")) + (with-connection-local-variables + do something useful)) @end group @end example @end defmac diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index db3b3f7fee..ea6ad15dc3 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -2970,7 +2970,7 @@ Starting with Emacs 26, you could use connection-local variables for setting different values of @code{explicit-shell-file-name} for different remote hosts. @ifinfo -@pxref{Connection Local Variables, , , elisp} +@xref{Connection Variables, , , emacs} @end ifinfo @lisp @@ -3023,6 +3023,14 @@ host. Example: @kbd{M-x auto-revert-tail-mode @key{RET}} runs similarly showing continuous output. +@code{shell-command} uses the variables @code{shell-file-name} and +@code{shell-command-switch} in order to determine which shell to run. +For remote hosts, their default values are @file{/bin/sh} and +@option{-c}, respectively (except for the @option{adb} method, which +uses @file{/system/bin/sh}). Like the variables in the previous +section, these variables can be changed via connection-local +variables. + @subsection Running @code{eshell} on a remote host @cindex @code{eshell} diff --git a/etc/NEWS b/etc/NEWS index 1095ecc7e5..0a1d9ea222 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -279,6 +279,17 @@ matches strings where the pattern appears as a subsequence. Put simply, makes "foo" complete to both "barfoo" and "frodo". Add 'flex' to 'completion-styles' or 'completion-category-overrides' to use it. +** Connection-local variables + ++++ +*** Connection-local variables are applied by default like file-local +and directory-local variables. + ++++ +*** The macro 'with-connection-local-variables' has been renamed from +'with-connection-local-profiles'. No argument 'profiles' needed any +longer. + * Editing Changes in Emacs 27.1 @@ -994,7 +1005,12 @@ followed when Emacs writes the relevant history variables to the disk. --- *** Program name completion inside remote shells works now as expected. ++++ +*** The variable 'shell-file-name' can be set now as connection-local +variable for remote shells. It still defaults to "/bin/sh". + ** Pcomplete + *** The function 'pcomplete-uniquify-list' has been renamed from 'pcomplete-uniqify-list'. diff --git a/lisp/files-x.el b/lisp/files-x.el index c9abb69570..eedf630b71 100644 --- a/lisp/files-x.el +++ b/lisp/files-x.el @@ -582,7 +582,7 @@ changed by the user.") (setq ignored-local-variables (cons 'connection-local-variables-alist ignored-local-variables)) -(defvar connection-local-profile-alist '() +(defvar connection-local-profile-alist nil "Alist mapping connection profiles to variable lists. Each element in this list has the form (PROFILE VARIABLES). PROFILE is the name of a connection profile (a symbol). @@ -590,7 +590,7 @@ VARIABLES is a list that declares connection-local variables for PROFILE. An element in VARIABLES is an alist whose elements are of the form (VAR . VALUE).") -(defvar connection-local-criteria-alist '() +(defvar connection-local-criteria-alist nil "Alist mapping connection criteria to connection profiles. Each element in this list has the form (CRITERIA PROFILES). CRITERIA is a plist identifying a connection and the application @@ -685,7 +685,9 @@ This does nothing if `enable-connection-local-variables' is nil." ;; Loop over variables. (dolist (variable (connection-local-get-profile-variables profile)) (unless (assq (car variable) connection-local-variables-alist) - (push variable connection-local-variables-alist)))))) + (push variable connection-local-variables-alist)))) + ;; Push them to `file-local-variables-alist'. + (hack-local-variables-filter connection-local-variables-alist nil))) ;;;###autoload (defun hack-connection-local-variables-apply (criteria) @@ -697,24 +699,35 @@ will not be changed." (copy-tree connection-local-variables-alist))) (hack-local-variables-apply))) +(defsubst connection-local-criteria-for-default-directory () + "Return a connection-local criteria, which represents `default-directory'." + (when (file-remote-p default-directory) + `(:application tramp + :protocol ,(file-remote-p default-directory 'method) + :user ,(file-remote-p default-directory 'user) + :machine ,(file-remote-p default-directory 'host)))) + ;;;###autoload -(defmacro with-connection-local-profiles (profiles &rest body) - "Apply connection-local variables according to PROFILES in current buffer. +(defmacro with-connection-local-variables (&rest body) + "Apply connection-local variables according to `default-directory'. Execute BODY, and unwind connection-local variables." - (declare (indent 1) (debug t)) - `(let ((enable-connection-local-variables t) - (old-buffer-local-variables (buffer-local-variables)) - connection-local-variables-alist connection-local-criteria-alist) - (apply 'connection-local-set-profiles nil ,profiles) - (hack-connection-local-variables-apply nil) - (unwind-protect - (progn ,@body) - ;; Cleanup. - (dolist (variable connection-local-variables-alist) - (let ((elt (assq (car variable) old-buffer-local-variables))) - (if elt - (set (make-local-variable (car elt)) (cdr elt)) - (kill-local-variable (car variable)))))))) + (declare (debug t)) + `(if (file-remote-p default-directory) + (let ((enable-connection-local-variables t) + (old-buffer-local-variables (buffer-local-variables)) + connection-local-variables-alist) + (hack-connection-local-variables-apply + (connection-local-criteria-for-default-directory)) + (unwind-protect + (progn ,@body) + ;; Cleanup. + (dolist (variable connection-local-variables-alist) + (let ((elt (assq (car variable) old-buffer-local-variables))) + (if elt + (set (make-local-variable (car elt)) (cdr elt)) + (kill-local-variable (car variable))))))) + ;; No connection-local variables to apply. + ,@body)) diff --git a/lisp/files.el b/lisp/files.el index 9948bd4a03..77a194b085 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3590,6 +3590,11 @@ local variables, but directory-local variables may still be applied." result) (unless (eq handle-mode t) (setq file-local-variables-alist nil) + (when (file-remote-p default-directory) + (with-demoted-errors "Connection-local variables error: %s" + ;; Note this is a no-op if enable-local-variables is nil. + (hack-connection-local-variables + (connection-local-criteria-for-default-directory)))) (with-demoted-errors "Directory-local variables error: %s" ;; Note this is a no-op if enable-local-variables is nil. (hack-dir-local-variables))) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index 428bf32947..5af9ea75ed 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -4277,7 +4277,7 @@ NEWNAME should be the name to give the new compressed or uncompressed file.") nil t nil - "-c" + shell-command-switch (format "compress -f -c < %s > %s" tmp1 tmp2)) (and ange-ftp-process-verbose (ange-ftp-message "Compressing %s...done" abbr)) @@ -4313,7 +4313,7 @@ NEWNAME should be the name to give the new compressed or uncompressed file.") nil t nil - "-c" + shell-command-switch (format "uncompress -c < %s > %s" tmp1 tmp2)) (and ange-ftp-process-verbose (ange-ftp-message "Uncompressing %s...done" abbr)) diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index eb3295ee35..b40e69ef63 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -1370,6 +1370,26 @@ connection if a previous connection has died for some reason." ;; Mark it as connected. (tramp-set-connection-property p "connected" t))))))) +;; Default settings for connection-local variables. +(defconst tramp-adb-connection-local-default-profile + '((shell-file-name . "/system/bin/sh") + (shell-command-switch . "-c")) + "Default connection-local variables for remote adb connections.") +(add-to-list 'tramp-connection-local-safe-shell-file-names "/system/bin/sh") + +;; `connection-local-set-profile-variables' and +;; `connection-local-set-profiles' exists since Emacs 26.1. +(eval-after-load "shell" + '(progn + (tramp-compat-funcall + 'connection-local-set-profile-variables + 'tramp-adb-connection-local-default-profile + tramp-adb-connection-local-default-profile) + (tramp-compat-funcall + 'connection-local-set-profiles + `(:application tramp :protocol ,tramp-adb-method) + 'tramp-adb-connection-local-default-profile))) + (add-hook 'tramp-unload-hook (lambda () (unload-feature 'tramp-adb 'force))) diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el index 2a46176348..946d7f8cba 100644 --- a/lisp/net/tramp-integration.el +++ b/lisp/net/tramp-integration.el @@ -27,9 +27,10 @@ ;;; Code: +(require 'tramp-compat) + ;; Pacify byte-compiler. (require 'cl-lib) -(declare-function tramp-compat-exec-path "tramp") (declare-function tramp-dissect-file-name "tramp") (declare-function tramp-file-name-equal-p "tramp") (declare-function tramp-tramp-file-p "tramp") @@ -170,6 +171,37 @@ NAME must be equal to `tramp-current-connection'." (remove-hook 'tramp-cleanup-all-connections-hook #'tramp-recentf-cleanup-all))))) +;;; Default connection-local variables for Tramp: + +;;;###tramp-autoload +(defvar tramp-connection-local-safe-shell-file-names nil + "List of safe `shell-file-name' values for remote hosts.") +(add-to-list 'tramp-connection-local-safe-shell-file-names "/bin/sh") + +(defconst tramp-connection-local-default-profile + '((shell-file-name . "/bin/sh") + (shell-command-switch . "-c")) + "Default connection-local variables for remote connections.") +(put 'shell-file-name 'safe-local-variable + (lambda (item) + (and (stringp item) + (member item tramp-connection-local-safe-shell-file-names)))) +(put 'shell-command-switch 'safe-local-variable + (lambda (item) (and (stringp item) (string-equal item "-c")))) + +;; `connection-local-set-profile-variables' and +;; `connection-local-set-profiles' exists since Emacs 26.1. +(eval-after-load "shell" + '(progn + (tramp-compat-funcall + 'connection-local-set-profile-variables + 'tramp-connection-local-default-profile + tramp-connection-local-default-profile) + (tramp-compat-funcall + 'connection-local-set-profiles + `(:application tramp) + 'tramp-connection-local-default-profile))) + (add-hook 'tramp-unload-hook (lambda () (unload-feature 'tramp-integration 'force))) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index ee16138f70..d9edcb1419 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -81,6 +81,7 @@ the default storage location, e.g. \"$HOME/.sh_history\"." (const :tag "Unset HISTFILE" t) (string :tag "Redirect to a file"))) +;;;###tramp-autoload (defconst tramp-display-escape-sequence-regexp "\e[[;0-9]+m" "Terminal control escape sequences for display attributes.") diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index b3f32c8231..3650b05607 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -1754,15 +1754,16 @@ Returns the compilation buffer created." (if (fboundp 'make-process) (let ((proc (if (eq mode t) - ;; comint uses `start-file-process'. - (get-buffer-process - (with-no-warnings - (comint-exec - outbuf (downcase mode-name) - (if (file-remote-p default-directory) - "/bin/sh" - shell-file-name) - nil `("-c" ,command)))) + ;; On remote hosts, the local `shell-file-name' + ;; might be useless. + (with-connection-local-variables + ;; comint uses `start-file-process'. + (get-buffer-process + (with-no-warnings + (comint-exec + outbuf (downcase mode-name) + shell-file-name + nil `(,shell-command-switch ,command))))) (start-file-process-shell-command (downcase mode-name) outbuf command)))) ;; Make the buffer's mode line show process state. diff --git a/lisp/shell.el b/lisp/shell.el index 524a884884..8a2d4489b8 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -99,6 +99,7 @@ (require 'comint) (require 'pcomplete) +(eval-when-compile (require 'files-x)) ;with-connection-local-variables ;;; Customization and Buffer Variables @@ -721,23 +722,17 @@ Otherwise, one argument `-i' is passed to the shell. (with-current-buffer buffer (when (file-remote-p default-directory) - ;; Apply connection-local variables. - (hack-connection-local-variables-apply - `(:application tramp - :protocol ,(file-remote-p default-directory 'method) - :user ,(file-remote-p default-directory 'user) - :machine ,(file-remote-p default-directory 'host))) - ;; On remote hosts, the local `shell-file-name' might be useless. - (if (and (called-interactively-p 'any) - (null explicit-shell-file-name) - (null (getenv "ESHELL"))) - (set (make-local-variable 'explicit-shell-file-name) - (file-local-name - (expand-file-name - (read-file-name - "Remote shell path: " default-directory shell-file-name - t shell-file-name))))))) + (with-connection-local-variables + (if (and (called-interactively-p 'any) + (null explicit-shell-file-name) + (null (getenv "ESHELL"))) + (set (make-local-variable 'explicit-shell-file-name) + (file-local-name + (expand-file-name + (read-file-name + "Remote shell path: " default-directory shell-file-name + t shell-file-name)))))))) ;; The buffer's window must be correctly set when we call comint ;; (so that comint sets the COLUMNS env var properly). diff --git a/lisp/subr.el b/lisp/subr.el index 5b0330745f..4024c68e68 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3185,11 +3185,12 @@ discouraged." "Start a program in a subprocess. Return the process object for it. Similar to `start-process-shell-command', but calls `start-file-process'." (declare (advertised-calling-convention (name buffer command) "23.1")) - (start-file-process - name buffer - (if (file-remote-p default-directory) "/bin/sh" shell-file-name) - (if (file-remote-p default-directory) "-c" shell-command-switch) - (mapconcat 'identity args " "))) + ;; On remote hosts, the local `shell-file-name' might be useless. + (with-connection-local-variables + (start-file-process + name buffer + shell-file-name shell-command-switch + (mapconcat 'identity args " ")))) (defun call-process-shell-command (command &optional infile buffer display &rest args) diff --git a/test/lisp/files-x-tests.el b/test/lisp/files-x-tests.el index d678be409d..568a898447 100644 --- a/test/lisp/files-x-tests.el +++ b/test/lisp/files-x-tests.el @@ -35,6 +35,11 @@ '((remote-null-device . "/dev/null"))) (defconst files-x-test--variables4 '((remote-null-device . "null"))) +(put 'remote-shell-file-name 'safe-local-variable #'identity) +(put 'remote-shell-command-switch 'safe-local-variable #'identity) +(put 'remote-shell-interactive-switch 'safe-local-variable #'identity) +(put 'remote-shell-login-switch 'safe-local-variable #'identity) +(put 'remote-null-device 'safe-local-variable #'identity) (defconst files-x-test--application '(:application 'my-application)) (defconst files-x-test--another-application @@ -268,7 +273,9 @@ (should-not (local-variable-p 'remote-shell-file-name)) (should-not (boundp 'remote-shell-file-name)))))) -(ert-deftest files-x-test-with-connection-local-profiles () +(defvar tramp-connection-local-default-profile) + +(ert-deftest files-x-test-with-connection-local-variables () "Test setting connection-local variables." (let (connection-local-profile-alist connection-local-criteria-alist) @@ -303,46 +310,48 @@ (string-equal (symbol-value 'remote-null-device) "/dev/null")) ;; A candidate connection-local variable is not bound yet. - (should-not (local-variable-p 'remote-shell-command-switch)) - - ;; Use the macro. - (with-connection-local-profiles '(remote-bash remote-ksh) - ;; All connection-local variables are set. They apply in - ;; reverse order in `connection-local-variables-alist'. - ;; This variable keeps only the variables to be set inside - ;; the macro. - (should - (equal connection-local-variables-alist - (nreverse (copy-tree files-x-test--variables1)))) - ;; The variables exist also as local variables. - (should (local-variable-p 'remote-shell-file-name)) - (should (local-variable-p 'remote-shell-command-switch)) - ;; The proper variable values are set. The settings from - ;; `remote-bash' overwrite the same variables as in - ;; `remote-ksh'. - (should - (string-equal (symbol-value 'remote-shell-file-name) "/bin/bash")) - (should - (string-equal (symbol-value 'remote-shell-command-switch) "-c"))) - - ;; Everything is rewound. The old variable values are reset. - (should - (equal connection-local-variables-alist - (append - (nreverse (copy-tree files-x-test--variables3)) - (nreverse (copy-tree files-x-test--variables2))))) - ;; The variables exist also as local variables. - (should (local-variable-p 'remote-shell-file-name)) - (should (local-variable-p 'remote-null-device)) - ;; The proper variable values are set. The settings from - ;; `remote-ksh' are back. - (should - (string-equal (symbol-value 'remote-shell-file-name) "/bin/ksh")) - (should - (string-equal (symbol-value 'remote-null-device) "/dev/null")) + (should-not (local-variable-p 'remote-shell-command-switch)))) - ;; The variable set temporarily is not unbound, again. - (should-not (local-variable-p 'remote-shell-command-switch)))))) + (with-temp-buffer + ;; Use the macro. We need a remote `default-directory'. + (let ((enable-connection-local-variables t) + (default-directory "/method:host:") + (remote-null-device "null")) + (should-not connection-local-variables-alist) + (should-not (local-variable-p 'remote-shell-file-name)) + (should-not (local-variable-p 'remote-null-device)) + (should-not (boundp 'remote-shell-file-name)) + (should (string-equal (symbol-value 'remote-null-device) "null")) + + (with-connection-local-variables + ;; All connection-local variables are set. They apply in + ;; reverse order in `connection-local-variables-alist'. + ;; Since we ha a remote default directory, Tramp's settings + ;; are appended as well. + (should + (equal + connection-local-variables-alist + (append + (nreverse (copy-tree files-x-test--variables3)) + (nreverse (copy-tree files-x-test--variables2)) + (nreverse (copy-tree tramp-connection-local-default-profile))))) + ;; The variables exist also as local variables. + (should (local-variable-p 'remote-shell-file-name)) + (should (local-variable-p 'remote-null-device)) + ;; The proper variable values are set. + (should + (string-equal (symbol-value 'remote-shell-file-name) "/bin/ksh")) + (should + (string-equal (symbol-value 'remote-null-device) "/dev/null"))) + + ;; Everything is rewound. The old variable values are reset. + (should-not connection-local-variables-alist) + ;; The variables don't exist as local variables. + (should-not (local-variable-p 'remote-shell-file-name)) + (should-not (local-variable-p 'remote-null-device)) + ;; The variable values are reset. + (should-not (boundp 'remote-shell-file-name)) + (should (string-equal (symbol-value 'remote-null-device) "null")))))) (provide 'files-x-tests) ;;; files-x-tests.el ends here diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 69d5ba8b7d..bf7cdfafab 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -4274,12 +4274,78 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (dolist (dir '("/mock:localhost#11111:" "/mock:localhost#22222:")) (tramp-cleanup-connection (tramp-dissect-file-name dir))))) +;; Connection-local variables are enabled per default since Emacs 27.1. +(ert-deftest tramp-test34-connection-local-variables () + "Check that connection-local variables are enabled." + :tags '(:expensive-test) + (skip-unless (tramp--test-enabled)) + ;; Since Emacs 27.1. + (skip-unless (fboundp 'with-connection-local-variables)) + + ;; `connection-local-set-profile-variables' and + ;; `connection-local-set-profiles' exist since Emacs 26.1. We don't + ;; want to see compiler warnings for older Emacsen. + (let* ((default-directory tramp-test-temporary-file-directory) + (tmp-name1 (tramp--test-make-temp-name)) + (tmp-name2 (expand-file-name "foo" tmp-name1)) + (enable-local-variables :all) + (enable-remote-dir-locals t) + kill-buffer-query-functions + connection-local-profile-alist connection-local-criteria-alist) + (unwind-protect + (progn + (make-directory tmp-name1) + (should (file-directory-p tmp-name1)) + + ;; `local-variable' is buffer-local due to explicit setting. + (with-no-warnings + (defvar-local local-variable 'buffer)) + (with-temp-buffer + (should (eq local-variable 'buffer))) + + ;; `local-variable' is connection-local due to Tramp. + (write-region "foo" nil tmp-name2) + (should (file-exists-p tmp-name2)) + (with-no-warnings + (connection-local-set-profile-variables + 'local-variable-profile + '((local-variable . connect))) + (connection-local-set-profiles + `(:application tramp + :protocol ,(file-remote-p default-directory 'method) + :user ,(file-remote-p default-directory 'user) + :machine ,(file-remote-p default-directory 'host)) + 'local-variable-profile)) + (with-current-buffer (find-file-noselect tmp-name2) + (should (eq local-variable 'connect)) + (kill-buffer (current-buffer))) + + ;; `local-variable' is dir-local due to existence of .dir-locals.el. + (write-region + "((nil . ((local-variable . dir))))" nil + (expand-file-name ".dir-locals.el" tmp-name1)) + (should (file-exists-p (expand-file-name ".dir-locals.el" tmp-name1))) + (with-current-buffer (find-file-noselect tmp-name2) + (should (eq local-variable 'dir)) + (kill-buffer (current-buffer))) + + ;; `local-variable' is file-local due to specifying as file variable. + (write-region + "-*- mode: comint; local-variable: file; -*-" nil tmp-name2) + (should (file-exists-p tmp-name2)) + (with-current-buffer (find-file-noselect tmp-name2) + (should (eq local-variable 'file)) + (kill-buffer (current-buffer)))) + + ;; Cleanup. + (ignore-errors (delete-directory tmp-name1 'recursive))))) + ;; The functions were introduced in Emacs 26.1. (ert-deftest tramp-test34-explicit-shell-file-name () "Check that connection-local `explicit-shell-file-name' is set." :tags '(:expensive-test) (skip-unless (tramp--test-enabled)) - (skip-unless (tramp--test-sh-p)) + (skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p))) ;; Since Emacs 26.1. (skip-unless (and (fboundp 'connection-local-set-profile-variables) (fboundp 'connection-local-set-profiles))) @@ -4288,7 +4354,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ;; `connection-local-set-profiles' exist since Emacs 26.1. We don't ;; want to see compiler warnings for older Emacsen. (let ((default-directory tramp-test-temporary-file-directory) - explicit-shell-file-name kill-buffer-query-functions) + explicit-shell-file-name kill-buffer-query-functions + connection-local-profile-alist connection-local-criteria-alist) (unwind-protect (progn ;; `shell-mode' would ruin our test, because it deletes all @@ -4298,7 +4365,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (with-no-warnings (connection-local-set-profile-variables 'remote-sh - '((explicit-shell-file-name . "/bin/sh") + `((explicit-shell-file-name + . ,(if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh")) (explicit-sh-args . ("-i")))) (connection-local-set-profiles `(:application tramp @@ -4306,6 +4374,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." :user ,(file-remote-p default-directory 'user) :machine ,(file-remote-p default-directory 'host)) 'remote-sh)) + (put 'explicit-shell-file-name 'safe-local-variable #'identity) + (put 'explicit-sh-args 'safe-local-variable #'identity) ;; Run interactive shell. Since the default directory is ;; remote, `explicit-shell-file-name' shall be set in order @@ -4316,6 +4386,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (call-interactively #'shell) (should explicit-shell-file-name))) + ;; Cleanup. (put 'explicit-shell-file-name 'permanent-local nil) (kill-buffer "*shell*")))) commit c37bdd00c7dcabaa3ca8405d9dc5122ed36f27e0 Author: Charles A. Roelli Date: Sat Mar 9 16:47:38 2019 +0100 Make help for file supersession more readable * lisp/userlock.el (ask-user-about-supersession-help): Use 'substitute-command-keys' to show the command key for "\\[revert-buffer]" properly. diff --git a/lisp/userlock.el b/lisp/userlock.el index 1a1adebdde..f077bc9ad6 100644 --- a/lisp/userlock.el +++ b/lisp/userlock.el @@ -174,7 +174,9 @@ really edit the buffer? (y, n, r or C-h) " (defun ask-user-about-supersession-help () (with-output-to-temp-buffer "*Help*" - (princ "You want to modify a buffer whose disk file has changed + (princ + (substitute-command-keys + "You want to modify a buffer whose disk file has changed since you last read it in or saved it with this buffer. If you say `y' to go ahead and modify this buffer, @@ -184,7 +186,7 @@ from the file on disk. If you say `n', the change you started to make will be aborted. Usually, you should type `n' and then `\\[revert-buffer]', -to get the latest version of the file, then make the change again.") +to get the latest version of the file, then make the change again.")) (with-current-buffer standard-output (help-mode)))) commit 0589de55c465627c16314519568f22daa62ff654 Author: Eli Zaretskii Date: Sat Mar 9 13:20:28 2019 +0200 Fix markup of fake keys in the ELisp manual * doc/lispref/keymaps.texi (Menu Bar, Tool Bar): Fix markup of fake keys. (Bug#34785) diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index ccc75a9c7a..d839be0e93 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -2502,7 +2502,7 @@ can do it this way: Emacs usually shows a @dfn{menu bar} at the top of each frame. @xref{Menu Bars,,,emacs, The GNU Emacs Manual}. Menu bar items are -subcommands of the fake function key @code{menu-bar}, as defined +subcommands of the fake function key @key{MENU-BAR}, as defined in the active keymaps. To add an item to the menu bar, invent a fake function key of your @@ -2554,9 +2554,10 @@ bar item: @end example @noindent -Here, @code{edit} is the fake function key used by the global map for -the @samp{Edit} menu bar item. The main reason to suppress a global -menu bar item is to regain space for mode-specific items. +Here, @code{edit} is the symbol produced by a fake function key, it is +used by the global map for the @samp{Edit} menu bar item. The main +reason to suppress a global menu bar item is to regain space for +mode-specific items. @defvar menu-bar-final-items Normally the menu bar shows global items followed by items defined by the @@ -2601,7 +2602,7 @@ If the value is @code{grow-only}, the tool bar expands automatically, but does not contract automatically. The tool bar contents are controlled by a menu keymap attached to a -fake function key called @code{tool-bar} (much like the way the menu +fake function key called @key{TOOL-BAR} (much like the way the menu bar is controlled). So you define a tool bar item using @code{define-key}, like this: commit 82d4b9872fe848db8645b4ed3c11944f28bcdb79 Author: Eli Zaretskii Date: Sat Mar 9 12:51:33 2019 +0200 Avoid errors in Auto Revert mode * lisp/autorevert.el (auto-revert-buffers): Cancel auto-revert-timer only if it is non-nil. This avoids errors on first invocation of Auto-Revert mode. diff --git a/lisp/autorevert.el b/lisp/autorevert.el index d1b8f94a8e..242344fe9d 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -813,7 +813,8 @@ the timer when no buffers need to be checked." ;; Check if we should cancel the timer. (when (and (not global-auto-revert-mode) (null auto-revert-buffer-list)) - (cancel-timer auto-revert-timer) + (if (timerp auto-revert-timer) + (cancel-timer auto-revert-timer)) (setq auto-revert-timer nil))))) commit fddb915d234515af81dce30982a8dd22568b4e84 Author: Eli Zaretskii Date: Sat Mar 9 12:41:48 2019 +0200 Import Unicode 12.0 data files * admin/unidata/copyright.html: * admin/unidata/UnicodeData.txt: * admin/unidata/SpecialCasing.txt: * admin/unidata/NormalizationTest.txt: * admin/unidata/Blocks.txt: * admin/unidata/BidiMirroring.txt: * admin/unidata/BidiBrackets.txt: New versions from Unicode 12.0. * admin/unidata/unidata-gen.el (unidata-gen-file): * admin/unidata/blocks.awk (name2alias): Adapt to changes in new data files. * admin/notes/unicode: Update and improve instructions for importing a new Unicode Standard. * lisp/international/characters.el (char-width-table): Update lists of characters according to Unicode 12.0. * lisp/international/fontset.el (script-representative-chars): Add characters from new scripts to 'script-representative-chars'. (otf-script-alist): Update according to data on the MS site. * lisp/international/mule-cmds.el (ucs-names): Update unused ranges of codepoints according to Unicode 12.0. * test/lisp/international/ucs-normalize-tests.el (ucs-normalize-tests--failing-lines-part1) (ucs-normalize-tests--failing-lines-part2): Update for the new NormalizationTest.txt file. * test/manual/BidiCharacterTest.txt: Update with the new version from Unicode 12.0. diff --git a/admin/notes/unicode b/admin/notes/unicode index bbee3e9de7..4d6aa6e9a9 100644 --- a/admin/notes/unicode +++ b/admin/notes/unicode @@ -11,15 +11,20 @@ Emacs uses the following files from the Unicode Character Database . UnicodeData.txt . Blocks.txt - . BidiMirroring.txt . BidiBrackets.txt + . BidiCharacterTest.txt + . BidiMirroring.txt . IVD_Sequences.txt . NormalizationTest.txt . SpecialCasing.txt - . BidiCharacterTest.txt First, the first 7 files need to be copied into admin/unidata/, and -then Emacs should be rebuilt for them to take effect. Rebuilding +the file https://www.unicode.org/copyright.html should be copied over +copyright.html in admin/unidata (that file might need trailing +whitespace removed before it can be committed to the Emacs +repository). + +Then Emacs should be rebuilt for them to take effect. Rebuilding Emacs updates several derived files elsewhere in the Emacs source tree, mainly in lisp/international/. @@ -28,7 +33,10 @@ files, pay attention to any warning or error messages. In particular, admin/unidata/unidata-gen.el will complain if UnicodeData.txt defines new bidirectional attributes of characters, because unidata-gen.el, bidi.c and dispextern.h need to be updated in that case; failure to do -so will cause aborts in redisplay. +so will cause aborts in redisplay. unidata-gen.el will also complain +if the format of the Unicode Copyright notice in copyright.html +changed in significant ways; in that case, update the regular +expression in unidata-gen-file used to extract the copyright string. Next, review the changes in UnicodeData.txt vs the previous version used by Emacs. Any changes, be it introduction of new scripts or @@ -40,7 +48,12 @@ and see if any changes in admin/unidata/blocks.awk are required. The setting of char-width-table around line 1200 of characters.el should be checked against the latest version of the Unicode file -EastAsianWidth.txt, and any discrepancies fixed. +EastAsianWidth.txt, and any discrepancies fixed: double-width +characters are those marked with W or F in that file. Zero-width +characters are not taken from EastAsianWidth.txt, they are those whose +Unicode General Category property is one of Mn, Me, or Cf, and also +Hangul jungseong and jongseong characters (a.k.a. "Jamo medial vowels" +and "Jamo final consonants"). Any new scripts added by UnicodeData.txt will also need updates to script-representative-chars defined in fontset.el, and also the list diff --git a/admin/unidata/BidiBrackets.txt b/admin/unidata/BidiBrackets.txt index c505861a90..9e51834767 100644 --- a/admin/unidata/BidiBrackets.txt +++ b/admin/unidata/BidiBrackets.txt @@ -1,5 +1,5 @@ -# BidiBrackets-11.0.0.txt -# Date: 2018-02-18, 05:50:00 GMT [AG, LI, KW] +# BidiBrackets-12.0.0.txt +# Date: 2018-11-02, 16:32:00 GMT [AG, LI, KW] # © 2018 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html diff --git a/admin/unidata/BidiMirroring.txt b/admin/unidata/BidiMirroring.txt index b3135c03f2..80dab88a81 100644 --- a/admin/unidata/BidiMirroring.txt +++ b/admin/unidata/BidiMirroring.txt @@ -1,5 +1,5 @@ -# BidiMirroring-11.0.0.txt -# Date: 2018-05-07, 18:02:00 GMT [KW, LI, RP] +# BidiMirroring-12.0.0.txt +# Date: 2018-11-02, 16:33:00 GMT [KW, LI, RP] # © 2018 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -15,7 +15,7 @@ # value, for which there is another Unicode character that typically has a glyph # that is the mirror image of the original character's glyph. # -# The repertoire covered by the file is Unicode 11.0.0. +# The repertoire covered by the file is Unicode 12.0.0. # # The file contains a list of lines with mappings from one code point # to another one for character-based mirroring. diff --git a/admin/unidata/Blocks.txt b/admin/unidata/Blocks.txt index 357982078a..7216614be6 100644 --- a/admin/unidata/Blocks.txt +++ b/admin/unidata/Blocks.txt @@ -1,6 +1,6 @@ -# Blocks-11.0.0.txt -# Date: 2017-10-16, 24:39:00 GMT [KW] -# © 2017 Unicode®, Inc. +# Blocks-12.0.0.txt +# Date: 2018-07-30, 19:40:00 GMT [KW] +# © 2018 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database @@ -239,6 +239,7 @@ FFF0..FFFF; Specials 10E60..10E7F; Rumi Numeral Symbols 10F00..10F2F; Old Sogdian 10F30..10F6F; Sogdian +10FE0..10FFF; Elymaic 11000..1107F; Brahmi 11080..110CF; Kaithi 110D0..110FF; Sora Sompeng @@ -259,6 +260,7 @@ FFF0..FFFF; Specials 11700..1173F; Ahom 11800..1184F; Dogra 118A0..118FF; Warang Citi +119A0..119FF; Nandinagari 11A00..11A4F; Zanabazar Square 11A50..11AAF; Soyombo 11AC0..11AFF; Pau Cin Hau @@ -267,10 +269,12 @@ FFF0..FFFF; Specials 11D00..11D5F; Masaram Gondi 11D60..11DAF; Gunjala Gondi 11EE0..11EFF; Makasar +11FC0..11FFF; Tamil Supplement 12000..123FF; Cuneiform 12400..1247F; Cuneiform Numbers and Punctuation 12480..1254F; Early Dynastic Cuneiform 13000..1342F; Egyptian Hieroglyphs +13430..1343F; Egyptian Hieroglyph Format Controls 14400..1467F; Anatolian Hieroglyphs 16800..16A3F; Bamum Supplement 16A40..16A6F; Mro @@ -283,6 +287,7 @@ FFF0..FFFF; Specials 18800..18AFF; Tangut Components 1B000..1B0FF; Kana Supplement 1B100..1B12F; Kana Extended-A +1B130..1B16F; Small Kana Extension 1B170..1B2FF; Nushu 1BC00..1BC9F; Duployan 1BCA0..1BCAF; Shorthand Format Controls @@ -295,9 +300,12 @@ FFF0..FFFF; Specials 1D400..1D7FF; Mathematical Alphanumeric Symbols 1D800..1DAAF; Sutton SignWriting 1E000..1E02F; Glagolitic Supplement +1E100..1E14F; Nyiakeng Puachue Hmong +1E2C0..1E2FF; Wancho 1E800..1E8DF; Mende Kikakui 1E900..1E95F; Adlam 1EC70..1ECBF; Indic Siyaq Numbers +1ED00..1ED4F; Ottoman Siyaq Numbers 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols 1F000..1F02F; Mahjong Tiles 1F030..1F09F; Domino Tiles @@ -313,6 +321,7 @@ FFF0..FFFF; Specials 1F800..1F8FF; Supplemental Arrows-C 1F900..1F9FF; Supplemental Symbols and Pictographs 1FA00..1FA6F; Chess Symbols +1FA70..1FAFF; Symbols and Pictographs Extended-A 20000..2A6DF; CJK Unified Ideographs Extension B 2A700..2B73F; CJK Unified Ideographs Extension C 2B740..2B81F; CJK Unified Ideographs Extension D diff --git a/admin/unidata/NormalizationTest.txt b/admin/unidata/NormalizationTest.txt index 72a31bcdf1..04c935c1f7 100644 --- a/admin/unidata/NormalizationTest.txt +++ b/admin/unidata/NormalizationTest.txt @@ -1,6 +1,6 @@ -# NormalizationTest-11.0.0.txt -# Date: 2018-02-19, 18:33:08 GMT -# © 2018 Unicode®, Inc. +# NormalizationTest-12.0.0.txt +# Date: 2019-01-22, 08:18:33 GMT +# © 2019 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -16363,6 +16363,7 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 1F14F;1F14F;1F14F;0057 0043;0057 0043; # (🅏; 🅏; 🅏; WC; WC; ) SQUARED WC 1F16A;1F16A;1F16A;004D 0043;004D 0043; # (🅪; 🅪; 🅪; MC; MC; ) RAISED MC SIGN 1F16B;1F16B;1F16B;004D 0044;004D 0044; # (🅫; 🅫; 🅫; MD; MD; ) RAISED MD SIGN +1F16C;1F16C;1F16C;004D 0052;004D 0052; # (🅬; 🅬; 🅬; MR; MR; ) RAISED MR SIGN 1F190;1F190;1F190;0044 004A;0044 004A; # (🆐; 🆐; 🆐; DJ; DJ; ) SQUARE DJ 1F200;1F200;1F200;307B 304B;307B 304B; # (🈀; 🈀; 🈀; ほか; ほか; ) SQUARE HIRAGANA HOKA 1F201;1F201;1F201;30B3 30B3;30B3 30B3; # (🈁; 🈁; 🈁; ココ; ココ; ) SQUARED KATAKANA KOKO @@ -17685,6 +17686,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 0061 0EB8 0EC8 0EB8 0E48 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; # (a◌ຸ◌່◌ຸ◌่b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B 0061 0EC8 0EB8 0E48 0EB9 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062; # (a◌່◌ຸ◌่◌ູb; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; ) LATIN SMALL LETTER A, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LAO VOWEL SIGN UU, LATIN SMALL LETTER B 0061 0EB9 0EC8 0EB8 0E48 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062; # (a◌ູ◌່◌ຸ◌่b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO VOWEL SIGN UU, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B +0061 05B0 094D 3099 0EBA 0062;0061 3099 094D 0EBA 05B0 0062;0061 3099 094D 0EBA 05B0 0062;0061 3099 094D 0EBA 05B0 0062;0061 3099 094D 0EBA 05B0 0062; # (a◌ְ◌्◌゙◌຺b; a◌゙◌्◌຺◌ְb; a◌゙◌्◌຺◌ְb; a◌゙◌्◌຺◌ְb; a◌゙◌्◌຺◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LAO SIGN PALI VIRAMA, LATIN SMALL LETTER B +0061 0EBA 05B0 094D 3099 0062;0061 3099 0EBA 094D 05B0 0062;0061 3099 0EBA 094D 05B0 0062;0061 3099 0EBA 094D 05B0 0062;0061 3099 0EBA 094D 05B0 0062; # (a◌຺◌ְ◌्◌゙b; a◌゙◌຺◌्◌ְb; a◌゙◌຺◌्◌ְb; a◌゙◌຺◌्◌ְb; a◌゙◌຺◌्◌ְb; ) LATIN SMALL LETTER A, LAO SIGN PALI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0F71 0EC8 0EB8 0EC8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; # (a◌ཱ◌່◌ຸ◌່b; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI EK, LATIN SMALL LETTER B 0061 0EC8 0F71 0EC8 0EB8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; # (a◌່◌ཱ◌່◌ຸb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI EK, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B 0061 0F71 0EC8 0EB8 0EC9 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062; # (a◌ཱ◌່◌ຸ◌້b; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI THO, LATIN SMALL LETTER B @@ -18453,6 +18456,8 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 0061 11839 05B0 094D 3099 0062;0061 3099 11839 094D 05B0 0062;0061 3099 11839 094D 05B0 0062;0061 3099 11839 094D 05B0 0062;0061 3099 11839 094D 05B0 0062; # (a◌𑠹◌ְ◌्◌゙b; a◌゙◌𑠹◌्◌ְb; a◌゙◌𑠹◌्◌ְb; a◌゙◌𑠹◌्◌ְb; a◌゙◌𑠹◌्◌ְb; ) LATIN SMALL LETTER A, DOGRA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 1183A 0062;0061 0334 093C 1183A 3099 0062;0061 0334 093C 1183A 3099 0062;0061 0334 093C 1183A 3099 0062;0061 0334 093C 1183A 3099 0062; # (a◌゙◌़◌̴◌𑠺b; a◌̴◌़◌𑠺◌゙b; a◌̴◌़◌𑠺◌゙b; a◌̴◌़◌𑠺◌゙b; a◌̴◌़◌𑠺◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, DOGRA SIGN NUKTA, LATIN SMALL LETTER B 0061 1183A 3099 093C 0334 0062;0061 0334 1183A 093C 3099 0062;0061 0334 1183A 093C 3099 0062;0061 0334 1183A 093C 3099 0062;0061 0334 1183A 093C 3099 0062; # (a◌𑠺◌゙◌़◌̴b; a◌̴◌𑠺◌़◌゙b; a◌̴◌𑠺◌़◌゙b; a◌̴◌𑠺◌़◌゙b; a◌̴◌𑠺◌़◌゙b; ) LATIN SMALL LETTER A, DOGRA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B +0061 05B0 094D 3099 119E0 0062;0061 3099 094D 119E0 05B0 0062;0061 3099 094D 119E0 05B0 0062;0061 3099 094D 119E0 05B0 0062;0061 3099 094D 119E0 05B0 0062; # (a◌ְ◌्◌゙◌𑧠b; a◌゙◌्◌𑧠◌ְb; a◌゙◌्◌𑧠◌ְb; a◌゙◌्◌𑧠◌ְb; a◌゙◌्◌𑧠◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, NANDINAGARI SIGN VIRAMA, LATIN SMALL LETTER B +0061 119E0 05B0 094D 3099 0062;0061 3099 119E0 094D 05B0 0062;0061 3099 119E0 094D 05B0 0062;0061 3099 119E0 094D 05B0 0062;0061 3099 119E0 094D 05B0 0062; # (a◌𑧠◌ְ◌्◌゙b; a◌゙◌𑧠◌्◌ְb; a◌゙◌𑧠◌्◌ְb; a◌゙◌𑧠◌्◌ְb; a◌゙◌𑧠◌्◌ְb; ) LATIN SMALL LETTER A, NANDINAGARI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 11A34 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062; # (a◌ְ◌्◌゙◌𑨴b; a◌゙◌्◌𑨴◌ְb; a◌゙◌्◌𑨴◌ְb; a◌゙◌्◌𑨴◌ְb; a◌゙◌्◌𑨴◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, ZANABAZAR SQUARE SIGN VIRAMA, LATIN SMALL LETTER B 0061 11A34 05B0 094D 3099 0062;0061 3099 11A34 094D 05B0 0062;0061 3099 11A34 094D 05B0 0062;0061 3099 11A34 094D 05B0 0062;0061 3099 11A34 094D 05B0 0062; # (a◌𑨴◌ְ◌्◌゙b; a◌゙◌𑨴◌्◌ְb; a◌゙◌𑨴◌्◌ְb; a◌゙◌𑨴◌्◌ְb; a◌゙◌𑨴◌्◌ְb; ) LATIN SMALL LETTER A, ZANABAZAR SQUARE SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 11A47 0062;0061 3099 094D 11A47 05B0 0062;0061 3099 094D 11A47 05B0 0062;0061 3099 094D 11A47 05B0 0062;0061 3099 094D 11A47 05B0 0062; # (a◌ְ◌्◌゙◌𑩇b; a◌゙◌्◌𑩇◌ְb; a◌゙◌्◌𑩇◌ְb; a◌゙◌्◌𑩇◌ְb; a◌゙◌्◌𑩇◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, ZANABAZAR SQUARE SUBJOINER, LATIN SMALL LETTER B @@ -18637,6 +18642,28 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 0061 1E029 0315 0300 05AE 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062; # (a◌𞀩◌̕◌̀◌֮b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER IOTATED BIG YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E02A 0062;00E0 05AE 1E02A 0315 0062;0061 05AE 0300 1E02A 0315 0062;00E0 05AE 1E02A 0315 0062;0061 05AE 0300 1E02A 0315 0062; # (a◌̕◌̀◌֮◌𞀪b; à◌֮◌𞀪◌̕b; a◌֮◌̀◌𞀪◌̕b; à◌֮◌𞀪◌̕b; a◌֮◌̀◌𞀪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER FITA, LATIN SMALL LETTER B 0061 1E02A 0315 0300 05AE 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062; # (a◌𞀪◌̕◌̀◌֮b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER FITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E130 0062;00E0 05AE 1E130 0315 0062;0061 05AE 0300 1E130 0315 0062;00E0 05AE 1E130 0315 0062;0061 05AE 0300 1E130 0315 0062; # (a◌̕◌̀◌֮◌𞄰b; à◌֮◌𞄰◌̕b; a◌֮◌̀◌𞄰◌̕b; à◌֮◌𞄰◌̕b; a◌֮◌̀◌𞄰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-B, LATIN SMALL LETTER B +0061 1E130 0315 0300 05AE 0062;0061 05AE 1E130 0300 0315 0062;0061 05AE 1E130 0300 0315 0062;0061 05AE 1E130 0300 0315 0062;0061 05AE 1E130 0300 0315 0062; # (a◌𞄰◌̕◌̀◌֮b; a◌֮◌𞄰◌̀◌̕b; a◌֮◌𞄰◌̀◌̕b; a◌֮◌𞄰◌̀◌̕b; a◌֮◌𞄰◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-B, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E131 0062;00E0 05AE 1E131 0315 0062;0061 05AE 0300 1E131 0315 0062;00E0 05AE 1E131 0315 0062;0061 05AE 0300 1E131 0315 0062; # (a◌̕◌̀◌֮◌𞄱b; à◌֮◌𞄱◌̕b; a◌֮◌̀◌𞄱◌̕b; à◌֮◌𞄱◌̕b; a◌֮◌̀◌𞄱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-M, LATIN SMALL LETTER B +0061 1E131 0315 0300 05AE 0062;0061 05AE 1E131 0300 0315 0062;0061 05AE 1E131 0300 0315 0062;0061 05AE 1E131 0300 0315 0062;0061 05AE 1E131 0300 0315 0062; # (a◌𞄱◌̕◌̀◌֮b; a◌֮◌𞄱◌̀◌̕b; a◌֮◌𞄱◌̀◌̕b; a◌֮◌𞄱◌̀◌̕b; a◌֮◌𞄱◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-M, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E132 0062;00E0 05AE 1E132 0315 0062;0061 05AE 0300 1E132 0315 0062;00E0 05AE 1E132 0315 0062;0061 05AE 0300 1E132 0315 0062; # (a◌̕◌̀◌֮◌𞄲b; à◌֮◌𞄲◌̕b; a◌֮◌̀◌𞄲◌̕b; à◌֮◌𞄲◌̕b; a◌֮◌̀◌𞄲◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-J, LATIN SMALL LETTER B +0061 1E132 0315 0300 05AE 0062;0061 05AE 1E132 0300 0315 0062;0061 05AE 1E132 0300 0315 0062;0061 05AE 1E132 0300 0315 0062;0061 05AE 1E132 0300 0315 0062; # (a◌𞄲◌̕◌̀◌֮b; a◌֮◌𞄲◌̀◌̕b; a◌֮◌𞄲◌̀◌̕b; a◌֮◌𞄲◌̀◌̕b; a◌֮◌𞄲◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-J, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E133 0062;00E0 05AE 1E133 0315 0062;0061 05AE 0300 1E133 0315 0062;00E0 05AE 1E133 0315 0062;0061 05AE 0300 1E133 0315 0062; # (a◌̕◌̀◌֮◌𞄳b; à◌֮◌𞄳◌̕b; a◌֮◌̀◌𞄳◌̕b; à◌֮◌𞄳◌̕b; a◌֮◌̀◌𞄳◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-V, LATIN SMALL LETTER B +0061 1E133 0315 0300 05AE 0062;0061 05AE 1E133 0300 0315 0062;0061 05AE 1E133 0300 0315 0062;0061 05AE 1E133 0300 0315 0062;0061 05AE 1E133 0300 0315 0062; # (a◌𞄳◌̕◌̀◌֮b; a◌֮◌𞄳◌̀◌̕b; a◌֮◌𞄳◌̀◌̕b; a◌֮◌𞄳◌̀◌̕b; a◌֮◌𞄳◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-V, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E134 0062;00E0 05AE 1E134 0315 0062;0061 05AE 0300 1E134 0315 0062;00E0 05AE 1E134 0315 0062;0061 05AE 0300 1E134 0315 0062; # (a◌̕◌̀◌֮◌𞄴b; à◌֮◌𞄴◌̕b; a◌֮◌̀◌𞄴◌̕b; à◌֮◌𞄴◌̕b; a◌֮◌̀◌𞄴◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-S, LATIN SMALL LETTER B +0061 1E134 0315 0300 05AE 0062;0061 05AE 1E134 0300 0315 0062;0061 05AE 1E134 0300 0315 0062;0061 05AE 1E134 0300 0315 0062;0061 05AE 1E134 0300 0315 0062; # (a◌𞄴◌̕◌̀◌֮b; a◌֮◌𞄴◌̀◌̕b; a◌֮◌𞄴◌̀◌̕b; a◌֮◌𞄴◌̀◌̕b; a◌֮◌𞄴◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-S, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E135 0062;00E0 05AE 1E135 0315 0062;0061 05AE 0300 1E135 0315 0062;00E0 05AE 1E135 0315 0062;0061 05AE 0300 1E135 0315 0062; # (a◌̕◌̀◌֮◌𞄵b; à◌֮◌𞄵◌̕b; a◌֮◌̀◌𞄵◌̕b; à◌֮◌𞄵◌̕b; a◌֮◌̀◌𞄵◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-G, LATIN SMALL LETTER B +0061 1E135 0315 0300 05AE 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062; # (a◌𞄵◌̕◌̀◌֮b; a◌֮◌𞄵◌̀◌̕b; a◌֮◌𞄵◌̀◌̕b; a◌֮◌𞄵◌̀◌̕b; a◌֮◌𞄵◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-G, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E136 0062;00E0 05AE 1E136 0315 0062;0061 05AE 0300 1E136 0315 0062;00E0 05AE 1E136 0315 0062;0061 05AE 0300 1E136 0315 0062; # (a◌̕◌̀◌֮◌𞄶b; à◌֮◌𞄶◌̕b; a◌֮◌̀◌𞄶◌̕b; à◌֮◌𞄶◌̕b; a◌֮◌̀◌𞄶◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-D, LATIN SMALL LETTER B +0061 1E136 0315 0300 05AE 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062; # (a◌𞄶◌̕◌̀◌֮b; a◌֮◌𞄶◌̀◌̕b; a◌֮◌𞄶◌̀◌̕b; a◌֮◌𞄶◌̀◌̕b; a◌֮◌𞄶◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-D, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E2EC 0062;00E0 05AE 1E2EC 0315 0062;0061 05AE 0300 1E2EC 0315 0062;00E0 05AE 1E2EC 0315 0062;0061 05AE 0300 1E2EC 0315 0062; # (a◌̕◌̀◌֮◌𞋬b; à◌֮◌𞋬◌̕b; a◌֮◌̀◌𞋬◌̕b; à◌֮◌𞋬◌̕b; a◌֮◌̀◌𞋬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, WANCHO TONE TUP, LATIN SMALL LETTER B +0061 1E2EC 0315 0300 05AE 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062; # (a◌𞋬◌̕◌̀◌֮b; a◌֮◌𞋬◌̀◌̕b; a◌֮◌𞋬◌̀◌̕b; a◌֮◌𞋬◌̀◌̕b; a◌֮◌𞋬◌̀◌̕b; ) LATIN SMALL LETTER A, WANCHO TONE TUP, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E2ED 0062;00E0 05AE 1E2ED 0315 0062;0061 05AE 0300 1E2ED 0315 0062;00E0 05AE 1E2ED 0315 0062;0061 05AE 0300 1E2ED 0315 0062; # (a◌̕◌̀◌֮◌𞋭b; à◌֮◌𞋭◌̕b; a◌֮◌̀◌𞋭◌̕b; à◌֮◌𞋭◌̕b; a◌֮◌̀◌𞋭◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, WANCHO TONE TUPNI, LATIN SMALL LETTER B +0061 1E2ED 0315 0300 05AE 0062;0061 05AE 1E2ED 0300 0315 0062;0061 05AE 1E2ED 0300 0315 0062;0061 05AE 1E2ED 0300 0315 0062;0061 05AE 1E2ED 0300 0315 0062; # (a◌𞋭◌̕◌̀◌֮b; a◌֮◌𞋭◌̀◌̕b; a◌֮◌𞋭◌̀◌̕b; a◌֮◌𞋭◌̀◌̕b; a◌֮◌𞋭◌̀◌̕b; ) LATIN SMALL LETTER A, WANCHO TONE TUPNI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E2EE 0062;00E0 05AE 1E2EE 0315 0062;0061 05AE 0300 1E2EE 0315 0062;00E0 05AE 1E2EE 0315 0062;0061 05AE 0300 1E2EE 0315 0062; # (a◌̕◌̀◌֮◌𞋮b; à◌֮◌𞋮◌̕b; a◌֮◌̀◌𞋮◌̕b; à◌֮◌𞋮◌̕b; a◌֮◌̀◌𞋮◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, WANCHO TONE KOI, LATIN SMALL LETTER B +0061 1E2EE 0315 0300 05AE 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062; # (a◌𞋮◌̕◌̀◌֮b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; ) LATIN SMALL LETTER A, WANCHO TONE KOI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E2EF 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062; # (a◌̕◌̀◌֮◌𞋯b; à◌֮◌𞋯◌̕b; a◌֮◌̀◌𞋯◌̕b; à◌֮◌𞋯◌̕b; a◌֮◌̀◌𞋯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, WANCHO TONE KOINI, LATIN SMALL LETTER B +0061 1E2EF 0315 0300 05AE 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062; # (a◌𞋯◌̕◌̀◌֮b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; ) LATIN SMALL LETTER A, WANCHO TONE KOINI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D0 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062; # (a◌֚◌̖◌〪◌𞣐b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER TEENS, LATIN SMALL LETTER B 0061 1E8D0 059A 0316 302A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062; # (a◌𞣐◌֚◌̖◌〪b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER TEENS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D1 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062; # (a◌֚◌̖◌〪◌𞣑b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER TENS, LATIN SMALL LETTER B diff --git a/admin/unidata/SpecialCasing.txt b/admin/unidata/SpecialCasing.txt index c90d09acb3..7db2e31ab0 100644 --- a/admin/unidata/SpecialCasing.txt +++ b/admin/unidata/SpecialCasing.txt @@ -1,6 +1,6 @@ -# SpecialCasing-11.0.0.txt -# Date: 2018-02-22, 06:16:47 GMT -# © 2018 Unicode®, Inc. +# SpecialCasing-12.0.0.txt +# Date: 2019-01-22, 08:18:50 GMT +# © 2019 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/admin/unidata/UnicodeData.txt b/admin/unidata/UnicodeData.txt index ec32fafbce..d88a60135f 100644 --- a/admin/unidata/UnicodeData.txt +++ b/admin/unidata/UnicodeData.txt @@ -640,7 +640,7 @@ 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; -0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; +0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;A7C5;;A7C5 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; @@ -2809,6 +2809,7 @@ 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0C77;TELUGU SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; 0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; @@ -3203,14 +3204,24 @@ 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; +0E86;LAO LETTER PALI GHA;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; +0E89;LAO LETTER PALI CHA;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; +0E8C;LAO LETTER PALI JHA;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; +0E8E;LAO LETTER PALI NYA;Lo;0;L;;;;;N;;;;; +0E8F;LAO LETTER PALI TTA;Lo;0;L;;;;;N;;;;; +0E90;LAO LETTER PALI TTHA;Lo;0;L;;;;;N;;;;; +0E91;LAO LETTER PALI DDA;Lo;0;L;;;;;N;;;;; +0E92;LAO LETTER PALI DDHA;Lo;0;L;;;;;N;;;;; +0E93;LAO LETTER PALI NNA;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; +0E98;LAO LETTER PALI DHA;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; @@ -3218,13 +3229,17 @@ 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; +0EA0;LAO LETTER PALI BHA;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; +0EA8;LAO LETTER SANSKRIT SHA;Lo;0;L;;;;;N;;;;; +0EA9;LAO LETTER SANSKRIT SSA;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; +0EAC;LAO LETTER PALI LLA;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; @@ -3238,6 +3253,7 @@ 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; +0EBA;LAO SIGN PALI VIRAMA;Mn;9;NSM;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; @@ -5079,7 +5095,7 @@ 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; -166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; +166D;CANADIAN SYLLABICS CHI SIGN;So;0;L;;;;;N;;;;; 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; @@ -6488,14 +6504,15 @@ 1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;; -1CF2;VEDIC SIGN ARDHAVISARGA;Mc;0;L;;;;;N;;;;; -1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Mc;0;L;;;;;N;;;;; +1CF2;VEDIC SIGN ARDHAVISARGA;Lo;0;L;;;;;N;;;;; +1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Lo;0;L;;;;;N;;;;; 1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;; 1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;; +1CFA;VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; @@ -6638,7 +6655,7 @@ 1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; -1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C6;;A7C6 1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; @@ -10165,6 +10182,7 @@ 2BC6;BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC7;BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC8;BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; +2BC9;NEPTUNE FORM TWO;So;0;ON;;;;;N;;;;; 2BCA;TOP HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCB;BOTTOM HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCC;LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; @@ -10218,6 +10236,7 @@ 2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;; 2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;; 2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;; +2BFF;HELLSCHREIBER PAUSE SYMBOL;So;0;ON;;;;;N;;;;; 2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; 2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; 2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; @@ -10756,6 +10775,7 @@ 2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;; 2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;; 2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;; +2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; @@ -14060,7 +14080,7 @@ A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791; A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790 A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793; A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792 -A794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +A794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C4;;A7C4 A795;LATIN SMALL LETTER H WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; A796;LATIN CAPITAL LETTER B WITH FLOURISH;Lu;0;L;;;;;N;;;;A797; A797;LATIN SMALL LETTER B WITH FLOURISH;Ll;0;L;;;;;N;;;A796;;A796 @@ -14098,6 +14118,17 @@ A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7; A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6 A7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9; A7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8 +A7BA;LATIN CAPITAL LETTER GLOTTAL A;Lu;0;L;;;;;N;;;;A7BB; +A7BB;LATIN SMALL LETTER GLOTTAL A;Ll;0;L;;;;;N;;;A7BA;;A7BA +A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD; +A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC +A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF; +A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE +A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3; +A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2 +A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794; +A7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282; +A7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E; A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L; 0126;;;;N;;;;; A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L; 0153;;;;N;;;;; @@ -14506,7 +14537,7 @@ A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;; A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;; A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; -A9BD;JAVANESE CONSONANT SIGN KERET;Mc;0;L;;;;;N;;;;; +A9BD;JAVANESE CONSONANT SIGN KERET;Mn;0;NSM;;;;;N;;;;; A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;; A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;; A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;; @@ -14863,6 +14894,8 @@ AB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;; AB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;; AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;; AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;; +AB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +AB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0 AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1 AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2 @@ -19105,6 +19138,29 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;; 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; +10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; +10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; +10FE3;ELYMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; +10FE4;ELYMAIC LETTER HE;Lo;0;R;;;;;N;;;;; +10FE5;ELYMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; +10FE6;ELYMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10FE7;ELYMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; +10FE8;ELYMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; +10FE9;ELYMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; +10FEA;ELYMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; +10FEB;ELYMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10FEC;ELYMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; +10FED;ELYMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; +10FEE;ELYMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10FEF;ELYMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; +10FF0;ELYMAIC LETTER PE;Lo;0;R;;;;;N;;;;; +10FF1;ELYMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; +10FF2;ELYMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; +10FF3;ELYMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; +10FF4;ELYMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; +10FF5;ELYMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; +10FF6;ELYMAIC LIGATURE ZAYIN-YODH;Lo;0;R;;;;;N;;;;; 11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;; @@ -19887,6 +19943,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;; 1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;; 1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;; +1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;; 11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;; 11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;; @@ -20209,6 +20266,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -20421,6 +20479,71 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;; 118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;; +119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;; +119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;; +119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;; +119A3;NANDINAGARI LETTER II;Lo;0;L;;;;;N;;;;; +119A4;NANDINAGARI LETTER U;Lo;0;L;;;;;N;;;;; +119A5;NANDINAGARI LETTER UU;Lo;0;L;;;;;N;;;;; +119A6;NANDINAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +119A7;NANDINAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +119AA;NANDINAGARI LETTER E;Lo;0;L;;;;;N;;;;; +119AB;NANDINAGARI LETTER AI;Lo;0;L;;;;;N;;;;; +119AC;NANDINAGARI LETTER O;Lo;0;L;;;;;N;;;;; +119AD;NANDINAGARI LETTER AU;Lo;0;L;;;;;N;;;;; +119AE;NANDINAGARI LETTER KA;Lo;0;L;;;;;N;;;;; +119AF;NANDINAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; +119B0;NANDINAGARI LETTER GA;Lo;0;L;;;;;N;;;;; +119B1;NANDINAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; +119B2;NANDINAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; +119B3;NANDINAGARI LETTER CA;Lo;0;L;;;;;N;;;;; +119B4;NANDINAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; +119B5;NANDINAGARI LETTER JA;Lo;0;L;;;;;N;;;;; +119B6;NANDINAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; +119B7;NANDINAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; +119B8;NANDINAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; +119B9;NANDINAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; +119BA;NANDINAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; +119BB;NANDINAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; +119BC;NANDINAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; +119BD;NANDINAGARI LETTER TA;Lo;0;L;;;;;N;;;;; +119BE;NANDINAGARI LETTER THA;Lo;0;L;;;;;N;;;;; +119BF;NANDINAGARI LETTER DA;Lo;0;L;;;;;N;;;;; +119C0;NANDINAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; +119C1;NANDINAGARI LETTER NA;Lo;0;L;;;;;N;;;;; +119C2;NANDINAGARI LETTER PA;Lo;0;L;;;;;N;;;;; +119C3;NANDINAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; +119C4;NANDINAGARI LETTER BA;Lo;0;L;;;;;N;;;;; +119C5;NANDINAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; +119C6;NANDINAGARI LETTER MA;Lo;0;L;;;;;N;;;;; +119C7;NANDINAGARI LETTER YA;Lo;0;L;;;;;N;;;;; +119C8;NANDINAGARI LETTER RA;Lo;0;L;;;;;N;;;;; +119C9;NANDINAGARI LETTER LA;Lo;0;L;;;;;N;;;;; +119CA;NANDINAGARI LETTER VA;Lo;0;L;;;;;N;;;;; +119CB;NANDINAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; +119CC;NANDINAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; +119CD;NANDINAGARI LETTER SA;Lo;0;L;;;;;N;;;;; +119CE;NANDINAGARI LETTER HA;Lo;0;L;;;;;N;;;;; +119CF;NANDINAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; +119D0;NANDINAGARI LETTER RRA;Lo;0;L;;;;;N;;;;; +119D1;NANDINAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +119D2;NANDINAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +119D3;NANDINAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +119D4;NANDINAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +119D5;NANDINAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +119D6;NANDINAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +119D7;NANDINAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +119DA;NANDINAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +119DB;NANDINAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +119DC;NANDINAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +119DD;NANDINAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +119DE;NANDINAGARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +119DF;NANDINAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +119E0;NANDINAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +119E1;NANDINAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +119E2;NANDINAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;; +119E3;NANDINAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; +119E4;NANDINAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 11A00;ZANABAZAR SQUARE LETTER A;Lo;0;L;;;;;N;;;;; 11A01;ZANABAZAR SQUARE VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11A02;ZANABAZAR SQUARE VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; @@ -20545,6 +20668,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11A81;SOYOMBO LETTER SA;Lo;0;L;;;;;N;;;;; 11A82;SOYOMBO LETTER HA;Lo;0;L;;;;;N;;;;; 11A83;SOYOMBO LETTER KSSA;Lo;0;L;;;;;N;;;;; +11A84;SOYOMBO SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; +11A85;SOYOMBO SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11A86;SOYOMBO CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;; 11A87;SOYOMBO CLUSTER-INITIAL LETTER LA;Lo;0;L;;;;;N;;;;; 11A88;SOYOMBO CLUSTER-INITIAL LETTER SHA;Lo;0;L;;;;;N;;;;; @@ -20959,6 +21084,57 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;; 11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;; +11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;; +11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; +11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;; +11FC3;TAMIL FRACTION ONE SIXTY-FOURTH;No;0;L;;;;1/64;N;;;;; +11FC4;TAMIL FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;; +11FC5;TAMIL FRACTION ONE THIRTY-SECOND;No;0;L;;;;1/32;N;;;;; +11FC6;TAMIL FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;; +11FC7;TAMIL FRACTION THREE SIXTY-FOURTHS;No;0;L;;;;3/64;N;;;;; +11FC8;TAMIL FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;; +11FC9;TAMIL FRACTION ONE SIXTEENTH-1;No;0;L;;;;1/16;N;;;;; +11FCA;TAMIL FRACTION ONE SIXTEENTH-2;No;0;L;;;;1/16;N;;;;; +11FCB;TAMIL FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;; +11FCC;TAMIL FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; +11FCD;TAMIL FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;; +11FCE;TAMIL FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; +11FCF;TAMIL FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;; +11FD0;TAMIL FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; +11FD1;TAMIL FRACTION ONE HALF-1;No;0;L;;;;1/2;N;;;;; +11FD2;TAMIL FRACTION ONE HALF-2;No;0;L;;;;1/2;N;;;;; +11FD3;TAMIL FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; +11FD4;TAMIL FRACTION DOWNSCALING FACTOR KIIZH;No;0;L;;;;1/320;N;;;;; +11FD5;TAMIL SIGN NEL;So;0;ON;;;;;N;;;;; +11FD6;TAMIL SIGN CEVITU;So;0;ON;;;;;N;;;;; +11FD7;TAMIL SIGN AAZHAAKKU;So;0;ON;;;;;N;;;;; +11FD8;TAMIL SIGN UZHAKKU;So;0;ON;;;;;N;;;;; +11FD9;TAMIL SIGN MUUVUZHAKKU;So;0;ON;;;;;N;;;;; +11FDA;TAMIL SIGN KURUNI;So;0;ON;;;;;N;;;;; +11FDB;TAMIL SIGN PATHAKKU;So;0;ON;;;;;N;;;;; +11FDC;TAMIL SIGN MUKKURUNI;So;0;ON;;;;;N;;;;; +11FDD;TAMIL SIGN KAACU;Sc;0;ET;;;;;N;;;;; +11FDE;TAMIL SIGN PANAM;Sc;0;ET;;;;;N;;;;; +11FDF;TAMIL SIGN PON;Sc;0;ET;;;;;N;;;;; +11FE0;TAMIL SIGN VARAAKAN;Sc;0;ET;;;;;N;;;;; +11FE1;TAMIL SIGN PAARAM;So;0;ON;;;;;N;;;;; +11FE2;TAMIL SIGN KUZHI;So;0;ON;;;;;N;;;;; +11FE3;TAMIL SIGN VELI;So;0;ON;;;;;N;;;;; +11FE4;TAMIL WET CULTIVATION SIGN;So;0;ON;;;;;N;;;;; +11FE5;TAMIL DRY CULTIVATION SIGN;So;0;ON;;;;;N;;;;; +11FE6;TAMIL LAND SIGN;So;0;ON;;;;;N;;;;; +11FE7;TAMIL SALT PAN SIGN;So;0;ON;;;;;N;;;;; +11FE8;TAMIL TRADITIONAL CREDIT SIGN;So;0;ON;;;;;N;;;;; +11FE9;TAMIL TRADITIONAL NUMBER SIGN;So;0;ON;;;;;N;;;;; +11FEA;TAMIL CURRENT SIGN;So;0;ON;;;;;N;;;;; +11FEB;TAMIL AND ODD SIGN;So;0;ON;;;;;N;;;;; +11FEC;TAMIL SPENT SIGN;So;0;ON;;;;;N;;;;; +11FED;TAMIL TOTAL SIGN;So;0;ON;;;;;N;;;;; +11FEE;TAMIL IN POSSESSION SIGN;So;0;ON;;;;;N;;;;; +11FEF;TAMIL STARTING FROM SIGN;So;0;ON;;;;;N;;;;; +11FF0;TAMIL SIGN MUTHALIYA;So;0;ON;;;;;N;;;;; +11FF1;TAMIL SIGN VAKAIYARAA;So;0;ON;;;;;N;;;;; +11FFF;TAMIL PUNCTUATION END OF TEXT;Po;0;L;;;;;N;;;;; 12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; 12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; 12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; @@ -23264,6 +23440,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; 1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; 1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; +13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;; +13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;; +13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;; +13433;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START;Cf;0;L;;;;;N;;;;; +13434;EGYPTIAN HIEROGLYPH INSERT AT TOP END;Cf;0;L;;;;;N;;;;; +13435;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END;Cf;0;L;;;;;N;;;;; +13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;; +13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;; +13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -24782,6 +24967,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;; 16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;; 16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;; +16F45;MIAO LETTER BRI;Lo;0;L;;;;;N;;;;; +16F46;MIAO LETTER SYI;Lo;0;L;;;;;N;;;;; +16F47;MIAO LETTER DZYI;Lo;0;L;;;;;N;;;;; +16F48;MIAO LETTER TE;Lo;0;L;;;;;N;;;;; +16F49;MIAO LETTER TSE;Lo;0;L;;;;;N;;;;; +16F4A;MIAO LETTER RTE;Lo;0;L;;;;;N;;;;; +16F4F;MIAO SIGN CONSONANT MODIFIER BAR;Mn;0;NSM;;;;;N;;;;; 16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;; 16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;; 16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;; @@ -24829,6 +25021,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;; 16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;; 16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;; +16F7F;MIAO VOWEL SIGN UOG;Mc;0;L;;;;;N;;;;; +16F80;MIAO VOWEL SIGN YUI;Mc;0;L;;;;;N;;;;; +16F81;MIAO VOWEL SIGN OG;Mc;0;L;;;;;N;;;;; +16F82;MIAO VOWEL SIGN OER;Mc;0;L;;;;;N;;;;; +16F83;MIAO VOWEL SIGN VW;Mc;0;L;;;;;N;;;;; +16F84;MIAO VOWEL SIGN IG;Mc;0;L;;;;;N;;;;; +16F85;MIAO VOWEL SIGN EA;Mc;0;L;;;;;N;;;;; +16F86;MIAO VOWEL SIGN IONG;Mc;0;L;;;;;N;;;;; +16F87;MIAO VOWEL SIGN UI;Mc;0;L;;;;;N;;;;; 16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;; 16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;; 16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;; @@ -24848,8 +25049,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;; 16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;; 16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;; +16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;; +16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;; 17000;;Lo;0;L;;;;;N;;;;; -187F1;;Lo;0;L;;;;;N;;;;; +187F7;;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; @@ -25892,6 +26095,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;; 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;; 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;; +1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; +1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; +1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; +1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; +1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; +1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; +1B167;KATAKANA LETTER SMALL N;Lo;0;L;;;;;N;;;;; 1B170;NUSHU CHARACTER-1B170;Lo;0;L;;;;;N;;;;; 1B171;NUSHU CHARACTER-1B171;Lo;0;L;;;;;N;;;;; 1B172;NUSHU CHARACTER-1B172;Lo;0;L;;;;;N;;;;; @@ -28820,6 +29030,136 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; +1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;; +1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;; +1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;; +1E103;NYIAKENG PUACHUE HMONG LETTER TA;Lo;0;L;;;;;N;;;;; +1E104;NYIAKENG PUACHUE HMONG LETTER HA;Lo;0;L;;;;;N;;;;; +1E105;NYIAKENG PUACHUE HMONG LETTER NA;Lo;0;L;;;;;N;;;;; +1E106;NYIAKENG PUACHUE HMONG LETTER XA;Lo;0;L;;;;;N;;;;; +1E107;NYIAKENG PUACHUE HMONG LETTER NKA;Lo;0;L;;;;;N;;;;; +1E108;NYIAKENG PUACHUE HMONG LETTER CA;Lo;0;L;;;;;N;;;;; +1E109;NYIAKENG PUACHUE HMONG LETTER LA;Lo;0;L;;;;;N;;;;; +1E10A;NYIAKENG PUACHUE HMONG LETTER SA;Lo;0;L;;;;;N;;;;; +1E10B;NYIAKENG PUACHUE HMONG LETTER ZA;Lo;0;L;;;;;N;;;;; +1E10C;NYIAKENG PUACHUE HMONG LETTER NCA;Lo;0;L;;;;;N;;;;; +1E10D;NYIAKENG PUACHUE HMONG LETTER NTSA;Lo;0;L;;;;;N;;;;; +1E10E;NYIAKENG PUACHUE HMONG LETTER KA;Lo;0;L;;;;;N;;;;; +1E10F;NYIAKENG PUACHUE HMONG LETTER DA;Lo;0;L;;;;;N;;;;; +1E110;NYIAKENG PUACHUE HMONG LETTER NYA;Lo;0;L;;;;;N;;;;; +1E111;NYIAKENG PUACHUE HMONG LETTER NRA;Lo;0;L;;;;;N;;;;; +1E112;NYIAKENG PUACHUE HMONG LETTER VA;Lo;0;L;;;;;N;;;;; +1E113;NYIAKENG PUACHUE HMONG LETTER NTXA;Lo;0;L;;;;;N;;;;; +1E114;NYIAKENG PUACHUE HMONG LETTER TXA;Lo;0;L;;;;;N;;;;; +1E115;NYIAKENG PUACHUE HMONG LETTER FA;Lo;0;L;;;;;N;;;;; +1E116;NYIAKENG PUACHUE HMONG LETTER RA;Lo;0;L;;;;;N;;;;; +1E117;NYIAKENG PUACHUE HMONG LETTER QA;Lo;0;L;;;;;N;;;;; +1E118;NYIAKENG PUACHUE HMONG LETTER YA;Lo;0;L;;;;;N;;;;; +1E119;NYIAKENG PUACHUE HMONG LETTER NQA;Lo;0;L;;;;;N;;;;; +1E11A;NYIAKENG PUACHUE HMONG LETTER PA;Lo;0;L;;;;;N;;;;; +1E11B;NYIAKENG PUACHUE HMONG LETTER XYA;Lo;0;L;;;;;N;;;;; +1E11C;NYIAKENG PUACHUE HMONG LETTER NPA;Lo;0;L;;;;;N;;;;; +1E11D;NYIAKENG PUACHUE HMONG LETTER DLA;Lo;0;L;;;;;N;;;;; +1E11E;NYIAKENG PUACHUE HMONG LETTER NPLA;Lo;0;L;;;;;N;;;;; +1E11F;NYIAKENG PUACHUE HMONG LETTER HAH;Lo;0;L;;;;;N;;;;; +1E120;NYIAKENG PUACHUE HMONG LETTER MLA;Lo;0;L;;;;;N;;;;; +1E121;NYIAKENG PUACHUE HMONG LETTER PLA;Lo;0;L;;;;;N;;;;; +1E122;NYIAKENG PUACHUE HMONG LETTER GA;Lo;0;L;;;;;N;;;;; +1E123;NYIAKENG PUACHUE HMONG LETTER RRA;Lo;0;L;;;;;N;;;;; +1E124;NYIAKENG PUACHUE HMONG LETTER A;Lo;0;L;;;;;N;;;;; +1E125;NYIAKENG PUACHUE HMONG LETTER AA;Lo;0;L;;;;;N;;;;; +1E126;NYIAKENG PUACHUE HMONG LETTER I;Lo;0;L;;;;;N;;;;; +1E127;NYIAKENG PUACHUE HMONG LETTER U;Lo;0;L;;;;;N;;;;; +1E128;NYIAKENG PUACHUE HMONG LETTER O;Lo;0;L;;;;;N;;;;; +1E129;NYIAKENG PUACHUE HMONG LETTER OO;Lo;0;L;;;;;N;;;;; +1E12A;NYIAKENG PUACHUE HMONG LETTER E;Lo;0;L;;;;;N;;;;; +1E12B;NYIAKENG PUACHUE HMONG LETTER EE;Lo;0;L;;;;;N;;;;; +1E12C;NYIAKENG PUACHUE HMONG LETTER W;Lo;0;L;;;;;N;;;;; +1E130;NYIAKENG PUACHUE HMONG TONE-B;Mn;230;NSM;;;;;N;;;;; +1E131;NYIAKENG PUACHUE HMONG TONE-M;Mn;230;NSM;;;;;N;;;;; +1E132;NYIAKENG PUACHUE HMONG TONE-J;Mn;230;NSM;;;;;N;;;;; +1E133;NYIAKENG PUACHUE HMONG TONE-V;Mn;230;NSM;;;;;N;;;;; +1E134;NYIAKENG PUACHUE HMONG TONE-S;Mn;230;NSM;;;;;N;;;;; +1E135;NYIAKENG PUACHUE HMONG TONE-G;Mn;230;NSM;;;;;N;;;;; +1E136;NYIAKENG PUACHUE HMONG TONE-D;Mn;230;NSM;;;;;N;;;;; +1E137;NYIAKENG PUACHUE HMONG SIGN FOR PERSON;Lm;0;L;;;;;N;;;;; +1E138;NYIAKENG PUACHUE HMONG SIGN FOR THING;Lm;0;L;;;;;N;;;;; +1E139;NYIAKENG PUACHUE HMONG SIGN FOR LOCATION;Lm;0;L;;;;;N;;;;; +1E13A;NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL;Lm;0;L;;;;;N;;;;; +1E13B;NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE;Lm;0;L;;;;;N;;;;; +1E13C;NYIAKENG PUACHUE HMONG SIGN XW XW;Lm;0;L;;;;;N;;;;; +1E13D;NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; +1E140;NYIAKENG PUACHUE HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1E141;NYIAKENG PUACHUE HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1E142;NYIAKENG PUACHUE HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1E143;NYIAKENG PUACHUE HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1E144;NYIAKENG PUACHUE HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1E145;NYIAKENG PUACHUE HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1E146;NYIAKENG PUACHUE HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1E147;NYIAKENG PUACHUE HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1E148;NYIAKENG PUACHUE HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;; +1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;; +1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;; +1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;; +1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;; +1E2C3;WANCHO LETTER CA;Lo;0;L;;;;;N;;;;; +1E2C4;WANCHO LETTER DA;Lo;0;L;;;;;N;;;;; +1E2C5;WANCHO LETTER GA;Lo;0;L;;;;;N;;;;; +1E2C6;WANCHO LETTER YA;Lo;0;L;;;;;N;;;;; +1E2C7;WANCHO LETTER PHA;Lo;0;L;;;;;N;;;;; +1E2C8;WANCHO LETTER LA;Lo;0;L;;;;;N;;;;; +1E2C9;WANCHO LETTER NA;Lo;0;L;;;;;N;;;;; +1E2CA;WANCHO LETTER PA;Lo;0;L;;;;;N;;;;; +1E2CB;WANCHO LETTER TA;Lo;0;L;;;;;N;;;;; +1E2CC;WANCHO LETTER THA;Lo;0;L;;;;;N;;;;; +1E2CD;WANCHO LETTER FA;Lo;0;L;;;;;N;;;;; +1E2CE;WANCHO LETTER SA;Lo;0;L;;;;;N;;;;; +1E2CF;WANCHO LETTER SHA;Lo;0;L;;;;;N;;;;; +1E2D0;WANCHO LETTER JA;Lo;0;L;;;;;N;;;;; +1E2D1;WANCHO LETTER ZA;Lo;0;L;;;;;N;;;;; +1E2D2;WANCHO LETTER WA;Lo;0;L;;;;;N;;;;; +1E2D3;WANCHO LETTER VA;Lo;0;L;;;;;N;;;;; +1E2D4;WANCHO LETTER KA;Lo;0;L;;;;;N;;;;; +1E2D5;WANCHO LETTER O;Lo;0;L;;;;;N;;;;; +1E2D6;WANCHO LETTER AU;Lo;0;L;;;;;N;;;;; +1E2D7;WANCHO LETTER RA;Lo;0;L;;;;;N;;;;; +1E2D8;WANCHO LETTER MA;Lo;0;L;;;;;N;;;;; +1E2D9;WANCHO LETTER KHA;Lo;0;L;;;;;N;;;;; +1E2DA;WANCHO LETTER HA;Lo;0;L;;;;;N;;;;; +1E2DB;WANCHO LETTER E;Lo;0;L;;;;;N;;;;; +1E2DC;WANCHO LETTER I;Lo;0;L;;;;;N;;;;; +1E2DD;WANCHO LETTER NGA;Lo;0;L;;;;;N;;;;; +1E2DE;WANCHO LETTER U;Lo;0;L;;;;;N;;;;; +1E2DF;WANCHO LETTER LLHA;Lo;0;L;;;;;N;;;;; +1E2E0;WANCHO LETTER TSA;Lo;0;L;;;;;N;;;;; +1E2E1;WANCHO LETTER TRA;Lo;0;L;;;;;N;;;;; +1E2E2;WANCHO LETTER ONG;Lo;0;L;;;;;N;;;;; +1E2E3;WANCHO LETTER AANG;Lo;0;L;;;;;N;;;;; +1E2E4;WANCHO LETTER ANG;Lo;0;L;;;;;N;;;;; +1E2E5;WANCHO LETTER ING;Lo;0;L;;;;;N;;;;; +1E2E6;WANCHO LETTER ON;Lo;0;L;;;;;N;;;;; +1E2E7;WANCHO LETTER EN;Lo;0;L;;;;;N;;;;; +1E2E8;WANCHO LETTER AAN;Lo;0;L;;;;;N;;;;; +1E2E9;WANCHO LETTER NYA;Lo;0;L;;;;;N;;;;; +1E2EA;WANCHO LETTER UEN;Lo;0;L;;;;;N;;;;; +1E2EB;WANCHO LETTER YIH;Lo;0;L;;;;;N;;;;; +1E2EC;WANCHO TONE TUP;Mn;230;NSM;;;;;N;;;;; +1E2ED;WANCHO TONE TUPNI;Mn;230;NSM;;;;;N;;;;; +1E2EE;WANCHO TONE KOI;Mn;230;NSM;;;;;N;;;;; +1E2EF;WANCHO TONE KOINI;Mn;230;NSM;;;;;N;;;;; +1E2F0;WANCHO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1E2F1;WANCHO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1E2F2;WANCHO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1E2F3;WANCHO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1E2F4;WANCHO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1E2F5;WANCHO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1E2F6;WANCHO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1E2F7;WANCHO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; @@ -29108,6 +29448,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;; +1E94B;ADLAM NASALIZATION MARK;Lm;0;R;;;;;N;;;;; 1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; @@ -29188,6 +29529,67 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;; 1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;; 1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;; +1ED01;OTTOMAN SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;; +1ED02;OTTOMAN SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;; +1ED03;OTTOMAN SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;; +1ED04;OTTOMAN SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;; +1ED05;OTTOMAN SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;; +1ED06;OTTOMAN SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;; +1ED07;OTTOMAN SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;; +1ED08;OTTOMAN SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;; +1ED09;OTTOMAN SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;; +1ED0A;OTTOMAN SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;; +1ED0B;OTTOMAN SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;; +1ED0C;OTTOMAN SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;; +1ED0D;OTTOMAN SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;; +1ED0E;OTTOMAN SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;; +1ED0F;OTTOMAN SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;; +1ED10;OTTOMAN SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;; +1ED11;OTTOMAN SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;; +1ED12;OTTOMAN SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;; +1ED13;OTTOMAN SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;; +1ED14;OTTOMAN SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;; +1ED15;OTTOMAN SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;; +1ED16;OTTOMAN SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; +1ED17;OTTOMAN SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;; +1ED18;OTTOMAN SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; +1ED19;OTTOMAN SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;; +1ED1A;OTTOMAN SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;; +1ED1B;OTTOMAN SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;; +1ED1C;OTTOMAN SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;; +1ED1D;OTTOMAN SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; +1ED1E;OTTOMAN SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;; +1ED1F;OTTOMAN SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;; +1ED20;OTTOMAN SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;; +1ED21;OTTOMAN SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;; +1ED22;OTTOMAN SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;; +1ED23;OTTOMAN SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;; +1ED24;OTTOMAN SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;; +1ED25;OTTOMAN SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; +1ED26;OTTOMAN SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;; +1ED27;OTTOMAN SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;; +1ED28;OTTOMAN SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;; +1ED29;OTTOMAN SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;; +1ED2A;OTTOMAN SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;; +1ED2B;OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;; +1ED2C;OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;; +1ED2D;OTTOMAN SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;; +1ED2E;OTTOMAN SIYAQ MARRATAN;So;0;AL;;;;;N;;;;; +1ED2F;OTTOMAN SIYAQ ALTERNATE NUMBER TWO;No;0;AL;;;;2;N;;;;; +1ED30;OTTOMAN SIYAQ ALTERNATE NUMBER THREE;No;0;AL;;;;3;N;;;;; +1ED31;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR;No;0;AL;;;;4;N;;;;; +1ED32;OTTOMAN SIYAQ ALTERNATE NUMBER FIVE;No;0;AL;;;;5;N;;;;; +1ED33;OTTOMAN SIYAQ ALTERNATE NUMBER SIX;No;0;AL;;;;6;N;;;;; +1ED34;OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN;No;0;AL;;;;7;N;;;;; +1ED35;OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT;No;0;AL;;;;8;N;;;;; +1ED36;OTTOMAN SIYAQ ALTERNATE NUMBER NINE;No;0;AL;;;;9;N;;;;; +1ED37;OTTOMAN SIYAQ ALTERNATE NUMBER TEN;No;0;AL;;;;10;N;;;;; +1ED38;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;; +1ED39;OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;; +1ED3A;OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;; +1ED3B;OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;; +1ED3C;OTTOMAN SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;; +1ED3D;OTTOMAN SIYAQ FRACTION ONE SIXTH;No;0;AL;;;;1/6;N;;;;; 1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL; 0627;;;;N;;;;; 1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL; 0628;;;;N;;;;; 1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL; 062C;;;;N;;;;; @@ -29662,6 +30064,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F16A;RAISED MC SIGN;So;0;ON; 004D 0043;;;;N;;;;; 1F16B;RAISED MD SIGN;So;0;ON; 004D 0044;;;;N;;;;; +1F16C;RAISED MR SIGN;So;0;ON; 004D 0052;;;;N;;;;; 1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; @@ -30794,6 +31197,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;; 1F6D3;STUPA;So;0;ON;;;;;N;;;;; 1F6D4;PAGODA;So;0;ON;;;;;N;;;;; +1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; @@ -30817,6 +31221,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6F7;SLED;So;0;ON;;;;;N;;;;; 1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;; 1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;; +1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;; 1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;; 1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;; 1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;; @@ -31022,6 +31427,18 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;; +1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;; +1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;; +1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;; +1F7E3;LARGE PURPLE CIRCLE;So;0;ON;;;;;N;;;;; +1F7E4;LARGE BROWN CIRCLE;So;0;ON;;;;;N;;;;; +1F7E5;LARGE RED SQUARE;So;0;ON;;;;;N;;;;; +1F7E6;LARGE BLUE SQUARE;So;0;ON;;;;;N;;;;; +1F7E7;LARGE ORANGE SQUARE;So;0;ON;;;;;N;;;;; +1F7E8;LARGE YELLOW SQUARE;So;0;ON;;;;;N;;;;; +1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;; +1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;; +1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -31182,6 +31599,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;; 1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;; 1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;; +1F90D;WHITE HEART;So;0;ON;;;;;N;;;;; +1F90E;BROWN HEART;So;0;ON;;;;;N;;;;; +1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;; 1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;; @@ -31229,6 +31649,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F93C;WRESTLERS;So;0;ON;;;;;N;;;;; 1F93D;WATER POLO;So;0;ON;;;;;N;;;;; 1F93E;HANDBALL;So;0;ON;;;;;N;;;;; +1F93F;DIVING MASK;So;0;ON;;;;;N;;;;; 1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;; 1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;; 1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;; @@ -31278,11 +31699,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F96E;MOON CAKE;So;0;ON;;;;;N;;;;; 1F96F;BAGEL;So;0;ON;;;;;N;;;;; 1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;; +1F971;YAWNING FACE;So;0;ON;;;;;N;;;;; 1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;; 1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;; 1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;; 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;; 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;; +1F97B;SARI;So;0;ON;;;;;N;;;;; 1F97C;LAB COAT;So;0;ON;;;;;N;;;;; 1F97D;GOGGLES;So;0;ON;;;;;N;;;;; 1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;; @@ -31322,6 +31745,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F9A0;MICROBE;So;0;ON;;;;;N;;;;; 1F9A1;BADGER;So;0;ON;;;;;N;;;;; 1F9A2;SWAN;So;0;ON;;;;;N;;;;; +1F9A5;SLOTH;So;0;ON;;;;;N;;;;; +1F9A6;OTTER;So;0;ON;;;;;N;;;;; +1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;; +1F9A8;SKUNK;So;0;ON;;;;;N;;;;; +1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;; +1F9AA;OYSTER;So;0;ON;;;;;N;;;;; +1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;; +1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;; 1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;; 1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;; 1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;; @@ -31332,9 +31763,26 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F9B7;TOOTH;So;0;ON;;;;;N;;;;; 1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;; 1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;; +1F9BA;SAFETY VEST;So;0;ON;;;;;N;;;;; +1F9BB;EAR WITH HEARING AID;So;0;ON;;;;;N;;;;; +1F9BC;MOTORIZED WHEELCHAIR;So;0;ON;;;;;N;;;;; +1F9BD;MANUAL WHEELCHAIR;So;0;ON;;;;;N;;;;; +1F9BE;MECHANICAL ARM;So;0;ON;;;;;N;;;;; +1F9BF;MECHANICAL LEG;So;0;ON;;;;;N;;;;; 1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;; 1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;; 1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;; +1F9C3;BEVERAGE BOX;So;0;ON;;;;;N;;;;; +1F9C4;GARLIC;So;0;ON;;;;;N;;;;; +1F9C5;ONION;So;0;ON;;;;;N;;;;; +1F9C6;FALAFEL;So;0;ON;;;;;N;;;;; +1F9C7;WAFFLE;So;0;ON;;;;;N;;;;; +1F9C8;BUTTER;So;0;ON;;;;;N;;;;; +1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;; +1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;; +1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;; +1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;; +1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;; 1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;; 1F9D1;ADULT;So;0;ON;;;;;N;;;;; 1F9D2;CHILD;So;0;ON;;;;;N;;;;; @@ -31383,6 +31831,90 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F9FD;SPONGE;So;0;ON;;;;;N;;;;; 1F9FE;RECEIPT;So;0;ON;;;;;N;;;;; 1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;; +1FA00;NEUTRAL CHESS KING;So;0;ON;;;;;N;;;;; +1FA01;NEUTRAL CHESS QUEEN;So;0;ON;;;;;N;;;;; +1FA02;NEUTRAL CHESS ROOK;So;0;ON;;;;;N;;;;; +1FA03;NEUTRAL CHESS BISHOP;So;0;ON;;;;;N;;;;; +1FA04;NEUTRAL CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1FA05;NEUTRAL CHESS PAWN;So;0;ON;;;;;N;;;;; +1FA06;WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA07;BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA08;NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA09;WHITE CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA0A;WHITE CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA0B;WHITE CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA0C;WHITE CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA0D;WHITE CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA0E;WHITE CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA0F;BLACK CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA10;BLACK CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA11;BLACK CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA12;BLACK CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA13;BLACK CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA14;BLACK CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA15;NEUTRAL CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA16;NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA17;NEUTRAL CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA18;NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA19;NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA1A;NEUTRAL CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA1B;WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA1C;BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA1D;NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA1E;WHITE CHESS TURNED KING;So;0;ON;;;;;N;;;;; +1FA1F;WHITE CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; +1FA20;WHITE CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; +1FA21;WHITE CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; +1FA22;WHITE CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; +1FA23;WHITE CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; +1FA24;BLACK CHESS TURNED KING;So;0;ON;;;;;N;;;;; +1FA25;BLACK CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; +1FA26;BLACK CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; +1FA27;BLACK CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; +1FA28;BLACK CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; +1FA29;BLACK CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; +1FA2A;NEUTRAL CHESS TURNED KING;So;0;ON;;;;;N;;;;; +1FA2B;NEUTRAL CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;; +1FA2C;NEUTRAL CHESS TURNED ROOK;So;0;ON;;;;;N;;;;; +1FA2D;NEUTRAL CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;; +1FA2E;NEUTRAL CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;; +1FA2F;NEUTRAL CHESS TURNED PAWN;So;0;ON;;;;;N;;;;; +1FA30;WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA31;BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA32;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;; +1FA33;WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA34;WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA35;WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA36;WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA37;WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA38;WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA39;BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA3A;BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA3B;BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA3C;BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA3D;BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA3E;BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA3F;NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA40;NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA41;NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA42;NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA43;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA44;NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;; +1FA45;WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; +1FA46;BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; +1FA47;NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;; +1FA48;WHITE CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; +1FA49;BLACK CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; +1FA4A;NEUTRAL CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;; +1FA4B;WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA4C;BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA4D;NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;; +1FA4E;WHITE CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; +1FA4F;WHITE CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; +1FA50;WHITE CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; +1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; +1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; +1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; 1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;; 1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;; 1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;; @@ -31397,6 +31929,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;; 1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;; 1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;; +1FA70;BALLET SHOES;So;0;ON;;;;;N;;;;; +1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;; +1FA72;BRIEFS;So;0;ON;;;;;N;;;;; +1FA73;SHORTS;So;0;ON;;;;;N;;;;; +1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;; +1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;; +1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;; +1FA80;YO-YO;So;0;ON;;;;;N;;;;; +1FA81;KITE;So;0;ON;;;;;N;;;;; +1FA82;PARACHUTE;So;0;ON;;;;;N;;;;; +1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; +1FA91;CHAIR;So;0;ON;;;;;N;;;;; +1FA92;RAZOR;So;0;ON;;;;;N;;;;; +1FA93;AXE;So;0;ON;;;;;N;;;;; +1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;; +1FA95;BANJO;So;0;ON;;;;;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; 2A6D6;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk index 1b1d3fc66b..a7ee134c9f 100755 --- a/admin/unidata/blocks.awk +++ b/admin/unidata/blocks.awk @@ -115,14 +115,15 @@ function name2alias(name , w, w2) { else if (name ~ /duployan|shorthand/) return "duployan-shorthand" else if (name ~ /sutton signwriting/) return "sutton-sign-writing" - sub(/ (extended|extensions|supplement).*/, "", name) + sub(/^small /, "", name) + sub(/ (extended|extensions*|supplement).*/, "", name) sub(/numbers/, "number", name) sub(/numerals/, "numeral", name) sub(/symbols/, "symbol", name) sub(/forms$/, "form", name) sub(/tiles$/, "tile", name) sub(/^new /, "", name) - sub(/ (characters|hieroglyphs|cursive)$/, "", name) + sub(/ (characters|hieroglyphs|cursive|hieroglyph format controls)$/, "", name) gsub(/ /, "-", name) return name diff --git a/admin/unidata/copyright.html b/admin/unidata/copyright.html index 84322c8538..2f5c88d1ac 100644 --- a/admin/unidata/copyright.html +++ b/admin/unidata/copyright.html @@ -36,7 +36,7 @@ [Unicode]  Terms of + href="https://www.unicode.org/copyright.html">Terms of Use Home | Site Map | @@ -59,46 +59,48 @@ Unicode Copyright - Restricted Rights - Legend + Definitions - Warranties & - Disclaimers + Terms of Use + + + Restricted Rights Legend + + + Warranties & Disclaimers Waiver of Damages - Trademarks & Logos + Trademarks & Logos Miscellaneous - Data Files and - Software License Agreement (Exhibit 1) + Unicode License -   + + Unicode Data Files and Software License - - + Privacy Policy + Trademark Policy - + @@ -108,30 +110,41 @@
-

Unicode® Terms of Use

+

Unicode® Copyright and Terms of Use

For the general privacy policy governing access to this site, see the  - Unicode Privacy Policy. For trademark usage, see - the - Unicode® Consortium Name and Trademark Usage Policy.

- - - - - - - - - + Unicode Privacy Policy.

+
    -
  1. Unicode Copyright. +
  2. Unicode Copyright
    1. Copyright © 1991-2019 Unicode, Inc. All rights reserved.
    2. +
    +
  3. + +
  4. Definitions +
    +Unicode Data Files ("DATA FILES") include all data files under the directories:
    +https://www.unicode.org/Public/
    +https://www.unicode.org/reports/
    +https://www.unicode.org/ivd/data/
    +
    +Unicode Data Files do not include PDF online code charts under the directory:
    +https://www.unicode.org/Public/
    +
    +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard
    +or any source code or compiled code under the directories:
    +https://www.unicode.org/Public/PROGRAMS/
    +https://www.unicode.org/Public/cldr/
    +https://site.icu-project.org/download/
    +
    +
  5. + +
  6. Terms of Use +
      +
    1. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and @@ -141,22 +154,26 @@

      Unicode® Terms of Use

      reproduce, and distribute all documents and files, subject to the Terms and Conditions herein.
    2. Further specifications of rights and restrictions pertaining - to the use of the particular set of data files known as the - "Unicode Character Database" can be found in the - License.
    3. + to the use of the Unicode DATA FILES and SOFTWARE can be found in the + Unicode Data Files and Software License.
    4. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the - title page. - The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use.
    5. + title page. +
    6. + The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the + first page of each PDF code chart.
    7. +
    8. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use.
    9. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site.
    10. Modification is not permitted with respect to this document. All copies of this document must be verbatim.
  7. -
  8. Restricted Rights Legend. Any technical +
  9. Restricted Rights Legend +
      +
    1. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer @@ -169,66 +186,71 @@

      Unicode® Terms of Use

      227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement.
    2. -
    3. Warranties and Disclaimers. +
    +
  10. +
  11. Warranties and Disclaimers
    1. This publication and/or website may include technical or - typographical errors or other inaccuracies . Changes are + typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or - website. Unicode may make improvements and/or changes in the + website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time.
    2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase.
    3. -
    4. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR +
    5. EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME + PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
  12. -
  13. Waiver of Damages. In no event shall - Unicode or its licensors be liable for any special, incidental, +
  14. Waiver of Damages +
      +
    1. In no event shall + Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages - whatsoever, whether or not Unicode was advised of the possibility + whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives.
    2. -
    3. Trademarks & Logos. +
    +
  15. +
  16. Trademarks & Logos
    1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names.
    2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.
    3. -
    4. All third party trademarks referenced herein are the property of their respective owners. -
    5. +
    6. All third party trademarks referenced herein are the property of their respective owners.
  17. -
  18. Miscellaneous. +
  19. Miscellaneous
      -
    1. Jurisdiction and Venue. This server is operated from +
    2. Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. - Unicode makes no representation that the materials are + Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this - server from other locations, you are responsible for compliance - with local laws. This Agreement, all use of this site and any - claims and damages resulting from use of this site are governed + website from other locations, you are responsible for compliance + with local laws. This Agreement, all use of this website and any + claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this - site shall be resolved solely in the courts located in Santa + website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer - the dispute to any other forum.
    3. -
    4. Modification by Unicode Unicode shall have the right - to modify this Agreement at any time by posting it to this site. + the dispute to any other forum.
    5. +
    6. Modification by Unicode, Inc. Unicode, Inc. shall have the right + to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without - Unicode’s prior written consent.
    7. + Unicode, Inc.’s prior written consent.
    8. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income.
    9. @@ -240,71 +262,7 @@

      Unicode® Terms of Use

-
-
-
-

EXHIBIT 1
-UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE

- -
-Unicode Data Files include all data files under the directories
-http://www.unicode.org/Public/, http://www.unicode.org/reports/,
-http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/,
-http://www.unicode.org/ivd/data/, and
-http://www.unicode.org/utility/trac/browser/.
-
-Unicode Data Files do not include PDF online code charts under the
-directory http://www.unicode.org/Public/.
-
-Software includes any source code published in the Unicode Standard
-or under the directories
-http://www.unicode.org/Public/, http://www.unicode.org/reports/,
-http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
-http://www.unicode.org/utility/trac/browser/.
-
-NOTICE TO USER: Carefully read the following legal agreement.
-BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
-DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
-YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
-TERMS AND CONDITIONS OF THIS AGREEMENT.
-IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
-THE DATA FILES OR SOFTWARE.
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright © 1991-2019 Unicode, Inc. All rights reserved.
-Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Unicode data files and any associated documentation
-(the "Data Files") or Unicode software and any associated documentation
-(the "Software") to deal in the Data Files or Software
-without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, and/or sell copies of
-the Data Files or Software, and to permit persons to whom the Data Files
-or Software are furnished to do so, provided that either
-(a) this copyright and permission notice appear with all copies
-of the Data Files or Software, or
-(b) this copyright and permission notice appear in associated
-Documentation.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
-NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
-DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THE DATA FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale,
-use or other dealings in these Data Files or Software without prior
-written authorization of the copyright holder.
-
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el index 4863751746..1a3afd3c76 100644 --- a/admin/unidata/unidata-gen.el +++ b/admin/unidata/unidata-gen.el @@ -1413,7 +1413,7 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)." (copyright (with-temp-buffer (insert-file-contents (expand-file-name "copyright.html" unidata-dir)) - (re-search-forward "^Copyright .*Unicode, Inc.") + (re-search-forward "Copyright .*Unicode, Inc.") (match-string 0)))) (or unidata-list (unidata-setup-list unidata-text-file)) (let* ((basename (file-name-nondirectory file)) diff --git a/lisp/international/characters.el b/lisp/international/characters.el index b07f984b58..012827ba1c 100644 --- a/lisp/international/characters.el +++ b/lisp/international/characters.el @@ -987,11 +987,12 @@ with L, LRE, or LRO Unicode bidi character type.") (#x103D . #x103E) (#x1058 . #x1059) (#x105E . #x1160) - (#x1171 . #x1074) + (#x1071 . #x1074) (#x1082 . #x1082) (#x1085 . #x1086) (#x108D . #x108D) (#x109D . #x109D) + (#x1160 . #x11FF) (#x135D . #x135F) (#x1712 . #x1714) (#x1732 . #x1734) @@ -1081,6 +1082,7 @@ with L, LRE, or LRO Unicode bidi character type.") (#xABE5 . #xABE5) (#xABE8 . #xABE8) (#xABED . #xABED) + (#xD7B0 . #xD7FB) (#xFB1E . #xFB1E) (#xFE00 . #xFE0F) (#xFE20 . #xFE2F) @@ -1217,10 +1219,11 @@ with L, LRE, or LRO Unicode bidi character type.") (#xFE30 . #xFE6F) (#xFF01 . #xFF60) (#xFFE0 . #xFFE6) - (#x16FE0 . #x16FE1) - (#x17000 . #x187F1) + (#x16FE0 . #x16FE3) + (#x17000 . #x187F7) (#x18800 . #x18AF2) - (#x1B000 . #x1B11E) + (#x1B000 . #x1B152) + (#x1B164 . #x1B167) (#x1B170 . #x1B2FB) (#x1F004 . #x1F004) (#x1F0CF . #x1F0CF) @@ -1250,17 +1253,22 @@ with L, LRE, or LRO Unicode bidi character type.") (#x1F680 . #x1F6C5) (#x1F6CC . #x1F6CC) (#x1F6D0 . #x1F6D2) + (#x1F6D5 . #x1F6D5) (#x1F6EB . #x1F6EC) - (#x1F6F4 . #x1F6F9) - (#x1F910 . #x1F93E) - (#x1F940 . #x1F970) + (#x1F6F4 . #x1F6FA) + (#x1F7E0 . #x1F7EB) + (#x1F90D . #x1F971) (#x1F973 . #x1F976) - (#x1F97A . #x1F97A) - (#x1F97C . #x1F9A2) - (#x1F9B0 . #x1F9B9) - (#x1F9C0 . #x1F9C2) - (#x1F9D0 . #x1F9FF) + (#x1F97A . #x1F9A2) + (#x1F9A5 . #x1F9AA) + (#x1F9AE . #x1F9CA) + (#x1F9CD . #x1F9FF) + (#x1FA00 . #x1FA53) (#x1FA60 . #x1FA6D) + (#x1FA70 . #x1FA73) + (#x1FA78 . #x1FA7A) + (#x1FA80 . #x1FA82) + (#x1FA90 . #x1FA95) (#x20000 . #x2FFFF) (#x30000 . #x3FFFF)))) (dolist (elt l) diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index e2e91ff850..0413646dfb 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -222,6 +222,7 @@ (hanifi-rohingya #x10D00) (old-sogdian #x10F00) (sogdian #x10F30) + (elymaic #x10fe0) (mahajani #x11150) (sinhala-archaic-number #x111E1) (khojki #x11200) @@ -234,6 +235,7 @@ (takri #x11680) (dogra #x11800) (warang-citi #x118A1) + (nandinagari #x119a0) (zanabazar-square #x11A00) (soyombo #x11A50) (pau-cin-hau #x11AC0) @@ -257,15 +259,19 @@ (ancient-greek-musical-notation #x1D200) (tai-xuan-jing-symbol #x1D300) (counting-rod-numeral #x1D360) + (nyiakeng-puachue-hmong #x1e100) + (wancho #x1e2c0) (mende-kikakui #x1E810) (adlam #x1E900) + (indic-siyaq-number #x1ec71) + (ottoman-siyaq-number #x1ed01) (mahjong-tile #x1F000) (domino-tile #x1F030))) (defvar otf-script-alist) -;; The below was synchronized with the latest Jul 23, 2017 version of -;; https://www.microsoft.com/typography/otspec/scripttags.htm. +;; The below was synchronized with the latest Aug 16, 2018 version of +;; https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags (setq otf-script-alist '((adlm . adlam) (ahom . ahom) @@ -300,6 +306,7 @@ (dsrt . deseret) (deva . devanagari) (dev2 . devanagari) + (dogr . dogra) (dupl . duployan-shorthand) (egyp . egyptian) (elba . elbasan) @@ -311,11 +318,13 @@ (grek . greek) (gujr . gujarati) (gjr2 . gujarati) + (gong . gunjala-gondi) (guru . gurmukhi) (gur2 . gurmukhi) (hani . han) (hang . hangul) (jamo . hangul) + (rohg . hanifi-rohingya) (hano . hanunoo) (hatr . hatran) (hebr . hebrew) @@ -324,9 +333,9 @@ (prti . inscriptional-parthian) (java . javanese) (kthi . kaithi) - (kana . kana) ; Hiragana (knda . kannada) (knd2 . kannada) + (kana . kana) ; Hiragana (kali . kayah-li) (khar . kharoshthi) (khmr . khmer) @@ -342,12 +351,15 @@ (lyci . lycian) (lydi . lydian) (mahj . mahajani) + (maka . makasar) (marc . marchen) (mlym . malayalam) (mlm2 . malayalam) (mand . mandaic) (mani . manichaean) + (gonm . masaram-gondi) (math . mathematical) + (medf . medefaidrin) (mtei . meetei-mayek) (mend . mende-kikakui) (merc . meroitic) @@ -363,12 +375,14 @@ (nbat . nabataean) (newa . newa) (nko\ . nko) + (nshu . nushu) (ogam . ogham) (olck . ol-chiki) (ital . old_italic) (xpeo . old_persian) (narb . old-north-arabian) (perm . old-permic) + (sogo . old-sogdian) (sarb . old-south-arabian) (orkh . old-turkic) (orya . oriya) @@ -392,7 +406,9 @@ (sidd . siddham) (sgnw . sutton-sign-writing) (sinh . sinhala) + (sogd . sogdian) (sora . sora-sompeng) + (soyo . soyombo) (sund . sundanese) (sylo . syloti_nagri) (syrc . syriac) @@ -416,7 +432,8 @@ (ugar . ugaritic) (vai\ . vai) (wara . warang-citi) - (yi\ \ . yi))) + (yi\ \ . yi) + (zanb . zanabazar-square))) ;; Set standard fontname specification of characters in the default ;; fontset to find an appropriate font for each script/charset. The diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index fdcd606035..3c1769a02f 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -2929,12 +2929,13 @@ on encoding." (#x14400 . #x14646) ;; (#x14647 . #x167FF) unused (#x16800 . #x16F9F) - (#x16FE0 . #x16FE0) + (#x16FE0 . #x16FE3) ;; (#x17000 . #x187FF) Tangut Ideographs ;; (#x18800 . #x18AFF) Tangut Components ;; (#x18B00 . #x1AFFF) unused - (#x1B000 . #x1B12F) - ;; (#x1B130 . #x1B16F) unused + (#x1B000 . #x1B11F) + ;; (#x1B120 . #x1B14F) unused + (#x1B150 . #x1B16F) (#x1B170 . #x1B2FF) ;; (#x1B300 . #x1BBFF) unused (#x1BC00 . #x1BCAF) diff --git a/test/lisp/international/ucs-normalize-tests.el b/test/lisp/international/ucs-normalize-tests.el index d31aa5b4a9..97d3eae41c 100644 --- a/test/lisp/international/ucs-normalize-tests.el +++ b/test/lisp/international/ucs-normalize-tests.el @@ -182,25 +182,24 @@ implementations: (defconst ucs-normalize-tests--failing-lines-part1 (list 15131 15132 15133 15134 15135 15136 15137 15138 - 15139 - 16149 16150 16151 16152 16153 16154 16155 16156 - 16157 16158 16159 16160 16161 16162 16163 16164 - 16165 16166 16167 16168 16169 16170 16171 16172 - 16173 16174 16175 16176 16177 16178 16179 16180 - 16181 16182 16183 16184 16185 16186 16187 16188 - 16189 16190 16191 16192 16193 16194 16195 16196 - 16197 16198 16199 16200 16201 16202 16203 16204 - 16205 16206 16207 16208 16209 16210 16211 16212 - 16213 16214 16215 16216 16217 16218 16219 16220 - 16221 16222 16223 16224 16225 16226 16227 16228 - 16229 16230 16231 16232 16233 16234 16235 16236 - 16237 16238 16239 16240 16241 16242 16243 16244 - 16245 16246 16247 16248 16249 16250 16251 16252 - 16253 16254 16255 16256 16257 16258 16259 16260 - 16261 16262 16263 16264 16265 16266 16267 16268 - 16269 16270 16271 16272 16273 16274 16275 16276 - 16277 16278 16279 16280 16281 16282 16283 16284 - 16285 16286 16287 16288 16289)) + 15139 16149 16150 16151 16152 16153 16154 16155 + 16156 16157 16158 16159 16160 16161 16162 16163 + 16164 16165 16166 16167 16168 16169 16170 16171 + 16172 16173 16174 16175 16176 16177 16178 16179 + 16180 16181 16182 16183 16184 16185 16186 16187 + 16188 16189 16190 16191 16192 16193 16194 16195 + 16196 16197 16198 16199 16200 16201 16202 16203 + 16204 16205 16206 16207 16208 16209 16210 16211 + 16212 16213 16214 16215 16216 16217 16218 16219 + 16220 16221 16222 16223 16224 16225 16226 16227 + 16228 16229 16230 16231 16232 16233 16234 16235 + 16236 16237 16238 16239 16240 16241 16242 16243 + 16244 16245 16246 16247 16248 16249 16250 16251 + 16252 16253 16254 16255 16256 16257 16258 16259 + 16260 16261 16262 16263 16264 16265 16266 16267 + 16268 16269 16270 16271 16272 16273 16274 16275 + 16276 16277 16278 16279 16280 16281 16282 16283 + 16284 16285 16286 16287 16288 16289 16366)) ;; Keep a record of failures, for consulting afterwards (the ert ;; backtrace only shows a truncated version of these lists). @@ -258,23 +257,22 @@ implementations: ucs-normalize-tests--failing-lines-part1))) (defconst ucs-normalize-tests--failing-lines-part2 - (list 17482 17532 17636 18338 18340 18342 18344 18346 - 18348 18350 18352 18354 18356 18358 18360 18362 - 18364 18366 18376 18378 18380 18382 18384 18386 - 18388 18390 18392 18394 18396 18398 18400 18402 - 18404 18406 18408 18410 18412 18414 18416 18418 - 18420 18422 18424 18426 18428 18430 18432 18434 - 18436 18438 18440 18442 18444 18446 18448 18450 - 18452 18454 18456 18458 18460 18462 18464 18466 - 18468 18470 18472 18474 18476 18478 18480 18482 - 18484 18486 18488 18490 18492 18494 18496 18564 - 18566 18568 18570 18572 18574 18576 18578 18580 - 18582 18584 18586 18588 18590 18592 18594 18596 - 18598 18600 18602 18604 18606 18608 18610 18612 - 18614 18616 18618 18620 18622 18624 18626 18628 - 18630 18632 18634 18636 18638 18640 18642 18644 - 18646 18648 18650 18652 18654 18656 18658 18660 - 18662 18664 18666)) + (list 17689 18379 18381 18383 18385 18387 18389 18391 + 18393 18395 18397 18399 18401 18403 18405 18407 + 18409 18411 18413 18415 18417 18419 18421 18423 + 18425 18427 18429 18431 18433 18435 18437 18439 + 18441 18443 18445 18447 18449 18451 18453 18455 + 18457 18459 18461 18463 18465 18467 18469 18471 + 18473 18475 18477 18479 18481 18483 18485 18487 + 18489 18491 18493 18495 18497 18499 18501 18569 + 18571 18573 18575 18577 18579 18581 18583 18585 + 18587 18589 18591 18593 18595 18597 18599 18601 + 18603 18605 18607 18609 18611 18613 18615 18617 + 18619 18621 18623 18625 18627 18629 18631 18633 + 18635 18637 18639 18641 18643 18645 18647 18649 + 18651 18653 18655 18657 18659 18661 18663 18665 + 18667 18669 18671 18673 18675 18677 18679 18681 + 18683 18685 18687 18689 18691 18693)) (ert-deftest ucs-normalize-part2 () :tags '(:expensive-test) diff --git a/test/manual/BidiCharacterTest.txt b/test/manual/BidiCharacterTest.txt index 6a0df6dfb6..064594b98a 100644 --- a/test/manual/BidiCharacterTest.txt +++ b/test/manual/BidiCharacterTest.txt @@ -1,5 +1,5 @@ -# BidiCharacterTest-11.0.0.txt -# Date: 2018-02-18, 05:50:00 GMT [LI] +# BidiCharacterTest-12.0.0.txt +# Date: 2018-11-02, 16:34:00 GMT [LI] # © 2018 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # commit 4e082ce3941a9c1fcaae509897761d3e24e08625 Author: Martin Rudalics Date: Sat Mar 9 11:13:18 2019 +0100 Further redesign of window change functions * doc/lispref/windows.texi (Window Hooks): Revise description of window change functions. Add documentation for 'window-state-change-hook' and window state change flag. * etc/NEWS: Update entry for window change functions. * src/frame.c (Fframe_window_state_change) (Fset_frame_window_state_change): New functions. * src/frame.h (struct frame): New boolean window_state_change. (FRAME_WINDOW_STATE_CHANGE): New macro. * src/window.c (window_change_record_frames): New static boolean. (window_change_record_frame): Remove function - code moved to window_change_record. (window_change_record): Record frame changes here taking window_change_record_frames into account. (run_window_change_functions_1): Set window_change_record_frames whenever we run one of our hooks. (run_window_change_functions): Run hooks also when FRAME_WINDOW_STATE_CHANGE has been set. Run Vwindow_state_change_hook. Leave decision whether to record changes for all frames to window_change_record. (Vwindow_state_change_functions): Update doc-string. (Vwindow_state_change_hook): New normal hook. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 6ac7aa6728..6b71632335 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -6046,8 +6046,8 @@ buffer are (re)fontified because a window was scrolled or its size changed. @xref{Other Font Lock Variables}. @cindex window change functions - The remainder of this section covers five hooks that are called at -the end of redisplay provided a significant, non-scrolling change of a + The remainder of this section covers six hooks that are called +during redisplay provided a significant, non-scrolling change of a window has been detected. For simplicity, these hooks and the functions they call will be collectively referred to as @dfn{window change functions}. @@ -6058,9 +6058,9 @@ detected, which means that a window was created, deleted or assigned another buffer. @defvar window-buffer-change-functions -This variable specifies functions called at the end of redisplay when -window buffers have changed. The value should be a list of functions -that take one argument. +This variable specifies functions called during redisplay when window +buffers have changed. The value should be a list of functions that +take one argument. Functions specified buffer-locally are called for any window showing the corresponding buffer if that window has been created or assigned @@ -6074,14 +6074,14 @@ In this case the frame is passed as argument. @end defvar @cindex window size change -The second of these hooks is run after a @dfn{window size change} has +The second of these hooks is run when a @dfn{window size change} has been detected which means that a window was created, assigned another buffer, or changed its total size or that of its text area. @defvar window-size-change-functions -This variable specifies functions called at the end of redisplay when -a window size change occurred. The value should be a list of -functions that take one argument. +This variable specifies functions called during redisplay when a +window size change occurred. The value should be a list of functions +that take one argument. Functions specified buffer-locally are called for any window showing the corresponding buffer if that window has been added or assigned @@ -6097,13 +6097,13 @@ argument. @end defvar @cindex window selection change -The third of these hooks is run after a @dfn{window selection change} +The third of these hooks is run when a @dfn{window selection change} has selected another window since the last redisplay. @defvar window-selection-change-functions -This variable specifies functions called at the end of redisplay when -the selected window or a frame's selected window has changed. The -value should be a list of functions that take one argument. +This variable specifies functions called during redisplay when the +selected window or a frame's selected window has changed. The value +should be a list of functions that take one argument. Functions specified buffer-locally are called for any window showing the corresponding buffer if that window has been selected or @@ -6118,13 +6118,13 @@ run. In this case the frame is passed as argument. @end defvar @cindex window state change -The fourth of these hooks is run after a @dfn{window state change} has +The fourth of these hooks is run when a @dfn{window state change} has been detected, which means that at least one of the three preceding window changes has occurred. @defvar window-state-change-functions -This variable specifies functions called at the end of redisplay when -a window buffer or size change occurred or the selected window or a +This variable specifies functions called during redisplay when a +window buffer or size change occurred or the selected window or a frame's selected window has changed. The value should be a list of functions that take one argument. @@ -6141,6 +6141,10 @@ another buffer, changed its total or body size or that frame has been selected or deselected or the frame's selected window has changed since the last time window change functions were run. In this case the frame is passed as argument. + +Functions specified by the default value are also run for a frame when +that frame's window state change flag (see below) has been set since +last redisplay. @end defvar @cindex window configuration change @@ -6150,9 +6154,9 @@ size of a window changed. It differs from the four preceding hooks in the way it is run. @defvar window-configuration-change-hook -This variable specifies functions called at the end of redisplay when -either the buffer or the size of a window has changed. The value -should be a list of functions that take no argument. +This variable specifies functions called during redisplay when either +the buffer or the size of a window has changed. The value should be a +list of functions that take no argument. Functions specified buffer-locally are called for any window showing the corresponding buffer if at least one window on that frame has been @@ -6168,14 +6172,29 @@ window change functions were run. Each call is performed with the frame temporarily selected and the selected window's buffer current. @end defvar -Window change functions are called at the end of redisplay for each -frame as follows: First, any buffer-local window buffer change -function, window size change function, selected window change and -window state change functions are called in this order. Next, the -default values for these functions are called in the same order. Then -any buffer-local window configuration change functions are called -followed by functions specified by the default value of those -functions. +Finally, Emacs runs a normal hook that generalizes the behavior of +@code{window-state-change-functions}. + +@defvar window-state-change-hook +The default value of this variable specifies functions called during +redisplay when a window state change has been detected or the window +state change flag has been set on at least one frame. The value +should be a list of functions that take no argument. + +Applications should put a function on this hook only if they want to +react to changes that happened on (or have been signaled for) two or +more frames since last redisplay. In every other case, putting the +function on @code{window-state-change-functions} should be preferred. +@end defvar + +Window change functions are called during redisplay for each frame as +follows: First, any buffer-local window buffer change function, window +size change function, selected window change and window state change +functions are called in this order. Next, the default values for +these functions are called in the same order. Then any buffer-local +window configuration change functions are called followed by functions +specified by the default value of those functions. Finally, functions +on @code{window-state-change-hook} are run. Window change functions are run for a specific frame only if a corresponding change was registered for that frame earlier. Such @@ -6189,6 +6208,27 @@ only if that excursion still persists at the time change functions are run. If it is exited earlier, hooks will be run only if registered by a change outside the scope of that excursion. +@cindex window state change flag + The @dfn{window state change flag} of a frame, if set, will cause +the default values of @code{window-state-change-functions} (for that +frame) and @code{window-state-change-hook} to be run during next +redisplay regardless of whether a window state change actually +occurred for that frame or not. After running any functions on these +hooks, the flag is reset for each frame. Applications can set that +flag and inspect its value using the following functions. + +@defun set-frame-window-state-change &optional frame arg +This function sets @var{frame}'s window state change flag if @var{arg} +is non-@code{nil} and resets it otherwise. @var{frame} must be a live +frame and defaults to the selected one. +@end defun + +@defun frame-window-state-change &optional frame +This functions returns @code{t} if @var{frame}'s window state change +flag is set and @code{nil} otherwise. @var{frame} must be a live +frame and defaults to the selected one. +@end defun + While window change functions are run, the functions described next can be called to get more insight into what has changed for a specific window or frame since the last redisplay. All these functions take a @@ -6250,12 +6290,10 @@ change functions were run. Note that window change functions provide no information about which windows have been deleted since the last time they were run. If -necessary, an application should remember any window showing a -specific buffer in a local variable of that buffer and update it in a -function run by the default value of -@code{window-buffer-change-functions} or -@code{window-configuration-change-hook} (the only hooks triggered by -the deletion of windows). +necessary, applications should remember any window showing a specific +buffer in a local variable of that buffer and update it in a function +run by the default values of any of the hooks that are run when a +window buffer change was detected. The following caveats should be considered when adding a function to window change functions: @@ -6272,7 +6310,7 @@ the buffer, size or selection status of any window because there is no guarantee that the information about such a change will be propagated to other window change functions. If at all, any such change should be executed only by the last function listed by the default value of -@code{window-configuration-change-hook}. +@code{window-state-change-hook}. @item Macros like @code{save-window-excursion}, @code{with-selected-window} diff --git a/etc/NEWS b/etc/NEWS index 3e347b5318..1095ecc7e5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1424,18 +1424,20 @@ displaying the same buffer. See the node "(elisp) Face Remapping" of the Emacs Lisp Reference manual for more detail. +++ -** Window change functions have been redesigned completely. +** Window change functions have been redesigned. Hooks reacting to window changes run now only when redisplay detects -that a change has actually occurred. The five hooks provided are: +that a change has actually occurred. Six hooks are now provided: 'window-buffer-change-functions' (run after window buffers have changed), 'window-size-change-functions' (run after a window was assigned a new buffer or size), 'window-configuration-change-hook' (like the former but run also when a window was deleted), 'window-selection-change-functions' (run when the selected window -changed) and 'window-state-change-functions' (run when any of the -preceding ones is run). 'window-scroll-functions' are unaffected by -these changes. +changed) and 'window-state-change-functions' and +'window-state-change-hook' (run when any of the preceding ones is +run). Applications can enforce running the latter two using the new +function 'set-frame-window-state-change'. 'window-scroll-functions' +are unaffected by these changes. In addition, a number of functions now allow the caller to detect what has changed since last redisplay: 'window-old-buffer' returns for any @@ -1447,10 +1449,8 @@ during last redisplay. 'window-old-pixel-width' (renamed from 'window-old-body-pixel-width' and 'window-old-body-pixel-height' return the total and body sizes of any window during last redisplay. -One consequence of these changes is that all window change functions -run now after functions run by 'post-command-hook'. See the section -"(elisp) Window Hooks" in the Elisp manual for a detailed explanation -of the new behavior. +See the section "(elisp) Window Hooks" in the Elisp manual for a +detailed explanation of the new behavior. +++ ** New buffer display action alist entry 'dedicated'. diff --git a/src/frame.c b/src/frame.c index 1219569068..c336369dbb 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3611,6 +3611,40 @@ bottom edge of FRAME's display. */) return Qt; } + +DEFUN ("frame-window-state-change", Fframe_window_state_change, + Sframe_window_state_change, 0, 1, 0, + doc: /* Return t if FRAME's window state change flag is set, nil otherwise. +FRAME must be a live frame and defaults to the selected one. + +If FRAME's window state change flag is set, the default values of +`window-state-change-functions' and `window-state-change-hook' will be +run during next redisplay, regardless of whether a window state change +actually occurred on FRAME or not. After that, the value of this flag +is reset. */) + (Lisp_Object frame) +{ + return FRAME_WINDOW_STATE_CHANGE (decode_live_frame (frame)) ? Qt : Qnil; +} + +DEFUN ("set-frame-window-state-change", Fset_frame_window_state_change, + Sset_frame_window_state_change, 0, 2, 0, + doc: /* Set FRAME's window state change flag according to ARG. +Set FRAME's window state change flag if ARG is non-nil, reset it +otherwise. + +If FRAME's window state change flag is set, the default values of +`window-state-change-functions' and `window-state-change-hook' will be +run during next redisplay, regardless of whether a window state change +actually occurred on FRAME or not. After that, the value of FRAME's +window state change flag is reset. */) + (Lisp_Object frame, Lisp_Object arg) +{ + struct frame *f = decode_live_frame (frame); + + return (FRAME_WINDOW_STATE_CHANGE (f) = !NILP (arg)) ? Qt : Qnil; +} + /*********************************************************************** Frame Parameters @@ -6256,6 +6290,8 @@ iconify the top level frame instead. */); defsubr (&Sframe_position); defsubr (&Sset_frame_position); defsubr (&Sframe_pointer_visible_p); + defsubr (&Sframe_window_state_change); + defsubr (&Sset_frame_window_state_change); #ifdef HAVE_WINDOW_SYSTEM defsubr (&Sx_get_resource); diff --git a/src/frame.h b/src/frame.h index 544e0bef17..5bac24b077 100644 --- a/src/frame.h +++ b/src/frame.h @@ -334,6 +334,10 @@ struct frame frame. */ bool_bf window_change : 1; + /* True if running window state change functions has been explicitly + requested for this frame since last redisplay. */ + bool_bf window_state_change : 1; + /* True if the mouse has moved on this display device since the last time we checked. */ bool_bf mouse_moved : 1; @@ -944,6 +948,10 @@ default_pixels_per_inch_y (void) window change functions were run on F. */ #define FRAME_WINDOW_CHANGE(f) (f)->window_change +/* True if running window state change functions has been explicitly + requested for this frame since last redisplay. */ +#define FRAME_WINDOW_STATE_CHANGE(f) (f)->window_state_change + /* The minibuffer window of frame F, if it has one; otherwise nil. */ #define FRAME_MINIBUF_WINDOW(f) f->minibuffer_window diff --git a/src/window.c b/src/window.c index 8543cbf5ae..c498ae81cd 100644 --- a/src/window.c +++ b/src/window.c @@ -88,6 +88,9 @@ static Lisp_Object old_selected_window; by setting it to nil. */ Lisp_Object Vwindow_list; +/* True mean window_change_record has to record all live frames. */ +static bool window_change_record_frames; + /* The mini-buffer window of the selected frame. Note that you cannot test for mini-bufferness of an arbitrary window by comparing against this; but you can test for mini-bufferness of @@ -3426,8 +3429,8 @@ run_window_configuration_change_hook (struct frame *f) XSETFRAME (frame, f); if (NILP (Vrun_hooks) - || !(f->can_x_set_window_size) - || !(f->after_make_frame)) + || !f->can_x_set_window_size + || !f->after_make_frame) return; /* Use the right buffer. Matters when running the local hooks. */ @@ -3573,49 +3576,50 @@ window_change_record_windows (Lisp_Object window, int stamp, ptrdiff_t number) } -/** - * window_change_record_frame: - * - * Record changes for FRAME. This records FRAME's selected window, - * updates FRAME's change stamp, records the states of all live - * windows of FRAME via window_change_record_windows and resets - * FRAME's window_change flag. - */ -static void -window_change_record_frame (Lisp_Object frame) -{ - struct frame *f = XFRAME (frame); - - /* Record selected window. */ - fset_old_selected_window (f, FRAME_SELECTED_WINDOW (f)); - - /* Bump up FRAME's change stamp. If this wraps, make it 1 to avoid - that a new window (whose change stamp is always set to 0) gets - reported as "existing before". */ - f->change_stamp += 1; - if (f->change_stamp == 0) - f->change_stamp = 1; - - /* Bump up the change stamps of all live windows on this frame so - the next call of this function can tell whether any of them - "existed before" and record state for each of these windows. */ - f->number_of_windows - = window_change_record_windows (f->root_window, f->change_stamp, 0); - - /* Reset our flag. */ - FRAME_WINDOW_CHANGE (f) = false; -} - - /** * window_change_record: * + * For each frame that has recorded changes, record its selected + * window, update Fchange stamp, record the states of all its live + * windows via window_change_record_windows and reset its + * window_change and window_state_change flags. + * * Record selected window in old_selected_window and selected frame in * old_selected_frame. */ static void window_change_record (void) { + if (window_change_record_frames) + { + Lisp_Object tail, frame; + + FOR_EACH_FRAME (tail, frame) + { + struct frame *f = XFRAME (frame); + + /* Record FRAME's selected window. */ + fset_old_selected_window (f, FRAME_SELECTED_WINDOW (f)); + + /* Bump up FRAME's change stamp. If this wraps, make it 1 to avoid + that a new window (whose change stamp is always set to 0) gets + reported as "existing before". */ + f->change_stamp += 1; + if (f->change_stamp == 0) + f->change_stamp = 1; + + /* Bump up the change stamps of all live windows on this frame so + the next call of this function can tell whether any of them + "existed before" and record state for each of these windows. */ + f->number_of_windows + = window_change_record_windows (f->root_window, f->change_stamp, 0); + + /* Reset our flags. */ + FRAME_WINDOW_CHANGE (f) = false; + FRAME_WINDOW_STATE_CHANGE (f) = false; + } + } + /* Strictly spoken we don't need old_selected_window at all - its value is the old selected window of old_selected_frame. */ old_selected_window = selected_window; @@ -3647,8 +3651,18 @@ run_window_change_functions_1 (Lisp_Object symbol, Lisp_Object buffer, while (CONSP (funs)) { - if (!EQ (XCAR (funs), Qt)) - safe_call1 (XCAR (funs), window_or_frame); + if (!EQ (XCAR (funs), Qt) + && (NILP (buffer) + ? FRAME_LIVE_P (XFRAME (window_or_frame)) + : WINDOW_LIVE_P (window_or_frame))) + { + /* Any function called here may change the state of any + frame. Make sure to record changes for each live frame + in window_change_record later. */ + window_change_record_frames = true; + safe_call1 (XCAR (funs), window_or_frame); + } + funs = XCDR (funs); } } @@ -3661,8 +3675,9 @@ run_window_change_functions_1 (Lisp_Object symbol, Lisp_Object buffer, * must be called from a "safe" position in redisplay_internal. * * Do not run any functions for a frame whose window_change flag is - * nil and where no window selection happened since the last time this - * function was called. Also, skip any tooltip frame. + * nil, where no window selection happened and whose window state + * change flag was not set since the last time this function was + * called. Never run any functions for tooltip frames. * * The change functions run are, in this order: * @@ -3679,25 +3694,35 @@ run_window_change_functions_1 (Lisp_Object symbol, Lisp_Object buffer, * `window-selected-change-functions' run for a window that was * (de-)selected since the last time window change functions were run. * + * `window-state-change-functions' run for a window for which any of + * the above three changes occurred. + * * A buffer-local value of these functions is run if and only if the - * window for which the functions are run, currently shows the buffer. + * window for which the functions are run currently shows the buffer. * Each call gets one argument - the window showing the buffer. This * means that the buffer-local value of these functions may be called - * as many times at the buffer is shown on the frame. + * as many times as the buffer is shown on the frame. * - * The default value of these functions is called only after all + * The default values of these functions are called only after all * buffer-local values for all of these functions have been run. Each - * such call receives one argument - the frame for which this function - * is run. + * such call receives one argument - the frame for which a change + * occurred. Functions on `window-state-change-functions' are run + * also if the corresponding frame's window state change flag has been + * set. * - * After the three change functions cited above have been run in the + * After the four change functions cited above have been run in the * indicated way, functions on 'window-configuration-change-hook' are * run. A buffer-local value is run if a window shows that buffer and * has either changed its buffer or its body or total size or did not * appear on this frame since the last time window change functions - * were run. The functions are called without argument and the + * were run. The functions are called without argument and with the * buffer's window selected. The default value is run without - * argument and the frame for which the function is run selected. + * argument and with the frame for which the function is run selected. + * + * In a final step, functions on `window-state-change-hook' are run + * provided a window state change has occurred or the window state + * change flag has been set on at least one frame. Each of these + * functions is called without argument. * * This function does not save and restore match data. Any functions * it calls are responsible for doing that themselves. @@ -3707,8 +3732,10 @@ run_window_change_functions (void) { Lisp_Object tail, frame; bool selected_frame_change = !EQ (selected_frame, old_selected_frame); - ptrdiff_t count_outer = SPECPDL_INDEX (); + bool run_window_state_change_hook = false; + ptrdiff_t count = SPECPDL_INDEX (); + window_change_record_frames = false; record_unwind_protect_void (window_change_record); specbind (Qinhibit_redisplay, Qt); @@ -3725,19 +3752,21 @@ run_window_change_functions (void) || EQ (frame, selected_frame))); bool frame_selected_window_change = !EQ (FRAME_OLD_SELECTED_WINDOW (f), FRAME_SELECTED_WINDOW (f)); + bool frame_window_state_change = FRAME_WINDOW_STATE_CHANGE (f); bool window_deleted = false; Lisp_Object windows; ptrdiff_t number_of_windows; - ptrdiff_t count_inner = SPECPDL_INDEX (); - if (!f->can_x_set_window_size + if (!FRAME_LIVE_P (f) + || !f->can_x_set_window_size || !f->after_make_frame || FRAME_TOOLTIP_P (f) || !(frame_window_change || frame_selected_change - || frame_selected_window_change)) - /* Either we cannot run hooks for this frame yet or no window - change has been reported for this frame since the last time + || frame_selected_window_change + || frame_window_state_change)) + /* Either we are not allowed to run hooks for this frame or no + window change has been reported for it since the last time we ran window change functions on it. */ continue; @@ -3745,8 +3774,6 @@ run_window_change_functions (void) windows = Fnreverse (window_sub_list (root, Qnil)); number_of_windows = 0; - record_unwind_protect (window_change_record_frame, frame); - /* The following loop collects all data needed to tell whether the default value of a hook shall be run and runs any buffer local hooks right away. */ @@ -3857,13 +3884,21 @@ run_window_change_functions (void) (Qwindow_selection_change_functions, Qnil, frame); /* A frame has changed state when a size or buffer change - occurrd or its selected window has changed or when it was - (de-)selected. */ + occurred, its selected window has changed, when it was + (de-)selected or its window state change flag was set. */ if ((frame_selected_change || frame_selected_window_change - || frame_buffer_change || window_deleted || frame_size_change) + || frame_buffer_change || window_deleted + || frame_size_change || frame_window_state_change) && FRAME_LIVE_P (f)) - run_window_change_functions_1 - (Qwindow_state_change_functions, Qnil, frame); + { + run_window_change_functions_1 + (Qwindow_state_change_functions, Qnil, frame); + /* Make sure to run 'window-state-change-hook' later. */ + run_window_state_change_hook = true; + /* Make sure to record changes for each live frame in + window_change_record later. */ + window_change_record_frames = true; + } /* A frame's configuration changed when one of its windows has changed buffer or size or at least one window was deleted. */ @@ -3871,17 +3906,16 @@ run_window_change_functions (void) /* This will run any buffer local window configuration change hook as well. */ run_window_configuration_change_hook (f); - - if (!FRAME_LIVE_P (f)) - continue; - - /* Record changes (via window_change_record_frame) for this - frame, even when an unhandled error occurred. */ - unbind_to (count_inner, Qnil); } - /* Record selected window and frame. */ - unbind_to (count_outer, Qnil); + /* Run 'window-state-change-hook' if at least one frame has changed + state. */ + if (run_window_state_change_hook && !NILP (Vwindow_state_change_hook)) + safe_run_hooks (Qwindow_state_change_hook); + + /* Record changes for all frames (if asked for), selected window and + frame. */ + unbind_to (count, Qnil); } /* Make WINDOW display BUFFER. RUN_HOOKS_P means it's allowed @@ -7999,6 +8033,7 @@ syms_of_window (void) Fput (Qscroll_down, Qscroll_command, Qt); DEFSYM (Qwindow_configuration_change_hook, "window-configuration-change-hook"); + DEFSYM (Qwindow_state_change_hook, "window-state-change-hook"); DEFSYM (Qwindow_state_change_functions, "window-state-change-functions"); DEFSYM (Qwindow_size_change_functions, "window-size-change-functions"); DEFSYM (Qwindow_buffer_change_functions, "window-buffer-change-functions"); @@ -8132,11 +8167,25 @@ redisplay. In this case the window is passed as argument. Functions specified by the default value are called for each frame if at least one window on that frame has been added, deleted, changed its -buffer or its total or body size or the frame has been (de-)selected -or its selected window has changed since the last redisplay. In this -case the frame is passed as argument. */); +buffer or its total or body size or the frame has been (de-)selected, +its selected window has changed or the window state change flag has +been set for this frame since the last redisplay. In this case the +frame is passed as argument. */); Vwindow_state_change_functions = Qnil; + DEFVAR_LISP ("window-state-change-hook", Vwindow_state_change_hook, + doc: /* Functions called during redisplay when the window state changed. +The value should be a list of functions that take no argument. + +This hook is called during redisplay when at least one window has been +added, deleted, (de-)selected, changed its buffer or its total or body +size or the window state change flag has been set for at least one +frame. This hook is called after all other window change functions +have been run and should be used only if a function should react to +changes that happened on at least two frames since last redisplay or +the function intends to change the window configuration. */); + Vwindow_state_change_hook = Qnil; + DEFVAR_LISP ("window-configuration-change-hook", Vwindow_configuration_change_hook, doc: /* Functions called during redisplay when window configuration has changed. The value should be a list of functions that take no argument. commit a3b193516f991ceaf79d33c6158dd7ef060c7bce Author: Michael Albinus Date: Sat Mar 9 09:47:07 2019 +0100 Mention empty strings in file name expansion, emacs lisp reference * doc/lispref/files.texi (Files, File Name Expansion): Mention also empty strings. diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 403a21b336..380e0543dd 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -16,7 +16,7 @@ described in @ref{Backups and Auto-Saving}. names. A file name is a string. Most of these functions expand file name arguments using the function @code{expand-file-name}, so that @file{~} is handled correctly, as are relative file names (including -@file{../}). @xref{File Name Expansion}. +@file{../} and the empty string). @xref{File Name Expansion}. In addition, certain @dfn{magic} file names are handled specially. For example, when a remote file name is specified, Emacs accesses the @@ -2409,6 +2409,17 @@ This is for the sake of filesystems that have the concept of a superroot above the root directory @file{/}. On other filesystems, @file{/../} is interpreted exactly the same as @file{/}. +Expanding @file{.} or the empty string returns the default directory: + +@example +@group +(expand-file-name "." "/usr/spool/") + @result{} "/usr/spool" +(expand-file-name "" "/usr/spool/") + @result{} "/usr/spool" +@end group +@end example + Note that @code{expand-file-name} does @emph{not} expand environment variables; only @code{substitute-in-file-name} does that: commit a38da0d4e532c7a8ce8f20ee5e95a50fce162469 Author: Alan Mackenzie Date: Fri Mar 8 18:07:48 2019 +0000 cc-mode.texi: Work around makeinfo alignment bug. Fix problem with ss index * doc/misc/cc-mode.texi (top level): Using txicommandconditionals to differentiate between the C and perl versions of Texinfo, create an "ss index" unless we are both using the C Texinfo and are building the .dvi output format. (Config Basics): Work around a perl Texinfo alignment bug by writing a separate version of an item list structure for this version, simplifying it considerably. diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 47ae83ab39..0c77cc0ee6 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -148,7 +148,17 @@ CC Mode @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @comment Define an index for syntactic symbols. +@c Version for Texinfo <= 4.x +@ifclear txicommandconditionals +@ifnottex @c In texi2dvi, the @defindex would create an empty cc-mode.ss + @c For Info, unlike tex, @syncodeindex needs a matching @defindex. @defindex ss +@end ifnottex +@end ifclear +@c Version for Texinfo >= 5.x +@ifset txicommandconditionals +@defindex ss +@end ifset @comment Combine key, syntactic symbol and concept indices into one. @syncodeindex ss cp @@ -2282,6 +2292,8 @@ method, ``Top-level commands or the customization interface''. If you make conflicting settings in several of these ways, the way that takes precedence is the one that appears latest in this list: +@c Version of list for Texinfo <= 4.x +@ifclear txicommandconditionals @itemize @w{} @item @table @asis @@ -2292,6 +2304,18 @@ that takes precedence is the one that appears latest in this list: @itemx File Local Variable setting @end table @end itemize +@end ifclear +@c Version of list for Texinfo >= 5.x +@ifset txicommandconditionals +@itemize @asis +@item Style +@item File Style@footnote{In earlier versions of @ccmode{}, a File Style setting took precedence over any other setting apart from a File Local Variable setting.} +@item Top-level command or ``customization interface'' +@item Hook +@item File Local Variable setting +@end itemize +@end ifset + Here is a summary of the different ways of writing your configuration settings: commit 464ee80eac364e5febca88a7ded46cdd9c3a4f10 Author: Martin Rudalics Date: Fri Mar 8 19:10:27 2019 +0100 Warn against recursive invocations of 'buffer-list-update-hook' (Bug#34765) * src/buffer.c (Vbuffer_list_update_hook): * doc/lispref/buffers.texi (Buffer List): Warn against recursive invocations of 'buffer-list-update-hook' (Bug#34765). diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi index d97a095f68..6ad1fb1824 100644 --- a/doc/lispref/buffers.texi +++ b/doc/lispref/buffers.texi @@ -940,6 +940,10 @@ This is a normal hook run whenever the buffer list changes. Functions (@pxref{Creating Buffers}), @code{rename-buffer} (@pxref{Buffer Names}), @code{kill-buffer} (@pxref{Killing Buffers}), @code{bury-buffer} (see above) and @code{select-window} (@pxref{Selecting Windows}). + +Functions run by this hook should avoid calling @code{select-window} +with a nil @var{norecord} argument or @code{with-temp-buffer} since +either may lead to infinite recursion. @end defvar @node Creating Buffers diff --git a/src/buffer.c b/src/buffer.c index 4ab5d4efe3..12620f0d4a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -6236,9 +6236,11 @@ The function `kill-all-local-variables' runs this before doing anything else. * DEFVAR_LISP ("buffer-list-update-hook", Vbuffer_list_update_hook, doc: /* Hook run when the buffer list changes. -Functions running this hook are, `get-buffer-create', -`make-indirect-buffer', `rename-buffer', `kill-buffer', -`bury-buffer-internal' and `select-window'. */); +Functions (implicitly) running this hook are `get-buffer-create', +`make-indirect-buffer', `rename-buffer', `kill-buffer', `bury-buffer' +and `select-window'. Functions run by this hook should avoid calling +`select-window' with a nil NORECORD argument or `with-temp-buffer' +since either may lead to infinite recursion. */); Vbuffer_list_update_hook = Qnil; DEFSYM (Qbuffer_list_update_hook, "buffer-list-update-hook"); commit 60b5c1090d4b378146597418627049ae574856e6 Author: Martin Rudalics Date: Fri Mar 8 19:04:35 2019 +0100 Provide more details in doc-string of 'delete-windows-on' (Bug#34749) * lisp/window.el (delete-windows-on): Provide more details in doc-string (Bug#34749). diff --git a/lisp/window.el b/lisp/window.el index 907b3d038f..58e22a2306 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4706,9 +4706,21 @@ Interactively, FRAME is the prefix argument, so you can use \\[universal-argument] 0 to specify all windows only on the current terminal's frames. -When a window showing BUFFER-OR-NAME is dedicated and the only -window of its frame, that frame is deleted when there are other -frames left." +If a frame's root window shows the buffer specified by +BUFFER-OR-NAME and is dedicated to that buffer and that frame +does not host the active minibuffer window and there is at least +one other frame on that frame's terminal, delete that frame. +Otherwise, do not delete a frame's root window if it shows the +buffer specified by BUFFER-OR-NAME and do not delete any frame's +main window showing that buffer either. Rather, in any such +case, call `switch-to-prev-buffer' to show another buffer in that +window and make sure the window is no more dedicated to its +buffer. + +If the buffer specified by BUFFER-OR-NAME is shown in a +minibuffer window, do nothing for that window. For any window +that does not show that buffer, remove the buffer from that +window's lists of previous and next buffers." (interactive "BDelete windows on (buffer):\nP") (let ((buffer (window-normalize-buffer buffer-or-name)) ;; Handle the "inverted" meaning of the FRAME argument wrt other commit f0be0f1bed9949fab2773d352917a6a610045795 Author: Eli Zaretskii Date: Fri Mar 8 12:21:29 2019 +0200 Improve documentation of 'delete-windows-on' * doc/emacs/windows.texi (Change Window): Document 'delete-windows-on'. * lisp/window.el (delete-windows-on): Doc fix. (Bug#34749) diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi index 27077ff9ec..c4c724e6bc 100644 --- a/doc/emacs/windows.texi +++ b/doc/emacs/windows.texi @@ -255,6 +255,8 @@ Delete all windows in the selected frame except the selected window Delete the selected window and kill the buffer that was showing in it (@code{kill-buffer-and-window}). The last character in this key sequence is a zero. +@item M-x delete-windows-on @key{RET} @var{buffer} @key{RET} +Delete windows showing the specified @var{buffer}. @item C-x ^ Make selected window taller (@code{enlarge-window}). @item C-x @} @@ -290,6 +292,11 @@ selected window. whole frame. (This command cannot be used while the minibuffer window is active; attempting to do so signals an error.) + @kbd{M-x delete-windows-on} deletes windows that show a specific +buffer. It prompts for the buffer, defaulting to the current buffer. +With prefix argument of zero, @kbd{C-u 0}, this command deletes +windows only on the current display's frames. + @cindex resize window @cindex resizing windows @kindex C-x ^ diff --git a/lisp/window.el b/lisp/window.el index 8c04e01067..907b3d038f 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4684,6 +4684,8 @@ displayed there." BUFFER-OR-NAME may be a buffer or the name of an existing buffer and defaults to the current buffer. +Interactively, prompt for the buffer. + The following non-nil values of the optional argument FRAME have special meanings: @@ -4700,6 +4702,10 @@ have special meanings: Any other value of FRAME means consider all windows on all frames. +Interactively, FRAME is the prefix argument, so you can +use \\[universal-argument] 0 to specify all windows only on +the current terminal's frames. + When a window showing BUFFER-OR-NAME is dedicated and the only window of its frame, that frame is deleted when there are other frames left." commit f1bddc78230625dfd4087a0f3ae4d4f592e10672 Author: Eli Zaretskii Date: Fri Mar 8 11:45:55 2019 +0200 * lisp/frame.el (make-frame-command): Doc fix. (Bug#34715) diff --git a/lisp/frame.el b/lisp/frame.el index 545d266536..9438b4a72e 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -597,7 +597,9 @@ If DISPLAY is nil, that stands for the selected frame's display." (defun make-frame-command () "Make a new frame, on the same terminal as the selected frame. If the terminal is a text-only terminal, this also selects the -new frame." +new frame. + +When called from Lisp, returns the new frame." (interactive) (if (display-graphic-p) (make-frame) commit 2848623420e0478ae5ffda8d79af9fde0128dfbe Author: Eli Zaretskii Date: Thu Mar 7 17:16:43 2019 +0200 Avoid undefined behavior in gdb-mi.el * lisp/progmodes/gdb-mi.el (gdb-send): Don't call match-string if this is not a control command. (Bug#34769) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index b63f82b722..69eb29c5eb 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1849,7 +1849,7 @@ commands to be prefixed by \"-interpreter-exec console\".") ;; Python and Guile commands that have an argument don't enter the ;; recursive reading loop. (let* ((control-command-p (string-match gdb-control-commands-regexp string)) - (command-arg (match-string 3 string)) + (command-arg (and control-command-p (match-string 3 string))) (python-or-guile-p (string-match gdb-python-guile-commands-regexp string))) (if (and control-command-p commit dbf1837940b090151b389235c1fc3617aef48234 Author: Martin Rudalics Date: Wed Mar 6 14:45:05 2019 +0100 * lisp/window.el (fit-frame-to-buffer): Make doc-string more accurate. diff --git a/lisp/window.el b/lisp/window.el index 4b30609681..8c04e01067 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -8026,10 +8026,13 @@ Return 0 otherwise." (defun fit-frame-to-buffer (&optional frame max-height min-height max-width min-width only) "Adjust size of FRAME to display the contents of its buffer exactly. FRAME can be any live frame and defaults to the selected one. -Fit only if FRAME's root window is live. MAX-HEIGHT, MIN-HEIGHT, -MAX-WIDTH and MIN-WIDTH specify bounds on the new total size of -FRAME's root window. MIN-HEIGHT and MIN-WIDTH default to the values of -`window-min-height' and `window-min-width' respectively. +Fit only if FRAME's root window is live. + +MAX-HEIGHT, MIN-HEIGHT, MAX-WIDTH and MIN-WIDTH specify bounds on +the new total size of FRAME's root window. MIN-HEIGHT and +MIN-WIDTH default to the values of `window-min-height' and +`window-min-width' respectively. These arguments are specified +in the canonical character width and height of FRAME. If the optional argument ONLY is `vertically', resize the frame vertically only. If ONLY is `horizontally', resize the frame commit 099ef446c2c1014727cfe98268fe468eb2e8828b Author: Basil L. Contovounesios Date: Tue Mar 5 20:24:41 2019 +0000 Minor spelling and grammar fixes (bug#34756) doc/misc/cc-mode.texi (Style Variables, Customizing Indentation): doc/misc/ede.texi (Extending EDE, ede-project-placeholder) (ede-target, ede-proj-target, ede-compilation-program, ede-compiler) (ede-linker): Remove apostrophe from possessive "it's". doc/lispintro/emacs-lisp-intro.texi (Find a File): doc/misc/gnus-faq.texi (FAQ 2-2): Write "an other" as a single word. doc/misc/gnus.texi (Article Buttons): lisp/gnus/gnus-art.el (gnus-button-mid-or-mail-heuristic-alist) (gnus-button-mid-or-mail-heuristic): Write singular number of Message-IDs, rather than plural. lisp/gnus/message.el (message-user-fqdn): Capitalize initialism. diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 3305f5b3ad..c4b19a4e50 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -14824,7 +14824,7 @@ According to its documentation as shown by @kbd{C-h f} (the @code{describe-function} command), the @code{find-file-noselect} function reads the named file into a buffer and returns the buffer. (Its most recent version includes an optional @var{wildcards} argument, -too, as well as another to read a file literally and an other you +too, as well as another to read a file literally and another to suppress warning messages. These optional arguments are irrelevant.) However, the @code{find-file-noselect} function does not select the diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 1a77a64e01..47ae83ab39 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -2548,7 +2548,7 @@ Basics}). @item The style variable @code{c-offsets-alist} (@pxref{c-offsets-alist}) is an association list with an element for each syntactic symbol. It's -handled a little differently from the other style variables. It's +handled a little differently from the other style variables. Its default global binding is the empty list @code{nil}, rather than @code{set-from-style}. Before the style system is initialized, you can add individual elements to @code{c-offsets-alist} by calling @@ -5286,7 +5286,7 @@ The simplest and most used kind of ``offset'' setting in @defopt c-basic-offset @vindex basic-offset @r{(c-)} This style variable holds the basic offset between indentation levels. -It's factory default is 4, but all the built-in styles set it +Its factory default is 4, but all the built-in styles set it themselves, to some value between 2 (for @code{gnu} style) and 8 (for @code{bsd}, @code{linux}, and @code{python} styles). @end defopt diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi index 513461d0e0..4edb53d953 100644 --- a/doc/misc/ede.texi +++ b/doc/misc/ede.texi @@ -1038,7 +1038,7 @@ details on using @eieio{} to extending classes, and writing methods. If you intend to extend @ede{}, it is most likely that a new target type is needed in one of the existing project types. The rest of this chapter -will discuss extending the @code{ede-project} class, and it's targets. +will discuss extending the @code{ede-project} class, and its targets. See @file{project-am.el} for basic details on adding targets to it. For the @code{ede-project} type, the core target class is called @@ -1477,7 +1477,7 @@ Get the inode of the directory project @var{PROJ} is in. @end deffn @deffn Method ede-project-root :AFTER this -If a project knows it's root, return it here. +If a project knows its root, return it here. Allows for one-project-object-for-a-tree type systems. @end deffn @@ -1486,7 +1486,7 @@ Find a subproject of @var{PROJ} that corresponds to @var{DIR}. @end deffn @deffn Method ede-project-root-directory :AFTER this &optional file -If a project knows it's root, return it here. +If a project knows its root, return it here. Allows for one-project-object-for-a-tree type systems. Optional @var{FILE} is the file to test. It is ignored in preference of the anchor file for the project. @@ -2516,7 +2516,7 @@ In sources for @var{THIS}, change version numbers to @var{VERSION}. @end deffn @deffn Method project-delete-target :AFTER ot -Delete the current target @var{OT} from it's parent project. +Delete the current target @var{OT} from its parent project. @end deffn @deffn Method ede-target-sourcecode :AFTER this @@ -2715,7 +2715,7 @@ Converts all symbols into the objects to be used. @end deffn @deffn Method project-delete-target :AFTER this -Delete the current target @var{THIS} from it's parent project. +Delete the current target @var{THIS} from its parent project. @end deffn @deffn Method ede-proj-makefile-target-name :AFTER this @@ -4013,7 +4013,7 @@ Type: @code{list} The commands used to execute this compiler. The object which uses this compiler will place these commands after -it's rule definition. +its rule definition. @item :autoconf Type: @code{list} @* @@ -4125,7 +4125,7 @@ Type: @code{list} The commands used to execute this compiler. The object which uses this compiler will place these commands after -it's rule definition. +its rule definition. @item :objectextention Type: @code{string} @@ -4265,7 +4265,7 @@ Type: @code{list} The commands used to execute this compiler. The object which uses this compiler will place these commands after -it's rule definition. +its rule definition. @item :objectextention Type: @code{string} diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi index 55010d4e43..d4be7b1f0c 100644 --- a/doc/misc/gnus-faq.texi +++ b/doc/misc/gnus-faq.texi @@ -284,7 +284,7 @@ what's this? @subsubheading Answer You get the message described in the q/a pair above while -starting Gnus, right? It's an other symptom for the same +starting Gnus, right? It's another symptom for the same problem, so read the answer above. @node FAQ 2-3 diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index a0c5732943..4ee80eacb2 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -9394,7 +9394,7 @@ function must return @code{mid}, @code{mail}, @code{invalid} or @item gnus-button-mid-or-mail-heuristic @findex gnus-button-mid-or-mail-heuristic Function that guesses whether its argument is a message ID or a mail -address. Returns @code{mid} if it's a message IDs, @code{mail} if +address. Returns @code{mid} if it's a message ID, @code{mail} if it's a mail address, @code{ask} if unsure and @code{invalid} if the string is invalid. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 9cd5a1f643..4eb6249490 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -7504,7 +7504,7 @@ must return `mid', `mail', `invalid' or `ask'." (2.0 . "^[A-Z][a-z][A-Z][a-z][a-z][^a-z]")) ;; ^[A-Z][a-z]{4,4} "An alist of (RATE . REGEXP) pairs for `gnus-button-mid-or-mail-heuristic'. -A negative RATE indicates a message IDs, whereas a positive indicates a mail +A negative RATE indicates a message ID, whereas a positive indicates a mail address. The REGEXP is processed with `case-fold-search' set to nil." :version "22.1" :group 'gnus-article-buttons @@ -7513,7 +7513,7 @@ address. The REGEXP is processed with `case-fold-search' set to nil." (defun gnus-button-mid-or-mail-heuristic (mid-or-mail) "Guess whether MID-OR-MAIL is a message ID or a mail address. -Returns `mid' if MID-OR-MAIL is a message IDs, `mail' if it's a mail +Returns `mid' if MID-OR-MAIL is a message ID, `mail' if it's a mail address, `ask' if unsure and `invalid' if the string is invalid." (let ((case-fold-search nil) (list gnus-button-mid-or-mail-heuristic-alist) diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 0d166fb8ce..d260bdb2a2 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -1741,7 +1741,7 @@ no, only reply back to the author." :type 'boolean) (defcustom message-user-fqdn nil - "Domain part of Message-Ids." + "Domain part of Message-IDs." :version "22.1" :group 'message-headers :link '(custom-manual "(message)News Headers") commit 52fd40068e0f8b41bd29eaec1334299eb86d0bff Author: Eli Zaretskii Date: Mon Mar 4 19:49:47 2019 +0200 Minor improvement of documentation of '(when CONDITION . SPEC)' * doc/lispref/display.texi (Other Display Specs): Add a caveat to using the '(when CONDITION . SPEC)' display specs. diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 921d58a1f3..7892c15b46 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -4853,6 +4853,16 @@ and the buffer position where the @code{display} property was found, respectively. Both positions can be different when @code{object} is a string. +Note that @var{condition} will only be evaluated when redisplay +examines the text where this display spec is located, so this feature +is best suited for conditions that are relatively stable, i.e.@: +yield, for each particular buffer position, the same results on every +evaluation. If the results change for the same text location, e.g., +if the result depends on the position of point, then the conditional +specification might not do what you want, because redisplay examines +only those parts of buffer text where it has reasons to assume that +something changed since the last display cycle. + @node Display Margins @subsection Displaying in the Margins @cindex display margins commit f872b65b2f6b83f3cee2eb0e80cb296d1de99505 Author: Eli Zaretskii Date: Sat Mar 2 10:42:29 2019 +0200 Improve documentation of 'auto-coding-functions' * doc/lispref/nonascii.texi (Default Coding Systems): Clarify that the functions in 'auto-coding-functions' are called both for decoding and for encoding. * lisp/international/mule.el (auto-coding-functions): Doc fix. diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index 66d12033d8..d58041b279 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -1632,11 +1632,16 @@ coding system for a file based on its undecoded contents. Each function in this list should be written to look at text in the current buffer, but should not modify it in any way. The buffer will -contain undecoded text of parts of the file. Each function should -take one argument, @var{size}, which tells it how many characters to -look at, starting from point. If the function succeeds in determining -a coding system for the file, it should return that coding system. -Otherwise, it should return @code{nil}. +contain the text of parts of the file. Each function should take one +argument, @var{size}, which tells it how many characters to look at, +starting from point. If the function succeeds in determining a coding +system for the file, it should return that coding system. Otherwise, +it should return @code{nil}. + +The functions in this list could be called either when the file is +visited and Emacs wants to decode its contents, and/or when the file's +buffer is about to be saved and Emacs wants to determine how to encode +its contents. If a file has a @samp{coding:} tag, that takes precedence, so these functions won't be called. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 58fdd28243..cc0658dc3f 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -1851,9 +1851,12 @@ or nil." Each function in this list should be written to operate on the current buffer, but should not modify it in any way. The buffer -will contain undecoded text of parts of the file. Each function +will contain the text of parts of the file. Each function should take one argument, SIZE, which says how many characters -\(starting from point) it should look at. +\(starting from point) it should look at. The function might be +called both when the file is visited and Emacs wants to decode +its contents, and when the file's buffer is about to be saved +and Emacs wants to determine how to encode its contents. If one of these functions succeeds in determining a coding system, it should return that coding system. Otherwise, it commit 04cad5e8eac6fee415c0951d673e8a27534e727d Author: Eli Zaretskii Date: Sat Mar 2 10:32:06 2019 +0200 Fix visiting XML files with non-Unix EOL format * lisp/international/mule.el (sgml-xml-auto-coding-function) (sgml-html-meta-auto-coding-function): Don't use 'buffer-file-coding-system' if the buffer is unibyte. (Bug#34704) diff --git a/lisp/international/mule.el b/lisp/international/mule.el index b47fd4ca69..58fdd28243 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -2500,10 +2500,17 @@ This function is intended to be added to `auto-coding-functions'." (let ((sym-type (coding-system-type sym)) (bfcs-type (coding-system-type buffer-file-coding-system))) - ;; 'charset' will signal an error in - ;; coding-system-equal, since it isn't a - ;; coding-system. So test that up front. - (if (and (not (equal sym-type 'charset)) + ;; If the buffer is unibyte, its encoding is + ;; immaterial (it is just the default value of + ;; buffer-file-coding-system), so we ignore it. + ;; This situation happens when this function is + ;; called as part of visiting a file, as opposed + ;; to when saving a buffer to a file. + (if (and enable-multibyte-characters + ;; 'charset' will signal an error in + ;; coding-system-equal, since it isn't a + ;; coding-system. So test that up front. + (not (equal sym-type 'charset)) (coding-system-equal 'utf-8 sym-type) (coding-system-equal 'utf-8 bfcs-type)) buffer-file-coding-system @@ -2555,7 +2562,8 @@ This function is intended to be added to `auto-coding-functions'." (let ((sym-type (coding-system-type sym)) (bfcs-type (coding-system-type buffer-file-coding-system))) - (if (and (coding-system-equal 'utf-8 sym-type) + (if (and enable-multibyte-characters + (coding-system-equal 'utf-8 sym-type) (coding-system-equal 'utf-8 bfcs-type)) buffer-file-coding-system sym)) commit a89fabe96396b2197cffc5a9e694004e1c691fa9 Author: Basil L. Contovounesios Date: Tue Feb 26 11:57:53 2019 +0000 Update example major mode code in Elisp manual * doc/lispref/modes.texi (Example Major Modes): Update code examples to reflect current state of lisp/textmodes/text-mode.el and lisp/emacs-lisp/lisp-mode.el. (bug#34671) diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 1343024329..919816f3de 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1217,6 +1217,7 @@ the conventions listed above: (modify-syntax-entry ?\\ ". " st) ;; Add 'p' so M-c on 'hello' leads to 'Hello', not 'hello'. (modify-syntax-entry ?' "w p" st) + @dots{} st) "Syntax table used while in `text-mode'.") @end group @@ -1226,6 +1227,7 @@ the conventions listed above: (defvar text-mode-map (let ((map (make-sparse-keymap))) (define-key map "\e\t" 'ispell-complete-word) + @dots{} map) "Keymap for `text-mode'. Many other modes, such as `mail-mode', `outline-mode' and @@ -1269,11 +1271,11 @@ illustrate how these modes are written. @smallexample @group ;; @r{Create mode-specific table variables.} -(defvar lisp-mode-abbrev-table nil) -(define-abbrev-table 'lisp-mode-abbrev-table ()) +(define-abbrev-table 'lisp-mode-abbrev-table () + "Abbrev table for Lisp mode.") (defvar lisp-mode-syntax-table - (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table))) + (let ((table (make-syntax-table lisp--mode-syntax-table))) (modify-syntax-entry ?\[ "_ " table) (modify-syntax-entry ?\] "_ " table) (modify-syntax-entry ?# "' 14" table) @@ -1288,10 +1290,9 @@ each calls the following function to set various variables: @smallexample @group -(defun lisp-mode-variables (&optional syntax keywords-case-insensitive) +(defun lisp-mode-variables (&optional syntax keywords-case-insensitive elisp) (when syntax (set-syntax-table lisp-mode-syntax-table)) - (setq local-abbrev-table lisp-mode-abbrev-table) @dots{} @end group @end smallexample @@ -1302,8 +1303,7 @@ variable to handle Lisp comments: @smallexample @group - (make-local-variable 'comment-start) - (setq comment-start ";") + (setq-local comment-start ";") @dots{} @end group @end smallexample @@ -1317,6 +1317,7 @@ common. The following code sets up the common commands: @group (defvar lisp-mode-shared-map (let ((map (make-sparse-keymap))) + (set-keymap-parent map prog-mode-map) (define-key map "\e\C-q" 'indent-sexp) (define-key map "\177" 'backward-delete-char-untabify) map) @@ -1331,7 +1332,7 @@ And here is the code to set up the keymap for Lisp mode: @group (defvar lisp-mode-map (let ((map (make-sparse-keymap)) - (menu-map (make-sparse-keymap "Lisp"))) + (menu-map (make-sparse-keymap "Lisp"))) (set-keymap-parent map lisp-mode-shared-map) (define-key map "\e\C-x" 'lisp-eval-defun) (define-key map "\C-c\C-z" 'run-lisp) @@ -1355,17 +1356,13 @@ Blank lines separate paragraphs. Semicolons start comments. \\@{lisp-mode-map@} Note that `run-lisp' may be used either to start an inferior Lisp job -or to switch back to an existing one. +or to switch back to an existing one." @end group - @group -Entry to this mode calls the value of `lisp-mode-hook' -if that value is non-nil." (lisp-mode-variables nil t) - (set (make-local-variable 'find-tag-default-function) - 'lisp-find-tag-default) - (set (make-local-variable 'comment-start-skip) - "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *") + (setq-local find-tag-default-function 'lisp-find-tag-default) + (setq-local comment-start-skip + "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *") (setq imenu-case-fold-search t)) @end group @end smallexample