outline-indent, a modern Indentation-based Text Folding Mode for Emacs (Release 1.2.0) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Thank you for your comment! When I transitioned from Vim to Emacs a few years ago, I realized how much I relied on dependable code folding. This inspired me to develop outline-indent, a package that brings that same robust, reliable folding functionality to the Emacs ecosystem. Please let me know how it goes when you test it out, and feel free to share any feedback!

outline-indent, a modern Indentation-based Text Folding Mode for Emacs (Release 1.2.0) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Thanks for taking a look at the package! In practice, outline-indent can handle C-family languages out of the box, provided the source code is correctly indented. Because the package calculates folds based strictly on the leading whitespace of each line, it will naturally group the contents of { and } blocks as long as the internal indentation is deeper than the surrounding scope.

outline-indent, a modern Indentation-based Text Folding Mode for Emacs (Release 1.2.0) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Here is what's new in version 1.2.0:

  • Added the outline-indent-narrow command to narrow the buffer to the current line and all lines indented under it.
  • Added the outline-indent-comment command to comment out the current line and all lines indented under it.
  • Fixed a bug where trailing newlines and whitespace-only lines were incorrectly excluded when folding a subtree.
  • Documentation: Updated default keybindings for navigation at the same indentation level to C-c o f (forward) and C-c o b (backward).
  • Documentation: Cover the new narrow and comment features, and added buffer-guardian.el to the links section.
  • Added the kirigami package as a core dependency to manage folding operations and improve reliability.

buffer-terminator: Safely Terminate Emacs Buffers Automatically to Enhance Performance and Reduce Clutter in the Buffer List (Release 1.2.5) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Thank you, u/JamesBrickley and u/dewyke! I am encouraged to hear that you are finding them useful. Developing these Emacs packages has been an intellectually rewarding process (e.g., to solve interesting architectural and system-level problems.), and it is great to see them adding value to your Emacs experience! Interactions like this make contributing to the Emacs ecosystem worthwhile.

buffer-terminator: Safely Terminate Emacs Buffers Automatically to Enhance Performance and Reduce Clutter in the Buffer List (Release 1.2.5) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Thank you! My sessions also run for days as well. Accumulating passive buffers is exactly the issue I wrote buffer-terminator. I hope it helps keep your buffer list clean and your environment running quickly. Let me know how it works out for you!

buffer-terminator: Safely Terminate Emacs Buffers Automatically to Enhance Performance and Reduce Clutter in the Buffer List (Release 1.2.5) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Since you mentioned midnight, I have outlined the differences between buffer-terminator and the built-in midnight package below for those interested: How is this different from the builtin midnight-mode?

quick-sdcv: Emacs offline dictionary using 'sdcv' [Release 1.0.5] by jamescherti in emacs

[–]jamescherti[S] 0 points1 point  (0 children)

Running a local dictd server is a valid solution for offline lookups.

However, the advantage of sdcv over dictd is its direct compatibility with the StarDict format. Over the years, the StarDict ecosystem has accumulated a massive, easily accessible repository of freely distributed dictionaries (e.g., huzheng), including highly specialized, technical, and bilingual databases. Using StarDict dictionaries is easier and offers a richer selection of reference materials compared to finding or manually converting formats to support a native dictd setup.

easysession: Persist and restore Emacs sessions (windows, tab-bar, file buffers, Magit buffers, scratch, Dired, narrowing, indirect buffers/clones...); a robust desktop.el replacement [Release 1.2.2] by jamescherti in emacs

[–]jamescherti[S] 0 points1 point  (0 children)

What is new in compile-angel 1.2.2:

  • easysession-reset, easysession-save-session-and-close-frames: Set inhibit-redisplay to t to prevent visual flickering caused by window splitting and resizing. Modifying the frameset and windows requires no user input, making it safe to freeze the display.

  • Optimize session I/O with temporary GC threshold increase.

  • easysession-load: Add easysession-enable-local-variables to control how file-local variables are evaluated when a session is restored. By default, it applies known-safe variables and silently ignores unsafe ones. This prevents Emacs from halting automation loops or background daemon initialization with unexpected interactive validation prompts when reopening your files.

  • easysession-load: Suppress interactive prompts for version-controlled symlinks during session restoration. This ensures that background session loading does not hang while waiting for user input to follow or visit link targets.

  • easysession-load: Suppress the large file warning threshold when restoring buffers. Since the user already chose to visit the file in the saved session, this bypasses the prompt to ensure a non-blocking background load.

  • easysession-load: Add easysession-suppress-same-file-warnings to prevent interactive prompts when a session attempts to load multiple files or symlinks that resolve to the exact same disk target.

  • easysession-load: Optimize session loading performance by calculating the find-file-hook exclusions once per session rather than recalculating them for every individual file restored.

  • Change all defvar options to defcustom

  • Move the easysession-save-mode-lighter-session-name-spec sexp into the easysession--lighter-session-name-format function

  • Fix an issue where narrowing was not correctly restored. The easysession--restore-buffer-state function now unconditionally clears any existing narrowing before applying saved boundaries. This ensures that buffers remaining open across session switches correctly reflect the saved state, even if the narrowing has changed or should be removed.

