Hello I apologize for the noob question, I did search and some info is old so not sure if is still valid for nyxt 3.x
for example, this: How to unbind a key? · Issue #1743 · atlas-engineer/nyxt · GitHub
that resolves to nil but what I need in a one-time example to change for example C-p that now is to print, to copy-password that is unbound also C-l to copy-login
thanks in advance.
So first you’d have to find where those are bound. You can use the describe-bindings
command for that. It opens the page with listing for all the bindings available in the buffer you called it from. In my case (Emacs bindings), I can see that C-l
is bound in base-mode-emacs-map
, which means that it’s in base-mode
Emacs keymap. To rebind just this symbol, you can do
(define-configuration base-mode
"Rebind C-l in Emacs map to copy-username command."
((keyscheme-map
(keymaps:define-keyscheme-map "custom" (list :import %slot-value%)
nyxt/keyscheme:emacs ; use `nxyt/keyscheme:vi-normal' for VI bindings
(list
"C-l" 'nyxt/password-mode:copy-username)))))
Alternatively, you can bind it to nil
(effectively un-binding it) and then bind it to some command you want in any other mode keymap.
The same procedure would work with C-p
and print—search for the binding in describe-bindings
, and then configure the respective mode keyscheme-map
.
I acknowledge that the configuration is quite lengthy for a simple use-case like that, so you may’ve seen this macro in my config:
(defmacro alter-keyscheme (keyscheme scheme-name &body bindings)
#+nyxt-2
`(let ((scheme ,keyscheme))
(keymap:define-key (gethash ,scheme-name scheme)
,@bindings)
scheme)
#+nyxt-3
`(keymaps:define-keyscheme-map "custom" (list :import ,keyscheme)
,scheme-name
(list ,@bindings)))
which you can use like that:
(define-configuration base-mode
"Rebind C-l in Emacs map to copy-username command."
((keyscheme-map
(alter-keyscheme %slot-value%
nyxt/keyscheme:emacs
"C-l" 'nyxt/password-mode:copy-username))))
Also see nyxt:manual#keybinding-configuration
Thank you so much! this is perfect, now I have a clear understanding, I am using your macro and I have bind C-L and C-P
Hi. I would like to extend the functionality of nyxt/password-mode (now renamed to nyxt/mode/password in rel 3) to perform not just copy to clipboard, but to paste it into the input box.
So I tried this approach:
(define-command my-copy-password (&optional (buffer (current-buffer)))
“Query password and paste”
(nyxt/mode/password:copy-password buffer)
(nyxt/mode/document:paste buffer))
(define-command my-copy-username (&optional (buffer (current-buffer)))
“Query username and paste”
(nyxt/mode/password:copy-username buffer)
(nyxt/mode/document:paste buffer))
(defvar my-keymap (make-keymap “my-map”))
(define-key my-keymap
;; “C-M-p” 'nyxt/mode/password:copy-password
;; “C-M-u” 'nyxt/mode/password:copy-username
“C-M-p” 'my-copy-password
“C-M-u” ‘my-copy-username)
(define-mode my-mode ()
"Dummy mode for the custom key bindings in `my-keymap.’"
((visible-in-status-p nil)
(keyscheme-map (keymaps:make-keyscheme-map
nyxt/keyscheme:emacs my-keymap))))
The problem here is that nyxt/mode/password:copy-username and copy-password are asynchronous functions (i.e. they return a promise is probably the correct techincal description). So the clipboard is not updated until the user has selected a keepass entry. So the nyxt/mode/document:paste function pastes whatever (i.e. stale) content it has in the input box in the web buffer.
I would appreciate the guidance on how to wait for the promise to complete before invoking the paste function.
-Milind
No, wait, it doesn’t return promise, it’s actually synchronous (if you invoke it programmatically, at least). What takes time here is actually filling the clipboard. So if you add a slight delay before pasting it’s all magically working. I’ve tried half a second and one second:
- Half a second didn’t work, was too short for the clipboard.
- One second did miraculously work.
You machine can have a different timing, so measure it yourself, but here’s a version of my-copy-password
that worked for me:
(define-command my-copy-password (&optional (buffer (current-buffer)))
"Query password and paste it right after it."
(nyxt/mode/password:copy-password buffer)
(sleep 1)
(nyxt/mode/document:paste buffer))
P.S. And sorry for the late reply, I wanted to get back to it knowing all the data and debugging everything for a while now