Dear all,
Here are the (delayed) meetup notes.
TL;DR: RSS/email workflow with Emacs+Org mode+notmuch; new bug
tracker; Gentoo installation via Org tangle; asynchronous bash/python
blocks with live output; sentence-at-point support patch; reporting
bugs with patches; org-babel-post-tangle-hook; debugging Emacs config;
quick way to open a link from inside heading (built-in); browsing web
as Org files (shrface); notmuch setup; renaming org-ctrl-c-ctrl-c and
similar to more meaningful names.
- With the new time zone, I am no longer risking being late to
the meetup as much, so I started a bit earlier, when not as
many people joined yet
- To fill time, I looked through my RSS feeds and new emails (from mailing
lists)
- RSS + mailing lists means literally hundreds of new messages
every day
- I am dealing with this using complex rule system
- I do not use gnus, notmuch filters for email +
https://github.com/sp1ff/elfeed-score/ for RSS
- I also have a set of rules to highlight specific terms
in titles to make it easier to capture important massages
- And rules to split email inbox into mailing list vs.
emails directly coming to me or emails for Org mode and other
packages I help maintaining
- When I view the emails and RSS feeds, most of them go to trash
- As Nick Andreson pointed, holding "d" is his favorite email
processing technique. That's so true when one needs to deal
with big volumes
- The idea is to process non-important emails (aka news) very fast
- First, just look at the titles (scoring + highlighted words makes
eyeballing even easier). If titles do not catch attention - "d"
- Second, if something caught attention, do not read, just capture
into inbox and proceed
- Total time needed 5-10 minutes
- After looking through all incoming news, I go to inbox (not necessarily
right away, maybe later during the day, or next day)
- Inbox sometimes leads to more deletes, although most incoming
captures news are simply refiled away under appropriate topic
- Some topics are "inactive", which means that I will only come
back to whatever ends up there later, sometimes years later,
when I decide that I have free time and interest to look into
that topic (I switch active topic from time to time, as I never
have enough free time for everything)
- Other topics are active, and all the news refiled there will
end up in the third layer of review
- The third layer of review involves more than just looking at the title
- I actually open and read the news/emails, reading summary/abstract
and skimming through the text
- Most news will get deleted at this point as uninteresting
(clickbait...)
- Whatever is left, which is a small fraction, will go to the
fourth layer - usually SOMEDAY list, or, sometimes, further
refiled to one of the active projects I am working on (if
relevant)
- The forth layer is reading items from SOMEDAY list
- This is a part of weekly review
- When a given "active" topic or project has no items marked
to be read "NEXT", I look through SOMEDAY items, and
mark a handful NEXT - not too many, but roughly enough to
be able to finish in the coming
- Sometimes, I mark more, but spread them around for a couple of
weeks ahead. For example, I listen music in bursts, with many
new songs accumulating for months, followed by me reactivating
the "Music" topic, and using agenda scatter to spread the songs
across next, say, 90 days, 3-4 songs per week.
- Morgan asked about our new bug tracker (BARK)
https://tracker.orgmode.org/
- We have indeed switched from the old buggy implementation of
our bug tracker that sources all the data from mailing lists
https://list.orgmode.org/orgmode/[email protected]/
- The idea is that we can use something readable both by
bug tracker and humans to explain the status of report
- For example, if a bug report is "Canceled", one can
immediately explain why, while automatically closing
the report for the purposes of bug tracker.
- The new implementation is a ground-up rewrite by Bastien that
is indeed working much better
- It also comes with statistics!
https://tracker.orgmode.org/data.html
- [2026-05-01 Fri] That statistical data was the last missing
piece for me to go ahead and introduce the idea of contributor
liaisons. Having a good estimate on the amount of work
people need to do to maintain the list is (IMHO) very helpful
compared to our usual open-ended maintainer commitments.
- We also imported the data back from 2020 from the list, which
is a unique feature of BARK design where we do not care too much
about bug tracker implementation as long as it can understand
common mailing list writing patterns: typical subject formats like [BUG]
and applied, fixed, etc marking closing threads.
- BARK is very effective catching bug reports and patches,
although closing is not always found (because it is much less
regular to auto-detect).
- So, we will need to clean up the backlog now, closing finished
threads. But that backlog review already reveals a number of missed
patches (ouch!) and bug reports.
- I even found a bug report I missed because it got lost when my
hard drive got corrupted because of problems with RAM.
- Note that we deliberately *do not* auto-close bugs, unlike
common practice on github. We'd rather deal with many old bugs
than ignore bugs leaving them to the bot. If a bug is not important
a human should say so, not a bot that simply closes everything
without activity.
- I also shared a small trick I use since recently to roll out
my Gentoo installation. I switched to a new laptop, so I had to
re-do my system setup (which all lives in an Org file), polishing
the bootstrap and tangling along the way
https://github.com/yantar92/emacs-config/blob/master/system-config.org
- As a part of bootstrap, I have a set of bash commands, I need
to execute just once. Of course, they live inside src block.
- However, I do not want these commands to be in a single block, as
they come from various parts of config - add various daemons to
init, enabling portage overlays, eselect calls, etc.
- So, I make use of Org's =:noweb-ref= argument
#+begin_src bash :eval yes :dir /sudo::/ :noweb yes :results verbarim output
<<sys-configure>>
#+end_src
=sys-configure= is collecting all the code blocks scattered
across the configuration, all executed in one place.
Examples:
#+begin_src bash :dir / :eval yes :noweb-ref sys-configure
rc-update add dbus default
rc-update add display-manager default
#+end_src
<snip many lines>
#+begin_src bash :tangle no :dir /sudo::/ :eval yes :noweb-ref sys-configure
eselect repository enable torbrowser
#+end_src
- karthink asked about something he called "ob-compile" -
a way to run code block asynchronously and be able to watch
the progress
- karthink commented that it may not work to run multiple async
blocks on a single session (yeah, that's expected, and there be dragons)
- but you can simply use async shell blocks + generated session name
#+begin_src bash :session (symbol-name (gensym "org-session")) :async yes
while true; do echo "testing2"; sleep 2; done
#+end_src
- For actual terminal, there is ob-screen where instead of
sending to Emacs comint buffer, you can run in system
terminal (xterm, or whatever else you have installed)
- We also talked about async block evaluation that is, in Org mode
itself, is only available for /ob-python/ and /ob-shell/.
- There is third-party ob-async library that is more universal
(and hacky)
- Although, Org's own asynchronisity (~org-babel-comint-async-register~)
is kind of a hack as well, with a number of edge cases
- We have a WIP patch implementing a more appropriate async
library called =org-pending=
https://list.orgmode.org/A3lTLpSwDVqF7cg-lzjHjcKDvfKpJ2omuOLJt_5otZqGESP0J_3Yuct-MjFoDato7RXfW4SGBqvfXXxH24AHU83_45x2UX7B1z7U6d4T4os=@arbos.bio/
- This one should eventually allow dynamic progress reporting,
and more appropriate APIs.
- I did a small demo of the =org-pending= library, with live
updates of the overlays. The demo is in the top commentary
of the library.
- Sacha commented on her recent-ish patch that adds sentence-at-point
support to Org
- The patch is fine, but revealed some rough edges in Org's sentence
movement commands. It is not clear, for example, whether we should
treat a list as a part of sentence or not. Or a list with full
sentences inside.
https://list.orgmode.org/orgmode/[email protected]/
- I suggested to move ahead and not try to address everything in the
patch, leaving the edge cases with sentence movement for future
discussion
- Sacha also reported that she found a bug in ~org-babel-tangle~
She also did a quick fix https://pastebin.com/ESL8QcC7
- I had no idea about such bug. Reporting it, especially with a fix,
would be welcome.
- Sacha was concerned about writing a test, but that not really
mandatory. It is mostly me pushing people to contribute a bit more
every time.
- Sacha has been experimenting with ~org-babel-post-tangle-hook~
to put additional information into tangle Elisp files.
For example, commentary or "provide" footer.
See her config in
https://sachachua.com/dotemacs/index.html#org-mode-org-babel-tangling-my-emacs-config-snippets-to-different-files-and-adding-boilerplate
- Zororg pointed alternative -
~org-babel-tangle-comment-format-beg~, but that's a completely
different thing - Sacha is after adding things to the whole
tangled file, while the comment format is applied to every tangled
block, and is also used to link back to the Org file for the
purposes of detangling.
- Along the way, she encountered the common bumps related to interaction
between built-in version of Org mode and newer version installed
via ELPA/git.
- This is a very old and common problem. Emacs does not have a notion
if package versions, so it is often finicky to make things right
and avoid mixing libraries from built-in Org version and newer
version. In particular, doing something like
~org-babel-load-file~ in init.el often uses built-in Org
version, if the alternative Org installation is defined in the
literate configuration loaded by ~org-babel-load-file~
- We also turned to discuss ways to debug Emacs config
- Naturally, https://github.com/Malabarba/elisp-bug-hunter
came into the discussion - automated bi-section of config
- I complained that elisp-bug-hunter does not really work
with literate configuration
- Sacha pointed that the cooked up something locally, to make it
work, which was very intriguing
- What was even more intriguing is that whatever she has, it works
so well that she forgot that it is not a part of upstream (such
things tend to happen for really useful local features that also
work seamlessly)
- I was screen sharing as usual, and one of the things I have in my config
is a replacement for the standard C-c C-o popup in org for a heading with
multiple links
- When point is on a heading in Org, and heading body contains links,
C-c C-o will scan all the links in heading, and popup a window
you can use to follow one of the links
- I modified that window configuration via ~display-buffer-alist~, to
show the links in a posframe
#+begin_src emacs-lisp
(when init-flag
(use-package posframe
:straight t
:config
(defun yant/display-buffer-in-posframe (buffer alist)
"Display BUFFER using `posframe-show'.
ALIST may have non-standard elements `poshandler', `foreground-color',
`background-color', `internal-border-color', and
`internal-border-width' to be passed to `posframe-show'."
(posframe-show
buffer
:override-parameters `((quit-restore . (frame frame nil ,buffer)))
:poshandler (alist-get 'poshandler alist)
:foreground-color (alist-get 'foreground-color alist)
:background-color (alist-get 'background-color alist)
:internal-border-color (alist-get 'internal-border-color alist)
:internal-border-width (alist-get 'internal-border-width alist))
;; FIXME: suppress `org-fit-window-to-buffer'.
(setq-local window-size-fixed t))
(setf (alist-get (regexp-quote "*Select Link*") display-buffer-alist
nil nil #'equal)
`(yant/display-buffer-in-posframe
(poshandler . posframe-poshandler-frame-center)
(foreground-color . ,(face-foreground 'mode-line))
(background-color . ,(face-background 'highlight))
(internal-border-color . ,(face-background 'highlight))
(internal-border-width . 20)))))
#+end_src
- I also mentioned about a way to turn any web page (in eww)
to Org-like experience https://github.com/chenyanming/shrface
This is what I have been playing with recently.
- The shrface itself is a bit tricky to configure, but once done
it works nicely (after adding various optional modules)
- Zororg even found https://github.com/xuchunyang/shr-tag-pre-highlight.el
for Org-mode arbitrary syntax highlighting in code on HTML itslef,
using Emacs native facilities, so that everything blends with Emacs
theme and settings.
- I have been using eww for a while now, I can read the majority of
websites using eww itself. In addition, I use reddigg to render reddit
threads as Org, yt-dlp to watch youtube without even opening the
website, masotdon.el to interact with Mastodon, and, sometimes,
archive.ph to open websites that do require JS.
- I even made some initial attempts to plug speech generation to
read the web pages using local neural network model (so that
voice is also natural)
- I am using notmuch (in Emacs) for my emails
- notmuch works with Maildir format, so I store and sync
my emails locally using isync
- In fact, I /mostly/ store my emails locally (with backups), only
keeping a few on servers. Do not see much point using web UI for
emails at all.
- My greatest application of notmuch is local search through emails
and list archives. For actually handling and classifying emails in
details, I use Org mode. I just capture incoming emails to inbox
and use Org todo system to process them. The filtering on notmuch
side only concerns: (1) filtering out obvious spam; (2) splitting
emails going directly to me and emails from the lists and subscriptions
that I do not pay too much attention to.
- With notmuch, my 2M+ emails can be searched as I type
- Although, it does take time to index everything the very first
time (I had to do this exercise several times, when I had to
deal with database corruption due to problems with RAM)
- ichernyshovvv asked about renaming ~org-ctrl-c-ctrl-c~ to a more... err...
meaningful name.
- That what should eventually be done, yes
- This topic is old, and we should definitely rename all the
functions like =org-metaright= and =org-ctrl-c-ctrl-c=, but
the question is always naming
- If you are interested to get this thing done, please
open a thread on the list, so that we can try to find consensus on
the names.
- I have this planned, but as a very low priority - current situation
is not ideal, but it is not that much of a big deal, after all.
:chat:
[17:37] Sacha Chua is now the presenter
[17:38] Sacha Chua is now the presenter
[17:51] yantar92 is now the presenter, set by yantar92
[17:56] [Nick Anderson : VIEWER]: yep
[17:58] [Nick Anderson : VIEWER]: holding "d" is my favorite email processing
technicque
[18:09] [Morgan : VIEWER]: I'm curious about the current state of the tracker.
seems there was a recent switch to bark?
[18:13] [Nick Anderson : VIEWER]: Any new tricks?
[18:14] [karthink : VIEWER]: Is Ihor speaking? I'm trying to check if my audio
is working
[18:15] [karthink : VIEWER]: Nvm, I can hear you now
[18:15] [Nick Anderson : VIEWER]: Your audio is chopping out btw.
[18:16] [Nick Anderson : VIEWER]: well it was briefly btu recovered.
[18:16] [karthink : VIEWER]: Is there something like ob-compile, that runs
long-running org babel shell blocks as compile commands?
[18:17] [Nick Anderson : VIEWER]: will that get you something more than async?
[18:21] [karthink : VIEWER]: Yes, you'll be able to check progress
[18:21] [yantar92 : MODERATOR]: :noweb-ref header argument
[18:21] [Nick Anderson : VIEWER]: ah
[18:21] [Ashish : VIEWER]: Is Ihor speaking? I can't hear him.
[18:21] [Nick Anderson : VIEWER]: silent for me since he tried to fix audio
after it was cutting out
[18:22] [Nick Anderson : VIEWER]: there you are
[18:22] [Ashish : VIEWER]: Yeah, I can hear you now.
[18:24] [Morgan : VIEWER]: that's pretty cool
[18:24] [Nick Anderson : VIEWER]: oh thats nice. My org-roam config is a bunhc
of babel blocks like that and i use a similar (but manual) strategy to execute
them all at once (yes it's janky i know).
[18:24] [Nick Anderson : VIEWER]: Yeah too many blocks for me
[18:24] [Nick Anderson : VIEWER]: exactly
[18:25] [Nick Anderson : VIEWER]: What about Karthinks question about org-babel
to compile commands
[18:25] [Morgan : VIEWER]: How do you want to close the wrongly open bugs on
the tracker? Reply with the proper keyword? Will that clutter the mailing
list?
[18:27] [Morgan : VIEWER]: but I love finding bugs online that have an issue
I'm experiencing that are autoclosed
[18:27] [Morgan : VIEWER]: sarcasm 😜
[18:29] [karthink : VIEWER]: Problem with session: can't run more than one
block at a time
[18:29] [karthink : VIEWER]: I guess I could have separate sessions
[18:30] [karthink : VIEWER]: Yeah that works!
[18:31] [yantar92 : MODERATOR]: #+begin_src bash :session (symbol-name (gensym
"org-session")) :async yes
while true; do echo "testing2"; sleep 2; done
#+end_src
[18:31] [karthink : VIEWER]: Is async for ob-shell built-into Org?
[18:31] [Nick Anderson : VIEWER]: I think so as of soemtime in the last few
years right?
[18:32] [karthink : VIEWER]: There's also a generic ob-async that runs any
block in a child Emacs session
[18:32] [karthink : VIEWER]: I get the two confused
[18:32] [Nick Anderson : VIEWER]: yeah but merged to standard library in org
9.5?
[18:33] [yantar92 : MODERATOR]: #+begin_src screen :terminal kitty
cd ~/Git/org-mode
ls
#+end_src
[18:33] [Zororg : VIEWER]: is futur package promising to replace async code?
[18:34] [karthink : VIEWER]: Is org-pending merged?
[18:34] [karthink : VIEWER]: Oh, I see it isn't
[18:36] [karthink : VIEWER]: ob-shell's async is different from the generic
ob-async, right?
[18:37] [karthink : VIEWER]: Does using :session imply :async in ob-shell?
[18:42] [Zororg : VIEWER]:
https://strah.net/post/org-grimoire-static-site-generator-for-gnu-emacs.html
Seems to be similar hugo for emacs.
Simply replaces partials and templating into single html file for each post
[18:44] [Sacha Chua : VIEWER]: Ihor: I think the patch I had for
sentence-at-point actually needs to be rejigged into maybe making
forward-sentence and backward-sentence more consistent, which would then solve
the sentence-at-point problem (I think), but I haven't gotten around to it yet.
[18:48] [Sacha Chua : VIEWER]: Also I think that C-u C-u M-x org-babel-tangle
wasn't doing the advertised behaviour of tangling just the current file(s) for
the block at point and it seems to just need a small patch which I have
locally, but I haven't gotten around to writing a test for that yet either.
Pastebin at https://pastebin.com/ESL8QcC7 in case you want to have a quick look
at that one, planning to write it up and send it to the list properly at some
point unless it's already on your radar.
[18:49] [Sacha Chua : VIEWER]: Lastly, something other people might be
interested in: I've been experimenting with using org-babel-post-tangle-hook to
add extra stuff to my tangled .el files like commentary and the (provide ...)
at the end. =)
https://sachachua.com/dotemacs/index.html#org-mode-org-babel-tangling-my-emacs-config-snippets-to-different-files-and-adding-boilerplate
[18:51] [Sacha Chua : VIEWER]: (which sent me down a little bit of a
rabbit-hole as I tried to figure out the right combination of eval-and-compile
and loading org-core / org-macs / org-src to make sure the right things are
available when my tangled config files are in user-lisp-directory, which
recompiles it automatically)
[18:51] [Nick Anderson : VIEWER]: sounds like a great one for your prevgiously
proposed set of meetings to get people contributing
[18:55] [yantar92 : MODERATOR]: more website generators:
https://orgmode.org/worg/org-blog-wiki.html
[18:55] [Zororg : VIEWER]: https://tracker.orgmode.org/
is not reachable for me?
[19:02] [Zororg : VIEWER]: org-babel-tangle-comment-format-beg
can be used to prepend some text. Would it be around to do that post hook thing?
(not sure, just lazy thinking)
[19:02] [Zororg : VIEWER]: workaround *
[19:07] [yantar92 : MODERATOR]: https://github.com/Malabarba/elisp-bug-hunter
[19:15] [Nick Anderson : VIEWER]: thanks again for the time, gtg.
[19:19] [Zororg : VIEWER]: gnus does completing-read by default with "w" key in
article buffer
[19:20] [yantar92 : MODERATOR]: (when init-flag
(use-package posframe
:straight t
:config
(defun yant/display-buffer-in-posframe (buffer alist)
"Display BUFFER using `posframe-show'.
ALIST may have non-standard elements `poshandler', `foreground-color',
`background-color', `internal-border-color', and
`internal-border-width' to be passed to `posframe-show'."
(posframe-show
buffer
:override-parameters `((quit-restore . (frame frame nil ,buffer)))
:poshandler (alist-get 'poshandler alist)
:foreground-color (alist-get 'foreground-color alist)
:background-color (alist-get 'background-color alist)
:internal-border-color (alist-get 'internal-border-color alist)
:internal-border-width (alist-get 'internal-border-width alist))
;; FIXME: suppress `org-fit-window-to-buffer'.
(setq-local window-size-fixed t))
(setf (alist-get (regexp-quote "*Select Link*") display-buffer-alist nil
nil #'equal)
`(yant/display-buffer-in-posframe
(poshandler . posframe-poshandler-frame-center)
(foreground-color . ,(face-foreground 'mode-line))
(background-color . ,(face-background 'highlight))
(internal-border-color . ,(face-background 'highlight))
(internal-border-width . 20)))))
[19:21] [Zororg : VIEWER]: can notmuch do online imap?
I dont want to download and sync emails, so i simply use gnus nnimap
[19:21] [Sacha Chua : VIEWER]: Oooh, how?
[19:22] [Zororg : VIEWER]: this one: https://github.com/chenyanming/shrface ?
[19:23] [Zororg : VIEWER]: also this for syntax code highlight just like org
begin-src
https://github.com/xuchunyang/shr-tag-pre-highlight.el
[19:28] [ichernyshovvv : VIEWER]: do you have a public list of websites that
can be displayed with no issues in eww?
[19:29] [yantar92 : MODERATOR]: https://planet.emacslife.com/
[19:32] [Zororg : VIEWER]: can notmuch be used for online imap ?
I use gnus primarily for nnimap without needing to download emails and sync
[19:34] [Zororg : VIEWER]: oh cool.
Even gnus can download but it felt weird and slow when i tried before.
[19:50] [ichernyshovvv : VIEWER]: Ihor, do you have plans on renaming
org-ctrl-c-ctrl-c command? Probably this astronomer chose this name 20 years
ago as a temporal solution, and for some reason we still have it
[19:52] [Sacha Chua : VIEWER]: org-do-the-thing 😉
[19:52] [ichernyshovvv : VIEWER]: org-dwim
[19:53] [yantar92 : MODERATOR]: go ahead and post on the mailing list - it has
to be discussed first
[19:54] [ichernyshovvv : VIEWER]: org-common-do-something
[19:55] [ichernyshovvv : VIEWER]: (I meant org-come-on-do-smth)
[19:55] [ichernyshovvv : VIEWER]: funny huh
:end:
--
Ihor Radchenko // yantar92,
Org mode maintainer,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>