(when key
(dolist (_ (number-sequence 1 times))
(setq res (vconcat res key))))))
- (if (and (>= (length res) 4)
- (eq (aref res 0) ?\C-x)
- (eq (aref res 1) ?\()
- (eq (aref res (- (length res) 2)) ?\C-x)
- (eq (aref res (- (length res) 1)) ?\)))
- (apply #'vector (let ((lres (append res nil)))
- ;; Remove the first and last two elements.
- (setq lres (cdr (cdr lres)))
- (nreverse lres)
- (setq lres (cdr (cdr lres)))
- (nreverse lres)))
- res))))
+ res)))
(defun key-valid-p (keys)
"Say whether KEYS is a valid key.
For an approximate inverse of this, see `key-description'."
(declare (pure t) (side-effect-free t))
(let ((res (key-parse keys)))
+ ;; For historical reasons, parse "C-x ( C-d C-x )" as "C-d", since
+ ;; `kbd' used to be a wrapper around `read-kbd-macro'.
+ (when (and (>= (length res) 4)
+ (eq (aref res 0) ?\C-x)
+ (eq (aref res 1) ?\()
+ (eq (aref res (- (length res) 2)) ?\C-x)
+ (eq (aref res (- (length res) 1)) ?\)))
+ (setq res (apply #'vector (let ((lres (append res nil)))
+ ;; Remove the first and last two elements.
+ (setq lres (cddr lres))
+ (setq lres (nreverse lres))
+ (setq lres (cddr lres))
+ (nreverse lres)))))
+
(if (not (memq nil (mapcar (lambda (ch)
(and (numberp ch)
(<= 0 ch 127)))
(should (equal (string-lines "foo\n\n\nbar" t t)
'("foo\n" "bar"))))
+(defun test-keymap-parse-macros ()
+ (should (equal (key-parse "C-x ( C-d C-x )") [24 40 4 24 41]))
+ (should (equal (kbd "C-x ( C-d C-x )") "\ 4")))
+
(provide 'subr-tests)
;;; subr-tests.el ends here