Yevgnen/ivy-rich

Error in post-command-hook (ivy--queue-exhibit)

Mihara opened this issue · 3 comments

So I have ivy, counsel, ivy-rich running, and open up describe-variable - which counsel overrides with counsel-describe-variable, and ivy-rich annotates with extra data, including variable values.

I type: url- -- and that's the moment it freezes and I have to cancel it to get the editor back to working order. The only clue so far is the error message:

Error in post-command-hook (ivy--queue-exhibit): (error "Invalid key sequence in substitution: ‘https?://www\\.google\\.com/\" conceals
Google’")

Exactly like that. Turning on debug-on-error and doing that again produces no results and no debug output of any kind.

After much mucking around, I've been able to identify the specific variable that's tripping the problem: It's w3m-ignored-image-url-regexp from w3m.el, or rather, its docstring.

I couldn't tell you who is in the wrong here, w3m for containing a mangled docstring, (honestly, I can't tell just what is mangled about it) or ivy-rich for choking on it, the error message itself comes from substitute-command-keys which ivy-rich doesn't even directly use.

Unfortunately, excising this line from w3m.el isn't really enough, as it finds something else to trip on.

Could you please help me in directing this bug to its proper owners, if it's not in ivy-rich itself?

I had a similiar but different error like yours today, but anyway, you can try to use (setq debug-on-signal t) and see whether Backtrace appears.
I used this method to find out what caused the error.

If anyone encounters something like not a directory error when updating to emacs 30 (master), try the following patch:

  (defun ivy-rich--switch-buffer-directory! (orig-fun &rest args)
    (cl-letf (((symbol-function 'directory-file-name) #'file-name-directory))
      (apply orig-fun args)))
  (advice-add 'ivy-rich--switch-buffer-directory :around #'ivy-rich--switch-buffer-directory!)

I had a similar issue to @BlindingDark, that was however not fixed by #117 or his patch. In my case it was caused by Helpful-Mode. (Since helpful-mode likes to set list-buffers-directory, which confuses ivy-rich.)
In case anyone else has the same problem as me, here is the fix I used:

(advice-add #'helpful--buffer :filter-return
  (lambda (buf)
    (with-current-buffer buf (setq-local list-buffers-directory nil))
    buf))

Why this issue has only occured after upgrading to Emacs 30 is however still a mystery to me.