HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
kjpgit
vilark
C#2023–2023
kjpgit / vilark

vilark

Vilark: A fast, elegant file picker and switcher for VIM

2Distinct people
3Mentions
0Explicit recommenders
13GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Vilark: A fast, elegant file picker and switcher for VIM

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by 6-hour interval3 dated mentions

Observed mentions: 2023-09-04 15:59:03 UTC to 2023-09-09 00:13:19 UTC.

012023-09-04 12:00:00 UTC to 2023-09-04 18:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsSep 4, 12:002023-09-04 18:00:00 UTC to 2023-09-05 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-05 00:00:00 UTC to 2023-09-05 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-05 06:00:00 UTC to 2023-09-05 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-05 12:00:00 UTC to 2023-09-05 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-05 18:00:00 UTC to 2023-09-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-06 00:00:00 UTC to 2023-09-06 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-06 06:00:00 UTC to 2023-09-06 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-06 12:00:00 UTC to 2023-09-06 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-06 18:00:00 UTC to 2023-09-07 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsSep 6, 18:002023-09-07 00:00:00 UTC to 2023-09-07 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-07 06:00:00 UTC to 2023-09-07 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-07 12:00:00 UTC to 2023-09-07 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-07 18:00:00 UTC to 2023-09-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-08 00:00:00 UTC to 2023-09-08 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-08 06:00:00 UTC to 2023-09-08 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-08 12:00:00 UTC to 2023-09-08 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-08 18:00:00 UTC to 2023-09-09 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-09-09 00:00:00 UTC to 2023-09-09 06:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsSep 9, 00:00

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Sep 4, 12:002023-09-04 12:00:00 UTC2023-09-04 18:00:00 UTC110
Sep 4, 18:002023-09-04 18:00:00 UTC2023-09-05 00:00:00 UTC000
Sep 5, 00:002023-09-05 00:00:00 UTC2023-09-05 06:00:00 UTC000
Sep 5, 06:002023-09-05 06:00:00 UTC2023-09-05 12:00:00 UTC000
Sep 5, 12:002023-09-05 12:00:00 UTC2023-09-05 18:00:00 UTC000
Sep 5, 18:002023-09-05 18:00:00 UTC2023-09-06 00:00:00 UTC000
Sep 6, 00:002023-09-06 00:00:00 UTC2023-09-06 06:00:00 UTC000
Sep 6, 06:002023-09-06 06:00:00 UTC2023-09-06 12:00:00 UTC000
Sep 6, 12:002023-09-06 12:00:00 UTC2023-09-06 18:00:00 UTC000
Sep 6, 18:002023-09-06 18:00:00 UTC2023-09-07 00:00:00 UTC110
Sep 7, 00:002023-09-07 00:00:00 UTC2023-09-07 06:00:00 UTC000
Sep 7, 06:002023-09-07 06:00:00 UTC2023-09-07 12:00:00 UTC000
Sep 7, 12:002023-09-07 12:00:00 UTC2023-09-07 18:00:00 UTC000
Sep 7, 18:002023-09-07 18:00:00 UTC2023-09-08 00:00:00 UTC000
Sep 8, 00:002023-09-08 00:00:00 UTC2023-09-08 06:00:00 UTC000
Sep 8, 06:002023-09-08 06:00:00 UTC2023-09-08 12:00:00 UTC000
Sep 8, 12:002023-09-08 12:00:00 UTC2023-09-08 18:00:00 UTC000
Sep 8, 18:002023-09-08 18:00:00 UTC2023-09-09 00:00:00 UTC000
Sep 9, 00:002023-09-09 00:00:00 UTC2023-09-09 06:00:00 UTC110

What Hacker News says

3 sources
vilark·Sep 9, 2023Submission

Show HN: Story of using C# for a terminal app (macOS and Linux)

The backstory and implementation of a hobby project called ViLark[1] I wrote it to make myself a faster and nicer looking file/buffer selector when I am using vim. But it's a stand alone executable -- when I launch it from a hotkey in vim, it takes over the terminal screen, and vim is suspended. It uses temp files to communicate the user selection back to vim, and it exits whenever a file is chosen or the escape key cancels it. This honestly wouldn't be possible without C# AOT compilation. Startup time would be too slow. But now, it's finally at c/c++ level startup time, perceptually. Really, it's instant, and doesn't feel like a break in the flow. It uses a few new .NET features like PosixSignalRegistration, so it gracefully handles CTRL-Z and CTRL-C -- setting the tty back to default settings, and going back to the 'main' terminal s
Read the rest
creen. Those are low-level details but are pretty important -- having your cursor not be visible when you type in a shell is not something you ever want. It also uses the new Console.ReadKey() handling to decode keyboard sequences, like ctrl-shift-right_arrow, etc. That seems to be working ok. Previously, I hacked up my own parser which wasn't a lot of fun, and I was happy to remove that code. Unicode support was definitely time consuming. For example, if you read in an emoji, that is 2 chars, which are surrogates. They also form a two-column wide glyph in the terminal. If you hit backspace in the searchbox, you don't want to cut off one of those chars, or you will throw an exception, because a partial surrogate pair isn't a valid string. So you need to use the Rune API wherever you are slicing strings. And I still don't know what to actually _do_ if I need to draw a vertical bar half way through an emoji. The utf8 string literals are helpful, for low level optimizations in some of the screen drawing, and more UTF8 support would certainly be welcome in .NET. For example, testing on 300K files, vilark uses 60MB of RSS compared to 30MB for fzf, and I believe it's primarily due to UTF16 vs UTF8. That said, the search speed was comparable, so I don't know if it's a detriment there. Since ViLark is a stand-alone process, it can exec another process (e.g. your $EDITOR) when you choose a file. This was a bit more challenging to do in current .NET 8 preview. After a lot of trial and error, including renting an EC2 Mac instance for a day, I settled on a solution of P/Invoke of `execve()` + a `sh -c` mini-wrapper that runs `stty sane; exec "$EDITOR" "$FILENAME"`. That resets the tty and launches the new process all in one shot, and seems pretty robust. It works identically on Mac and Linux/WSL. Anyway, I hope to see continued AOT support from the .NET team, because it makes coding fun again. And now that I have the low level plumbing out of the way, hopefully I can think about other features I'd like, such as a 'Projects' or 'Favorites' tab. I'd like to have something "Spatial" in my terminal, similar to a Desktop or Mission Control, that I can access quickly. 1. https://github.com/kjpgit/vilark
4 points · Open discussion

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.