bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#14903: 24.3.50; keyboard macros are broken in trunk (cl-mismatch err


From: Vitalie Spinu
Subject: bug#14903: 24.3.50; keyboard macros are broken in trunk (cl-mismatch error)
Date: Thu, 18 Jul 2013 23:15:37 +0200

To reproduce C-x ( and record arbitrary macro. Then try C-x e e

I am getting:

   Debugger entered--Lisp error: (error "Bad keyword argument 0")
     signal(error ("Bad keyword argument 0"))
     error("Bad keyword argument %s" 0)
     cl-mismatch([101 end-macro] [101 end-macro] 0 1 1 2)
     (not (cl-mismatch rest-mac rest-mac 0 bind-len pos (+ bind-len pos)))
     (while (not (cl-mismatch rest-mac rest-mac 0 bind-len pos (+ bind-len 
pos))) (setq times (1+ times)) (setq pos (+ pos bind-len)))
     (let ((times 1) (pos bind-len)) (while (not (cl-mismatch rest-mac rest-mac 
0 bind-len pos (+ bind-len pos))) (setq times (1+ times)) (setq pos (+ pos 
bind-len))) (if (> times 1) (progn (setq desc (format "%d*%s" times desc)) 
(setq bind-len (* bind-len times)))))
     (if (string-match " " desc) nil (let ((times 1) (pos bind-len)) (while 
(not (cl-mismatch rest-mac rest-mac 0 bind-len pos (+ bind-len pos))) (setq 
times (1+ times)) (setq pos (+ pos bind-len))) (if (> times 1) (progn (setq 
desc (format "%d*%s" times desc)) (setq bind-len (* bind-len times))))))
     (let* ((prefix (or (and (integerp (aref rest-mac 0)) (memq (aref rest-mac 
0) mdigs) (memq (key-binding (cl-subseq rest-mac 0 1)) (quote (digit-argument 
negative-argument))) (let ((i 1)) (while (memq ... ...) (setq i ...)) (and (not 
...) (prog1 ... ...)))) (and (eq (aref rest-mac 0) 21) (eq (key-binding [21]) 
(quote universal-argument)) (let ((i 1)) (while (eq ... 21) (setq i ...)) (and 
(not ...) (prog1 ... ...)))) (and (eq (aref rest-mac 0) 21) (eq (key-binding 
[21]) (quote universal-argument)) (let ((i 1)) (if (eq ... 45) (progn ...)) 
(while (memq ... ...) (setq i ...)) (and (not ...) (prog1 ... ...)))))) 
(bind-len (apply (quote max) 1 (progn (let* ((--cl-var-- maps) (map nil) (b 
nil) (--cl-var-- nil)) (while (consp --cl-var--) (setq map ...) (setq b ...) 
(if b ...) (setq --cl-var-- ...)) (nreverse --cl-var--))))) (key (cl-subseq 
rest-mac 0 bind-len)) (fkey nil) tlen tkey (bind (or (progn (let* ((--cl-var-- 
maps) (map nil) (b nil) (--cl-flag-- t) --cl-var--) (while (and ... ...) (setq 
--cl-var-- ...)) --cl-var--)) (and (setq fkey (lookup-key 
local-function-key-map rest-mac)) (setq tlen fkey tkey (cl-subseq rest-mac 0 
tlen) fkey (lookup-key local-function-key-map tkey)) (progn (let* (... ... ... 
... --cl-var--) (while ... ...) (if --cl-var-- ... --cl-var--)))))) (first 
(aref key 0)) (text (progn (let* ((i bind-len) (--cl-var-- (length rest-mac)) 
(ch nil)) (while (and (< i --cl-var--) (progn ... ...)) (setq i (+ i 1))) i))) 
desc) (if (stringp bind) (setq bind nil)) (cond ((and (eq bind (quote 
self-insert-command)) (not prefix) (> text 1) (integerp first) (> first 32) (<= 
first maxkey) (/= first 92) (progn (if (> text 30) (setq text 30)) (setq desc 
(concat (cl-subseq rest-mac 0 text))) (if (string-match "^[ACHMsS]-." desc) 
(progn (setq text 2) (setq desc ...))) (not (string-match 
"^;;\\|^<.*>$\\|^\\\\[0-9]+$\\|^[0-9]+\\*." desc)))) (if (or (string-match 
"^\\^.$" desc) (member desc res-words)) (progn (setq desc (mapconcat (quote 
char-to-string) desc " ")))) (if verbose (progn (setq bind (format "%s * %d" 
bind text)))) (setq bind-len text)) ((and (eq bind (quote 
execute-extended-command)) (> text bind-len) (memq (aref rest-mac text) (quote 
(return 13))) (progn (setq desc (concat (cl-subseq rest-mac bind-len text))) 
(commandp (intern-soft desc)))) (if (commandp (intern-soft desc)) (setq bind 
desc)) (setq desc (format "<<%s>>" desc)) (setq bind-len (1+ text))) (t (setq 
desc (mapconcat (function (lambda (ch) (cond ... ... ...))) (or fkey key) " 
")))) (if prefix (setq desc (concat (edmacro-sanitize-for-string prefix) 
desc))) (if (string-match " " desc) nil (let ((times 1) (pos bind-len)) (while 
(not (cl-mismatch rest-mac rest-mac 0 bind-len pos (+ bind-len pos))) (setq 
times (1+ times)) (setq pos (+ pos bind-len))) (if (> times 1) (progn (setq 
desc (format "%d*%s" times desc)) (setq bind-len (* bind-len times)))))) (setq 
rest-mac (cl-subseq rest-mac bind-len)) (if verbose (progn (if (equal res "") 
nil (setq res (concat res "\n"))) (setq res (concat res desc)) (if (and bind 
(or (stringp bind) (symbolp bind))) (progn (setq res (concat res (make-string 
... 9) ";; " (if ... bind ...))))) (setq len 0)) (if (and (> (+ len (length 
desc) 2) 72) (not one-line)) (progn (setq res (concat res "\n ")) (setq len 1)) 
(if (equal res "") nil (setq res (concat res " ")) (setq len (1+ len)))) (setq 
res (concat res desc)) (setq len (+ len (length desc)))))
     (while (not (eq (aref rest-mac 0) (quote end-macro))) (let* ((prefix (or 
(and (integerp (aref rest-mac 0)) (memq (aref rest-mac 0) mdigs) (memq 
(key-binding ...) (quote ...)) (let (...) (while ... ...) (and ... ...))) (and 
(eq (aref rest-mac 0) 21) (eq (key-binding [21]) (quote universal-argument)) 
(let (...) (while ... ...) (and ... ...))) (and (eq (aref rest-mac 0) 21) (eq 
(key-binding [21]) (quote universal-argument)) (let (...) (if ... ...) (while 
... ...) (and ... ...))))) (bind-len (apply (quote max) 1 (progn (let* (... ... 
... ...) (while ... ... ... ... ...) (nreverse --cl-var--))))) (key (cl-subseq 
rest-mac 0 bind-len)) (fkey nil) tlen tkey (bind (or (progn (let* (... ... ... 
... --cl-var--) (while ... ...) --cl-var--)) (and (setq fkey (lookup-key 
local-function-key-map rest-mac)) (setq tlen fkey tkey (cl-subseq rest-mac 0 
tlen) fkey (lookup-key local-function-key-map tkey)) (progn (let* ... ... 
...))))) (first (aref key 0)) (text (progn (let* ((i bind-len) (--cl-var-- ...) 
(ch nil)) (while (and ... ...) (setq i ...)) i))) desc) (if (stringp bind) 
(setq bind nil)) (cond ((and (eq bind (quote self-insert-command)) (not prefix) 
(> text 1) (integerp first) (> first 32) (<= first maxkey) (/= first 92) (progn 
(if (> text 30) (setq text 30)) (setq desc (concat ...)) (if (string-match 
"^[ACHMsS]-." desc) (progn ... ...)) (not (string-match 
"^;;\\|^<.*>$\\|^\\\\[0-9]+$\\|^[0-9]+\\*." desc)))) (if (or (string-match 
"^\\^.$" desc) (member desc res-words)) (progn (setq desc (mapconcat ... desc " 
")))) (if verbose (progn (setq bind (format "%s * %d" bind text)))) (setq 
bind-len text)) ((and (eq bind (quote execute-extended-command)) (> text 
bind-len) (memq (aref rest-mac text) (quote (return 13))) (progn (setq desc 
(concat ...)) (commandp (intern-soft desc)))) (if (commandp (intern-soft desc)) 
(setq bind desc)) (setq desc (format "<<%s>>" desc)) (setq bind-len (1+ text))) 
(t (setq desc (mapconcat (function (lambda ... ...)) (or fkey key) " ")))) (if 
prefix (setq desc (concat (edmacro-sanitize-for-string prefix) desc))) (if 
(string-match " " desc) nil (let ((times 1) (pos bind-len)) (while (not 
(cl-mismatch rest-mac rest-mac 0 bind-len pos (+ bind-len pos))) (setq times 
(1+ times)) (setq pos (+ pos bind-len))) (if (> times 1) (progn (setq desc 
(format "%d*%s" times desc)) (setq bind-len (* bind-len times)))))) (setq 
rest-mac (cl-subseq rest-mac bind-len)) (if verbose (progn (if (equal res "") 
nil (setq res (concat res "\n"))) (setq res (concat res desc)) (if (and bind 
(or (stringp bind) (symbolp bind))) (progn (setq res (concat res ... ";; " 
...)))) (setq len 0)) (if (and (> (+ len (length desc) 2) 72) (not one-line)) 
(progn (setq res (concat res "\n ")) (setq len 1)) (if (equal res "") nil (setq 
res (concat res " ")) (setq len (1+ len)))) (setq res (concat res desc)) (setq 
len (+ len (length desc))))))
     (let* ((maps (current-active-maps)) (pkeys (quote (end-macro 48 49 50 51 
52 53 54 55 56 57 45 21 134217773 134217776 134217777 134217778 134217779 
134217780 134217781 134217782 134217783 134217784 134217785))) (mdigs (nthcdr 
13 pkeys)) (maxkey (if edmacro-eight-bits 255 127)) (case-fold-search nil) 
(res-words (quote ("NUL" "TAB" "LFD" "RET" "ESC" "SPC" "DEL" "REM"))) (rest-mac 
(vconcat macro [end-macro])) (res "") (len 0) (one-line (eq verbose 1))) (if 
one-line (setq verbose nil)) (if (stringp macro) (progn (progn (let* ((i 0) 
(--cl-var-- (length macro))) (while (< i --cl-var--) (if (>= ... 128) (progn 
...)) (setq i (+ i 1))) nil)))) (while (not (eq (aref rest-mac 0) (quote 
end-macro))) (let* ((prefix (or (and (integerp ...) (memq ... mdigs) (memq ... 
...) (let ... ... ...)) (and (eq ... 21) (eq ... ...) (let ... ... ...)) (and 
(eq ... 21) (eq ... ...) (let ... ... ... ...)))) (bind-len (apply (quote max) 
1 (progn (let* ... ... ...)))) (key (cl-subseq rest-mac 0 bind-len)) (fkey nil) 
tlen tkey (bind (or (progn (let* ... ... --cl-var--)) (and (setq fkey ...) 
(setq tlen fkey tkey ... fkey ...) (progn ...)))) (first (aref key 0)) (text 
(progn (let* (... ... ...) (while ... ...) i))) desc) (if (stringp bind) (setq 
bind nil)) (cond ((and (eq bind (quote self-insert-command)) (not prefix) (> 
text 1) (integerp first) (> first 32) (<= first maxkey) (/= first 92) (progn 
(if ... ...) (setq desc ...) (if ... ...) (not ...))) (if (or (string-match 
"^\\^.$" desc) (member desc res-words)) (progn (setq desc ...))) (if verbose 
(progn (setq bind ...))) (setq bind-len text)) ((and (eq bind (quote 
execute-extended-command)) (> text bind-len) (memq (aref rest-mac text) (quote 
...)) (progn (setq desc ...) (commandp ...))) (if (commandp (intern-soft desc)) 
(setq bind desc)) (setq desc (format "<<%s>>" desc)) (setq bind-len (1+ text))) 
(t (setq desc (mapconcat (function ...) (or fkey key) " ")))) (if prefix (setq 
desc (concat (edmacro-sanitize-for-string prefix) desc))) (if (string-match " " 
desc) nil (let ((times 1) (pos bind-len)) (while (not (cl-mismatch rest-mac 
rest-mac 0 bind-len pos ...)) (setq times (1+ times)) (setq pos (+ pos 
bind-len))) (if (> times 1) (progn (setq desc ...) (setq bind-len ...))))) 
(setq rest-mac (cl-subseq rest-mac bind-len)) (if verbose (progn (if (equal res 
"") nil (setq res (concat res "\n"))) (setq res (concat res desc)) (if (and 
bind (or ... ...)) (progn (setq res ...))) (setq len 0)) (if (and (> (+ len ... 
2) 72) (not one-line)) (progn (setq res (concat res "\n ")) (setq len 1)) (if 
(equal res "") nil (setq res (concat res " ")) (setq len (1+ len)))) (setq res 
(concat res desc)) (setq len (+ len (length desc)))))) res)
     edmacro-format-keys([101] nil)
     format-kbd-macro([101] nil)
     kmacro-call-macro(nil nil)
     kmacro-end-and-call-macro(nil)
     call-interactively(kmacro-end-and-call-macro nil nil)
     command-execute(kmacro-end-and-call-macro)
   
And that is reasonable error given that cl-mismatch call is wrong:

   ╭──────── #564 ─ /home/vitoshka/bin/emacs-trunk/lisp/edmacro.el ──
   │        (while  (not (cl-mismatch rest-mac rest-mac
   │                                       0 bind-len pos (+ bind-len pos)))
   │          (cl-incf times)
   │          (cl-incf pos bind-len))
   ╰──────── #567 ─
   

Commenting this while loop solves the problem for me, but I don't
understand the code even a bit.

    Vitalie


In GNU Emacs 24.3.50.5 (i686-pc-linux-gnu, X toolkit, Xaw scroll bars)
 of 2013-07-18 on vitoshka-OptiPlex-745
Windowing system distributor `The X.Org Foundation', version 11.0.11303000
System Description:     Ubuntu 13.04

Important settings:
  value of $LC_MONETARY: nl_NL.UTF-8
  value of $LC_NUMERIC: nl_NL.UTF-8
  value of $LC_TIME: nl_NL.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t





reply via email to

[Prev in Thread] Current Thread [Next in Thread]