<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/prog-webdev.el, branch load-graph-classify-start</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=load-graph-classify-start</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=load-graph-classify-start'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-05-16T08:55:49+00:00</updated>
<entry>
<title>refactor(prog): six programming-track hygiene fixes from re-review</title>
<updated>2026-05-16T08:55:49+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-16T08:55:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=d84aa4374af5e3447445377a836c66cc07d7a223'/>
<id>urn:sha1:d84aa4374af5e3447445377a836c66cc07d7a223</id>
<content type='text'>
- prog-lsp.el: rename `cj/lsp--remove-eldoc-provider' →
  `cj/lsp--remove-eldoc-provider-global' and call it once from the
  lsp-mode `:config' block instead of attaching it per-buffer via
  `lsp-managed-mode-hook'.  The previous per-buffer remove with the
  buffer-local flag raced lsp-mode's own population of the local
  hook; removing the provider from the global default before any LSP
  buffer attaches makes the absence stick.  Two existing tests
  updated to the new contract (remove-from-default + idempotent
  re-run).

- prog-webdev.el / prog-python.el: warn at load time when
  `prettier' or `pyright' is missing on PATH via
  `cj/executable-find-or-warn'.  Both modules now `(require
  'system-lib)' to expose the helper.  Missing dependencies surface
  up front instead of mid-edit at first format/LSP attach.

- keyboard-compat.el: document existing idempotence.  The hook
  install uses a named function so `add-hook' deduplicates, and the
  hook body only calls `define-key' (latest binding wins, same
  value) -- adding a comment so future readers don't re-question.

- dev-fkeys.el: add a `typescript' clause to
  `cj/--f6-test-runner-cmd-for'.  F6 now runs `npx --no-install
  vitest &lt;path&gt;' when vitest is on PATH, otherwise `npx --no-install
  jest &lt;path&gt;'.  Updates the matching test from "returns nil" to
  cover both code paths; the impl-level test now asserts the routed
  command instead of expecting a user-error.

- flycheck-config.el: build the LanguageTool wrapper path with
  `(expand-file-name "scripts/languagetool-flycheck"
  user-emacs-directory)' instead of a hardcoded `~/.emacs.d/...'.
  Survives a non-standard `user-emacs-directory'.

- latex-config.el: replace the hardcoded Zathura viewer with
  `cj/--latex-select-pdf-viewer', which walks
  `cj/--latex-pdf-viewer-candidates' (zathura → evince → okular →
  SumatraPDF → xdg-open) and falls back to "PDF Tools" when nothing
  is on PATH.  Each entry maps an executable to the matching
  TeX-view-program-list name so AUCTeX's defaults handle the
  actual viewer invocation.
</content>
</entry>
<entry>
<title>fix(prog-webdev): toggle electric-pair-local-mode in the setup hook</title>
<updated>2026-05-12T23:02:16+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-12T23:02:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=7f0b6197eb6f2dcc97400c0a9a4097d6e25e6539'/>
<id>urn:sha1:7f0b6197eb6f2dcc97400c0a9a4097d6e25e6539</id>
<content type='text'>
`cj/webdev-setup` called `(electric-pair-mode t)`, which flips the global minor mode every time a TS/JS/TSX buffer opens. I switched it to `electric-pair-local-mode` so the pairing stays scoped to those buffers, like the other buffer-local settings in the hook. (Same fix I just made in `prog-python.el`.)
</content>
</entry>
<entry>
<title>refactor(prog-webdev): extract the prettier format-command builder</title>
<updated>2026-05-12T23:00:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-12T23:00:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=98a200c955117893d3c27ace8e911c53ca2a7395'/>
<id>urn:sha1:98a200c955117893d3c27ace8e911c53ca2a7395</id>
<content type='text'>
I pulled the prettier command-string construction out of `cj/webdev-format-buffer` into `cj/--webdev-format-command`. The wrapper stays thin: resolve `(or buffer-file-name "file.ts")`, hand the command to `shell-command-on-region`, clamp point. With the command shape in a pure helper I can unit-test it directly.
</content>
</entry>
<entry>
<title>session: switch Python LSP to pyright, add Django web-mode config</title>
<updated>2026-03-04T07:52:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-04T07:52:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=956969442b83b2df4993b67d461c643bbf4e6670'/>
<id>urn:sha1:956969442b83b2df4993b67d461c643bbf4e6670</id>
<content type='text'>
Replaced pylsp with lsp-pyright in prog-python.el for better type inference,
especially for Django ORM. Added Django engine and indent settings to web-mode
in prog-webdev.el. Pyright already installed via pacman.
</content>
</entry>
<entry>
<title>feat(json,yaml): add tree-sitter modes, formatting, and jq integration</title>
<updated>2026-03-03T01:46:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-03T01:46:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=fbaac182eed439326ac7a4f179d503541e93f8f3'/>
<id>urn:sha1:fbaac182eed439326ac7a4f179d503541e93f8f3</id>
<content type='text'>
New prog-json module: json-ts-mode with jq formatting (C-; f) and
jq-interactively (C-c C-q). Upgraded prog-yaml to yaml-ts-mode with
prettier formatting. Both use treesit-auto for grammar management.
Includes 18 new tests (10 JSON, 8 YAML), 185/185 passing.
</content>
</entry>
<entry>
<title>changing repositories</title>
<updated>2025-10-12T16:47:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-12T16:47:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=092304d9e0ccc37cc0ddaa9b136457e56a1cac20'/>
<id>urn:sha1:092304d9e0ccc37cc0ddaa9b136457e56a1cac20</id>
<content type='text'>
</content>
</entry>
</feed>
