Neoray
Neoray is a simple and lightweight GUI client for Neovim. It's written in
Go using GLFW and OpenGL bindings. Neoray is easy to use and binary size
is small. Supports most of the Neovim features. Uses small amount of ram and
leaves no footprints on your computer.
Installation
Binaries
You can download prebuilt binaries from releases page.
If you are using Linux you will need x11 and gtk3 runtime libraries to run the Neoray.
Windows and MacOS binaries doesn't have any dependencies except Neovim.
NOTE: Neoray needs at least 0.5.0 version of Neovim
From source
You can install Neoray with go install
command:
go install github.com/hismailbulut/Neoray/cmd/neoray@latest
NOTE: To successfully build it on Linux with go you will need to have some
dependencies. On Ubuntu, install following packages:
sudo apt install libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libgl1-mesa-dev build-essential libgtk-3-dev xorg-dev
For other distros you need to install corresponding libraries.
Configuration
Neoray doesn't need any additional configuration, but you can customize it in
your init.vim
. All options can be set via NeoraySet command. Takes at least
two arguments, first one is the name of the option and others are arguments.
The cursor is moving smoothly in Neoray and you can specify how long it's move
takes. Default is 0.1 (1.0 is one second) You can disable it by setting to 0.
NeoraySet CursorAnimTime 0.1
Transparency of the window background. Default is 1 means no transparency, and
0 is fully transparent. Only background colors will be transparent, and
statusline, tabline and texts are fully opaque.
NeoraySet Transparency 0.95
The target update time in one second. Like FPS but Neoray doesn't render screen
in every frame. Default is 60.
NeoraySet TargetTPS 60
Neoray has a simple right click menu that gives you some abilities like
copying, cutting to system clipboard and pasting. It has a open file
functionality that opens system file dialog. Menu text is same as the font and
the colors are from your color scheme. This makes it look and feel like
terminal. You can disable it by setting this option to false. Default is true.
NeoraySet ContextMenu true
You can add custom buttons to context menu. First give a name to your button
and write your command. You must escape spaces in the command name. Every
command adds a new button. My advice to you is don't write entire command here,
write a function that does your job and call the function here. Do not escape
space between name and command.
NeoraySet ContextButton Say\ Hello :echo "Hello World!"
Neoray can handle some of the Unicode box drawing characters itself, draws them
pixel aligned which makes no gap between glyphs and makes them visually
compatible with each other. This is enabled by default but you can disable it
and use the font's glyphs.
NeoraySet BoxDrawing true
Neoray has a simple image viewer and it is enabled by default but you can disable it
NeoraySet ImageViewer true
You can specify how the Neoray window will be shown. The possible values are
'minimized', 'maximized', 'fullscreen', 'centered'. Default is none.
NeoraySet WindowState maximized
Also you can specify the startup size of the window in cells. The default is
none. The syntax is same below. First value is width (columns) and second value
is height (rows). If you set one dimension to 0, it will not take effect and
you can set other one dimension. The example starts Neoray with 99 columns and
don't touchs row/height. You may also want to call this before the WindowState option.
NeoraySet WindowSize 99x0
Neoray uses some key combinations for switching between fullscreen and windowed
mode, zoom in and out eg. You can set these keys and also disable as you wish.
All options here are strings contains vim style keybindings and set to
defaults.
NeoraySet KeyFullscreen <F11>
NeoraySet KeyZoomIn <C-kPlus>
NeoraySet KeyZoomOut <C-kMinus>
Font
Neoray respects your guifont
option, finds the font and loads it. If it can't
find your font, try with different names and also with file name. Giving full
shared name except the style and weight names will give best result.
Underscores are treated as spaces. You can change the font without having to
restart Neoray.
You can also list the fonts by starting Neoray with option --list-fonts fontlist.txt
This commands generates a file named fontlist.txt and this file
will has all of the fonts Neoray can see in your system.
If you think you tried every possibility but Neoray still can't find the font,
please report.
set guifont=Consolas:h11
set guifont=Ubuntu\ Mono:h12
set guifont=:h13 " Use default font with 13 pt size
NOTE:
- For now Neoray doesn't support TTC fonts.
Example init.vim with all options
if exists('g:neoray')
set guifont=Go_Mono:h11
NeoraySet CursorAnimTime 0.08
NeoraySet Transparency 0.95
NeoraySet TargetTPS 120
NeoraySet ContextMenu TRUE
NeoraySet BoxDrawing TRUE
NeoraySet ImageViewer TRUE
NeoraySet WindowSize 100x40
NeoraySet WindowState centered
NeoraySet KeyFullscreen <M-C-CR>
NeoraySet KeyZoomIn <C-ScrollWheelUp>
NeoraySet KeyZoomOut <C-ScrollWheelDown>
endif
You can disable all of these features.
if exists('g:neoray')
NeoraySet CursorAnimTime 0
NeoraySet ContextMenu FALSE
NeoraySet BoxDrawing FALSE
NeoraySet ImageViewer FALSE
NeoraySet KeyFullscreen <>
NeoraySet KeyZoomIn <>
NeoraySet KeyZoomOut <>
endif
Flags
Neoray accepts command line arguments. Some of them configure Neoray, the rest
are passed to Neovim. To list Neoray flags, run it with -h
option.
Some of them are very important (at least for me)
--single-instance, -si
With this option, Neoray opens only one process instance. Others will send
all flags to already opened instance and immediately quit. This is usefull for
game engine-like programs which could use Neovim as an external editor. For
example, if you are using Godot engine you can set external editor exec path to
Neoray executable and exec flags to the following:
-si --file {file} --line {line} --column {col}
Now, every time you open a script in Godot, this will open it in the same Neoray,
and cursor will go to specified line and column.
Contributing
All types of contributing are appreciated. If you want to be a part of this
project you can open issue when you find something not working, or help
development by solving issues and implementing some features what you want.
Development
The source code is well documented enough. I try to make everything
understandable.
Clone this repository and perform a go get
command. Everything will be
installed and you will be ready to fly.
make build
builds a debug version of Neoray in ./bin
folder,
make release
- release.
Copyright
Neoray is licensed under MIT license. You can use, change, distribute it
however you want.