Lint prelude.el
This was a doozey because I use it everywhere. Is there a better way to globally rename things? Aye aye aye... computers, man!
This commit is contained in:
parent
5d3bb0b7ea
commit
ff8277625f
29 changed files with 163 additions and 164 deletions
|
@ -257,13 +257,13 @@ In this case, the last writer wins, which is B."
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(when alist/enable-tests?
|
(when alist/enable-tests?
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal '((2 . one)
|
(equal '((2 . one)
|
||||||
(3 . two))
|
(3 . two))
|
||||||
(alist/map-keys #'1+
|
(alist/map-keys #'1+
|
||||||
'((1 . one)
|
'((1 . one)
|
||||||
(2 . two)))))
|
(2 . two)))))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal '((one . 2)
|
(equal '((one . 2)
|
||||||
(two . 3))
|
(two . 3))
|
||||||
(alist/map-values #'1+
|
(alist/map-values #'1+
|
||||||
|
|
|
@ -163,7 +163,7 @@ This function ignores Emacs-generated buffers, i.e. the ones that look like
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((xs (buffer/source-code-buffers))
|
(let* ((xs (buffer/source-code-buffers))
|
||||||
(candidate (list/get 1 xs)))
|
(candidate (list/get 1 xs)))
|
||||||
(prelude/assert (maybe-some? candidate))
|
(prelude-assert (maybe-some? candidate))
|
||||||
(switch-to-buffer candidate)))
|
(switch-to-buffer candidate)))
|
||||||
|
|
||||||
(when buffer/install-kbds?
|
(when buffer/install-kbds?
|
||||||
|
@ -183,7 +183,7 @@ This function ignores Emacs-generated buffers, i.e. the ones that look like
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(when buffer/enable-tests?
|
(when buffer/enable-tests?
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(list/all? #'buffer/emacs-generated?
|
(list/all? #'buffer/emacs-generated?
|
||||||
'("*scratch*"
|
'("*scratch*"
|
||||||
"*Messages*"
|
"*Messages*"
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
|
|
||||||
(defun bytes/classify (x)
|
(defun bytes/classify (x)
|
||||||
"Return unit that closest fits byte count, X."
|
"Return unit that closest fits byte count, X."
|
||||||
(prelude/assert (number/whole? x))
|
(prelude-assert (number/whole? x))
|
||||||
(cond
|
(cond
|
||||||
((and (>= x 0) (< x bytes/kb)) 'byte)
|
((and (>= x 0) (< x bytes/kb)) 'byte)
|
||||||
((and (>= x bytes/kb) (< x bytes/mb)) 'kilobyte)
|
((and (>= x bytes/kb) (< x bytes/mb)) 'kilobyte)
|
||||||
|
@ -92,17 +92,17 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(progn
|
(progn
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal "1000B" (bytes/to-string 1000)))
|
(equal "1000B" (bytes/to-string 1000)))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal "2KB" (bytes/to-string (* 2 bytes/kb))))
|
(equal "2KB" (bytes/to-string (* 2 bytes/kb))))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal "17MB" (bytes/to-string (* 17 bytes/mb))))
|
(equal "17MB" (bytes/to-string (* 17 bytes/mb))))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal "419GB" (bytes/to-string (* 419 bytes/gb))))
|
(equal "419GB" (bytes/to-string (* 419 bytes/gb))))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal "999TB" (bytes/to-string (* 999 bytes/tb))))
|
(equal "999TB" (bytes/to-string (* 999 bytes/tb))))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal "2PB" (bytes/to-string (* 2 bytes/pb)))))
|
(equal "2PB" (bytes/to-string (* 2 bytes/pb)))))
|
||||||
|
|
||||||
(provide 'bytes)
|
(provide 'bytes)
|
||||||
|
|
|
@ -60,18 +60,18 @@ If X isn't in XS (using `equal'), insert it at the front."
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; contains?/2
|
;; contains?/2
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(cache/contains? "turkey" cache))
|
(cache/contains? "turkey" cache))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(cache/contains? "chicken" cache))
|
(cache/contains? "chicken" cache))
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; touch/2
|
;; touch/2
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal
|
(equal
|
||||||
(cache/touch "nugget" cache)
|
(cache/touch "nugget" cache)
|
||||||
(cache/from-list '("nugget" "chicken"))))
|
(cache/from-list '("nugget" "chicken"))))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal
|
(equal
|
||||||
(cache/touch "spicy" cache)
|
(cache/touch "spicy" cache)
|
||||||
(cache/from-list '("spicy" "chicken" "nugget"))))))
|
(cache/from-list '("spicy" "chicken" "nugget"))))))
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
"Call `load-theme' with `THEME', ensuring that the line numbers are bright.
|
"Call `load-theme' with `THEME', ensuring that the line numbers are bright.
|
||||||
There is no hook that I'm aware of to handle this more elegantly."
|
There is no hook that I'm aware of to handle this more elegantly."
|
||||||
(load-theme theme t)
|
(load-theme theme t)
|
||||||
(prelude/set-line-number-color "#da5468"))
|
(prelude-set-line-number-color "#da5468"))
|
||||||
|
|
||||||
(defun colorscheme/whitelist-set (colorscheme)
|
(defun colorscheme/whitelist-set (colorscheme)
|
||||||
"Focus the COLORSCHEME in the `colorscheme/whitelist' cycle."
|
"Focus the COLORSCHEME in the `colorscheme/whitelist' cycle."
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
(require 'f)
|
(require 'f)
|
||||||
(require 'maybe)
|
(require 'maybe)
|
||||||
|
|
||||||
(prelude/assert (f-exists? (getenv "BRIEFCASE")))
|
(prelude-assert (f-exists? (getenv "BRIEFCASE")))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Configuration
|
;; Configuration
|
||||||
|
|
|
@ -196,23 +196,23 @@ If X is the currently focused value, after it's deleted, current-index will be
|
||||||
|
|
||||||
(when cycle/enable-tests?
|
(when cycle/enable-tests?
|
||||||
(let ((xs (cycle/new 1 2 3)))
|
(let ((xs (cycle/new 1 2 3)))
|
||||||
(prelude/assert (maybe-nil? (cycle/previous-focus xs)))
|
(prelude-assert (maybe-nil? (cycle/previous-focus xs)))
|
||||||
(prelude/assert (= 1 (cycle/current xs)))
|
(prelude-assert (= 1 (cycle/current xs)))
|
||||||
(prelude/assert (= 2 (cycle/next xs)))
|
(prelude-assert (= 2 (cycle/next xs)))
|
||||||
(prelude/assert (= 1 (cycle/previous-focus xs)))
|
(prelude-assert (= 1 (cycle/previous-focus xs)))
|
||||||
(prelude/assert (= 1 (->> xs (cycle/jump 0) cycle/current)))
|
(prelude-assert (= 1 (->> xs (cycle/jump 0) cycle/current)))
|
||||||
(prelude/assert (= 2 (->> xs (cycle/jump 1) cycle/current)))
|
(prelude-assert (= 2 (->> xs (cycle/jump 1) cycle/current)))
|
||||||
(prelude/assert (= 3 (->> xs (cycle/jump 2) cycle/current)))
|
(prelude-assert (= 3 (->> xs (cycle/jump 2) cycle/current)))
|
||||||
(prelude/assert (= 2 (cycle/previous-focus xs)))
|
(prelude-assert (= 2 (cycle/previous-focus xs)))
|
||||||
(prelude/assert (= 2 (cycle/focus-previous! xs)))
|
(prelude-assert (= 2 (cycle/focus-previous! xs)))
|
||||||
(prelude/assert (equal '(1 4 2 3) (cycle-xs (cycle/append 4 xs))))
|
(prelude-assert (equal '(1 4 2 3) (cycle-xs (cycle/append 4 xs))))
|
||||||
(prelude/assert (equal '(1 2 3) (cycle-xs (cycle/remove 4 xs))))
|
(prelude-assert (equal '(1 2 3) (cycle-xs (cycle/remove 4 xs))))
|
||||||
(progn
|
(progn
|
||||||
(cycle/focus-item 3 xs)
|
(cycle/focus-item 3 xs)
|
||||||
(cycle/focus-item 2 xs)
|
(cycle/focus-item 2 xs)
|
||||||
(cycle/remove 1 xs)
|
(cycle/remove 1 xs)
|
||||||
(prelude/assert (= 2 (cycle/current xs)))
|
(prelude-assert (= 2 (cycle/current xs)))
|
||||||
(prelude/assert (= 3 (cycle/previous-focus xs))))))
|
(prelude-assert (= 3 (cycle/previous-focus xs))))))
|
||||||
|
|
||||||
(provide 'cycle)
|
(provide 'cycle)
|
||||||
;;; cycle.el ends here
|
;;; cycle.el ends here
|
||||||
|
|
|
@ -46,7 +46,7 @@ The car models the enabled state of my laptop display; the cdr models the
|
||||||
(defun display/enable-4k ()
|
(defun display/enable-4k ()
|
||||||
"Attempt to connect to my 4K monitor."
|
"Attempt to connect to my 4K monitor."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "display/enable-4k"
|
:name "display/enable-4k"
|
||||||
:command (string/format
|
:command (string/format
|
||||||
"xrandr --output %s --above %s --primary --auto --size 3840x2160 --rate 30.00 --dpi 144"
|
"xrandr --output %s --above %s --primary --auto --size 3840x2160 --rate 30.00 --dpi 144"
|
||||||
|
@ -56,7 +56,7 @@ The car models the enabled state of my laptop display; the cdr models the
|
||||||
(defun display/disable-4k ()
|
(defun display/disable-4k ()
|
||||||
"Disconnect from the 4K monitor."
|
"Disconnect from the 4K monitor."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "display/disable-4k"
|
:name "display/disable-4k"
|
||||||
:command (string/format "xrandr --output %s --off"
|
:command (string/format "xrandr --output %s --off"
|
||||||
display/4k-monitor)))
|
display/4k-monitor)))
|
||||||
|
@ -66,7 +66,7 @@ The car models the enabled state of my laptop display; the cdr models the
|
||||||
Sometimes this is useful when I'm sharing my screen in a Google Hangout and I
|
Sometimes this is useful when I'm sharing my screen in a Google Hangout and I
|
||||||
only want to present one of my monitors."
|
only want to present one of my monitors."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "display/disable-laptop"
|
:name "display/disable-laptop"
|
||||||
:command (string/format "xrandr --output %s --auto"
|
:command (string/format "xrandr --output %s --auto"
|
||||||
display/laptop-monitor)))
|
display/laptop-monitor)))
|
||||||
|
@ -76,7 +76,7 @@ Sometimes this is useful when I'm sharing my screen in a Google Hangout and I
|
||||||
Sometimes this is useful when I'm sharing my screen in a Google Hangout and I
|
Sometimes this is useful when I'm sharing my screen in a Google Hangout and I
|
||||||
only want to present one of my monitors."
|
only want to present one of my monitors."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "display/disable-laptop"
|
:name "display/disable-laptop"
|
||||||
:command (string/format "xrandr --output %s --off"
|
:command (string/format "xrandr --output %s --off"
|
||||||
display/laptop-monitor)))
|
display/laptop-monitor)))
|
||||||
|
|
|
@ -38,11 +38,11 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(progn
|
(progn
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal '(fname . "Bob") (dotted/new 'fname "Bob")))
|
(equal '(fname . "Bob") (dotted/new 'fname "Bob")))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(dotted/instance? '(one . two)))
|
(dotted/instance? '(one . two)))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(dotted/instance? '(1 2 3))))
|
(dotted/instance? '(1 2 3))))
|
||||||
|
|
||||||
(provide 'dotted)
|
(provide 'dotted)
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
mail-envelope-from 'header)
|
mail-envelope-from 'header)
|
||||||
|
|
||||||
;; Assert that no two saved searches share share a KBD
|
;; Assert that no two saved searches share share a KBD
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(list/xs-distinct-by? (lambda (x) (plist-get x :key)) notmuch-saved-searches))
|
(list/xs-distinct-by? (lambda (x) (plist-get x :key)) notmuch-saved-searches))
|
||||||
|
|
||||||
(provide 'email)
|
(provide 'email)
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
(defun fonts/whitelist-set (font)
|
(defun fonts/whitelist-set (font)
|
||||||
"Focuses the FONT in the `fonts/whitelist' cycle.
|
"Focuses the FONT in the `fonts/whitelist' cycle.
|
||||||
The size of the font is determined by `fonts/size'."
|
The size of the font is determined by `fonts/size'."
|
||||||
(prelude/assert (cycle/contains? font fonts/whitelist))
|
(prelude-assert (cycle/contains? font fonts/whitelist))
|
||||||
(cycle/focus (lambda (x) (equal x font)) fonts/whitelist)
|
(cycle/focus (lambda (x) (equal x font)) fonts/whitelist)
|
||||||
(fonts/set (fonts/current) fonts/size))
|
(fonts/set (fonts/current) fonts/size))
|
||||||
|
|
||||||
|
|
|
@ -64,11 +64,11 @@ The user must pass in a valid Neighbors Table since asserting on the shape of
|
||||||
;; TODO: Model each of the mapping functions into an isomorphism.
|
;; TODO: Model each of the mapping functions into an isomorphism.
|
||||||
(defun graph/edges->neighbors (xs)
|
(defun graph/edges->neighbors (xs)
|
||||||
"Map Edge List, XS, into a Neighbors Table."
|
"Map Edge List, XS, into a Neighbors Table."
|
||||||
(prelude/assert (graph/instance? xs)))
|
(prelude-assert (graph/instance? xs)))
|
||||||
|
|
||||||
(defun graph/neighbors->edges (xs)
|
(defun graph/neighbors->edges (xs)
|
||||||
"Map Neighbors Table, XS, into an Edge List."
|
"Map Neighbors Table, XS, into an Edge List."
|
||||||
(prelude/assert (graph/instance? xs)))
|
(prelude-assert (graph/instance? xs)))
|
||||||
|
|
||||||
;; Below are three different models of the same unweighted, directed graph.
|
;; Below are three different models of the same unweighted, directed graph.
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
;; TODO: Assert that no two servers have a channel with the same name. We need
|
;; TODO: Assert that no two servers have a channel with the same name. We need
|
||||||
;; this because that's the assumption that underpins the `irc/channel->server'
|
;; this because that's the assumption that underpins the `irc/channel->server'
|
||||||
;; function. This will probably be an O(n^2) operation.
|
;; function. This will probably be an O(n^2) operation.
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/distinct? (set/from-list
|
(set/distinct? (set/from-list
|
||||||
(cycle/to-list
|
(cycle/to-list
|
||||||
(alist/get "irc.freenode.net"
|
(alist/get "irc.freenode.net"
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
"Resolve an IRC server from a given CHANNEL."
|
"Resolve an IRC server from a given CHANNEL."
|
||||||
(let ((result (alist/find (lambda (k v) (cycle/contains? channel v))
|
(let ((result (alist/find (lambda (k v) (cycle/contains? channel v))
|
||||||
server->channels)))
|
server->channels)))
|
||||||
(prelude/assert (maybe-some? result))
|
(prelude-assert (maybe-some? result))
|
||||||
result))
|
result))
|
||||||
|
|
||||||
(defun irc/channel->cycle (server->channels channel)
|
(defun irc/channel->cycle (server->channels channel)
|
||||||
|
@ -166,7 +166,7 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(when irc/enable-tests?
|
(when irc/enable-tests?
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(equal
|
(equal
|
||||||
(irc/channel->server `(("irc.dairy.com" . ,(cycle/new "#cheese" "#milk"))
|
(irc/channel->server `(("irc.dairy.com" . ,(cycle/new "#cheese" "#milk"))
|
||||||
("irc.color.com" . ,(cycle/new "#red" "#blue")))
|
("irc.color.com" . ,(cycle/new "#red" "#blue")))
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
"Mapping of functions to designated keybinding prefixes to stay organized.")
|
"Mapping of functions to designated keybinding prefixes to stay organized.")
|
||||||
|
|
||||||
;; Assert that no keybindings are colliding.
|
;; Assert that no keybindings are colliding.
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(= (alist/count kbd/prefixes)
|
(= (alist/count kbd/prefixes)
|
||||||
(->> kbd/prefixes
|
(->> kbd/prefixes
|
||||||
alist/values
|
alist/values
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
Values for F include:
|
Values for F include:
|
||||||
- workspace
|
- workspace
|
||||||
- x11"
|
- x11"
|
||||||
(prelude/assert (alist/has-key? f kbd/prefixes))
|
(prelude-assert (alist/has-key? f kbd/prefixes))
|
||||||
(string/format
|
(string/format
|
||||||
"%s-%s"
|
"%s-%s"
|
||||||
(alist/get f kbd/prefixes)
|
(alist/get f kbd/prefixes)
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
(rate keyboard/repeat-rate)
|
(rate keyboard/repeat-rate)
|
||||||
(delay keyboard/repeat-delay))
|
(delay keyboard/repeat-delay))
|
||||||
"Use xset to set the key-repeat RATE and DELAY."
|
"Use xset to set the key-repeat RATE and DELAY."
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "keyboard/set-key-repeat"
|
:name "keyboard/set-key-repeat"
|
||||||
:command (string/format "xset r rate %s %s" delay rate)))
|
:command (string/format "xset r rate %s %s" delay rate)))
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
(defun keyboard/swap-caps-lock-and-escape ()
|
(defun keyboard/swap-caps-lock-and-escape ()
|
||||||
"Swaps the caps lock and escape keys using xmodmap."
|
"Swaps the caps lock and escape keys using xmodmap."
|
||||||
(interactive)
|
(interactive)
|
||||||
;; TODO: Ensure these work once the tokenizing in prelude/start-process works
|
;; TODO: Ensure these work once the tokenizing in prelude-start-process works
|
||||||
;; as expected.
|
;; as expected.
|
||||||
(start-process "keyboard/swap-caps-lock-and-escape" nil "/usr/bin/xmodmap" "-e"
|
(start-process "keyboard/swap-caps-lock-and-escape" nil "/usr/bin/xmodmap" "-e"
|
||||||
"remove Lock = Caps_Lock")
|
"remove Lock = Caps_Lock")
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
;; Dependencies
|
;; Dependencies
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; TODO: Move `prelude/assert' elsewhere so that I can require it without
|
;; TODO: Move `prelude-assert' elsewhere so that I can require it without
|
||||||
;; introducing the circular dependency of list.el -> prelude.el -> list.el.
|
;; introducing the circular dependency of list.el -> prelude.el -> list.el.
|
||||||
;;(require 'prelude)
|
;;(require 'prelude)
|
||||||
(require 'dash)
|
(require 'dash)
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
;; (if (alist/has-key? k acc)
|
;; (if (alist/has-key? k acc)
|
||||||
;; (setf (alist-get k acc) (list v))
|
;; (setf (alist-get k acc) (list v))
|
||||||
;; (setf (alist-get k acc) (list v))))))))
|
;; (setf (alist-get k acc) (list v))))))))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (equal '(("John" . ("Cleese" "Malkovich"))
|
;; (equal '(("John" . ("Cleese" "Malkovich"))
|
||||||
;; ("Thomas" . ("Aquinas")))
|
;; ("Thomas" . ("Aquinas")))
|
||||||
;; (list/index (lambda (x) (plist-get x :first-name))
|
;; (list/index (lambda (x) (plist-get x :first-name))
|
||||||
|
@ -210,7 +210,7 @@ Be leery of using this with things like alists. Many data structures in Elisp
|
||||||
;; TODO: Add tests.
|
;; TODO: Add tests.
|
||||||
(defun list/dedupe-adjacent (xs)
|
(defun list/dedupe-adjacent (xs)
|
||||||
"Return XS without adjacent duplicates."
|
"Return XS without adjacent duplicates."
|
||||||
(prelude/assert (not (list/empty? xs)))
|
(prelude-assert (not (list/empty? xs)))
|
||||||
(list/reduce (list (list/first xs))
|
(list/reduce (list (list/first xs))
|
||||||
(lambda (x acc)
|
(lambda (x acc)
|
||||||
(if (equal x (list/first acc))
|
(if (equal x (list/first acc))
|
||||||
|
@ -223,16 +223,16 @@ Be leery of using this with things like alists. Many data structures in Elisp
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; (when list/tests?
|
;; (when list/tests?
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (= 0
|
;; (= 0
|
||||||
;; (list/length '())))
|
;; (list/length '())))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (= 5
|
;; (= 5
|
||||||
;; (list/length '(1 2 3 4 5))))
|
;; (list/length '(1 2 3 4 5))))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (= 16
|
;; (= 16
|
||||||
;; (list/reduce 1 (lambda (x acc) (+ x acc)) '(1 2 3 4 5))))
|
;; (list/reduce 1 (lambda (x acc) (+ x acc)) '(1 2 3 4 5))))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (equal '(2 4 6 8 10)
|
;; (equal '(2 4 6 8 10)
|
||||||
;; (list/map (lambda (x) (* x 2)) '(1 2 3 4 5)))))
|
;; (list/map (lambda (x) (* x 2)) '(1 2 3 4 5)))))
|
||||||
|
|
||||||
|
|
|
@ -82,23 +82,23 @@
|
||||||
|
|
||||||
(when maybe--run-tests?
|
(when maybe--run-tests?
|
||||||
;; nil?
|
;; nil?
|
||||||
(prelude/assert (maybe-nil? nil))
|
(prelude-assert (maybe-nil? nil))
|
||||||
(prelude/refute (maybe-nil? t))
|
(prelude-refute (maybe-nil? t))
|
||||||
;; some?
|
;; some?
|
||||||
(prelude/assert (maybe-some? 10))
|
(prelude-assert (maybe-some? 10))
|
||||||
(prelude/refute (maybe-some? nil))
|
(prelude-refute (maybe-some? nil))
|
||||||
;; nils?
|
;; nils?
|
||||||
(prelude/assert (maybe-nils? nil nil nil nil))
|
(prelude-assert (maybe-nils? nil nil nil nil))
|
||||||
(prelude/refute (maybe-nils? nil t nil t))
|
(prelude-refute (maybe-nils? nil t nil t))
|
||||||
;; somes?
|
;; somes?
|
||||||
(prelude/assert (maybe-somes? t 10 '(1 2 3) "some"))
|
(prelude-assert (maybe-somes? t 10 '(1 2 3) "some"))
|
||||||
(prelude/refute (maybe-somes? t nil '(1 2 3) "some"))
|
(prelude-refute (maybe-somes? t nil '(1 2 3) "some"))
|
||||||
;; default
|
;; default
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(and (= 0 (maybe-default 5 0))
|
(and (= 0 (maybe-default 5 0))
|
||||||
(= 5 (maybe-default 5 nil))))
|
(= 5 (maybe-default 5 nil))))
|
||||||
;; map
|
;; map
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(and (= 2 (maybe-map #'1+ 1))
|
(and (= 2 (maybe-map #'1+ 1))
|
||||||
(eq nil (maybe-map #'1+ nil)))))
|
(eq nil (maybe-map #'1+ nil)))))
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
;;; number.el --- Functions for working with numbers -*- lexical-binding: t -*-
|
;;; number.el --- Functions for working with numbers -*- lexical-binding: t -*-
|
||||||
|
|
||||||
;; Author: William Carroll <wpcarro@gmail.com>
|
;; Author: William Carroll <wpcarro@gmail.com>
|
||||||
|
;; Version: 0.0.1
|
||||||
|
;; Package-Requires: ((emacs "24"))
|
||||||
|
;; Homepage: https://user.git.corp.google.com/wpcarro/briefcase
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;
|
;;
|
||||||
|
@ -124,29 +128,29 @@ While this function is undeniably trivial, I have unintentionally done (- 1 x)
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(when number/test?
|
(when number/test?
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(number/positive? 10))
|
(number/positive? 10))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(number/natural? 10))
|
(number/natural? 10))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(number/whole? 10))
|
(number/whole? 10))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(number/whole? 0))
|
(number/whole? 0))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(number/integer? 10))
|
(number/integer? 10))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (= 120 (number/factorial 5)))
|
;; (= 120 (number/factorial 5)))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(number/even? 6))
|
(number/even? 6))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(number/odd? 6))
|
(number/odd? 6))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(number/positive? -10))
|
(number/positive? -10))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(number/natural? 10.0))
|
(number/natural? 10.0))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(number/natural? -10))
|
(number/natural? -10))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(number/natural? -10.0)))
|
(number/natural? -10.0)))
|
||||||
|
|
||||||
(provide 'number)
|
(provide 'number)
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
;;; prelude.el --- My attempt at augmenting Elisp stdlib -*- lexical-binding: t -*-
|
;;; prelude.el --- My attempt at augmenting Elisp stdlib -*- lexical-binding: t -*-
|
||||||
|
|
||||||
;; Author: William Carroll <wpcarro@gmail.com>
|
;; Author: William Carroll <wpcarro@gmail.com>
|
||||||
|
;; Version: 0.0.1
|
||||||
|
;; Package-Requires: ((emacs "24.3"))
|
||||||
|
;; Homepage: https://user.git.corp.google.com/wpcarro/briefcase
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;; Some of these ideas are scattered across other modules like `fs',
|
;; Some of these ideas are scattered across other modules like `fs',
|
||||||
|
@ -13,38 +17,29 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Third-party libraries
|
;; Dependencies
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(require 's)
|
|
||||||
(require 'dash)
|
(require 'dash)
|
||||||
|
(require 's)
|
||||||
(require 'f)
|
(require 'f)
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; Libraries
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
;; TODO: Maybe don't globally import everything here. Disable these and attepmt
|
|
||||||
;; to reload Emacs to assess damage.
|
|
||||||
(require 'string)
|
|
||||||
(require 'list)
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Utilities
|
;; Utilities
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defun prelude/to-string (x)
|
(defun prelude-to-string (x)
|
||||||
"Convert X to a string."
|
"Convert X to a string."
|
||||||
(format "%s" x))
|
(format "%s" x))
|
||||||
|
|
||||||
(defun prelude/inspect (&rest args)
|
(defun prelude-inspect (&rest args)
|
||||||
"Message `ARGS' where ARGS are any type."
|
"Message ARGS where ARGS are any type."
|
||||||
(->> args
|
(->> args
|
||||||
(list/map #'prelude/to-string)
|
(-map #'prelude-to-string)
|
||||||
(apply #'string/concat)
|
(apply #'s-concat)
|
||||||
message))
|
message))
|
||||||
|
|
||||||
(defmacro prelude/call-process-to-string (cmd &rest args)
|
(defmacro prelude-call-process-to-string (cmd &rest args)
|
||||||
"Return the string output of CMD called with ARGS."
|
"Return the string output of CMD called with ARGS."
|
||||||
`(with-temp-buffer
|
`(with-temp-buffer
|
||||||
(call-process ,cmd nil (current-buffer) nil ,@args)
|
(call-process ,cmd nil (current-buffer) nil ,@args)
|
||||||
|
@ -55,28 +50,28 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; TODO: Should I `throw' instead of `error' here?
|
;; TODO: Should I `throw' instead of `error' here?
|
||||||
(defmacro prelude/assert (x)
|
(defmacro prelude-assert (x)
|
||||||
"Errors unless X is t.
|
"Errors unless X is t.
|
||||||
These are strict assertions and purposely do not rely on truthiness."
|
These are strict assertions and purposely do not rely on truthiness."
|
||||||
(let ((as-string (prelude/to-string x)))
|
(let ((as-string (prelude-to-string x)))
|
||||||
`(unless (equal t ,x)
|
`(unless (equal t ,x)
|
||||||
(error (string/concat "Assertion failed: " ,as-string)))))
|
(error (s-concat "Assertion failed: " ,as-string)))))
|
||||||
|
|
||||||
(defmacro prelude/refute (x)
|
(defmacro prelude-refute (x)
|
||||||
"Errors unless X is nil."
|
"Errors unless X is nil."
|
||||||
(let ((as-string (prelude/to-string x)))
|
(let ((as-string (prelude-to-string x)))
|
||||||
`(unless (equal nil ,x)
|
`(unless (equal nil ,x)
|
||||||
(error (string/concat "Refutation failed: " ,as-string)))))
|
(error (s-concat "Refutation failed: " ,as-string)))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Adapter functions
|
;; Adapter functions
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defun prelude/identity (x)
|
(defun prelude-identity (x)
|
||||||
"Return X unchanged."
|
"Return X unchanged."
|
||||||
x)
|
x)
|
||||||
|
|
||||||
(defun prelude/const (x)
|
(defun prelude-const (x)
|
||||||
"Return a variadic lambda that will return X."
|
"Return a variadic lambda that will return X."
|
||||||
(lambda (&rest _) x))
|
(lambda (&rest _) x))
|
||||||
|
|
||||||
|
@ -86,54 +81,54 @@ These are strict assertions and purposely do not rely on truthiness."
|
||||||
|
|
||||||
;; TODO: Consider packaging these into a linum-color.el package.
|
;; TODO: Consider packaging these into a linum-color.el package.
|
||||||
;; TODO: Generate the color used here from the theme.
|
;; TODO: Generate the color used here from the theme.
|
||||||
(defvar linum/safe? nil
|
(defvar prelude--linum-safe? nil
|
||||||
"Flag indicating whether or not it is safe to work with `linum-mode'.")
|
"Flag indicating whether it is safe to work with function `linum-mode'.")
|
||||||
|
|
||||||
(defvar linum/mru-color nil
|
(defvar prelude--linum-mru-color nil
|
||||||
"Stores the color most recently attempted to be applied.")
|
"Stores the color most recently attempted to be applied.")
|
||||||
|
|
||||||
(add-hook 'linum-mode-hook
|
(add-hook 'linum-mode-hook
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(setq linum/safe? t)
|
(setq prelude--linum-safe? t)
|
||||||
(when (maybe-some? linum/mru-color)
|
(when (maybe-some? prelude--linum-mru-color)
|
||||||
(set-face-foreground 'linum linum/mru-color))))
|
(set-face-foreground 'linum prelude--linum-mru-color))))
|
||||||
|
|
||||||
(defun prelude/set-line-number-color (color)
|
(defun prelude-set-line-number-color (color)
|
||||||
"Safely set linum color to `COLOR'.
|
"Safely set linum color to `COLOR'.
|
||||||
|
|
||||||
If this is called before Emacs initializes, the color will be stored in
|
If this is called before Emacs initializes, the color will be stored in
|
||||||
`linum/mru-color' and applied once initialization completes.
|
`prelude--linum-mru-color' and applied once initialization completes.
|
||||||
|
|
||||||
Why is this safe?
|
Why is this safe?
|
||||||
If `(set-face-foreground 'linum)' is called before initialization completes,
|
If `(set-face-foreground 'linum)' is called before initialization completes,
|
||||||
Emacs will silently fail. Without this function, it is easy to introduce
|
Emacs will silently fail. Without this function, it is easy to introduce
|
||||||
difficult to troubleshoot bugs in your init files."
|
difficult to troubleshoot bugs in your init files."
|
||||||
(if linum/safe?
|
(if prelude--linum-safe?
|
||||||
(set-face-foreground 'linum color)
|
(set-face-foreground 'linum color)
|
||||||
(setq linum/mru-color color)))
|
(setq prelude--linum-mru-color color)))
|
||||||
|
|
||||||
(defun prelude/prompt (prompt)
|
(defun prelude-prompt (prompt)
|
||||||
"Read input from user with PROMPT."
|
"Read input from user with PROMPT."
|
||||||
(read-string prompt))
|
(read-string prompt))
|
||||||
|
|
||||||
(cl-defun prelude/start-process (&key name command)
|
(cl-defun prelude-start-process (&key name command)
|
||||||
"Pass command string, COMMAND, and the function name, NAME.
|
"Pass command string, COMMAND, and the function name, NAME.
|
||||||
This is a wrapper around `start-process' that has an API that resembles
|
This is a wrapper around `start-process' that has an API that resembles
|
||||||
`shell-command'."
|
`shell-command'."
|
||||||
;; TODO: Fix the bug with tokenizing here, since it will split any whitespace
|
;; TODO: Fix the bug with tokenizing here, since it will split any whitespace
|
||||||
;; character, even though it shouldn't in the case of quoted string in shell.
|
;; character, even though it shouldn't in the case of quoted string in shell.
|
||||||
;; e.g. - "xmodmap -e 'one two three'" => '("xmodmap" "-e" "'one two three'")
|
;; e.g. - "xmodmap -e 'one two three'" => '("xmodmap" "-e" "'one two three'")
|
||||||
(prelude/refute (string/contains? "'" command))
|
(prelude-refute (s-contains? "'" command))
|
||||||
(let* ((tokens (string/split " " command))
|
(let* ((tokens (s-split " " command))
|
||||||
(program-name (list/head tokens))
|
(program-name (nth 0 tokens))
|
||||||
(program-args (list/tail tokens)))
|
(program-args (cdr tokens)))
|
||||||
(apply #'start-process
|
(apply #'start-process
|
||||||
`(,(string/format "*%s<%s>*" program-name name)
|
`(,(format "*%s<%s>*" program-name name)
|
||||||
,nil
|
,nil
|
||||||
,program-name
|
,program-name
|
||||||
,@program-args))))
|
,@program-args))))
|
||||||
|
|
||||||
(defun prelude/executable-exists? (name)
|
(defun prelude-executable-exists? (name)
|
||||||
"Return t if CLI tool NAME exists according to `exec-path'."
|
"Return t if CLI tool NAME exists according to `exec-path'."
|
||||||
(let ((file (locate-file name exec-path)))
|
(let ((file (locate-file name exec-path)))
|
||||||
(require 'maybe)
|
(require 'maybe)
|
||||||
|
@ -141,7 +136,7 @@ This is a wrapper around `start-process' that has an API that resembles
|
||||||
(f-exists? file)
|
(f-exists? file)
|
||||||
nil)))
|
nil)))
|
||||||
|
|
||||||
(defmacro prelude/time (x)
|
(defmacro prelude-time (x)
|
||||||
"Print the time it takes to evaluate X."
|
"Print the time it takes to evaluate X."
|
||||||
`(benchmark 1 ',x))
|
`(benchmark 1 ',x))
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
(defun pulse-audio-toggle-mute ()
|
(defun pulse-audio-toggle-mute ()
|
||||||
"Mute the default sink."
|
"Mute the default sink."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "pulse-audio-toggle-mute"
|
:name "pulse-audio-toggle-mute"
|
||||||
:command "pactl set-sink-mute @DEFAULT_SINK@ toggle")
|
:command "pactl set-sink-mute @DEFAULT_SINK@ toggle")
|
||||||
(pulse-audio--message "Mute toggled."))
|
(pulse-audio--message "Mute toggled."))
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
(defun pulse-audio-toggle-microphone ()
|
(defun pulse-audio-toggle-microphone ()
|
||||||
"Mute the default sink."
|
"Mute the default sink."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "pulse-audio-toggle-microphone"
|
:name "pulse-audio-toggle-microphone"
|
||||||
:command "pactl set-source-mute @DEFAULT_SOURCE@ toggle")
|
:command "pactl set-source-mute @DEFAULT_SOURCE@ toggle")
|
||||||
(pulse-audio--message "Microphone toggled."))
|
(pulse-audio--message "Microphone toggled."))
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
(defun pulse-audio-decrease-volume ()
|
(defun pulse-audio-decrease-volume ()
|
||||||
"Low the volume output of the default sink."
|
"Low the volume output of the default sink."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "pulse-audio-decrease-volume"
|
:name "pulse-audio-decrease-volume"
|
||||||
:command (string/format "pactl set-sink-volume @DEFAULT_SINK@ -%s%%"
|
:command (string/format "pactl set-sink-volume @DEFAULT_SINK@ -%s%%"
|
||||||
pulse-audio--step-size))
|
pulse-audio--step-size))
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
(defun pulse-audio-increase-volume ()
|
(defun pulse-audio-increase-volume ()
|
||||||
"Raise the volume output of the default sink."
|
"Raise the volume output of the default sink."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "pulse-audio-increase-volume"
|
:name "pulse-audio-increase-volume"
|
||||||
:command (string/format "pactl set-sink-volume @DEFAULT_SINK@ +%s%%"
|
:command (string/format "pactl set-sink-volume @DEFAULT_SINK@ +%s%%"
|
||||||
pulse-audio--step-size))
|
pulse-audio--step-size))
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
;; TODO: Support random-sample
|
;; TODO: Support random-sample
|
||||||
;; (defun random-sample (n xs)
|
;; (defun random-sample (n xs)
|
||||||
;; "Return a randomly sample of list XS of size N."
|
;; "Return a randomly sample of list XS of size N."
|
||||||
;; (prelude/assert (and (>= n 0) (< n (list/length xs))))
|
;; (prelude-assert (and (>= n 0) (< n (list/length xs))))
|
||||||
;; (cl-labels ((do-sample
|
;; (cl-labels ((do-sample
|
||||||
;; (n xs y ys)
|
;; (n xs y ys)
|
||||||
;; (if (= n (set/count ys))
|
;; (if (= n (set/count ys))
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
(defun screen-brightness/increase ()
|
(defun screen-brightness/increase ()
|
||||||
"Increase the screen brightness."
|
"Increase the screen brightness."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "screen-brightness/increase"
|
:name "screen-brightness/increase"
|
||||||
:command (string/format "xbacklight -inc %s" screen-brightness/step-size))
|
:command (string/format "xbacklight -inc %s" screen-brightness/step-size))
|
||||||
(message "[screen-brightness.el] Increased screen brightness."))
|
(message "[screen-brightness.el] Increased screen brightness."))
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
(defun screen-brightness/decrease ()
|
(defun screen-brightness/decrease ()
|
||||||
"Decrease the screen brightness."
|
"Decrease the screen brightness."
|
||||||
(interactive)
|
(interactive)
|
||||||
(prelude/start-process
|
(prelude-start-process
|
||||||
:name "screen-brightness/decrease"
|
:name "screen-brightness/decrease"
|
||||||
:command (string/format "xbacklight -dec %s" screen-brightness/step-size))
|
:command (string/format "xbacklight -dec %s" screen-brightness/step-size))
|
||||||
(message "[screen-brightness.el] Decreased screen brightness."))
|
(message "[screen-brightness.el] Decreased screen brightness."))
|
||||||
|
|
|
@ -113,59 +113,59 @@
|
||||||
|
|
||||||
(when set/enable-testing?
|
(when set/enable-testing?
|
||||||
;; set/distinct?
|
;; set/distinct?
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/distinct? (set/new 'one 'two 'three)
|
(set/distinct? (set/new 'one 'two 'three)
|
||||||
(set/new 'a 'b 'c)))
|
(set/new 'a 'b 'c)))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(set/distinct? (set/new 1 2 3)
|
(set/distinct? (set/new 1 2 3)
|
||||||
(set/new 3 4 5)))
|
(set/new 3 4 5)))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(set/distinct? (set/new 1 2 3)
|
(set/distinct? (set/new 1 2 3)
|
||||||
(set/new 1 2 3)))
|
(set/new 1 2 3)))
|
||||||
;; set/equal?
|
;; set/equal?
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(set/equal? (set/new 'a 'b 'c)
|
(set/equal? (set/new 'a 'b 'c)
|
||||||
(set/new 'x 'y 'z)))
|
(set/new 'x 'y 'z)))
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(set/equal? (set/new 'a 'b 'c)
|
(set/equal? (set/new 'a 'b 'c)
|
||||||
(set/new 'a 'b)))
|
(set/new 'a 'b)))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/equal? (set/new 'a 'b 'c)
|
(set/equal? (set/new 'a 'b 'c)
|
||||||
(set/new 'a 'b 'c)))
|
(set/new 'a 'b 'c)))
|
||||||
;; set/intersection
|
;; set/intersection
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/equal? (set/new 2 3)
|
(set/equal? (set/new 2 3)
|
||||||
(set/intersection (set/new 1 2 3)
|
(set/intersection (set/new 1 2 3)
|
||||||
(set/new 2 3 4))))
|
(set/new 2 3 4))))
|
||||||
;; set/{from,to}-list
|
;; set/{from,to}-list
|
||||||
(prelude/assert (equal '(1 2 3)
|
(prelude-assert (equal '(1 2 3)
|
||||||
(->> '(1 1 2 2 3 3)
|
(->> '(1 1 2 2 3 3)
|
||||||
set/from-list
|
set/from-list
|
||||||
set/to-list)))
|
set/to-list)))
|
||||||
(let ((primary-colors (set/new "red" "green" "blue")))
|
(let ((primary-colors (set/new "red" "green" "blue")))
|
||||||
;; set/subset?
|
;; set/subset?
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(set/subset? (set/new "black" "grey")
|
(set/subset? (set/new "black" "grey")
|
||||||
primary-colors))
|
primary-colors))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/subset? (set/new "red")
|
(set/subset? (set/new "red")
|
||||||
primary-colors))
|
primary-colors))
|
||||||
;; set/superset?
|
;; set/superset?
|
||||||
(prelude/refute
|
(prelude-refute
|
||||||
(set/superset? primary-colors
|
(set/superset? primary-colors
|
||||||
(set/new "black" "grey")))
|
(set/new "black" "grey")))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/superset? primary-colors
|
(set/superset? primary-colors
|
||||||
(set/new "red" "green" "blue")))
|
(set/new "red" "green" "blue")))
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(set/superset? primary-colors
|
(set/superset? primary-colors
|
||||||
(set/new "red" "blue"))))
|
(set/new "red" "blue"))))
|
||||||
;; set/empty?
|
;; set/empty?
|
||||||
(prelude/assert (set/empty? (set/new)))
|
(prelude-assert (set/empty? (set/new)))
|
||||||
(prelude/refute (set/empty? (set/new 1 2 3)))
|
(prelude-refute (set/empty? (set/new 1 2 3)))
|
||||||
;; set/count
|
;; set/count
|
||||||
(prelude/assert (= 0 (set/count (set/new))))
|
(prelude-assert (= 0 (set/count (set/new))))
|
||||||
(prelude/assert (= 2 (set/count (set/new 1 1 2 2)))))
|
(prelude-assert (= 2 (set/count (set/new 1 1 2 2)))))
|
||||||
|
|
||||||
(provide 'set)
|
(provide 'set)
|
||||||
;;; set.el ends here
|
;;; set.el ends here
|
||||||
|
|
|
@ -111,15 +111,15 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; (when string/test?
|
;; (when string/test?
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (string=
|
;; (string=
|
||||||
;; (string/surround "-*-" "surround")
|
;; (string/surround "-*-" "surround")
|
||||||
;; "-*-surround-*-"))
|
;; "-*-surround-*-"))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (string=
|
;; (string=
|
||||||
;; (string/caps->kebab "CAPS_CASE_STRING")
|
;; (string/caps->kebab "CAPS_CASE_STRING")
|
||||||
;; "caps-case-string"))
|
;; "caps-case-string"))
|
||||||
;; (prelude/assert
|
;; (prelude-assert
|
||||||
;; (string=
|
;; (string=
|
||||||
;; (string/kebab->caps "kebab-case-string")
|
;; (string/kebab->caps "kebab-case-string")
|
||||||
;; "KEBAB_CASE_STRING")))
|
;; "KEBAB_CASE_STRING")))
|
||||||
|
|
|
@ -78,11 +78,11 @@ This is an adapter interface to `setf'."
|
||||||
(cl-defstruct dummy name age)
|
(cl-defstruct dummy name age)
|
||||||
(defvar test-dummy (make-dummy :name "Roofus" :age 19))
|
(defvar test-dummy (make-dummy :name "Roofus" :age 19))
|
||||||
(struct/set! dummy name "Doofus" test-dummy)
|
(struct/set! dummy name "Doofus" test-dummy)
|
||||||
(prelude/assert (string= "Doofus" (dummy-name test-dummy)))
|
(prelude-assert (string= "Doofus" (dummy-name test-dummy)))
|
||||||
(let ((result (struct/set dummy name "Shoofus" test-dummy)))
|
(let ((result (struct/set dummy name "Shoofus" test-dummy)))
|
||||||
;; Test the immutability of `struct/set'
|
;; Test the immutability of `struct/set'
|
||||||
(prelude/assert (string= "Doofus" (dummy-name test-dummy)))
|
(prelude-assert (string= "Doofus" (dummy-name test-dummy)))
|
||||||
(prelude/assert (string= "Shoofus" (dummy-name result)))))
|
(prelude-assert (string= "Shoofus" (dummy-name result)))))
|
||||||
|
|
||||||
(provide 'struct)
|
(provide 'struct)
|
||||||
;;; struct.el ends here
|
;;; struct.el ends here
|
||||||
|
|
|
@ -184,13 +184,13 @@ A tree is balanced if none of the differences between any two depths of two leaf
|
||||||
(list (tree-node 9)
|
(list (tree-node 9)
|
||||||
(tree-node 10)))))))
|
(tree-node 10)))))))
|
||||||
;; instance?
|
;; instance?
|
||||||
(prelude/assert (tree-instance? tree-a))
|
(prelude-assert (tree-instance? tree-a))
|
||||||
(prelude/assert (tree-instance? tree-b))
|
(prelude-assert (tree-instance? tree-b))
|
||||||
(prelude/refute (tree-instance? '(1 2 3)))
|
(prelude-refute (tree-instance? '(1 2 3)))
|
||||||
(prelude/refute (tree-instance? "oak"))
|
(prelude-refute (tree-instance? "oak"))
|
||||||
;; balanced?
|
;; balanced?
|
||||||
(prelude/assert (tree-balanced? 1 tree-a))
|
(prelude-assert (tree-balanced? 1 tree-a))
|
||||||
(prelude/refute (tree-balanced? 1 tree-b))
|
(prelude-refute (tree-balanced? 1 tree-b))
|
||||||
(message "Tests pass!")))
|
(message "Tests pass!")))
|
||||||
|
|
||||||
(provide 'tree)
|
(provide 'tree)
|
||||||
|
|
|
@ -69,12 +69,12 @@ This function mutates XS."
|
||||||
(when vector-enable-tests?
|
(when vector-enable-tests?
|
||||||
(let ((xs [1 2 3])
|
(let ((xs [1 2 3])
|
||||||
(ys [1 2 3]))
|
(ys [1 2 3]))
|
||||||
(prelude/assert (= 1 (vector-get 0 ys)))
|
(prelude-assert (= 1 (vector-get 0 ys)))
|
||||||
(vector-set 0 4 ys)
|
(vector-set 0 4 ys)
|
||||||
(prelude/assert (= 1 (vector-get 0 ys)))
|
(prelude-assert (= 1 (vector-get 0 ys)))
|
||||||
(prelude/assert (= 1 (vector-get 0 xs)))
|
(prelude-assert (= 1 (vector-get 0 xs)))
|
||||||
(vector-set! 0 4 xs)
|
(vector-set! 0 4 xs)
|
||||||
(prelude/assert (= 4 (vector-get 0 xs)))))
|
(prelude-assert (= 4 (vector-get 0 xs)))))
|
||||||
|
|
||||||
;; TODO: Decide between "remove" and "delete" as the appropriate verbs.
|
;; TODO: Decide between "remove" and "delete" as the appropriate verbs.
|
||||||
;; TODO: Implement this.
|
;; TODO: Implement this.
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
|
|
||||||
(defmacro vterm-mgt--assert-vterm-buffer ()
|
(defmacro vterm-mgt--assert-vterm-buffer ()
|
||||||
"Error when the `current-buffer' is not a vterm buffer."
|
"Error when the `current-buffer' is not a vterm buffer."
|
||||||
'(prelude/assert (vterm-mgt--instance? (current-buffer))))
|
'(prelude-assert (vterm-mgt--instance? (current-buffer))))
|
||||||
|
|
||||||
(defun vterm-mgt-next ()
|
(defun vterm-mgt-next ()
|
||||||
"Replace the current buffer with the next item in `vterm-mgt--instances'.
|
"Replace the current buffer with the next item in `vterm-mgt--instances'.
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
"List of `window-manager--named-workspace' structs.")
|
"List of `window-manager--named-workspace' structs.")
|
||||||
|
|
||||||
;; Assert that no two workspaces share KBDs.
|
;; Assert that no two workspaces share KBDs.
|
||||||
(prelude/assert (= (list/length window-manager--named-workspaces)
|
(prelude-assert (= (list/length window-manager--named-workspaces)
|
||||||
(->> window-manager--named-workspaces
|
(->> window-manager--named-workspaces
|
||||||
(list/map #'window-manager--named-workspace-kbd)
|
(list/map #'window-manager--named-workspace-kbd)
|
||||||
set/from-list
|
set/from-list
|
||||||
|
@ -188,7 +188,7 @@
|
||||||
cycle/from-list)
|
cycle/from-list)
|
||||||
"Cycle of the my EXWM workspaces.")
|
"Cycle of the my EXWM workspaces.")
|
||||||
|
|
||||||
(prelude/assert
|
(prelude-assert
|
||||||
(= exwm-workspace-number
|
(= exwm-workspace-number
|
||||||
(list/length window-manager--named-workspaces)))
|
(list/length window-manager--named-workspaces)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue