radian-software / prescient.el

☄️ Simple but effective sorting and filtering for Emacs.
MIT License
603 stars 25 forks source link

"Regular expression too big" for long paths #113

Closed tohammer closed 2 years ago

tohammer commented 2 years ago

When i try to do any operation with ivy-prescient involving long paths i am getting this error: Invalid regexp: "Regular expression too big"

Causes can be e.g. trying to enter dired or any file operation in dired involving completion. Here is a backtrace:

Debugger entered--Lisp error: (invalid-regexp "Regular expression too big")
  string-match("[//]\\(?:t[̧̣̦̭̱̇̈̌]\\|[tţťțᵗṫṭṯṱẗₜⓣt𝐭𝑡𝒕𝓉𝓽𝔱𝕥𝖙𝗍𝘁𝘵𝙩𝚝]\\..." "")
  regexp-opt-depth("[//]\\(?:t[̧̣̦̭̱̇̈̌]\\|[tţťțᵗṫṭṯṱẗₜⓣt𝐭𝑡𝒕𝓉𝓽𝔱𝕥𝖙𝗍𝘁𝘵𝙩𝚝]\\...")
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_9>("[//]\\(?:t[̧̣̦̭̱̇̈̌]\\|[tţťțᵗṫṭṯṱẗₜⓣt𝐭𝑡𝒕𝓉𝓽𝔱𝕥𝖙𝗍𝘁𝘵𝙩𝚝]\\...")
  ivy-prescient-re-builder("/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a...")
  ivy-set-text("/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a...")
  ivy--reset-state(#s(ivy-state :prompt "Dired (directory): " :collection read-file-name-internal :predicate file-exists-p :require-match nil :initial-input "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :history file-name-history :preselect "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :keymap nil :update-fn nil :sort t :frame #<frame /tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/asdghijklm/foo 0x55f3ffc483b8> :window #<window 3 on foo> :buffer #<buffer foo> :text nil :action (1 ("o" identity "default") ("i" ivy--action-insert "insert") ("w" ivy--action-copy "copy")) :unwind nil :re-builder ivy-prescient-re-builder :matcher nil :dynamic-collection nil :display-transformer-fn ivy-read-file-transformer :directory "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :caller read-file-name-internal :current nil :def "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :ignore nil :multi-action nil :extra-props (:caller ivy-completing-read)))
  #<subr ivy-read>("Dired (directory): " read-file-name-internal :predicate file-exists-p :require-match nil :initial-input "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :preselect "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :def "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :history file-name-history :keymap nil :dynamic-collection nil :extra-props (:caller ivy-completing-read) :caller read-file-name-internal :sort t)
  apply(#<subr ivy-read> ("Dired (directory): " read-file-name-internal :predicate file-exists-p :require-match nil :initial-input "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :preselect "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :def "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :history file-name-history :keymap nil :dynamic-collection nil :extra-props (:caller ivy-completing-read) :caller read-file-name-internal :sort t))
  ivy-read("Dired (directory): " read-file-name-internal :predicate file-exists-p :require-match nil :initial-input "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :preselect "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :def "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." :history file-name-history :keymap nil :dynamic-collection nil :extra-props (:caller ivy-completing-read) :caller read-file-name-internal)
  ivy-completing-read("Dired (directory): " read-file-name-internal file-exists-p nil "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." file-name-history "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." nil)
  read-file-name-default("Dired (directory): " nil "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." nil nil nil)
  read-file-name("Dired (directory): " nil "/tmp/asdghijklm/asdghijklm/asdghijklm/asdghijklm/a..." nil)
  dired-read-dir-and-switches("")
  command-execute(dired)

ivy-prescient-re-builder seems to create a really huge regex out of the 146 character long path.

okamsn commented 2 years ago

Errors from long regular expressions might be due to character folding. Does this occur if you set the default value of prescient-use-char-folding to nil?

See possibly related discussions in:

Note that the ivy-prescient.el library is currently unmaintained: https://github.com/raxod502/prescient.el/issues/65

tohammer commented 2 years ago

Setting prescient-use-char-folding to nil solves it for me. I didn't know what char folding was before reading on it now so probably won't miss it. Thanks for your help!

raxod502 commented 2 years ago

Closing as tracked by https://github.com/raxod502/prescient.el/issues/71.