diff options
30 files changed, 216 insertions, 35 deletions
diff --git a/modules/user-constants.el b/modules/user-constants.el index bae34bfe..717e179e 100644 --- a/modules/user-constants.el +++ b/modules/user-constants.el @@ -104,8 +104,8 @@ Used by transcription module and other audio-related functionality.") (defconst drill-dir (expand-file-name "drill/" org-dir) "The location of org-drill org files.") -(defconst snippets-dir (expand-file-name "snippets/" org-dir) - "The location of ya-snippet snippets.") +(defconst snippets-dir (expand-file-name "snippets/" user-emacs-directory) + "The location of yasnippet snippets.") (defvar sounds-dir (expand-file-name "assets/sounds/" user-emacs-directory) "Directory containing sound files for notifications and timers.") diff --git a/snippets/c-mode/for b/snippets/c-mode/for new file mode 100644 index 00000000..e72b722a --- /dev/null +++ b/snippets/c-mode/for @@ -0,0 +1,8 @@ +# -*- mode: snippet -*- +# name: for +# key: <for +# -- + +for (int i = 0; i < ${1:max}; i++) { + $0 +} diff --git a/snippets/c-mode/main b/snippets/c-mode/main new file mode 100644 index 00000000..0580157f --- /dev/null +++ b/snippets/c-mode/main @@ -0,0 +1,12 @@ +# -*- mode: snippet -*- +# name: main +# key: <main +# -- + +int main (int argc, char *argv[]) { + + $0 + + return 0; +} + diff --git a/snippets/emacs-lisp-mode/elisp-commentary-and-code b/snippets/emacs-lisp-mode/elisp-commentary-and-code new file mode 100644 index 00000000..a787580e --- /dev/null +++ b/snippets/emacs-lisp-mode/elisp-commentary-and-code @@ -0,0 +1,7 @@ +# -*- mode: snippet -*- +# name: elisp-commentary-and-code +# key: >elc +# -- +;;; Commentary: + +;;; Code:
\ No newline at end of file diff --git a/snippets/emacs-lisp-mode/elisp-file-footer b/snippets/emacs-lisp-mode/elisp-file-footer new file mode 100644 index 00000000..8c41dc1e --- /dev/null +++ b/snippets/emacs-lisp-mode/elisp-file-footer @@ -0,0 +1,5 @@ +# key: >elfooter +# name: elisp-file-footer +# -- +(provide '`(file-name-base buffer-file-name)`) +;;; `(buffer-name)` ends here.
\ No newline at end of file diff --git a/snippets/emacs-lisp-mode/elisp-header b/snippets/emacs-lisp-mode/elisp-header new file mode 100644 index 00000000..7cc53ba5 --- /dev/null +++ b/snippets/emacs-lisp-mode/elisp-header @@ -0,0 +1,11 @@ +# -*- mode: snippet -*- +# name: elisp-header +# key: >elheader +# -- +;;; `(file-name-nondirectory buffer-file-name)` --- $1 -*- coding: utf-8; lexical-binding: t; -*- + +;;; Commentary: +;; $0 + +;;; Code: + diff --git a/snippets/emacs-lisp-mode/elisp-ifthen b/snippets/emacs-lisp-mode/elisp-ifthen new file mode 100644 index 00000000..efe61f83 --- /dev/null +++ b/snippets/emacs-lisp-mode/elisp-ifthen @@ -0,0 +1,13 @@ +# -*- mode: snippet -*- +# name: elifthen +# key: >elifthen +# -- + +(if ($1 condition) + (progn + $2 ; if statements + ; go here + ) + $2 ; else statements + ; go here +)
\ No newline at end of file diff --git a/snippets/emacs-lisp-mode/hydra b/snippets/emacs-lisp-mode/hydra new file mode 100644 index 00000000..97bd4263 --- /dev/null +++ b/snippets/emacs-lisp-mode/hydra @@ -0,0 +1,15 @@ +# -*- mode: snippet -*- +# name: hydra +# key: <hydra +# -- + +(with-eval-after-load '$1 + (defhydra hydra-$2 (:color teal :timeout 10 :hint nil) + "$2 common commands menu" + ("q" quit-window "quit" :column "") + ) + + (defun $1-hook-hydra-setup () + "Create $2 hydra/menu keybinding when entering ledger mode." + (local-set-key (kbd "C-c ?") 'hydra-$2/body)) + (add-hook '$1-hook '$1-hook-hydra-setup)) diff --git a/snippets/eshell-mode/remove-scheduled b/snippets/eshell-mode/remove-scheduled new file mode 100644 index 00000000..4b74a143 --- /dev/null +++ b/snippets/eshell-mode/remove-scheduled @@ -0,0 +1,4 @@ +# key: sedrmscheduled +# name: remove-scheduled +# -- +sed -i '/^SCHEDULED: </d' %0
\ No newline at end of file diff --git a/snippets/html-ts-mode/+new-snippet+ b/snippets/html-ts-mode/+new-snippet+ new file mode 100644 index 00000000..aa6fb2bf --- /dev/null +++ b/snippets/html-ts-mode/+new-snippet+ @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: link +# key: <link +# -- +<a href="$0" target="_blank" rel="noopener noreferrer">
\ No newline at end of file diff --git a/snippets/html-ts-mode/footnote b/snippets/html-ts-mode/footnote new file mode 100644 index 00000000..aa6a7213 --- /dev/null +++ b/snippets/html-ts-mode/footnote @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: footnote +# key: +# -- +<sup><a href="#fn$1" id="ref$2">[$3]</a></sup>
\ No newline at end of file diff --git a/snippets/html-ts-mode/footnote-ref b/snippets/html-ts-mode/footnote-ref new file mode 100644 index 00000000..551d6d67 --- /dev/null +++ b/snippets/html-ts-mode/footnote-ref @@ -0,0 +1,7 @@ +# -*- mode: snippet -*- +# name: footnote-ref +# key: +# -- +<li id="fn$0"> + <a href="#ref$1">↩︎</a> +</li> diff --git a/snippets/org-mode/code-block b/snippets/org-mode/code-block new file mode 100644 index 00000000..938e1a29 --- /dev/null +++ b/snippets/org-mode/code-block @@ -0,0 +1,8 @@ +# -*- mode: snippet -*- +# name: code-block +# key: ==c +# -- + +==== code: $1 + +====
\ No newline at end of file diff --git a/snippets/org-mode/fake-elisp-block b/snippets/org-mode/fake-elisp-block new file mode 100644 index 00000000..835e7adc --- /dev/null +++ b/snippets/org-mode/fake-elisp-block @@ -0,0 +1,8 @@ +# -*- mode: snippet -*- +# name: fake-elisp-block +# key: --e +# -- + +--- emacs-lisp +$1 +--- diff --git a/snippets/org-mode/habitdrawer b/snippets/org-mode/habitdrawer new file mode 100644 index 00000000..2e190d80 --- /dev/null +++ b/snippets/org-mode/habitdrawer @@ -0,0 +1,7 @@ +# name: habitdrawer +# key:<habit +# -- +:PROPERTIES: +:STYLE: habit +:RESET_CHECK_BOXES: t +:END:
\ No newline at end of file diff --git a/snippets/org-mode/new drill item b/snippets/org-mode/new drill item new file mode 100644 index 00000000..f0c6cc00 --- /dev/null +++ b/snippets/org-mode/new drill item @@ -0,0 +1,8 @@ +# -*- mode: snippet -*- +# name: new drill item +# key: ndrill +# -- + +* $1 :drill: + +** Answer diff --git a/snippets/org-mode/org-export-md b/snippets/org-mode/org-export-md new file mode 100644 index 00000000..2d262b4a --- /dev/null +++ b/snippets/org-mode/org-export-md @@ -0,0 +1,7 @@ +# -*- mode: snippet -*- +# name: org-export-md +# key: <org-export-md +# -- +# -*- org-auto-export-to-md: t; -*- +#+DATE: +$0
\ No newline at end of file diff --git a/snippets/org-mode/org_filetag_topic b/snippets/org-mode/org_filetag_topic new file mode 100644 index 00000000..8f80ce30 --- /dev/null +++ b/snippets/org-mode/org_filetag_topic @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: org filetag topic +# key: <ftt +# -- +#+FILETAGS: Topic
\ No newline at end of file diff --git a/snippets/org-mode/visibility - showall b/snippets/org-mode/visibility - showall new file mode 100644 index 00000000..4aae3ec5 --- /dev/null +++ b/snippets/org-mode/visibility - showall @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: visibility - showall +# key: <showall +# -- +#+STARTUP: showall
\ No newline at end of file diff --git a/snippets/sh-mode/append_to_logfile b/snippets/sh-mode/append_to_logfile new file mode 100644 index 00000000..c7f49967 --- /dev/null +++ b/snippets/sh-mode/append_to_logfile @@ -0,0 +1,6 @@ +# -*- mode: snippet -*- +# name: append_to_logfile +# key: <atlf +# -- + + >> $logfile 2>&1
\ No newline at end of file diff --git a/snippets/sh-mode/bash-header-with-set-e b/snippets/sh-mode/bash-header-with-set-e new file mode 100644 index 00000000..32325566 --- /dev/null +++ b/snippets/sh-mode/bash-header-with-set-e @@ -0,0 +1,8 @@ +# -*- mode: snippet -*- +# name: bash header with set -e +# key: <bashhead +# -- +#!/usr/bin/env bash +# +# Craig Jennings <c@cjennings.net> +set -e diff --git a/snippets/sh-mode/display_action b/snippets/sh-mode/display_action new file mode 100644 index 00000000..eb470a23 --- /dev/null +++ b/snippets/sh-mode/display_action @@ -0,0 +1,4 @@ +# key: >da +# name: display_action +# -- +$0action="$1" && display "$2" "$action"
\ No newline at end of file diff --git a/snippets/sh-mode/echo_w_date_time_tee b/snippets/sh-mode/echo_w_date_time_tee new file mode 100644 index 00000000..ba2266d1 --- /dev/null +++ b/snippets/sh-mode/echo_w_date_time_tee @@ -0,0 +1,7 @@ +# -*- mode: snippet -*- +# name: echo_w_date_time_tee +# key: >edtt +# -- + + echo "$1 @ $(date +'%T')" | tee -a $2 + $0
\ No newline at end of file diff --git a/snippets/sh-mode/error b/snippets/sh-mode/error new file mode 100644 index 00000000..e2147bfa --- /dev/null +++ b/snippets/sh-mode/error @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: error +# key: >err +# -- + || error "error" "$action" "$?"
\ No newline at end of file diff --git a/snippets/sh-mode/if_file_exists b/snippets/sh-mode/if_file_exists new file mode 100644 index 00000000..38c6e90f --- /dev/null +++ b/snippets/sh-mode/if_file_exists @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: if_file_exists +# key: <if_file +# -- + [ -f $1 ] && $0
\ No newline at end of file diff --git a/snippets/sh-mode/if_last_command_failed b/snippets/sh-mode/if_last_command_failed new file mode 100644 index 00000000..33596dd0 --- /dev/null +++ b/snippets/sh-mode/if_last_command_failed @@ -0,0 +1,6 @@ +# -*- mode: snippet -*- +# name: if_last_command_failed +# key: <ilcf +# -- + +if [ $? -eq 0 ]; then
\ No newline at end of file diff --git a/snippets/sh-mode/printf_error_with_date_time_tee_logfile b/snippets/sh-mode/printf_error_with_date_time_tee_logfile new file mode 100644 index 00000000..b4fb24de --- /dev/null +++ b/snippets/sh-mode/printf_error_with_date_time_tee_logfile @@ -0,0 +1,7 @@ +# -*- mode: snippet -*- +# name: printf_error_with_date_time_tee_logfile +# key: >pedttlf +# -- + +printf "\n\nERROR: $1 failed with error $? @ %s\n" \ + "$(date +'%T')" | tee -a $logfile
\ No newline at end of file diff --git a/snippets/sh-mode/printf_with_date_time_tee b/snippets/sh-mode/printf_with_date_time_tee new file mode 100644 index 00000000..63209aa4 --- /dev/null +++ b/snippets/sh-mode/printf_with_date_time_tee @@ -0,0 +1,5 @@ +# key: <pdtt +# name: printf_with_date_time_tee +# -- +printf "$1 @ %s\n" "$(date +'%T')" | tee -a $2 +$0
\ No newline at end of file diff --git a/snippets/sh-mode/tee_to_logfile b/snippets/sh-mode/tee_to_logfile new file mode 100644 index 00000000..74a564c8 --- /dev/null +++ b/snippets/sh-mode/tee_to_logfile @@ -0,0 +1,5 @@ +# -*- mode: snippet -*- +# name: tee_to_logfile +# key: <ttlf +# -- + | tee -a $logfile
\ No newline at end of file @@ -111,13 +111,6 @@ These may override useful defaults - review and pick better bindings: - M-S-y yank-media (was overriding yank-pop) - M-S-z undo-kill-buffer (was overriding zap-to-char) -*** TODO [#B] Investigate missing yasnippet configuration - -snippets-dir is defined in user-constants.el (points to org-dir/snippets/) and -yasnippet is configured in prog-general.el, but no custom snippets directory or -snippet files exist. Investigate whether snippets should be created (e.g., org -structure templates for reveal.js headers, blog post front matter, etc.). - *** TODO [#C] Review and implement flycheck modeline customization spec Add flycheck status (error/warning counts) to custom modeline to make it visible again. @@ -153,32 +146,6 @@ Already using prescient with vertico. Extend to Corfu after migration. ** Testing & CI -*** TODO [#B] Write Complete ERT Tests for This Config [13/13] - -Unit and Integration Tests should be added as subtasks below, marked done when complete. - -*High-value test targets (no coverage, testable logic, daily use):* - -- [X] custom-case — 43 tests, 3 files (title-case-region, upcase-dwim, downcase-dwim) -- [X] custom-datetime — 10 tests, 1 file (all methods, thin wrappers) -- [X] hugo-config — draft toggle, slug generation, post template (41 tests, 4 files) -- [X] org-capture-config — 22 tests, 2 files (date-prefix + event-content; refactored format-event-headline) -- [X] modeline-config — custom segment construction (26 tests, 2 files) -- [X] config-utilities — 11 tests, 1 file (format-build-time) - -*Modules with partial coverage (expand existing tests):* - -- [X] org-agenda-config — 31 tests, 2 files (skip-functions + add-files) -- [X] org-contacts-config — 40 tests, 2 files (capture-finalize + parse-email) -- [X] ui-config — 27 tests, 2 files (buffer-status-colors + cursor-color) -- [X] org-refile-config — 16 tests, 2 files (build-targets + ensure-org-mode) -- [X] org-webclipper — 31 tests in 1 file -- [X] org-noter-config — 30 tests, 2 files (generate-notes + title-to-slug) -- [X] browser-config — 20 tests in 1 file -*Lower priority:* - -All lower-priority modules evaluated and removed — all interactive wrappers or runtime-dependent. - *** TODO [#B] Add project-aware ERT test isolation when switching projects When switching between elisp projects (e.g., emacs.d to chime.el), previously loaded @@ -354,6 +321,22 @@ Changes in progress (modules/auth-config.el): - Requires env-terminal-p from host-environment module * Emacs Resolved +** DONE [#B] Investigate missing yasnippet configuration +CLOSED: [2026-02-16 Mon] + +Resolved: snippets were in ~/sync/org/snippets/ but directory was empty after +machine migration. Restored 28 snippets from backup, relocated snippets-dir +to ~/.emacs.d/snippets/ for source control. + +** DONE [#B] Write Complete ERT Tests for This Config [13/13] +CLOSED: [2026-02-16 Mon] + +All 13 modules covered: custom-case (43), custom-datetime (10), hugo-config (41), +org-capture-config (22), modeline-config (26), config-utilities (11), +org-agenda-config (31), org-contacts-config (40), ui-config (27), +org-refile-config (16), org-webclipper (31), org-noter-config (30), +browser-config (20). 172 test files, all passing. + ** DONE [#B] Validate recording startup CLOSED: [2026-02-15 Sun 15:40] |
