nyxt icon indicating copy to clipboard operation
nyxt copied to clipboard

Extend prompt buffer keyscheme map bug

Open aadcg opened this issue 10 months ago • 1 comments

Steps to reproduce below. Originally reported here.

Write file ~/.config/nyxt/test-config.lisp with the contents below.

(define-configuration input-buffer
  ((default-modes (pushnew 'nyxt/mode/emacs:emacs-mode %slot-value%))))

(define-configuration nyxt/mode/document:document-mode
  ((keyscheme-map
    (keymaps:define-keyscheme-map "my-document" (list :import %slot-value%)
      nyxt/keyscheme:emacs
      (list
       "j" 'follow-hint)))))

(define-configuration nyxt/mode/prompt-buffer:prompt-buffer-mode
  ((keyscheme-map
    (keymaps:define-keyscheme-map "my-prompt-buffer" (list :import %slot-value%)
      nyxt/keyscheme:emacs
      (list
       "C-s" 'next-suggestion
       "C-r" 'previous-suggestion)))))

Issuing the command follow-hint results in the error below.

The value
  NIL
is not of type
  NKEYMAPS/CORE:KEYMAP
when binding NKEYMAPS/CORE:KEYMAP
   [Condition of type TYPE-ERROR]

Restarts:
 0: [CONTINUE] Call next function in hook #<NHOOKS:HOOK-ANY {100517474B}>
 1: [DISABLE-HANDLER] Disable handler #<HANDLER CONFIGURE-PROMPT-BUFFER-MODE-KEYSCHEME-MAP1046 {100FE783CB}> which causes the error.
 2: [ABORT] abort thread (#<THREAD tid=1072 "Nyxt renderer thread" RUNNING {100FAEA9E3}>)

Backtrace:
 0: (NKEYMAPS/CORE:DEFINE-KEY NIL "C-s" NYXT-USER::NEXT-SUGGESTION) [more]
      Locals:
        SB-DEBUG::ARG-0 = NIL
        SB-DEBUG::ARG-1 = "C-s"
        SB-DEBUG::ARG-2 = NYXT-USER::NEXT-SUGGESTION
        SB-DEBUG::MORE = NIL
 1: (NKEYMAPS/CORE:DEFINE-KEYSCHEME-MAP "my-prompt-buffer" (:IMPORT #<HASH-TABLE :TEST EQUAL :COUNT 1 {1009E063D3}>) #<NKEYMAPS/CORE:KEYSCHEME emacs {10053900D3}> ("C-s" NYXT-USER::NEXT-SUGGESTION "C-r" N..
      Locals:
        BINDINGS = ("C-s" NYXT-USER::NEXT-SUGGESTION "C-r" NYXT-USER::PREVIOUS-SUGGESTION)
        KEYMAP = NIL
        KEYSCHEME = #<NKEYMAPS/CORE:KEYSCHEME emacs {10053900D3}>
        KEYSCHEME-MAP = #<HASH-TABLE :TEST EQUAL :COUNT 1 {1009E338C3}>
        MORE-KEYSCHEMES+BINDINGS-PAIRS = NIL
        SB-C::OBJECT = "my-prompt-buffer"
        OPTIONS = (:IMPORT #<HASH-TABLE :TEST EQUAL :COUNT 1 {1009E063D3}>)
 2: ((LAMBDA (NYXT::OBJECT) :IN "/home/aadcg/.config/nyxt/test-config.lisp") #<NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE {1009DFB443}>)
      Locals:
        SB-C::OBJECT = #<NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE {1009DFB443}>
 3: ((:METHOD NHOOKS:DEFAULT-COMBINE-HOOK (NHOOKS:HOOK)) #<NHOOKS:HOOK-ANY {100517474B}> #<NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE {1009DFB443}>) [fast-method]
      Locals:
        NHOOKS::HANDLER-ENTRY = (#<NHOOKS:HANDLER CONFIGURE-PROMPT-BUFFER-MODE-KEYSCHEME-MAP1046 {100FE783CB}> . T)
        NHOOKS:HOOK = #<NHOOKS:HOOK-ANY {100517474B}>
        SB-DEBUG::MORE = (#<NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE {1009DFB443}>)
 4: ((:METHOD SERAPEUM:RUN-HOOK (NHOOKS:HOOK)) #<NHOOKS:HOOK-ANY {100517474B}> #<NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE {1009DFB443}>) [fast-method]
      Locals:
        NHOOKS:HOOK = #<NHOOKS:HOOK-ANY {100517474B}>
        SB-DEBUG::MORE = (#<NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE {1009DFB443}>)
 5: ((:METHOD MAKE-INSTANCE :AROUND (NYXT::USER-MIXIN-CLASS)) #<NYXT:MODE-CLASS NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE> :BUFFER #<NYXT:PROMPT-BUFFER 1451 {10094E8EA3}>) [fast-method]
      Locals:
        SB-PCL::.NEXT-METHOD-CALL. = #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS))> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (1 . T))
        SB-PCL::.REST-ARG. = (:BUFFER #<NYXT:PROMPT-BUFFER 1451 {10094E8EA3}>)
        CLASS = #<NYXT:MODE-CLASS NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE>
 6: ((:METHOD NYXT:ENABLE-MODES* (T T)) (NYXT/MODE/PROMPT-BUFFER:PROMPT-BUFFER-MODE NYXT/MODE/EMACS:EMACS-MODE NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE) #<NYXT:PROMPT-BUFFER 1451 {10094E8EA3}>..
      Locals:
        NYXT:BUFFER#1 = #<NYXT:PROMPT-BUFFER 1451 {10094E8EA3}>
        NYXT:BUFFERS = #<NYXT:PROMPT-BUFFER 1451 {10094E8EA3}>
        NYXT:MODES = (NYXT/MODE/PROMPT-BUFFER:PROMPT-BUFFER-MODE NYXT/MODE/EMACS:EMACS-MODE NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE)
        NYXT:MODES#1 = (NYXT/MODE/PROMPT-BUFFER:PROMPT-BUFFER-MODE NYXT/MODE/EMACS:EMACS-MODE NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE)
        SB-DEBUG::MORE = NIL
 7: ((SB-PCL::EMF NYXT:ENABLE-MODES*) #<unused argument> #<unused argument> (NYXT/MODE/PROMPT-BUFFER:PROMPT-BUFFER-MODE NYXT/MODE/EMACS:EMACS-MODE NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE) #<N..
      Locals:
        SB-PCL::.ARG0. = (NYXT/MODE/PROMPT-BUFFER:PROMPT-BUFFER-MODE NYXT/MODE/EMACS:EMACS-MODE NYXT/MODE/HINT-PROMPT-BUFFER:HINT-PROMPT-BUFFER-MODE)
        SB-PCL::.ARG1. = #<NYXT:PROMPT-BUFFER 1451 {10094E8EA3}>
        SB-DEBUG::MORE = NIL

Something interesting is happening here and my cursory investigation wasn't conclusive. I have the feeling that it may be related to the fact that hint-prompt-buffer-mode inherits from prompt-buffer-mode and the keymap can't be resolved. Maybe @Ambrevar can help.

aadcg avatar Aug 15 '23 20:08 aadcg

I'll look into it.

Ambrevar avatar Dec 12 '23 10:12 Ambrevar