diff options
Diffstat (limited to 'lisp/pita.el')
-rw-r--r-- | lisp/pita.el | 69 |
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 | ||