#+TITLE: Personal module * Preclude Personal functionality or variables that aid my workflow or are just cool. * Variables Some user variables #+BEGIN_SRC elisp (setq user-full-name "Aryadev Chavali" user-mail-address "aryadevchavali1@gmail.com") #+END_SRC * Reload Reload the doom session by brute force fully loading the "config.el" file in the doom private directory. #+BEGIN_SRC elisp (defun dx:reload () "Reload instance of doom" (interactive) (load-file (concat doom-private-dir "config.el"))) #+END_SRC * Change theme Allow user to set a theme from a limited set of candidates, based on "dx:theme-list". - Themes sanctioned by me: - doom-solarized-dark: just the right everything. best for day. - doom-gruvbox: good contrast, better for night. - doom-city-lights: Eh contrast, quite dark - doom-outrun-electric: Interesting colour palette - doom-vibrant: Good contrast, bit lighter - doom-molokai: hacker style - doom-solarized-light: Light orange theme that's actually okay on the eyes - doom-acario-light: Light theme with not bad colours - Themes not sanctioned: - Light themes other than solarized-light and acario - Horrid low contrast ones with no colour. Grayscale particularly. I can't handle those. #+BEGIN_SRC elisp (setq dx:themes/theme-list '(doom-solarized-dark doom-gruvbox doom-molokai doom-solarized-light doom-acario-light)) (defun dx:themes/set-new-theme () "Set the theme from my own selection, mutate as you see fit" (interactive) (let ((theme (completing-read "Select theme: " dx:themes/theme-list))) (condition-case nil (progn (mapc #'disable-theme custom-enabled-themes) (load-theme (intern theme) t) (when (fboundp 'powerline-reset) (powerline-reset))) (error "Problem loading theme %s" theme)))) #+END_SRC * Password store Function to get a password given a key. #+BEGIN_SRC elisp (defun dx:password-store/get-password (KEY) (shell-command-to-string (concat "pass " KEY))) #+END_SRC * Newline Insert a newline without having to exit normal mode! #+BEGIN_SRC elisp (defun dx:newline (&optional BACKWARD) (interactive) (message "%s" BACKWARD) (let ((old (point))) (cond ((and BACKWARD (= BACKWARD 1)) (+default/newline-above)) (t (+default/newline-below))) (goto-char (+ old 1)) (evil-normal-state))) #+END_SRC * Convert auto-fill lines to long truncate-lines Consider some org file with auto filled lines. I don't like auto-filled lines. So I want to convert them. I've setup macros countless times to do this operation for me, may as well formalize it as a function. Firstly, I need a function to count the number of instances of some substring occur in some other string. Shamelessly copied from rosetta code. #+BEGIN_SRC elisp (defun dx:org/count-sub (str pat) (loop with z = 0 with s = 0 while s do (when (setf s (search pat str :start2 s)) (incf z) (incf s (length pat))) finally (return z))) #+END_SRC Then the main function, works like so: 1) Search the text in the region for newlines then join the lines to make a single segment 2) Search for sentences through Emacs builtin =forward-sentence= and =forward-char= functions then newline via sentences #+BEGIN_SRC elisp (defun dx:org/fill-to-long-lines () (interactive) (let* ((beg (region-beginning)) (end (region-end)) (region-text (buffer-substring-no-properties beg end)) (n-sentences (dx:org/count-sub region-text ".")) (parsed-text (apply #'concatenate 'string (cl-loop for c from beg to end collect (if (string= (buffer-substring-no-properties c (+ c 1)) "\n") " " c))))) (delete-region beg end) (insert parsed-text) (message "%s" n-sentences) (evil-normal-state) (evil-digit-argument-or-evil-beginning-of-line) (cl-loop for i from 1 to n-sentences do (forward-sentence) (forward-char) (newline)))) #+END_SRC