From 4c13b6434c12e716e2a3a9661c54441eefe21e40 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 11 Dec 2025 14:07:41 +0100 Subject: emacs: Remove some whitespace --- .config/emacs/modules/mm-humanwave.el | 2 -- 1 file changed, 2 deletions(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-humanwave.el b/.config/emacs/modules/mm-humanwave.el index 40bde27..c870eaf 100644 --- a/.config/emacs/modules/mm-humanwave.el +++ b/.config/emacs/modules/mm-humanwave.el @@ -79,7 +79,6 @@ If METHOD is nil, a GET request is performed." ;;; Insert Imports in Vue - (defun mm-humanwave-insert-vue-import-path (base-directory target-file) "Insert an import directive at POINT. The import directive imports TARGET-FILE relative from BASE-DIRECTORY. @@ -132,5 +131,4 @@ to the `project-find-file' command." (message "%s" path) path)))) - (provide 'mm-humanwave) -- cgit v1.2.3 From caccfb5897cbac934628426ba872028d3da89894 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 11 Dec 2025 14:08:42 +0100 Subject: emacs: Improve Vue component imports --- .config/emacs/modules/mm-humanwave.el | 7 +++++++ 1 file changed, 7 insertions(+) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-humanwave.el b/.config/emacs/modules/mm-humanwave.el index c870eaf..3aa97b3 100644 --- a/.config/emacs/modules/mm-humanwave.el +++ b/.config/emacs/modules/mm-humanwave.el @@ -94,8 +94,15 @@ behaviour of the INCLUDE-ALL-P argument to `mm-project-read-file-name'." (mm-humanwave-project-read-file-name current-prefix-arg))) (let ((path (file-name-sans-extension (file-relative-name target-file base-directory)))) + (unless (string-match-p "/" path) + (setq path (concat "./" path))) (insert "import ") (save-excursion + (insert (thread-last + (file-name-base path) + (mm-string-split "-") + (mapconcat #'capitalize))) + (push-mark (point)) (insert (format " from '%s';" path))))) (defun mm-humanwave-project-read-file-name (&optional include-all-p) -- cgit v1.2.3 From 48c0bcb851f67589ed922c87b8caa74252afc779 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 11 Dec 2025 14:09:03 +0100 Subject: emacs: Remove dead code --- .config/emacs/modules/mm-projects.el | 41 +----------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-projects.el b/.config/emacs/modules/mm-projects.el index 25c1a18..720cea3 100644 --- a/.config/emacs/modules/mm-projects.el +++ b/.config/emacs/modules/mm-projects.el @@ -110,43 +110,4 @@ This is intended to be called interactively via (require 'gh) (keymap-global-set "C-c p" #'gh-create-pr) -;; (defun mm-gh--get-labels () -;; (with-temp-buffer -;; (call-process "gh" nil t nil "label" "list" "--json" "name") -;; (goto-char (point-min)) -;; (let* ((data (json-parse-buffer)) -;; (labels (seq-map (lambda (x) (gethash "name" x)) data))) -;; (sort labels -;; :in-place t -;; :lessp (lambda (x y) -;; (let ((prefix-x-p (string-prefix-p "Sprint " x)) -;; (prefix-y-p (string-prefix-p "Sprint " y))) -;; (cond -;; ((and prefix-x-p prefix-y-p) (string> x y)) -;; (prefix-x-p t) -;; (prefix-y-p nil) -;; (:else (string< x y))))))))) - -;; (defun mm-gh-create-pr (title draftp labels) -;; "Create a GitHub pull request using the gh CLI. -;; If DRAFT is non-nil, the PR will be created as a draft. -;; LABELS should be a comma-separated string of GitHub labels." -;; (interactive -;; (list -;; (read-string (format-prompt "PR Title" nil)) -;; (y-or-n-p "Create as draft PR? ") -;; (completing-read-multiple (format-prompt "PR Labels" nil) -;; (mm-gh--get-labels)))) -;; (let* ((branch (car (vc-git-branches))) -;; (title (format "%s %s" branch title)) -;; (flags `("--fill-verbose" "--title" ,title "--assignee" "@me")) -;; (label-string (mapconcat #'identity labels ","))) -;; (when draftp -;; (setq flags (append flags '("--draft")))) -;; (when labels -;; (setq flags (append flags `("--label" ,label-string)))) -;; (with-temp-buffer -;; (apply #'call-process "gh" nil t nil "pr" "create" flags) -;; (message (buffer-string))))) - -(provide 'mm-projects) \ No newline at end of file +(provide 'mm-projects) -- cgit v1.2.3 From 6200092afe794866017a87db2c4b0967e1135b19 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 11 Dec 2025 14:09:13 +0100 Subject: emacs: Add ‘gh-open-previous-pr’ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config/emacs/modules/mm-projects.el | 3 ++- .config/emacs/site-lisp/gh.el | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-projects.el b/.config/emacs/modules/mm-projects.el index 720cea3..02d7af4 100644 --- a/.config/emacs/modules/mm-projects.el +++ b/.config/emacs/modules/mm-projects.el @@ -108,6 +108,7 @@ This is intended to be called interactively via ;;; GitHub Pull Requests (require 'gh) -(keymap-global-set "C-c p" #'gh-create-pr) +(keymap-global-set "C-c p c" #'gh-create-pr) +(keymap-global-set "C-c p o" #'gh-open-previous-pr) (provide 'mm-projects) diff --git a/.config/emacs/site-lisp/gh.el b/.config/emacs/site-lisp/gh.el index 0461b18..23086e5 100644 --- a/.config/emacs/site-lisp/gh.el +++ b/.config/emacs/site-lisp/gh.el @@ -36,4 +36,24 @@ via `gh-get-labels'." (apply #'call-process "gh" nil t nil "pr" "create" flags) (message (buffer-string))))) -(provide 'gh) \ No newline at end of file +(defvar gh-pr-regexp + "\\`https://\\(?:www\\.\\)?github\\.com/[^/]+/[^/]+/pull/[[:digit:]]+\\'") + +(defun gh--pr-link-p (s) + (declare (pure t) (side-effect-free t)) + (string-match-p gh-pr-regexp s)) + +(defun gh-open-previous-pr () + "Open the previous GitHub pull request. +Opens the previous pull request created by `gh-create-pr' by searching +for the echoed URL in the `*Messages*' buffer." + (interactive) + (with-current-buffer "*Messages*" + (goto-char (point-max)) + (while (not (gh--pr-link-p (buffer-substring-no-properties + (pos-bol) (pos-eol)))) + (unless (line-move -1 :noerror) + (user-error "No previous pull request found."))) + (browse-url-at-point))) + +(provide 'gh) -- cgit v1.2.3 From 5b57bb47d0d7daf3a9d2fe772eb03793f4f76505 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 11 Dec 2025 15:24:47 +0100 Subject: emacs: Begin work on new marker module --- .config/emacs/site-lisp/marker.el | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .config/emacs/site-lisp/marker.el (limited to '.config/emacs') diff --git a/.config/emacs/site-lisp/marker.el b/.config/emacs/site-lisp/marker.el new file mode 100644 index 0000000..5bc1dd2 --- /dev/null +++ b/.config/emacs/site-lisp/marker.el @@ -0,0 +1,50 @@ +(require 'hi-lock) +(require 'seq) + +(defvar-local marker--overlays nil) + +(defun marker-mark () + (interactive) + (marker-mark-region (if (use-region-p) + (region-bounds) + `((,(pos-bol) . ,(pos-eol))))) + (when (region-active-p) + (deactivate-mark))) + +(defun marker-mark-region (bounds) + (dolist (x bounds) (marker--mark-region (car x) (cdr x)))) + +(defun marker--mark-region (beg end) + (let ((ov (make-overlay beg end nil :front-advance))) + (overlay-put ov 'priority 1) + (overlay-put ov 'face 'hi-yellow) + (overlay-put ov 'evaporate t) + (push ov marker--overlays))) + +(defun marker-unmark () + (interactive) + (marker-unmark-region (if (use-region-p) + (region-bounds) + `((,(pos-bol) . ,(pos-eol))))) + (when (region-active-p) + (deactivate-mark))) + +(defun marker-unmark-region (bounds) + (dolist (x bounds) (marker--unmark-region (car x) (cdr x)))) + +(defun marker--unmark-region (beg end) + (dolist (ov (seq-filter (lambda (ov) (memq ov marker--overlays)) + (overlays-in beg end))) + (cond ((< (overlay-start ov) beg) + (move-overlay ov (overlay-start ov) beg)) + ((> (overlay-end ov) end) + (move-overlay ov end (overlay-end ov))) + (:else + (delete-overlay ov))))) + +(defun marker-clear () + (interactive) + (mapc #'delete-overlay marker--overlays) + (setq marker--overlays nil)) + +(provide 'marker) -- cgit v1.2.3 From dad93f009a27699ffc58c7949cd826d3c1487136 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 11 Dec 2025 15:32:06 +0100 Subject: emacs: Optimize marking code a bit --- .config/emacs/site-lisp/marker.el | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to '.config/emacs') diff --git a/.config/emacs/site-lisp/marker.el b/.config/emacs/site-lisp/marker.el index 5bc1dd2..f39cad4 100644 --- a/.config/emacs/site-lisp/marker.el +++ b/.config/emacs/site-lisp/marker.el @@ -1,8 +1,6 @@ (require 'hi-lock) (require 'seq) -(defvar-local marker--overlays nil) - (defun marker-mark () (interactive) (marker-mark-region (if (use-region-p) @@ -19,13 +17,13 @@ (overlay-put ov 'priority 1) (overlay-put ov 'face 'hi-yellow) (overlay-put ov 'evaporate t) - (push ov marker--overlays))) + (overlay-put ov 'marker--mark-p t))) (defun marker-unmark () (interactive) - (marker-unmark-region (if (use-region-p) - (region-bounds) - `((,(pos-bol) . ,(pos-eol))))) + (if (use-region-p) + (marker-unmark-region (region-bounds)) + (marker-clear)) (when (region-active-p) (deactivate-mark))) @@ -33,7 +31,7 @@ (dolist (x bounds) (marker--unmark-region (car x) (cdr x)))) (defun marker--unmark-region (beg end) - (dolist (ov (seq-filter (lambda (ov) (memq ov marker--overlays)) + (dolist (ov (seq-filter (lambda (ov) (overlay-get ov 'marker--mark-p)) (overlays-in beg end))) (cond ((< (overlay-start ov) beg) (move-overlay ov (overlay-start ov) beg)) @@ -44,7 +42,6 @@ (defun marker-clear () (interactive) - (mapc #'delete-overlay marker--overlays) - (setq marker--overlays nil)) + (remove-overlays nil nil 'marker--mark-p t)) (provide 'marker) -- cgit v1.2.3