kakafarm-utils.el (8856B)
1 ;;; -*- lexical-binding:t -*- 2 3 (defun kakafarm/call-process-with-string-as-input (program &optional input-string &rest args) 4 (with-temp-buffer 5 (let ((our-output-buffer (current-buffer))) 6 (if input-string 7 (with-temp-buffer 8 (let ((our-input-buffer (current-buffer))) 9 (progn 10 (erase-buffer) 11 (insert input-string) 12 (apply 'call-process-region 13 (buffer-end -1) 14 (buffer-end 1) 15 program 16 nil 17 our-output-buffer 18 nil 19 args)))) 20 (apply 'call-process 21 program 22 nil 23 our-output-buffer 24 nil 25 args))) 26 (buffer-string))) 27 28 (list (kakafarm/call-process-with-string-as-input "cat" 29 "cat says moo") 30 (kakafarm/call-process-with-string-as-input "echo" 31 nil 32 "-n" 33 "echo echo echo")) 34 35 ;; Uploading README.html from README.org stuff. 36 (defun kakafarm/srht-repo-id (repository-name) 37 "Returns the unique numerical I Dentification associated with 38 every sourcehut repository. 39 40 https://www.tomsdiner.org/blog/post_0003_sourcehut_readme_org_export.html" 41 42 (interactive "sRepo name: ") 43 (let* ((srht (netrc-machine (netrc-parse "~/.netrc.gpg") 44 "repo.git.sr.ht")) 45 (srht-token (netrc-get srht 46 "password")) 47 (our-response (with-temp-buffer 48 (call-process "curl" 49 nil 50 (list (current-buffer) nil) 51 nil 52 "--oauth2-bearer" srht-token 53 "-G" 54 "--data-urlencode" 55 (concat "query=query { me { repository(name: \"" 56 repository-name 57 "\") { id } } }") 58 "https://git.sr.ht/query") 59 (buffer-string))) 60 (repository-id (string-trim (kakafarm/call-process-with-string-as-input "jq" 61 our-response 62 ".data.me.repository.id")))) 63 (if (called-interactively-p) 64 (message "Repository ID: %S" repository-id) 65 repository-id))) 66 67 (defun kakafarm/srht-set-readme (repository-id) 68 "Export the current file to HTML and set the result as README for 69 the sourcehut repo identified by ID. 70 71 https://www.tomsdiner.org/blog/post_0003_sourcehut_readme_org_export.html" 72 73 (interactive "sRepository ID: ") 74 (let* ((srht (netrc-machine (netrc-parse "~/.netrc.gpg") 75 "repo.git.sr.ht")) 76 (srht-token (netrc-get srht 77 "password")) 78 (readme.html (org-export-as (org-export-get-backend 'html) 79 nil 80 nil 81 t)) 82 (our-json-query (kakafarm/call-process-with-string-as-input 83 "jq" 84 readme.html 85 "-sR" 86 (concat " 87 { \"query\": \"mutation UpdateRepo($id: Int!, $readme: String!) { updateRepository(id: $id, input: { readme: $readme }) { id } }\", 88 \"variables\": { 89 \"id\": " repository-id ", 90 \"readme\": . 91 } 92 }")))) 93 (kakafarm/call-process-with-string-as-input "curl" 94 our-json-query 95 "--oauth2-bearer" srht-token 96 "-H" "Content-Type: application/json" 97 "-d@-" 98 "https://git.sr.ht/query"))) 99 100 (defun kakafarm/percent-read () 101 "Display percent read by current cursor location vs. total characters in file." 102 (interactive) 103 (message "%.2f%%" 104 (* 100 105 (/ (float (- (point) 1)) 106 (+ 1 (buffer-size)))))) 107 108 (defun kakafarm/sentence-end-double-nilify-for-read-only-buffers () 109 "Set `sentence-end-double-space' in read-only buffer to `nil'." 110 (when buffer-read-only 111 (setq-local sentence-end-double-space 112 nil))) 113 114 (defun kakafarm/elfeed-sort-feed-tags (a-feed) 115 (cond 116 ((stringp a-feed) 117 a-feed) 118 (t 119 (let* ((feed-url (car a-feed)) 120 (tags (cdr a-feed)) 121 (tags-as-strings (mapcar #'symbol-name 122 tags)) 123 (sorted-tags (sort tags-as-strings 124 #'string-lessp)) 125 (tags-as-symbols (mapcar #'intern sorted-tags))) 126 (cons feed-url tags-as-symbols))))) 127 128 (defun kakafarm/elfeed-compare-feeds-urls (feed-a feed-b) 129 (string-lessp (car feed-a) 130 (car feed-b))) 131 132 (defun kakafarm/elfeed-sort-feeds (feeds) 133 (sort (mapcar #'kakafarm/elfeed-sort-feed-tags 134 feeds) 135 #'kakafarm/elfeed-compare-feeds-urls)) 136 137 (defun kakafarm/org-roam-keyword-is-filetags-p (keyword-node) 138 (equal (org-element-property :key 139 keyword-node) 140 "FILETAGS")) 141 142 (defun kakafarm/org-roam-filetags-keyword-is-publishable-p (filestags-keyword-node) 143 (seq-contains-p (split-string (org-element-property :value 144 filestags-keyword-node) 145 ":") 146 "publish")) 147 148 (defun kakafarm/org-roam-publishable-node-p (org-filename) 149 (with-temp-buffer 150 (insert-file-contents org-filename) 151 (org-element-map (org-element-parse-buffer) 'keyword 152 (lambda (keyword) 153 (and (kakafarm/org-roam-keyword-is-filetags-p keyword) 154 (kakafarm/org-roam-filetags-keyword-is-publishable-p keyword))) 155 nil 156 t))) 157 158 (defun kakafarm/org-roam-sitemap (title list-of-org-links) 159 (message (format "kakafarm/org-roam-sitemap title: %S; list-of-links: %S\n" 160 title 161 list-of-org-links)) 162 ;; (let ((a-publishable-org-roam-node 163 ;; (seq-filter (lambda (org-link-list) 164 ;; (pcase org-link-list 165 ;; (`(,org-link) 166 ;; (with-temp-buffer 167 ;; (insert org-link) 168 ;; (org-element-map (org-element-parse-buffer) 'link 169 ;; (lambda (link) 170 ;; ;; Check if file linked is publishable. 171 ;; (kakafarm/org-roam-publishable-node-p 172 ;; (concat "~/mine/roam/" 173 ;; (org-element-property :path 174 ;; link)))) 175 ;; nil 176 ;; t))))) 177 ;; list-of-org-links))) 178 ;; (message "poop %S" a-publishable-org-roam-node)) 179 180 (concat 181 "# -*- encoding: utf-8 -*-\n" 182 "#+OPTIONS: ^:nil author:nil html-postamble:nil\n" 183 ;;"#SETUPFILE: ./simple_inline.theme\n" ; No theme yet. 184 "#+FILETAGS: publish\n" 185 "#+TITLE: " title "\n\n" 186 (org-list-to-org list-of-org-links) "\n" 187 188 ;; TODO: No sitemap SVG yet because it shows all the fucking 189 ;; files in the org-roam database. 190 ;; 191 ;;"file:sitemap.svg\n" 192 )) 193 194 (defun kakafarm/org-roam-publication-wrapper (plist filename pubdir) 195 ;; (when (kakafarm/org-roam-publishable-node-p filename) 196 ;; nil) 197 ;;(org-roam-graph) ; How the fuck do I make this one not show every fucking node in the org-roam database?! 198 (org-html-publish-to-html plist 199 filename 200 pubdir) 201 (setq kakafarm/org-roam-project-publish-time 202 (cadr (current-time)))) 203 204 (defun kakafarm/org-roam-custom-link-builder (node) 205 (let ((node-file (org-roam-node-file node))) 206 ;; (when (kakafarm/org-roam-publishable-node-p node-file) 207 ;; nil) 208 (message (format "kakafarm/org-roam-custom-link-builder: %S" node)) 209 (concat (file-name-base node-file) 210 ".html"))) 211 212 (defun kakafarm/recenter-top-bottom (original-function &rest arguments) 213 (if (null (car arguments)) 214 (apply original-function '(4)) 215 (apply original-function arguments)))