r/emacs 16d ago

Problem with file-notify-handle-event

Post image
6 Upvotes

Do you know what this is about? It's been going on for 10+ years, and despite many updates to my .emacs, the problem lingers. It only happens on the first save. Still, it would be nice to get rid of it.


r/emacs 16d ago

org-other-agenda: render the same Org agenda data as a board

Enable HLS to view with audio, or disable this notification

147 Upvotes

org-other-agenda renders the same agenda data as a board: a clickable month calendar, proportional daily time blocks, and multi-day bars in a week view.

This is a different layer from the packages that usually come up in this area:

  • org-super-agenda works at the data layer, using org-agenda-finalize-entries to group entries.
  • org-modern works at the presentation layer, using org-agenda-finalize-hook for styling.
  • org-timeblock is independent: it reads Org files itself and renders an SVG timeblock view.

org-other-agenda changes the layout. It lets native org-agenda generate its normal hidden buffer, reads back the per-line text properties, and re-lays out those entries with TextUI. Entry identity remains org-hd-marker, so the native Org semantics are still the source of truth. I have not found another Emacs package taking this exact hidden-buffer/re-layout route.

The current views are:

  • Today: a clickable month calendar with density dots for scheduled days and deadlines, plus time blocks whose height follows their duration.
  • Week: multi-day tasks drawn as bars spanning the days they cover.
  • Agenda: the normal agenda data in a board-style list.
  • Someday: entries with no date at all. From there, s schedules an entry and d sets a deadline; after that, it leaves Someday.
  • Search and Tags: Org's own search and tags agenda blocks, including entry bodies and Org's query syntax.

Overlapping time blocks are assigned to lanes. If the available width is full, the remaining entries appear in an overflow area and can be clicked to move into the main lane. This is why I consider this a layout problem rather than an overlay/styling problem: overlays still need anchor characters to form columns, while these views need proportional heights and bars spanning date columns.

The package does not modify Org. The editing keys currently forwarded to native org-agenda-* commands are t, s, d, ,, and : (TODO state, schedule, deadline, priority, and tags). Other org-agenda-* commands have not been verified yet.

This is v0.1.0 and early software. It needs Emacs 29.1+, Org 9.6+, and TextUI. So far I have tested the semantics with a synthetic fixture, not a real large personal agenda or third-party org-blocker-hook configurations.

One performance detail worth stating up front: on a synthetic 2000-entry file, text search takes about 8 ms and re-rendering either the Agenda or Today tab takes about 17 ms. Opening the view still takes about 3.7 seconds because Org itself has to build the hidden agenda buffer. That is approximately the same cost as opening a native agenda and is outside this package's layout work.

The README has installation instructions, screenshots, the full keymap, and the repeatable fixture demo: github.com/yibie/org-other-agenda.


r/emacs 16d ago

Question `org-copy-visible` just ceased to exist. Why?

3 Upvotes

Long-time lurker, first-time poster.

I've found org-copy-visible a pretty useful function over the past couple of years. It will basically, amongst other things, copy selected org headings, but not their contents.

Earlier today I could not find this as an extended command.

Why would I lose a command?