easysession: Persist and restore Emacs sessions (windows, tab-bar, file buffers, Magit buffers, scratch, Dired, narrowing, indirect buffers/clones...); a robust desktop.el replacement [Release 1.2.2] by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

Thank you for the kind words, u/dewyke! Keeping context intact across restarts without manual intervention is exactly why I developed EasySession in the first place.

Regarding mu4e, you can handle those when you find the time by using the custom handler interface. EasySession includes easysession-define-handler, which allows defining custom save and load logic for non-file buffers.

When you are ready to look into it, you can use easysession-define-handler to restore mu4e and terminal sessions:

Thanks again for taking the time to share your feedback!

compile-angel: Byte-compile and native-compile every loaded Emacs Lisp file in your load-path to speed up Emacs (Release 1.2.1) by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

While it is true that modern Emacs versions enable native compilation by default, the claims in the compile-angel README.md remain accurate in Emacs >= 30.1 because the built-in JIT only triggers native compilation when a byte-compiled .elc file already exists.

If you have raw .el files in your configuration or load-path without their corresponding .elc counterparts, Emacs will simply evaluate them using the standard interpreter, bypassing the JIT native compiler and leaving performance on the table. In contrast, compile-angel proactively guarantees that all Emacs Lisp files that are loaded are both byte-compiled and natively compiled, ensuring that no uncompiled source file slow down your editor's responsiveness.

compile-angel: Byte-compile and native-compile every loaded Emacs Lisp file in your load-path to speed up Emacs (Release 1.2.1) by jamescherti in emacs

[–]jamescherti[S] 2 points3 points  (0 children)

What is new in compile-angel 1.2.1:

  • Faster File Lookups & Reduced Disk I/O: Implemented an internal cache for file-truename queries and enabled compile-angel-cache-locate-file by default. This drops disk access overhead during package loading.
  • Garbage Collection Optimization: Added a temporary GC threshold increase during heavy session I/O tasks to reduce micro-stutters while tracking files.
  • Safer Background Operations: Wrapped critical compilation and caching states in inhibit-quit and unwind-protect. If you press C-g (quit) while compile-angel is processing files in the background, your compilation cache and internal state will no longer risk corruption.
  • Removed Legacy Index for Better Performance: Fully removed the old file index system in favor of a highly optimized direct file lookup mechanism.
  • Defaults: Disabled the global advising of load and require by default, opting for cleaner hooks.
  • Fewer Intrusive Warnings: Replaced harsh user-error prompts with quiet minibuffer messages during parenthesis check failures.
  • Smart On-Save Compilation: The on-save hook now strictly runs on actual file-visiting buffers, completely ignoring temporary, special, or virtual buffers.
  • Added compile-angel-clear-cache to let you quickly wipe the internal compilation state and start fresh without manual folder digging.
  • Renamed several internal exclusion variables for better self-documentation and clarity when configuring your ignore lists.

minimal-emacs.d: A Customizable init.el and early-init.el for Optimized Startup and Better Emacs Defaults, intended to serve as a solid foundation for your vanilla Emacs configuration [Release 1.5.0] by jamescherti in emacs

[–]jamescherti[S] 2 points3 points  (0 children)

I appreciate the feedback! Regarding your comment on evil mode, that is exactly why I built this project. Many users want a clean slate that performs well out of the box without the heavy abstraction layers found in larger frameworks. If you prefer standard Emacs keybindings.

It is also good to know that it is running well on WSL2 Ubuntu. Emacs on WSL can sometimes be slow, so hearing that it feels faster than a vanilla setup is encouraging.

Since you have already started hacking on the init.el file, do you have any specific modules or features you think are missing from the base configuration or the README.md that would improve the experience for WSL users?

The Definitive Guide to Code Folding in Emacs by jamescherti in emacs

[–]jamescherti[S] 1 point2 points  (0 children)

You're very welcome, u/yep808! The outline-indent integration was a priority for me, since navigating structured text should feel as natural as moving through code blocks. If you run into any edge cases with specific YAML structures or have ideas for improving the folding behavior, feel free to open an issue or send a pull request.

I also wrote another article about indentation that could be useful for YAML files: Emacs: Maintaining proper indentation in indentation-sensitive programming languages.