Emacs steno interface so far

| emacs

2021-06-28: Added completion with stroke info.

So here's what I have so far:

  • a stroke log (using plover-websocket)
  • Clippy suggestions (using inotify to watch clippy.txt)
  • a scratch pad that I can quickly add the Clippy suggestions to


    Figure 1: stroke log, suggestions, scratch pad

  • cheatsheets that pop up with a stroke and pass the next keystroke through so that I can just keep typing


    Figure 2: Emily's modifiers cheatsheet

  • frequency-sorted word completion with stroke information


    Figure 3: This should make fingerspelling easier.

  • briefing with Briefpedia suggestions, conflicts, and alternatives for the conflicting entry.


    Figure 4: briefing

  • steno practice that runs off Org tables or word lists, displays hints, and doesn't require me to star out misstrokes (although I can if I want)


    Figure 5: suggestions, phrases


    Figure 6: Afterwards, there's a simple review list that includes the entry before the misstroked one.

  • word-based commands


    Figure 7: I can use friendly names and a custom order for commands, still be able to access all the other commands by name, and have a specific action handle input that doesn't match any of the completions.

  • defining briefs from Org Mode tables
  • automatically toggling dictionaries for types of prompts (ex: reading outlines)
  • automatically toggling modes and removing extra dashes/spaces for things like defining a function
  • outlines for toggling Emacs (raising or lowering the window) and other matching windows
  • and a plugin that allows dictionary entries such as:
    • {plover:emacs_mx:my/plover-brief-with-check}
    • {plover:emacs_key:M-RET}
    • {plover:emacsclient_current:(my/org-edit-special-dwim)}

It probably won't work for other people yet, but maybe I can play around with ideas and we can try to get some working on other people's computers. Some of the code is in the Plover section of my config (https://sachachua.com/dotemacs#plover), if you want to explore!

View or add comments

Weekly review: Week ending June 18, 2021

| review, weekly
  • Steno:
    • I added Clippy output to Emacs so that I can get better at writing.
    • I added a Plover stroke log to Emacs and tweaked my briefing workflow.
    • I started trying to edit subtitles with my hilariously slow stenoing speed :) I think I did three minutes in the last hour. Granted, most of that was taken up by tinkering on an interface for editing subtitles with stenoable commands like "delete …".
  • Gardening:
    • We went to the garden store and bought mulch.
    • It's a good thing I checked the dwarf cherry tomatoes. A few of them were already ripe.
    • I swapped seedlings with a neighbour.
    • I trimmed the tips of the peppers so that they can grow bushier.
  • Sewing:
    • I ordered some fabric so that I can sew dresses and a swim skirt.
    • I took my sewing to the playground and did a few stitches while waiting for A- to be done with the splash pad.
    • I was a little frustrated because the glove I had been hand-sewing was a little too small for A-. I cheered myself up by sewing myself a glove using a simpler construction method.

Blog posts


Category The other week % Last week % Diff % h/wk Diff h/wk
Discretionary - Productive 6.7 11.3 4.6 18.9 7.7
Discretionary - Family 0.0 3.6 3.6 6.1 6.1
Sleep 31.0 32.5 1.5 54.6 2.6
Personal 7.0 7.8 0.8 13.1 1.4
Discretionary - Play 0.1 0.1 0.0 0.1 0.0
Discretionary - Social 0.2 0.0 -0.2 0.0 -0.3
Business 2.3 0.0 -2.3 0.0 -3.9
A- 43.6 40.0 -3.6 67.2 -6.0
Unpaid work 9.3 4.7 -4.5 7.9 -7.6
View or add comments

2021-06-21 Emacs news

| emacs, emacs-news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Hacker News, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar and emacs-devel.

View or add comments

Using inotify to add Plover Clippy suggestions into Emacs

| emacs

Update 2021-06-19: Changed to a vertical layout, added extra notes.

I don't have a lot of screen space on my laptop, so I don't usually have the Plover suggestion window open as I type. I came up with a Plover plugin to let me flash the last Plover Clippy suggestion as a temporary notification. It went by too quickly, though, so I wrote something that uses inotify to monitor the clippy.txt log and put it an Emacs buffer instead. It results in text like this:

