isamert / empv.el

An Emacs media player, media library manager, radio player, YouTube frontend
GNU General Public License v3.0
103 stars 18 forks source link

calling any empv-* command in M-x results in (wrong-type-argument listp cb-fn) #60

Closed okflo closed 5 months ago

okflo commented 5 months ago

starting any empv-* command results in following backtrace:

Debugger entered--Lisp error: (wrong-type-argument listp cb-fn)
  car(cb-fn)
  #f(compiled-function (binding then &optional else) "Bind value according to BINDING and check for truthy-ness\nIf the test passes then eval THEN with the BINDING varlist bound\nIf no, eval ELSE with no binding" #<bytecode -0x14cc3656a7d20a19>)((cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr (assoc 'data json-data))) (funcall cb-fn json-data))))
  macroexpand-1((if-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr (assoc 'data json-data))) (funcall cb-fn json-data)))) nil)
  macroexp-macroexpand((when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr (assoc 'data json-data))) (funcall cb-fn json-data)))) nil)
  macroexp--expand-all((when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr (assoc 'data json-data))) (funcall cb-fn json-data)))))
  macroexp--all-forms(((empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr (assoc ... json-data))) (funcall cb-fn json-data))))))
  macroexp--expand-all((let* ((json-data (empv--read-result it)) (id (map-elt json-data 'id)) (request-id (map-elt json-data 'request_id)) (event-name (map-elt json-data 'event)) (callback (map-elt empv--callback-table (format "%s" (or request-id id event-name))))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr (assoc ... json-data))) (funcall cb-fn json-data))))))
  macroexp--all-forms((lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data 'id)) (request-id (map-elt json-data 'request_id)) (event-name (map-elt json-data 'event)) (callback (map-elt empv--callback-table (format "%s" (or request-id id event-name))))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr ...)) (funcall cb-fn json-data)))))) 2)
  macroexp--expand-all((lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data 'id)) (request-id (map-elt json-data 'request_id)) (event-name (map-elt json-data 'event)) (callback (map-elt empv--callback-table (format "%s" (or request-id id event-name))))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn (cdr ...)) (funcall cb-fn json-data)))))))
  macroexp--all-forms((seq-do (lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data 'id)) (request-id (map-elt json-data 'request_id)) (event-name (map-elt json-data 'event)) (callback (map-elt empv--callback-table (format "%s" ...)))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn ...) (funcall cb-fn json-data)))))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) 1)
  macroexp--expand-all((seq-do (lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data 'id)) (request-id (map-elt json-data 'request_id)) (event-name (map-elt json-data 'event)) (callback (map-elt empv--callback-table (format "%s" ...)))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if (or request-id id) (funcall cb-fn ...) (funcall cb-fn json-data)))))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))))
  macroexp--all-forms((progn (seq-do (lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data ...)) (request-id (map-elt json-data ...)) (event-name (map-elt json-data ...)) (callback (map-elt empv--callback-table ...))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if ... ... ...))))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) (setq empv--process-buffer "")) 1)
  macroexp--expand-all((progn (seq-do (lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data ...)) (request-id (map-elt json-data ...)) (event-name (map-elt json-data ...)) (callback (map-elt empv--callback-table ...))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if ... ... ...))))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) (setq empv--process-buffer "")))
  macroexp--all-forms((if (string-match-p "\n$" incoming) (progn (seq-do (lambda (it) (let* ((json-data ...) (id ...) (request-id ...) (event-name ...) (callback ...)) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not ...) (map-delete empv--callback-table request-id)) (when-let (cb-fn ...) (ignore-error ... ...)))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) (setq empv--process-buffer ""))) 1)
  macroexp--expand-all((when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ((json-data (empv--read-result it)) (id (map-elt json-data ...)) (request-id (map-elt json-data ...)) (event-name (map-elt json-data ...)) (callback (map-elt empv--callback-table ...))) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not (plist-get callback :event?)) (map-delete empv--callback-table request-id)) (when-let (cb-fn (plist-get callback :fn)) (ignore-error (quit minibuffer-quit) (if ... ... ...))))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) (setq empv--process-buffer "")))
  macroexp--all-forms((lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ((json-data ...) (id ...) (request-id ...) (event-name ...) (callback ...)) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id (and callback t)) (when (not ...) (map-delete empv--callback-table request-id)) (when-let (cb-fn ...) (ignore-error ... ...)))) (seq-filter (lambda (it) (not (string-empty-p it))) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) (setq empv--process-buffer ""))) 2)
  macroexp--expand-all(#'(lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* (... ... ... ... ...) (empv--dbg "<< data: %s, request_id: %s, has-cb?: %s" json-data request-id ...) (when ... ...) (when-let ... ...))) (seq-filter (lambda (it) (not ...)) (seq-map #'string-trim (split-string empv--process-buffer "\n")))) (setq empv--process-buffer ""))))
  macroexp--all-forms((defalias 'empv--filter #'(lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ... ... ... ...)) (seq-filter (lambda ... ...) (seq-map ... ...))) (setq empv--process-buffer "")))) 1)
  macroexp--expand-all((defalias 'empv--filter #'(lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ... ... ... ...)) (seq-filter (lambda ... ...) (seq-map ... ...))) (setq empv--process-buffer "")))))
  macroexpand--all-toplevel((defalias 'empv--filter #'(lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ... ... ... ...)) (seq-filter (lambda ... ...) (seq-map ... ...))) (setq empv--process-buffer "")))))
  internal-macroexpand-for-load((defalias 'empv--filter #'(lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ... ... ... ...)) (seq-filter (lambda ... ...) (seq-map ... ...))) (setq empv--process-buffer "")))) t)
  load-with-code-conversion("/home/okflo/.emacs.d/elpa/empv-20240330.2330/empv.el" "/home/okflo/.emacs.d/elpa/empv-20240330.2330/empv.el" nil t)
  command-execute(empv-play record)
  execute-extended-command(nil "empv-play" "empv-play")
  funcall-interactively(execute-extended-command nil "empv-play" "empv-play")
  command-execute(execute-extended-command)

