Basically I want to be able to use RemNote without touching the mouse.
In the following I collect what is missing for that and and a few thoughts on how it might be implemented (optimally and maybe unrealisticly).
I invite you to watch how you use RemNote and if you discover something you need to use the mouse for to report it below, if it is not already listed.
Related to:
- Structured navigation - basic navigation shortcuts
-
Native Plugins (Custom JavaScript) - Needs commands API to execute.
- Editor Commands Pt. 1 (Click on Rems with JavaScript) - The most basic and most important commands. Some (many?) of the shortcuts below can be implemented in as a User Script given those basic commands. E.g. Focus other pane, goto next/previous day.
- [ User Script] Toggle Sidebar and Resize Pane Shortcuts - Example how a user script can add commands/shortcuts.
Keyboard driven workflow - Are we mouse-free yet?
Rationale
For me (and maybe other “techy” people) “power-user” features like mouse-free editing is very important. A fast, friction-free editing experience allows users to stay in the flow and output information “at the speed of thought”.
Vision - How could RemNote be improved?
-
Modal editing: Distinguish between Editing Mode and Command Mode. RemNote already has a state in which you can not edit because no rem is focused. Here we could have simple keystrokes for navigating around and structuring notes.
- Jupyter Notebook/Hub is a does pretty well. Jupyter notebooks are actually quite similar to bullet points in RemNote: It is a cell-based editor on the web platform. The cells can just not be indented. In command mode you can for example
- A to insert above
- b to insert below
- d, d to delete cell
- j move down
- k move up
- (Shift +) Enter start editing
- This could be a setting for power-users (e.g. “Vim mode”) and enable a second set of shortcuts for most commands.
- Jupyter Notebook/Hub is a does pretty well. Jupyter notebooks are actually quite similar to bullet points in RemNote: It is a cell-based editor on the web platform. The cells can just not be indented. In command mode you can for example
-
Commands: Many text editors have a Ctrl + Shift + P menu listing all commands – even trivial ones like move character left. RemNote has commands internally (
AddAllSlots
…ZoomOutOfRemInOtherPane
). But:- Not everything has a command yet (see below).
- Commands should be exposed such that they can be composed to new commands via plugins or user scripts.
- The user should be able to assign a shortcut to all commands. Not all commands need a default shortcut.
-
/command
s are then just be a subset (the ones that make sense when writing) of all available commands, i.e. no navigation commands.
Missing Commands and Shortcuts
Some actions can not be done with keyboard yet. Some have no easy action and require multiple keystrokes or too much thinking.
A view things require multiple keystrokes (like deleting a Rem = select → del). These things don’t require a shortcut immediately, but would be useful as unbound commands to help customizing a workflow.
Here is a list of things which can’t be done with keyboard yet.
Application Navigation
- Focus (left, right, other) pane for editing
- And have the last edit point saved.
- When you focus an open pane again it should jump to this position. If you open a document again, it could give you the option to jump to the last edit position (commands like
openRem
,gotoLastEdit
oropenRemAtLastEdit
come to mind)
- Close other/second pane
- Focus title/Focus Editor
- Focus sidebar
- Move up/down
- Toggle folders
- Open selected
- Goto next/previous day
Editor Navigation
- Move to Rem in Document
- We have Ctrl + F which find the rem. Pressing Enter focuses the rem for editing, but not reveals the other Rem again nor close the search dialog. Closing the search with the mouse resets the focus.
- Option 1: The bullet points turn into little labels temporary or permanently (for power users) which you can jump to. Think Vim easymotion or Vimium extension for Chrome/Firefox).
- Option 2: Use the search limited to current page and not open the Rem but focus it.
- Scroll View
- There are also some glitches that the scroll position does not follow the cursor perfectly.
- Follow Reference under cursor
- Show Reference preview window
- Focus and Scroll Reference preview window?
Editing
- Delete rem without selecting first:: Ctrl + Shift + Alt + Backspace
- Tags
- Focus/show tags
- Remove tag
- Toggle
#Extra Card Detail
- Indenting in place (breaking hierarchy), e.g. dedenting the second of three siblings makes it the parent of the third sibling.
-
/plain
and some other slash commands have no shortcut yet - Insert Rem Below (Useful when in a code block, exists in meatballs menu)
- Insert Rem Above (exists in meatballs menu)
- Insert Child (the exisiting Enter command actually inserts a sibling if the current rem has not children and a child if it does, and Enter is overwritten in Code blocks where it adds an extra line)
Misc Actions
- Delete currently openend Document/Rem
- You can almost move it to a custom trash if it has a parent you can zoom out to and focus the previously opened document.
Other
- Show Keyboard Shortcuts should focus the Search box
Bugs, Glitches
There are a few things that make the editor stuck somehow and require a mouse click to work
- when you move too fast? Cursor getting stuck when holding up/down arrow keys · Issue #126 · remnoteio/remnote-issues · GitHub
- it is hard to work with inline environments like quotes and highlights: Space characters around cloze, quote, latex environments and other glitches · Issue #218 · remnoteio/remnote-issues · GitHub
Shortcut Collisions
-
Shift + Up/Down to select lines in code blocks selects the rem instead.
- I’d like a more powerful code editor like Codemirror or Monaco anyways, but I don’t know how well this integrates with SlateJS.
Issues with non-US layouts
- RemNote is not optimized for non-US layouts yet.
It feels like it is usingevent.key
under the hood. But maybe not always. IDK, it’s glitchy. For example: To clear a heading there is Ctrl + Alt +`
which is supposed to be the key next to 1. And pressing it works on Chrome, but not on Firefox. On my QWERTZ this key is labeled with^/°
. If I reassign it and press the exact same shortcut which worked previously in Chrome it reads now Ctrl + Alt + ^ and it does not work anymore. And there is alsoevent.which
(deprecated) mixed in somehow. On Chrome^
andö
have bothevent.which == 192
for some reason (browsers, plz!). You can check that e.g. with keycode.info.- Update: It used which and it is fixed: Do not use event.which for keyboard shortcuts · Issue #284 · remnoteio/remnote-issues · GitHub. It still remains how how to handle non-US layouts. Eg. On German QWERTY I can not press Ctrl + [. All those keyboard shortcut have to be remapped manually.
Possible Solutions:
I like VSCode’s approach to have the shortcut trigger on the same physical buttons on all layouts (e.g. Ctrl + Alt + button left of 1) and display the actual required characters to type based on the keyboard layout (Ctrl + Alt + ^ on QWERTZ and Ctrl + Alt + ` on QWERTY). This is not trivial.
- VSCode uses a lot of lookup tables.
- Another solution might be to use
event.code
only which is the same on all layouts and solve the display problem by using the Keyboard API (only implemented on Chrome, but this would work for electron=desktop app? at least):navigator.keyboard.getLayoutMap().get(event.code)
.