Extra notes go here
(defvar my/clippy-recent-suggestions nil "Recent suggestions, limited by `my/clippy-recent-suggestions-limit`.")
(defvar my/clippy-recent-suggestions-limit 3 "Keep this many suggestions.")
(defvar my/clippy-extra-notes nil "Extra notes to add at the end.")
(defun my/clippy-last ()
  (let ((value (string-trim (shell-command-to-string "tail -1 ~/.config/plover/clippy.txt | cut -c 23-"))))
    (when (string-match "^\\(.*?\\)[ \t]+|| .*? -> \\(.+\\)" value)
      (cons (match-string 1 value) (match-string 2 value)))))

(defun my/clippy-show (&rest _)
  (with-current-buffer (get-buffer-create "*Clippy*")
    (let ((last (my/clippy-last)))
      (unless (member last my/clippy-recent-suggestions)
        (setq my/clippy-recent-suggestions (seq-take (cons last my/clippy-recent-suggestions) my/clippy-recent-suggestions-limit)))
      (insert (mapconcat (lambda (o) (format "%s\n%s\n" (car o) (cdr o))) my/clippy-recent-suggestions "")
              (or my/clippy-extra-notes "")))))

(defvar my/clippy-monitor nil)
(defun my/clippy-toggle-monitor ()
  (if (inotify-valid-p my/clippy-monitor)
        (message "Turning off")
        (inotify-rm-watch my/clippy-monitor))
    (message "Turning on")
    (setq my/clippy-monitor
           (expand-file-name "~/.config/plover/clippy.txt") 'modify

(defun my/clippy-org-subtree-to-notes ()
  "Copy this subtree's text to `my/clippy-extra-notes'."
    (unless (org-at-heading-p) (org-previous-visible-heading 1))
    (setq my/clippy-extra-notes

(defun my/clippy-add-note (string)
  (interactive "MNote: ")
  (setq my/clippy-extra-notes (concat (string-trim string) "\n" (or my/clippy-extra-notes "")))
This is part of my Emacs configuration.
View or add comments

2021-06-14 Emacs news

| emacs, emacs-news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Hacker News, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar and emacs-devel.

View or add comments

Weekly review: Week ending June 11, 2021

| review, weekly
  • We tweaked the kitchen layout and decluttered a few things.
  • Steno:
    • I practised some more with the metronome. I got a bit faster, but I think I still need to get the hang of hand position.
    • I modified my local version of typey-type to have the metronome running if selected in user settings.
    • I switched my Plover configuration to /dev/serial/by-id/usb-g_Heavy_Industries_Georgi-if02 so that I don't have to keep rescanning it.

Blog posts


Category The other week % Last week % Diff % h/wk Diff h/wk
Unpaid work 3.2 9.3 6.0 15.5 10.1
Business 0.3 2.3 2.1 3.9 3.5
Personal 6.1 7.0 0.9 11.7 1.5
Discretionary - Social 0.0 0.2 0.2 0.3 0.3
Discretionary - Play 0.0 0.1 0.1 0.1 0.1
Discretionary - Productive 8.9 6.7 -2.3 11.2 -3.8
A- 47.0 43.6 -3.4 73.2 -5.7
Sleep 34.5 31.0 -3.6 52.0 -6.0
View or add comments

Monthly review: May 2021

| monthly, review
  • I got my first dose of the COVID-19 vaccine!
  • A- got interested in making friends at the playground. She usually found one or two kids to play with. She also started trying out the splash pad.
  • My Georgi keyboard finally arrived. I can slowly write journal entries on the couch. It will take me a long time before I can get fast enough to keep up with videos and presentations, but hey, a journey of a thousand miles and all that… I've also been learning how to modify Plover and write plugins. Yay Python!
  • The garden is starting to take off. I moved many seedlings outside and started more. We planted flowers, too.
  • We sold A-'s old bikes and bought her a 16" one. She had lots of fun biking with us.
  • I sewed dresses for A-.

Blog posts


Category Previous month % This month % Diff % h/wk Diff h/wk
Discretionary - Productive 9.6 13.3 3.7 23.1 6.2
Unpaid work 3.4 5.4 2.0 9.4 3.4
Personal 5.3 6.6 1.4 11.5 2.3
Discretionary - Social 0.0 0.1 0.1 0.2 0.2
Discretionary - Family 0.0 0.0 0.0 0.1 0.1
Business 1.0 0.7 -0.3 1.1 -0.6
Discretionary - Play 0.7 0.1 -0.6 0.2 -1.0
Sleep 33.3 31.6 -1.7 54.9 -2.8
A- 46.7 42.1 -4.6 73.1 -7.7
View or add comments