8 个版本

0.3.0 2024年7月31日
0.2.5 2024年3月23日
0.2.3 2024年1月17日
0.1.0 2023年9月29日

17 在文本编辑器

Download history 5/week @ 2024-04-28 4/week @ 2024-05-19 5/week @ 2024-06-02 1/week @ 2024-06-16 21/week @ 2024-06-30 130/week @ 2024-07-28 10/week @ 2024-08-04 3/week @ 2024-08-11

每月143次下载

MIT 许可证

9MB
10K SLoC

Neophyte

Crates.io Version

Neophyte 是使用 WebGPU 渲染的 Neovim GUI,用 Rust 编写。它在默认基于终端的 UI 上提供了一些优点

  • 通过 Swash 进行文本形状和光栅化,提供高质量的字体渲染功能,如连字、回退字体和表情符号
  • 平滑滚动
  • 光标动画
  • 像素级窗口定位

https://github.com/tim-harding/neophyte/assets/13814470/7007c562-efaf-4e0e-98a3-cc71954183d0

安装

Neophyte 目前在 MacOS 和 Linux 上运行最佳。它还需要兼容的图形驱动程序,即 Vulkan、Metal 或 DX12。Linux 目标需要 fontconfig 库。从 Crates.io 或 Git 安装需要 Rust 工具链

Crates.io

cargo install neophyte

Git

git clone https://github.com/tim-harding/neophyte
cd neophyte
cargo build --release

二进制文件将在 target/release/neophyte 中。

版本

预构建的二进制文件可在 版本 中找到。

软件包

AUR

neophyte

从 Crates.io 上托管的源代码构建。

yay -S neophyte
neophyte-git

从 GitHub 上的最新标记版本构建。

yay -S neophyte-git
neophyte-bin

从 GitHub 安装最新的二进制版本。

yay -S neophyte-bin

光标动画

为了获得最佳效果,除非您使用 Noice 或选择不启用光标动画,否则请使用 Neophyte 的 --messages 标志。此选项将命令行和消息渲染委托给 Neophyte,这可以解决搜索导航期间或响应消息时光标在屏幕上跳转的问题。

配置

Neophyte 可以使用 Lua 脚本化。API 为 LuaLS 类型注解,以提高可发现性。

-- lazy.nvim example:
{
  'tim-harding/neophyte',
  tag = '0.3.0',
  event = 'VeryLazy',
  opts = {
    -- Same as neophyte.setup({ ... })
  },
}

-- API usage example:
local neophyte = require('neophyte')
neophyte.setup({
  fonts = {
    {
      name = 'Cascadia Code PL',
      features = {
        {
          name = 'calt',
          value = 1,
        },
        -- Shorthand to set a feature to 1
        'ss01',
        'ss02',
      },
    },
    -- Fallback fonts
    {
      name = 'Monaspace Argon Var',
      -- Variable font axes
      variations = {
        {
          name = 'slnt',
          value = -11,
        },
      },
    },
    -- Shorthand for no features or variations
    'Symbols Nerd Font',
    'Noto Color Emoji',
  },
  font_size = {
    kind = 'width', -- 'width' | 'height'
    size = 10,
  },
  -- Multipliers of the base animation speed.
  -- To disable animations, set these to large values like 1000.
  cursor_speed = 2,
  scroll_speed = 2,
  -- Increase or decrease the distance from the baseline for underlines.
  underline_offset = 1,
  -- For transparent window effects, use this to set the default background color.
  -- This is because most colorschemes in transparent mode unset the background,
  -- which normally defaults to the terminal background, but we don't have that here.
  -- You must also pass --transparent as a command-line argument to see the effect.
  -- Channel values are in the range 0-255.
  bg_override = {
    r = 48,
    g = 52,
    b = 70,
    a = 128,
  },
})

-- Alternatively, the guifont option is supported:
vim.opt.guifont = 'Cascadia Code PL:w10, Symbols Nerd Font, Noto Color Emoji'

-- There are also freestanding functions to set these options as desired:

-- Increase font size
vim.keymap.set('n', '<c-+>', function()
  neophyte.set_font_width(neophyte.get_font_width() + 1)
end)

-- Decrease font size
vim.keymap.set('n', '<c-->', function()
  neophyte.set_font_width(neophyte.get_font_width() - 1)
end)

-- Use cmd-ctrl-f to toggle fullsreen on MacOS
if this_os:find('Darwin') then
  vim.keymap.set('n', '<DC-f>', function()
    neophyte.set_fullscreen(not neophyte.get_fullscreen())
  end)
end

-- Neophyte can also record frames to a PNG sequence.
-- You can convert to a video with ffmpeg:
--
-- ffmpeg -framerate 60 -pattern_type glob -i '/my/frames/location/*.png'
-- -pix_fmt yuv420p -c:v libx264 -vf
-- "colorspace=all=bt709:iprimaries=bt709:itrc=srgb:ispace=bt709:range=tv:irange=pc"
-- -color_range 1 -colorspace 1 -color_primaries 1 -crf 23 -y /my/output/video.mp4
neophyte.start_render('/directory/to/output/frames/')
neophyte.end_render()

依赖项

14–50MB ~
~846K SLoC