From ffef56605fd3ecadacd1629f2b8d8b958f02155e Mon Sep 17 00:00:00 2001 From: Alexander Griffith Date: Tue, 13 Sep 2022 22:55:06 -0400 Subject: [PATCH 1/3] Included the option to call zig build run from the project root. --- zig-mode.el | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/zig-mode.el b/zig-mode.el index be3a0ee..c584916 100644 --- a/zig-mode.el +++ b/zig-mode.el @@ -68,6 +68,18 @@ :safe #'stringp :group 'zig-mode) +(defcustom zig-project-build-file "build.zig" + "Name of project build file used to find the project root." + :type 'string + :safe #'stringp + :group 'zig-mode) + +(defcustom zig-project-root-search-up 3 + "The number of directories to search upwards to find project root." + :type 'integer + :group 'zig-mode + :safe #'integerp) + ;; zig CLI commands (defun zig--run-cmd (cmd &optional source &rest args) @@ -123,6 +135,31 @@ If given a SOURCE, execute the CMD on it." (interactive) (zig--run-cmd "run" (buffer-file-name) "-O" zig-run-optimization-mode)) +(defun zig--find-project-root () + "Find the directory with the `zig-project-build-file'." + (let ((count 0) + root-dir + (dir (directory-file-name + (replace-regexp-in-string "^Directory " "" default-directory)))) + (while (and (< count zig-project-root-search-up) + (let ((is-dir? (member zig-build-file (directory-files dir)))) + (when is-dir? + (setq root-dir dir)) + (not is-dir?))) + (setq dir (file-name-directory dir)) + (setq count (+ count 1))) + root-dir)) + +;;;###autoload +(defun zig-project-build-run () + "Create an executable from the current project and run it immediately." + (interactive) + (let ((root-dir (zig--find-project-root))) + (if root-dir + (let ((default-directory root-dir)) + (compile (concat "zig build run"))) + (message (.. "Could not find " zig-build-file))))) + (defvar zig-return-to-buffer-after-format nil "Enable zig-format-buffer to return to file buffer after fmt is done.") @@ -515,7 +552,7 @@ This is written mainly to be used as `end-of-defun-function' for Zig." (defvar zig-mode-map (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-b") 'zig-compile) + (define-key map (kbd "C-c C-b") 'zig-build-run) (define-key map (kbd "C-c C-f") 'zig-format-buffer) (define-key map (kbd "C-c C-r") 'zig-run) (define-key map (kbd "C-c C-t") 'zig-test-buffer) From 1b2d6af96b60a72b37fc290c5365a7373b557d26 Mon Sep 17 00:00:00 2001 From: Alexander Griffith Date: Tue, 13 Sep 2022 23:06:14 -0400 Subject: [PATCH 2/3] Included keybinding for zig-project-build-run --- zig-mode.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zig-mode.el b/zig-mode.el index c584916..7c4cab7 100644 --- a/zig-mode.el +++ b/zig-mode.el @@ -142,7 +142,7 @@ If given a SOURCE, execute the CMD on it." (dir (directory-file-name (replace-regexp-in-string "^Directory " "" default-directory)))) (while (and (< count zig-project-root-search-up) - (let ((is-dir? (member zig-build-file (directory-files dir)))) + (let ((is-dir? (member zig-project-build-file (directory-files dir)))) (when is-dir? (setq root-dir dir)) (not is-dir?))) @@ -552,10 +552,11 @@ This is written mainly to be used as `end-of-defun-function' for Zig." (defvar zig-mode-map (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-b") 'zig-build-run) + (define-key map (kbd "C-c C-b") 'zig-build) (define-key map (kbd "C-c C-f") 'zig-format-buffer) (define-key map (kbd "C-c C-r") 'zig-run) (define-key map (kbd "C-c C-t") 'zig-test-buffer) + (define-key map (kbd "C-c C-p") 'zig-project-build-run) map) "Keymap for Zig major mode.") From afd2da2e6a486b8cfa8fb6c0ab8b09f2c75066c5 Mon Sep 17 00:00:00 2001 From: Alexander Griffith Date: Tue, 13 Sep 2022 23:09:16 -0400 Subject: [PATCH 3/3] Fixed keybinding for zig-build --- zig-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zig-mode.el b/zig-mode.el index 7c4cab7..a2258ce 100644 --- a/zig-mode.el +++ b/zig-mode.el @@ -552,7 +552,7 @@ This is written mainly to be used as `end-of-defun-function' for Zig." (defvar zig-mode-map (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-b") 'zig-build) + (define-key map (kbd "C-c C-b") 'zig-compile) (define-key map (kbd "C-c C-f") 'zig-format-buffer) (define-key map (kbd "C-c C-r") 'zig-run) (define-key map (kbd "C-c C-t") 'zig-test-buffer)