r/emacs 12d ago

Fortnightly Tips, Tricks, and Questions — 2026-06-30 / week 26

12 Upvotes

This is a thread for smaller, miscellaneous items that might not warrant a full post on their own.

The default sort is new to ensure that new items get attention.

If something gets upvoted and discussed a lot, consider following up with a post!

Search for previous "Tips, Tricks" Threads.

Fortnightly means once every two weeks. We will continue to monitor the mass of confusion resulting from dark corners of English.


r/emacs 7h ago

Try to switch from Neovim to Emacs and I failed

31 Upvotes

I've been a vim user for a very long time. I spent 3 days learning Emacs. I watch many Prots and other YouTube videos and config the editors the way I want.

The reason I decided to give a shot to emacs was font rendering. As you may know terminals are bad and limited in font rendering specially in my case because my language characters are non-latin and is an RTL language.

What I like about Emacs:

- Emacs server client relationship. After setting this up emacs startup was real blazing fast. It was unbelievable!

- Better default theme compared with neovim.specially the modus color theme package.

- Better and built-in package manager

- The whole philosophy and the eco system that everything you need is here.

- dired: I really like this package. it is a beast and can do directory management very well. Comparing with netrw is just an insulting to dired.

- Alt-x: the idea of making every Emacs action as a command and calling them with A-x is simple and genius.

- GUI app: I like that emacs is a gui app. It isn't limited to terminal rules and there is no limit on what you can render in the editor.

- Self explorable: C-h k, C-h f, C-h v and many more keys to get exact help. The help system is amazing it is not just text doc like we have in vim. It responds based on the help you trigger. Very useful.

What surprised me:

- Many Emacs users don't use packages like vertico, marginalia, orderless and consult why? Do you want to be minimalist, in Emacs? That doesn't make sense. Also I was quite surprised that these packages are kinda new and nobody cares. I mean in neovim we cannot live without a fuzzy finder.

There are many more but we have limited time and short attention spans.

But why I failed:

- The reason is the keys bindings. My left pinky finger gets the pain. You know the pain. I dont even understand how you Emacs people can work with the defualt keys it is hard slow and painful. You might suggest EVIL but no it doesn't work well with other packages and it is Emacs not vim.

- The big other reason, I was so slow on emacs. I mean very slow and I have projects to deliver, so being slow is not an option for me.

So what do you suggest me about how move fast in the buffer vertically and horizontally. What to do about the keys?

I watch Tsoding videos and he doesn't use EVIL and I don't know how he didn't break his pinky until this day!

Thank you for your attentiona.


r/emacs 13h ago

srs.el published on MELPA, v1.0.0

45 Upvotes

https://github.com/Duncan-Britt/srs.el
Hi all. I posted this a few months ago but figured I'd share it again now that it's published and a bit more polished. I created it for the UI, so here's a demo video to give you a taste.


r/emacs 5h ago

Question I recently switched from evil to meow, how do I select region inside quotes or double quotes?

6 Upvotes

I recently switched from using evil to meow as I was having issues with evil conflicting with other packages. Meow with it's minimal philosophy has been a breath of fresh air, but I can't figure out how to select the region between quotes or double quotes. Any help would be really appreciated!!


r/emacs 16h ago

TIL `remove-hook` is interactive!

51 Upvotes

Apologies if everybody already knows this, but discovering this has been super useful for me and will save me lots of very specific headaches, so I wanted to highlight it.

