summaryrefslogtreecommitdiffstats
path: root/init.el
diff options
context:
space:
mode:
Diffstat (limited to 'init.el')
-rw-r--r--init.el182
1 files changed, 141 insertions, 41 deletions
diff --git a/init.el b/init.el
index 75ec3a3..958f457 100644
--- 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)
@@ -105,6 +105,26 @@
user-mail-address "bandali@gnu.org")
+;;; 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))))
+
+
;;; Package management
;; variables of interest:
@@ -131,13 +151,13 @@
(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")
@@ -180,15 +200,14 @@
;; 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
@@ -238,37 +257,36 @@
(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
@@ -420,6 +438,82 @@
authinfo-hidden (regexp-opt '("password" "client-secret" "token")))
+;;; Useful utilities
+
+(defun b/add-elisp-section ()
+ (interactive)
+ (insert "\n")
+ (forward-line -1)
+ (insert "\n \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))))))
+
+
;;; General key bindings
(global-set-key (kbd "C-a") #'b/move-indentation-or-beginning-of-line)
@@ -465,6 +559,11 @@
;;; Essential packages
+(add-to-list
+ 'load-path
+ (expand-file-name
+ (convert-standard-filename "lisp") user-emacs-directory))
+
;; (require 'bandali-exwm)
(require 'bandali-org)
@@ -562,6 +661,7 @@
;; 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"