From 1866ce5fc8eb8b3c4f013744ebc6efdf82f50ebd Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 21 Aug 2023 22:42:11 +1000 Subject: Adding functions for hmm transformers. my-cgit- functions that outputs url for revision id, branches, and files. Also updating the my-github- functions accordingly --- emacs/.emacs.d/lisp/my/my-cgit.el | 148 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 emacs/.emacs.d/lisp/my/my-cgit.el (limited to 'emacs/.emacs.d/lisp/my/my-cgit.el') diff --git a/emacs/.emacs.d/lisp/my/my-cgit.el b/emacs/.emacs.d/lisp/my/my-cgit.el new file mode 100644 index 0000000..de80f20 --- /dev/null +++ b/emacs/.emacs.d/lisp/my/my-cgit.el @@ -0,0 +1,148 @@ +;;; my-cgit.el -- cgit helper functions -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Free Software Foundation. + +;; Author: Yuchen Pei +;; Package-Requires: ((emacs "28.2")) + +;; This file is part of dotted. + +;; dotted is free software: you can redistribute it and/or modify it under +;; the terms of the GNU Affero General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; dotted is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +;; Public License for more details. + +;; You should have received a copy of the GNU Affero General Public +;; License along with dotted. If not, see . + +;;; Commentary: + +;; cgit helper functions. + +;;; Code: +(require 'vc-git) +(defun my-cgit-revision-url (revision file remote) + "Returns the REMOTE cgit instance url of REVISION for FILE. + +https://g.ypei.me/dotted.git/commit/?id=851b8f5fac389364c579aabb8e8fba344a3f6929" + (let ((repo-url (vc-git-repository-url file remote))) + (format "%s/commit/?id=%s" repo-url revision))) + +(defun my-cgit-revision-url-default (&optional revision file remote) + "Returns the REMOTE cgit instance url of REVISION for FILE. + +Same as `my-cgit-revision-url', but all params can be nil, and +sensible defaults are set first." + (setq file (or file (buffer-file-name) default-directory) + revision (or revision (vc-working-revision file))) + (my-cgit-revision-url revision file remote)) + +(defun my-cgit-branch-url (branch file remote) + "Returns the REMOTE cgit instance url of BRANCH containing FILE. + +https://g.ypei.me/librejs.git/?h=noscript-toggle" + (let ((repo-url (vc-git-repository-url file remote))) + (format "%s/?h=%s" repo-url branch))) + +(defun my-cgit-branch-url-default (&optional branch file remote) + "Returns the REMOTE cgit instance url of BRANCH containing FILE. + +Same as `my-cgit-branch-url', but all params can be nil, and +sensible defaults are set first." + (setq file (or file (buffer-file-name) default-directory) + branch (or branch (car (vc-git-branches)))) + (my-cgit-branch-url branch file remote)) + +(defun my-cgit-file-url (file line-no revision remote) + "Returns the REMOTE cgit instance url of the FILE at LINE-NO at REVISION. + +https://g.ypei.me/librejs.git/tree/main_background.js?id=e2230c23e4aa7a74ea34825856acf7edd8a61e04#n78" + (let* ((repo-root (vc-git-root file)) + (path (file-relative-name file repo-root)) + (repo-url (vc-git-repository-url file remote))) + (format "%s/tree/%s?id=%s%s" repo-url path revision + (if line-no (format "#n%d" line-no) "")))) + +(defun my-cgit-file-url-default (&optional file line-no revision remote) + "Returns the REMOTE cgit instance url of the FILE at LINE-NO at REVISION. + +Same as `my-cgit-file-url', but all params can be nil, and +sensible defaults are set first." + (unless (setq file (or file (buffer-file-name))) + (error "Please supply a file")) + (setq revision (or revision (vc-working-revision file))) + (my-cgit-file-url file line-no revision remote)) + +(defun my-cgit-raw-file-url (file revision remote) + "Returns the REMOTE cgit instance url of the raw FILE at REVISION. + +https://g.ypei.me/librejs.git/plain/main_background.js?id=e2230c23e4aa7a74ea34825856acf7edd8a61e04" + (let* ((repo-root (vc-git-root file)) + (path (file-relative-name file repo-root)) + (repo-url (vc-git-repository-url file remote))) + (format "%s/plain/%s?id=%s" repo-url path revision))) + +(defun my-cgit-raw-file-url-default (&optional file revision remote) + "Returns the REMOTE cgit instance url of the raw FILE at REVISION. + +Same as `my-cgit-raw-file-url', but all params can be nil, and +sensible defaults are set first." + (unless (setq file (or file (buffer-file-name))) + (error "Please supply a file")) + (setq (revision (or revision (vc-working-revision file)))) + (my-cgit-raw-file-url file revision remote)) + +(defun my-cgit-revision-to-url (revision) + "Returns the remote cgit instance url of REVISION. + +Uses default remote." + (let ((file (or (buffer-file-name) default-directory))) + (my-cgit-revision-url revision file nil))) + +(defun my-cgit-branch-to-url (branch) + "Returns the remote cgit instance url of REVISION. + +Uses default remote." + (let ((file (or (buffer-file-name) default-directory))) + (my-cgit-branch-url branch file nil))) + +(defun my-cgit-file-to-url (file) + "Returns the remote cgit instance url of FILE. + +Uses default remote and currently checked out revision." + (let ((revision (vc-working-revision file))) + (my-cgit-file-url file nil revision nil))) + +(defun my-cgit-current-file-to-url () + "Returns the remote cgit instance url of the current buffer file-loc. + +Uses default remote and currently checked out revision." + (let ((file (buffer-file-name)) + (line-no (1+ (current-line))) + (revision (vc-working-revision file))) + (unless file (error "Current buffer is not associated with any file")) + (my-cgit-file-url file line-no revision nil))) + +(defun my-cgit-file-to-raw-url (file) + "Returns the remote cgit instance url of FILE. + +Uses default remote and currently checked out revision." + (let ((revision (vc-working-revision file))) + (my-cgit-raw-file-url file revision nil))) + +(defun my-cgit-current-file-to-raw-url () + "Returns the remote cgit instance url of the current buffer file. + +Uses default remote and currently checked out revision." + (let ((file (buffer-file-name)) + (revision (vc-working-revision file))) + (unless file (error "Current buffer is not associated with any file")) + (my-cgit-file-url file revision nil))) + +(provide 'my-cgit) +;;; my-cgit.el ends here -- cgit v1.2.3