Make prefix alternatives and other functions literate
This commit is contained in:
parent
a651bcfb6b
commit
88cc27b890
@ -27,14 +27,308 @@ Death to any gui elements in emacs! Do this EARLY so that emacs doesn't redispla
|
||||
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
|
||||
#+END_SRC
|
||||
* Custom emacs-lisp
|
||||
An emacs version predicate builder
|
||||
** An emacs version predicate builder:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defmacro emacs-version-predicate (major-version minor-version)
|
||||
(defmacro imalison:emacs-version-predicate (major-version minor-version)
|
||||
`(lambda ()
|
||||
(or (> emacs-major-version ,major-version)
|
||||
(and (>= emacs-major-version ,major-version)
|
||||
(>= emacs-minor-version ,minor-version)))))
|
||||
(defalias emacs24_4-p (emacs-version-predicate 24 4))
|
||||
(defun imalison:check-emacs-version (major-version minor-version)
|
||||
(funcall (imalison:emacs-version-predicate major-version minor-version)))
|
||||
#+END_SRC
|
||||
|
||||
** Add a file to org-agenda-files in an idempotent way
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun imalison:add-to-org-agenda-files (incoming-files)
|
||||
(setq org-agenda-files
|
||||
(delete-dups
|
||||
(cl-loop for filepath in (append org-agenda-files incoming-files)
|
||||
when (and filepath (file-exists-p (file-truename filepath)))
|
||||
collect (file-truename filepath)))))
|
||||
#+END_SRC
|
||||
|
||||
** Compose functions taking arbitrarily many arguments and returning arbitrarily many arguments
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defmacro imalison:compose (name &rest funcs)
|
||||
"Build a new function with NAME that is the composition of FUNCS."
|
||||
`(defun ,name (&rest args)
|
||||
(imalison:compose-helper ,funcs)))
|
||||
|
||||
(defun imalison:make-list (thing)
|
||||
(if (listp thing)
|
||||
thing
|
||||
(list thing)))
|
||||
|
||||
(defmacro imalison:compose-helper (funcs)
|
||||
"Builds funcalls of FUNCS applied to the arg."
|
||||
(if (equal (length funcs) 0)
|
||||
(quote args)
|
||||
`(apply ,(car funcs)
|
||||
(imalison:make-list (imalison:compose-helper ,(cdr funcs))))))
|
||||
#+END_SRC
|
||||
** prefix-alternatives
|
||||
Prefix alternatives is a macro that builds a function that selects one of a collection of functions that are provided to the macro based on the value of the prefix argument.
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defmacro imalison:prefix-alternatives (name &rest alternatives)
|
||||
`(defun ,name (arg)
|
||||
(interactive "p")
|
||||
(setq function
|
||||
(cond
|
||||
,@(progn
|
||||
(let ((last-power 1))
|
||||
(cl-loop for alternative in alternatives
|
||||
collect `((eq arg ,last-power) (quote ,alternative))
|
||||
do (setq last-power (* last-power 4)))))))
|
||||
(setq function (or function)) ; Set a default value for function
|
||||
(setq current-prefix-arg nil)
|
||||
(call-interactively function)))
|
||||
#+END_SRC
|
||||
** TODO add commentary to the following
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun imalison:join-paths (&rest paths)
|
||||
(substring (mapconcat 'file-name-as-directory paths nil) 0 -1))
|
||||
|
||||
(defun random-choice (choices)
|
||||
(nth (random (length choices)) choices))
|
||||
|
||||
(defun display-prefix (arg)
|
||||
"Display the value of the raw prefix arg."
|
||||
(interactive "p")
|
||||
(message "%s" arg))
|
||||
|
||||
(defmacro imalison:prefix-alternatives (name &rest alternatives)
|
||||
`(defun ,name (arg)
|
||||
(interactive "p")
|
||||
(setq function
|
||||
(cond
|
||||
,@(progn
|
||||
(let ((last-power 1))
|
||||
(cl-loop for alternative in alternatives
|
||||
collect `((eq arg ,last-power) (quote ,alternative))
|
||||
do (setq last-power (* last-power 4)))))))
|
||||
(setq function (or function)) ; Set a default value for function
|
||||
(setq current-prefix-arg nil)
|
||||
(call-interactively function)))
|
||||
|
||||
(defmacro imalison:let-advise-around (name &rest forms)
|
||||
`(defun ,name (orig-func &rest args)
|
||||
(let ,forms
|
||||
(apply orig-func args))))
|
||||
|
||||
(defmacro imalison:dynamic-let-advise-around (name &rest getters)
|
||||
`(defun ,name (orig-func &rest args)
|
||||
(let ,(cl-loop for pair in getters
|
||||
collect `(,(car pair) (funcall (quote ,(cadr pair)))))
|
||||
(apply orig-func args))))
|
||||
|
||||
(defun imalison:uuid ()
|
||||
(interactive)
|
||||
(s-replace "\n" "" (shell-command-to-string "uuid")))
|
||||
|
||||
(defun imalison:disable-linum-mode ()
|
||||
(linum-mode 0))
|
||||
|
||||
(defun imalison:disable-smartparens-mode ()
|
||||
(smartparens-mode 0))
|
||||
|
||||
(defun imalison:insert-uuid ()
|
||||
(interactive)
|
||||
(insert (imalison:uuid)))
|
||||
|
||||
(defmacro suppress-messages (&rest forms)
|
||||
`(flet ((message (&rest r) nil))
|
||||
,@forms))
|
||||
|
||||
(defun imalison:compare-int-list (a b)
|
||||
(when (and a b)
|
||||
(cond ((> (car a) (car b)) 1)
|
||||
((< (car a) (car b)) -1)
|
||||
(t (imalison:compare-int-list (cdr a) (cdr b))))))
|
||||
|
||||
(defun imalison:get-lat-long ()
|
||||
(condition-case _ex
|
||||
(mapcar 'string-to-number (s-split "," (s-trim (shell-command-to-string
|
||||
"whereami"))))
|
||||
(error (list 37.7879312624533 -122.402388853402))))
|
||||
|
||||
(defun get-date-created-from-agenda-entry (agenda-entry)
|
||||
(org-time-string-to-time
|
||||
(org-entry-get (get-text-property 1 'org-marker agenda-entry) "CREATED")))
|
||||
|
||||
(defmacro defvar-setq (name value)
|
||||
(if (boundp name)
|
||||
`(setq ,name ,value)
|
||||
`(defvar ,name ,value)))
|
||||
|
||||
(defun imalison:imenu-prefix-flattened (index)
|
||||
(let ((flattened (imalison:flatten-imenu-index (cdr index))))
|
||||
(cl-loop for sub-item in flattened
|
||||
collect
|
||||
`(,(concat (car index) "." (car sub-item)) . ,(cdr sub-item)))))
|
||||
|
||||
(defun imalison:flatten-imenu-index (index)
|
||||
(let ((cdr-is-index (listp (cdr index))))
|
||||
(cond ((not (stringp (car index))) (cl-mapcan
|
||||
#'imalison:flatten-imenu-index index))
|
||||
(cdr-is-index (imalison:imenu-prefix-flattened index))
|
||||
(t (list index)))))
|
||||
|
||||
(defun imalison:make-imenu-index-flat ()
|
||||
(let ((original-imenu-function imenu-create-index-function))
|
||||
(setq imenu-create-index-function
|
||||
(lambda ()
|
||||
(imalison:flatten-imenu-index
|
||||
(funcall original-imenu-function))))))
|
||||
|
||||
(defmacro defvar-if-non-existent (name value)
|
||||
(unless (boundp name)
|
||||
`(defvar ,name ,value)))
|
||||
|
||||
(defun eval-region-or-last-sexp ()
|
||||
(interactive)
|
||||
(if (region-active-p) (call-interactively 'eval-region)
|
||||
(call-interactively 'eval-last-sexp)))
|
||||
|
||||
(defun undo-redo (&optional arg)
|
||||
(interactive "P")
|
||||
(if arg (undo-tree-redo) (undo-tree-undo)))
|
||||
|
||||
(defun up-list-region ()
|
||||
(interactive)
|
||||
(up-list) (set-mark-command nil) (backward-sexp))
|
||||
|
||||
(defun up-list-back ()
|
||||
(interactive)
|
||||
(up-list) (backward-sexp))
|
||||
|
||||
(defun unfill-paragraph (&optional region)
|
||||
"Takes a multi-line paragraph and makes it into a single line of text."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list t)))
|
||||
(let ((fill-column (point-max)))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(defun fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL,
|
||||
unfill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'unfill) t)))
|
||||
(let ((fill-column (if unfill (point-max) fill-column)))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(defun sudo-edit (&optional arg)
|
||||
"Edit currently visited file as root.
|
||||
|
||||
With a prefix ARG prompt for a file to visit.
|
||||
Will also prompt for a file to visit if current
|
||||
buffer is not visiting a file."
|
||||
(interactive "P")
|
||||
(if (or arg (not buffer-file-name))
|
||||
(find-file (concat "/sudo:root@localhost:"
|
||||
(ido-read-file-name "Find file (as root): ")))
|
||||
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
|
||||
|
||||
(defun frame-exists ()
|
||||
(cl-find-if
|
||||
(lambda (frame)
|
||||
(assoc 'display (frame-parameters frame))) (frame-list)))
|
||||
|
||||
(defun imalison:copy-shell-command-on-region (start end command)
|
||||
(interactive (list (region-beginning) (region-end)
|
||||
(read-shell-command "Shell command on region: ")))
|
||||
(let ((original-buffer (current-buffer)))
|
||||
(with-temp-buffer
|
||||
(let ((temp-buffer (current-buffer)))
|
||||
(with-current-buffer original-buffer
|
||||
(shell-command-on-region start end command temp-buffer))
|
||||
(kill-ring-save (point-max) (point-min))))))
|
||||
|
||||
(defun imalison:shell-command-on-region-replace (start end command)
|
||||
(interactive (list (region-beginning) (region-end)
|
||||
(read-shell-command "Shell command on region: ")))
|
||||
(shell-command-on-region start end command nil t))
|
||||
|
||||
(defun imalison:shell-command-on-region (arg)
|
||||
(interactive "P")
|
||||
(call-interactively (if arg 'imalison:shell-command-on-region-replace
|
||||
'imalison:copy-shell-command-on-region)))
|
||||
|
||||
(defun make-frame-if-none-exists ()
|
||||
(let* ((existing-frame (frame-exists)))
|
||||
(if existing-frame
|
||||
existing-frame
|
||||
(make-frame-on-display (getenv "DISPLAY")))))
|
||||
|
||||
(defun make-frame-if-none-exists-and-focus ()
|
||||
(make-frame-visible (select-frame (make-frame-if-none-exists))))
|
||||
|
||||
(defun copy-buffer-file-name ()
|
||||
(interactive)
|
||||
(add-string-to-kill-ring (file-name-nondirectory (buffer-file-name))))
|
||||
|
||||
(defun copy-buffer-file-path ()
|
||||
(interactive)
|
||||
(add-string-to-kill-ring (file-relative-name (buffer-file-name)
|
||||
(projectile-project-root))))
|
||||
|
||||
(defun copy-full-file-path ()
|
||||
(interactive)
|
||||
(add-string-to-kill-ring (buffer-file-name)))
|
||||
|
||||
(defun add-string-to-kill-ring (string)
|
||||
(with-temp-buffer
|
||||
(insert string)
|
||||
(kill-ring-save (point-max) (point-min))))
|
||||
|
||||
(defun open-pdf ()
|
||||
(interactive)
|
||||
(let ( (pdf-file (replace-regexp-in-string
|
||||
"\.tex$" ".pdf" buffer-file-name)))
|
||||
(shell-command (concat "open " pdf-file))))
|
||||
|
||||
(defun eval-and-replace ()
|
||||
(interactive)
|
||||
(backward-kill-sexp)
|
||||
(condition-case nil
|
||||
(prin1 (eval (read (current-kill 0)))
|
||||
(current-buffer))
|
||||
(error (message "Invalid expression")
|
||||
(insert (current-kill 0)))))
|
||||
|
||||
(defun flatten-imenu-index (index)
|
||||
(cl-mapcan
|
||||
(lambda (x)
|
||||
(if (listp (cdr x))
|
||||
(cl-mapcar (lambda (item)
|
||||
`(,(concat (car x) "/" (car item)) . ,(cdr item)))
|
||||
(flatten-imenu-index (cdr x)))
|
||||
(list x))) index))
|
||||
|
||||
(defun flatten-imenu-index-function (function)
|
||||
(lambda () (flatten-imenu-index (funcall function))))
|
||||
|
||||
(defun flatten-current-imenu-index-function ()
|
||||
(setq imenu-create-index-function
|
||||
(flatten-imenu-index-function imenu-create-index-function)))
|
||||
|
||||
(defun notification-center (title message)
|
||||
(flet ((encfn (s) (encode-coding-string s (keyboard-coding-system))))
|
||||
(shell-command
|
||||
(format "osascript -e 'display notification \"%s\" with title \"%s\"'"
|
||||
(encfn message) (encfn title)))))
|
||||
|
||||
(defun growl-notify (title message)
|
||||
(shell-command (format "grownotify -t %s -m %s" title message)))
|
||||
|
||||
(defun notify-send (title message)
|
||||
(shell-command (format "notify-send -u critical %s %s" title message)))
|
||||
|
||||
(defvar notify-function
|
||||
(cond ((eq system-type 'darwin) 'notification-center)
|
||||
((eq system-type 'gnu/linux) 'notify-send)))
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
@ -374,266 +668,6 @@ I use helm for almost all emacs completion
|
||||
;; functions
|
||||
;; =============================================================================
|
||||
|
||||
(defun imalison:join-paths (&rest paths)
|
||||
(substring (mapconcat 'file-name-as-directory paths nil) 0 -1))
|
||||
|
||||
(defmacro imalison:compose (name &rest funcs)
|
||||
"Build a new function with NAME that is the composition of FUNCS."
|
||||
`(defun ,name (&rest args)
|
||||
(imalison:compose-helper ,funcs)))
|
||||
|
||||
(defun imalison:make-list (thing)
|
||||
(if (listp thing)
|
||||
thing
|
||||
(list thing)))
|
||||
|
||||
(defmacro imalison:compose-helper (funcs)
|
||||
"Builds funcalls of FUNCS applied to the arg."
|
||||
(if (equal (length funcs) 0)
|
||||
(quote args)
|
||||
`(apply ,(car funcs)
|
||||
(imalison:make-list (imalison:compose-helper ,(cdr funcs))))))
|
||||
|
||||
(defun random-choice (choices)
|
||||
(nth (random (length choices)) choices))
|
||||
|
||||
(defun display-prefix (arg)
|
||||
"Display the value of the raw prefix arg."
|
||||
(interactive "p")
|
||||
(message "%s" arg))
|
||||
|
||||
(defmacro imalison:prefix-alternatives (name &rest alternatives)
|
||||
`(defun ,name (arg)
|
||||
(interactive "p")
|
||||
(setq function
|
||||
(cond
|
||||
,@(progn
|
||||
(let ((last-power 1))
|
||||
(cl-loop for alternative in alternatives
|
||||
collect `((eq arg ,last-power) (quote ,alternative))
|
||||
do (setq last-power (* last-power 4)))))))
|
||||
(setq function (or function)) ; Set a default value for function
|
||||
(setq current-prefix-arg nil)
|
||||
(call-interactively function)))
|
||||
|
||||
(defmacro imalison:let-advise-around (name &rest forms)
|
||||
`(defun ,name (orig-func &rest args)
|
||||
(let ,forms
|
||||
(apply orig-func args))))
|
||||
|
||||
(defmacro imalison:dynamic-let-advise-around (name &rest getters)
|
||||
`(defun ,name (orig-func &rest args)
|
||||
(let ,(cl-loop for pair in getters
|
||||
collect `(,(car pair) (funcall (quote ,(cadr pair)))))
|
||||
(apply orig-func args))))
|
||||
|
||||
(defun imalison:uuid ()
|
||||
(interactive)
|
||||
(s-replace "\n" "" (shell-command-to-string "uuid")))
|
||||
|
||||
(defun imalison:disable-linum-mode ()
|
||||
(linum-mode 0))
|
||||
|
||||
(defun imalison:disable-smartparens-mode ()
|
||||
(smartparens-mode 0))
|
||||
|
||||
(defun imalison:insert-uuid ()
|
||||
(interactive)
|
||||
(insert (imalison:uuid)))
|
||||
|
||||
(defmacro suppress-messages (&rest forms)
|
||||
`(flet ((message (&rest r) nil))
|
||||
,@forms))
|
||||
|
||||
(defun imalison:compare-int-list (a b)
|
||||
(when (and a b)
|
||||
(cond ((> (car a) (car b)) 1)
|
||||
((< (car a) (car b)) -1)
|
||||
(t (imalison:compare-int-list (cdr a) (cdr b))))))
|
||||
|
||||
(defun imalison:get-lat-long ()
|
||||
(condition-case _ex
|
||||
(mapcar 'string-to-number (s-split "," (s-trim (shell-command-to-string
|
||||
"whereami"))))
|
||||
(error (list 37.7879312624533 -122.402388853402))))
|
||||
|
||||
(defun get-date-created-from-agenda-entry (agenda-entry)
|
||||
(org-time-string-to-time
|
||||
(org-entry-get (get-text-property 1 'org-marker agenda-entry) "CREATED")))
|
||||
|
||||
(defmacro defvar-setq (name value)
|
||||
(if (boundp name)
|
||||
`(setq ,name ,value)
|
||||
`(defvar ,name ,value)))
|
||||
|
||||
(defun imalison:imenu-prefix-flattened (index)
|
||||
(let ((flattened (imalison:flatten-imenu-index (cdr index))))
|
||||
(cl-loop for sub-item in flattened
|
||||
collect
|
||||
`(,(concat (car index) "." (car sub-item)) . ,(cdr sub-item)))))
|
||||
|
||||
(defun imalison:flatten-imenu-index (index)
|
||||
(let ((cdr-is-index (listp (cdr index))))
|
||||
(cond ((not (stringp (car index))) (cl-mapcan
|
||||
#'imalison:flatten-imenu-index index))
|
||||
(cdr-is-index (imalison:imenu-prefix-flattened index))
|
||||
(t (list index)))))
|
||||
|
||||
(defun imalison:make-imenu-index-flat ()
|
||||
(let ((original-imenu-function imenu-create-index-function))
|
||||
(setq imenu-create-index-function
|
||||
(lambda ()
|
||||
(imalison:flatten-imenu-index
|
||||
(funcall original-imenu-function))))))
|
||||
|
||||
(defmacro defvar-if-non-existent (name value)
|
||||
(unless (boundp name)
|
||||
`(defvar ,name ,value)))
|
||||
|
||||
(defun eval-region-or-last-sexp ()
|
||||
(interactive)
|
||||
(if (region-active-p) (call-interactively 'eval-region)
|
||||
(call-interactively 'eval-last-sexp)))
|
||||
|
||||
(defun undo-redo (&optional arg)
|
||||
(interactive "P")
|
||||
(if arg (undo-tree-redo) (undo-tree-undo)))
|
||||
|
||||
(defun up-list-region ()
|
||||
(interactive)
|
||||
(up-list) (set-mark-command nil) (backward-sexp))
|
||||
|
||||
(defun up-list-back ()
|
||||
(interactive)
|
||||
(up-list) (backward-sexp))
|
||||
|
||||
(defun unfill-paragraph (&optional region)
|
||||
"Takes a multi-line paragraph and makes it into a single line of text."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list t)))
|
||||
(let ((fill-column (point-max)))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(defun fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL,
|
||||
unfill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'unfill) t)))
|
||||
(let ((fill-column (if unfill (point-max) fill-column)))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(defun sudo-edit (&optional arg)
|
||||
"Edit currently visited file as root.
|
||||
|
||||
With a prefix ARG prompt for a file to visit.
|
||||
Will also prompt for a file to visit if current
|
||||
buffer is not visiting a file."
|
||||
(interactive "P")
|
||||
(if (or arg (not buffer-file-name))
|
||||
(find-file (concat "/sudo:root@localhost:"
|
||||
(ido-read-file-name "Find file (as root): ")))
|
||||
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
|
||||
|
||||
(defun frame-exists ()
|
||||
(cl-find-if
|
||||
(lambda (frame)
|
||||
(assoc 'display (frame-parameters frame))) (frame-list)))
|
||||
|
||||
(defun imalison:copy-shell-command-on-region (start end command)
|
||||
(interactive (list (region-beginning) (region-end)
|
||||
(read-shell-command "Shell command on region: ")))
|
||||
(let ((original-buffer (current-buffer)))
|
||||
(with-temp-buffer
|
||||
(let ((temp-buffer (current-buffer)))
|
||||
(with-current-buffer original-buffer
|
||||
(shell-command-on-region start end command temp-buffer))
|
||||
(kill-ring-save (point-max) (point-min))))))
|
||||
|
||||
(defun imalison:shell-command-on-region-replace (start end command)
|
||||
(interactive (list (region-beginning) (region-end)
|
||||
(read-shell-command "Shell command on region: ")))
|
||||
(shell-command-on-region start end command nil t))
|
||||
|
||||
(defun imalison:shell-command-on-region (arg)
|
||||
(interactive "P")
|
||||
(call-interactively (if arg 'imalison:shell-command-on-region-replace
|
||||
'imalison:copy-shell-command-on-region)))
|
||||
|
||||
(defun make-frame-if-none-exists ()
|
||||
(let* ((existing-frame (frame-exists)))
|
||||
(if existing-frame
|
||||
existing-frame
|
||||
(make-frame-on-display (getenv "DISPLAY")))))
|
||||
|
||||
(defun make-frame-if-none-exists-and-focus ()
|
||||
(make-frame-visible (select-frame (make-frame-if-none-exists))))
|
||||
|
||||
(defun copy-buffer-file-name ()
|
||||
(interactive)
|
||||
(add-string-to-kill-ring (file-name-nondirectory (buffer-file-name))))
|
||||
|
||||
(defun copy-buffer-file-path ()
|
||||
(interactive)
|
||||
(add-string-to-kill-ring (file-relative-name (buffer-file-name)
|
||||
(projectile-project-root))))
|
||||
|
||||
(defun copy-full-file-path ()
|
||||
(interactive)
|
||||
(add-string-to-kill-ring (buffer-file-name)))
|
||||
|
||||
(defun add-string-to-kill-ring (string)
|
||||
(with-temp-buffer
|
||||
(insert string)
|
||||
(kill-ring-save (point-max) (point-min))))
|
||||
|
||||
(defun open-pdf ()
|
||||
(interactive)
|
||||
(let ( (pdf-file (replace-regexp-in-string
|
||||
"\.tex$" ".pdf" buffer-file-name)))
|
||||
(shell-command (concat "open " pdf-file))))
|
||||
|
||||
(defun eval-and-replace ()
|
||||
(interactive)
|
||||
(backward-kill-sexp)
|
||||
(condition-case nil
|
||||
(prin1 (eval (read (current-kill 0)))
|
||||
(current-buffer))
|
||||
(error (message "Invalid expression")
|
||||
(insert (current-kill 0)))))
|
||||
|
||||
(defun flatten-imenu-index (index)
|
||||
(cl-mapcan
|
||||
(lambda (x)
|
||||
(if (listp (cdr x))
|
||||
(cl-mapcar (lambda (item)
|
||||
`(,(concat (car x) "/" (car item)) . ,(cdr item)))
|
||||
(flatten-imenu-index (cdr x)))
|
||||
(list x))) index))
|
||||
|
||||
(defun flatten-imenu-index-function (function)
|
||||
(lambda () (flatten-imenu-index (funcall function))))
|
||||
|
||||
(defun flatten-current-imenu-index-function ()
|
||||
(setq imenu-create-index-function
|
||||
(flatten-imenu-index-function imenu-create-index-function)))
|
||||
|
||||
(defun notification-center (title message)
|
||||
(flet ((encfn (s) (encode-coding-string s (keyboard-coding-system))))
|
||||
(shell-command
|
||||
(format "osascript -e 'display notification \"%s\" with title \"%s\"'"
|
||||
(encfn message) (encfn title)))))
|
||||
|
||||
(defun growl-notify (title message)
|
||||
(shell-command (format "grownotify -t %s -m %s" title message)))
|
||||
|
||||
(defun notify-send (title message)
|
||||
(shell-command (format "notify-send -u critical %s %s" title message)))
|
||||
|
||||
(defvar notify-function
|
||||
(cond ((eq system-type 'darwin) 'notification-center)
|
||||
((eq system-type 'gnu/linux) 'notify-send)))
|
||||
|
||||
;; =============================================================================
|
||||
;; General Emacs Options
|
||||
@ -1337,12 +1371,6 @@ the same tree node, and the headline of the tree node in the Org-mode file."
|
||||
(unless (boundp 'org-capture-templates)
|
||||
(defvar org-capture-templates nil))
|
||||
|
||||
(defun imalison:add-to-org-agenda-files (incoming-files)
|
||||
(setq org-agenda-files (delete-dups
|
||||
(cl-loop for filepath in (append org-agenda-files incoming-files)
|
||||
when (and filepath (file-exists-p (file-truename filepath)))
|
||||
collect (file-truename filepath)))))
|
||||
|
||||
(imalison:add-to-org-agenda-files
|
||||
(list imalison:org-gtd-file imalison:org-habits-file
|
||||
imalison:org-calendar-file))
|
||||
@ -2571,7 +2599,7 @@ Set the character used to represent spaces to ·, and the character used for tab
|
||||
(imalison:restore-ansi-term-color-vector))
|
||||
|
||||
(when t
|
||||
(if (emacs24_4-p)
|
||||
(if
|
||||
(advice-add 'load-theme :after #'imalison:after-load-theme)
|
||||
(defadvice load-theme (after name activate)
|
||||
(imalison:after-load-theme))))
|
||||
|
Loading…
Reference in New Issue
Block a user