This is compat.info, produced by makeinfo version 6.7 from compat.texi. Copyright © 2022 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.” (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual.” INFO-DIR-SECTION Emacs START-INFO-DIR-ENTRY * Compat: (compat). Compatibility Library for Emacs Lisp. END-INFO-DIR-ENTRY  File: compat.info, Node: Top, Next: Introduction, Up: (dir) "Compat" Manual *************** This manual documents the usage of the "Compat" Emacs lisp library, the forward-compatibility library for Emacs Lisp, corresponding to version 28.1.2.0. Copyright © 2022 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.” (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual.” * Menu: * Introduction:: * Support:: * Development:: * Function Index:: * Variable Index:: — The Detailed Node Listing — Introduction * Overview:: * Usage:: * Intentions:: Usage * Additional libraries:: Support * Emacs 24.4:: Compatibility support for Emacs 24.4 * Emacs 24.5:: Compatibility support for Emacs 24.5 * Emacs 25.1:: Compatibility support for Emacs 25.1 * Emacs 26.1:: Compatibility support for Emacs 26.1 * Emacs 27.1:: Compatibility support for Emacs 27.1 * Emacs 28.1:: Compatibility support for Emacs 28.1  File: compat.info, Node: Introduction, Next: Support, Prev: Top, Up: Top 1 Introduction ************** * Menu: * Overview:: * Usage:: * Intentions::  File: compat.info, Node: Overview, Next: Usage, Up: Introduction 1.1 Overview ============ The objective of Compat is to provide "forwards compatibility" library for Emacs Lisp. That is to say by using Compat, an Elisp package does not have to make the decision to either use new and useful functionality or support old versions of Emacs. Version 24.3 is chosen as the oldest version, because this is the newest version on CentOS 7. It is intended to preserve compatibility for at least as the Centos 7 reaches EOL (https://wiki.centos.org/About/Product), 2024. If you are developing a package with Compat in mind, consider loading ‘compat-help‘ (on your system, not in a package) to get relevant notes inserted into the help buffers of functions that are implemented or advised in Compat. Note that Compat provides a few prefixed function, ie. functions with a ‘compat-’ prefix. These are used to provide extended functionality for commands that are already defined (‘sort’, ‘assoc’, ‘seq’, ...). It might be possible to transform these into advised functions later on, so that the modified functionality is accessible without a prefix. Feedback on this point is appreciated.  File: compat.info, Node: Usage, Next: Intentions, Prev: Overview, Up: Introduction 1.2 Usage ========= The intended use-case for this library is for package developers to add as a dependency in the header: ;; Package-Requires: ((emacs "24.3") (compat "28.1.2.0")) and later on a (require 'compat) This will load all non-prefixed definitions (functions and macros with a leading ‘compat-‘). To load these, an additional (require 'compat-XY) ; e.g. 26 will be necessary, to load compatibility code for Emacs version XY. It is recommended to subscribe to the compat-announce (https://lists.sr.ht/~pkal/compat-announce) mailing list to be notified when new versions are released or relevant changes are made. * Menu: * Additional libraries::  File: compat.info, Node: Additional libraries, Up: Usage 1.2.1 Additional libraries -------------------------- These libraries are packages with Compat, but are disabled by default. To use them you can use ‘M-x load-library’: compat-help Add notes to ‘*Help*’ buffer, if a compatibility definition has something to warn you about. compat-font-lock Highlight functions that are implemented as compatibility definitions.  File: compat.info, Node: Intentions, Prev: Usage, Up: Introduction 1.3 Intentions ============== The library intends to provide support back until Emacs 24.3. The intended audience are package developers that are interested in using newer developments, without having to break compatibility. Sadly, total backwards compatibility cannot be provided for technical reasons. These might include: • An existing function or macro was extended by some new functionality. To support these cases, the function or macro would have to be advised. As this is usually regarded as invasive and is shown to be a significant overhead, even when the new feature is not used, this approach is not used. As a compromise, prefixed functions and macros (starting with a ‘compat-’ prefix) can be provided. • New functionality was implemented in the core, and depends on external libraries that cannot be reasonably duplicated in the scope of a compatibility library. • New functionality depends on an entire new, non-trivial library. Sometimes these are provided via ELPA (xref, project, ...), but other times it would be infeasible to duplicate an entire library within Compat while also providing the necessary backwards compatibility. • It just wasn’t added, and there is no good reason (though good excuses might exist). If you happen to find such a function, *note reporting: Development. it would be much appreciated. Always begin by assuming that this might be the case, unless proven otherwise.  File: compat.info, Node: Support, Next: Development, Prev: Introduction, Up: Top 2 Support ********* This section goes into the features that Compat manages and doesn’t manage to provide for each Emacs version. * Menu: * Emacs 24.4:: Compatibility support for Emacs 24.4 * Emacs 24.5:: Compatibility support for Emacs 24.5 * Emacs 25.1:: Compatibility support for Emacs 25.1 * Emacs 26.1:: Compatibility support for Emacs 26.1 * Emacs 27.1:: Compatibility support for Emacs 27.1 * Emacs 28.1:: Compatibility support for Emacs 28.1  File: compat.info, Node: Emacs 24.4, Next: Emacs 24.5, Up: Support 2.1 Emacs 24.4 ============== The following functions and macros implemented in 24.4, and are provided by Compat by default: -- Macro: with-eval-after-load See *note (elisp) Hooks for Loading: (elisp)Hooks for Loading. -- Function: special-form-p See *note (elisp) Special Forms: (elisp)Special Forms. -- Function: macrop See *note (elisp) Simple Macro: (elisp)Simple Macro. -- Function: string-suffix-p See *note (elisp) Text Comparison: (elisp)Text Comparison. -- Function: delete-consecutive-dups Defined in ‘subr.el’. -- Function: define-error See *note (elisp) Error Symbols: (elisp)Error Symbols. -- Function: bool-vector-exclusive-or See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: bool-vector-union See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: bool-vector-intersection See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: bool-vector-not See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: bool-vector-subsetp See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: bool-vector-count-consecutive See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: bool-vector-count-population See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. -- Function: completion-table-merge See *note (elisp) Basic Completion: (elisp)Basic Completion. -- Function: completion-table-with-cache See *note (elisp) Programmed Completion: (elisp)Programmed Completion. -- Function: face-spec-set See *note (elisp) Defining Faces: (elisp)Defining Faces. These functions are prefixed with ‘compat’ prefix, and are only loaded when ‘compat-24’ is required: -- Function: compat-= -- Function: compat-< -- Function: compat-> -- Function: compat-<= -- Function: compat->= See *note (elisp) Comparison of Numbers: (elisp)Comparison of Numbers. Allows for more than two arguments to be compared. -- Function: compat-split-string See *note (elisp) Creating Strings: (elisp)Creating Strings. Takes optional argument TRIM. Compat does not provide support for the following Lisp features implemented in 24.4: • Allowing the second optional argument to ‘eval’ to specify a lexical environment. • The ‘define-alternatives’ macro. • Support for the ‘defalias-fset-function’ symbol property. • The ‘group-gid’ and ‘groupd-read-gid’ functions. • The ‘pre-redisplay-function’ hook. • Allowing for ‘with-demoted-errors’ to take a additional argument ‘format’. • The ‘face-spec-set’ function. • The ‘add-face-text-property’ function. • No ‘tty-setup-hook’ hook. • The ‘get-pos-property’ function. • The ‘define-advice’ macro. • Support for generators. • The ‘string-trim’, ‘string-trim-left’ and ‘string-trim-right’ functions. These are instead provided as prefixed function as part of *note Emacs 26.1:: support.  File: compat.info, Node: Emacs 24.5, Next: Emacs 25.1, Prev: Emacs 24.4, Up: Support 2.2 Emacs 24.5 ============== No special support for 24.5 was deemed necessary.  File: compat.info, Node: Emacs 25.1, Next: Emacs 26.1, Prev: Emacs 24.5, Up: Support 2.3 Emacs 25.1 ============== The following functions and macros implemented in 25.1, and are provided by Compat by default: -- Function: format-message See *note (elisp) Formatting Strings: (elisp)Formatting Strings. -- Function: directory-name-p See *note (elisp) Directory Names: (elisp)Directory Names. -- Function: string-greaterp See *note (elisp) Text Comparison: (elisp)Text Comparison. -- Macro: with-file-modes See *note (elisp) Changing Files: (elisp)Changing Files. -- Function: alist-get See *note (elisp) Association Lists: (elisp)Association Lists. -- Macro: if-let Defined in ‘subr-x.el’. -- Macro: when-let Defined in ‘subr-x.el’. -- Macro: thread-first Defined in ‘subr-x.el’. -- Macro: thread-last Defined in ‘subr-x.el’. -- Function: macroexpand-1 See *note (elisp) Expansion: (elisp)Expansion. -- Function: directory-files-recursively See *note (elisp) Contents of Directories: (elisp)Contents of Directories. -- Function: bool-vector See *note (elisp) Bool-Vectors: (elisp)Bool-Vectors. These functions are prefixed with ‘compat’ prefix, and are only loaded when ‘compat-25’ is required: -- Function: compat-sort See *note (elisp) Sequence Functions: (elisp)Sequence Functions. Adds support for vectors to be sorted, next to just lists. Compat does not provide support for the following Lisp features implemented in 25.1: • New ‘pcase’ patterns. • The hook ‘prefix-command-echo-keystrokes-functions’ and ‘prefix-command-preserve-state-hook’. • The hook ‘pre-redisplay-functions’. • The function ‘make-process’. • Support for the variable ‘inhibit-message’. • The ‘define-inline’ functionality. • The functions ‘string-collate-lessp’ and ‘string-collate-equalp’. • Support for ‘alist-get’ as a generalised variable. • The function ‘funcall-interactivly’. • The function ‘buffer-substring-with-bidi-context’. • The function ‘font-info’. • The function ‘default-font-width’. • The function ‘window-font-height’ and ‘window-font-width’. • The function ‘window-max-chars-per-line’. • The function ‘set-binary-mode’. • The functions ‘bufferpos-to-filepos’ and ‘filepos-to-bufferpos’. Note that the changes in Emacs 25.2 and 25.3 are also included here, for the sake of simplicity.  File: compat.info, Node: Emacs 26.1, Next: Emacs 27.1, Prev: Emacs 25.1, Up: Support 2.4 Emacs 26.1 ============== The following functions and macros implemented in 26.1, and are provided by Compat by default: -- Function: func-arity See *note (elisp) What Is a Function: (elisp)What Is a Function. -- Function: mapcan See *note (elisp) Mapping Functions: (elisp)Mapping Functions. -- Function: cXXXr -- Function: cXXXXr See *note (elisp) List Elements: (elisp)List Elements. -- Variable: gensym-counter See ‘gensym’. -- Function: gensym See *note (elisp) Creating Symbols: (elisp)Creating Symbols. -- Function: make-nearby-temp-file See *note (elisp) Unique File Names: (elisp)Unique File Names. -- Variable: mounted-file-systems Defined in ‘files.el’. -- Function: temporary-file-directory See *note (elisp) Unique File Names: (elisp)Unique File Names. -- Macro: if-let* Defined in ‘subr-x.el’. -- Macro: when-let* Defined in ‘subr-x.el’. -- Macro: and-let* Defined in ‘subr-x.el’. **Please Note:** The implementation provided by Compat does not include a bug that was observed with Emacs 26 (see ). -- Function: file-local-name See *note (elisp) Magic File Names: (elisp)Magic File Names. -- Function: file-name-quoted-p See *note (elisp) File Name Expansion: (elisp)File Name Expansion. -- Function: file-name-quote See *note (elisp) File Name Expansion: (elisp)File Name Expansion. -- Function: image-property Defined in ‘image.el’. This function can also be used as a generalised variable. To use this you need to explicitly require ‘compat-26’. -- Function: file-attribute-type See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-link-number See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-user-id See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-group-id See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-access-time See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-modification-time See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-status-change-time See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-size See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-modes See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-inode-number See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-device-number See *note (elisp) File Attributes: (elisp)File Attributes. -- Function: file-attribute-collect Defined in ‘files.el’. These functions are prefixed with ‘compat’ prefix, and are only loaded when ‘compat-26’ is required: -- Function: compat-assoc See *note (elisp) Association Lists: (elisp)Association Lists. Handle the optional argument TESTFN. -- Function: compat-line-number-at-pos See *note (elisp) Text Lines: (elisp)Text Lines. Handle the optional argument ABSOLUTE. -- Function: compat-alist-get See *note (elisp) Association Lists: (elisp)Association Lists. Handle the optional argument TESTFN. Can also be used as a generalised variable. -- Function: compat-string-trim-left See *note (elisp) Creating Strings: (elisp)Creating Strings. Handles the optional argument REGEXP. -- Function: compat-string-trim-right See *note (elisp) Creating Strings: (elisp)Creating Strings. Handles the optional argument REGEXP. -- Function: compat-string-trim See *note (elisp) Creating Strings: (elisp)Creating Strings. Handles the optional arguments TRIM-LEFT and TRIM-RIGHT. Compat does not provide support for the following Lisp features implemented in 26.1: • The function ‘secure-hash-algorithms’. • The function ‘gnutls-avalaible-p’. • Support for records and record functions. • The function ‘mapbacktrace’. • The function ‘file-name-case-insensitive-p’. • The file-attributes constructors. • The function ‘read-multiple-choice’. • The additional elements of ‘parse-partial-sexp’. • The function ‘add-variable-watcher’. • The function ‘undo-amalgamate-change-group’. • The function ‘char-from-name’ • Signalling errors when ‘length’ or ‘member’ deal with list cycles. • The function ‘frame-list-z-order’. • The function ‘frame-restack’. • Support for side windows and atomic windows. • All changes related to ‘display-buffer’. • The function ‘window-swap-states’. Note that the changes in Emacs 26.2 and 26.3 are also included here, for the sake of simplicity.  File: compat.info, Node: Emacs 27.1, Next: Emacs 28.1, Prev: Emacs 26.1, Up: Support 2.5 Emacs 27.1 ============== The following functions and macros implemented in 27.1, and are provided by Compat by default: -- Function: proper-list-p See *note (elisp) List-related Predicates: (elisp)List-related Predicates. -- Function: string-distance See *note (elisp) Text Comparison: (elisp)Text Comparison. -- Function: json-serialize See *note (elisp) Parsing JSON: (elisp)Parsing JSON. -- Function: json-insert See *note (elisp) Parsing JSON: (elisp)Parsing JSON. -- Function: json-parse-string See *note (elisp) Parsing JSON: (elisp)Parsing JSON. -- Function: json-parse-buffer See *note (elisp) Parsing JSON: (elisp)Parsing JSON. -- Macro: ignore-error See *note (elisp) Handling Errors: (elisp)Handling Errors. -- Macro: dolist-with-progress-reporter See *note (elisp) Progress: (elisp)Progress. -- Function: flatten-tree See *note (elisp) Building Lists: (elisp)Building Lists. -- Function: xor See *note (elisp) Combining Conditions: (elisp)Combining Conditions. -- Variable: regexp-unmatchable Defined in ‘subr.el’. -- Function: decoded-time-second Defined in ‘simple.el’. -- Function: decoded-time-minute Defined in ‘simple.el’. -- Function: decoded-time-hour Defined in ‘simple.el’. -- Function: decoded-time-day Defined in ‘simple.el’. -- Function: decoded-time-month Defined in ‘simple.el’. -- Function: decoded-time-year Defined in ‘simple.el’. -- Function: decoded-time-weekday Defined in ‘simple.el’. -- Function: decoded-time-dst Defined in ‘simple.el’. -- Function: decoded-time-zone Defined in ‘simple.el’. -- Function: package-get-version Defined in ‘package.el’. -- Function: time-equal-p See *note (elisp) Time Calculations: (elisp)Time Calculations. -- Function: date-days-in-month See *note (elisp) Time Calculations: (elisp)Time Calculations. -- Function: exec-path See *note (elisp) Subprocess Creation: (elisp)Subprocess Creation. This function requires the ‘time-date’ feature to be loaded. These functions are prefixed with ‘compat’ prefix, and are only loaded when ‘compat-27’ is required: -- Function: compat-recenter See *note (elisp) Textual Scrolling: (elisp)Textual Scrolling. Adds the optional argument REDISPLAY. -- Function: compat-lookup-key See *note (elisp) Low-Level Key Binding: (elisp)Low-Level Key Binding. Allows KEYMAP to be a list of keymaps. -- Macro: compat-setq-local See *note (elisp) Creating Buffer-Local: (elisp)Creating Buffer-Local. Allow for more than one variable to be set. -- Function: compat-regexp-opt See *note (elisp) Regexp Functions: (elisp)Regexp Functions. Handle an empty list of strings. -- Function: compat-file-size-human-readable Defined in ‘files.el’. Handle the optional third (SPACE) and forth (UNIT) arguments. -- Function: compat-assoc-delete-all See *note (elisp) Association Lists: (elisp)Association Lists. Handle the optional third (TESTFN) argument. -- Function: compat-executable-find *note (elisp) Locating Files: (elisp)Locating Files. Handle the optional second (REMOTE) argument. -- Function: compat-dired-get-marked-files Defined in ‘dired.el’ Handles the optional fifth (ERROR) argument. Compat does not provide support for the following Lisp features implemented in 27.1: • Bigint support. • The function ‘time-convert’. • All ‘iso8601-*’ functions. • The macro ‘benchmark-progn’. • The function ‘read-char-from-minibuffer’. • The minor mode ‘reveal-mode’. • The macro ‘with-suppressed-warnings’. • Support for ‘condition-case’ to handle t. • The functions ‘major-mode-suspend’ and ‘major-mode-restore’. • The function ‘provided-mode-derived-p’. • The function ‘file-system-info’. • The more consistent treatment of NaN values. • The function ‘ring-resize’. • The function ‘group-name’. • Additional ‘format-spec’ modifiers. • Support for additional body forms for ‘define-globalized-minor-mode’. • The macro ‘with-connection-local-variables’ and related functionality. Note that the changes in Emacs 27.2 are also included here, for the sake of simplicity.  File: compat.info, Node: Emacs 28.1, Prev: Emacs 27.1, Up: Support 2.6 Emacs 28.1 ============== The following functions and macros implemented in 28.1, and are provided by Compat by default: -- Function: string-search See *note (elisp) Text Comparison: (elisp)Text Comparison. -- Function: length= See *note (elisp) Sequence Functions: (elisp)Sequence Functions. -- Function: length< See *note (elisp) Sequence Functions: (elisp)Sequence Functions. -- Function: length> See *note (elisp) Sequence Functions: (elisp)Sequence Functions. -- Function: file-name-concat See *note (elisp) Directory Names: (elisp)Directory Names. -- Function: garbage-collect-maybe Defined in ‘alloc.c’. -- Function: string-replace See *note (elisp) Search and Replace: (elisp)Search and Replace. -- Function: always *note (elisp) Calling Functions: (elisp)Calling Functions. -- Function: insert-into-buffer See *note (elisp) Insertion: (elisp)Insertion. -- Function: replace-regexp-in-region See *note (elisp) Search and Replace: (elisp)Search and Replace. -- Function: replace-string-in-region See *note (elisp) Search and Replace: (elisp)Search and Replace. -- Function: buffer-local-boundp See *note (elisp) Creating Buffer-Local: (elisp)Creating Buffer-Local. -- Function: with-existing-directory See *note (elisp) Testing Accessibility: (elisp)Testing Accessibility. -- Macro: dlet See *note (elisp) Local Variables: (elisp)Local Variables. -- Function: ensure-list See *note (elisp) Building Lists: (elisp)Building Lists. -- Function: string-clean-whitespace See *note (elisp) Creating Strings: (elisp)Creating Strings. -- Function: string-fill See *note (elisp) Creating Strings: (elisp)Creating Strings. -- Function: string-lines See *note (elisp) Creating Strings: (elisp)Creating Strings. -- Function: string-pad See *note (elisp) Creating Strings: (elisp)Creating Strings. -- Function: string-chop-newline See *note (elisp) Creating Strings: (elisp)Creating Strings. -- Macro: named-let See *note (elisp) Local Variables: (elisp)Local Variables. -- Function: file-name-with-extension See *note (elisp) File Name Components: (elisp)File Name Components. -- Function: directory-empty-p See *note (elisp) Contents of Directories: (elisp)Contents of Directories. -- Function: format-prompt See *note (elisp) Text from Minibuffer: (elisp)Text from Minibuffer. -- Function: thing-at-mouse Defined in ‘thingatpt.el’. -- Function: macroexp-file-name Defined in ‘macroexp’. -- Macro: with-environment-variables See *note (elisp) System Environment: (elisp)System Environment. -- Function: button-buttonize Defined in ‘button.el’. -- Function: make-directory-autoloads See *note (elisp) Autoload: (elisp)Autoload. -- Function: color-values-from-color-spec Defined in ‘xfaces.c’. -- Function: file-modes-number-to-symbolic See *note (elisp) Changing Files: (elisp)Changing Files. -- Function: file-backup-file-names See *note (elisp) Backup Names: (elisp)Backup Names. -- Function: make-lock-file-name Defined in ‘files.el’. -- Function: null-device Defined in ‘files.el’. -- Function: decoded-time-period Defined in ‘time-data.el’. -- Function: subr-primitive-p Defined in ‘subr.el’. These functions are prefixed with ‘compat’ prefix, and are only loaded when ‘compat-28’ is required: -- Function: compat-unlock-buffer See *note (elisp) File Locks: (elisp)File Locks. Handle ‘file-error’ conditions. -- Function: compat-string-width See *note (elisp) Size of Displayed Text: (elisp)Size of Displayed Text. Handle optional arguments FROM and TO. -- Function: compat-json-serialize See *note (elisp) Parsing JSON: (elisp)Parsing JSON. Handle primitive, top-level JSON values. -- Function: compat-json-insert See *note (elisp) Parsing JSON: (elisp)Parsing JSON. Handle primitive, top-level JSON values. -- Function: compat-json-parse-string See *note (elisp) Parsing JSON: (elisp)Parsing JSON. Handle primitive, top-level JSON values. -- Function: compat-json-parse-buffer See *note (elisp) Parsing JSON: (elisp)Parsing JSON. Handle primitive, top-level JSON values. -- Function: compat-count-windows Defined in ‘window.el’. Handle optional argument ALL-FRAMES. Compat does not provide support for the following Lisp features implemented in 28.1: • Support for ‘interactive’ or ‘declare’ to list applicable modes. • Support for ‘:interactive’ argument to ‘define-minor-mode’ and ‘define-derived-mode’. • Support for ‘:predicate’ argument to ‘define-globalized-minor-mode’. • "Success handler" for ‘condition-case’. • The function ‘benchmark-call’. • Support for the ‘natnum’ defcustom type. • The function ‘macroexp-compiling-p’. • The function ‘macroexp-warn-and-return’. • Additional Edebug keywords. • Shorthand support. • The function ‘custom-add-choice’. • The function ‘decoded-time-period’. • The function ‘dom-print’. • The function ‘dom-remove-attribute’. • The function ‘dns-query-asynchronous’. • The function ‘get-locale-names’. • The function ‘json-avaliable-p’. • The function ‘mail-header-parse-addresses-lax’. • The function ‘mail-header-parse-address-lax’. • The function ‘make-separator-line’. • The function ‘num-processors’. • The function ‘object-intervals’. • The function ‘process-lines-ignore-status’. • The function ‘require-theme’. • The function ‘syntax-class-to-char’. • The function ‘null-device’ and ‘path-separator’.  File: compat.info, Node: Development, Next: Function Index, Prev: Support, Up: Top 3 Development ************* Compat is developed on SourceHut (https://sr.ht/~pkal/compat). A restricted GitHub mirror (https://github.com/phikal/compat.el) is also maintained. Patches and comments can be sent to the development mailing list (https://lists.sr.ht/~pkal/compat-devel) (~pkal/compat-devel@lists.sr.ht <~pkal/compat-devel@lists.sr.ht>). Bug reports are best sent to the issue tracker (https://todo.sr.ht/~pkal/compat) (~pkal/compat@todo.sr.ht <~pkal/compat@todo.sr.ht>). The GitHub mirror can also be used to submit patches. These may include issues in the compatibility code, missing definitions or performance issues. Please note that as a GNU ELPA package, Compat requires contributors to have signed the FSF copyright assignment (https://www.gnu.org/software/emacs/manual/html_node/emacs/Copyright-Assignment.html), before any non-trivial contribution (roughly 15 lines of code) can be applied.  File: compat.info, Node: Function Index, Next: Variable Index, Prev: Development, Up: Top Appendix A Function Index ************************* [index] * Menu: * alist-get: Emacs 25.1. (line 21) * always: Emacs 28.1. (line 30) * and-let*: Emacs 26.1. (line 40) * bool-vector: Emacs 25.1. (line 43) * bool-vector-count-consecutive: Emacs 24.4. (line 42) * bool-vector-count-population: Emacs 24.4. (line 45) * bool-vector-exclusive-or: Emacs 24.4. (line 27) * bool-vector-intersection: Emacs 24.4. (line 33) * bool-vector-not: Emacs 24.4. (line 36) * bool-vector-subsetp: Emacs 24.4. (line 39) * bool-vector-union: Emacs 24.4. (line 30) * buffer-local-boundp: Emacs 28.1. (line 42) * button-buttonize: Emacs 28.1. (line 95) * color-values-from-color-spec: Emacs 28.1. (line 101) * compat-<: Emacs 24.4. (line 62) * compat-<=: Emacs 24.4. (line 64) * compat-=: Emacs 24.4. (line 61) * compat->: Emacs 24.4. (line 63) * compat->=: Emacs 24.4. (line 65) * compat-alist-get: Emacs 26.1. (line 111) * compat-assoc: Emacs 26.1. (line 101) * compat-assoc-delete-all: Emacs 27.1. (line 115) * compat-count-windows: Emacs 28.1. (line 156) * compat-dired-get-marked-files: Emacs 27.1. (line 125) * compat-executable-find: Emacs 27.1. (line 120) * compat-file-size-human-readable: Emacs 27.1. (line 110) * compat-json-insert: Emacs 28.1. (line 141) * compat-json-parse-buffer: Emacs 28.1. (line 151) * compat-json-parse-string: Emacs 28.1. (line 146) * compat-json-serialize: Emacs 28.1. (line 136) * compat-line-number-at-pos: Emacs 26.1. (line 106) * compat-lookup-key: Emacs 27.1. (line 93) * compat-recenter: Emacs 27.1. (line 88) * compat-regexp-opt: Emacs 27.1. (line 105) * compat-setq-local: Emacs 27.1. (line 99) * compat-sort: Emacs 25.1. (line 49) * compat-split-string: Emacs 24.4. (line 71) * compat-string-trim: Emacs 26.1. (line 127) * compat-string-trim-left: Emacs 26.1. (line 117) * compat-string-trim-right: Emacs 26.1. (line 122) * compat-string-width: Emacs 28.1. (line 130) * compat-unlock-buffer: Emacs 28.1. (line 125) * completion-table-merge: Emacs 24.4. (line 48) * completion-table-with-cache: Emacs 24.4. (line 51) * cXXXr: Emacs 26.1. (line 15) * cXXXXr: Emacs 26.1. (line 16) * date-days-in-month: Emacs 27.1. (line 77) * decoded-time-day: Emacs 27.1. (line 53) * decoded-time-dst: Emacs 27.1. (line 65) * decoded-time-hour: Emacs 27.1. (line 50) * decoded-time-minute: Emacs 27.1. (line 47) * decoded-time-month: Emacs 27.1. (line 56) * decoded-time-period: Emacs 28.1. (line 116) * decoded-time-second: Emacs 27.1. (line 44) * decoded-time-weekday: Emacs 27.1. (line 62) * decoded-time-year: Emacs 27.1. (line 59) * decoded-time-zone: Emacs 27.1. (line 68) * define-error: Emacs 24.4. (line 24) * delete-consecutive-dups: Emacs 24.4. (line 21) * directory-empty-p: Emacs 28.1. (line 78) * directory-files-recursively: Emacs 25.1. (line 39) * directory-name-p: Emacs 25.1. (line 12) * dlet: Emacs 28.1. (line 50) * dolist-with-progress-reporter: Emacs 27.1. (line 31) * ensure-list: Emacs 28.1. (line 53) * exec-path: Emacs 27.1. (line 80) * face-spec-set: Emacs 24.4. (line 55) * file-attribute-access-time: Emacs 26.1. (line 74) * file-attribute-collect: Emacs 26.1. (line 95) * file-attribute-device-number: Emacs 26.1. (line 92) * file-attribute-group-id: Emacs 26.1. (line 71) * file-attribute-inode-number: Emacs 26.1. (line 89) * file-attribute-link-number: Emacs 26.1. (line 65) * file-attribute-modes: Emacs 26.1. (line 86) * file-attribute-modification-time: Emacs 26.1. (line 77) * file-attribute-size: Emacs 26.1. (line 83) * file-attribute-status-change-time: Emacs 26.1. (line 80) * file-attribute-type: Emacs 26.1. (line 62) * file-attribute-user-id: Emacs 26.1. (line 68) * file-backup-file-names: Emacs 28.1. (line 107) * file-local-name: Emacs 26.1. (line 47) * file-modes-number-to-symbolic: Emacs 28.1. (line 104) * file-name-concat: Emacs 28.1. (line 21) * file-name-quote: Emacs 26.1. (line 53) * file-name-quoted-p: Emacs 26.1. (line 50) * file-name-with-extension: Emacs 28.1. (line 74) * flatten-tree: Emacs 27.1. (line 34) * format-message: Emacs 25.1. (line 9) * format-prompt: Emacs 28.1. (line 82) * func-arity: Emacs 26.1. (line 9) * garbage-collect-maybe: Emacs 28.1. (line 24) * gensym: Emacs 26.1. (line 22) * if-let: Emacs 25.1. (line 24) * if-let*: Emacs 26.1. (line 34) * ignore-error: Emacs 27.1. (line 28) * image-property: Emacs 26.1. (line 56) * insert-into-buffer: Emacs 28.1. (line 33) * json-insert: Emacs 27.1. (line 19) * json-parse-buffer: Emacs 27.1. (line 25) * json-parse-string: Emacs 27.1. (line 22) * json-serialize: Emacs 27.1. (line 16) * length<: Emacs 28.1. (line 15) * length=: Emacs 28.1. (line 12) * length>: Emacs 28.1. (line 18) * macroexp-file-name: Emacs 28.1. (line 89) * macroexpand-1: Emacs 25.1. (line 36) * macrop: Emacs 24.4. (line 15) * make-directory-autoloads: Emacs 28.1. (line 98) * make-lock-file-name: Emacs 28.1. (line 110) * make-nearby-temp-file: Emacs 26.1. (line 25) * mapcan: Emacs 26.1. (line 12) * named-let: Emacs 28.1. (line 71) * null-device: Emacs 28.1. (line 113) * package-get-version: Emacs 27.1. (line 71) * proper-list-p: Emacs 27.1. (line 9) * replace-regexp-in-region: Emacs 28.1. (line 36) * replace-string-in-region: Emacs 28.1. (line 39) * special-form-p: Emacs 24.4. (line 12) * string-chop-newline: Emacs 28.1. (line 68) * string-clean-whitespace: Emacs 28.1. (line 56) * string-distance: Emacs 27.1. (line 13) * string-fill: Emacs 28.1. (line 59) * string-greaterp: Emacs 25.1. (line 15) * string-lines: Emacs 28.1. (line 62) * string-pad: Emacs 28.1. (line 65) * string-replace: Emacs 28.1. (line 27) * string-search: Emacs 28.1. (line 9) * string-suffix-p: Emacs 24.4. (line 18) * subr-primitive-p: Emacs 28.1. (line 119) * temporary-file-directory: Emacs 26.1. (line 31) * thing-at-mouse: Emacs 28.1. (line 86) * thread-first: Emacs 25.1. (line 30) * thread-last: Emacs 25.1. (line 33) * time-equal-p: Emacs 27.1. (line 74) * when-let: Emacs 25.1. (line 27) * when-let*: Emacs 26.1. (line 37) * with-environment-variables: Emacs 28.1. (line 92) * with-eval-after-load: Emacs 24.4. (line 9) * with-existing-directory: Emacs 28.1. (line 46) * with-file-modes: Emacs 25.1. (line 18) * xor: Emacs 27.1. (line 37)  File: compat.info, Node: Variable Index, Prev: Function Index, Up: Top Appendix B Variable Index ************************* [index] * Menu: * gensym-counter: Emacs 26.1. (line 19) * mounted-file-systems: Emacs 26.1. (line 28) * regexp-unmatchable: Emacs 27.1. (line 41)  Tag Table: Node: Top821 Node: Introduction2344 Node: Overview2503 Node: Usage3726 Node: Additional libraries4514 Node: Intentions4969 Node: Support6579 Node: Emacs 24.47231 Node: Emacs 24.510391 Node: Emacs 25.110565 Node: Emacs 26.113160 Node: Emacs 27.118253 Node: Emacs 28.122838 Node: Development28861 Node: Function Index29876 Node: Variable Index40341  End Tag Table  Local Variables: coding: utf-8 End: