changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate emacs/util.el

changeset 698: 96958d3eb5b0
parent: f15e0f021a64
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
1
 ;;; std/util.el --- standard utils  -*- lexical-binding: t -*-
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;;; Code:
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
4
 (require 'cl-lib)
596
46e9425cf3c2 howd that get there
Richard Westhaver <ellis@rwest.io>
parents: 451
diff changeset
5
 (require 'calendar)
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
6
 ;;; Helpers
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
7
 (defun group (source n)
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
8
   "This is Paul Graham's group utility from On Lisp.
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
9
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
10
 Group a list of arguments SOURCE by any provided grouping amount
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
11
 N.
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
12
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
13
 For example:
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
14
 (group (quote (foo 2 bar 4)) 2) ;=> ((foo 2) (bar 4))
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
15
 (group (quote (a b c d e f)) 3) ;=> ((a b c) (d e f))
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
16
 "
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
17
   (when (zerop n) (error "zero length"))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
18
   (cl-labels ((rec (source acc)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
19
                    (let ((rest (nthcdr n source)))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
20
                      (if (consp rest)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
21
                          (rec rest (cons
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
22
                                     (cl-subseq source 0 n)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
23
                                     acc))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
24
                        (nreverse
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
25
                         (cons source acc))))))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
26
     (when source (rec source nil))))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
27
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
28
 (defun flatten (x)
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
29
   "Paul Graham's flatten utility from On Lisp.
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
30
 
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
31
 Given a tree X, return all the leaves of the tree."
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
32
   (cl-labels ((rec (x acc)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
33
                    (cond ((null x) acc)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
34
                          ((atom x) (cons x acc))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
35
                          (t (rec
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
36
                              (car x)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
37
                              (rec (cdr x) acc))))))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
38
     (rec x nil)))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
39
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
40
 (defun mkstr (&rest args)
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
41
   "Paul Graham's mkstr utility from On Lisp.
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
42
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
43
 Coerce ARGS into a single string and return it."
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
44
   (let* ((s ""))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
45
     (dolist (a args)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
46
       (cond
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
47
        ((null a) nil)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
48
        ((sequencep a) (setq s (concat s a)))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
49
        ((numberp a) (setq s(concat s (number-to-string a))))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
50
        ((symbolp a) (setq s(concat s (symbol-name a))))))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
51
     s))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
52
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
53
 (defun symb (&rest args)
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
54
   "Paul Graham's symb utility from On Lisp.
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
55
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
56
 Concat ARGS and return a newly interned symbol."
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
57
   (intern (apply #'mkstr args)))
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
58
 
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 31
diff changeset
59
 ;;; Config
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
60
 (defun add-to-load-path (&rest paths)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
61
   "Add PATHS to `load-path'."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
62
   (mapc (lambda (x)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
63
           (cond
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
64
            ((listp x) (mapc #'add-to-load-path x))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
65
            ('_ (cl-pushnew x load-path))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
66
         paths))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
67
 
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
68
 (defmacro add-packages (&rest pkgs)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
69
   "add list of packages PKGS to `package-selected-packages'"
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
70
   `(mapc (lambda (x) (add-to-list 'package-selected-packages x)) ',pkgs))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
71
 
188
34bacb513d55 config fixes
Richard Westhaver <ellis@rwest.io>
parents: 75
diff changeset
72
 (defun load-keys (&optional custom)
34bacb513d55 config fixes
Richard Westhaver <ellis@rwest.io>
parents: 75
diff changeset
73
   (let ((keydefs (or custom (concat user-emacs-directory "keys.el"))))
34bacb513d55 config fixes
Richard Westhaver <ellis@rwest.io>
parents: 75
diff changeset
74
     (load keydefs nil t)))
34bacb513d55 config fixes
Richard Westhaver <ellis@rwest.io>
parents: 75
diff changeset
75
 
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
76
 ;;; OS
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
77
 (defmacro when-sys= (name body)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
78
   "(when (string= (system-name) NAME) BODY)"
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
79
   `(when ,(string= (system-name) name) ,body))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
80
 
43
519ab3f9f548 darwin updates
ellis <ellis@rwest.io>
parents: 34
diff changeset
81
 (defun darwin-p () (string= system-type "darwin"))
519ab3f9f548 darwin updates
ellis <ellis@rwest.io>
parents: 34
diff changeset
82
 (defun linux-p () (string= system-type "gnu/linux"))
519ab3f9f548 darwin updates
ellis <ellis@rwest.io>
parents: 34
diff changeset
83
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
84
 (defun join-paths (root &rest dirs)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
85
   "helper function for joining strings to a path."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
86
   (let ((result root))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
87
     (cl-loop for dir in dirs do
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
88
              (setq result (concat (file-name-as-directory result) dir)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
89
     result))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
90
 
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
91
 (defun wc ()
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
92
   "Return a 3-element list with lines, words and characters in
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
93
 region or whole buffer."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
94
   (interactive)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
95
   (let ((n 0)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
96
         (start (if mark-active (region-beginning) (point-min)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
97
         (end (if mark-active (region-end) (point-max))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
98
     (save-excursion
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
99
       (goto-char start)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
100
       (while (< (point) end) (if (forward-word 1) (setq n (1+ n)))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
101
     (list (count-lines start end) n (- end start))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
102
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
103
 ;;; Regexps
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
104
 (defvar default-line-regexp-alist
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
105
   '((empty . "[\s\t]*$")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
106
     (indent . "^[\s\t]+")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
107
     (non-empty . "^.+$")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
108
     (list . "^\\([\s\t#*+]+\\|[0-9]+[^\s]?[).]+\\)")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
109
     (heading . "^[=-]+"))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
110
   "Alist of regexp types used by `default-line-regexp-p'.")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
111
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
112
 (defun default-line-regexp-p (type &optional n)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
113
   "Test for TYPE on line.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
114
 TYPE is the car of a cons cell in
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
115
 `default-line-regexp-alist'.  It matches a regular
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
116
 expression.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
117
 With optional N, search in the Nth line from point."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
118
   (save-excursion
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
119
     (goto-char (pos-bol))
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
120
     (and (not (bobp))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
121
          (or (beginning-of-line n) t)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
122
          (save-match-data
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
123
            (looking-at
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
124
             (alist-get type default-line-regexp-alist))))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
125
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
126
 ;;; Time
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
127
 (defun format-iso-week-number (&optional date)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
128
   "format DATE as ISO week number with week days starting on
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
129
     Monday. If DATE is nil use current date."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
130
   (let* ((week (format-time-string "%W" date))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
131
          (prefix (if (= (length week) 1)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
132
                      "w0" "w")))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
133
     (concat prefix week)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
134
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
135
 (defun last-day-of-year (&optional date)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
136
   "Return the last day of the year as time."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
137
   (encode-time 0 0 0 31 12 (nth 5 (decode-time
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
138
                                    (or date (current-time))))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
139
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
140
 (defun last-day-of-month (&optional date)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
141
   "Return the last day of month as time."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
142
   (let* ((now (decode-time (or date (current-time))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
143
          (month (nth 4 now))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
144
          (year (nth 5 now))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
145
          (last-day-of-month (calendar-last-day-of-month month year)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
146
     (encode-time 0 0 0 last-day-of-month month year)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
147
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
148
 (defun last-day-of-week (&optional date)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
149
   "Return the last day of the week as time."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
150
   (let* ((now (or date (current-time)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
151
          (datetime (decode-time now))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
152
          (dow (nth 6 datetime)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
153
     (time-add now (days-to-time (- 7 dow)))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
154
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
155
 (defun first-day-of-week (&optional date)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
156
   "Return the first day of the week as time."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
157
   (let* ((now (or date (current-time)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
158
          (datetime (decode-time now))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
159
          (dow (nth 6 datetime)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
160
     (time-subtract now (days-to-time dow))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
161
 
666
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
162
 ;;; Hashtables
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
163
 (defun hash-table-alist (table)
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
164
   "Returns an association list containing the keys and values of hash table
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
165
 TABLE."
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
166
   (let ((alist nil))
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
167
     (maphash (lambda (k v)
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
168
                (push (cons k v) alist))
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
169
              table)
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
170
     (nreverse alist)))
f15e0f021a64 more elisp
Richard Westhaver <ellis@rwest.io>
parents: 596
diff changeset
171
 
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
172
 ;;; Server
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
173
 ;;;###autoload
451
8e94959e96bd build updates, incorporate cargo
Richard Westhaver <ellis@rwest.io>
parents: 188
diff changeset
174
 (defun kill-emacs-restart ()
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 28
diff changeset
175
   (interactive)
59
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 43
diff changeset
176
   (server-force-delete)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 43
diff changeset
177
   (server-start))
28
bc174808bc53 emacs and rust/lib/tenex
ellis <ellis@rwest.io>
parents: 27
diff changeset
178
 
59
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 43
diff changeset
179
 (define-key special-event-map [sigusr1] 'kill-emacs-restart)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
180
 
75
b955cb475f65 fixed executable systems
ellis <ellis@rwest.io>
parents: 59
diff changeset
181
 (defun upgrade-emacs (&optional ask)
b955cb475f65 fixed executable systems
ellis <ellis@rwest.io>
parents: 59
diff changeset
182
   (interactive)
b955cb475f65 fixed executable systems
ellis <ellis@rwest.io>
parents: 59
diff changeset
183
   (package-refresh-contents)
b955cb475f65 fixed executable systems
ellis <ellis@rwest.io>
parents: 59
diff changeset
184
   (package-install-selected-packages (not ask))
b955cb475f65 fixed executable systems
ellis <ellis@rwest.io>
parents: 59
diff changeset
185
   (package-upgrade-all ask))
b955cb475f65 fixed executable systems
ellis <ellis@rwest.io>
parents: 59
diff changeset
186
 
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 21
diff changeset
187
 (provide 'util)
27
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
188
 ;; util.el ends here