aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compat-25.el10
-rw-r--r--compat-26.el26
-rw-r--r--compat-27.el12
-rw-r--r--compat-28.el4
-rw-r--r--compat-29.el60
-rw-r--r--compat-macs.el5
-rw-r--r--compat-tests.el18
7 files changed, 70 insertions, 65 deletions
diff --git a/compat-25.el b/compat-25.el
index 891ebfa..5398d59 100644
--- a/compat-25.el
+++ b/compat-25.el
@@ -79,7 +79,7 @@ This implementation is equivalent to `format'."
(compat-defun directory-name-p (name)
"Return non-nil if NAME ends with a directory separator character."
- :realname compat--directory-name-p
+ :realname compat--internal-directory-name-p
(eq (eval-when-compile
(if (memq system-type '(cygwin windows-nt ms-dos))
?\\ ?/))
@@ -296,7 +296,7 @@ subdirectory is to be descended into).
If FOLLOW-SYMLINKS is non-nil, symbolic links that point to
directories are followed. Note that this can lead to infinite
recursion."
- :realname compat--directory-files-recursively
+ :realname compat--internal-directory-files-recursively
(let* ((result nil)
(files nil)
(dir (directory-file-name dir))
@@ -306,7 +306,7 @@ recursion."
(dolist (file (sort (file-name-all-completions "" dir)
'string<))
(unless (member file '("./" "../"))
- (if (compat--directory-name-p file)
+ (if (compat--internal-directory-name-p file)
(let* ((leaf (substring file 0 (1- (length file))))
(full-file (concat dir "/" leaf)))
;; Don't follow symlinks to other directories.
@@ -320,11 +320,11 @@ recursion."
(let ((sub-files
(if (eq predicate t)
(condition-case nil
- (compat--directory-files-recursively
+ (compat--internal-directory-files-recursively
full-file regexp include-directories
predicate follow-symlinks)
(file-error nil))
- (compat--directory-files-recursively
+ (compat--internal-directory-files-recursively
full-file regexp include-directories
predicate follow-symlinks))))
(setq result (nconc result sub-files))))
diff --git a/compat-26.el b/compat-26.el
index bded43b..bd97b7d 100644
--- a/compat-26.el
+++ b/compat-26.el
@@ -44,14 +44,14 @@ FUNC must be a function of some kind.
The returned value is a cons cell (MIN . MAX). MIN is the minimum number
of args. MAX is the maximum number, or the symbol `many', for a
function with `&rest' args, or `unevalled' for a special form."
- :realname compat--func-arity
+ :realname compat--internal-func-arity
(cond
((or (null func) (and (symbolp func) (not (fboundp func))))
(signal 'void-function func))
((and (symbolp func) (not (null func)))
- (compat--func-arity (symbol-function func)))
+ (compat--internal-func-arity (symbol-function func)))
((eq (car-safe func) 'macro)
- (compat--func-arity (cdr func)))
+ (compat--internal-func-arity (cdr func)))
((subrp func)
(subr-arity func))
((memq (car-safe func) '(closure lambda))
@@ -106,7 +106,7 @@ function with `&rest' args, or `unevalled' for a special form."
(cons mandatory (if arglist 'many nonrest))))
((autoloadp func)
(autoload-do-load func)
- (compat--func-arity func))
+ (compat--internal-func-arity func))
((signal 'invalid-function func))))
;;;; Defined in fns.c
@@ -192,7 +192,7 @@ from the absolute start of the buffer, disregarding the narrowing."
"Trim STRING of leading string matching REGEXP.
REGEXP defaults to \"[ \\t\\n\\r]+\"."
- :realname compat--string-trim-left
+ :realname compat--internal-string-trim-left
:prefix t
(if (string-match (concat "\\`\\(?:" (or regexp "[ \t\n\r]+") "\\)") string)
(substring string (match-end 0))
@@ -202,7 +202,7 @@ REGEXP defaults to \"[ \\t\\n\\r]+\"."
"Trim STRING of trailing string matching REGEXP.
REGEXP defaults to \"[ \\t\\n\\r]+\"."
- :realname compat--string-trim-right
+ :realname compat--internal-string-trim-right
:prefix t
(let ((i (string-match-p
(concat "\\(?:" (or regexp "[ \t\n\r]+") "\\)\\'")
@@ -217,8 +217,8 @@ TRIM-LEFT and TRIM-RIGHT default to \"[ \\t\\n\\r]+\"."
;; `string-trim-left' and `string-trim-right' were moved from subr-x
;; to subr in Emacs 27, so to avoid loading subr-x we use the
;; compatibility function here:
- (compat--string-trim-left
- (compat--string-trim-right
+ (compat--internal-string-trim-left
+ (compat--internal-string-trim-right
string
trim-right)
trim-left))
@@ -445,15 +445,15 @@ and the method of accessing the host, leaving only the part that
identifies FILE locally on the remote system.
The returned file name can be used directly as argument of
`process-file', `start-file-process', or `shell-command'."
- :realname compat--file-local-name
+ :realname compat--internal-file-local-name
(or (file-remote-p file 'localname) file))
(compat-defun file-name-quoted-p (name &optional top)
"Whether NAME is quoted with prefix \"/:\".
If NAME is a remote file name and TOP is nil, check the local part of NAME."
- :realname compat--file-name-quoted-p
+ :realname compat--internal-file-name-quoted-p
(let ((file-name-handler-alist (unless top file-name-handler-alist)))
- (string-prefix-p "/:" (compat--file-local-name name))))
+ (string-prefix-p "/:" (compat--internal-file-local-name name))))
(compat-defun file-name-quote (name &optional top)
"Add the quotation prefix \"/:\" to file NAME.
@@ -461,9 +461,9 @@ If NAME is a remote file name and TOP is nil, the local part of
NAME is quoted. If NAME is already a quoted file name, NAME is
returned unchanged."
(let ((file-name-handler-alist (unless top file-name-handler-alist)))
- (if (compat--file-name-quoted-p name top)
+ (if (compat--internal-file-name-quoted-p name top)
name
- (concat (file-remote-p name) "/:" (compat--file-local-name name)))))
+ (concat (file-remote-p name) "/:" (compat--internal-file-local-name name)))))
;;* UNTESTED
(compat-defun temporary-file-directory ()
diff --git a/compat-27.el b/compat-27.el
index 43d9897..a57618b 100644
--- a/compat-27.el
+++ b/compat-27.el
@@ -174,7 +174,7 @@ any JSON false values."
(:success t)
(void-function nil)
(json-unavailable nil)))
- :realname compat--json-serialize
+ :realname compat--internal-json-serialize
(require 'json)
(letrec ((fix (lambda (obj)
(cond
@@ -235,7 +235,7 @@ OBJECT."
(:success t)
(void-function nil)
(json-unavailable nil)))
- (insert (apply #'compat--json-serialize object args)))
+ (insert (apply #'compat--internal-json-serialize object args)))
(compat-defun json-parse-string (string &rest args)
"Parse the JSON STRING into a Lisp object.
@@ -395,7 +395,7 @@ where USER is a valid login name."
"Non-nil if MODE is derived from one of MODES.
Uses the `derived-mode-parent' property of the symbol to trace backwards.
If you just want to check `major-mode', use `derived-mode-p'."
- :realname compat--provided-mode-derived-p
+ :realname compat--internal-provided-mode-derived-p
;; If MODE is an alias, then look up the real mode function first.
(let ((alias (symbol-function mode)))
(when (and alias (symbolp alias))
@@ -412,7 +412,7 @@ If you just want to check `major-mode', use `derived-mode-p'."
(compat-defun derived-mode-p (&rest modes)
"Non-nil if the current major mode is derived from one of MODES.
Uses the `derived-mode-parent' property of the symbol to trace backwards."
- (apply #'compat--provided-mode-derived-p major-mode modes))
+ (apply #'compat--internal-provided-mode-derived-p major-mode modes))
;;* UNTESTED
(compat-defmacro ignore-error (condition &rest body)
@@ -603,7 +603,7 @@ The remote host is identified by `default-directory'. For remote
hosts that do not support subprocesses, this returns nil.
If `default-directory' is a local directory, this function returns
the value of the variable `exec-path'."
- :realname compat--exec-path
+ :realname compat--internal-exec-path
(cond
((let ((handler (find-file-name-handler default-directory 'exec-path)))
;; FIXME: The handler was added in 27.1, and this compatibility
@@ -643,7 +643,7 @@ REMOTE is non-nil, search on the remote host indicated by
(mapcar
(apply-partially
#'concat (file-remote-p default-directory))
- (compat--exec-path))
+ (compat--internal-exec-path))
exec-suffixes 'file-executable-p)))
(when (stringp res) (compat--file-local-name res)))
(executable-find command)))
diff --git a/compat-28.el b/compat-28.el
index c7316bd..47febbe 100644
--- a/compat-28.el
+++ b/compat-28.el
@@ -617,13 +617,13 @@ Errors if the FILENAME or EXTENSION are empty, or if the given
FILENAME has the format of a directory.
See also `file-name-sans-extension'."
- (let ((extn (compat--string-trim-left extension "[.]")))
+ (let ((extn (compat--internal-string-trim-left extension "[.]")))
(cond
((string= filename "")
(error "Empty filename"))
((string= extn "")
(error "Malformed extension: %s" extension))
- ((compat--directory-name-p filename)
+ ((compat--internal-directory-name-p filename)
(error "Filename is a directory: %s" filename))
(t
(concat (file-name-sans-extension filename) "." extn)))))
diff --git a/compat-29.el b/compat-29.el
index 1680a92..2389ff9 100644
--- a/compat-29.el
+++ b/compat-29.el
@@ -80,7 +80,7 @@ Do not use this function if the buffer specified by BUFFER-OR-NAME is
already displayed in WINDOW. `window-text-pixel-size' is cheaper in
that case because it does not have to temporarily show that buffer in
WINDOW."
- :realname compat--buffer-text-pixel-size
+ :realname compat--internal-buffer-text-pixel-size
(setq buffer-or-name (or buffer-or-name (current-buffer)))
(setq window (or window (selected-window)))
(save-window-excursion
@@ -286,7 +286,7 @@ CONDITION is either:
to be met.
* `or': the cdr is a list of recursive condition, of which at
least one has to be met."
- :realname compat--buffer-match-p
+ :realname compat--internal-buffer-match-p
(letrec
((buffer (get-buffer buffer-or-name))
(match
@@ -298,7 +298,7 @@ CONDITION is either:
((stringp condition)
(string-match-p condition (buffer-name buffer)))
((functionp condition)
- (if (eq 1 (cdr (compat--func-arity condition)))
+ (if (eq 1 (cdr (compat--internal-func-arity condition)))
(funcall condition buffer)
(funcall condition buffer arg)))
((eq (car-safe condition) 'major-mode)
@@ -306,7 +306,7 @@ CONDITION is either:
(buffer-local-value 'major-mode buffer)
(cdr condition)))
((eq (car-safe condition) 'derived-mode)
- (compat--provided-mode-derived-p
+ (compat--internal-provided-mode-derived-p
(buffer-local-value 'major-mode buffer)
(cdr condition)))
((eq (car-safe condition) 'not)
@@ -332,7 +332,7 @@ ARG is passed to `buffer-match', for predicate conditions in
CONDITION."
(let (bufs)
(dolist (buf (or buffers (buffer-list)))
- (when (compat--buffer-match-p condition (get-buffer buf) arg)
+ (when (compat--internal-buffer-match-p condition (get-buffer buf) arg)
(push buf bufs)))
bufs))
@@ -394,7 +394,7 @@ than this function."
(with-current-buffer (get-buffer-create " *string-pixel-width*")
(delete-region (point-min) (point-max))
(insert string)
- (car (compat--buffer-text-pixel-size nil nil t)))))
+ (car (compat--internal-buffer-text-pixel-size nil nil t)))))
;;* UNTESTED
(compat-defmacro with-buffer-unmodified-if-unchanged (&rest body)
@@ -573,7 +573,7 @@ Modifiers have to be specified in this order:
which is
Alt-Control-Hyper-Meta-Shift-super"
- :realname compat--key-valid-p
+ :realname compat--internal-key-valid-p
(declare (pure t) (side-effect-free t))
(let ((case-fold-search nil))
(and
@@ -611,7 +611,7 @@ which is
(compat-defun key-parse (keys)
"Convert KEYS to the internal Emacs key representation.
See `kbd' for a descripion of KEYS."
- :realname compat--key-parse
+ :realname compat--internal-key-parse
(declare (pure t) (side-effect-free t))
;; A pure function is expected to preserve the match data.
(save-match-data
@@ -721,16 +721,16 @@ DEFINITION is anything that can be a key's definition:
or a cons (MAP . CHAR), meaning use definition of CHAR in keymap MAP,
or an extended menu item definition.
(See info node `(elisp)Extended Menu Items'.)"
- :realname compat--keymap-set
- (unless (compat--key-valid-p key)
+ :realname compat--internal-keymap-set
+ (unless (compat--internal-key-valid-p key)
(error "%S is not a valid key definition; see `key-valid-p'" key))
;; If we're binding this key to another key, then parse that other
;; key, too.
(when (stringp definition)
- (unless (compat--key-valid-p key)
+ (unless (compat--internal-key-valid-p key)
(error "%S is not a valid key definition; see `key-valid-p'" key))
- (setq definition (compat--key-parse definition)))
- (define-key keymap (compat--key-parse key) definition))
+ (setq definition (compat--internal-key-parse definition)))
+ (define-key keymap (compat--internal-key-parse key) definition))
;;* UNTESTED
(compat-defun keymap-unset (keymap key &optional remove)
@@ -742,10 +742,10 @@ makes a difference when there's a parent keymap. When unsetting
a key in a child map, it will still shadow the same key in the
parent keymap. Removing the binding will allow the key in the
parent keymap to be used."
- :realname compat--keymap-unset
- (unless (compat--key-valid-p key)
+ :realname compat--internal-keymap-unset
+ (unless (compat--internal-key-valid-p key)
(error "%S is not a valid key definition; see `key-valid-p'" key))
- (compat--define-key-with-remove keymap (compat--key-parse key) nil remove))
+ (compat--define-key-with-remove keymap (compat--internal-key-parse key) nil remove))
;;* UNTESTED
(compat-defun keymap-global-set (key command)
@@ -760,7 +760,7 @@ that local binding will continue to shadow any global binding
that you make with this function.
NOTE: The compatibility version is not a command."
- (compat--keymap-set (current-global-map) key command))
+ (compat--internal-keymap-set (current-global-map) key command))
;;* UNTESTED
(compat-defun keymap-local-set (key command)
@@ -777,7 +777,7 @@ NOTE: The compatibility version is not a command."
(let ((map (current-local-map)))
(unless map
(use-local-map (setq map (make-sparse-keymap))))
- (compat--keymap-set map key command)))
+ (compat--internal-keymap-set map key command)))
;;* UNTESTED
(compat-defun keymap-global-unset (key &optional remove)
@@ -788,7 +788,7 @@ If REMOVE (interactively, the prefix arg), remove the binding
instead of unsetting it. See `keymap-unset' for details.
NOTE: The compatibility version is not a command."
- (compat--keymap-unset (current-global-map) key remove))
+ (compat--internal-keymap-unset (current-global-map) key remove))
;;* UNTESTED
(compat-defun keymap-local-unset (key &optional remove)
@@ -800,7 +800,7 @@ instead of unsetting it. See `keymap-unset' for details.
NOTE: The compatibility version is not a command."
(when (current-local-map)
- (compat--keymap-unset (current-local-map) key remove)))
+ (compat--internal-keymap-unset (current-local-map) key remove)))
;;* UNTESTED
(compat-defun keymap-substitute (keymap olddef newdef &optional oldmap prefix)
@@ -849,13 +849,13 @@ Bindings are always added before any inherited map.
The order of bindings in a keymap matters only when it is used as
a menu, so this function is not useful for non-menu keymaps."
- (unless (compat--key-valid-p key)
+ (unless (compat--internal-key-valid-p key)
(error "%S is not a valid key definition; see `key-valid-p'" key))
(when after
- (unless (compat--key-valid-p key)
+ (unless (compat--internal-key-valid-p key)
(error "%S is not a valid key definition; see `key-valid-p'" key)))
- (define-key-after keymap (compat--key-parse key) definition
- (and after (compat--key-parse after))))
+ (define-key-after keymap (compat--internal-key-parse key) definition
+ (and after (compat--internal-key-parse after))))
(compat-defun keymap-lookup
(keymap key &optional accept-default no-remap position)
@@ -890,13 +890,13 @@ position as returned by `event-start' and `event-end', and the lookup
occurs in the keymaps associated with it instead of KEY. It can also
be a number or marker, in which case the keymap properties at the
specified buffer position instead of point are used."
- :realname compat--keymap-lookup
- (unless (compat--key-valid-p key)
+ :realname compat--internal-keymap-lookup
+ (unless (compat--internal-key-valid-p key)
(error "%S is not a valid key definition; see `key-valid-p'" key))
(when (and keymap position)
(error "Can't pass in both keymap and position"))
(if keymap
- (let ((value (lookup-key keymap (compat--key-parse key) accept-default)))
+ (let ((value (lookup-key keymap (compat--internal-key-parse key) accept-default)))
(if (and (not no-remap)
(symbolp value))
(or (command-remapping value) value)
@@ -915,7 +915,7 @@ bindings; see the description of `keymap-lookup' for more details
about this."
(let ((map (current-local-map)))
(when map
- (compat--keymap-lookup map keys accept-default))))
+ (compat--internal-keymap-lookup map keys accept-default))))
;;* UNTESTED
(compat-defun keymap-global-lookup (keys &optional accept-default _message)
@@ -931,7 +931,7 @@ bindings; see the description of `keymap-lookup' for more details
about this.
NOTE: The compatibility version is not a command."
- (compat--keymap-lookup (current-global-map) keys accept-default))
+ (compat--internal-keymap-lookup (current-global-map) keys accept-default))
;;* UNTESTED
(compat-defun define-keymap (&rest definitions)
@@ -1010,7 +1010,7 @@ should be a MENU form as accepted by `easy-menu-define'.
(let ((def (pop definitions)))
(if (eq key :menu)
(easy-menu-define nil keymap "" def)
- (compat--keymap-set keymap key def)))))
+ (compat--internal-keymap-set keymap key def)))))
keymap)))
;;* UNTESTED
diff --git a/compat-macs.el b/compat-macs.el
index c45fd76..4279df6 100644
--- a/compat-macs.el
+++ b/compat-macs.el
@@ -136,6 +136,11 @@ attributes (see `compat--generate-function')."
(when (version<= emacs-version "25")
(delq (assq 'side-effect-free (car body)) (car body))
(delq (assq 'pure (car body)) (car body))))
+ ;; Ensure that :realname is not the same as compat--<name>,
+ ;; since this is the compat-funcall/compat-function naming convention.
+ (when (and (plist-get rest :realname)
+ (string= (plist-get rest :realname) (format "compat--%s" name)))
+ (error "%s: :realname must not be the same as compat--<name>" name))
;; Check if we want an explicitly prefixed function
(when (plist-get rest :prefix)
(setq name (intern (format "compat-%s" name))))
diff --git a/compat-tests.el b/compat-tests.el
index 9555d2b..0c59a88 100644
--- a/compat-tests.el
+++ b/compat-tests.el
@@ -1272,29 +1272,29 @@ being compared against."
(should (equal (buffer-string) "{\":key\":[\"abc\",2],\"yek\":true}"))))
(ert-deftest compat-json-serialize ()
- "Check if `compat--json-serialize' was implemented properly."
+ "Check if `compat--internal-json-serialize' was implemented properly."
(let ((input-1 '((:key . ["abc" 2]) (yek . t)))
(input-2 '(:key ["abc" 2] yek t))
(input-3 (let ((ht (make-hash-table)))
(puthash "key" ["abc" 2] ht)
(puthash "yek" t ht)
ht)))
- (should (equal (compat--json-serialize input-1)
+ (should (equal (compat--internal-json-serialize input-1)
"{\":key\":[\"abc\",2],\"yek\":true}"))
- (should (equal (compat--json-serialize input-2)
+ (should (equal (compat--internal-json-serialize input-2)
"{\"key\":[\"abc\",2],\"yek\":true}"))
- (should (member (compat--json-serialize input-2)
+ (should (member (compat--internal-json-serialize input-2)
'("{\"key\":[\"abc\",2],\"yek\":true}"
"{\"yek\":true,\"key\":[\"abc\",2]}")))
- (should-error (compat--json-serialize '(("a" . 1)))
+ (should-error (compat--internal-json-serialize '(("a" . 1)))
:type '(wrong-type-argument symbolp "a"))
- (should-error (compat--json-serialize '("a" 1))
+ (should-error (compat--internal-json-serialize '("a" 1))
:type '(wrong-type-argument symbolp "a"))
- (should-error (compat--json-serialize '("a" 1 2))
+ (should-error (compat--internal-json-serialize '("a" 1 2))
:type '(wrong-type-argument symbolp "a"))
- (should-error (compat--json-serialize '(:a 1 2))
+ (should-error (compat--internal-json-serialize '(:a 1 2))
:type '(wrong-type-argument consp nil))
- (should-error (compat--json-serialize
+ (should-error (compat--internal-json-serialize
(let ((ht (make-hash-table)))
(puthash 'a 1 ht)
ht))