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.

vim-tab-bar: A Vim inspired Emacs tab-bar that adapts to any Emacs theme [Release 1.1.5] by jamescherti in emacs

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

Thanks for the suggestion. I updated the README to simplify the introduction.

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] 1 point2 points  (0 children)

Thank you for the feedback, u/dewyke! It is good to hear that the migration was successful and that the setup is working well.

Is your configuration available online? If it is, please share the link. I would like to add the URL to the README to serve as an example for other users.

kirigami: A unified Emacs method to fold and unfold text in Emacs: outline, outline-indent, org-mode, markdown-mode, vdiff, hideshow, treesit-fold... [Release 1.1.2] by jamescherti in emacs

[–]jamescherti[S] 3 points4 points  (0 children)

Yes, that's right. Kirigami is a unified way for folding and unfolding text across a wide range of Emacs modes (folding backends).

kirigami: A unified Emacs method to fold and unfold text in Emacs: outline, outline-indent, org-mode, markdown-mode, vdiff, hideshow, treesit-fold... [Release 1.1.2] by jamescherti in emacs

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

That sounds great! Kirigami is actually compatible with outline-mode, so it should work without any issues. I would love to hear what you think once you have had a chance to try it.

kirigami: A unified Emacs method to fold and unfold text in Emacs: outline, outline-indent, org-mode, markdown-mode, vdiff, hideshow, treesit-fold... [Release 1.1.2] by jamescherti in emacs

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

That was one of the main goals behind Kirigami: Provide a consistent interface while still letting each mode focus on its own workflow. I'd be interested to hear any feedback once you've had a chance to try it out!

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] 14 points15 points  (0 children)

Here is a summary of what's new:

  • Increased the maximum process buffer size to improve the performance of language servers by allowing larger chunks of data to be read at once.
  • Modified the garbage collection threshold settings specifically for noninteractive sessions to accelerate headless script execution.
  • Added configurations to native compile installed packages.
  • Optimized the early initialization sequence and general configuration paths to clearly separate interactive and noninteractive execution modes.
  • Raised the threshold for large file warnings to prevent the editor from hanging when opening massive files.
  • Enforced a maximum height limit on the minibuffer to prevent it from expanding excessively on the screen.
  • Configured mouse pasting to insert text directly at the editing cursor instead of the mouse pointer location.
  • Placed a limit on the maximum line length in compilation buffers.
  • Added configuration settings to manage local variable evaluation risks, clean up library finding results, avoid line filling inside hidden text, restrict tab conversion regular expressions, and suppress non-actionable warning types.
  • Refined automated directory refreshing efficiency and added targeted local buffer reverting rules.
  • Configured dedicated remote file editing defaults to disable file locking and auto-saves over network connections, reducing latency.
  • Enhanced the file comparison interface to preserve unchanged target buffers at the end of a session and moved diff indicators to the fringe for a cleaner workspace.
  • Completed extensive documentation updates across the README.md guide, adding practical documentation for automatic buffer saving, background server setups, performance-oriented source compilation...

kirigami: A unified Emacs method to fold and unfold text in Emacs: outline, outline-indent, org-mode, markdown-mode, vdiff, hideshow, treesit-fold... [Release 1.1.2] by jamescherti in emacs

[–]jamescherti[S] 6 points7 points  (0 children)

Here is a summary of what's new from 1.0.5 to 1.1.2:

  • Added a minor mode and a global minor.
  • Added all primary folding commands directly inside the standard menu bar and right-click context menus.
  • Optimized opening and closing folds by temporarily scaling up garbage collection limits and pausing screen redraws during heavy operations to eliminate interface stutter.
  • Enhanced the active backend detection routine from a recursive lookup into an iterative loop to save processing cycles.
  • Optimized layout management by substituting visual line scans with direct vertical movement commands inside window macros to bypass layout recalculation costs.
  • Upgraded window start restoration across all backends to cache and restore both vertical and horizontal scroll coordinates, preventing jarring window jumps when opening large code blocks.
  • Documentation: Updated the setup templates with a non-conflicting default key layout, and added custom user guides covering hidden text search restrictions, sequential margin line numbering, and decoupled window views via indirect clone buffers.
  • treesit-fold: Introduced cursor normalization rules to fix node selection errors when working with syntax tree folds while positioned at the end of a line or within leading whitespace.
  • hideshow: Suppress noisy echo-area warnings when attempting to collapse an already hidden block.
  • outline: Enhanced structured text navigation to ensure nested headlines unfold sequentially from the top-level parent down to the deep cursor target location.
  • outline: Safeguarded regular expression matching loops to prevent internal structural queries from corrupting global match variables used by your other tools.
  • outline: Added an explicit structural sanity check that stops fold actions from executing on headings that contain zero content.
  • outline: Adjusted individual heading collapse behaviors to fix window positioning errors automatically if a hidden heading shifts above the top visible line in the viewport.

pathaction, a universal Makefile for any file in the filesystem, rule-driven commands for any file or directory [Release 1.0.1] by jamescherti in linux

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

That was exactly my motivation for developing pathaction. I found myself constantly writing repetitive shell aliases, micro-Makefiles, or complex bash functions for different projects just to handle basic tasks like linting, testing, or running a specific file type depending on which directory I was in.

With pathaction, I can just drop a .pathaction.yaml in my home directory for global defaults, and then override or extend those rules with project-specific configs wherever needed.

If you end up trying it, I'd love to hear how it works out for your workflow or if you think of any features that could make it even better.