Helix - A kakoune / neovim inspired editor, written in Rust

Overview

Helix

Build status

Screenshot

A kakoune / neovim inspired editor, written in Rust.

The editing model is very heavily based on kakoune; during development I found myself agreeing with most of kakoune's design decisions.

For more information, see the website or documentation.

All shortcuts/keymaps can be found in the documentation on the website.

Troubleshooting

Features

  • Vim-like modal editing
  • Multiple selections
  • Built-in language server support
  • Smart, incremental syntax highlighting and code editing via tree-sitter

It's a terminal-based editor first, but I'd like to explore a custom renderer (similar to emacs) in wgpu or skulpin.

Note: Only certain languages have indentation definitions at the moment. Check runtime/queries// for indents.scm.

Installation

Packages are available for various distributions (see Installation docs).

If you would like to build from source:

git clone https://github.com/helix-editor/helix
cd helix
cargo install --path helix-term

This will install the hx binary to $HOME/.cargo/bin and build tree-sitter grammars. If you want to customize your languages.toml config, tree-sitter grammars may be manually fetched and built with hx --grammar fetch and hx --grammar build.

Helix also needs its runtime files so make sure to copy/symlink the runtime/ directory into the config directory (for example ~/.config/helix/runtime on Linux/macOS, or %AppData%/helix/runtime on Windows).

OS command
windows xcopy runtime %AppData%/helix/runtime
linux/macos ln -s $PWD/runtime ~/.config/helix/runtime

This location can be overridden via the HELIX_RUNTIME environment variable.

Packages already solve this for you by wrapping the hx binary with a wrapper that sets the variable to the install dir.

NOTE: running via cargo also doesn't require setting explicit HELIX_RUNTIME path, it will automatically detect the runtime directory in the project root.

In order to use LSP features like auto-complete, you will need to install the appropriate Language Server for a language.

Packaging status

MacOS

Helix can be installed on MacOS through homebrew via:

brew tap helix-editor/helix
brew install helix

Contributing

Contributing guidelines can be found here.

Getting help

Your question might already be answered on the FAQ.

