Quick Notes - GSoC Proposal Idea

This is something I personally would love to have - a quick way to create/search notes without having to open Joplin.

The main addition would be global shortcuts, which have been discussed multiple times on this forum [1][2][3]. The user could just press a certain combination, for example Win+N, anywhere and have a small window pop up where they can immediately start writing. Of course, these shortcuts would be customizable. I'd also like to have external commands available, for example, via command-line arguments passed to the main Joplin executable, so that users with existing sxhkd or AutoHotkey setups can integrate these new features in their configs.

Shortcuts could be created not only for creating notes but also:

  • Quick search notes
  • Creating a todo
  • Adding a reminder
  • Creating a note with the contents of the clipboard
  • Inserting into a note (eg. add to an item to a list)

As I mentioned earlier, the next addition would be small, pop-up editor windows, similar to OneNote's quick notes. This feature has also been proposed multiple times [1] [2] [3]. This would mean that when the user creates a note via a global shortcut, they're not presented with Joplin's whole interface, taking up most of their screen, but instead, just with a small window.

Some of these "quick-actions" should be multi-step dialogs, in my opinion. For example, when creating a note, first a notebook selection comes up, then the note editor (not necessarily in this order). This way, there's always just one text field on screen, which can grab keyboard focus right away. It's a super minimal and unobtrusive UI and the whole process can be completed with just the keyboard. The goal is so that the user doesn't have to stop what they're doing to quickly jot down something.

To create these multi-step UIs, I'm proposing two new, pop-up window types:

  • Editor windows
    Inspired by OneNote's mentioned feature, they're just simple multi-line text fields. I think the markdown editor should be used by default, since this feature is mostly aimed at power users, but an option for the WYSIWYG editor could be added as well.

  • Selection windows
    They would be used for selecting notebooks or notes and also for searching. They consist of a search field and a list of options below it. The user can type in search terms to narrow down the selection, then select an item with the arrow keys or the mouse and press enter to continue whatever action they're performing.

I haven't researched this particular idea very deeply, but I've been reading through Joplin's code, the plugin docs and learning more about Electron, and it seems the pop-up windows and the UI can be done in a plugin, but the global shortcuts, and if we agree on them, the command-line arguments will need at least few extra features on the main thread. One solution would be to have the global shortcuts built-in so that shortcuts can be defined in the settings for any editor command. Then the plugin could provide the commands for opening the quick note windows.

This is still just an early idea and I'd like to ask the community's and the developers' input on it. Do you have any suggestions on how to improve the concept, or did leave something out? Do you think it fits the scope of GSoC?

3 Likes

A global shortcut was available at one point to show/hide Joplin. But I had to remove it again, because the shortcut I used was used by a random user under Linux.
We then decided to wait until we had the shortcut system in place, but haven't added global shortcuts yet.

At one point there should be a separate section in the shortcut editor for global shortcuts.

I do like your idea, but I am afraid it does not fit the scope of GSoC this year. Or at least parts of it, since the global shortcuts and commandline args would have to be added to the core code.

And what if, at least for the time being, this would be implemented as en external desktop app, using the data API? Then if it proves to be popular enough it could be moved to core, or stay separate.

Personally, I do not have a strong opinion on this. I probably won't be using such feature often, if at all, but then again, the same is true of BibTeX or real-time collaboration.

Tbf, I'm pretty sure some accepted ideas (OCR and real-time collaboration) will require changes in the core too.

1 Like

In my opinion this is a big help for students, being able to take quick notes during a lecture or while reading, without switching windows. But yes, I agree it's not something everyone needs. That's why I'm looking for ways to make, most of the code at least, external to Joplin.

I'm not sure that would work as a GSoC project because just re-implementing the text editor would be quite a lot of work. I think it would need to have both Rich Text and Markdown editor, which of course is even trickier. The editing experience is also likely to be inconsistent - for example how about vim support, themes, etc? Users could reasonably expect this to work.

What would be your plan for all this? Also would you support resources and Markdown plugins?

Hey, sorry for taking long to answer. I've been doing a lot of investigation on this, trying to figure out how it could work.

First, as far as I can tell, displaying a TinyMCE editor in a popup with a plugin seems nearly impossible. I think all the logic from TinyMCE.tsx would have to reimplemented. I haven't found any good alternative to that.

The markdown editor is closer to the realm of possibility. I did manage to get a proof of concept to work, but it's kinda hacky. (here's a gist with the plugin files for anyone interested)

The idea is to just require in the CodeMirror/Editor.tsx along with react and mount it. This can only be done from windows which have a url coming from the joplin package, so just having an html file bundled with the plugin and opening that won't wort. But the window used for sandboxing the plugin is perfectly suitable, requiring from there works fine, it's just hidden by default. So the plugin can just call window.open to open another instance of itself and then in that window we can mount the editor.

Getting the editor's settings is another hack: I registered a CodeMirror content script, which patches the CodeMirror object and sends all the settings to the plugin. Plugins could be supported by sending a list of callbacks registered on the CM object and when one of them is needed in the popup the call could be relayed by the patching plugin.

So yeah, I kind of underestimated the difficulty of this idea and I understand why you don't think it's suitable for gsoc. Nevertheless I learned a lot investigating this.

1 Like

Maybe for a quick note it'd be enough to only allow plain text without any fancy markdown stuff. Then I suppose it becomes much easier (haven't tried though)

2 Likes

So what do you guys think? Is it worth drafting a proposal on this, or should I focus on something else?

1 Like

You could use some fast-loading editor like notepad, etc. to create your quicknote and then save the file in to a "hotfolder". (using the "hotfolder" add-on --it's much like an import folder for Evernote.)

The next time you fire up Joplin it should load the file into the note system.

I tested this. It worked. It's a bit clunky, but it worked for me.

Get Hotfolder addon here: Hotfolder Plugin