atlas-engineer / nyxt

Nyxt - the hacker's browser.
https://nyxt-browser.com/
9.64k stars 404 forks source link

`describe-slot` crashes Nyxt #3377

Open aadcg opened 2 months ago

aadcg commented 2 months ago

Three issues here:

aadcg commented 2 months ago

The more general issue here is that all forms defined via define-internal-page-command that call prompt will invoke a condition since, in this case, *interactive-p* is NIL. Note that those defined via define-command don't suffer from this issue.

(define-internal-page-command test-internal-page-cmd ()
    (buffer "test")
  ;; *interactive-p* => NIL
  (prompt1 :prompt "Describe slot"
           :sources '(slot-source
                      slot-non-nyxt-source
                      slot-internal-source)))

(define-command test-cmd ()
    (buffer "test")
  ;; *interactive-p* => T
  (prompt1 :prompt "Describe slot"
           :sources '(slot-source
                      slot-non-nyxt-source
                      slot-internal-source)))

The bug is present in the master branch, not on the 3-series releases. The direct culprit is a688e8cd91fbf049162d514730801cfe53d73117. It seemed bogus to set *interactive-p* to T in order to run custom scheme callbacks, so I got rid of it. It is now clear that it was done to hide bad design.

The underlying issue is commit 62b7dc93f2fa5b0daf34eb5084f02cbaa15399d2.

The only sane decision is to delete the logic behind *interactive-p* and *headless-p* since it's poorly implemented and misaligned with the Nyxt's priorities.