GNU ELPA - compat


Emacs Lisp Compatibility Library
compat-, 2023-Feb-01, 320 KiB
Daniel Mendler <>, Compat Development <~pkal/>
Browse ELPA's repository
CGit or Gitweb

To install this package, run in Emacs:

M-x package-install RET compat RET

Full description

Compat is the Elisp forwards compatibility library, which provides
definitions introduced in newer Emacs versions.  The definitions
are only installed if necessary for your current Emacs version.  If
Compat is compiled on a recent version of Emacs, all of the
definitions are disabled at compile time, such that no negative
performance impact is incurred.  The provided compatibility
implementations of functions and macros are at least subsets of the
actual implementations.  Be sure to read the documentation string
and the Compat manual.

Not every function provided in newer versions of Emacs is provided
here.  Some depend on new features from the C core, others cannot
be implemented to a meaningful degree.  Please consult the Compat
manual for details regarding the usage of the Compat library and
the provided functionality.

The main audience for this library are not regular users, but
package maintainers.  Therefore no commands, user-facing modes or
user options are implemented here.

Old versions

compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB
compat- KiB


1 Release of "Compat" Version

  • compat-26: Add make-temp-file with optional argument TEXT.
  • compat-27: Mark compat-call dired-get-marked-files as obsolete. See the section limitations in the Compat manual.
  • compat-29: Add funcall-with-delayed-message and with-delayed-message.
  • compat-29: Add ert-with-temp-file and ert-with-temp-directory.
  • compat-29: Add set-transient-map with optional arguments MESSAGE and TIMEOUT.

(Release <2023-02-01 Wed>)

2 Release of "Compat" Version

  • Fix regression, which prevented loading Compat in interpreted mode. We ensure that Compat works interpreted and byte compiled by running the entire test suite twice in the CI.
  • compat-27: Add file-name-unquote.
  • compat-28: Add mark-thing-at-mouse.
  • compat-29: Replace string-lines with version from Emacs 29, support optional KEEP-NEWLINES argument.

(Release <2023-01-25 Wed>)

3 Release of "Compat" Version

  • compat-25: Add hash-table-empty-p.
  • compat-25: Add macroexp-parse-body and macroexp-quote.
  • compat-25: Add region-noncontiguous-p.
  • compat-25: Add save-mark-and-excursion.
  • compat-26: Add read-answer.
  • compat-26: Add region-bounds.
  • compat-27: Add date-ordinal-to-time.
  • compat-27: Add file-size-human-readable-iec.
  • compat-27: Add major-mode-suspend and major-mode-restore.
  • compat-27: Add make-decoded-time.
  • compat-27: Add minibuffer-history-value.
  • compat-27: Add read-char-from-minibuffer.
  • compat-27: Add ring-resize.
  • compat-28: Add color-dark-p.
  • compat-28: Add directory-files-and-attributes with COUNT argument.
  • compat-28: Add text-quoting-style.
  • compat-28: Add with-window-non-dedicated.
  • compat-29: Add buffer-local-set-state and buffer-local-restore-state.
  • compat-29: Add compiled-function-p.
  • compat-29: Add count-sentences.
  • compat-29: Add delete-line.
  • compat-29: Add get-scratch-buffer-create.
  • compat-29: Add list-of-strings-p.
  • compat-29: Add plist-get generalized variable.
  • compat-29: Add plistp.
  • compat-29: Add read-multiple-choice with LONG-FORM argument.
  • compat-29: Add readablep.
  • compat-29: Add substitute-quotes.
  • compat-29: Add use-region-beginning, use-region-end and use-region-noncontiguous-p.
  • compat-29: Add with-narrowing.

(Release <2023-01-22 Sun>)

4 Release of "Compat" Version

  • All compatibility functions are covered by tests!
  • Add links from compatibility definitions to tests.
  • BREAKING: Drop JSON parsing support (libjansson API, unused downstream).
  • BREAKING: Drop null-device (unused downstream).
  • BREAKING: Drop unlock-buffer (unused downstream).
  • compat-26: Add buffer-hash.
  • compat-27: Add fixnump and bignump.
  • compat-27: Add with-minibuffer-selected-window.
  • compat-27: Add generalized variables for decoded-time-*.
  • compat-28: Add macroexp-warn-and-return.
  • compat-28: Add subr-native-elisp-p.
  • compat-28: Add bounds-of-thing-at-mouse.
  • compat-29: Add with-buffer-unmodified-if-unchanged.
  • compat-29: Fix and test define-key with REMOVE argument.

(Release <2023-01-16 Mon>)

5 Release of "Compat" Version

  • Add tests, 167 out of 203 definitions tested (82%).
  • compat-25: Improve algorithmic complexity of sort.
  • compat-28: Add make-separator-line.
  • compat-29: Minor fixes to keymap-* functions.
  • compat-29: Add with-memoization.
  • compat-29: Add buttonize and buttonize-region.

(Release <2023-01-14 Sat>)

6 Release of "Compat" Version

  • The macros in compat-macs.el have been rewritten and simplified. The refactoring allows to further refine the criteria under which compatibility aliases, functions, macros and variables are installed.
  • Remove deprecated, prefixed compatibility functions.
  • Remove deprecated features compat-help, compat-font-lock and compat-24.
  • Compat uses runtime checks (boundp, fboundp) to ensure that existing definitions are never overridden, when Compat is loaded on a newer Emacs than

… …