Comments (32)
okay, feel free to reopen when this issue comes up again
from all-the-icons-dired.
Do u have a reproduction?
from all-the-icons-dired.
Do you have a backtrace? You can get it by turning debug-on-error
on.
from all-the-icons-dired.
Similar issue here here, maybe? This is what I get when I run dired
by turning debug-on-error
on after setting up all-the-icons-dired
:
Debugger entered--Lisp error: (void-variable file)
all-the-icons-dired--refresh()
all-the-icons-dired--refresh-advice(#f(compiled-function () #<bytecode 0x1fe08368ac35>))
apply(all-the-icons-dired--refresh-advice #f(compiled-function () #<bytecode 0x1fe08368ac35>) nil)
dired-readin()
dired-internal-noselect("~/.dotfiles/emacs/.emacs.d/" nil)
dired-noselect("/Users/apc/.dotfiles/emacs/.emacs.d/" nil)
#f(compiled-function (dirname &optional switches) "\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.\nOptional second argument SWITCHES specifies the `ls' options used.\n(Interactively, use a prefix argument to be able to specify SWITCHES.)\n\nIf DIRNAME is a string, Dired displays a list of files in DIRNAME (which\nmay also have shell wildcards appended to select certain files).\n\nIf DIRNAME is a cons, its first element is taken as the directory name\nand the rest as an explicit list of files to make directory entries for.\nIn this case, SWITCHES are applied to each of the files separately, and\ntherefore switches that control the order of the files in the produced\nlisting have no effect.\n\n\\<dired-mode-map>You can flag files for deletion with \\[dired-flag-file-deletion] and then\ndelete them by typing \\[dired-do-flagged-delete].\nType \\[describe-mode] after entering Dired for more info.\n\nIf DIRNAME is already in a Dired buffer, that buffer is used without refresh." (interactive (dired-read-dir-and-switches "")) #<bytecode 0x1fe08368aa6d>)("/Users/apc/.dotfiles/emacs/.emacs.d/" nil)
ls-lisp--dired(#f(compiled-function (dirname &optional switches) "\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.\nOptional second argument SWITCHES specifies the `ls' options used.\n(Interactively, use a prefix argument to be able to specify SWITCHES.)\n\nIf DIRNAME is a string, Dired displays a list of files in DIRNAME (which\nmay also have shell wildcards appended to select certain files).\n\nIf DIRNAME is a cons, its first element is taken as the directory name\nand the rest as an explicit list of files to make directory entries for.\nIn this case, SWITCHES are applied to each of the files separately, and\ntherefore switches that control the order of the files in the produced\nlisting have no effect.\n\n\\<dired-mode-map>You can flag files for deletion with \\[dired-flag-file-deletion] and then\ndelete them by typing \\[dired-do-flagged-delete].\nType \\[describe-mode] after entering Dired for more info.\n\nIf DIRNAME is already in a Dired buffer, that buffer is used without refresh." (interactive (dired-read-dir-and-switches "")) #<bytecode 0x1fe08368aa6d>) "/Users/apc/.dotfiles/emacs/.emacs.d/" nil)
apply(ls-lisp--dired #f(compiled-function (dirname &optional switches) "\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.\nOptional second argument SWITCHES specifies the `ls' options used.\n(Interactively, use a prefix argument to be able to specify SWITCHES.)\n\nIf DIRNAME is a string, Dired displays a list of files in DIRNAME (which\nmay also have shell wildcards appended to select certain files).\n\nIf DIRNAME is a cons, its first element is taken as the directory name\nand the rest as an explicit list of files to make directory entries for.\nIn this case, SWITCHES are applied to each of the files separately, and\ntherefore switches that control the order of the files in the produced\nlisting have no effect.\n\n\\<dired-mode-map>You can flag files for deletion with \\[dired-flag-file-deletion] and then\ndelete them by typing \\[dired-do-flagged-delete].\nType \\[describe-mode] after entering Dired for more info.\n\nIf DIRNAME is already in a Dired buffer, that buffer is used without refresh." (interactive (dired-read-dir-and-switches "")) #<bytecode 0x1fe08368aa6d>) ("/Users/apc/.dotfiles/emacs/.emacs.d/" nil))
dired("/Users/apc/.dotfiles/emacs/.emacs.d/" nil)
funcall-interactively(dired "/Users/apc/.dotfiles/emacs/.emacs.d/" nil)
call-interactively(dired nil nil)
command-execute(dired)
from all-the-icons-dired.
Can you edebug all-the-icons-dired--refresh
and show me which line of that function causes that error? I can't reproduce it and that backtrace shows me nothing useful.
from all-the-icons-dired.
Now I'm getting something different:
Debugger entered--Lisp error: (error "save-restriction is a built-in function")
apply(debug error (error "save-restriction is a built-in function"))
edebug(error (error "save-restriction is a built-in function"))
signal(error ("save-restriction is a built-in function"))
error("%s is a built-in function" save-restriction)
find-function-library(save-restriction t t)
find-function-noselect(save-restriction t)
edebug-instrument-function(save-restriction)
edebug-instrument-callee()
edebug-step-in()
funcall-interactively(edebug-step-in)
call-interactively(edebug-step-in nil nil)
command-execute(edebug-step-in)
recursive-edit()
#f(compiled-function (arg-mode) #<bytecode 0x1fe0829f5c4d>)(before)
transient--edebug--recursive-edit(#f(compiled-function (arg-mode) #<bytecode 0x1fe0829f5c4d>) before)
apply(transient--edebug--recursive-edit #f(compiled-function (arg-mode) #<bytecode 0x1fe0829f5c4d>) before)
edebug--recursive-edit(before)
edebug--display-1(nil 0 before)
edebug--display(nil 0 before)
edebug-debugger(0 before nil)
edebug-before(0)
(edebug-after (edebug-before 0) 13 (save-restriction (edebug-after (edebug-before 1) 2 (widen)) (edebug-after (edebug-before 3) 12 (mapc (edebug-after (edebug-before 4) 5 #'delete-overlay) (edebug-after (edebug-before 6) 11 (all-the-icons-dired--overlays-in (edebug-after (edebug-before 7) 8 (point-min)) (edebug-after (edebug-before 9) 10 (point-max))))))))
(closure (t) nil (edebug-after (edebug-before 0) 13 (save-restriction (edebug-after (edebug-before 1) 2 (widen)) (edebug-after (edebug-before 3) 12 (mapc (edebug-after (edebug-before 4) 5 #'delete-overlay) (edebug-after (edebug-before 6) 11 (all-the-icons-dired--overlays-in (edebug-after ... 8 ...) (edebug-after ... 10 ...))))))))()
edebug-default-enter(all-the-icons-dired--remove-all-overlays nil (closure (t) nil (edebug-after (edebug-before 0) 13 (save-restriction (edebug-after (edebug-before 1) 2 (widen)) (edebug-after (edebug-before 3) 12 (mapc (edebug-after (edebug-before 4) 5 #'delete-overlay) (edebug-after (edebug-before 6) 11 (all-the-icons-dired--overlays-in ... ...))))))))
edebug-enter(all-the-icons-dired--remove-all-overlays nil (closure (t) nil (edebug-after (edebug-before 0) 13 (save-restriction (edebug-after (edebug-before 1) 2 (widen)) (edebug-after (edebug-before 3) 12 (mapc (edebug-after (edebug-before 4) 5 #'delete-overlay) (edebug-after (edebug-before 6) 11 (all-the-icons-dired--overlays-in ... ...))))))))
all-the-icons-dired--remove-all-overlays()
(edebug-after (edebug-before 0) 1 (all-the-icons-dired--remove-all-overlays))
(closure (t) nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--remove-all-overlays)) (edebug-after (edebug-before 2) 65 (save-excursion (edebug-after (edebug-before 3) 6 (goto-char (edebug-after (edebug-before 4) 5 (point-min)))) (edebug-after (edebug-before 7) 64 (while (edebug-after (edebug-before 8) 11 (not (edebug-after ... 10 ...))) (edebug-after (edebug-before 12) 61 (if (edebug-after ... 14 ...) (progn ...))) (edebug-after (edebug-before 62) 63 (forward-line 1)))))))()
edebug-default-enter(all-the-icons-dired--refresh nil (closure (t) nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--remove-all-overlays)) (edebug-after (edebug-before 2) 65 (save-excursion (edebug-after (edebug-before 3) 6 (goto-char (edebug-after (edebug-before 4) 5 (point-min)))) (edebug-after (edebug-before 7) 64 (while (edebug-after (edebug-before 8) 11 (not ...)) (edebug-after (edebug-before 12) 61 (if ... ...)) (edebug-after (edebug-before 62) 63 (forward-line 1))))))))
edebug-enter(all-the-icons-dired--refresh nil (closure (t) nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--remove-all-overlays)) (edebug-after (edebug-before 2) 65 (save-excursion (edebug-after (edebug-before 3) 6 (goto-char (edebug-after (edebug-before 4) 5 (point-min)))) (edebug-after (edebug-before 7) 64 (while (edebug-after (edebug-before 8) 11 (not ...)) (edebug-after (edebug-before 12) 61 (if ... ...)) (edebug-after (edebug-before 62) 63 (forward-line 1))))))))
all-the-icons-dired--refresh()
(edebug-after (edebug-before 0) 1 (all-the-icons-dired--refresh))
(lambda nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--refresh)))()
edebug-default-enter(edebug-anon26 nil (lambda nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--refresh))))
edebug-default-enter(edebug-anon26 nil (lambda nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--refresh))))
edebug-enter(edebug-anon26 nil (lambda nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--refresh))))
eval((edebug-enter 'edebug-anon26 nil #'(lambda nil (edebug-after (edebug-before 0) 1 (all-the-icons-dired--refresh)))) nil)
edebug-eval-defun((4))
apply(edebug-eval-defun (4))
eval-defun((4))
funcall-interactively(eval-defun (4))
call-interactively(eval-defun nil nil)
command-execute(eval-defun)
from all-the-icons-dired.
Step out of all-the-icons-dired--remove-all-overlays
? There's nothing in there relevant anyway
from all-the-icons-dired.
I'm afraid you've reached the limit of my knowledge here. If I try to step out (edebug-step-out
) from there, how do I continue? Trying edebug-step-in
again tells me You must be before a list form
. Someday I will learn how to use this, but...
from all-the-icons-dired.
At the beginning when you've stopped at all-the-icons-dired--refresh
, move your point into the save-excursion
block, put it before an open paren, press h, and then keep pressing n until things blow up.
from all-the-icons-dired.
Sorry, I think I'm not doing something right here. I first went to the definition of all-the-icons-dired--refresh
. After enabling edebug-mode
and making sure that edebug-trace
is set to a non-nil value, I ran (edebug-Trace-fast-mode)
and then edebug-defun
with point right before the definition of all-the-icons-dired--refresh
. But nothing happens. The buffer `edebug-trace is empty after all of that.
Here's my setup at the moment:
(use-package all-the-icons
:defer nil)
(use-package all-the-icons-dired
:after all-the-icons
:hook (dired-mode . all-the-icons-dired-mode))
After going to a dired
buffer I run all-the-icons-dired-mode
(why isn't this running automatically? I cannot tell) and get this:
all-the-icons-dired--setup: Symbol’s value as variable is void: file
So I repeated the procedure above with all-the-icons-dired--setup
. Now I get this in the *edebug-trace*
buffer:
{ defun args: (all-the-icons-dired--setup nil Setup `all-the-icons-dired'. ((edebug-enter 'all-the-icons-dired--setup (list) #'(lambda nil (edebug-after (edebug-before 0) 1 (setq-local tab-width 1)) (edebug-after (edebug-before 2) 11 (pcase-dolist (`(,file ,sym ,fn) (edebug-after 0 3 all-the-icons-dired-advice-alist)) (edebug-after (edebug-before 4) 10 (with-eval-after-load (edebug-after 0 5 file) (edebug-after (edebug-before 6) 9 (advice-add (edebug-after 0 7 sym) :around (edebug-after 0 8 fn))))))) (edebug-after (edebug-before 12) 13 (all-the-icons-dired--refresh))))))
{ defun args: (all-the-icons-dired--setup nil Setup `all-the-icons-dired'. ((edebug-enter 'all-the-icons-dired--setup (list) #'(lambda nil (edebug-after (edebug-before 0) 1 (setq-local tab-width 1)) (edebug-after (edebug-before 2) 11 (pcase-dolist (`(,file ,sym ,fn) (edebug-after 0 3 all-the-icons-dired-advice-alist)) (edebug-after (edebug-before 4) 10 (with-eval-after-load (edebug-after 0 5 file) (edebug-after (edebug-before 6) 9 (advice-add (edebug-after 0 7 sym) :around (edebug-after 0 8 fn))))))) (edebug-after (edebug-before 12) 13 (all-the-icons-dired--refresh))))))
} defun result: (defalias 'all-the-icons-dired--setup #'(lambda nil Setup `all-the-icons-dired'. (edebug-enter 'all-the-icons-dired--setup (list) #'(lambda nil (edebug-after (edebug-before 0) 1 (setq-local tab-width 1)) (edebug-after (edebug-before 2) 11 (pcase-dolist (`(,file ,sym ,fn) (edebug-after 0 3 all-the-icons-dired-advice-alist)) (edebug-after (edebug-before 4) 10 (with-eval-after-load (edebug-after 0 5 file) (edebug-after (edebug-before 6) 9 (advice-add (edebug-after 0 7 sym) :around (edebug-after 0 8 fn))))))) (edebug-after (edebug-before 12) 13 (all-the-icons-dired--refresh))))))
Does this help?
from all-the-icons-dired.
edebug-trace
traces function calls and prints out a function call order, as the the docstring suggests. I'm not trying to trace function calls, I'm trying step thru the lines of all-the-icons-dired--refresh
and see which line inside threw an error.
Here's what you need to do:
- Place point any where within the body of
all-the-icons-dired--refresh
. - C-u C-M-x, this instruments the
all-the-icons-dired--refresh
for edebug - Turn on
all-the-icons-dired-mode
in a dired buffer - Place point in front of
save-excursion
(i.e.|(save-excursion
), this is what point must be in front of a list form means. - Press h, so edebug will skip over
all-the-icons-dired--remove-all-overlays
. It simply continues execution until where you point is. The h you pressed just point a breakpoint in front of a list form. - Keep pressing n until you see a stack trace and report which line blew up and show me the stack trace.
from all-the-icons-dired.
Thanks for your patience. I followed all the steps and all that happens is I get this error message:
all-the-icons-dired--setup: Symbol’s value as variable is void: file
I went through all the steps above but within the body of all-the-icons-dired--setup
too and I got the same error message.
Now, if I call all-the-icons-dired-mode
in a dired buffer and after getting that error message (and having the mode listed among the minor modes enabled in that buffer) I first disable all-the-icons-dired-mode
, and run the steps above on all-the-icons-dired--refresh
, I see the edebug
process kick in and end up seeing how the icons are added one by one to the list on the dired
buffer, no errors.
I don't know if this will be helpful, but it sort of tells the story of what I've tried:
Followed link to /Users/apc/.dotfiles/emacs/.emacs.d/init.el
Type "q" to delete help window.
Mark saved where search started
God-Local mode disabled in current buffer
Edebug: all-the-icons-dired--setup
all-the-icons-dired--setup
Edebug mode enabled in current buffer
Quit
Edebug: all-the-icons-dired--setup
Loading /Users/apc/.emacs.d/recentf...done
Cleaning up the recentf list...done (0 removed)
Source file ‘/Users/apc/.emacs.d/elpa/all-the-icons-dired-20210411.1226/all-the-icons-dired.el’ newer than byte-compiled file; using older file
all-the-icons-dired--setup: Symbol’s value as variable is void: file
Quit
All-The-Icons-Dired mode disabled in current buffer
all-the-icons-dired--setup: Symbol’s value as variable is void: file
Quit
Type "q" to delete help window, SPC to scroll help.
Type "q" to delete help window.
Edebug: all-the-icons-dired--refresh
all-the-icons-dired--refresh
Breakpoint set in all-the-icons-dired--refresh
Go...
Break [2 times]
Result: 1 (#o1, #x1, ?\C-a)
Result: 1 (#o1, #x1, ?\C-a)
Result: nil
Result: t
Result: nil
Result: nil
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: nil
Result: nil
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: 152 (#o230, #x98)
Result: "."
Result: "."
Result: t
Result: "."
Result: 0.01
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit all-the-icons-dired-dir-face) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Stop
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit all-the-icons-dired-dir-face) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Stop
Result: "."
Result: ("." "..")
Result: 152 (#o230, #x98)
Result: " "
Result: " "
Result: " "
Result: " "
Result: " "
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: 194 (#o302, #xc2)
Result: ".."
Result: ".."
Result: t
Result: ".."
Result: 0.01
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit all-the-icons-dired-dir-face) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit all-the-icons-dired-dir-face) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: ".."
Result: ("..")
Result: 194 (#o302, #xc2)
Result: " "
Result: " "
Result: " "
Result: " "
Result: " "
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: 237 (#o355, #xed)
Result: "all-the-icons-dired.el"
Result: "all-the-icons-dired.el"
Result: nil
Result: "all-the-icons-dired.el"
Result: 0.01
Result: (:v-adjust 0.01)
Result: t
Result: nil
Result: (:face nil)
Result: (:face nil)
Result: (:v-adjust 0.01 :face nil)
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: "all-the-icons-dired.el"
Result: nil
Result: 237 (#o355, #xed)
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: 299 (#o453, #x12b)
Result: "all-the-icons-dired.elc"
Result: "all-the-icons-dired.elc"
Result: nil
Result: "all-the-icons-dired.elc"
Result: 0.01
Result: (:v-adjust 0.01)
Result: t
Result: dired-ignored
Result: (:face dired-ignored)
Result: (:face dired-ignored)
Result: (:v-adjust 0.01 :face dired-ignored)
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: "all-the-icons-dired.elc"
Result: nil
Result: 299 (#o453, #x12b)
Result: #("" 0 1 (face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "github-octicons" :height 1.2 :inherit dired-ignored) face #1#))
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: 362 (#o552, #x16a)
Result: "all-the-icons-dired-autoloads.el"
Result: "all-the-icons-dired-autoloads.el"
Result: nil
Result: "all-the-icons-dired-autoloads.el"
Result: 0.01
Result: (:v-adjust 0.01)
Result: t
Result: nil
Result: (:face nil)
Result: (:face nil)
Result: (:v-adjust 0.01 :face nil)
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: "all-the-icons-dired-autoloads.el"
Result: nil
Result: 362 (#o552, #x16a)
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: 0 (#o0, #x0, ?\C-@)
Result: nil
Result: t
Result: 434 (#o662, #x1b2)
Result: "all-the-icons-dired-pkg.el"
Result: "all-the-icons-dired-pkg.el"
Result: nil
Result: "all-the-icons-dired-pkg.el"
Result: 0.01
Result: (:v-adjust 0.01)
Result: t
Result: nil
Result: (:face nil)
Result: (:face nil)
Result: (:v-adjust 0.01 :face nil)
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: "all-the-icons-dired-pkg.el"
Result: nil
Result: 434 (#o662, #x1b2)
Result: #("" 0 1 (face #1=(:family "file-icons" :height 1.2) font-lock-face #1# display (raise 0.012) rear-nonsticky t))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: #(" " 0 1 (rear-nonsticky t display (raise 0.012) font-lock-face #1=(:family "file-icons" :height 1.2) face #1#))
Result: 0 (#o0, #x0, ?\C-@)
Result: t
Result: nil
Result: nil
Result: nil
All-The-Icons-Dired mode enabled in current buffer
Mark set
from all-the-icons-dired.
So the first call to all-the-icons-dired-mode
, which was triggered by dired-mode
gives you an error, but after dired-mode
was loaded in a dired
buffer, calling all-the-icons-dired-mode
results in no error? Or did it just result in no error when you were debugging it with edebug?
from all-the-icons-dired.
The latter. That said: I just upgraded a bunch of packages and the issue seems to have disappeared.
I still cannot get the hook to work and have to manually call all-the-icons-dired-mode
, but that's another issue altogether!
Thanks for your help.
from all-the-icons-dired.
PS: removing ":after all-the-icons
" from my use-package
declaration for all-the-icons-dired
is sufficient for all-the-icons-dired-mode
to be added to dired-mode-hook
. Posting this here in case it's helpful to anyone else.
from all-the-icons-dired.
I'm also having the exact same issue and I'm using use-package too. I tried @apc option but that doesn't work, I get the same error as discribed on the title. If I remove the hook and call the mode manually, I still get variable is void: file
error but this time in all-the-icons-dired--setup
all-the-icons-dired--setup: Symbol’s value as variable is void: file
from all-the-icons-dired.
FWIW, I'm using all-the-icons-20210412.1908
and all-the-icons-dired-20210411.1226
. Updating things magically solved the problem.
from all-the-icons-dired.
I use straight as package manager so versions are not directly defined by a date. For the record I'm using the latest commit dd7dd27
from all-the-icons-dired.
@richerve Can you try to bisect the lines in all-the-icons-dired-advice-alist
and see which line may have caused the issue?
from all-the-icons-dired.
@wyuenho I can confirm that the bug was introduced in 07f035d as I checked out 0b929d2 and on that commit it works. So it should be one the changes done in all-the-icons-dired--refresh
from all-the-icons-dired.
That makes no sense to me lol. Does when-let*
work differently between you and me?
from all-the-icons-dired.
that was the only "different" thing that I saw. Sorry but I'm not well versed in elisp to understand why. I'm on emacs 27.1
from all-the-icons-dired.
@wyuenho I think I found the issue in all-the-icons-dired--refresh
and it's of course not related to how when-let*
behaves but on how the logic slightly changed when introducing that.
Originally the code checked if a file
was not nil before assigning the icon and continuing the loop:
....
(let ((file (dired-get-filename 'relative 'noerror)))
(when file
(let ((icon (if (file-directory-p file)
....
In the new code using when-let*
, the assignment to file
happens within that statement and according to when-let
's emacs docs:
Evaluate each binding in turn, stopping if a binding value is nil.
So I noticed that there's a case when file can be nil and that's at the end of a dired buffer that a new line is added when displayed:
So when-let*
fails immediately after finding that line, therefore making refresh almost useless. But when using when file
that doesn't happen because the icon assignment is simply skipped.
In conclusion, it looks like it's probably better to go back to the previous form.
Extra Note: (dired-move-to-filename nil)
returns nil on the empty line too.
from all-the-icons-dired.
This is what the when-let*
macro expands to:
(let*
((file
(and t
(dired-get-filename 'relative 'noerror)))
(icon
(and file
(if
(file-directory-p file)
(all-the-icons-icon-for-dir file :face 'all-the-icons-dired-dir-face :v-adjust all-the-icons-dired-v-adjust)
(apply 'all-the-icons-icon-for-file file
(append
`(:v-adjust ,all-the-icons-dired-v-adjust)
(when all-the-icons-dired-monochrome
`(:face ,(face-at-point)))))))))
(if icon
(if
(member file
'("." ".."))
(all-the-icons-dired--add-overlay
(point)
" ")
(all-the-icons-dired--add-overlay
(point)
(concat icon " ")))))
and
is a short-circuiting op, so if file
is nil, nothing else gets evaluated. When (dired-move-to-filename nil)
returns nil
, the while loop just continues to the end of the buffer. Functionally the code before and after the change are exactly the same.
Now, since you are using straight, and I've forced push a commit, can you actually look into the repo straight checked out and see if it was able to update to the latest commit? Also, can you please disassemble all-the-icons-dired--refresh
and post the bytecode here?
from all-the-icons-dired.
The previous information I provided about the commits was by checking my copy of straight's repo dir, so yes, I confirmed was the last commit first. Then checking out the commit prior to the change, building and trying.
I'm not familiar in what's the process to disassemble a function, If you give me a hint I can give it a try.
from all-the-icons-dired.
M-x disassemble RET all-the-icons-dired--refresh
from all-the-icons-dired.
byte code for all-the-icons-dired--refresh:
doc: Display the icons of files in a dired buffer.
args: nil
0 constant all-the-icons-dired--remove-all-overlays
1 call 0
2 discard
3 save-excursion
4 point-min
5 goto-char
6 discard
7:1 eobp
8 not
9 goto-if-nil-else-pop 8
12 constant dired-move-to-filename
13 constant nil
14 call 1
15 goto-if-nil 7
18 constant t
19 varbind case-fold-search
20 constant when-let*
21 constant (file (dired-get-filename 'relative 'noerror))
22 constant icon
23 constant file-directory-p
24 varref file
25 call 1
26 goto-if-nil 2
29 constant all-the-icons-icon-for-dir
30 varref file
31 constant :face
32 constant all-the-icons-dired-dir-face
33 constant :v-adjust
34 varref all-the-icons-dired-v-adjust
35 call 5
36 goto 4
39:2 constant apply
40 constant all-the-icons-icon-for-file
41 varref file
42 constant append
43 constant :v-adjust
44 varref all-the-icons-dired-v-adjust
45 list2
46 varref all-the-icons-dired-monochrome
47 goto-if-nil-else-pop 3
50 constant :face
51 constant face-at-point
52 call 0
53 list2
54:3 call 2
55 call 3
56:4 call 1
57 call 1
58 varref file
59 constant ("." "..")
60 member
61 goto-if-nil 5
64 constant all-the-icons-dired--add-overlay
65 point
66 constant " "
67 call 2
68 goto 6
71:5 constant all-the-icons-dired--add-overlay
72 point
73 varref icon
74 constant " "
75 concat2
76 call 2
77:6 call 2
78 discard
79 unbind 1
80:7 constant 1
81 forward-line
82 discard
83 goto 1
86:8 unbind 1
87 return
from all-the-icons-dired.
when-let*
did not get expanded and (file (dired-get-filename 'relative 'noerror))
was pasted in as a constant. I don't even know how this got compiled in like this. Did you get a compilation error when you install this?
Regardless, please try adding (require 'subr-x)
to the top of the file and recompile and see if it helps.
from all-the-icons-dired.
Adding (require 'subr-x)
made it work, now the macro is expanded and there's no failure:
byte code for all-the-icons-dired--refresh:
doc: Display the icons of files in a dired buffer.
args: nil
0 constant all-the-icons-dired--remove-all-overlays
1 call 0
2 discard
3 save-excursion
4 point-min
5 goto-char
6 discard
7:1 eobp
8 not
9 goto-if-nil-else-pop 8
12 constant dired-move-to-filename
13 constant nil
14 call 1
15 goto-if-nil 7
18 constant t
19 varbind case-fold-search
20 constant dired-get-filename
21 constant relative
22 constant noerror
23 call 2
24 dup
25 goto-if-nil-else-pop 4
28 constant file-directory-p
29 stack-ref 1
30 call 1
31 goto-if-nil 2
34 constant all-the-icons-icon-for-dir
35 stack-ref 1
36 constant :face
37 constant all-the-icons-dired-dir-face
38 constant :v-adjust
39 varref all-the-icons-dired-v-adjust
40 call 5
41 goto 4
44:2 constant apply
45 constant all-the-icons-icon-for-file
46 stack-ref 2
47 constant append
48 constant :v-adjust
49 varref all-the-icons-dired-v-adjust
50 list2
51 varref all-the-icons-dired-monochrome
52 goto-if-nil-else-pop 3
55 constant :face
56 constant face-at-point
57 call 0
58 list2
59:3 call 2
60 call 3
61:4 dup
62 goto-if-nil 6
65 stack-ref 1
66 constant ("." "..")
67 member
68 goto-if-nil 5
71 constant all-the-icons-dired--add-overlay
72 point
73 constant " "
74 call 2
75 discard
76 goto 6
79:5 constant all-the-icons-dired--add-overlay
80 point
81 stack-ref 2
82 constant " "
83 concat2
84 call 2
85 discard
86:6 discardN 2
88 unbind 1
89:7 constant 1
90 forward-line
91 discard
92 goto 1
95:8 unbind 1
96 return
from all-the-icons-dired.
Thanks for debugging! Should be fixed in 82d09a3
from all-the-icons-dired.
I just noticed that when-let*
comes from subr-x
. Thanks for helping out, I learned a little bit more of emacs ;)
from all-the-icons-dired.
Didn't you get any compilation errors without subr-x?
from all-the-icons-dired.
Related Issues (10)
- All icons have one color now? HOT 2
- Icons misalign on redisplay HOT 2
- Not show icons when use dired-subtree HOT 1
- Fix incompatibility with the built-in "hl-line-mode" HOT 4
- Display incorrect icons after press "l" HOT 3
- Why overlays and not text properties HOT 10
- Case sensitive matching HOT 4
- Mangled icons when using `dired-narrow` with the `dired-narrow-enter-directory` function HOT 1
- setq: Wrong type argument: number-or-marker-p, nil HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from all-the-icons-dired.