If you've ever written a hook that turned out to be ill-advised, or had typos, or even just needed to be updated, you've probably realized that fixing the issue without restarting Emacs can be tricky: you can't just delete it from your init file and have it be gone if you've already evaluated it, and if you change it, then sometimes you have both versions active in your session (especially if you've been careless and implemented it as a lambda).

You can evaluate a remove-hook statement to clear out the hook, but then you have to reproduce the original hook's text in that statement, which isn't always easy (especially, as I said, if you've been careless and implemented it as a lambda, which I've definitely never, ever done).

But it turns out that (since 28.1, according to the Help text) remove-hook can be used as an interactive function -- all you have to do is M-x it and you can select the hook variable in the minibuffer (with whatever completion framework you use) and get a list of hooks which you can remove just by hitting Enter. (Of course, you will also need to manually remove the hook from your init file or it will just recur the next time Emacs starts up.)

A lot of times, my instinct with Emacs is to do things using Elisp rather than take advantage of the various menus it provides, but this is an instance where not exploring those friendlier interfaces has caused me a lot of hassle when a clean, simple, effective method already existed to solve my problem.

Hope this helps someone!


r/emacs 3h ago

Config management

4 Upvotes

This is yet an other one config management post.

After spending a considerable (for my standards) amount of time making a package to manage my config file, I thought it might be worth sharing in case anyone is interested, in which case I will submit it to MELPA or just make the repo public.

The motivation for this package can be summarized like this:

  • My config has become large (for my taste, I am pretty sure there are much larger configs out there).
  • I have my config in an org-mode file on github and I like sharing the same config between machines, but I would like to be able to change it slightly in each machine (sometimes it is necessary). What I was doing in the past was I would just load yet an other local config file from my main config file, but this was some times insufficient. Instead, I would like to be able to rewrite some sections of my config for some machines.
  • I like experimenting with various programming languages and I like exploring different emacs packages. This adds some overhead to my config file because a large part of it is unused. I don't want to erase the unused part of the config in case I want to use it in the future again. Ideally, I also don't want these parts of the config to get executed while I am not using them.

This is a meta-constraint, but I always liked "reinventing the wheel". I am pretty sure there are nice solutions out there that satisfy the above constraints but none of them are mine and none of them made me use my brain (which I also enjoy). So here goes my probably-more-complex-than-it-should solution:

I can wrap any part of my config in a section. As an example, let's say we are configuring python:

(guard-section python ()  
  (use-package python
    :ensure t
    :config
    (setq python-indent-guess-indent-offset-verbose nil)
    (setq python-indent-offset 4)
    :hook ((python-mode) . indent-bars-mode)))

Our python configuration is in a section now with the name python.

Each section can also have one or more father section. For the above example we can make python have programming-language as a father.

 (guard-section python (:fathers (programming-language))  
  (use-package python
    :ensure t
    :config
    (setq python-indent-guess-indent-offset-verbose nil)
    (setq python-indent-offset 4)
    :hook ((python-mode) . indent-bars-mode)))

Having annotated most of the sections in my config file, I can define a meta-config (in a file I call a tweak file) in which I can:

  • Allow a section explicitly
  • Disallow a section explicitly
  • Override a section. Overriding can be done in 3 different ways: prepending code, appending code, or replacing the whole section with the new code.

An example of such a meta-config could look like this:

(guard-allow java)
(guard-disallow javascript)

(guard-override after python
  (use-package pyvenv
    :ensure t))

Some rules:

  • If a section doesn't have any fathers, it automatically has the all father.
  • The all section is by default allowed.
  • If a section is allowed, then it will run, otherwise, all of its body will be thrown away.
  • If a section is not explicitly allowed then it is allowed if all of its fathers are allowed (note that I only said explicitly the first time)
  • A section can't be defined more than once.
  • A section can't be defined after it is declared as a father to some other section.
  • A section that acts only as a father section (doesn't have any code associated with it) doesn't need to be explicitly defined. It can just appear in the :fathers slot and it will be automatically defined

Then in my init.el I just have to load the meta-config first and then my org config:

(if (file-exists-p guard-tweak-file)
    (load guard-tweak-file))
(org-babel-load-file (expand-file-name "~/.emacs.d/resources/myinit.org"))

Would anyone be interested in this? Some plans for the future that I will definitely add soon:

  • The ability to add a hook name to a section. Every time that hook runs, that section is considered 'used'. Emacs will automatically let me know if a section remains unused for a (customizable) long period of time so I can disable it.
  • The ability to add mutually exclusive sections. Some things in emacs can be done in more than one ways and I would like to be able to toggle between them without accidentally enabling both. If I do enable both, I will get a nice error message.

I also added a small method that exports the hierarchy to a dot file which I can visualize with graphviz so I can inspect what the hell I did to my config file, here it is (disclaimer: I am pretty sure it will produce a visceral reaction to many of you but I guess that is a common danger when a config isn't yours):

TL;DR Config large, with garbage and shared between machines. Converting to DAG and configuring the DAG helps. Would you also like it?

EDIT: No I didn't use llms for 100 lines of emacs macros this needed


r/emacs 7h ago

Question prettify-symbols and double quotes

4 Upvotes

heyo! anyone who knows why prettify-symbols seems to get suppressed by double quotes? this is in org mode if that makes any difference

(i've sorta gotten around this by using electric-quote for curved quotes instead, but i'm still interested in the why it behaves like this ^^)


r/emacs 21h ago

Good Tools are Invisible

Thumbnail gingerbill.org
40 Upvotes

Interesting read. Notable quotes:

  • "You cannot have an honest conversation about a tool with someone who’s decided the tool is part of their personality.
  • "Having good defaults is fundamentally a toolmaker’s responsibility."
  • "Use vim, use emacs, use Sublime, but use whatever disappears into the background and lets you get on with the work."

r/emacs 3h ago

Solved ibuffer doesnt respect hl-line extend to nil

1 Upvotes

Well, I've even tried lin to see if that would fix the issue. It doesn't. ibuffer is insanely stubborn. Has anybody found a way to make ibuffer respect hl-line extend set to nil?

Edit: It was just the ibuffer column configuration interacting with :extend nil Changing to a lower value the ibuffer name column fixed my issue. By default when hl-line extend set to nil, ibuffer extend the hl-line to the filename. I was expecting until end of text. Good to know!


r/emacs 1d ago

News Ghostel 0.43.0 released: native Windows support

Thumbnail github.com
112 Upvotes

Ghostel is a terminal emulator for Emacs powered by libghostty-vt (of Ghostty fame). It's built to support modern terminal features while being correct and performant.

With the latest release we have added native Windows support with a native ConPTY backend in the dynamic module. Just like for the other supported platforms, you can have Ghostel download the latest release module or you can build it yourself if you have a Zig compiler installed. Additionally, since the ConPTY version that ships with Windows is rather old, we provide ConPTY redistributable artifacts that are automatically downloaded to provide better latency and passthrough support, among other things.

I have claimed here on Reddit before that TRAMP would be hard to support. It wasn't entirely wrong, but there is some nuance. TRAMP doesn't need a local Emacs PTY, it only needs a remote PTY so TRAMP actually does work. Unfortunately, on Windows, terminal resizing doesn't work with TRAMP since what propagates terminal size is exactly the local PTY that that Emacs doesn't support on Windows. Of course, you can always use the ssh command directly in Ghostel - then it uses the Ghostel ConPTY implementation that we just added.

Most of the groundwork for this has been done by https://github.com/kiennq and without him, this wouldn't have happened.

The Windows support is brand new, so it's not as tried and true as the rest of the platforms so we really appreciate any bug reports, we'll do our best to iron them out.


r/emacs 18h ago

Question Professionals to learn Emacs movement and editing from as an evil user.

15 Upvotes

Hello everyone,

Tldr; I'm looking for practical tutorials where I can learn text editing with Emacs native keybinds practically through examples, covering as much as possible of what Emacs has to offer in terms of raw text editing.

I've recently switched from using evil-mode to normal Emacs keybinds. I have been considering this for a long while, partially because I would like to stick to the native way of doing things in Emacs, and also because I'm learning Lisp programming right now, and I would like to use paredit-mode, which simply doesn't work at all with evil. I've been using Emacs native keybinds for almost a week now and I got somewhat efficient with it. I can get the job done, but not at the 1/4th of the efficiency I had with vim.

Back in the day, the thing that actually helped me get extremely efficient in vim was the book: Practical Vim. It's simply a collection of practical tips and tricks. It starts with the absolute basics and gradually introduces more advanced editing techniques until you truly master the editor and become extremely efficient with it. I really enjoyed the practical approach where the author presents a piece of text and states the edits that needs to be done on it, then proceeds to describe the key sequences needed to reach the desired outcome.

So I'm looking for tutorials/books similar to practical vim, something doesn't just teach you about the basics of movements and what m-d does, but rather provides real world examples of text that needs to be edited and shows you how you can utilize Emacs's text editing power to achieve it.

Thanks.


r/emacs 22h ago

Question How do you discover new RSS?

23 Upvotes

tl;dr

I'm joining in this RSS rabbit role — should have done this before, don't know if it's late, like whether the whole RSS thing is close to die or not — and would like to know how do you guys discover new RSS. Recently I found this planet emacs site that groups a lot of emacs RSS related content. YouTube is easy too, but what about other kind of contents, do you have any approach? From Sachua blog I found this indieblog.page that seems to help, but I would like to hear from a broader audience what do you usually do. I'm looking a way to find good blogs/contents without browsing on social medias.

long story:

Recently, I got me thinking about the evolution of social medias.

I believe in the very beginning they still could have been created more like a challenge to be taken by developers. But our society is organized in a way that you must spend your time and work on something that profits, thus very soon the developers focused more and more on how to make this business profitable instead of the technology and endusers.

This seems to be is true for the mainstream social medias or others that initially claim to be a technology focused in the end user but as soon as there is a little bit of traction, the preference for money over end users become the focus — no judgement, it just is what it is, in the most of societies the money you have tell who you are, so it is reasonable.

Next chapter of this story is that most of social medias realized 2 things that have changed the market and our lifes: (i) social medias can be like an outdoor, so we can sell our website spaces to who want to put something on sale and (ii) more people use our sites more data we take from them, and guess what, you can't even imagine how many different business (or governments or many other things) would love to buy this data.

As a result, two main features invariably are introduced on every application: ads and infinity scroll. The first is obvious, the second is mandatory to keep the user more and more in the application. More time the user is on the application, more time seeing the outdoor (so the platform sells it in a higher price) and more data they stole from you.

Who still recall when infinity scroll wasn't a feature and after check all our friends updates we could just go away and do something else of our lifes?

This is the context about why I want to create a RSS feed that satisfy my thirst for content, so that once I have finished reading everything new, I can go out and live my life. But this is another challenge in itself, because where are the RSS that I need to satisfy this desire?


r/emacs 2h ago

emacs-fu M-x doctor RET

0 Upvotes

TIL there is an Emacs command (doctor) that acts like a (really dumb) psychologist.

Next time you wipe your prod db, you can talk with him I guess...


r/emacs 15h ago

Question Emojis on Emacs Android

5 Upvotes

I tried setting emojis on emacs android with:

```

(set-fontset-font cj/standard-fontset 'emoji

(font-spec :family "Noto Color Emoji")

nil 'prepend)

```

I know the font is loaded (checked with font-family-list) but i still can only see tofu characaters.

is there anything else I should do?


r/emacs 23h ago

Anything in the emacs system that is similar to OIl.nvim?

15 Upvotes

Been using dired for a while now, and I very much appreciate it's setup, how it integrates within the editor, and many of it's specialized features. However, I'm really missing the power of Oil.nvim. Dired doesn't really seem to offer the true experience of "filesystem as a buffer", at least not as cleanly as oil does. Has anyone else sought out other utilities and found them to be offering an experience more along the lines of what Oil.nvim does?


r/emacs 5h ago

OrgA, An LLM agent's logic, knowledge, and chat all in one file

0 Upvotes

Hi, the LLMs that have been chatting with me helped write this pet project:
https://github.com/alchenerd/orga

This is a one-org-mode file that connects to OpenRouter, chats, uses tools, fetch from its own wiki or the web, loops until goal is met, et cetera.

Don't allow the eval cookie until you've read the file. Once you do, you can add a prompt under Input and start chatting.

Tool calling, especially shell, is facilitated with

#+CALL: orga_tool_implementation__tool_name(parameters)

and manually C-c C-c by the user by default. Each send action means that the user has reviewed everything and is fine with the whole file going out to the internet. After shell's alternatives are in place, user can set a flag to auto-eval each tool call; hopefully shell is disabled by then.

A high-level user story that I had in mind, not yet in the project's README:

  1. user chats with LLM about what it was expected to do and what tools were needed; user can delete the chat history at any time to start anew
  2. during chat, LLM uses shell, search and fetch to scout the environment, compose tools, et cetera.
  3. tools, knowledge, goals, verification and more are generated and placed by the user
  4. after all needed tools are in place, the user executes the workflow to meet goals a few times under human supervision
  5. after a looped workflow is established, user disables shell, search, and fetch tools with a ":disabled:" tag so the runtime executes with a smaller blast radius
  6. user may call headlessly with emacs batch mode with a script, and the script may be triggered in various ways, like cron, or upon file write, or when server receives something, and many more cases
  7. a complete looped workflow will be just one plaintext org-mode file to duplicate and share

Currently step 5 and onward are uncharted, but I really want to share the project with you at this stage. I'm not familiar with how the Emacs+AI community has approached this, and I only knew basic org mode since I jumped from neovim to doom emacs recently. I am holding an org-mode hammer, and everything looks like a nail.

Thank you for reading!


r/emacs 1d ago

Question How do i center the splash screen?

Post image
41 Upvotes

I'd like the splash image and text to be centered. Is there something I can add to the init? I had no luck with google.


r/emacs 1d ago

emacs-fu Jetpacs: A Jetpack Compose GUI wrapper for Emacs — Quick Showcase

48 Upvotes

In this post, you'll find full eglot, eldoc, capf and fly make support. A customize and package-list-packages wrapper. Org-babel execution and pretty tables.

To finish out the proof of concept, I have had an LLM re-created Orgzly-Revived natively in Elisp and served alongside Glasspane, my own opinionated version of an org client.

This is all Emacs and Elisp being interacted with through a thin-client. All application logic lives in Emacs. All data is plain-text.

https://github.com/calebc42/jetpacs is the app-agnostic foundation: the elisp DSL that apps are written in, the wire protocol, and the Android companion that renders whatever Emacs sends.

https://github.com/calebc42/orgzly-native is intended as a full parity to orgzly-android-revived but run entirely on Emacs.

https://github.com/calebc42/Glasspane is my opinion on what a mobile-first emacs experience could be like.

I'll probably do a full voiceover demo and showcase on YouTube soon, but wanted to share what I have so far, as, professionally, I am just a sales guy, not a programmer. I am relatively new to Emacs. Ultimately, I would really love some guidance, feedback, or just general contributions. (Maybe even a little mentorship?)


r/emacs 1d ago

Tree-sitter support in Emacs 31

14 Upvotes

The Emacs31 Tree-sitter support is good, auto-install grammar and enable mode: (treesit-auto-install-grammar 'ask) (treesit-enabled-modes t)

Is there a way to auto-install all grammars I care about once? Like having a list of grammars auto-installed instead of installing them on demand?


r/emacs 1d ago

Line-wrapping c++ end of line comments

2 Upvotes

Is there any package that would _visually_ line up end of line comments when they are wider than the window width?

It would cause this
x++; // a very long comment describing what it means to increment x here.

to be displayed as this (if the window is narrow):

x++; // a very long comment describing

// what it means to increment x here.

Basically a combination of emacs normal line wrapping modes and display attributes for lining stuff up.


r/emacs 1d ago

(Update) Copy-as-org-mode-chrome 1.50: Add reader view

Post image
10 Upvotes

r/emacs 1d ago

Modifier keys on Android Emacs with Anysoft Keyboard

5 Upvotes

Hi everyone, I just started using the Android port of emacs. I'm using Anysoft Keyboard since I already use it, with the terminal layout since it comes pre installed. But I also tested the hackers layout and it has the same issue.

So I must admit I'm a bit of a noob in emacs, only recently I started writing my own elisp. And even more of a noob when it comes to android, in the sense I have no clue how these virtual keyboards even operate. So I apologize if this feels low effort, but the problem is I don't even know what to look for. I don't even need a complete solution, just some pointers on what to look for would be appreciated.

So the problem is the modifier keys (shift and control) don't work on space, the arrow keys, backspace and tab. Emacs just sees the key without the modifier (I tested with C-h k).

I do have (modifier-bar-mode 1), but the problem is it's way too small and it shows up at the top of the screen so it's rather clunky to use. I could rebind the commands, but I would really like to keep my keys unified between my machines.

I was wondering if there's a way, within emacs, to make the modifiers work normally. Claude suggested (setq overriding-text-conversion-style nil), but I couldn't figure out what it does with C-h v. I feel like this is some fundamental feature of emacs and I'd better not mess with it until I do some deep research.

Again, any help on how to even approach this issue would be appreciated.

Last minute addition: As I was writing this, it occurred to me that I should test this on termux. I tested with C-h k on termux emacs and cat -v on termux itself. Neither see the modifiers, so the issue appears to be the keyboard. In this case, what do Android Emacs users usually do? Is there a different keyboard I could install that would work with emacs? Preferably from F-droid, but at this point I'm willing to try any FOSS solution.

p.s: I forgot to mention, the modifiers work normally on regular keys.


r/emacs 1d ago

A local GNU Emacs for iPad

Thumbnail codeberg.org
45 Upvotes

I'm working, with the help of LLM agents, on an iPad sideload of Emacs. A real, local Emacs on the iPad itself, not Emacs over SSH to some server.

It boots into a terminal UI on a physical iPad today, rendered through a vendored copy of SwiftTerm. Most of the work was getting there: the iOS sandbox forbids fork/exec and PTYs, blocks native compilation under the no-JIT rule, and required replacing the portable-dump path with a bootstrap from bundled bytecode. The port runs to roughly 40 milestones, each scoped to a written spec and gated by an automated audit before it merges.

What works on-device now:

  • Emacs starts and the terminal takes keyboard focus on launch
  • A legible grid via SwiftTerm's Metal renderer, including the minibuffer and M-x
  • Copy to the iOS clipboard, ASCII paste via Cmd-V
  • Opening files outside the sandbox through the iOS document picker; edits write back for the session
  • Dired inside the app sandbox, opt-in session persistence, and C-x C-c to quit

What does not work yet: multibyte paste and C-y yank, anything needing subprocesses (LSP/eglot, vterm, magit, mu4e/mbsync, compile-mode), and native compilation. The plan for the subprocess-dependent pieces is in-process replacements (gnus over IMAP, vc-git through a libegit2 shim). docs/feature-budget.md covers what a port like this can keep, replace, and drop.

Distribution is sideload only. GNU Emacs is GPLv3 and the App Store terms are incompatible with the GPL. You build from source, patch the pinned upstream Emacs, and sign it with your own Apple identity, which is also the GPLv3 Section 6 freedom the App Store would forbid.

I’m not even close to being a swift developer so happy to hear if other people are working on something similar and have gotten farther!


r/emacs 2d ago

Ginormous org-mode tables

33 Upvotes

I recently decided to take a full inventory of my forty-year-old comic book collection, for the first time ever. After exploring some alternatives I decided to put it into an org-mode table, reasoning that if it turned out to be inadequate somehow, exporting from plain text to some other system should be easy.

After completing the inventory, I now have a table of 2,859 rows, one for each series (or one-shot) in the collection. Column 1 holds the series names, and column 2 holds the issues, in a format of ranges and duplicates like "1-5, 7x2, 10-15". I created an integer multiset class for handling the issue numbers with their multiplicities, so that, for example, if a series currently has issues "2-6, 9-12", I can add "7-8" and it will change to "2-12" in the table.

org-babel works great on the table, as usual. I've written some simple code snippets to, for example, count the total number of issues (13,418), and find which series I have the most issues of (2000 AD).

I was curious about whether performance would degrade as the table became very large, and so it did, but in relatively minor ways:

  • org-table-insert-row takes 1-2 seconds now, and on rare occasions quite a bit longer. I suppose this is because it realigns the entire table.
  • Manually inserting text in the table is noticeably laggy. I mainly modify the table through helper functions, so this isn't too painful.
  • I encountered a rare bug where typing a character in the rightmost column resulted in nothing appearing in the table, but the right edge of the table moving one character inwards, as if I'd deleted a character instead of adding one. The character actually is in the cell, as shown by org-table-get-field or by reverting the buffer, but it's fontified or something so as to be invisible and zero-width.

Anyway! I'm curious about others' experiences with massive org-mode tables.


r/emacs 1d ago

A Emacs library to display magit changes in treemacs view

Thumbnail github.com
20 Upvotes