diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2025-12-11 19:50:33 +0100 |
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2025-12-11 19:50:33 +0100 |
| commit | e89cab0aae8bc79270a79fe23edad09e43ba823b (patch) | |
| tree | cc13943e1d843fa8d92a0a936a9493036849c1a7 /.config/emacs/site-lisp | |
| parent | b978f0d12c54e2754bea6463f072513838474bc7 (diff) | |
| parent | dad93f009a27699ffc58c7949cd826d3c1487136 (diff) | |
Merge branch 'master' of github.com:Mango0x45/dotfiles
Diffstat (limited to '.config/emacs/site-lisp')
| -rw-r--r-- | .config/emacs/site-lisp/gh.el | 22 | ||||
| -rw-r--r-- | .config/emacs/site-lisp/marker.el | 47 |
2 files changed, 68 insertions, 1 deletions
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) diff --git a/.config/emacs/site-lisp/marker.el b/.config/emacs/site-lisp/marker.el new file mode 100644 index 0000000..f39cad4 --- /dev/null +++ b/.config/emacs/site-lisp/marker.el @@ -0,0 +1,47 @@ +(require 'hi-lock) +(require 'seq) + +(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) + (overlay-put ov 'marker--mark-p t))) + +(defun marker-unmark () + (interactive) + (if (use-region-p) + (marker-unmark-region (region-bounds)) + (marker-clear)) + (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) (overlay-get ov 'marker--mark-p)) + (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) + (remove-overlays nil nil 'marker--mark-p t)) + +(provide 'marker) |