summary refs log tree commit diff stats
path: root/lisp/pita.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/pita.el')
-rw-r--r--lisp/pita.el69
1 files changed, 0 insertions, 69 deletions
diff --git a/lisp/pita.el b/lisp/pita.el deleted file mode 100644 index ed67c92..0000000 --- a/lisp/pita.el +++ /dev/null
@@ -1,69 +0,0 @@
1;;; pita.el --- wrappers making emacs less of a PITA -*- lexical-binding: t -*-
2;; 🥙
3
4;;; utils
5
6(defun walk-tree-replace (tree find replace)
7 (let ((r nil))
8 (dolist (form tree)
9 (push (cond ((eq find form) replace)
10 ((listp form)
11 (walk-tree-replace form find replace))
12 (t form))
13 r))
14 (reverse r)))
15
16;;; crux advices
17;; these should all go :before the function they're advising.
18
19(defun with-region-or-buffer (&rest _)
20 (interactive (if mark-active
21 (list (region-beginning) (region-end))
22 (list (point-min) (point-max)))))
23
24(defun with-region-or-line (&rest _)
25 (interactive (if mark-active
26 (list (region-beginning) (region-end))
27 (list (line-beginning-position) (line-end-position)))))
28
29(defun with-region-or-to-eol (&rest _)
30 (interactive (if mark-active
31 (list (region-beginning) (region-end))
32 (list (point) (line-end-position)))))
33
34;;; wrappers
35
36(defmacro with-message (msg &rest body)
37 (declare (indent 1))
38 (when (listp msg)
39 (setq msg (apply #'format (car msg) (cdr msg))))
40 (when (string-match "[[:alnum:]]\\'" msg)
41 (setq msg (concat msg "...")))
42 (let ((m (gensym))
43 (r (gensym)))
44 `(let ((,m ,msg)
45 (,r nil))
46 (condition-case e
47 (setq r (progn (message ,m) ,@body))
48 (:success (message "%s done" ,m) r)
49 (t (signal (car e) (cdr e)))))))
50
51(defmacro with-pr (msg &rest body)
52 (declare (indent 1))
53 (when (listp msg)
54 (setq msg (apply #'format (car msg) (cdr msg))))
55 (when (string-match "[[:alnum:]]\\'" msg)
56 (setq msg (concat msg "...")))
57 (let ((pr (gensym))
58 (m (gensym)))
59 `(let* ((,m ,msg)
60 (,pr (unless (minibufferp)
61 (make-progress-reporter ,m))))
62 ,@(or (and pr (walk-tree-replace body '@ `(progress-reporter-update ,pr)))
63 body)
64 (and ,pr (progress-reporter-done ,pr)))))
65
66;;; wrapper advice
67
68(provide 'pita)
69;;; pita.el ends here