From df7db1301e3a820aeadf0c9af1f956389a3bd5b1 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sat, 12 Aug 2023 10:24:17 +1000 Subject: Moving some github related functions to my-github also some minor changes in ycp-org and my-buffer --- emacs/.emacs.d/lisp/my/my-buffer.el | 5 ++- emacs/.emacs.d/lisp/my/my-github.el | 67 +++++++++++++++++++++++++++++++++++++ emacs/.emacs.d/lisp/my/my-prog.el | 56 ------------------------------- 3 files changed, 69 insertions(+), 59 deletions(-) (limited to 'emacs/.emacs.d/lisp') diff --git a/emacs/.emacs.d/lisp/my/my-buffer.el b/emacs/.emacs.d/lisp/my/my-buffer.el index 98fd548..11d869d 100644 --- a/emacs/.emacs.d/lisp/my/my-buffer.el +++ b/emacs/.emacs.d/lisp/my/my-buffer.el @@ -111,9 +111,8 @@ With two prefixes: create a buffer of the chosen major mode." ;; we would like to include all modes (provided-mode-derived-p sym - 'text-mode 'prog-mode - 'comint-mode 'special-mode - 'diff-mode)) + 'text-mode 'prog-mode 'comint-mode 'special-mode + 'diff-mode 'conf-mode)) collect sym)))) (defun my-buffer-create-major-mode (mode) diff --git a/emacs/.emacs.d/lisp/my/my-github.el b/emacs/.emacs.d/lisp/my/my-github.el index 7dc2248..2fe90fd 100644 --- a/emacs/.emacs.d/lisp/my/my-github.el +++ b/emacs/.emacs.d/lisp/my/my-github.el @@ -64,5 +64,72 @@ License; name; description; homepage; created at" (my-delete-http-header) (alist-get 'name (json-read)))) +;;; urls with github +;; TODO: generalise the following to common forges, including +;; savannah, cgit, gitlab etc. +(defun my-github-revision-url (file revision) + "Returns the github url of the upstream repo containing FILE at REVISION." + (let ((repo-url (vc-git-repository-url file)) + (revision (or revision (vc-working-revision default-directory)))) + (format "%s/commit/%s" repo-url revision))) + +(defun my-github-kill-revision-url (revision) + "Kill the github revision url for REVISION." + (kill-new (my-github-revision-url revision))) + +(defun my-github-file-loc-url (file-loc &optional revision) + "Convert a file location to a github url." + (pcase-let* ((`(,file ,line-no) (split-string file-loc ":")) + (revision (or revision (vc-working-revision file)))) + (my-github-file-loc-url-internal file line-no revision))) + +(defun my-github-file-loc-url-internal (file line-no revision) + "Convert a FILE location at LINE-NO to a github url. + +REVISION is the commit hash." + (let* ((repo-url (vc-git-repository-url file)) + (repo-root (vc-git-root file)) + (path (file-relative-name file repo-root))) + (format "%s/blob/%s/%s#L%s" repo-url revision path line-no))) + +(defun my-github-kill-current-file-loc-url () + "Kill the github url from where the point is at." + (interactive) + (kill-new (my-github-file-loc-url-internal + (buffer-file-name) + (1+ (current-line)) + (vc-working-revision (buffer-file-name))))) + +(defun my-org-backtrace-to-github (bt &optional revision) + (string-join + (mapcar + (lambda (link) + (string-match "\\[\\[\\(.*\\)\\]\\[\\(.*\\)\\]\\]" link) + (let ((target (match-string 1 link)) + (label (match-string 2 link))) + (format "[[%s][%s]]" + (my-github-file-loc-url target revision) + label))) + (split-string bt " > ")) + " > ")) + +(defun my-org-backtrace-to-github-region (beg end) + (interactive "r") + (kill-new + (my-org-backtrace-to-github (buffer-substring-no-properties beg end)))) + +(defun my-org-backtrace-to-github-slack (beg end) + (interactive "r") + (let ((bt (buffer-substring-no-properties beg end)) + (revision (when current-prefix-arg + (read-string "Rrevision: "))) + ) + (with-temp-buffer + (insert "#+options: ^:nil +") + (goto-char (point-max)) + (insert (my-org-backtrace-to-github bt revision)) + (org-md-export-as-markdown)))) + (provide 'my-github) ;;; my-github.el ends here diff --git a/emacs/.emacs.d/lisp/my/my-prog.el b/emacs/.emacs.d/lisp/my/my-prog.el index e84478d..6309f70 100644 --- a/emacs/.emacs.d/lisp/my/my-prog.el +++ b/emacs/.emacs.d/lisp/my/my-prog.el @@ -309,62 +309,6 @@ left and the source buffer on the right. (defun my-gud-comint-set-prompt-regexp () (setq comint-prompt-regexp "\\((rr)|(gdb)\\) ")) -;; TODO: generalise the following to common forges, including -;; savannah, cgit, gitlab etc. -(defun my-file-loc-to-github (file-loc &optional revision) - "Convert a file location to a github url." - (pcase-let* ((`(,file ,line-no) (split-string file-loc ":")) - (revision (or revision (vc-working-revision file)))) - (my-file-loc-to-github-internal file line-no revision))) - -(defun my-file-loc-to-github-internal (file line-no revision) - "Convert a FILE location at LINE-NO to a github url. - -REVISION is the commit hash." - (let* ((repo-url (vc-git-repository-url file)) - (repo-root (vc-git-root file)) - (path (file-relative-name file repo-root))) - (format "%s/blob/%s/%s#L%s" repo-url revision path line-no))) - -(defun my-kill-github-url-current-file-loc () - "Kill the github url from where the point is at." - (interactive) - (kill-new (my-file-loc-to-github-internal - (buffer-file-name) - (1+ (current-line)) - (vc-working-revision (buffer-file-name))))) - -(defun my-org-backtrace-to-github (bt &optional revision) - (string-join - (mapcar - (lambda (link) - (string-match "\\[\\[\\(.*\\)\\]\\[\\(.*\\)\\]\\]" link) - (let ((target (match-string 1 link)) - (label (match-string 2 link))) - (format "[[%s][%s]]" - (my-file-loc-to-github target revision) - label))) - (split-string bt " > ")) - " > ")) - -(defun my-org-backtrace-to-github-region (beg end) - (interactive "r") - (kill-new - (my-org-backtrace-to-github (buffer-substring-no-properties beg end)))) - -(defun my-org-backtrace-to-github-slack (beg end) - (interactive "r") - (let ((bt (buffer-substring-no-properties beg end)) - (revision (when current-prefix-arg - (read-string "Rrevision: "))) - ) - (with-temp-buffer - (insert "#+options: ^:nil -") - (goto-char (point-max)) - (insert (my-org-backtrace-to-github bt revision)) - (org-md-export-as-markdown)))) - ;;; which-func (defun my-copy-which-func () (interactive) -- cgit v1.2.3