summaryrefslogtreecommitdiff
path: root/modules/system-utils.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-10 14:20:45 -0500
committerCraig Jennings <c@cjennings.net>2026-05-10 14:20:45 -0500
commitaa72245a2a1715ef4fb8b1c3019826540320be80 (patch)
treebf339d2ff0385fc524e4f4111ceeb21ce380fe42 /modules/system-utils.el
parent57e558ce13fae77eed07095638a753ba75af55d4 (diff)
downloaddotemacs-aa72245a2a1715ef4fb8b1c3019826540320be80.tar.gz
dotemacs-aa72245a2a1715ef4fb8b1c3019826540320be80.zip
refactor(system-lib): extract cj/file-from-context from system-utils
Phase 2.4 of utility-consolidation, the last item in the spec's recommended order. `cj/--file-from-context' resolves "the current file" via a three-step fallback chain (explicit arg, `buffer-file-name', dired file at point) -- a useful pattern for any command that operates on the current file regardless of which kind of buffer the user is in. Promote to public `cj/file-from-context' and re-home in system-lib.el so other modules (mail capture, external-open, AI conversation, dirvish helpers) can use it without an awkward dependency on system-utils. Migrate the two callers in system-utils.el (`cj/open-this-file-with' and `cj/open-file-with-command') and add `(require \='system-lib)' there per the Phase 2 exit criterion. Move the existing 7-test file to `tests/test-system-lib-file-from-context.el' and update its references to the new public name. The test shape is unchanged: 4 Normal + 3 Boundary cases covering explicit-arg precedence, buffer-file-name fallback, dired fallback, and the all-nil case.
Diffstat (limited to 'modules/system-utils.el')
-rw-r--r--modules/system-utils.el18
1 files changed, 4 insertions, 14 deletions
diff --git a/modules/system-utils.el b/modules/system-utils.el
index 9a81c402..e266cd15 100644
--- a/modules/system-utils.el
+++ b/modules/system-utils.el
@@ -23,6 +23,8 @@
;;
;;; Code:
+(require 'system-lib)
+
(declare-function dired-get-file-for-visit "dired" ())
(declare-function dired-file-name-at-point "dired" ())
(declare-function env-linux-p "host-environment" ())
@@ -55,18 +57,6 @@
;;; ------------------------------- Open File With ------------------------------
;; TASK: Favor this method over cj/open-this-file-with and add to custom buffer funcs
-(defun cj/--file-from-context (&optional explicit-filename)
- "Return a file path from the current context, or nil.
-Resolves in priority order:
- 1. EXPLICIT-FILENAME, if non-nil.
- 2. `buffer-file-name' of the current buffer.
- 3. The file at point if the current buffer is in dired-mode.
-Returns nil when none of these yield a file."
- (or explicit-filename
- buffer-file-name
- (and (derived-mode-p 'dired-mode)
- (dired-file-name-at-point))))
-
(defun cj/--open-with-is-launcher-p (command)
"Return non-nil if COMMAND is a desktop launcher.
Launchers (xdg-open, open, start) need to be called with `call-process'
@@ -80,7 +70,7 @@ Works in both Dired buffers and regular file buffers. Prompts for a
file only when neither context yields one. The command runs fully
detached from Emacs."
(interactive "MOpen with command: ")
- (let* ((file (or (cj/--file-from-context)
+ (let* ((file (or (cj/file-from-context)
(read-file-name "File to open: "))))
(unless (and file (file-exists-p file))
(error "No valid file found or selected"))
@@ -114,7 +104,7 @@ Signals an error if the host is unsupported."
Logs output and exit code to buffer *external-open.log*."
(interactive)
(let* ((file (expand-file-name
- (or (cj/--file-from-context filename)
+ (or (cj/file-from-context filename)
(user-error "No file associated with this buffer"))))
(cmd (cj/identify-external-open-command))
(logbuf (get-buffer-create "*external-open.log*")))