HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
jrockway
eproject
Emacs Lisp2009–2014
jrockway / eproject

eproject

file grouping ("project") extension for emacs

3Distinct people
8Mentions
0Explicit recommenders
164GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

file grouping ("project") extension for emacs

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, 3:56:07 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 year8 dated mentions

Observed mentions: 2009-03-07 19:53:28 UTC to 2014-12-01 01:29:27 UTC.

012342009-01-01 00:00:00 UTC to 2010-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments20092010-01-01 00:00:00 UTC to 2011-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20112012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014

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
20092009-01-01 00:00:00 UTC2010-01-01 00:00:00 UTC404
20102010-01-01 00:00:00 UTC2011-01-01 00:00:00 UTC202
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC101
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC000
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC000
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC101

What Hacker News says

8 sources
Some of these exist, and all are possible without threads. Non-blocking save on network drives; Non-blocking autosave This requires a memcpy and the aio_* functions. When a save is requested, you make a copy of the buffer in memory (so that what ends up on disk is what the buffer looked like exactly when the save was requested), then you stream this data to disk with aio_write (perhaps making the write atomic by doing a synchronous rename after all the data is on disk). This would probably take no more than a few hours to implement, and most of the complexity is simple to handle with atomic writes and aio_cancel. I think the biggest problem is handling the "userspace" semantics; after-save hooks expect to run after the data is on disk but before the user has changed the buffer in any way. What do you do about this? (I've done this bef
Read the rest
ore. I have an Emacs mode at work that saves to a special centralized database in addition to the local disk at every modification. We just queue the write in before-save hook and tell some other process to read the data from a temp file that we create. It works perfectly, even on Windows!) Rebuilding tag tables in the background This is easy and eproject already does it. You run etags in a background process and when it's done, point Emacs at the new tags tables. Since the tags tables don't do anything until a lookup is requested, this is completely asynchronous. Try it today: https://github.com/jrockway/eproject/blob/master/contrib/epr... Loading and fontifying large files in the background (i.e. concurrent fontification, not just jit-lock) This you can't do unless you can guarantee that matchers are bounded and generate correct results no matter what the boundaries are. I don't know of any programming mode that could be made to meet this invariant easily; consider the case: /* this code is bad: int i = 0; */ If we had two threads fontifying this block, and the bounds were set to thread 1 = line 1, thread 2 = line 2, the results are going to be wrong. The first line will be treated as a comment and the second line will look like a normal variable declaration because getting the correct syntax information requires analyzing the entire first line. Any language with multiline constructs (string literals, preprocessor directives, comments, etc.) will have this problem, thus making parallelization Not Easy. If font-locking is slow, profile it and fix the algorithm, but don't expect speedups for free. Parsing programs that are invalid (as most are while being typed; you type characters, not tokens) and guessing what the user "means" is hard. Concurrent url fetching and downloads (e.g. updating el-get without blocking). Fork curl or wget. Display the result when done. Or, implement HTTP from scratch; network IO is already nonblocking. Concurrent spellcheck This is already implemented this way; a pipe is opened to aspell and words are piped to aspell as necessary. If parsing the results is too expensive and you don't care about interactivity, wait for bigger batches of data back from aspell. All IO to other processes is asynchronous and can be made synchronous with special calls like accept-process-output. Fast scrolling in large buffers (especially complex XML files opened in nxml-mode) How will threads solve this problem?
In Getting Started with Emacs 24
Makefiles are an acceptable barrier to entry. I've lost a lot of hair trying to figure out how to build huge Java projects that the developers just built inside their five-major-versions-old IDE. ("Oh, just build it by clicking the 'export to WAR' button and then copy the file to each production server." No.) Considering how trivial it is to write an ant file to do the same thing, it's appalling that the IDEs don't just do this by default. How can you write a good application if you don't even know how to compile it? But the biggest problem with Emacs is the "project management" functionality. Pick up many modern editors, and you can, with one command, point to a directory and have a project tree, a "jump to file", etc, all built for you. Emacs does this too: http://github.com/jrockway/eproject. Of course, Emacs' version is a lot more
Read the rest
flexible. The user can hook it, so he gets a fresh project REPL the first time he visits a new project. Or, he can hook the eproject-after-save hook, and commit the changes to a "backup" git branch, so that he never has to worry about not being able to undo. The idea behind Emacs is that it can do things that nobody else has ever done before, and it continually lives up to this expectation. (Also, "this is too hard for beginners". OK. Then how did I learn Emacs?)
In How I boosted my Vim
Eproject (for emacs). Basically, lets me do things like "find file in current project" or "switch to buffer in current project". http://github.com/jrockway/eproject/ Projects are found automatically by searching parent directories for _darcs or .hg. (This requires some additional configuration to make it work with anything.el, email me if interested, can't post since I'm not at my home computer right now.)
In Ask HN: Little things/tools that improved your work or life lately?
Recently "finished": eproject - file/buffer grouping for emacs, http://github.com/jrockway/eproject cperl-mode for MooseX::Declare - http://github.com/jrockway/cperl-mode/tree/mx-declare On my agenda: Emacs/LLVM; compile Emacs to LLVM bitcode, link with extensions written in arbitrary LLVM langauges. Right now, even my simplest attempts immediately segfault, so it is on hold for a while. http://github.com/jrockway/emacs (Once this works, I want to make ECL run on LLVM. Then we can write Emacs extensions in a real programming language. I hear Python compiles to LLVM now also, so that's another option. Eventually Perl will too.) HTTP::Engine refactoring; removing unnecessary metaclasses and adding support for requests inside preemptable coroutines: http://github.com/jrockway/http-engine (A threaded web server without the disadvantages
Read the rest
of threads.) Persistent application framework: http://github.com/jrockway/eventful (Generic foundation for web applications, TCP servers, IRC bots, ...) Persistent command-line application framework: http://github.com/jrockway/app-persistent (Make your slow-starting Perl application start up instantly.) Path::Class replacement based on Forest::Tree::Pure: http://github.com/jrockway/data-filesystem (I also have a binding to make a Data::Filesystem tree into a FUSE filesystem.) Once this yak shaving is out of the way, I have a few applications to write: Filesytem::Kindle - plug in your Kindle and see the books as unencrypted HTML (this one is going to be released anonymously, you didn't hear this from me, I was never here...) PleasureChicken - email / im / irc message consolidator, indexer, data extractor. The idea is to let the computer read your messages for you, so you don't have to. When you buy something from Amazon, it will stick the UPS delivery date in your calendar, and remind you that you just spent $300 on your Amex. When your boss IMs you at 3am with the word "broken", play a sound. etc., etc. This might be a hosted service one day, as well. http://github.com/jrockway/pleasurechicken Angerwhale 2 - A weblog for programmers that doesn't suck. http://github.com/jrockway/angerwhale-ng (See also: http://github.com/jrockway/angerwhale for the old version.) Unfortunately, my time is being taken up by menial $work_tasks, which distracts me enough to not get much done. But that should all be ending soon.
In Ask HN: What are you working on?

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.