Nvui: A NeoVim GUI written in C++ and Qt

NVUI

first

Featuring

  • Custom Titlebar (toggleable, see :h nvui-titlebar)
  • External Command Line (nvui --ext_cmdline)
  • Configurable positions, sizes, colors, border width, border color, etc.
  • For more information see :h nvui-cmdline

ext_cmdline

  • External Popup Menu (nvui --ext_popupmenu)
  • Configurable colors, background colors, icon sizes, alignment, border width, border color, etc.
  • For more information see :h nvui-popup

ext_popupmenu

  • Cross-platform Qt, DirectWrite on Windows
  • Font Fallback (see guifont in the bottom left)
  • Configurable through "set guifont"

fallback

  • External Multigrid Support (:h nvui-multigrid)
  • nvui --ext_multigrid
  • Smooth Scrolling
  • smoothscroll

  • Animated Windows
  • windows

  • Animated Cursor (no VFX... yet)
  • Customizable cursor height (see :h NvuiCaretExtendTop and :h NvuiCaretExtendBottom)
    • Ex. :NvuiCaretExtendTop 200, :NvuiCaretExtendBottom 100 (see below)

caretextend

Documentation

:h nvui (vim/doc/nvui.txt)

Owner
Rohit Pradhan
CS 2025 @ University of Waterloo
Rohit Pradhan
Comments
  • [Question] how to use `<Ctrl-` or `<D-` key

    [Question] how to use `

    Not sure if those keys were remapped. By default <CTRL-R>* will paste from register* But it does not seem to be working. Also in mac <Command> key (WIN key in windows) does not work. Are there anything missing from default config in MacOS?

  • Can't trigger fcitx

    Can't trigger fcitx

    My system information

    Linux 5.13.12-arch1-1 x86_64 GNU/Linux
    

    Issue I met

    I am a Chinese user. And I used fcitx as the Chinese input method. However, I can't trigger the input panel like other neovim GUI or the TUI when I am using the nvui.

    • Normal behavior in terminal

    image

    • In nvui

      It just outputs English nor creates the fcitx input panel.

    My fcitx version:

    fcitx version: 4.2.9.7
    
  • Opening Chadtree results in an error

    Opening Chadtree results in an error

    Opening Chadtree causes this error for me

    terminate called after throwing an instance of 'msgpack::v1::insufficient_bytes'
      what():  insufficient bytes
    [1]    3544750 abort (core dumped)  
    
  • [feature request] built in workspace function

    [feature request] built in workspace function

    Is it possible to manage multiple nvim instances, each instance contains an individual session. This can help me jump between each project without closing or opening a new nvui window.

    I've tried mksession and some session managers. They can jump between session but I can't open a brand new workspace. I have to open file, clean up buffer and save session before I swich between those sessions. That's putting the cart before the horse.

    I've seen goneovim did it: https://github.com/akiyosi/goneovim#workspaces. Don't know if it is possible to add this feature in nvui because I really love it.

    Thanks for your contribution.

  • invisible messages

    invisible messages

    Hi, nvui should show an opening message because my vimrc contains an error. The message is invisible. To understand: this screenshot shows navi and nvim-qt side by side. https://pasteboard.co/LO3Wrz4TgOUT.png Thanks!

  • Rendering issues: command line renders below screen

    Rendering issues: command line renders below screen

    image

    Just off the bat, this is what nvui looks like when I open it.

    For starters, it's confused by my taskbar placement and hides the title bar behind it; this is remedied by using the Windows+Arrow keys of course.

    Secondly, the correct font is not used; it renders a non-monospaced font. I have a ginit.vim, but nvui hasn't read any of it. How do I get it to read my configuration? I know that the problem stems from not having a monospace font (#32), but I've set a monospace font in configuration.

    Speaking of setting, for some reason I can't see the status line no matter what. This means I can't see commands; they are below the window.

    https://user-images.githubusercontent.com/59306451/131559040-37f2f269-a1ae-4f9f-81fa-ef496258d0b0.mp4

    (Sorry about the recording; I just used the Powerpoint screen recorder. I captured the entirety of the nvui screen for sure.)

    Now, I can set guifont to some fallback like Consolas after I get into the gui. And I'm sure I could set the window to open to whatever position I want it (just need to figure out where to configure it, or use the terminal). However, I still wouldn't be able to see the command line. Do you have any idea why this occurs? It occurs even with init.vim and ginit.vim empty.

    I am on Windows 10, with neovim 0.5.0.

  • Some rendering issues

    Some rendering issues

    I just tried the newest release on Windows 10. Here are some issues, I can't experiment further after that:

    • Font is broken
    • The status bar is lost
    • Is there any way I can speed up the animation? Otherwise, it's nice, looking for improvement image
  • frameless title bar leaves big white lines on the other screen when maximized (windows 11)

    frameless title bar leaves big white lines on the other screen when maximized (windows 11)

    snapping the app to maximize or clicking the maximize button leaves a white border on the other screen (dual monitor) when using a frameless title bar, no issues if it's disabled. white border doesn't appear if it's snapped on half the screen or quarter, only happens in maximize. also doesn't appear on nvuitogglefullscreen. hopefully could be fixed soon, this is the only customizable title bar nvim gui i could find, and i've been loving it, thank you so much for your hard work.

  • [WIP] Various Changes

    [WIP] Various Changes

    • Fix crash on getting completion list (#36)
    • Map Cmd key to C- key on Mac
    • Add support for Super (D-) key
    • Fix rendering issues on Mac (#70)
    • Link ext_cmdline to default colors by default
    • Fix alignment of popup menu info on ext_multigrid (workaround Neovim bug, can't be worked around without multigrid)
    • Notify user of font families that couldn't be found
  • Stricter compiler warning policy

    Stricter compiler warning policy

    Make warnings errors in CMakeLists.txt, and then fix all the resulting errors.

    I was not able to fix the errors about unknown macros, but I'm not sure where they are coming from or what to do to fix it. Looks like it's related to cppcheck but you're not using cppcheck...

  • crash after running an output-heavy process in the terminal

    crash after running an output-heavy process in the terminal

    When opening a terminal (using :term) and running an output-heavy application, after a while nvui crashes. The terminal where i started it from then says:

    terminate called after throwing an instance of 'msgpack::v1::insufficient_bytes'
      what():  insufficient bytes
    
    abort (core dumped)
    
  • Missing Icons in Gutter

    Missing Icons in Gutter

    Hello,

    I'm trying out nvui and its been nice.

    One issue I am having is I place diagnostic glyphs in the gutter. They seem to have some trouble rendering: image

    vim.api.nvim_command('sign define DiagnosticSignError text=🄴  texthl=Error linehl= numhl=')
    vim.api.nvim_command('sign define DiagnosticSignWarn text=🅆  texthl=Warning linehl= numhl=')
    vim.api.nvim_command('sign define DiagnosticSignInfo text=🄸  texthl=Warning linehl= numhl=')
    vim.api.nvim_command('sign define DiagnosticSignHint text=🄷  texthl=Warning linehl= numhl=')
    

    The above are the configuration lines. I believe these are just UTF characters as they are rendering right here on GitHub. Any idea?

  • Wierd behaviour in Alpha dashboard

    Wierd behaviour in Alpha dashboard

    When I open nvui the alpha dashboard page at startup is not centered and I cannot immediately use my shortcut keys, it first requires any key stroke which first centres the dashboard and shows properly and then another keypress to invoke any keybinding.

    This is how it looks when it is first opened Screenshot from 2022-08-07 21-25-22

    After pressing any random key it recentres like this Screenshot from 2022-08-07 21-25-34

    And after that I am able to use any of the Neovim keybindings. This behaviour is not observed in either terminal neovim or any other GUIs. Also even after dashboard getting refreshed it still is not centred properly like in other instances.

    This is how the dashboard page is actually supposed to look at startup Screenshot from 2022-08-06 22-36-34

    System Info

    • OS: Arch Linux
    • DE: Gnome 42.3(Wayland)
    • Neovim Version: 0.7.2
    • Nvui Version: 0.2.1(Installed nvui-git from AUR)
  • lag on 4k display

    lag on 4k display

    Hello devs,

    I have just tried this amazing frontend for neovim and I must say, I am impressed with the quality.

    That being said, the only downside is that it is extremely laggy on a 4k display. I cand easily reproduce this by shrinking down the nvui window and it works as expected and is fast, so I know for syre the resolution is the problem.

    I have encountered this problem when trying neovide as well (see: https://github.com/neovide/neovide/issues/1299) and initially thought it was a problem related to their implementation, but now I am not so sure, because it might be something deeper than the UI. The only frontend that has fast performance for me on a 4k display up until now is nvim-qt.

    Could we maybe somehow coordinate between these three (your project, neovide and nvim-qt) to try and find a solution to this?

  • <C-^> does not work

    does not work

    Description

    nvui reads <C-^> as <^> which is invalid in vim & neovim.

    Environment

    • Arch Linux
    • nvui latest git version (as of the time of creation of this issue)
  • Not working keys

    Not working keys

    There are already some issues mentioning not working keys, so I don't want to bother too much when there is no time. Maybe it'll be good to create an issue that groups them and create an overview which helps when there is more room for it.

    #134 #143

    Another one that looks like it has problems is <. E.g., when mapping it to preserve selection while outdenting, no selection is preserved in nvui. vim.keymap.set("v", "<", "<gv", { desc = "Outdent" })

Related tags
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI

ImGui Goodies This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI. Currently, th

Nov 19, 2022
A wallpaper changer using Wallhaven api. Written with C++/CLR, only 0.5 MB and have a GUI.
A wallpaper changer using Wallhaven api. Written with C++/CLR, only 0.5 MB and have a GUI.

WHaven Wallpaper WHaven Wallpaper is a desktop wallpaper change program for change your wallpapers directly from wallhaven. Features You have a search

Aug 1, 2022
Clight GUI written in Qt.
Clight GUI written in Qt.

CLight GUI Clight GUI written in Qt. Huge thanks to @FedeDP for writing Clight and Clightd, the daemons upon which this is built on.

Dec 21, 2022
ChessBurger is a modern chess GUI written by Progmaster.

ChessBurger ChessBurger is a modern chess GUI written in C++. The reason I started working on a new chess GUI, is because the GUIs out there are somew

Nov 9, 2021
Free open-source modern C++17 / C++20 framework to create console, forms (GUI like WinForms) and unit test applications on Microsoft Windows, Apple macOS and Linux.
Free open-source modern C++17 / C++20 framework to create console, forms (GUI like WinForms) and unit test applications on Microsoft Windows, Apple macOS and Linux.

xtd Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applicat

Jan 4, 2023
Purely native C++ cross-platform GUI framework for Android and iOS development. https://www.boden.io
Purely native C++ cross-platform GUI framework for Android and iOS development. https://www.boden.io

BODEN CROSS-PLATFORM FRAMEWORK Build purely native cross-platform experiences with Boden Website ⬡ Getting Started ⬡ API Reference ⬡ Guides ⬡ Twitter

Dec 27, 2022
Minimalistic C++/Python GUI library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL
Minimalistic C++/Python GUI library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL

NanoGUI NanoGUI is a minimalistic cross-platform widget library for OpenGL 3+, GLES 2/3, and Metal. It supports automatic layout generation, stateful

Dec 28, 2022
A barebones single-header GUI library for Win32 and X11.
A barebones single-header GUI library for Win32 and X11.

luigi A barebones single-header GUI library for Win32 and X11. Building example Windows Update luigi_example.c to #define UI_WINDOWS at the top of the

Dec 30, 2022
super duper simple gui for C, wrapping imgui and stb

super duper simle gui for C, wrapping imgui and stb You can use it as a static library with cmake. See the example directory for a complete example. E

May 19, 2022
U++ is a C++ cross-platform rapid application development framework focused on programmer's productivity. It includes a set of libraries (GUI, SQL, Network etc.), and integrated development environment (TheIDE).
U++ is a C++ cross-platform rapid application development framework focused on programmer's productivity. It includes a set of libraries (GUI, SQL, Network etc.), and integrated development environment (TheIDE).

Ultimate++ Ultimate++ is a C++ cross-platform rapid application development framework focused on programmers productivity. It includes a set of librar

Jan 8, 2023
raygui is a simple and easy-to-use immediate-mode-gui library.
raygui is a simple and easy-to-use immediate-mode-gui library.

raygui is a simple and easy-to-use immediate-mode-gui library.

Dec 30, 2022
win-vind provides a lightweight hybrid UI system of CUI and GUI for Windows
win-vind provides a lightweight hybrid UI system of CUI and GUI for Windows

win-vind provides a lightweight hybrid UI system of CUI and GUI for Windows. And everything is inspired by Vim and its plugins. Simply put, it is a Vim-oriented toy box consisting of various useful features.

Jan 4, 2023
Fast, flexible and simple GUI.
Fast, flexible and simple GUI.

MyGUI is a cross-platform library for creating graphical user interfaces (GUIs) for games and 3D applications. Website: http://mygui.info/ There you c

Dec 29, 2022
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.

About wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls. wxWidgets allows y

Jan 7, 2023
Examples, tutorials and applications for the LVGL embedded GUI library
Examples, tutorials and applications for the LVGL embedded GUI library

Examples, tutorials and applications for the LVGL embedded GUI library

Nov 11, 2022
Window and GUI system based on Dear ImGui from OCornut
Window and GUI system based on Dear ImGui from OCornut

ImWindow Window and GUI system based on ImGui from OCornut. Include docking/floating window, multi window and multi render support. Platform Actually

Dec 20, 2022
HastyBadger is a branch of the excellent widget and GUI library Turbo Badger.

Branch Notice - HastyBadger Hasty is not Turbo. HastyBadger is a branch of the excellent widget and GUI library Turbo Badger. Notabe additions are c++

Nov 17, 2022
FlatUI is a immediate mode C++ GUI library for games and graphical applications.

FlatUI is a immediate mode C++ GUI library for games and graphical applications. Go to our landing page to browse our documentation.

Dec 23, 2022
Elements C++ GUI library
Elements C++ GUI library

Elements C++ GUI library Introduction Elements is a lightweight, fine-grained, resolution independent, modular GUI library. Elements is designed with

Dec 30, 2022