Keyboard shortcut to jump to a link?

Hi all, is there a keyboard shortcut to follow a link? I mostly use the keyboard to interact with Dynalist. Lately I’ve been using internal links more in my documents, and I can’t find any way to put the cursor on a link and jump to the location it points to. It’s a pain to hit Esc, move my hand to the mouse, click the link, move my hand back to the keyboard, and resume – especially for quick edits.

Is there a shortcut in Dynalist for this?

4 Likes

I asked for this a couple of years ago but I don’t think Erica understood what I was asking so no, I don’t think there is an alternative to using the mouse.

Ideally would it work in edit mode or rendered/escaped mode?

It’s trickier to make it work in edit mode. If we were to make it work in rendered mode, you’ll still need to hit Esc though, hope that’s ok.

Hi Erica,

Thanks for your note. I am typically editing a node when I want to jump to a link, so it would be most convenient in edit mode. However, I think it would be fine if I needed to type [Esc] first, then the shortcut. An extra keystroke is much less friction than having to switch to the mouse.

Thanks for considering it!

Craig

For the Webapp, the Vimium extension is another option for selecting links with the keyboard.

1 Like

Thanks for the tip re: Vimium. I use Vim daily, so I’m looking forward to playing with its keybindings in my browser! :smiley:

:+1: You’re welcome

Have you made Vimium work with Dynalist for this purpose? I tried something similar with the very useful Saka Key extension, but this interfered with Dynalist such that pressing Esc no longer worked to exit Edit Mode. So I use Saka Key for browsing the web but have it disabled for sites like Dynalist and Gmail whose built-in shortcuts already mostly obviate using the mouse.

Being able to launch Dynalist links without switching to the mouse would be a big plus, for me also.

Works fine for me. Give it a try! :wink:

Hi Marcus. No, I tried Vimium briefly, but found that it interfered with some important browser tasks for me. I might give it another try in the future, but for now I don’t have a solution for this problem.

Hi Craig,

Just curious. What did it interfere with?

Sure. I was using Chrome Remote Desktop to help a family member with some computer problems, and while trying to type into a remote text field Vimium interpreted my keystrokes as navigation commands and ended the session. This happened a couple of times. Needless to say, it was frustrating for both of us. :slight_smile:

I was looking for a quick way to disable the extension, and I saw that Vimium provides exception management for certain URLs; but I didn’t have time to set it up just then, so I uninstalled it. I’ll probably give it another try when I have the time to give it a fair shake.

Ah, ok.

Apart from the Exception List in Vimium, I use Extensity in Chrome which provides a global on/off toggle for all extensions.

Thanks, Craig and pottster, it’s nice to know what problems and workarounds exist. I’ve probably become too dependent on Saka Key to consider switching to Vimium at this point, but Extensity may be useful nonetheless.

I’ve also had growing success using AutoHotKey to add certain functions to Dynalist, using hotkeys which are complementary to the ones I’ve customized for internal Dynalist functions. For example, there’s one which switches between item and note, placing the cursor at the beginning rather than end of the destination. There’s one which trims the current item (to the right of the cursor, plus any extraneous spaces, hyphens/dashes, etc.) and encloses the remaining text in double quotes (converting any existing double quotes to single quotes). And there’s one which converts a URL in the note to a link of the form [hostname](URL).

It now occurs to me that I could probably write an AutoHotKey script which would parse a URL in the current item or note and launch it in a new tab – a workaround for the feature requested in this thread. If/when I manage to do this, I’ll post it here.

To a large extent the other hotkeys and functions mentioned above are probably peculiar to my own habits, but if anyone wants further details or code for one or more of these, let me know.

1 Like

Here’s that script:

; Press Ctrl+Enter to launch first URL found in current item or (if none there) in its note.
/*
Cursor may be anywhere in item or note.
The URL will launch in a new tab, unless it's an internal Dynalist link.
If it's a working internal Dynalist link, it will launch in the same window with minimal delay.
If it's a broken internal Dynalist link, it will reload Dynalist (slowly) at the current page.
If cursor is absent or on completely blank item, it will launch the first URL in the visible outline.
If URLs exist not in current item and note but in one or more visible sub-items or their notes,
then the first of these URLs will be launched.
***NOTE: This script depends on two customized Dynalist hotkeys. So, before using,
scroll down and follow instructions of 3 comments saying ***REPLACE...
; ...remembering AutoHotKey syntax:
; ^ = Ctrl, ! = Alt, + = Shift, so e.g. Ctrl+Alt+Shift+' = ^!+' and Alt+Space = !Space
*/
^Enter::
oldclip := clipboard ; Store current clipboard
clipboard = ; Empty clipboard (so ClipWait can detect when text has arrived)
Send, ^a^a ; Select entire item and note
Sleep, 100
Send, ^c ; Copy
Sleep, 100
Send, {Right} ; Deselect and return cursor to end of item
If (RegExMatch(clipboard, "s)^(.*?)(https?://)([^\s\)]+)(.*)$") > 0) { ; If URL is found (1st try)
firstURL := RegExReplace(clipboard, "s)^(.*?)(https?://)([^\s\)]+)(.*)$", "$2$3")
clipboard := firstURL
If (InStr(clipboard, "//dynalist.io") = 0) { ; If clipboard is not an internal Dynalist link...
Send, ^t ; ...then open new tab...
} Else {
Send, ^l ; ...otherwise use current tab.
} ; End of internal-Dynalist-link If/Else
Sleep, 100
; Sleep, 100
Send, ^v ; Paste URL
Sleep, 100
Send, {Enter}
} Else { ; Maybe cursor was on top (zoomed) item so that Ctrl+A, Ctrl+A didn't include note
Send, !' ; Go to note (***REPLACE with your Dynalist hotkey for "Move between item & note")
Sleep, 100
Send, {Space} ; Append space to note (ensuring that something is selected; space will be trimmed)
Sleep, 100
Send, ^a ; Select note
Sleep, 100
Send, ^c ; Copy
Sleep, 100
Send, !] ; Go to end of note (***REPLACE with your Dynalist for "Go to end of text")
Sleep, 100
Send, {Backspace} ; Delete trailing space
Sleep, 100
Send, !' ; Return to item (***REPLACE with your Dynalist hotkey for "Move between item & note")
If (RegExMatch(clipboard, "s)^(.*?)(https?://)([^\s\)]+)(.*)$") > 0) { ; If URL is found (2nd try)
firstURL := RegExReplace(clipboard, "s)^(.*?)(https?://)([^\s\)]+)(.*)$", "$2$3")
clipboard := firstURL
If (InStr(clipboard, "//dynalist.io") = 0) { ; If clipboard is not an internal Dynalist link...
Send, ^t ; ...then open new tab...
} Else {
Send, ^l ; ...otherwise use current tab.
} ; End of internal-Dynalist-link If/Else
Sleep, 100
Send, ^v ; Paste URL
Sleep, 100
Send, {Enter}
} ; End of If URL is found (2nd try)
} ; End of Else (URL wasn't found on 1st try)
clipboard := oldclip ; Restore previous clipboard
return