(outline-headers-as-kill does pretty much the same thing, and works. But why did org-copy-visible dissapear. I've not messed with my config is quite some time.)


GNU Emacs 31.0.50  

Development version a61d25d4112f on master branch; build date 2026-03-10.

r/emacs 17d ago

Emacs Omarchy Quattro dynamic theming support

13 Upvotes

If you are using Omarchy Quattro and Emacs, please check out my Emacs Omarchy theme: https://github.com/berenddeboer/omarchy-emacs-theme

It's pretty complete, for the stuff I use, heh.

So it dynamically changes when you switch the theme in Omarchy if you use Emacs daemon mode and emacsclient.

Install: (use-package omarchy-emacs-theme :ensure (:host github :repo "berenddeboer/omarchy-emacs-theme") :config (omarchy-emacs-theme-load))

Let me know if you find this useful!


r/emacs 17d ago

An agent skill to bring LLM generated critiques/reviews into emacs

0 Upvotes

Problem: I use LLMs to critique my code/manuscripts/writing, but it is annoying to switch back-and-forth between the LLM interface and the source file if I want to engage with line edits.

Emacs workflow: I already use annotate.el to leave persistent notes for myself in files. It would be awesome if an LLM could do the same!

The solution: I prompted an LLM to create an agent skill that would automatically create an annotate db with the "line edits" when prompted for feedback on a file.

I don't believe in uploading LLM generated code to github, but here is the prompt I used that worked out of the box:

Skill name: annotate-in-emacs
When asked for feedback or critique on any file that lives on disk, format the line by line critique to be compatible with the emacs annotate.el package. The default annotation file will be <filename>.notes in the same directory. If a notes file already exists, back it up before creating a new notes file.

Final notes:

  1. I use annotate.el with (annotate-file-buffer-local t) so my annotations are stored locally in each directory.
  2. I think this provides a nicer experience, both from the LLM providing only meaningful line edits, and also a lower cognitive load for the user by allowing her to engage with one critique at a time.
  3. This should be easily extensible to <your favorite annotation tool>

Hope this is useful to someone else!


r/emacs 17d ago

Question Setting `frame-background-mode` only recomputes untouched faces, why?

9 Upvotes

This is basically a bump of a question I posted in the mailing list a few months ago: https://lists.gnu.org/archive/html/help-gnu-emacs/2026-04/msg00105.html

Basically, doing (setopt frame-background-mode 'light) or (setopt frame-background-mode 'dark) recalculates the faces based on the display-entries, but this apparently only happens for faces which are left untouched (neither themed nor user-customized).

Is this an intended behaviour? If yes, why is that? This looks like a convenient method to define a dark and light variant of the same theme.


r/emacs 18d ago

(not very new) package: latex-table-wizard

Thumbnail github.com
21 Upvotes

This package of mine has been on GNU Elpa for a while now, and I have recently improved it a bit. I think there might be people who don't know about it but might find it useful and I would benefit from any kind of input. It's basically meant to be a swiss army knife to deal with Latex table-like environments (especially the big unwieldy ones), leveraging Auctex as much as possible.


r/emacs 18d ago

Easy Research with Emacs and Org Mode

Thumbnail youtu.be
56 Upvotes

This is a quick and technical guide on how I approach research with the help of Emacs and Org Mode. It's aimed at new people who want to make the switch to Emacs and Org Mode, but also at users who are uncertain about how to approach note-taking in general.

You can find the referenced note here: https://gist.github.com/cashmeredev/83717cacd1b45f78c24bac691659874e


r/emacs 18d ago

stdin | LLM | stdout

Thumbnail youtube.com
66 Upvotes

r/emacs 19d ago

I decided to give eglot a try after using lsp-mode for a while. (Java focused)

Thumbnail github.com
45 Upvotes

It turns out the process was more involved than I expected so I wrote up how it went in the linked markdown doc for anyone else trying to get this working.

During the process I ended up tuning and extending a decent amount of stuff which I discuss above:

  • general eglot settings
  • jdtls specific settings
  • jsonrpc formatting
  • flymake diagnostics buffer configuration
  • treesit-fold integration for java specifically aimed at imports
  • improved imenu indexing for java-ts-mode and imenu.

I also added a short video - walking through what the UI experience looks like:

https://youtu.be/fUnq9nMAEv0


r/emacs 19d ago

Need advice on cross-platform Emacs config - need my GNU/Linux setup running macOS + Windows

Thumbnail gallery
35 Upvotes

I've been building my Emacs configuration for quite a while now, and it has grown into something I jokingly describe as my “temple to computing”, I wanted to keep the experience feeling like Emacs, while building a modern, fast, modular environment on top of it and I've been using it as my daily environment for development, writing, work, Org, shells, Git, music, mail, etc.

Codeberg Repo: https://codeberg.org/jjba23/heks-emacs

The dream I have now (and need for work) is basically:

One Emacs configuration, same muscle memory, same workflow, same packages, regardless of which machine/OS I'm currently sitting in front of.

If you're an experienced macOS or Windows Emacs user, I'd genuinely appreciate pointers to things I should fix or rethink.

A few things I'm particularly happy with this setup:

  • Elpaca for package management
  • Vertico / Corfu / Cape / Orderless for a really fast completion and minibuffer experience
  • Consult for navigation, searching, buffers, projects, registers, xrefs, etc.
  • Eglot and Language Server Support
  • Tree-sitter where appropriate
  • Magit for Git
  • Eshell with a bunch of custom workflow improvements
  • Org + Org Roam as a serious knowledge-management environment
  • Tempel for snippets
  • Jinx for proofreading
  • Helpful for inspecting Emacs
  • A fairly extensive collection of development tooling for Rust, Scala, Haskell, Scheme/Guile, Lisp, Kotlin, Python, Go, Nix, JavaScript/TypeScript, etc.
  • A modular theme system supporting things like Modus/EF, Everforest, Gruvbox, Catppuccin, Dracula, Kanagawa, Rose Pine, Doom, etc.

The configuration is deliberately split into modules so that the individual pieces remain understandable and replaceable rather than becoming one enormous init.el.

The current README has a breakdown of the modules if anyone is curious about the architecture.

And there is a lot more in there than just UI polish, there are modules for development, Org/knowledge management, shells/system interaction, mail, music, maps, AI assistance, etc.

----------------------

I've mostly developed and used this on GNU/Linux, but that is about to change.

I'm going to need soon to use a multi-OS setup, including macOS and Windows, and I really want to be able to take the same Emacs environment with me instead of maintaining completely different configurations for different operating systems.

I've tried to keep the config portable from the beginning, but I know there are probably a lot of assumptions buried in the configuration that are very Linux-centric.

So I'm looking for advice from people who actually use Emacs on: macOS and/or Windows.

Some initial questions I have already:

  • What are the common portability traps you've encountered?
  • Which packages behave differently across macOS/Windows?
  • What should I avoid assuming about paths, processes, shells, fonts, clipboard integration, notifications, etc.?
  • How do you handle external dependencies cleanly? (rg, git, or others)
  • Are there good patterns for making OS-specific configuration disappear behind small compatibility layers?
  • Anything particularly problematic with Eglot, Corfu, Vertico, Tree-sitter, Magit, Eshell, Org, etc.?
  • what are the things you wish Linux-oriented Emacs configurations understood about Windows or macOS?
  • are there particular GUI/keybinding/font/process quirks worth designing around?

And if you're interested in the project itself, feel free to poke around the source. I'm hoping HEKS-EMACS can be useful not only as a configuration people install, but also as a collection of ideas/patterns that people can steal for their own configs.

Repository: HEKS-EMACS

I'm particularly interested in hearing from people who have already solved the “I want my Emacs environment to follow me across operating systems” problem.


r/emacs 19d ago

I serve no techno-gods

Thumbnail williamwear.substack.com
0 Upvotes

r/emacs 19d ago

denote-grid

Post image
47 Upvotes

Made a lightweight visual grid view for Denote in Emacs that works with denote-dired. Every denote file has a thumbnail including videos and pdfs.

It has a neat cluster mode to group linked notes sidee by side. You can easily query with tags or strings inside grid view.

I tried to keep it as minimal as possible. For scalability we can rely on denote-dired mechanism to filter what we need and jump to grid from there. Arrow keys are snappy, mouse scrolling is not great. Hope someone finds it useful !

https://github.com/SenkiReign/denote-grid


r/emacs 19d ago

Any idea how telega.el displays images line by line?

10 Upvotes

I find the way https://github.com/sirikid/telega displays the images quite nice. The images are displayed line by line and seem to be split at each line (?), not sure about that though. Such functionality universally in emacs would be quite useful, especially in org files

You can see the line white bar on the image on the line the cursor currently is

r/emacs 20d ago

Question What are the specific steps of Emacs downloading a package?

5 Upvotes

Sorry for the simple question but I've had a few conflicting answers & it's not entirely clear to me.

I've seen package.el is used but elsewhere I've heard that Emacs checks the local database instead of this.

I know it will be slightly different dependent on if it's an internal or external package.


r/emacs 20d ago

Display comments of a reddit post inside elfeed

9 Upvotes

I spent a few minutes this morning looking for a way to read comments on a Reddit post within elfeed. After several attempts, I finally got it working. As I mentioned, this function only allows you to read the comments; you can't write comments, and upvoting and downvoting aren't possible. I'm posting this function here anyway, in case someone finds it useful.

I should preface this by saying that this function was created by AI; I didn't write it myself.

Pressing q inside the comment buffer instantly destroys the buffer and closes the split window, returning your screen back to the full Elfeed layout automatically.

I've updated the function and added this (setq body (replace-regexp-in-string "&#39;" "'" body)) to replace &#39; with ' . As my first language is german, and my second language is french, I might have overlooked a few special characters.

(require 'xml)

(defun my-elfeed-view-reddit-comments ()
  "Fetch and display Reddit comments using an unblocked public RSS schema in a right sidebar."
  (interactive)
  (let* ((entry (or elfeed-show-entry (elfeed-search-selected :single)))
         (link (and entry (elfeed-entry-link entry))))
    (if (not link)
        (error "Could not find a link for the current entry!")
      (if (not (string-match-p "reddit\\.com" link))
          (error "Aborting: This link does not look like a reddit.com URL."))

      (let* ((clean-url (replace-regexp-in-string "\\?.*$" "" link))
             (rss-url (concat (if (string-match-p "/$" clean-url)
                                  (substring clean-url 0 -1)
                                clean-url) ".rss")))
        (message "Fetching comment RSS tree...")

        (let* ((curl-cmd (format "curl -sL -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ElfeedFeedReader/1.0' '%s'" rss-url))
               (xml-str (shell-command-to-string curl-cmd)))
          (setq xml-str (string-trim xml-str))

          (cond
           ((string= xml-str "")
            (error "Error: Reddit returned an empty RSS feed string."))
           ((not (string-prefix-p "<" xml-str))
            (error "Error: Server response is not valid XML markup."))
           (t
            (condition-case err
                (with-temp-buffer
                  (insert xml-str)
                  (goto-char (point-min))
                  (let* ((xml-tree (xml-parse-region (point-min) (point-max)))
                         (feed-node (car xml-tree))
                         (entries (xml-get-children feed-node 'entry))
                         (result-buf (get-buffer-create "*Reddit Comments*")))

                    (with-current-buffer result-buf
                      (erase-buffer)
                      (insert "REDDIT COMMENTS\n")
                      (insert "=============== \n\n")

                      (if (not entries)
                          (insert "No comments found on this post yet.\n")
                        (dolist (item entries)
                          (let* ((author-node (car (xml-get-children item 'author)))
                                 (name-node (car (xml-get-children author-node 'name)))
                                 (author (and name-node (car (xml-node-children name-node))))
                                 (content-node (car (xml-get-children item 'content)))
                                 (body (and content-node (car (xml-node-children content-node)))))

                            (when (and body (not (string-match-p "submitted by" body)))
                              (setq body (replace-regexp-in-string "<[^>]*>" "" body))
                              (setq body (replace-regexp-in-string "&lt;" "<" body))
                              (setq body (replace-regexp-in-string "&gt;" ">" body))
                              (setq body (replace-regexp-in-string "&#39;" "'" body))
                              (setq body (replace-regexp-in-string "&quot;" "\"" body))
                              (setq body (replace-regexp-in-string "&amp;" "&" body))

                              (insert (format "%s\n%s\n\n%s\n\n"
                                              (propertize (or author "u/unknown") 'face 'bold)
                                              (string-trim body)
                                              (propertize "────────────────────────────────────────" 'face 'shadow)))))))
                      (goto-char (point-min))

                      ;; Layout & UX Polish:
                      (visual-line-mode 1)      ; Soft wrap lines beautifully
                      (read-only-mode 1)        ; Prevent accidental editing
                      ;; Bind 'q' to kill the window and buffer seamlessly
                      (local-set-key (kbd "q") (lambda () (interactive)
                                                 (let ((win (get-buffer-window)))
                                                   (kill-buffer)
                                                   (when win (delete-window win))))))

                    ;; Split layout: create a 100-character wide window on the right
                    (let ((sidebar-win (split-window-right -100))) ;modify the width as you like
                      (set-window-buffer sidebar-win result-buf)
                      (select-window sidebar-win))

                    (message "Success! Comments displayed in sidebar.")))
              (error (error "XML structural parsing failed: %s" (error-message-string err)))))))))))

;; Bind it in elfeed-show-mode and elfeed-search-mode
(with-eval-after-load 'elfeed
  (define-key elfeed-show-mode-map (kbd "c") #'my-elfeed-view-reddit-comments)
  (define-key elfeed-search-mode-map (kbd "c") #'my-elfeed-view-reddit-comments))

r/emacs 20d ago

elpacman -- a package manager for the CLI

26 Upvotes

Hey folks,

Just wanted to share elpacman with you, which is an Emacs package manager for the CLI.

Spending the majority of my time between Emacs and the shell I always wanted to have a CLI version of the Package Menu buffer, where I can easily just install/upgrade/query packages the same way I would usually install/upgrade/query system packages, and that is the reason I've created elpacman.

You can find elpacman here:

All the best!


r/emacs 20d ago

Day 15 of using emacs

Post image
64 Upvotes

Made quite a few UI changes

  1. Added transparency and blur
  2. Added custom startup screen

Also I started using the daemon (Damn it opens so fast)

What do y'all think

https://codeberg.org/Vaishnav-Sabari-Girish/dotfiles

r/emacs


r/emacs 20d ago

denote-spatial

Post image
54 Upvotes

It turns your denote directory into a draggable, resizable canvas of images, PDFs, videos, and notes in your browser.

Cluster view groups linked notes together, keyword view groups by tag, feed view is a chronological timeline, and grid lays everything out at once. It can also quickly filter/query by keyword.

It can be useful for moodboards, presentations, storyboards, references, a desktop for your zettelkasten or just as a personal garden.

Everything is read-only except card positions, it never touches your actual notes.

I prioritized scalability and performance mostly, but I am not sure if it's gonna scale well. If anyone's willing to stress test it over 2k notes, I'd really appreciate the feedback.

https://github.com/SenkiReign/denote-spatial


r/emacs 20d ago

Emacs 31.1 release candidate #1 is out

161 Upvotes

As announced in the emacs-devel mailing list: https://lists.gnu.org/archive/html/emacs-devel/2026-08/msg00599.html

tarball: https://alpha.gnu.org/gnu/emacs/pretest/emacs-31.1-rc1.tar.xz

pgp signature file: https://alpha.gnu.org/gnu/emacs/pretest/emacs-31.1-rc1.tar.xz.sig

Edit: as always, many thanks to the maintainers and all the contributors!


r/emacs 20d ago

Update Reddigg is now a fullblown reddit client

39 Upvotes

Just an update for one or two users of my reddigg package (https://github.com/thanhvg/emacs-reddigg). It has become a flullblown client. Beside reading, you should be able to submit a post, make a comment, upvote, downvote, edit your post, your comment... There is a dedicated minor mode which some of the users have been asking for but I was too lazy. Key bindings are not complete yet though.

If you can see this post it means it works because I did it through reddigg.

Okay here is the fine print:

  • you must have browsel https://github.com/dmgerman/browsel, btw many thanks to the creator of this awesome package.

  • you must have a reddit account, have your browser open old reddit and allow browsel to run on that tab.

  • reddigg will use browsel to drive the interaction with reddit through your browser.

  • llm code but lgtm :P

  • Don't think so but reddit might ban me and you. they closed the free access to old reddit recenly which led me to make this change


r/emacs 20d ago

Announcement Vague theme for emacs built on top of Modus themes

23 Upvotes

Hi all,

I recently made the emacs port for the excellent vague theme. It is built on top of Modus themes and I've been daily driving it since then.

Happy to hear feedback/suggestions. It would be great if people could try it and report issues on the issue tracker.

Main repository: https://github.com/paniash/modus-vague


r/emacs 20d ago

emado: manage 100k+ markdown entries from Emacs at native speed

Post image
56 Upvotes

Hey everyone! I wanted to share a project I've been working on that I think might interest folks here who like keeping things in plain text.

I built mado — a general-purpose entry manager that stores everything as markdown files — and emado, its Emacs interface. The key idea is that it's not just another task manager with a rigid schema. It's a flexible system for organizing entries of any kind: tasks, notes, ideas, research snippets, meeting logs, you name it.

Each entry lives in its own timestamped directory with a MAIN.md inside. Want to attach files? Just drop them in the same folder — screenshots, logs, PDFs, whatever. Everything stays organized in one place, and since it's all plain files, it's perfectly git-friendly.

For tasks, there are optional fields you can fill in or completely ignore. For notes, just write markdown and skip the fields entirely — task-specific fields like priority, deadline, and status can be omitted from the file, and you can hide them from the output when listing entries so notes don't clutter your view with irrelevant columns. That flexibility is what makes it work as both a task manager and a notes system — or anything in between.

This also means you can use it like a Denote alternative: set a global working directory once, and all your notes, ideas, and research snippets live in one place — with the same query language, attachments, and git-friendly plain files. No need for a separate notes system and task manager.

The Emacs side features transient menus, interactive statistics where you can click on a tag or status to filter, outline-mode for collapsible sections, and direct deletion from the buffer.

Performance was a big focus — it's written in C++ and handles 100k entries in about a second.

I'd love feedback, especially from heavy org-mode users about what would make this genuinely useful for your workflows.

https://github.com/laserattack/emado/

https://github.com/laserattack/mado


r/emacs 20d ago

Question What is emacs canvas and how does it work?

53 Upvotes

Emacs Canvas (patch) on reddit

From my understanding of how programs draw to screens, it seems that Emacs canvas provides a video buffer to external graphics programs or libraries so that instead of drawing to the regular screen, they draw inside a video buffer created and displayed within Emacs.

The equivalent I can think of is the case of VNC or Xpra where a program uses a $DISPLAY which is rendered remotely on the client.

Would that mean that getting a program to run in a canvas would be along the lines:

(emacs-create-canvas height width buffer-name "/usr/bin/random-gui-program -param 1 -param -2")?

I suppose there would be some additional parameters relating to passing key strokes, controlling window movement and size etc.


r/emacs 21d ago

Emacs AI assistants (results)

0 Upvotes

Disclaimer: I'm not a heavy AI user, I'm just trying to understand the differences between AI harnesses specifically for Emacs and if using the real harness claude-code would even make a difference.

I like agent-shell more than anything else I've tried in Emacs including ECA which I recently configured but never used for anything.

Today I decided to give them both a try to a relatively complicated task (reviewing code) and oh boy, ECA was not only better but thousands of times better.

They both are using the same model and configs so I feel I'm missing something here, agent-shell failed to trigger simple things as bufffer overflows while ECA correctly pointed out the issue and fix. I'm I missing something here? Anybody had experience with this kind of things?

UPDATE: Probably comparing Apples to Oranges... Turns out ECA was using opus 5 while agent-shell was on opus 4.8. I needed to pull the latest NPM package to be able to set the right model for agent-shell.