Last active
November 2, 2023 19:27
-
-
Save julianeon/11f71c1a860c292b1699a9f75a6c3e0e to your computer and use it in GitHub Desktop.
Helper functions I used in Emacs. Most were written by me but some were copied from the Internet.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun insert-and-indent-line-above () | |
(interactive) | |
(push-mark) | |
(let* | |
((ipt (progn (back-to-indentation) (point))) | |
(bol (progn (move-beginning-of-line 1) (point))) | |
(indent (buffer-substring bol ipt))) | |
(newline) | |
(previous-line) | |
(insert indent))) | |
(defun insert-and-indent-line-below () | |
(interactive) | |
(push-mark) | |
(let* | |
((ipt (progn (back-to-indentation) (point))) | |
(bol (progn (move-beginning-of-line 1) (point))) | |
(indent (buffer-substring bol ipt))) | |
(newline) | |
(next-line) | |
(insert indent))) | |
(defun backward-kill-line (arg) | |
"Kill ARG lines backward." | |
(interactive "p") | |
(kill-line (- 1 arg))) | |
(defun vim-open-line-above () | |
"Insert a newline above the current line and put point at beginning." | |
(interactive) | |
(unless (bolp) | |
(beginning-of-line)) | |
(newline) | |
(forward-line -1) | |
(indent-according-to-mode)) | |
(defun vim-open-line-below () | |
"Insert a newline below the current line and put point at beginning." | |
(interactive) | |
(unless (eolp) | |
(end-of-line)) | |
(newline-and-indent)) | |
(defun my-toggle-window-split () | |
"Vertical split shows more of each line, horizontal split shows more lines." | |
(interactive) | |
(if (= (count-windows) 2) | |
(let* ((this-win-buffer (window-buffer)) | |
(next-win-buffer (window-buffer (next-window))) | |
(this-win-edges (window-edges (selected-window))) | |
(next-win-edges (window-edges (next-window))) | |
(this-win-2nd (not (and (<= (car this-win-edges) | |
(car next-win-edges)) | |
(<= (cadr this-win-edges) | |
(cadr next-win-edges))))) | |
(splitter | |
(if (= (car this-win-edges) | |
(car (window-edges (next-window)))) | |
'split-window-horizontally | |
'split-window-vertically))) | |
(delete-other-windows) | |
(let ((first-win (selected-window))) | |
(funcall splitter) | |
(if this-win-2nd (other-window 1)) | |
(set-window-buffer (selected-window) this-win-buffer) | |
(set-window-buffer (next-window) next-win-buffer) | |
(select-window first-win) | |
(if this-win-2nd (other-window 1)))))) | |
(defun kill-other-buffers () | |
"Kill all other buffers." | |
(interactive) | |
(mapc 'kill-buffer | |
(delq (current-buffer) | |
(remove-if-not 'buffer-file-name (buffer-list))))) | |
(defun embiggen () | |
(interactive) | |
(set-face-attribute 'default nil :height 300)) | |
(defun emsmallen () | |
(interactive) | |
(set-face-attribute 'default nil :height 200)) | |
(defun melpa () | |
(interactive) | |
(list-packages)) | |
(defun theme-manoj () | |
(interactive) | |
(load-theme 'manoj-dark t)) | |
(defun theme-leuven () | |
(interactive) | |
(load-theme 'leuven t) | |
(set-face-attribute 'default nil :height 300)) | |
(defun theme-deeper-blue () | |
(interactive) | |
(load-theme 'deeper-blue t) | |
(set-face-attribute 'default nil :height 300)) | |
(defun keep-num () | |
(interactive) | |
(goto-char 1) | |
(keep-lines "^[0-9]*:[678][0-9][0-9][0-9]")) | |
(defun forward-five () | |
(interactive) | |
(forward-line 5)) | |
(defun backward-five () | |
(interactive) | |
(forward-line -5)) | |
(defun forward-ten () | |
(interactive) | |
(forward-line 10)) | |
(defun backward-ten () | |
(interactive) | |
(forward-line -10)) | |
(defun kill-three () | |
(interactive) | |
(kill-whole-line 3)) | |
(defun kill-four () | |
(interactive) | |
(kill-whole-line 4)) | |
(defun print-region-boundary (x y) | |
"Prints region start and end positions" | |
(interactive "r") | |
(message "Region begin at: %d, end at: %d" x y)) | |
(defun wcnt (start end) | |
"Word count" | |
(interactive "r") | |
(save-excursion | |
(let ((n 0)) | |
(goto-char start) | |
(while (< (point) end) | |
(if (forward-word 1) | |
(setq n (1+ n)))) | |
(message "Region has %d words" n) | |
n))) | |
(defun lcnt (start end) | |
"Line count" | |
(interactive "r") | |
(save-excursion | |
(let ((n 0)) | |
(goto-char start) | |
(while (< (point) end) | |
(if (forward-line 1) | |
(setq n (1+ n)))) | |
(message "Region has %d lines" n) | |
n))) | |
(defun gotoer (x y) | |
"Prints region start and end positions" | |
(interactive "r") | |
(if (use-region-p) | |
(progn | |
(setq text (buffer-substring (region-beginning) (region-end))) | |
(shell-command-to-string (concat openg " " text))) | |
(message "no text"))) | |
(defun killn (&optional n) | |
(interactive "p") | |
(save-excursion | |
(beginning-of-line) | |
(let ((kill-whole-line t)) | |
(kill-line n)))) | |
(defvar coindeskbtc "https://api.coindesk.com/v1/bpi/currentprice.json") | |
(defvar minbtc "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=BTC,USD,EUR") | |
(defvar mineth "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=BTC,USD,EUR") | |
(defvar minxrp "https://min-api.cryptocompare.com/data/price?fsym=XRP&tsyms=BTC,USD,EUR") | |
(defun xbtc () | |
(with-current-buffer | |
(url-retrieve-synchronously coindeskbtc) | |
(goto-char (point-min)) | |
(re-search-forward "^$") | |
(delete-region (point) (point-min)) | |
(format "%s" (assoc 'rate_float (assoc 'USD (assoc 'bpi (json-read-from-string (buffer-string)))))))) | |
(defun ucrypto (url-crypto) | |
(with-current-buffer | |
(url-retrieve-synchronously url-crypto) | |
(goto-char (point-min)) | |
(re-search-forward "^$") | |
(delete-region (point) (point-min)) | |
(format "%s" (assoc 'USD (json-read-from-string (buffer-string)))))) | |
(defun ubtc () | |
(ucrypto minbtc)) | |
(defun ueth () | |
(ucrypto mineth)) | |
(defun uxrp () | |
(ucrypto minxrp)) | |
(defun reqqero () | |
(interactive) | |
(progn (request | |
"http://httpbin.org/get" | |
:params '(("key" . "value") ("key2" . "value2")) | |
:parser 'json-read | |
:success (cl-function | |
(lambda (&key data &allow-other-keys) | |
(message "I sent: %S" (assoc-default 'args data))))))) | |
(defun insert-image (&optional url) | |
(interactive) | |
(unless url (setq url (url-get-url-at-point))) | |
(unless url | |
(error "Couldn't find URL.")) | |
(let ((buffer (url-retrieve-synchronously url))) | |
(unwind-protect | |
(let ((data (with-current-buffer buffer | |
(goto-char (point-min)) | |
(search-forward "\n\n") | |
(buffer-substring (point) (point-max))))) | |
(insert-image (create-image data nil t))) | |
(kill-buffer buffer)))) | |
(defun open-line-up () | |
"Insert a newline above the current line and put point at beginning." | |
(interactive) | |
(unless (bolp) | |
(beginning-of-line)) | |
(newline) | |
(forward-line -1) | |
(indent-according-to-mode)) | |
(defun open-line-down () | |
"Insert a newline below the current line and put point at beginning." | |
(interactive) | |
(unless (eolp) | |
(end-of-line)) | |
(newline-and-indent)) | |
(defun insert-p-tag () | |
"Insert <p></p> at cursor point." | |
(interactive) | |
(insert "<p></p>") | |
(backward-char 6)) | |
(defun ask-name-and-age (x y) | |
"Ask name and age" | |
(interactive "sEnter you name: | |
sEnter your age: ") | |
(insert (format "Name is: %s" concat(x y)))) | |
(random t) ; seed it randomly | |
(defun insert-random-number () | |
"Insert a random number between 0 to 999999." | |
(interactive) | |
(insert (number-to-string (random 999999))) ) | |
(defun hit () | |
(insert (format "Hi,\n\nThanks for writing in. "))) | |
(defun hitn (name) | |
(insert (format "Hi %s,\n\nThanks for writing in. " name))) | |
(defun hitnc (name) | |
(insert (format "Hi %s,\n\nThanks for writing in. " (capitalize-word name)))) | |
(defun date () (interactive) | |
(insert (shell-command-to-string "echo -n $(date +%m-%d-%Y)"))) | |
(defun adderab (a b) | |
"Sum example." | |
(interactive | |
(list | |
(read-number "First num: ") | |
(read-number "Second num: "))) | |
(insert (number-to-string (+ a b)))) | |
(defun hello (someone) | |
"Say hello to someone." | |
(interactive "sTo who? ") | |
(insert (format "Hi %s,\n\n" someone))) | |
(defun hope (x) | |
"Hope example." | |
(interactive "s0. clarifies-other-quest 1. clarifies-else-explain 2. helps-clarify-said 3. info-helps-any-quest 4. helps-quest-shared-here 5. meets-needs-any-quest 6. takes-care-of-request") | |
(cond | |
((equal x "0") | |
(insert (format "I hope this clarifies the situation, but please let me know if you have other questions." ))) | |
((equal x "1") | |
(insert (format "I hope this clarifies the situation, but please let me know if there's anything else I can explain." ))) | |
((equal x "2") | |
(insert (format "I hope this helps, but please let me know if I can clarify anything I've said here." ))) | |
((equal x "3") | |
(insert (format "I hope this information helps, but please let me know if you have any questions about this." ))) | |
((equal x "4") | |
(insert (format "I hope this information helps, but please let me know if you have any questions about anything I've shared here. " ))) | |
((equal x "5") | |
(insert (format "I hope this meets your needs, but please let me know if you have any other questions. " ))) | |
((equal x "6") | |
(insert (format "I hope this takes care of your request, but please let me know if you need anything else. " ))))) | |
(defun glad (x) | |
"Glad example." | |
;(interactive "s0. glad-helped 1. glad-resolved 2. happy-hear-worked 3. very-happy-hear-worked 4. glad-helped-else! 5. happy-worked-else ") | |
(cond | |
((equal x "0") | |
(insert (format "I'm glad to hear this helped." ))) | |
((equal x "1") | |
(insert (format "I'm glad to hear this resolved the issue." ))) | |
((equal x "2") | |
(insert (format "I'm happy to hear this worked." ))) | |
((equal x "3") | |
(insert (format "I'm very happy to hear this worked." ))) | |
((equal x "4") | |
(insert (format "I'm glad to hear this helped. I take it this resolves the issue, but please let me know if you need anything else!" ))) | |
((equal x "5") | |
(insert (format "I'm happy to hear this worked. I take it this resolves the issue, but please let me know if you need anything else!" ))))) | |
(defun shell-mode-in-new-frame () | |
(interactive) | |
(select-frame (make-frame)) | |
(color-theme-monokai-terminal) | |
(shell-mode)) | |
(defun closer (x) | |
"Closing types." | |
(interactive "s1. Cheers 2. Sincerely 3. Best 4. Yours 5. Cordially ") | |
(cond | |
((equal x "1") | |
(insert (format "Cheers,\nJulian\n" ))) | |
((equal x "2") | |
(insert (format "Sincerely,\nJulian\n" ))) | |
((equal x "3") | |
(insert (format "Best,\nJulian\n" ))) | |
((equal x "4") | |
(insert (format "Yours,\nJulian\n" ))) | |
((equal x "5") | |
(insert (format "Cordially,\nJulian\n" ))))) | |
(defun reddit () | |
(browse-url "http://www.reddit.com/")) | |
(defun writex (input) | |
(interactive "MFile: ") | |
(let ((buf buffer-file-name) | |
(homeput (concat homevar input ".txt"))) | |
(shell-command (concat "touch " homeput)) | |
(write-file homeput) | |
(write-file buf) | |
(message (concat "Wrote " input ".txt and reverted to " buf)) | |
)) | |
(defun wikipedia () | |
(interactive) | |
(let (myWord myUrl) | |
(setq myWord | |
(if (use-region-p) | |
(buffer-substring-no-properties (region-beginning) (region-end)) | |
(thing-at-point 'word))) | |
(setq myWord (replace-regexp-in-string " " "_" myWord)) | |
(setq myUrl (concat "http://en.wikipedia.org/wiki/" myWord)) | |
;(browse-url myUrl) | |
(eww myUrl) ; emacs's own browser | |
)) | |
(defun hn () | |
(interactive) | |
(eww "http://news.ycombinator.com") | |
) | |
(defun rreddit (sub) | |
(interactive "sWhere? ") | |
(eww (format "http://www.reddit.com/r/%s" sub))) | |
(defun gotos (fileName) | |
(shell-command (concat "open -a /Applications/Google\ Chrome.app/ " fileName))) | |
(defun xclip () | |
(interactive) | |
(shell-command (concat "cat " (buffer-file-name (window-buffer (minibuffer-selected-window))) " | pbcopy"))) | |
(defun timed () | |
(interactive) | |
(current-time-string)) | |
(defun carday () | |
(interactive) | |
(car (cdr (split-string (current-time-string))))) | |
(defun day () | |
(interactive) | |
(let ((tstr (cdr (split-string (current-time-string))))) | |
(format "%s %s" (pop tstr) (car tstr)))) | |
(defun clock () | |
(interactive) | |
(let ((cstr (cdr (split-string (current-time-string))))) | |
(pop cstr) | |
(pop cstr) | |
(format "%s" (pop cstr)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment