Fold lisp/bandali-utils.el back into init.el
[~bandali/configs] / init.el
diff --git a/init.el b/init.el
index 75ec3a3..958f457 100644 (file)
--- a/init.el
+++ b/init.el
@@ -78,7 +78,7 @@
                     exwm-workspace-current-index))))))))
 
   ;; make some mode-line spaces smaller
-  (csetq
+  (setq-default
    mode-line-format
    (mapcar
     (lambda (x)
       user-mail-address "bandali@gnu.org")
 
 \f
+;;; csetq (`custom' setq)
+
+(require 'cl-lib)
+
+(defmacro csetq (&rest args)
+  "Set the value of user option VAR to VALUE.
+
+More generally, you can use multiple variables and values, as in
+  (csetq VAR VALUE VAR VALUE...)
+This sets each user option VAR's value to the corresponding VALUE.
+
+\(fn [VAR VALUE]...)"
+  (declare (debug setq))
+  `(progn
+     ,@(cl-loop for (var value) on args by 'cddr
+                collect
+                `(funcall (or (get ',var 'custom-set) #'set-default)
+                          ',var ,value))))
+
+\f
 ;;; Package management
 
 ;; variables of interest:
        (debbugs "0.26")
        (delight "1.7")
        (ebdb "0.6.19")
-       (orgalist "1.12")
+       (orgalist "1.13")
        (rt-liberation "1.31")
        (yasnippet "0.14.0")
        ;; bndl
        (refinery-theme "0.1.1")
        ;; Org ELPA
-       (org-plus-contrib "20200921"))))
+       (org-plus-contrib "20201005"))))
   (package-initialize))
 
 (csetq package-archive-upload-base "/ssh:caffeine:~/www/p/elpa")
   ;; while at it, treat themes as safe
   ;; (setf custom-safe-themes t)
   ;; only one custom theme at a time
-  (comment
-    (defadvice load-theme (before clear-previous-themes activate)
-      "Clear existing theme settings instead of layering them"
-      (mapc #'disable-theme custom-enabled-themes))))
+  ;; (defadvice load-theme (before clear-previous-themes activate)
+  ;;   "Clear existing theme settings instead of layering them"
+  ;;   (mapc #'disable-theme custom-enabled-themes))
+  )
 
 ;; load the secrets file if it exists, otherwise show a warning
-(comment
-  (with-demoted-errors
-      (load (b/etc "secrets"))))
+;; (with-demoted-errors
+;;     (load (b/etc "secrets")))
 
 ;; start up emacs server.  see
 ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server
 (set-fontset-font t 'arabic "Vazir")
 
 ;; unicode support
-(comment
-  (dolist (ft (fontset-list))
-    (set-fontset-font
-     ft
-     'unicode
-     (font-spec :name "Source Code Pro" :size 14))
-    (set-fontset-font
-     ft
-     'unicode
-     (font-spec :name "DejaVu Sans Mono")
-     nil
-     'append)
-    ;; (set-fontset-font
-    ;;  ft
-    ;;  'unicode
-    ;;  (font-spec
-    ;;   :name "Symbola monospacified for DejaVu Sans Mono")
-    ;;  nil
-    ;;  'append)
-    ;; (set-fontset-font
-    ;;  ft
-    ;;  #x2115  ; ℕ
-    ;;  (font-spec :name "DejaVu Sans Mono")
-    ;;  nil
-    ;;  'append)
-    (set-fontset-font
-     ft
-     (cons ?Α ?ω)
-     (font-spec :name "DejaVu Sans Mono" :size 14)
-     nil
-     'prepend)))
+;; (dolist (ft (fontset-list))
+;;   (set-fontset-font
+;;    ft
+;;    'unicode
+;;    (font-spec :name "Source Code Pro" :size 14))
+;;   (set-fontset-font
+;;    ft
+;;    'unicode
+;;    (font-spec :name "DejaVu Sans Mono")
+;;    nil
+;;    'append)
+;;   ;; (set-fontset-font
+;;   ;;  ft
+;;   ;;  'unicode
+;;   ;;  (font-spec
+;;   ;;   :name "Symbola monospacified for DejaVu Sans Mono")
+;;   ;;  nil
+;;   ;;  'append)
+;;   ;; (set-fontset-font
+;;   ;;  ft
+;;   ;;  #x2115  ; ℕ
+;;   ;;  (font-spec :name "DejaVu Sans Mono")
+;;   ;;  nil
+;;   ;;  'append)
+;;   (set-fontset-font
+;;    ft
+;;    (cons ?Α ?ω)
+;;    (font-spec :name "DejaVu Sans Mono" :size 14)
+;;    nil
+;;    'prepend))
 
 ;;;; Elisp-level customizations
 
  authinfo-hidden (regexp-opt '("password" "client-secret" "token")))
 
 \f
+;;; Useful utilities
+
+(defun b/add-elisp-section ()
+  (interactive)
+  (insert "\n")
+  (forward-line -1)
+  (insert "\n\f\n;;; "))
+
+(defun b/insert-asterism ()
+  "Insert a centred asterism."
+  (interactive)
+  (let ((asterism "* * *"))
+    (insert
+     (concat
+      "\n"
+      (make-string
+       (floor (/ (- fill-column (length asterism)) 2))
+       ?\s)
+      asterism
+      "\n"))))
+
+(defun b/start-process (program &rest args)
+  "Same as `start-process', but doesn't bother about name and buffer."
+  (let ((process-name (concat program "_process"))
+        (buffer-name  (generate-new-buffer-name
+                       (concat program "_output"))))
+    (apply #'start-process
+           process-name buffer-name program args)))
+
+(defun b/no-mouse-autoselect-window ()
+  "Conveniently disable `focus-follows-mouse'.
+For disabling the behaviour for certain buffers and/or modes."
+  (make-local-variable 'mouse-autoselect-window)
+  (setq mouse-autoselect-window nil))
+
+(defun b/kill-current-buffer ()
+  "Kill the current buffer."
+  ;; also see https://redd.it/64xb3q
+  (interactive)
+  (kill-buffer (current-buffer)))
+
+(defun b/move-indentation-or-beginning-of-line (arg)
+  "Move to the indentation or to the beginning of line."
+  (interactive "^p")
+  ;; (if (bolp)
+  ;;     (back-to-indentation)
+  ;;   (move-beginning-of-line arg))
+  (if (= (point)
+         (progn (back-to-indentation)
+                (point)))
+      (move-beginning-of-line arg)))
+
+(defun b/join-line-top ()
+  "Like `join-line', but join next line to the current line."
+  (interactive)
+  (join-line 1))
+
+(defun b/duplicate-line-or-region (&optional n)
+  "Duplicate the current line, or region (if active).
+Make N (default: 1) copies of the current line or region."
+  (interactive "*p")
+  (let ((u-r-p (use-region-p))          ; if region is active
+        (n1 (or n 1)))
+    (save-excursion
+      (let ((text
+             (if u-r-p
+                 (buffer-substring (region-beginning) (region-end))
+               (prog1 (thing-at-point 'line)
+                 (end-of-line)
+                 (if (eobp)
+                     (newline)
+                   (forward-line 1))))))
+        (dotimes (_ (abs n1))
+          (insert text))))))
+
+\f
 ;;; General key bindings
 
 (global-set-key (kbd "C-a") #'b/move-indentation-or-beginning-of-line)
 \f
 ;;; Essential packages
 
+(add-to-list
+ 'load-path
+ (expand-file-name
+  (convert-standard-filename "lisp") user-emacs-directory))
+
 ;; (require 'bandali-exwm)
 
 (require 'bandali-org)
 ;; IRC (with ERC)
 (require 'bandali-erc)
 
+;; 'paste' service (aka scp + web server)
 (add-to-list 'load-path (b/lisp "scpaste"))
 (with-eval-after-load 'scpaste
   (csetq scpaste-http-destination "https://p.bndl.org"