sassanh/qnvim

Better command line

Opened this issue · 1 comments

The Problem

Current implementation have some issues:

  1. The command line blocks Qt Creator search bar functionality.
  2. The command line is too small. It is unsuitable for displaying long messages.

It would be desirable to have a better command line.

Here are some examples of how command line is implemented in different editors:

Neovim

In Neovim command line is one for each split and is used for both commands and messages. Some plugins transform the command line and messages into popup and notification.

image

VSCode (VsCodeVim)

In this plugin command line is in the status bar and is used both for commands and messages. I was unable to test multiline messages, since echo command is not implemented.

image

VSCode (Neovim plugin)

In this plugin, the command line is opened in the popup, messages are displayed in the status line or in "Output" pane, if they are long.

image

JetBrains IDEs (IdeaVim)

In IdeaVim command line is in local to the splits, and used both for messages and commands.

image

Qt Creator (FakeVim)

In FakeVim plugin, the status line is used for displaying short messages and for receiving commands, but I was unable to let it print the multiline message.

image

Solution

I currently have a prototype for the new command line implementation, that is similar to the one from IdeaVim plugin, but just as it was done 😁 I realized, that original Neovim has only one command line, and it makes no sense to keep it local to each split.

image

Furthermore, it complicates the code quite a lot and increases probability of bugs occurrence. However, I am not sure what design is the best for a single command line. Should it be just a single line above the status line? Should it respect Neovim cmdheight setting? Should it autohide?

Hm, I tried to make a single status bar prototype, but it is actually harder to make, because there is no reliable way to add a bar on top of a status line in Qt Creator. I will try to implement a cmd in the IdeaVim way: it will be local to each split, but it will be hidden by default, and it will hide in other splits, when something appears in the one, that belongs to the current editor.