Discuss the project on the community Matrix Space (make sure to join #helix-editor:matrix.org if you're on a client that doesn't support Matrix Spaces yet).

Comments
  • Helix icon/logo brainstorming

    Helix icon/logo brainstorming

    In #279 @pickfire suggested that we might want a logo for Helix at some point. I figured it couldn't hurt to open an issue for people to toss some design ideas around.

    I don't think this is in any way urgent, so let's just have fun playing with ideas. No pressure, no real hard goal yet. And then at some point in the future, when we're actually ready for a logo, we can use this issue as a resource.

    C-discussion 
    opened by cessen 109
  • (Git) diff gutter implementation

    (Git) diff gutter implementation

    Supercedes #1623.

    I took this PR up as the original PR was tagged as waiting-for-author/inactive.

    This PR is rebased on the current master to avoid conflicts. Additionally, I have updated the PR with some improvements. The design is now much more similar to the design suggested by @p-e-w.

    The original author already did most of the work by implementing incremental diffing. However, I have now streamlined the git interface. The incremental diff only requires that git provides the head state of a file while the rest is handled by helix. Therefore, I have simplified the git interface down to one function: get_file_head. This interface is now provided by a trait, that is implemented for git but is trivial to implement for other diff sources as well and could be exposed to the plugin system in the future.

    The original PR cached the git repositories in memory. This has been removed because it did not handle nested repositories correctly (example: $HOME as git repo for dotfile management). It's also not required anymore as the git repo is only accessed when a file is open instead of every keystroke.

    Finally, I have improved the git implementation by switching to gitoxide (as suggested in the original PR). During this switch, I found a few edge cases that were not handled correctly by the previous implementation:

    • Non utf-8 encoded files were not supported (now uses document encoding)
    • Directories/symlinks that were replaced by files would use the directory children/link path as the diff base (now the diff is not shown)

    I have purposefully not added more features to this PR to keep it somewhat small and reviewable. In the future, I would like to expand on this PR. In particular, I would like to implement a mechanism to reload the diff base after a file is first opened. This avoids having to call :reload helix after every commit, to continue receiving correct diffs. However, this feature is more complex (requires watching .git) so I choose not to include it here.

    ~~Currently, all commits are separate to make review easier. I would like to squash the commits before this is merged, as the implementation changed quite a bit.~~

    ~~Note that there is currently one test failing in helix-core but that seems completely unrelated as the PR does not touch anything in helix-core~~

    A-helix-term S-waiting-on-review 
    opened by pascalkuthe 99
  • Julia LSP not working

    Julia LSP not working

    Reproduction steps

    1. Open a julia file.
    2. LSP does not work.

    Environment

    • Platform: Linux
    • Helix version: v0.4.1-68-g5cee3b63 (master)
    ~/.cache/helix/helix.log
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <- 
    2021-08-28T12:29:40.183 helix_lsp::transport [ERROR] err <-
    

    Is this related to #413 ?

    Just to add, I wonder if it actually not start julia because in htop, no julia process is running.

    C-bug A-language-server 
    opened by uncomfyhalomacro 54
  • Remove default insert mode movement bindings

    Remove default insert mode movement bindings

    Helix is first and foremost a modal editor. Willingness to support non-modal editing is there, but it is not one that should be encouraged with the default settings. There are an increasing number of users who are stumbling because they are trying to use Helix as a non-modal editor, so this is an effort to encourage new users to stop and take notice that Helix has a different paradigm than VSCode, Sublime, etc. Users can still add these bindings back to their own configs if they wish.

    opened by dead10ck 43
  • Debug adapter protocol support

    Debug adapter protocol support

    Fixes #505. /cc @archseer

    Current state: an initial implementation of DAP with some types, editor connection. To test DAP client:

    1. Create a debuggee program:
    package main
    
    import "fmt"
    
    func main() {
    	a := "Hello"
    	b := "World"
    	fmt.Println(a, b)
    	for {
    	}
    }
    
    #include <stdio.h>
    
    void main() {
    	char *a = "Hello";
    	char *b = "World";
    	printf("%s %s\n", a, b);
    	while (1) {
    	}
    }
    
    1. go build -gcflags '-N -l' main.go to build binary with readable variables or use :dbg source main.go for Go. 2.1. gcc main.c -o main -O0 -g for C program ~~3. Start up Delve (chosen as a monolithic DAP+debugger in one binary) on port 7777: dlv dap -l 127.0.0.1:7777 3.1. Or lldb: lldb-vscode -p 7777~~
    2. Don't care about that, tcp_process transport will find free port and start debug adapter itself.
    3. Run DAP example cargo run --example dap-dlv or dap-lldb
    4. Press enter when you want to continue communicating to debugger.

    Editor integration works with Go, C/C++ and Rust programs at the moment. ~~Just enter directory containing main.go/main (build output)/target/debug/rustdebug for Rust and work with it.~~ Now you need to specify target manually, see languages.toml In editor I currently use example attached as a zip. godebug.zip

    TODO:

    • [x] DAP runs over TCP/IP. ~~Not stdio~~. So, Transport must be able to use TCP sockets and the lifecycle of debug adapters
    • [x] More types, requests, events implemented. I'll do that in some time.
      • [x] attach
      • [x] parse stopped event
      • [x] Pass unused events to application or stream all the events in some way via channel
      • [x] pause, step~~, restart, eval~~
      • [ ] restart
        • [ ] supportsRestartRequest
      • [x] eval
      • [x] conditional breakpoints
      • [x] logpoints
      • [x] conditional logpoints
      • [x] Some internal state tracking
      • [x] breakpoint event
      • [ ] progress* events
      • [ ] output event's data can be recorded as well
      • [x] Better state handling (replace is_running)
      • [ ] BreakpointLocations (not supported by lldb and Delve)
      • [ ] Goto (no supported debugger)
      • [ ] Completions Request for eval autocompletion (no supported debugger)
        • [ ] supportsCompletionsRequest
      • [x] setExceptionBreakpoints
      • [ ] SetVariable Request
      • [ ] Source Request
      • [x] Check support for features in debugger
        • [x] Breakpoints
        • [ ] supportsTerminateRequest
    • [x] Editor UI connection
      • [x] Breakpoints setting
        • [x] Show unverified breakpoints and breakpoints moved by debugger
      • [x] Debugger state management
      • [x] Variable introspection
        • [x] Scrollable window for variables
      • [x] Highlight stack pointer
        • [x] Scroll to pos
      • [ ] REPL for eval (after commpletions for eval are done)
      • [x] Attach support
      • [x] Pretty-print errors instead of crashing when something goes wrong with debugger
      • [x] multi-thread support for stack pointers
      • [x] Preview of stack location
      • [x] Go to previous stack frame
      • [ ] Column-precision for breakpoints
      • [x] Set breakpoints by mouse
        • [x] Right click opens the prompt for editing condition
        • [x] ~~Middle click~~ Right click + Alt opens the prompt for editing condition
        • [x] those (:top:) ideas, but with keybindings
    • [x] Fix Tried sending event into a closed channel for events
    • [x] Split out interface for adapter-specific launch and attach args
    • [x] Configuration for languages to specify how to start and configure debuggers for them ~~, maybe some debug adapters' quirks~~.
      • [x] Names for launch configs
      • [x] Templates
      • [x] Pickers
        • [ ] Show defaults and allow editing args
      • [x] Non-string arguments
      • [ ] Multiple debuggers for language (needs a use case, gdb will be the first one)
    • [ ] Consider adding workspace configs for debug targets or parsing existing ones.
    • [ ] Test debuggers, add them to editor.
      • [x] Delve's dlv dap
      • [x] lldb with lldb-vscode
      • [x] Node.js
      • [ ] gdb integration, which means rr could be supported, test it as well
        • [x] Initial connection to gdbserver with lldb, :warning: Is not compatible enough, OpenOCD and rr did not work
      • [ ] https://github.com/microsoft/debugpy/
      • [ ] Chromium
      • [ ] Firefox
    • [ ] Docs for everything

    Local ``languages.toml` for Node:

    [[language]]
    name = "javascript"
    
    [language.debugger]
    command = "node"
    args = [ "/usr/share/code-insiders/resources/app/extensions/ms-vscode.node-debug2/out/src/nodeDebug.js" ]
    

    Adjust path to extension in VSCode (or location where you unpacked the extension manually).

    opened by sh7dm 33
  • "no entry found for key" panic in helix-view

    Summary

    Helix panics (about 1-2 times a day with ~8 hour usage) with the following error:

    Error
    $ RUST_BACKTRACE=full GOPACKAGESDRIVER=$PWD/scripts/gopackagesdriver.sh hx
    thread 'main' panicked at 'no entry found for key', helix-view/src/document.rs:1006:10
    stack backtrace:
       0:     0x55bd8c72b384 - <unknown>
       1:     0x55bd8bf6965c - <unknown>
       2:     0x55bd8c724d65 - <unknown>
       3:     0x55bd8c72d22e - <unknown>
       4:     0x55bd8c72cf5d - <unknown>
       5:     0x55bd8c5b6b5c - <unknown>
       6:     0x55bd8c72d8bb - <unknown>
       7:     0x55bd8c72d6e4 - <unknown>
       8:     0x55bd8c72b8b4 - <unknown>
       9:     0x55bd8c72d44d - <unknown>
      10:     0x55bd8bee8c33 - <unknown>
      11:     0x55bd8bf67d31 - <unknown>
      12:     0x55bd8bf67cdb - <unknown>
      13:     0x55bd8bee8aa6 - <unknown>
      14:     0x55bd8c51965c - <unknown>
      15:     0x55bd8c217c29 - <unknown>
      16:     0x55bd8c3e7c3f - <unknown>
      17:     0x55bd8c5b3845 - <unknown>
      18:     0x55bd8c5d0fab - <unknown>
      19:     0x55bd8c5a9392 - <unknown>
      20:     0x55bd8c591578 - <unknown>
      21:     0x55bd8c5f27a8 - <unknown>
      22:     0x55bd8c5cdc73 - <unknown>
      23:     0x55bd8c589826 - <unknown>
      24:     0x55bd8c589953 - <unknown>
      25:     0x55bd8c5a908d - <unknown>
      26:     0x55bd8c71f5fb - <unknown>
      27:     0x55bd8c589932 - <unknown>
      28:     0x7f056d9d12d0 - <unknown>
      29:     0x7f056d9d138a - __libc_start_main
      30:     0x55bd8bf1edd5 - <unknown>
      31:                0x0 - <unknown>
    

    I think it happens on save, but not every time I save (I'm saving with :wa very frequently because of this issue), but it always catches me off guard, so I can never remember exactly what I was doing when it happened.

    I don't think GOPACKAGESDRIVER has anything to do with it, it's just what I use to get Go's LSP working with Bazel. I'm pretty confident I've seen this failure even when not running with GOPACKAGESDRIVER.

    Reproduction Steps

    Unfortunately, I don't know exactly what triggers it. I usually have lots of splits open, and it seems to be either a :w or :wa command that triggers the failure.

    Helix log

    ~/.cache/helix/helix.log
    2022-08-16T09:11:48.686 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T09:12:15.077 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T09:13:57.611 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T09:46:32.853 helix_view::editor [ERROR] Failed to initialize the LSP for `source.md` { LSP not defined }
    2022-08-16T09:46:41.629 helix_view::editor [ERROR] Failed to initialize the LSP for `source.md` { LSP not defined }
    2022-08-16T09:48:56.085 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T09:48:59.795 helix_lsp::transport [ERROR] err: <- StreamClosed
    2022-08-16T09:49:58.990 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T09:58:05.710 helix_lsp::transport [ERROR] err: <- StreamClosed
    2022-08-16T09:58:08.114 helix_lsp::transport [ERROR] err: <- StreamClosed
    2022-08-16T09:59:01.288 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T09:59:31.375 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:00:07.235 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:01:48.057 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:03:10.204 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:10:03.673 helix_lsp::transport [ERROR] err: <- StreamClosed
    2022-08-16T10:10:15.765 helix_view::editor [ERROR] Failed to initialize the LSP for `git.commitmsg` { LSP not defined }
    2022-08-16T10:25:57.120 helix_lsp::transport [ERROR] err: <- StreamClosed
    2022-08-16T10:46:11.049 helix_lsp::transport [ERROR] <- ServerError(0): 14:21: string literal not terminated (and 2 more errors)
    2022-08-16T10:46:11.050 helix_view::document [WARN] LSP formatting failed: protocol error: ServerError(0): 14:21: string literal not terminated (and 2 more errors)
    2022-08-16T10:54:14.696 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:54:22.729 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:55:39.396 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:56:59.820 helix_view::editor [ERROR] Failed to initialize the LSP for `source.sql` { LSP not defined }
    2022-08-16T10:57:07.583 helix_view::editor [ERROR] Failed to initialize the LSP for `source.sql` { LSP not defined }
    2022-08-16T10:59:05.821 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:59:40.993 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T10:59:57.991 helix_view::editor [ERROR] Failed to initialize the LSP for `source.sql` { LSP not defined }
    2022-08-16T11:04:37.385 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:05:12.052 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:05:46.337 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:08:33.941 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:09:06.968 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:11:42.715 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:12:32.145 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:19:10.376 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:22:27.091 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:23:53.661 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:24:57.772 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:25:54.567 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:26:27.158 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:27:15.928 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:28:08.760 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:29:00.692 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:29:32.137 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:30:34.538 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:31:39.642 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:32:53.320 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:35:36.503 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:41:17.265 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:47:09.087 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 142, character: 0 }, end: Position { line: 142, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:47:09.270 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 143, character: 0 }, end: Position { line: 143, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:47:09.423 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 144, character: 0 }, end: Position { line: 144, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:47:15.815 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:48:13.727 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 148, character: 0 }, end: Position { line: 148, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:48:13.898 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 149, character: 0 }, end: Position { line: 149, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:48:37.571 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:49:26.443 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:50:01.018 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 154, character: 0 }, end: Position { line: 154, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:50:01.220 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 155, character: 0 }, end: Position { line: 155, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:50:01.359 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 156, character: 0 }, end: Position { line: 156, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:50:39.381 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:50:51.460 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 159, character: 0 }, end: Position { line: 159, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:50:51.629 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 160, character: 0 }, end: Position { line: 160, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:51:09.160 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 162, character: 0 }, end: Position { line: 162, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:51:09.309 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 163, character: 0 }, end: Position { line: 163, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:51:09.460 helix_term::application [WARN] lsp position out of bounds - Diagnostic { range: Range { start: Position { line: 164, character: 0 }, end: Position { line: 164, character: 0 } }, severity: Some(Error), code: None, code_description: None, source: Some("syntax"), message: "expected ';', found 'EOF'", related_information: None, tags: None, data: None }
    2022-08-16T11:51:56.141 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:52:33.431 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:54:42.422 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:55:27.757 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:56:01.825 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:57:10.284 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:58:05.591 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    2022-08-16T11:58:38.891 helix_lsp::transport [ERROR] err <- "walk.go:91: gopathwalk: scanning directory <project directory>: open <project directory>/bazel-<project name>/.postgres-data/data: permission denied\n"
    
    

    Most of these errors are related to $PROJECT/.postgres-data/data, which is owned by some other user (it's running in a Docker container). I believe I've seen this failure in other projects that wouldn't have this .postgres-data directory, and also when editing non-Go projects (e.g. TypeScript)

    Platform

    Linux

    Terminal Emulator

    st (4ef0cbd8)

    Helix Version

    helix 22.05 (8deaebde) (built from HEAD ~4 days ago)

    C-bug A-helix-term 
    opened by bcspragu 32
  • Give warnings and errors when building from source on powershell. (Windows 10) resulting into fail build.

    Give warnings and errors when building from source on powershell. (Windows 10) resulting into fail build.

    Windows 10 Powershell 7.2.2 With gcc and g++ installed(MingW). installed using choco intall rust was installed using choco install rust

    To replicate the issue. use windows 10 use powershell install rust via choco install rust install mingw via choco install git clone https://github.com/helix-editor/helix cd helix cargo install --path helix-term

    the warning and errors will occur on building[208-214] see image below

    image image image image

    C-bug O-windows A-helix-term 
    opened by reiend 31
  • initial implementation of bufferline

    initial implementation of bufferline

    • adds new "bufferline" setting, which enables rendering of a line displaying currently open buffers
    • has 3 modes always (always show), never (never show, default), multiple (show if num buffers > 1)

    helix2

    #497

    opened by aaron404 27
  • Implement cursorline

    Implement cursorline

    Highlight all lines where cursers are on, imitating vim's cursorline option.

    See #1761.

    Todo:

    • [x] implement it
    • [x] config option
    • [x] documentation
    • [ ] update (a few) themes

    Improvements:

    • [x] Use ui.cursorline[.primary | .secondary]
    • [x] Discuss whether to highlight secondary cursors.
    • [ ] TBD: Option to disable on inactive window
    • [ ] TBD: Syncing?
    opened by TobTobXX 27
  • git commit message highlighting

    git commit message highlighting

    Git stuff was my last bastion of kakoune and I like the way kakoune highlighted new files, deletions, etc. So I made this!

    helix-commit

    I've got the playground up here if you wanna play with it ahead of time: https://the-mikedavis.github.io/tree-sitter-git-commit/

    I was curious how we could choose language based on exact filename instead of extension, but according to this block, that's already possible!

    opened by the-mikedavis 25
  • Change default formatter for any language

    Change default formatter for any language

    I have never worked on a big project in rust, so I don't know if the Result/Option handling is ok.

    This PR aims to allow the user to choose which formatter to use instead of always relying on lsp. Discussion about this in issue #2362.

    Currently the only problem is that write_all_impl saves only the viewed buffers, this is because the formatter needs to reload or apply the transaction to the document. How do we get around this?

    opened by PiergiorgioZagaria 24
  • Feat: Add VCS change picker for current document and workspace

    Feat: Add VCS change picker for current document and workspace

    • doc: fix Hunk::invert doc
    • chore: extract SourcePathFormat from lsp command file
    • feat: Add command and bindings to list changes from VCS in opened document(s)

    Closes #5362

    C-enhancement S-waiting-on-review A-vcs 
    opened by poliorcetics 0
  • jsonrpc: Skip serializing params if params are None

    jsonrpc: Skip serializing params if params are None

    The JSONRPC spec says:

    If present, parameters for the rpc call MUST be provided as a Structured value

    https://www.jsonrpc.org/specification#parameter_structures

    (Where a "Structured value" is elsewhere defined as either a map or array.)

    This change skips the serialization of the params field for JSONRPC method calls and notifications if the params field is the None variant. This fixes compatibility with LSP servers which adhere closely to that part of the spec: ocamllsp in the wild.

    Fixes #5400

    C-bug A-language-server S-waiting-on-review 
    opened by the-mikedavis 1
  • XML highlighting fails with comment of certain length in document root

    XML highlighting fails with comment of certain length in document root

    Summary

    XML highlighting fails if there is a comment in the XML document root which has at least a certain length.

    This fails:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg">
    </svg>
    

    image

    This works (One "X" less in the comment line):

    <?xml version="1.0" encoding="utf-8"?>
    <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg">
    </svg>
    

    image

    Reproduction Steps

    I tried this:

    1. hx
    2. Paste "This fails" XML content
    3. Set :lang xml
    4. Observe failed highlighting
    5. Remove one X from the comment line
    6. Observe successful highlighting

    I expected this to happen:

    Highlighting succeeds

    Instead, this happened:

    Highlighting fails (see screenshot)

    Helix log

    (Nothing in the helix log.)

    Platform

    openSUSE Tumbleweed - Linux

    Terminal Emulator

    Konsole

    Helix Version

    helix 22.12

    C-bug upstream A-language-support 
    opened by LeoniePhiline 3
  • Fix piping to Helix on macOS (pending Crossterm update)

    Fix piping to Helix on macOS (pending Crossterm update)

    Crossterm will soon merge https://github.com/crossterm-rs/crossterm/pull/735 which will let it use /dev/tty on macOS. This will fix #2111 and allow piping to Helix on macOS.

    A-helix-term upstream S-waiting-on-pr 
    opened by yyogo 0
  • Very poor performance with Haskell files

    Very poor performance with Haskell files

    Summary

    Hi! I can't use helix with my haskell project anymore.

    There are a couple of issues that I'm experiencing:

    1. When I make a change the diagnostics are updated after several seconds. From the logs you can see that 26 seconds pass between the code change and the error diagnostics showing up.

    2. When this happens, saving the file is delayed by several seconds if it even happens. Often I just have to wait for the LSP to be done and then save it again. Sometimes I get a red "Async operation failed" message or something similar flashing briefly in the status bar.

    This wasn't happening before. The problem is that the issue persists even if I go back to older commits (when I know it was working fine). Removing my config.toml and languages.toml files doesn't change anything.

    I'm pretty sure it's not a language server issue, as I can open the same file in emacs or vscode, make the same exact changes to the file and have near instant feedback.

    I think this happens with haskell only, and only with projects that are over a certain size.

    Anything I can try to figure this out or to give you more info?

    Thank you!

    Reproduction Steps

    No response

    Helix log

    ~/.cache/helix/helix.log
    2023-01-09T14:33:51.643 helix_lsp::transport [INFO] -> {"jsonrpc":"2.0","method":"textDocument/didChange","params":{"contentChanges":[{"range":{"end":{"character":24,"line":70},"start":{"character":24,"line":70}},"text":" "}],"textDocument":{"uri":"file:///...","version":15}}}
    2023-01-09T14:33:54.412 helix_lsp::transport [ERROR] err <- "2023-01-09T13:33:54.412792Z | Info | Live bytes: 858.06MB Heap size: 3023.04MB\n"
    2023-01-09T14:33:54.413 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"message":"Live bytes: 858.06MB Heap size: 3023.04MB","type":3}}
    2023-01-09T14:33:54.413 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "Live bytes: 858.06MB Heap size: 3023.04MB" }
    2023-01-09T14:33:55.628 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"610","value":{"kind":"report","message":"342/668"}}}
    2023-01-09T14:33:55.729 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"610","value":{"kind":"report","message":"338/668"}}}
    2023-01-09T14:33:56.030 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"610","value":{"kind":"report","message":"343/668"}}}
    2023-01-09T14:33:56.733 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"610","value":{"kind":"report","message":"348/668"}}}
    2023-01-09T14:34:00.807 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"610","value":{"kind":"end"}}}
    2023-01-09T14:34:00.908 helix_lsp::transport [INFO] <- {"id":74,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"613"}}
    2023-01-09T14:34:00.908 helix_lsp::transport [INFO] -> {"jsonrpc":"2.0","result":null,"id":74}
    2023-01-09T14:34:00.911 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"begin","title":"Processing"}}}
    2023-01-09T14:34:00.912 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///...","version":15}}
    2023-01-09T14:34:01.011 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"658/668"}}}
    2023-01-09T14:34:01.111 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"282/668"}}}
    2023-01-09T14:34:01.312 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"290/668"}}}
    2023-01-09T14:34:01.430 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"refact:Avoid lambda","message":"...","range":{"end":{"character":59,"line":161},"start":{"character":16,"line":161}},"severity":3,"source":"hlint"},{"code":"refact:Avoid lambda","message":"...","range":{"end":{"character":62,"line":162},"start":{"character":19,"line":162}},"severity":3,"source":"hlint"}],"uri":"...","version":15}}
    2023-01-09T14:34:01.613 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"296/668"}}}
    2023-01-09T14:34:04.019 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"301/668"}}}
    2023-01-09T14:34:04.119 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"300/668"}}}
    2023-01-09T14:34:04.319 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"301/668"}}}
    2023-01-09T14:34:04.419 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"300/668"}}}
    2023-01-09T14:34:04.620 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"301/668"}}}
    2023-01-09T14:34:10.339 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"309/668"}}}
    2023-01-09T14:34:11.041 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"314/668"}}}
    2023-01-09T14:34:11.141 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"313/668"}}}
    2023-01-09T14:34:11.242 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"314/668"}}}
    2023-01-09T14:34:15.858 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"321/668"}}}
    2023-01-09T14:34:17.664 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"347/668"}}}
    2023-01-09T14:34:17.765 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"336/668"}}}
    2023-01-09T14:34:17.867 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"519/668"}}}
    2023-01-09T14:34:17.930 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"refact:Avoid lambda","message":"...","range":{"end":{"character":59,"line":161},"start":{"character":16,"line":161}},"severity":3,"source":"hlint"},{"code":"refact:Avoid lambda","message":"...","range":{"end":{"character":62,"line":162},"start":{"character":19,"line":162}},"severity":3,"source":"hlint"},{"code":"-Wdeferred-type-errors","message":"...","range":{"end":{"character":68,"line":79},"start":{"character":0,"line":70}},"severity":1,"source":"typecheck"},{"code":"-Wunused-matches","message":"...’","range":{"end":{"character":24,"line":70},"start":{"character":23,"line":70}},"severity":2,"source":"typecheck","tags":[1]}],"uri":"...","version":15}}
    2023-01-09T14:34:17.970 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"report","message":"667/668"}}}
    2023-01-09T14:34:18.008 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"613","value":{"kind":"end"}}}
    

    Platform

    Linux

    Terminal Emulator

    kitty 0.26.5

    Helix Version

    22.12-108-g77860bdb

    C-bug 
    opened by dariooddenino 4
Releases(22.12)
TIF is a terminal_image_format. (theres no TIF editor, so i made TIF images through a hex editor lol)

Colors these are the colors you can use when displaying images on the terminal BYTES: 5A = BLUE 5B = BLACK 5C = RED 5D = GREEN 5E = PURPLE 5F = WHITE

buzz 5 Dec 23, 2022
ReVi is a cross-platform terminal based Vim inspired text editor.

ReVi Table Of Contents: About Usage Install Clone && Installing Development Q&A KeyBindings Roadmap Changelog About ReVi is a cross-platform terminal

null 31 Sep 21, 2022
A terminal-based text editor written in Rust

Iota Iota is a terminal-based text-editor written in Rust. Here's what it looks like right now, editing itself. Motivation Iota was born out of my fru

Greg Chapple 1.6k Jan 8, 2023
A text editor in ≤1024 lines of code, written in Rust

Kibi: A text editor in ≤1024 lines of code, written in Rust A configurable text editor with UTF-8 support, incremental search, syntax highlighting, li

Ilaï Deutel 881 Dec 29, 2022
A modern editor with a backend written in Rust.

Xi Editor (pronounced "Zigh") A modern editor with a backend written in Rust. Maintenance status: The xi-editor project is not currently under active

null 19.7k Jan 5, 2023
Web base text editor written in rust

Ultron Ultron is a web based monospace text-editor with syntax highlighting, completely written in rust. I wrote this code editor for my very specific

Jovansonlee Cesar 59 Aug 8, 2022
Lightning-fast and Powerful Code Editor written in Rust

Lapce Lightning-fast and Powerful Code Editor written in Rust About Lapce is written in pure Rust, with UI in Druid. It's using Xi-Editor's Rope Scien

Lapce 22.1k Jan 8, 2023
A collision editor for Guilty Gear -Strive-, written in Rust

ggst_collision_editor_rs A collision editor for Guilty Gear -Strive- and other Team Red Arc System Works games, written in Rust. Uses a customized ver

null 4 May 3, 2022
A pathtracer written in rust - runs in the web and includes an editor

Webtracer A pathtracer written in rust - runs in the web and includes an editor Rendering is parallelized and utilizes all cpu cores You can easily ed

Shapur 5 Oct 7, 2022
An independent Rust text editor that runs in your terminal!

Ox editor Ox is a code editor that runs in your terminal. About The Project Ox is a code editor. It was written in Rust using ANSI escape sequences. I

null 2.9k Jan 2, 2023
Rust-based traffic editor for RMF

Traffic Editor III Welcome to Traffic Editor III. install stuff Unfortunately we need a newer Rust than what comes with Ubuntu 20.04. First make sure

null 2 Oct 20, 2022
My own personal code editor built with Rust + OpenGL

Glyph This is my personal code editor that I am building for fun and to get more familiar with OpenGL. Glyph currently supports Vim keybinds, syntax h

Zack Radisic 83 Dec 23, 2022
A simple terminal-based editor made in rust!

ELuna Editor The terminal-based editor for europa lang. Goals Be as minimal as possible, but retain conveniences found in other editors. Do not add fe

Junhao 3 May 25, 2022
Ginkgo is a text editor built entirely in Rust

Ginkgo is a text editor built entirely in Rust. It supports cursor movements, CTRL commands, select vim commands, insert vs. normal modes, and more. Ginkgo is based on my text editor JED, which itself was based on the popular online editor Kilo.

James Asbury 12 Oct 15, 2022
An opinionated modal editor to simplify code editing from the terminal

(I'm currently refactoring the platform layer. So we have to first finish this cleanup before we're able to continue adding features) An opinionated m

Matheus Lessa Rodrigues 284 Jan 5, 2023
Aspiring vim-like text editor

Rim Rim is an aspiring Vim-like text editor written in Rust. Current state Rim is in an early prototype stage. This means that you can load, edit and

Mathias Hällman 557 Jan 2, 2023
An experimental next-generation Electron-based text editor

Attention: GitHub has decided not to move forward with any aspect of this project. We'll archive the repository in case anybody finds value here, but

Atom Archive 8.5k Dec 26, 2022
A save editor for Mass Effect Trilogy

Trilogy Save Editor A save editor for Mass Effect Trilogy A bit late but just in time ! This software is similar to Gibbed's save editors (and forks)

Karlitos 118 Dec 25, 2022
Rustpad is an efficient and minimal collaborative code editor, self-hosted, no database required

Rustpad is an efficient and minimal open-source collaborative text editor based on the operational transformation algorithm

Eric Zhang 2.5k Dec 31, 2022