trying to continue with "c" in backtrace buffer issues:

Debugger entered--Lisp error: (error "Eager macro-expansion failure: (wrong-type-argument listp cb-fn)")
  error("Eager macro-expansion failure: %S" (wrong-type-argument listp cb-fn))
  internal-macroexpand-for-load((defalias 'empv--filter #'(lambda (_proc incoming) "Filter INCOMING messages from the socket." (setq empv--process-buffer (concat empv--process-buffer incoming)) (when (string-match-p "\n$" incoming) (seq-do (lambda (it) (let* ... ... ... ...)) (seq-filter (lambda ... ...) (seq-map ... ...))) (setq empv--process-buffer "")))) t)
  load-with-code-conversion("/home/okflo/.emacs.d/elpa/empv-20240330.2330/empv.el" "/home/okflo/.emacs.d/elpa/empv-20240330.2330/empv.el" nil t)
  command-execute(empv-play record)
  execute-extended-command(nil "empv-play" "empv-play")
  funcall-interactively(execute-extended-command nil "empv-play" "empv-play")
  command-execute(execute-extended-command)

emacs version: GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.41, cairo version 1.18.0) of 2024-04-05 (rather recent emacs from git) os: archlinux

br okflo

okflo commented 5 months ago

I made some progress - it seems there are various when-let and if-let forms that miss parenthesis: f.e. instead of (when-let (var (something)) body) it should be (when-let ((var (something))) body), same for if-let. See "11.3 Conditionals" in the elisp manual.

isamert commented 5 months ago

That's interesting, maybe they deprecated the form that I've used in Emacs 30. I'm on 29.2 and the form I've used works fine if you have only one binding in the form. I'll check it.

isamert commented 5 months ago

I changed when/if-let's to correct form. Can you try it again and see if it works or not? @okflo

okflo commented 5 months ago

Many thanks! I can confirm - empv compiles without errors on emacs current.