Emacs: Open URLs or search the web, plus browse-url-handlers

| emacs, org

On IRC, someone asked for help configuring Emacs to have a keyboard shortcut that would either open the URL at point or search the web for the region or the word at point. I thought this was a great idea that I would find pretty handy too.

Let's write the interactive function that I'll call from my keyboard shortcut.

  • First, let's check if there's an active region. If there isn't, let's assume we're looking at the thing at point (could be a URL, an e-mail address, a filename, or a word).
  • If there are links, open them.
  • Otherwise, if there are e-mail addresses, compose a message with all those email addresses in the "To" header.
  • Are we at a filename? Let's open that.
  • Otherwise, do a web search. Let's make that configurable. Most people will want to use a web browser to search their favorite search engine, such as DuckDuckGo or Google, so we'll make that the default.
(defcustom my-search-web-handler "https://duckduckgo.com/html/?q="
  "How to search. Could be a string that accepts the search query at the end (URL-encoded)
or a function that accepts the text (unencoded)."
  :type '(choice (string :tag "Prefix URL to search engine.")
                 (function :tag "Handler function.")))

(defun my-open-url-or-search-web (&optional text-or-url)
  (interactive (list (if (region-active-p)
                         (buffer-substring (region-beginning) (region-end))
                       (or
                        (and (derived-mode-p 'org-mode)
                             (let ((elem (org-element-context)))
                               (and (eq (org-element-type elem) 'link)
                                    (buffer-substring-no-properties
                                     (org-element-begin elem)
                                     (org-element-end elem)))))
                        (thing-at-point 'url)
                        (thing-at-point 'email)
                        (thing-at-point 'filename)
                        (thing-at-point 'word)))))
    (catch 'done
      (let (list)
        (with-temp-buffer
          (insert text-or-url)
          (org-mode)
          (goto-char (point-min))
          ;; We add all the links to a list first because following them may change the point
          (while (re-search-forward org-any-link-re nil t)
            (add-to-list 'list (match-string-no-properties 0)))
          (when list
            (dolist (link list)
              (org-link-open-from-string link))
            (throw 'done list))
          ;; Try emails
          (while (re-search-forward thing-at-point-email-regexp nil t)
            (add-to-list 'list (match-string-no-properties 0)))
          (when list
            (compose-mail (string-join list ", "))
            (throw 'done list)))
        ;; Open filename if specified, or do a web search
        (cond
         ((ffap-guesser) (find-file-at-point))
         ((functionp my-search-web-handler)
          (funcall my-search-web-handler text-or-url))
         ((stringp my-search-web-handler)
          (browse-url (concat my-search-web-handler (url-hexify-string text-or-url))))))))

I've been really liking how consult-omni lets me do quick searches as I type from within Emacs, which is actually really cool. I've even extended it to search my bookmarks as well, so that I can find things using my words for them and not trust the internet's words for them. So if I wanted to search using consult-omni, this is how I would do it instead.

(setopt my-search-web-handler #'consult-omni)

Now I can bind that to C-c o in my config with this bit of Emacs Lisp.

(keymap-global-set "C-c o" #'my-open-url-or-search-web)

Here's a quick demo:

Screencast showing it in use

Play by play
  1. Opening a URL: https://example.com
  2. Opening several URLs in a region:
  3. Opening several e-mail addresses:
    • test@example.com
    • another.test@example.com
    • maybe also yet.another.test@example.com
  4. A filename
    • ~/.config/emacs/init.el
  5. With DuckDuckGo handling searches: (setopt my-search-web-handler "https://duckduckgo.com/html?q=")
    • antidisestablishmentarianism
  6. With consult-omni handling searches: (setopt my-search-web-handler #'consult-omni)
    • antidisestablishmentarianism

Depending on the kind of URL, I might want to look at it in different browsers. For example, some websites like https://emacswiki.org work perfectly fine without JavaScript, so opening them in EWW (the Emacs Web Wowser) is great. Then it's right there within Emacs for easy copying, searching, etc. Some websites are a little buggy when run in anything other than Chromium. For example, MailChimp and BigBlueButton (which is the webconference server we use for EmacsConf) both behave a bit better under Google Chrome. There are some URLs I want to ignore because they don't work for me or they tend to be too paywalled, like permalink.gmane.org and medium.com. I want to open Mastodon URLs in mastodon.el. I want to open the rest of the URLs in Firefox, which is my current default browser.

To change the way Emacs opens URLs, you can customize browse-url-browser-function and browse-url-handlers. For example, to set up the behaviour I described, I can use:

(setopt browse-url-handlers
        '(("https?://?medium\\.com" . ignore)
          ("https?://[^/]+/@[^/]+/.*" . mastodon-url-lookup)
          ("https?://mailchimp\\.com" . browse-url-chrome)
          ("https?://bbb\\.emacsverse\\.org" . browse-url-chrome)
          ("https?://emacswiki.org" . eww)))
(setopt browse-url-browser-browser-function 'browse-url-firefox)

Could be a fun tweak. I wonder if something like this might be handy for other people too!

View org source for this post

2025-07-07 Emacs news

| emacs, emacs-news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post

June 2025: playdates, splash pads, sewing, Stardew

| monthly, review
June 2025: 🖼️💦🪴🪡🪡🙃🍦🚲🪡🍪😴🍦🚲🥔👴👰🍓🌧️🦕🌡🥧😷🌡🍓🎵🪡🏊🏺🐸🪡

Text from sketch

June 2025 2025-06-30-04 playdates, splash pads, sewing, Stardew

  1. 🖼️ art gallery
  2. 💦 splash pad
  3. 🪴 jump rope, seedlings
  4. 🪡 lots of sewing
  5. 🪡 sewed a hat
  6. 🙃 upside down with friends
  7. 🍦 radishes, ice cream
  8. 🚲 biked through rain
  9. 🪡 storage bag
  10. 🍪 cracker
  11. 😴 tough bedtime
  12. 🍦 ice cream bar
  13. 🚲 friend delivery
  14. 🥔 potato print, pizza party
  15. 👴 visited grandparents
  16. 👰 wedding dress in Stardew
  17. 🍓 hulled lots of strawberries
  18. 🌧️ rainy day, golden walnuts
  19. 🦕 ROM
  20. 🌡 sick day for A+
  21. 🥧 apple pies
  22. 😷 my turn to be sick
  23. 🌡 fever, naps
  24. 🍓 strawberries, lettuce, report card
  25. 🎵 stayed up for music homework
  26. 🪡 aprons
  27. 🏊 last day of school, first day of wading pool
  28. 🏺 pottery, two pies
  29. 🐸 hopping with J- & K-
  30. 🪡 swim skirt, 23x9= math

A+ finished virtual grade 3 and is now on summer break. I let her decide between mostly structured and mostly unstructured time. She picked mostly unstructured time, with one set of private swimming lessons at an outdoor pool and one week-long afternoon summer camp focused on pottery wheels. The rest of the time is for hanging out at splash pads, wading pools, and swimming pools, often with A+'s friends. When it's too hot even for that, we stay inside. There haven't been as many "I'm booored!"s as I expected. I think dealing with school gave her a lot of practice in managing boredom and coming up with her own activities, which is fantastic. It's important to be able to check in with herself and figure out what she's curious about, what she wants to do, and to know that she can come up with that instead of needing someone else to direct her day. Sometimes A+ uses Claude to help her write stories, sometimes she builds LEGO, sometimes she plays Minecraft or Stardew Valley, and sometimes she watches Clone Wars. Sometimes we tag along on W-'s Bike Brigade deliveries, so that's nice. Sometimes she helps me with sewing by doing straight seams, winding the bobbin, or threading the needle. She's been cubing again, packing a 3x3 Rubik's cube when she thinks there might be some waiting time. I still have the timer app on my phone, so she can check how she's doing. This feels like a good kind of busy: not externally imposed, but intrinsically motivated. Not regimented, but going with the flow.

A+ has lots of ideas for things to sew based on things she wants to wear or use, and is very much into having us both wear matching outfits. It turns out that I fit into kid-sized Crocs, so it's easy to get matching colours there too. The pendulum of childhood, I guess. We're currently on the "let's match" side, and then we'll swing over to individuation, and then we'll swing back, and then further out to individuation, and so on. I love that we can explore this through our clothes, shoes, and interests. Some days she wants to be just like me, and almost physically tries to occupy the same space. (Cuddles are great! I know this opportunity is time-limited.) Other days she grumps at me and nothing I say is right. It's great to be able to not take it personally. It's all part of healthy development.

We're making quick progress through my fabric stash. I've been making clothes: mostly training bras, skorts, and swim skirts out of Spandex so that we can wear it straight into the pool and out again. I've even been able to make a few clothes for me instead of just for her. I used godets to turn last year's swim skirt for A+ into a swim skirt for me, and I added in-seam pockets. Pockets are great for stashing goggles, glasses, and diving toys. I want pockets in everything now. It's nice getting the hang of more of these little techniques, especially since it means I can turn more scraps and outgrown clothes into new things. I sewed a large zippered liner for W-'s drawer so that we could protect out-of-season wool clothes and blankets from moths. I used the leftover canvas to make a bag for A+ so that she could shop for snacks independently, since the reusable bags from the store dragged on the ground when she held them in her hand. This one is just the right size. It's great to be able to make things that fit. I also made aprons for her and one of her friends, whom we treated to a pottery class. A+ enjoyed potato-printing her bag and apron at the Bike Brigade x Not Far From the Tree pizza party at the park, which was a lot of fun. It might be interesting to pick up more paintable/dyeable fabric and some fabric paint so that we can make our own designs.

A+ was briefly sick with a fever, and then I had a sore throat and a fever too. Now no one has a fever, but I still have a persistent cough. We think we might have picked something up at the party. Even though it was outdoors it was a bit crowded, lots of people were talking, and we hadn't worn our masks. Oh well, just gotta do better next time and mask up at big events. At least I'm still testing negative for COVID. I'm masking at home so that W- doesn't get sick, and generally taking it easy. We got a membership for the ROM, but the annoyance of this cough is making me extra grumpy about crowds and indoor things, so it might be a while before we're back. Plenty to do outdoors now that the weather is warm and her friends play outside.

I probably should sleep more, but I've been staying up to play Stardew Valley, which you'd be able to tell from my time records. I like the game. Even the kiddo is learning to slow down and take care of her farm. Sometimes we play co-op, and sometimes we work on our own playthroughs. I have a fairly built-up standard farm playthrough where I let A+ take over Ginger Island. I'm proud of how I successfully didn't grump when she decided to rip up most of my starfruit plants there and then ended up not replacing them with anything. Not even a blip of grumpiness. I already had more money than I felt like spending, thanks to the ancient fruit winery I'd set up. Aside from cooking and puttering around with the sewing machine, A+ also liked giving my character relationship advice. She encouraged me to marry Emily, pronouncing her the most compatible. (She married Elliott in her own playthrough.) After I gave Emily the mermaid pendant and came back to the farmhouse, A+ had set up a mannequin with a full wedding outfit as a gift for me. She was proud of gathering all the materials needed and sewing the virtual outfit herself. I love that the sandbox nature of the game lets her come up with her own ideas and make things happen.

I also have a four corners farm with remixed bundles where I've just completed the community centre and I'm now slowly collecting hardwood for the boat to Ginger Island. I've developed an appreciation for the fishing minigame that I used to avoid. It's a great way to get treasure. Anyway, Stardew is a pleasant enough way to spend little bits of time here and there, and to relax after A+'s bedtime. It's encouraging to see that I could actually find plenty of discretionary time in my day for playing, and I can use that time for other things once this hyperfocus passes.

Our real-life garden is doing all right, too. Most of the remaining radishes have bolted, although some of the larger ones are still growing well. In spring I gave A+ a bunch of seed packets and let her plant entirely at her own discretion. I've been having fun figuring out how to identify and manage the results, thinning out the ones that are definitely not what we're looking for in that space or that just need a little more spacing. We get a lot of volunteer tomatoes, perilla, goosefoot, wood sorrel, and clover. I've been putting those in the compost to make room for the marigolds and poppies that I recognize from the seed packet pictures. I'm learning to identify other plants as they grow. It's fun letting A+ try whatever she likes and then figuring out how to work with that. It's also fun blending the real-life world and the virtual world. We make the sound effect from Stardew Valley when we uproot our radishes and hold them up above our heads.

Taking advantage of those last days of predictable focus time while virtual school was in session, I got the ball rolling for EmacsConf 2025 with the call for participation. I also enjoyed attending the virtual Emacs Berlin meetup and taking notes. I wrote a bunch of blog posts, too.

We'll see how my focused time settles down now that we're on summer schedule. It turns out that I still have plenty of free time. The daytime part is just more interruptible now because I want to be ready to do something with A+ or head out the door when A+ expresses an interest in going to a playdate or a pool. I still want to get my own stuff done instead of feeling like I'm on standby, so it's great that my notes make it easier for me to make progress in stop-and-go segments. I want her to feel like I'm happy to spend time with her instead of being distracted by an interrupted task. I also want her to see how I choose things to do with my time and how I use notes to help me work around the limitations of my brain and my attention. It's an interesting challenge balancing between occupation and flexibility. I want her to enjoy unstructured time and to be able to shift between solo interests and shared time according to the rhythms of her energy.

July is probably going to be about hanging out with A+ near some kind of water. I like this approach of trusting her to manage her time and attention, letting her take the initiative when it comes to going out and playing with friends or swimming in the pool. In the meantime, there's time for me to write and play.

Blog posts

Sketches

Time

Category Previous month % This month % Diff % h/wk Diff h/wk
Discretionary - Play 3.7 14.6 10.9 23.7 18.2
Discretionary - Productive 12.5 14.8 2.3 24.0 3.8
Personal 10.7 11.5 0.8 18.7 1.4
Discretionary - Family 0.2 0.3 0.1 0.5 0.2
Business 2.0 0.9 -1.1 1.4 -1.9
Unpaid work 5.7 4.5 -1.2 7.3 -2.0
Sleep 31.3 27.3 -4.0 44.3 -6.7
A+ 33.9 26.3 -7.7 42.7 -12.9
2025-06-01 23:23 - 00:53: Discretionary - Play - Stardew Valley2025-06-01 22:05 - 23:23: Discretionary - Productive - Writing2025-06-01 21:33 - 22:05: A+ - Childcare2025-06-01 21:03 - 21:33: A+ - Childcare2025-06-01 19:19 - 21:03: Discretionary - Play - Stardew Valley2025-06-01 18:46 - 19:19: Personal - Routines2025-06-01 18:11 - 18:46: Unpaid work - Clean the kitchen2025-06-01 17:23 - 18:11: A+ - Childcare2025-06-01 17:10 - 17:23: Personal - Routines2025-06-01 16:09 - 17:10: Sleep2025-06-01 15:54 - 16:09: A+ - Childcare2025-06-01 15:39 - 15:54: Unpaid work - Clean the kitchen2025-06-01 09:26 - 15:39: A+ - Childcare2025-06-01 09:06 - 09:26: Discretionary - Productive - Music2025-06-01 08:33 - 09:06: Discretionary - Productive - Gardening2025-06-01 08:18 - 08:33: Unpaid work - Laundry2025-06-01 07:01 - 08:18: A+ - Childcare2025-06-01 06:46 - 07:01: Personal - Routines2025-06-01 06:46 - 06:46: Personal - Routines2025-06-01 06:36 - 06:46: Discretionary - Productive - Bike Brigade2025-06-01 06:32 - 06:36: Personal - Routines2025-06-01 00:36 - 06:32: Sleep2025-05-31 23:58 - 00:36: Discretionary - Play - Stardew Valley2025-06-02 22:44 - 00:15: Discretionary - Play - Stardew Valley2025-06-02 22:39 - 22:44: Personal - Routines2025-06-02 20:51 - 22:39: A+ - Childcare2025-06-02 20:21 - 20:51: Personal - Routines2025-06-02 20:11 - 20:21: A+ - Childcare2025-06-02 18:39 - 20:11: Discretionary - Play - Stardew Valley2025-06-02 18:24 - 18:39: Unpaid work - Clean the kitchen2025-06-02 17:54 - 18:24: A+ - Childcare2025-06-02 17:23 - 17:54: Discretionary - Play - Stardew Valley2025-06-02 17:22 - 17:23: Business - Earn - Consulting - E1 - General2025-06-02 14:45 - 17:22: A+ - Childcare2025-06-02 13:55 - 14:45: Discretionary - Productive - Emacs2025-06-02 13:45 - 13:55: Unpaid work - Clean the kitchen2025-06-02 12:59 - 13:45: Personal - Routines2025-06-02 12:12 - 12:59: Discretionary - Productive - Emacs2025-06-02 12:05 - 12:12: Unpaid work - Cook2025-06-02 12:02 - 12:05: Discretionary - Productive - Emacs2025-06-02 09:59 - 12:02: Personal - Routines2025-06-02 09:33 - 09:59: A+ - Childcare2025-06-02 08:58 - 09:33: Discretionary - Productive - Emacs2025-06-02 08:44 - 08:58: Discretionary - Productive - Music2025-06-02 08:22 - 08:44: Discretionary - Productive - Gardening2025-06-02 07:37 - 08:22: A+ - Childcare2025-06-02 06:56 - 07:37: Personal - Routines2025-06-02 00:53 - 06:56: Sleep2025-06-01 23:23 - 00:53: Discretionary - Play - Stardew Valley2025-06-03 22:11 - 00:29: Discretionary - Play - Stardew Valley2025-06-03 22:09 - 22:11: Personal - Routines2025-06-03 21:39 - 22:09: A+ - Childcare2025-06-03 20:50 - 21:39: Personal - Routines2025-06-03 18:25 - 20:50: A+ - Childcare2025-06-03 18:05 - 18:25: Unpaid work - Cook2025-06-03 14:48 - 18:05: A+ - Childcare2025-06-03 14:03 - 14:48: Discretionary - Play - Stardew Valley2025-06-03 13:38 - 14:03: Business - Earn - Consulting - E1 - General2025-06-03 13:21 - 13:38: A+ - Childcare2025-06-03 13:17 - 13:21: Business - Earn - Consulting - E1 - General2025-06-03 13:08 - 13:17: Discretionary - Play - Stardew Valley2025-06-03 12:45 - 13:08: Business - Earn - Consulting - E1 - General2025-06-03 11:15 - 12:45: Discretionary - Productive - Gardening2025-06-03 11:11 - 11:15: A+ - Childcare2025-06-03 10:16 - 11:11: Discretionary - Productive - Gardening2025-06-03 10:08 - 10:16: Discretionary - Play - Stardew Valley2025-06-03 09:54 - 10:08: Business - Earn - Consulting - E1 - General2025-06-03 09:40 - 09:54: A+ - Childcare2025-06-03 09:36 - 09:40: Business - Earn - Consulting - E1 - General2025-06-03 08:53 - 09:36: Discretionary - Productive - Music2025-06-03 08:26 - 08:53: Discretionary - Productive - Gardening2025-06-03 06:55 - 08:26: A+ - Childcare2025-06-03 00:15 - 06:55: Sleep2025-06-02 22:44 - 00:15: Discretionary - Play - Stardew Valley2025-06-04 22:39 - 00:24: Discretionary - Play - Stardew Valley2025-06-04 22:35 - 22:39: Personal - Routines2025-06-04 21:07 - 22:35: A+ - Childcare2025-06-04 21:02 - 21:07: Unpaid work - Cook2025-06-04 20:13 - 21:02: Personal - Routines2025-06-04 20:05 - 20:13: Discretionary - Play - Stardew Valley2025-06-04 19:45 - 20:05: Unpaid work - Cook2025-06-04 19:44 - 19:45: Personal - Routines2025-06-04 19:24 - 19:44: Unpaid work - Clean the kitchen2025-06-04 18:53 - 19:24: Personal - Routines2025-06-04 18:03 - 18:53: Discretionary - Productive - Bike Brigade2025-06-04 14:57 - 18:03: A+ - Childcare2025-06-04 14:27 - 14:57: Unpaid work - Tidy up2025-06-04 14:09 - 14:27: Discretionary - Productive - Gardening2025-06-04 12:05 - 14:09: Discretionary - Productive - Sewing2025-06-04 11:05 - 12:05: A+ - Childcare2025-06-04 09:53 - 11:05: Discretionary - Productive - Sewing2025-06-04 09:49 - 09:53: A+ - Childcare2025-06-04 09:49 - 09:49: Discretionary - Play - Stardew Valley2025-06-04 09:37 - 09:49: A+ - Childcare2025-06-04 09:05 - 09:37: Discretionary - Productive - Music2025-06-04 08:56 - 09:05: Unpaid work - Clean the kitchen2025-06-04 08:38 - 08:56: Unpaid work - Cook2025-06-04 08:24 - 08:38: Discretionary - Productive - Gardening2025-06-04 07:24 - 08:24: A+ - Childcare2025-06-04 06:55 - 07:24: Personal - Routines2025-06-04 00:29 - 06:55: Sleep2025-06-03 22:11 - 00:29: Discretionary - Play - Stardew Valley2025-06-05 22:28 - 00:22: Discretionary - Play - Stardew Valley2025-06-05 22:08 - 22:28: Personal - Routines2025-06-05 21:04 - 22:08: A+ - Childcare2025-06-05 20:34 - 21:04: Personal - Routines2025-06-05 17:35 - 20:34: A+ - Childcare2025-06-05 17:20 - 17:35: Discretionary - Productive - Bike Brigade2025-06-05 17:09 - 17:20: A+ - Childcare2025-06-05 17:02 - 17:09: Discretionary - Productive - Bike Brigade2025-06-05 14:51 - 17:02: A+ - Childcare2025-06-05 14:37 - 14:51: Discretionary - Productive - Writing2025-06-05 14:22 - 14:37: Discretionary - Productive - Writing2025-06-05 12:39 - 14:22: Unpaid work - Tidy up2025-06-05 12:12 - 12:39: Discretionary - Productive - Sewing2025-06-05 11:57 - 12:12: Unpaid work - Tidy up2025-06-05 11:08 - 11:57: A+ - Childcare2025-06-05 10:53 - 11:08: Personal - Routines2025-06-05 09:27 - 10:53: Discretionary - Productive - Bike Brigade2025-06-05 09:27 - 09:27: A+ - Childcare2025-06-05 08:41 - 09:27: Discretionary - Productive - Music2025-06-05 08:24 - 08:41: Unpaid work - Clean the kitchen2025-06-05 08:18 - 08:24: Discretionary - Productive - Gardening2025-06-05 07:29 - 08:18: A+ - Childcare2025-06-05 06:50 - 07:29: Personal - Routines2025-06-05 00:28 - 06:50: Sleep2025-06-05 00:24 - 00:28: Sleep2025-06-04 22:39 - 00:24: Discretionary - Play - Stardew Valley2025-06-06 23:48 - 00:44: Discretionary - Play - Stardew Valley2025-06-06 23:42 - 23:48: Personal - Routines2025-06-06 22:35 - 23:42: A+ - Childcare2025-06-06 22:35 - 22:35: A+ - Childcare2025-06-06 22:24 - 22:35: Discretionary - Play - Stardew Valley2025-06-06 22:23 - 22:24: Personal - Routines2025-06-06 21:05 - 22:23: A+ - Childcare2025-06-06 20:54 - 21:05: Discretionary - Play - Stardew Valley2025-06-06 20:24 - 20:54: Discretionary - Productive - Music2025-06-06 20:10 - 20:24: Business - Earn - Consulting - E1 - General2025-06-06 19:55 - 20:10: Personal - Routines2025-06-06 19:13 - 19:55: Discretionary - Productive - Bike Brigade2025-06-06 10:00 - 19:13: A+ - Childcare2025-06-06 09:44 - 10:00: Unpaid work - Clean the kitchen2025-06-06 09:28 - 09:44: Personal - Routines2025-06-06 09:16 - 09:28: Discretionary - Productive - Sewing2025-06-06 08:27 - 09:16: Discretionary - Productive - Gardening2025-06-06 07:14 - 08:27: A+ - Childcare2025-06-06 00:22 - 07:14: Sleep2025-06-05 22:28 - 00:22: Discretionary - Play - Stardew Valley2025-06-07 22:57 - 00:03: Personal - Routines2025-06-07 22:56 - 22:57: Discretionary - Play - Stardew Valley2025-06-07 22:41 - 22:56: Personal - Routines2025-06-07 21:36 - 22:41: A+ - Childcare2025-06-07 21:21 - 21:36: Unpaid work - Laundry2025-06-07 20:42 - 21:21: Discretionary - Play - Stardew Valley2025-06-07 20:06 - 20:42: Personal - Routines2025-06-07 17:48 - 20:06: A+ - Childcare2025-06-07 16:47 - 17:48: Discretionary - Productive - Writing2025-06-07 15:46 - 16:47: Personal - Walk - Other2025-06-07 15:31 - 15:46: Discretionary - Productive - Writing2025-06-07 14:41 - 15:31: Personal - Routines2025-06-07 14:01 - 14:41: Personal - Walk - Other2025-06-07 10:40 - 14:01: A+ - Childcare2025-06-07 10:19 - 10:40: Discretionary - Productive - Music2025-06-07 09:11 - 10:19: Discretionary - Productive - Bike Brigade2025-06-07 06:36 - 09:11: Personal - Routines2025-06-07 00:44 - 06:36: Sleep2025-06-06 23:48 - 00:44: Discretionary - Play - Stardew Valley2025-06-08 23:11 - 00:41: Discretionary - Play - Stardew Valley2025-06-08 20:57 - 23:11: A+ - Childcare2025-06-08 20:27 - 20:57: Personal - Routines2025-06-08 20:10 - 20:27: Unpaid work - Clean the kitchen2025-06-08 16:21 - 20:10: A+ - Childcare2025-06-08 15:21 - 16:21: Unpaid work - Cook2025-06-08 13:53 - 15:21: Discretionary - Play - Stardew Valley2025-06-08 13:43 - 13:53: Unpaid work - Clean the kitchen2025-06-08 13:21 - 13:43: Personal - Routines2025-06-08 13:07 - 13:21: Unpaid work - Clean the kitchen2025-06-08 12:32 - 13:07: Personal - Routines2025-06-08 09:28 - 12:32: Discretionary - Productive - Sewing2025-06-08 08:57 - 09:28: Discretionary - Productive - Gardening2025-06-08 08:56 - 08:57: Unpaid work - Clean the kitchen2025-06-08 08:40 - 08:56: Discretionary - Productive - Music2025-06-08 08:40 - 08:40: A+ - Childcare2025-06-08 08:31 - 08:40: Discretionary - Productive - Music2025-06-08 07:18 - 08:31: A+ - Childcare2025-06-08 06:55 - 07:18: Personal - Routines2025-06-08 00:33 - 06:55: Sleep2025-06-08 00:03 - 00:33: Discretionary - Play - Stardew Valley2025-06-07 22:57 - 00:03: Personal - Routines2025-06-09 23:03 - 06:00: Sleep2025-06-09 23:00 - 23:03: Personal - Routines2025-06-09 21:27 - 23:00: A+ - Childcare2025-06-09 20:53 - 21:27: Discretionary - Productive - Writing2025-06-09 20:02 - 20:53: Discretionary - Productive - Drawing2025-06-09 19:34 - 20:02: Personal - Routines2025-06-09 19:07 - 19:34: Unpaid work - Clean the kitchen2025-06-09 18:22 - 19:07: Personal - Routines2025-06-09 17:06 - 18:22: Discretionary - Productive - Writing2025-06-09 16:42 - 17:06: A+ - Childcare2025-06-09 16:32 - 16:42: Discretionary - Productive - Writing2025-06-09 16:27 - 16:32: Personal - Routines2025-06-09 15:53 - 16:27: Discretionary - Productive - Gardening2025-06-09 12:38 - 15:53: Discretionary - Productive - Sewing2025-06-09 12:20 - 12:38: A+ - Childcare2025-06-09 12:03 - 12:20: Discretionary - Productive - Sewing2025-06-09 11:02 - 12:03: A+ - Childcare2025-06-09 10:59 - 11:02: Discretionary - Productive - Music2025-06-09 10:29 - 10:59: Unpaid work - Cook2025-06-09 10:10 - 10:29: Discretionary - Productive - Emacs2025-06-09 10:02 - 10:10: Discretionary - Productive - Emacs2025-06-09 08:58 - 10:02: A+ - Childcare2025-06-09 08:17 - 08:58: Discretionary - Productive - Emacs2025-06-09 06:55 - 08:17: Personal - Routines2025-06-09 00:41 - 06:55: Sleep2025-06-08 23:11 - 00:41: Discretionary - Play - Stardew Valley2025-06-10 22:42 - 00:55: Discretionary - Play - Stardew Valley2025-06-10 20:42 - 22:42: A+ - Childcare2025-06-10 19:42 - 20:42: Discretionary - Play - Stardew Valley2025-06-10 19:16 - 19:42: Personal - Routines2025-06-10 18:56 - 19:16: Unpaid work - Clean the kitchen2025-06-10 18:24 - 18:56: Personal - Routines2025-06-10 14:40 - 18:24: A+ - Childcare2025-06-10 14:30 - 14:40: Business - Earn - Consulting - E1 - General2025-06-10 14:07 - 14:30: Discretionary - Productive - Drawing2025-06-10 12:37 - 14:07: Discretionary - Productive - Writing2025-06-10 12:17 - 12:37: Discretionary - Productive - Bike Brigade2025-06-10 12:04 - 12:17: Discretionary - Productive - Writing2025-06-10 11:03 - 12:04: A+ - Childcare2025-06-10 10:32 - 11:03: Discretionary - Productive - Writing2025-06-10 09:02 - 10:32: Discretionary - Productive - Music2025-06-10 08:53 - 09:02: Unpaid work - Cook2025-06-10 08:30 - 08:53: Discretionary - Productive - Gardening2025-06-10 08:22 - 08:30: Personal - Routines2025-06-10 07:52 - 08:22: A+ - Childcare2025-06-10 07:33 - 07:52: Discretionary - Productive - Music2025-06-10 07:03 - 07:33: A+ - Childcare2025-06-10 06:00 - 07:03: Personal - Routines2025-06-09 23:03 - 06:00: Sleep2025-06-11 23:31 - 00:27: Discretionary - Family2025-06-11 23:10 - 23:31: Discretionary - Play - Stardew Valley2025-06-11 22:31 - 23:10: Discretionary - Family2025-06-11 22:24 - 22:31: Personal - Routines2025-06-11 21:54 - 22:24: A+ - Childcare2025-06-11 19:37 - 21:54: Discretionary - Play - Stardew Valley2025-06-11 19:07 - 19:37: Personal - Routines2025-06-11 19:02 - 19:07: Unpaid work - Clean the kitchen2025-06-11 18:46 - 19:02: Personal - Routines2025-06-11 18:09 - 18:46: Unpaid work - Cook2025-06-11 15:00 - 18:09: A+ - Childcare2025-06-11 14:50 - 15:00: Personal - Routines2025-06-11 14:21 - 14:50: Discretionary - Productive - Writing2025-06-11 13:59 - 14:21: Business - Earn - Consulting - E1 - General2025-06-11 13:47 - 13:59: Discretionary - Productive - Writing2025-06-11 13:40 - 13:47: Personal - Routines2025-06-11 13:38 - 13:40: Business - Earn - Consulting - E1 - General2025-06-11 13:38 - 13:38: Personal - Routines2025-06-11 13:22 - 13:38: A+ - Childcare2025-06-11 13:13 - 13:22: Discretionary - Play - Stardew Valley2025-06-11 12:13 - 13:13: Business - Earn - Consulting - E1 - General2025-06-11 11:01 - 12:13: A+ - Childcare2025-06-11 09:58 - 11:01: Business - Earn - Consulting - E1 - General2025-06-11 09:39 - 09:58: A+ - Childcare2025-06-11 09:13 - 09:39: Discretionary - Productive - Music2025-06-11 09:08 - 09:13: Unpaid work - Cook2025-06-11 08:58 - 09:08: Discretionary - Productive - Gardening2025-06-11 08:20 - 08:58: Unpaid work - Cook2025-06-11 06:57 - 08:20: Personal - Routines2025-06-11 06:57 - 06:57: Unpaid work - Subway2025-06-11 00:55 - 06:57: Sleep2025-06-10 22:42 - 00:55: Discretionary - Play - Stardew Valley2025-06-12 22:23 - 00:28: Discretionary - Play - Stardew Valley2025-06-12 22:02 - 22:23: Personal - Routines2025-06-12 21:17 - 22:02: A+ - Childcare2025-06-12 18:57 - 21:17: Discretionary - Play - Stardew Valley2025-06-12 18:27 - 18:57: Personal - Routines2025-06-12 14:40 - 18:27: A+ - Childcare2025-06-12 13:40 - 14:40: Discretionary - Play - Stardew Valley2025-06-12 12:09 - 13:40: Discretionary - Productive - Bike Brigade2025-06-12 11:23 - 12:09: A+ - Childcare2025-06-12 11:01 - 11:23: Discretionary - Productive - Writing2025-06-12 10:21 - 11:01: Discretionary - Play - Stardew Valley2025-06-12 10:19 - 10:21: Personal - Routines2025-06-12 09:59 - 10:19: Discretionary - Productive - Music2025-06-12 09:39 - 09:59: A+ - Childcare2025-06-12 08:31 - 09:39: Unpaid work - Cook2025-06-12 07:31 - 08:31: A+ - Childcare2025-06-12 06:57 - 07:31: Personal - Routines2025-06-12 01:01 - 06:57: Sleep2025-06-12 00:27 - 01:01: Discretionary - Play - Stardew Valley2025-06-11 23:31 - 00:27: Discretionary - Family2025-06-13 22:50 - 00:43: Discretionary - Play - Stardew Valley2025-06-13 22:39 - 22:50: Personal - Routines2025-06-13 21:30 - 22:39: A+ - Childcare2025-06-13 19:59 - 21:30: Discretionary - Play - Stardew Valley2025-06-13 18:57 - 19:59: Personal - Routines2025-06-13 18:42 - 18:57: Unpaid work - Clean the kitchen2025-06-13 18:12 - 18:42: Personal - Routines2025-06-13 17:36 - 18:12: Discretionary - Productive - Writing2025-06-13 15:35 - 17:36: A+ - Childcare2025-06-13 15:05 - 15:35: Discretionary - Productive - Writing2025-06-13 14:39 - 15:05: Personal - Routines2025-06-13 12:35 - 14:39: Discretionary - Play - Stardew Valley2025-06-13 11:35 - 12:35: Discretionary - Productive - Sewing2025-06-13 11:02 - 11:35: A+ - Childcare2025-06-13 10:52 - 11:02: Business - Earn - Consulting - E1 - General2025-06-13 10:23 - 10:52: Personal - Routines2025-06-13 10:00 - 10:23: Discretionary - Productive - Writing2025-06-13 09:56 - 10:00: Business - Earn - Consulting - E1 - General2025-06-13 09:36 - 09:56: A+ - Childcare2025-06-13 08:44 - 09:36: Discretionary - Productive - Music2025-06-13 08:34 - 08:44: Unpaid work - Clean the kitchen2025-06-13 08:21 - 08:34: Discretionary - Productive - Gardening2025-06-13 06:59 - 08:21: A+ - Childcare2025-06-13 00:33 - 06:59: Sleep2025-06-13 00:28 - 00:33: Personal - Routines2025-06-12 22:23 - 00:28: Discretionary - Play - Stardew Valley2025-06-14 23:03 - 01:05: Discretionary - Play - Stardew Valley2025-06-14 22:55 - 23:03: Personal - Routines2025-06-14 21:27 - 22:55: A+ - Childcare2025-06-14 20:28 - 21:27: Discretionary - Play - Stardew Valley2025-06-14 20:01 - 20:28: Personal - Routines2025-06-14 19:06 - 20:01: Discretionary - Productive - Bike Brigade2025-06-14 18:51 - 19:06: Personal - Routines2025-06-14 18:40 - 18:51: Unpaid work - Clean the kitchen2025-06-14 18:16 - 18:40: Personal - Routines2025-06-14 17:46 - 18:16: Discretionary - Productive - Bike Brigade2025-06-14 11:14 - 17:46: A+ - Childcare2025-06-14 11:02 - 11:14: Discretionary - Productive - Bike Brigade2025-06-14 09:02 - 11:02: Discretionary - Productive - Sewing2025-06-14 08:50 - 09:02: Unpaid work - Clean the kitchen2025-06-14 07:20 - 08:50: A+ - Childcare2025-06-14 06:59 - 07:20: Personal - Routines2025-06-14 00:43 - 06:59: Sleep2025-06-13 22:50 - 00:43: Discretionary - Play - Stardew Valley2025-06-15 23:14 - 01:03: Discretionary - Play - Stardew Valley2025-06-15 23:11 - 23:14: Personal - Routines2025-06-15 21:06 - 23:11: A+ - Childcare2025-06-15 20:36 - 21:06: Personal - Routines2025-06-15 20:20 - 20:36: Unpaid work - Laundry2025-06-15 19:50 - 20:20: Discretionary - Play - Stardew Valley2025-06-15 19:04 - 19:50: Personal - Routines2025-06-15 18:50 - 19:04: Unpaid work - Cook2025-06-15 18:30 - 18:50: Unpaid work - Clean the kitchen2025-06-15 17:45 - 18:30: Personal - Routines2025-06-15 16:43 - 17:45: Discretionary - Play - Stardew Valley2025-06-15 15:58 - 16:43: Discretionary - Productive - Gardening2025-06-15 14:03 - 15:58: Personal - Routines2025-06-15 07:54 - 14:03: A+ - Childcare2025-06-15 06:54 - 07:54: Personal - Routines2025-06-15 01:05 - 06:54: Sleep2025-06-14 23:03 - 01:05: Discretionary - Play - Stardew Valley2025-06-16 22:58 - 01:08: Discretionary - Play - Stardew Valley2025-06-16 22:56 - 22:58: Personal - Routines2025-06-16 19:45 - 22:56: A+ - Childcare2025-06-16 19:15 - 19:45: Personal - Routines2025-06-16 18:34 - 19:15: Discretionary - Play - Stardew Valley2025-06-16 18:33 - 18:34: Unpaid work - Tidy up2025-06-16 18:29 - 18:33: Business - Earn - Consulting - E1 - General2025-06-16 18:15 - 18:29: Discretionary - Play - Stardew Valley2025-06-16 18:10 - 18:15: Business - Earn - Consulting - E1 - General2025-06-16 17:40 - 18:10: Personal - Routines2025-06-16 17:25 - 17:40: Unpaid work - Clean the kitchen2025-06-16 17:10 - 17:25: Personal - Routines2025-06-16 16:40 - 17:10: Unpaid work - Clean the kitchen2025-06-16 16:04 - 16:40: Personal - Routines2025-06-16 15:12 - 16:04: Discretionary - Productive - Writing2025-06-16 14:45 - 15:12: A+ - Childcare2025-06-16 14:42 - 14:45: Personal - Routines2025-06-16 14:23 - 14:42: Discretionary - Productive - Emacs2025-06-16 14:05 - 14:23: Business - Earn - Consulting - E1 - General2025-06-16 14:00 - 14:05: Discretionary - Productive - Emacs2025-06-16 13:50 - 14:00: Discretionary - Productive - Emacs2025-06-16 13:37 - 13:50: Business - Earn - Consulting - E1 - General2025-06-16 13:13 - 13:37: Discretionary - Play - Stardew Valley2025-06-16 12:25 - 13:13: Discretionary - Productive - Emacs2025-06-16 12:08 - 12:25: Personal - Routines2025-06-16 11:08 - 12:08: A+ - Childcare2025-06-16 10:00 - 11:08: Business - Earn - Consulting - E1 - General2025-06-16 09:36 - 10:00: A+ - Childcare2025-06-16 09:19 - 09:36: Discretionary - Productive - Music2025-06-16 08:37 - 09:19: Unpaid work - Cook2025-06-16 08:26 - 08:37: Discretionary - Productive - Gardening2025-06-16 07:26 - 08:26: A+ - Childcare2025-06-16 06:56 - 07:26: Personal - Routines2025-06-16 01:03 - 06:56: Sleep2025-06-15 23:14 - 01:03: Discretionary - Play - Stardew Valley2025-06-17 22:52 - 01:24: Discretionary - Play - Stardew Valley2025-06-17 22:50 - 22:52: Personal - Routines2025-06-17 21:23 - 22:50: A+ - Childcare2025-06-17 20:32 - 21:23: Personal - Routines2025-06-17 20:12 - 20:32: Unpaid work - Clean the kitchen2025-06-17 19:47 - 20:12: Unpaid work - Cook2025-06-17 13:15 - 19:47: A+ - Childcare2025-06-17 12:55 - 13:15: Unpaid work - Tidy up2025-06-17 12:49 - 12:55: Discretionary - Productive - Sewing2025-06-17 12:29 - 12:49: Personal - Routines2025-06-17 11:59 - 12:29: Discretionary - Productive - Emacs2025-06-17 11:02 - 11:59: A+ - Childcare2025-06-17 10:21 - 11:02: Discretionary - Productive - Emacs2025-06-17 09:37 - 10:21: Unpaid work - Tidy up2025-06-17 09:11 - 09:37: Discretionary - Productive - Gardening2025-06-17 09:00 - 09:11: Unpaid work - Clean the kitchen2025-06-17 08:46 - 09:00: Discretionary - Productive - Gardening2025-06-17 08:35 - 08:46: Personal - Routines2025-06-17 07:05 - 08:35: A+ - Childcare2025-06-17 06:57 - 07:05: Personal - Routines2025-06-17 01:08 - 06:57: Sleep2025-06-16 22:58 - 01:08: Discretionary - Play - Stardew Valley2025-06-18 23:01 - 01:08: Discretionary - Play - Stardew Valley2025-06-18 22:59 - 23:01: Personal - Routines2025-06-18 20:24 - 22:59: A+ - Childcare2025-06-18 19:54 - 20:24: Unpaid work - Cook2025-06-18 19:24 - 19:54: Personal - Routines2025-06-18 17:53 - 19:24: A+ - Childcare2025-06-18 16:23 - 17:53: Discretionary - Play - Stardew Valley2025-06-18 13:33 - 16:23: Discretionary - Productive - Sewing2025-06-18 13:11 - 13:33: Discretionary - Productive - Writing2025-06-18 13:08 - 13:11: Unpaid work - Clean the kitchen2025-06-18 12:59 - 13:08: Unpaid work - Clean the kitchen2025-06-18 11:59 - 12:59: Discretionary - Play - Stardew Valley2025-06-18 10:35 - 11:59: A+ - Childcare2025-06-18 10:05 - 10:35: Unpaid work - Errands2025-06-18 09:05 - 10:05: Discretionary - Productive - Emacs2025-06-18 08:22 - 09:05: Discretionary - Productive - Music2025-06-18 08:16 - 08:22: Discretionary - Productive - Gardening2025-06-18 06:56 - 08:16: Personal - Routines2025-06-18 01:24 - 06:56: Sleep2025-06-17 22:52 - 01:24: Discretionary - Play - Stardew Valley2025-06-19 23:00 - 00:14: Discretionary - Play - Stardew Valley2025-06-19 22:44 - 23:00: Personal - Routines2025-06-19 20:57 - 22:44: A+ - Childcare2025-06-19 20:36 - 20:57: Discretionary - Play - Stardew Valley2025-06-19 20:17 - 20:36: Discretionary - Productive - Bike Brigade2025-06-19 18:30 - 20:17: Discretionary - Play - Stardew Valley2025-06-19 18:00 - 18:30: Personal - Routines2025-06-19 17:56 - 18:00: Unpaid work - Clean the kitchen2025-06-19 11:00 - 17:56: A+ - Childcare2025-06-19 10:30 - 11:00: Discretionary - Productive - Bike Brigade2025-06-19 10:08 - 10:30: Unpaid work - Tidy up2025-06-19 09:58 - 10:08: Discretionary - Productive - Bike Brigade2025-06-19 09:58 - 09:58: Discretionary - Productive - Bike Brigade2025-06-19 09:48 - 09:58: A+ - Childcare2025-06-19 09:12 - 09:48: Discretionary - Productive - Bike Brigade2025-06-19 08:27 - 09:12: Discretionary - Productive - Music2025-06-19 08:21 - 08:27: Unpaid work - Clean the kitchen2025-06-19 06:56 - 08:21: Personal - Routines2025-06-19 01:08 - 06:56: Sleep2025-06-18 23:01 - 01:08: Discretionary - Play - Stardew Valley2025-06-20 22:06 - 00:24: Discretionary - Play - Stardew Valley2025-06-20 21:53 - 22:06: A+ - Childcare2025-06-20 21:21 - 21:53: Discretionary - Play - Stardew Valley2025-06-20 20:43 - 21:21: Discretionary - Productive - Bike Brigade2025-06-20 20:20 - 20:43: Personal - Routines2025-06-20 19:55 - 20:20: Discretionary - Play - Stardew Valley2025-06-20 16:33 - 19:55: Discretionary - Productive - Emacs2025-06-20 16:09 - 16:33: Discretionary - Productive - Gardening2025-06-20 15:04 - 16:09: Discretionary - Play - Stardew Valley2025-06-20 13:15 - 15:04: Discretionary - Productive - Writing2025-06-20 11:00 - 13:15: Discretionary - Productive - Bike Brigade2025-06-20 10:54 - 11:00: A+ - Childcare2025-06-20 10:35 - 10:54: Discretionary - Productive - Gardening2025-06-20 09:05 - 10:35: Discretionary - Play - Stardew Valley2025-06-20 07:03 - 09:05: Personal - Routines2025-06-20 00:14 - 07:03: Sleep2025-06-19 23:00 - 00:14: Discretionary - Play - Stardew Valley2025-06-21 23:46 - 01:10: Discretionary - Play - Stardew Valley2025-06-21 21:55 - 23:46: A+ - Childcare2025-06-21 21:25 - 21:55: Personal - Routines2025-06-21 20:38 - 21:25: Unpaid work - Clean the kitchen2025-06-21 19:36 - 20:38: Unpaid work - Cook2025-06-21 19:21 - 19:36: Unpaid work - Clean the kitchen2025-06-21 19:05 - 19:21: Personal - Routines2025-06-21 18:05 - 19:05: Unpaid work - Cook2025-06-21 17:35 - 18:05: Unpaid work - Cook2025-06-21 15:56 - 17:35: Discretionary - Play - Stardew Valley2025-06-21 14:40 - 15:56: Discretionary - Productive - Coding2025-06-21 14:33 - 14:40: Unpaid work - Clean the kitchen2025-06-21 14:30 - 14:33: Unpaid work - Clean the kitchen2025-06-21 12:55 - 14:30: Discretionary - Productive - Coding2025-06-21 12:20 - 12:55: Discretionary - Play - Stardew Valley2025-06-21 11:20 - 12:20: Discretionary - Productive - Emacs2025-06-21 11:07 - 11:20: Discretionary - Productive - Bike Brigade2025-06-21 10:42 - 11:07: Discretionary - Family2025-06-21 10:33 - 10:42: Business - Build - Paperwork2025-06-21 10:12 - 10:33: Discretionary - Productive - Bike Brigade2025-06-21 09:32 - 10:12: Discretionary - Productive - Gardening2025-06-21 09:08 - 09:32: Personal - Routines2025-06-21 08:27 - 09:08: Discretionary - Productive - Writing2025-06-21 06:55 - 08:27: Personal - Routines2025-06-21 00:38 - 06:55: Sleep2025-06-21 00:24 - 00:38: A+ - Childcare2025-06-20 22:06 - 00:24: Discretionary - Play - Stardew Valley2025-06-22 23:19 - 06:55: Sleep2025-06-22 23:07 - 23:19: Personal - Routines2025-06-22 21:07 - 23:07: A+ - Childcare2025-06-22 20:30 - 21:07: Personal - Routines2025-06-22 19:45 - 20:30: Discretionary - Play - Stardew Valley2025-06-22 19:38 - 19:45: Personal - Routines2025-06-22 19:28 - 19:38: Unpaid work - Clean the kitchen2025-06-22 16:10 - 19:28: Discretionary - Play - Stardew Valley2025-06-22 16:07 - 16:10: Personal - Routines2025-06-22 14:47 - 16:07: Discretionary - Play - Stardew Valley2025-06-22 14:45 - 14:47: Discretionary - Productive - Tracking2025-06-22 14:03 - 14:45: Personal - Routines2025-06-22 13:52 - 14:03: Discretionary - Play - Stardew Valley2025-06-22 13:20 - 13:52: Personal - Plan2025-06-22 13:20 - 13:20: Discretionary - Productive - Tracking2025-06-22 12:14 - 13:20: Discretionary - Productive - Coding2025-06-22 11:04 - 12:14: Personal - Routines2025-06-22 09:54 - 11:04: Discretionary - Productive - Bike Brigade2025-06-22 09:53 - 09:54: Discretionary - Productive - Music2025-06-22 09:13 - 09:53: Discretionary - Productive - Gardening2025-06-22 06:57 - 09:13: Personal - Routines2025-06-22 01:10 - 06:57: Sleep2025-06-21 23:46 - 01:10: Discretionary - Play - Stardew Valley2025-06-23 23:48 - 06:57: Sleep2025-06-23 23:38 - 23:48: Personal - Routines2025-06-23 22:36 - 23:38: Discretionary - Play - Stardew Valley2025-06-23 22:21 - 22:36: Personal - Routines2025-06-23 21:36 - 22:21: A+ - Childcare2025-06-23 20:51 - 21:36: Personal - Routines2025-06-23 20:22 - 20:51: Discretionary - Productive - Sewing2025-06-23 19:19 - 20:22: Personal - Routines2025-06-23 18:11 - 19:19: Discretionary - Play - Stardew Valley2025-06-23 18:11 - 18:11: Personal - Routines2025-06-23 17:38 - 18:11: Sleep2025-06-23 17:01 - 17:38: Personal - Routines2025-06-23 13:26 - 17:01: Sleep2025-06-23 13:23 - 13:26: A+ - Childcare2025-06-23 13:15 - 13:23: Sleep2025-06-23 12:06 - 13:15: Discretionary - Play - Stardew Valley2025-06-23 11:51 - 12:06: Unpaid work - Clean the kitchen2025-06-23 11:06 - 11:51: Personal - Routines2025-06-23 09:57 - 11:06: Discretionary - Productive - Emacs2025-06-23 09:25 - 09:57: Discretionary - Play - Stardew Valley2025-06-23 08:54 - 09:25: Discretionary - Productive - Music2025-06-23 08:40 - 08:54: Discretionary - Productive - Gardening2025-06-23 06:55 - 08:40: Personal - Routines2025-06-22 23:19 - 06:55: Sleep2025-06-24 22:57 - 01:04: Discretionary - Play - Stardew Valley2025-06-24 22:12 - 22:57: Personal - Routines2025-06-24 21:28 - 22:12: A+ - Childcare2025-06-24 21:24 - 21:28: A+ - Childcare2025-06-24 21:19 - 21:24: A+ - Childcare2025-06-24 21:05 - 21:19: Discretionary - Productive - Emacs2025-06-24 20:55 - 21:05: Discretionary - Productive - Music2025-06-24 20:17 - 20:55: Unpaid work - Cook2025-06-24 19:13 - 20:17: Personal - Routines2025-06-24 14:46 - 19:13: A+ - Childcare2025-06-24 14:26 - 14:46: Discretionary - Productive - Writing2025-06-24 14:17 - 14:26: Discretionary - Productive - Gardening2025-06-24 14:16 - 14:17: Discretionary - Productive - Writing2025-06-24 14:11 - 14:16: Discretionary - Productive - Gardening2025-06-24 14:10 - 14:11: Unpaid work - Clean the kitchen2025-06-24 13:53 - 14:10: Unpaid work - Tidy up2025-06-24 13:23 - 13:53: Discretionary - Play - Stardew Valley2025-06-24 12:55 - 13:23: Personal - Routines2025-06-24 11:55 - 12:55: Discretionary - Play - Stardew Valley2025-06-24 11:17 - 11:55: A+ - Childcare2025-06-24 10:17 - 11:17: Personal - Plan2025-06-24 09:58 - 10:17: Personal - Routines2025-06-24 09:43 - 09:58: A+ - Childcare2025-06-24 09:15 - 09:43: Personal - Plan2025-06-24 08:46 - 09:15: Unpaid work - Clean the kitchen2025-06-24 08:31 - 08:46: Unpaid work - Cook2025-06-24 08:12 - 08:31: Discretionary - Productive - Gardening2025-06-24 06:57 - 08:12: Personal - Routines2025-06-23 23:48 - 06:57: Sleep2025-06-25 23:01 - 01:19: Discretionary - Play - Stardew Valley2025-06-25 22:39 - 23:01: A+ - Childcare2025-06-25 21:51 - 22:39: Discretionary - Play - Stardew Valley2025-06-25 21:41 - 21:51: Personal - Routines2025-06-25 21:15 - 21:41: Discretionary - Play - Stardew Valley2025-06-25 20:47 - 21:15: Personal - Routines2025-06-25 20:33 - 20:47: Discretionary - Productive - Music2025-06-25 18:57 - 20:33: A+ - Childcare2025-06-25 18:42 - 18:57: Unpaid work - Clean the kitchen2025-06-25 18:06 - 18:42: Personal - Routines2025-06-25 15:07 - 18:06: A+ - Childcare2025-06-25 11:58 - 15:07: Discretionary - Productive - Emacs2025-06-25 10:58 - 11:58: A+ - Childcare2025-06-25 10:43 - 10:58: Discretionary - Play - Stardew Valley2025-06-25 10:07 - 10:43: Discretionary - Productive - Coding2025-06-25 09:52 - 10:07: Personal - Routines2025-06-25 09:04 - 09:52: Discretionary - Productive - Emacs2025-06-25 09:04 - 09:04: Discretionary - Productive - Emacs2025-06-25 09:01 - 09:04: Discretionary - Productive - Writing2025-06-25 08:59 - 09:01: Discretionary - Productive - Writing2025-06-25 08:25 - 08:59: Discretionary - Productive - Gardening2025-06-25 06:58 - 08:25: Personal - Routines2025-06-25 01:04 - 06:58: Sleep2025-06-24 22:57 - 01:04: Discretionary - Play - Stardew Valley2025-06-26 21:55 - 00:38: Discretionary - Play - Stardew Valley2025-06-26 21:24 - 21:55: A+ - Childcare2025-06-26 21:05 - 21:24: Personal - Routines2025-06-26 20:03 - 21:05: Discretionary - Play - Stardew Valley2025-06-26 19:44 - 20:03: Discretionary - Productive - Bike Brigade2025-06-26 19:27 - 19:44: Personal - Routines2025-06-26 19:17 - 19:27: Unpaid work - Clean the kitchen2025-06-26 19:00 - 19:17: Personal - Routines2025-06-26 18:30 - 19:00: Personal - Routines2025-06-26 14:56 - 18:30: Discretionary - Productive - Sewing2025-06-26 14:46 - 14:56: A+ - Childcare2025-06-26 13:48 - 14:46: Discretionary - Play - Stardew Valley2025-06-26 13:18 - 13:48: Discretionary - Productive - Writing2025-06-26 12:47 - 13:18: Personal - Routines2025-06-26 12:36 - 12:47: Discretionary - Productive - Writing2025-06-26 12:19 - 12:36: Unpaid work - Clean the kitchen2025-06-26 12:11 - 12:19: Discretionary - Play - Stardew Valley2025-06-26 09:35 - 12:11: A+ - Childcare2025-06-26 09:27 - 09:35: Discretionary - Productive - Emacs2025-06-26 08:42 - 09:27: Discretionary - Productive - Bike Brigade2025-06-26 06:57 - 08:42: Personal - Routines2025-06-26 01:22 - 06:57: Sleep2025-06-26 01:19 - 01:22: Personal - Routines2025-06-25 23:01 - 01:19: Discretionary - Play - Stardew Valley2025-06-27 22:19 - 00:34: Discretionary - Play - Stardew Valley2025-06-27 22:17 - 22:19: Personal - Routines2025-06-27 20:49 - 22:17: A+ - Childcare2025-06-27 20:19 - 20:49: Personal - Routines2025-06-27 19:55 - 20:19: Discretionary - Play - Stardew Valley2025-06-27 19:50 - 19:55: Personal - Routines2025-06-27 19:36 - 19:50: Unpaid work - Clean the kitchen2025-06-27 13:56 - 19:36: A+ - Childcare2025-06-27 12:56 - 13:56: Discretionary - Productive - Sewing2025-06-27 12:46 - 12:56: Personal - Routines2025-06-27 12:15 - 12:46: Discretionary - Productive - Gardening2025-06-27 12:13 - 12:15: Unpaid work - Clean the kitchen2025-06-27 12:13 - 12:13: Unpaid work - Clean the kitchen2025-06-27 11:58 - 12:13: Personal - Routines2025-06-27 11:13 - 11:58: A+ - Childcare2025-06-27 10:00 - 11:13: Discretionary - Productive - Writing2025-06-27 09:49 - 10:00: Personal - Routines2025-06-27 09:38 - 09:49: A+ - Childcare2025-06-27 09:33 - 09:38: Discretionary - Play - Stardew Valley2025-06-27 09:00 - 09:33: Personal - Routines2025-06-27 08:33 - 09:00: Discretionary - Productive - Music2025-06-27 08:03 - 08:33: Personal - Routines2025-06-27 07:33 - 08:03: A+ - Childcare2025-06-27 06:58 - 07:33: Personal - Routines2025-06-27 00:38 - 06:58: Sleep2025-06-26 21:55 - 00:38: Discretionary - Play - Stardew Valley2025-06-28 23:34 - 01:00: Discretionary - Play - Stardew Valley2025-06-28 23:27 - 23:34: Personal - Routines2025-06-28 22:08 - 23:27: A+ - Childcare2025-06-28 22:03 - 22:08: A+ - Childcare2025-06-28 21:45 - 22:03: Personal - Routines2025-06-28 21:15 - 21:45: Unpaid work - Clean the kitchen2025-06-28 20:34 - 21:15: Personal - Routines2025-06-28 18:35 - 20:34: Unpaid work - Cook2025-06-28 18:35 - 18:35: Personal - Routines2025-06-28 17:34 - 18:35: Unpaid work - Cook2025-06-28 16:14 - 17:34: A+ - Childcare2025-06-28 15:19 - 16:14: Discretionary - Productive - Sewing2025-06-28 14:49 - 15:19: Discretionary - Play - Stardew Valley2025-06-28 13:52 - 14:49: Unpaid work - Tidy up2025-06-28 12:16 - 13:52: Discretionary - Play - Stardew Valley2025-06-28 12:16 - 12:16: Discretionary - Productive - Drawing2025-06-28 11:20 - 12:16: Discretionary - Productive - Drawing2025-06-28 11:16 - 11:20: Personal - Routines2025-06-28 10:51 - 11:16: Discretionary - Productive - Music2025-06-28 10:17 - 10:51: Discretionary - Productive - Bike Brigade2025-06-28 09:17 - 10:17: Unpaid work - Errands2025-06-28 07:46 - 09:17: Personal - Routines2025-06-28 00:34 - 07:46: Sleep2025-06-27 22:19 - 00:34: Discretionary - Play - Stardew Valley2025-06-29 22:25 - 00:53: Discretionary - Play - Stardew Valley2025-06-29 22:19 - 22:25: Personal - Routines2025-06-29 21:19 - 22:19: A+ - Childcare2025-06-29 20:44 - 21:19: Discretionary - Productive - Sewing2025-06-29 20:14 - 20:44: Personal - Routines2025-06-29 19:44 - 20:14: Unpaid work - Clean the kitchen2025-06-29 19:17 - 19:44: Personal - Routines2025-06-29 18:57 - 19:17: Discretionary - Productive - Sewing2025-06-29 16:48 - 18:57: Discretionary - Play - Stardew Valley2025-06-29 16:20 - 16:48: Discretionary - Productive - Sewing2025-06-29 16:05 - 16:20: Unpaid work - Tidy up2025-06-29 15:32 - 16:05: Discretionary - Productive - Gardening2025-06-29 11:15 - 15:32: A+ - Childcare2025-06-29 10:55 - 11:15: Discretionary - Productive - Music2025-06-29 10:35 - 10:55: Discretionary - Productive - Gardening2025-06-29 09:26 - 10:35: Personal - Routines2025-06-29 01:00 - 09:26: Sleep2025-06-28 23:34 - 01:00: Discretionary - Play - Stardew Valley2025-06-30 22:18 - 00:42: Discretionary - Play - Stardew Valley2025-06-30 21:59 - 22:18: A+ - Childcare2025-06-30 21:46 - 21:59: Discretionary - Productive - Emacs2025-06-30 21:40 - 21:46: Unpaid work - Clean the kitchen2025-06-30 21:15 - 21:40: A+ - Childcare2025-06-30 21:08 - 21:15: Discretionary - Play - Stardew Valley2025-06-30 20:12 - 21:08: A+ - Childcare2025-06-30 20:08 - 20:12: Unpaid work - Clean the kitchen2025-06-30 19:19 - 20:08: Discretionary - Play - Stardew Valley2025-06-30 19:10 - 19:19: Unpaid work - Clean the kitchen2025-06-30 17:41 - 19:10: A+ - Childcare2025-06-30 16:43 - 17:41: Discretionary - Play - Stardew Valley2025-06-30 16:38 - 16:43: Business - Earn - Consulting - E1 - General2025-06-30 16:36 - 16:38: Personal - Routines2025-06-30 16:34 - 16:36: Business - Earn - Consulting - E1 - General2025-06-30 15:25 - 16:34: Discretionary - Productive - Emacs2025-06-30 15:24 - 15:25: Discretionary - Productive - Emacs2025-06-30 15:13 - 15:24: A+ - Childcare2025-06-30 15:07 - 15:13: Unpaid work - Laundry2025-06-30 14:49 - 15:07: Personal - Routines2025-06-30 10:43 - 14:49: A+ - Childcare2025-06-30 10:43 - 10:43: Discretionary - Productive - Gardening2025-06-30 10:28 - 10:43: Discretionary - Play - Read - Fiction2025-06-30 10:14 - 10:28: A+ - Childcare2025-06-30 10:03 - 10:14: A+ - Childcare2025-06-30 09:33 - 10:03: Discretionary - Productive - Sewing2025-06-30 09:18 - 09:33: Discretionary - Productive - Sewing2025-06-30 08:53 - 09:18: Discretionary - Productive - Music2025-06-30 08:14 - 08:53: Personal - Routines2025-06-30 07:48 - 08:14: Discretionary - Play - Stardew Valley2025-06-30 07:23 - 07:48: Personal - Routines2025-06-30 00:53 - 07:23: Sleep2025-06-29 22:25 - 00:53: Discretionary - Play - Stardew Valley
View org source for this post

2025-06-30 Emacs news

| emacs, emacs-news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post

2025-06-23 Emacs news

Posted: - Modified: | emacs, emacs-news

[2025-06-25 Wed]: Removed reposted video.

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post

The wobble is not the obstacle, it's the way

| life, parenting
2025-06-10 catastrophizing.jpg

9 PM on a schoolday, time for me to nudge A+ off to bed. A+ is clicking through the Stardew Valley wiki, slurping up all sorts of trivia that she'll probably trickle into our conversations. There are two pieces of homework left to do, one with quite a few slides to complete. And drawing. She's not a big fan of drawing assignments. "My hand is tired," she says.

I try to be calm and supportive. I wobble. Could've done this earlier, I think. I manage to keep myself from saying it. I teeter, noticing myself mentally fast-forwarding decades ahead. Oh no, she's not going to get the hang of doing things that she finds boring, she won't develop study skills or executive control, she'll cram through all the classes she can coast in, and all of it will come crashing down in university when she might actually need to buckle down and study.

She's 9! She's a long way from university.

I'm learning to embrace my anxiety and appreciate how it tries to keep us all safe. This feeling makes sense. I want to help her avoid mistakes, especially when the feedback cycle is long and the results of choices will only be seen much later.

But anxiety gets in the way of parenting. If I let the fearful part of my brain take over, I'll inadvertently teach her that mistakes are catastrophic rather than just ordinary Tuesdays. I want to hold her steady, but the wobbles are how we learn.

It's somewhat manageable now, when we can talk about these things openly. A+ can laugh off my worries ("Mom, you're fretting again,") and W- can remind me to slow down when it runs away with me. He's usually pretty chill about all this. It'll be harder when the cognitive rewiring of puberty or menopause turn ordinary conversations into minefields right when the stakes get higher. The more I tighten my grip, the more star systems will slip through my fingers. (There I go again with catastrophizing.)

Besides, I want to help A+ avoid the paralysis of perfectionism or self-recrimination. I want her to be able to experiment, and to pick herself up and try again if things don't work out the first time around. To do that, I need to learn to change my perspective from being anxious about mistakes to seeing the opportunities for re-takes.

There are many things I can't teach A+. Some things can't fully be taught, they can only be learned, like how to balance the clay on the pottery wheel. Sometimes I don't even know what the right answer would be, like what kinds of tips work for her particular brain. Some things change over time and she'll need to change with them, like how to adapt to life's situations. She'll need to learn how to learn instead of relying on one fixed answer.

2025-06-10 loops.jpg

Fortunately, life comes with so many opportunities to practise. The Toronto public school calendar has 187 instructional days, so she gets plenty of chances to manage her homework and get feedback. The repetitive nature of things used to frustrate me when it came to my tasks (always more dishes to wash, always more clothes to fold), but it's good for learning, especially while the stakes are low. It's her experiment, I remind myself. About half the time, she doesn't even want my help. ("I can do it, Mom.") She's sensible enough to try things out on small experiments instead of scary ones: shopping at the grocery store on her own, not skydiving.

There's plenty of stuff for me to learn while she learns. When I get the urge to correct her work ("How does that line up with the rubric?") or nag her to get her work done, I tell myself:

  • Is it really a problem? The teacher isn't expecting her to completely master all the skills, and the teacher is in a good place to give developmentally-appropriate feedback. I can let her experiment with how much work she wants to put into things, and she can see what that results in. Despite all my twitchiness about how she puts off her daily homework until 9 PM, she still manages to get things done. Judging from the frequent reminders her teacher gives the virtual class, she's probably ahead of the curve. So maybe it's not a problem.
  • Whose problem is it? Something might not be my problem. It might not even be her problem. She reads during class time, for instance. Sometimes she misses something that can't be figured out from just the homework slide deck. Maybe that's partly her experimenting to find the right balance between attention and stimulation. Maybe that's also partly a consequence of how school is designed to go at the group's pace. Not entirely her problem.

The more I let go of the small stuff, the more experience she'll be able to draw on for the big stuff. I hope she'll get the hang of thinking of life as mostly series of little experiments, and to notice when there's a bigger choice that needs more thinking because it's more long-term. The more she decides, the more confidence we both develop in her decisions.

This reminds me of how kids learn how to bike. The popular approach uses training wheels to prevent falls. The idea is to gradually raise them as the kid improves, but I usually see kids pedaling along (perhaps slightly leaning over to one side) to match the slowness of parents' walking. It's hard to balance when you're going slow. But pedaling isn't the hard part. Balancing is, and you develop balance by balancing. Maybe that's a little like how I get tempted to rescue A+ from the results of some of her choices, but letting her try things is how to help her learn.

2025-06-10 balance bike.jpg

A+ learned how to bike using a balance bike instead of using training wheels. When she was two, she toddled along on a Strider, which was light enough for her to manage. Eventually she figured out coasting. She was proud of being able to do it on her own. Then we upgraded her to a Cleary Gecko freewheel bike, with proper hand-brakes and everything. After a few attempts with us holding her under her armpits, she was ready for us to steady her with a hand on her back, and then for us to be close, and then she was off on her own. She fell and skinned her knee many times, developing an appreciation of pants for protection and ice cream for comfort. The more she biked, the more she learned how to notice that feeling of being slightly off-balance, and the better she got at correcting it. Now we can bike on the streets together.

You can't learn how to bike if the training wheels are always on, or if someone's always holding you steady. It's okay to wobble and fall and get up. You learn that you can survive a skinned knee, and so you keep going.

Sometimes, when A+'s in the middle of a meltdown, I have to remind myself not to try to fix it in the moment. That doesn't work, anyway. Just take the loss and try again next time. Sometimes, once we've both calmed down, I ask A+ to imagine rewinding back to a situation so we can play it out a little differently. Sorry, I meant to say this, not that. Would that work better? Next time.

Not mistakes. Data. Just another step in the journey.

conscientiousness-piano.jpg

Getting better at getting better helps me, too. I've been practising piano, making steady progress through the Simply Piano app. I've been playing for about four months now. I took piano lessons as a kid, but not to any serious extent. Back then, I got bored with the simple exercises I had to do. Now I feel slow, snail-slow, but I can savour the way my mind is beginning to get the hang of things, knowing that it will take me many tries to get the hang of it. I'm starting to be able to look at the notes and remember the phrases, imagine what the next sequence will sound like before I play it, and notice how my hands move to make it happen.

When my fingers wobble on the keys, I slow down and try again. There's no point in berating myself. If my mind keeps hiccuping or my fingers keep stumbling, I can think: ah, is this because I'm tired, or because I want to do something else, or just because I'm learning and it takes time to get the hang of things? I'm getting better at figuring out when I should probably call it a day so that I don't practise mistakes into my muscle memory and when I might benefit from just slowing down the segment.

I still stumble through pieces I've successfully played before. Remembering is hard. But I'm getting better at being patient with myself, accepting that it's because I'm still in the middle of the journey. It's not a mistake that I should grump at myself about. It's just part of a re-take. This is what learning looks (and sounds) like. Of course it doesn't start out perfectly smooth.

Here's me learning Mozart's "Rondo alla Turca", with the app providing accompaniment in the background. It's not perfect, but it's progress.

・・・・・

We were at the playground. I ate the remaining crackers in the snack box because I thought A+ was done. Turns out she was saving them for later. She was very upset. I apologized and promised to ask next time, but she was too far gone to hear.

That was a tough moment. A+ was already emotionally off-balance because the playdate hadn't gone as well as it usually does. Discovering I had eaten the crackers she was looking forward to was the last straw. She dissolved into tears. I snuggled her and settled in for a long wait. I think: Where's the line between comforting her and coddling her? Does my anxiety teach her this is too hard to handle? We're not quite at the point of being able to shrug off mistakes. I remind myself that she'll learn what she's ready to learn.

Looking around while A+ drenched my left shoulder, I noticed a skateboarder on the park road. Maybe a man in his thirties? He was trying to jump his skateboard over a low concrete lane divider. He had been at it for a while before I noticed. Most times, he was able to clear the divider, but the skateboard slowed down too much on the other side and he had to jump off. On the seventh try that I saw, he landed back on the skateboard and rolled on for a bit. Success! He tried again and failed. Four more failures before his next success. One more attempt–another failure–and then he called it a day. I'm sure he'll be back at it.

A+ continued to cry. My phone buzzed, reminding me that we probably wanted to get going before the rain in the forecast. I carried her as I picked up our bags and put them in my bike. Eventually I needed to gradually ease her off me. She curled up in the bucket of my front-loader cargo bike, still crying. I tucked the towel around her like a blanket, buckled her bike into the tow-bag, and walked the bikes home. She fell asleep.

A wobble, a fall. But I'm sure we'll be back at it too. (And we did; the next day, she was happily playing with her friends again.)

・・・・・

It's hard to be in the moment. Sometimes the moment sucks. It's hard to be far ahead in the future. It makes decisions feel too big. Do-overs make things just the right size. If we can get good at shrugging off the inevitable failures and treating them as data so that we can sketch out ideas for the next experiment, I think that'd be pretty cool. Instead of "Oh no!" or even "Are you sure about that?" (what kid likes to be doubted?), I can lean towards, "Hmm, let's find out."

As predicted, we had another late-night homework situation. This time she had a headache and wanted to go to bed, homework unfinished. I was able to let go and just focus on snuggling her in. The next day, after morning routines and without any nagging, she did the homework and submitted it. Late, but done.

There'll be another bedtime homework session, I'm sure. I have to trust that even though I want to shortcut the learning for her, she's got this. She's figuring things out. If we stumble, that just helps us practice for next time, and there are so many opportunities to try again. The wobble is not the obstacle, it's the way.1

This post is yet another take on the June IndieWeb Carnival theme of Take Two. Here are two other ones: Making and re-making: fabric is tuition and Thinking about time travel with the Emacs text editor, Org Mode, and backups.

Related reflections:

Footnotes

1

Related: The Obstacle is the Way, Ryan Holiday's book on Stoicism; the title rephrases this thought from Marcus Aurelius's Meditations: "… and that which is an obstacle on the road helps us on this road."

View org source for this post

Thinking about time travel with the Emacs text editor, Org Mode, and backups

| emacs, org

Sometimes I just need to rewind 15 minutes. That's the length of A+'s recess at virtual school, which she does at home. At recess, she often likes to get hugs and sometimes a snack. If I'm working on something that requires sustained thought, like code or a blog post, I can't hold those thoughts in my head for that long while cheerfully listening to A+ share the trivia she's read on the Stardew Valley wiki. If I try to keep my train of thought, I get grumpy. I'd rather get better at time travel instead. Naturally, this calls for Emacs.

For people who are unfamiliar with Emacs or Org Mode

GNU Emacs is a highly customizable program for editing text, writing code, and doing mostly whatever people want to get it to do. Org Mode is a package (or ecosystem of packages, really) that modifies GNU Emacs to make it easier to take notes, plan tasks, export documents, and so on. If you're not into Emacs yet, this post might be a little technical, but maybe there are ways to translate some of the ideas to things you're using.

What was I doing again?

Sometimes recess totally resets my brain and I can't even think of what I was just working on. To make it easier to hit the ground running, I try to make a habit of creating a task in Org Mode before I start working on it. Or, more realistically, halfway through, when I realize I have to first do another thing, so then I jot down a quick task for the work I was previously doing and another task for the tangent I'm about to go on. That way, I can quickly check my notes to see what I was doing. org-capture (which I've bound to C-c r) is handy for that. I have a template (t) that creates a timestamped TODO that links to the context I created it in (files, note headings, etc.) and saves it to my inbox file. Then I can jump to my inbox file with a keyboard shortcut and look at what I need to get back to doing.

Sometimes I vaguely remember that I've already created a task for this before and I can find it with C-u C-c C-w (org-refile). When org-refile is called with a universal prefix argument (C-u), it will prompt for a heading in org-refile-targets and jump to it. I have it set to complete the outline path, so I can try to find things by project. Failing that, I might have a quick rummage in my inbox. I usually don't remember the exact words I used in the the task title, though. Maybe someday I'll get the hang of org-ql or p-search (Emacsconf talk on p-search), resurrect the Remembrance Agent so that it can continuously do bag-of-words matching, or use embeddings to find semantically similar tasks and notes. In the meantime, capturing the task is more important than avoiding duplicates. I can find and clean up duplicates later on.

All of that is moot when I'm away from my computer, which is most of the time. My phone is pretty handy for quick notes, though. I use Orgzly Revived to capture a quick note in my inbox. This gets synchronized with my Org Mode notes using Syncthing.

Hmm, I gotta do this first…

Often the interruption doesn't even come from outside, but from my brain's endless stream of interesting ideas. Some of those ideas can be saved as tasks to work on eventually, but sometimes I need to pause my current task and work on the new idea. I have a template for an interrupting task (i) that automatically clocks out of the previous task and clocks into the new one.

My template for interrupting tasks

This is the entry in my org-capture-templates.

        ("i" "Interrupting task" entry
         (file ,my-org-inbox-file)
         "* STARTED %^{Task}\n:PROPERTIES:\n:CREATED: %U\n:END:\n%a\n"
         :clock-in :clock-resume
         :prepend t)

Okay, that's done, what was I doing before?

If I clock into tasks, I can use org-clock-goto along with the C-u universal prefix (C-u C-c C-x C-j) to see a list of recently-clocked-in tasks. This is great for "popping the stack," which is how I think of backtracking once I finished an interrupting task.

I usually forget to clock out. That's okay. I'm not looking for precise total times, just breadcrumbs.

… What was I thinking?

Sometimes a few keywords aren't enough to jog my memory. Whenever I think, "Ah, this is easy, I don't need to take notes," I inevitably regret it. Sometimes I realize I have to re-do my thinking fifteen minutes later, when singing 4-Town songs with A+ has pushed those thoughts out of my brain. Sometimes I have to re-do my thinking several months later, which is even harder.

Notes are super-helpful. I love the way Org Mode lets me write notes, paste in hyperlinks, add snippets of code, save the results of my explorations, include my sketches, and even export them as blog posts or documents to share.

Sometimes I have to go back farther into the past

It can take me months or even years before I can circle back to a project or idea. It can be hard to reconstruct my thinking after a lot of time has passed, so it's good to write down as much as possible. Taking notes feels slower than just plunging ahead, but they help me travel back in time to try to remember.

This really gets hammered in when I run into things I've forgotten, like when I dusted off my time-tracking code so I could make some changes. In the four years that elapsed between Aug 2020 (my last change) and Oct 2024 (when I decided to upgrade it to the latest version of Rails), I'd forgotten how to even run a development version of my code. Whoops. I ended up taking more notes along the way.

I try to keep project-related notes as close to the project files as possible, like a README.org in the project directory. Sometimes I don't even remember what the project is called. I try to keep another file that indexes things on my computer as well as things in real life.

Sometimes I know I wrote tasks or notes down before but I can't remember the exact words I used for them. I'm curious about whether embeddings might help me find those things again. So far it's been okay to just add a new task or note, and then periodically clean up entries that are no longer needed.

Going sideways

Sometimes I want to visit alternate timelines, trying different ways to do something. I really like the way undo works in Emacs. It's different from most programs. Emacs keeps the things you undo/redo.

Let's say I start writing a paragraph or a piece of code. I change my mind about something. Maybe I undo, maybe I cut, maybe I delete. I write again. I change my mind again. The first way was better, maybe. I can go back to that, step through any of the intermediate changes, consider the other version again. It's not lost.

Actually navigating the Emacs undo history can be tricky. I like using the vundo package for that. It shows a compact view of the different branches of this timeline so that I can easily jump between them or compare them.

[2025-06-26 Thu] Check out Undo finally clicked with vundo | shom.dev for a screenshot and some explanation of vundo.

If I'm working on something more complicated, like code, I might make changes over several sessions. This is where version control is handy. I like using the Git version control system, especially with the Magit package. I can commit versions of the files manually along with a quick note about what I changed or what I'm trying. This allows me to easily reset to a certain point.

Sometimes I'm good about picking the right point to commit: I've made decent progress and things are working. Sometimes I realize only later on that I probably should have saved a commit a little while ago, and now I'm halfway through another idea that I'm not going to have time to finish and that leaves my project in a non-working state. In that situation, sometimes I'll use the visual undo provided by the vundo package to go backwards to a version that looks about right, save that file, commit it with a quick note, and then go forward in time again.

Saving revisions in Git makes it much easier to go backwards in time even if I've restarted my computer. magit-blame and vc-annotate give me slightly different views showing me the changes in a file. They don't show me information on deleted sections, though. For that, I can use the magit-diff command to compare versions. Sometimes it's easier to flip through the history of a single file with git-timemachine.

Git lets me name different experimental timelines (branches) and logically group changes together. It means I don't have to worry so much about messing up a working file, since I can travel back in time to that version. It also means I can easily compare them to see what I've changed so far.

In addition to using version control for various projects, I also save backup files to a separate directory by setting my backup-directory-alist to (("." . "~/.config/emacs/backups")). Disk space is cheap; might as well keep all the backups. I sometimes manually go into this directory to find older versions of things. It occurs to me that it might be good to flip through the backups in the same way that git-time-machine makes it easy to flip through git revisions. I'm trying out lewang/backup-walker, which shows the incremental diffs between versions. It was last updated 12 years ago(!), but can easily be dusted off to work with Emacs 30 by defining some functions that it's looking for. Here's my config snippet:

(use-package backup-walker
  :vc (:url "https://github.com/lewang/backup-walker")
  :init
  (defalias 'string-to-int 'string-to-number)
  (defalias 'display-buffer-other-window 'display-buffer))

Into the future

It's not all about going back to the past. Sometimes I want to plan ahead: tasks that I want to schedule for a certain date, pre-mortems to help me make decisions, gifts for my future self. I use Google Calendar for appointments and other things I might want to share with W- for planning, but there are lots of other things that aren't tied to a specific time and date. The agenda feature of Org Mode is handy for scheduling things and moving them around.

Scheduled tasks don't work out so well if my agenda gets cluttered by things I ignore, so if I find myself procrastinating something a lot, I think about whether I really want to do whatever it is I've written down.

Some notes aren't associated with specific dates, but with other events that might happen. I have an Org Mode outline with various subheadings under "In case of…", although I often forget to check these or have a hard time finding them again. Maybe someday I can write a script that analyzes the words I use in my journal entries or tasks and finds the notes that approximately match those keywords.

Things I want to try

Thinking out loud more might be worth experimenting with, since I can do that while I'm working in a different file. I've used my audio recorder to record braindumps and I have a workflow for transcribing those with OpenAI Whisper. I think it would be even more useful to have an org-capture equivalent so that I can capture the thought by audio, save the recording in case there are recognition errors (highly likely because of the technical terms), and save the context. Or maybe an even neater interface that keeps an ear out for keywords, executes commands based on them, and saves the rest as notes? whisper-ctranslate2 has a live_transcribe option that works reasonably well after a short delay, and maybe I can use a process filter to pull the information out or write a custom Python script.

I appreciate how working with plain text can help me jump backward or forward in time. I'm looking forward to seeing how this can be even better!

This post was inspired by Emacs Carnival 2025-06: Take Two • Christian Tietze and IndieWeb Carnival: Take Two. Check those out for related blog posts!

This is, in fact, my second take on the topic. =) Here's my first one: Making and re-making: fabric is tuition

View org source for this post