Reorganize modules

This commit is contained in:
Henrik Lissner 2017-01-16 23:19:10 -05:00
parent 50ea98319f
commit f453b3cee1
55 changed files with 0 additions and 1535 deletions

0
modules/README.md Normal file
View file

View file

@ -1,142 +0,0 @@
;;; defuns-cc.el --- for module-cc.el
(defun doom--c-lineup-inclass (langelem)
(let ((inclass (assoc 'inclass c-syntactic-context)))
(save-excursion
(goto-char (c-langelem-pos inclass))
(if (or (looking-at "struct")
(looking-at "typedef struct"))
'+
'++))))
;;;###autoload
(defun doom/c-lineup-arglist (orig-fun &rest args)
"Improve indentation of continued C++11 lambda function opened as argument."
(if (and (eq major-mode 'c++-mode)
(ignore-errors
(save-excursion
(goto-char (c-langelem-pos langelem))
;; Detect "[...](" or "[...]{". preceded by "," or "(",
;; and with unclosed brace.
(looking-at ".*[(,][ \t]*\\[[^]]*\\][ \t]*[({][^}]*$"))))
0 ; no additional indent
(apply orig-fun args)))
;;;###autoload
(defun doom|init-c/c++-settings ()
(when (memq major-mode '(c-mode c++-mode objc-mode))
(c-toggle-electric-state -1)
(c-toggle-auto-newline -1)
(c-set-offset 'substatement-open '0) ; brackets should be at same indentation level as the statements they open
(c-set-offset 'inline-open '+)
(c-set-offset 'block-open '+)
(c-set-offset 'brace-list-open '+) ; all "opens" should be indented by the c-indent-level
(c-set-offset 'case-label '+) ; indent case labels by c-indent-level, too
(c-set-offset 'access-label '-)
(c-set-offset 'inclass 'doom--c-lineup-inclass)
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-close '0)
;; Certain mappings interfere with smartparens and custom bindings
(define-key c-mode-map (kbd "DEL") nil)
(define-key c-mode-base-map "#" 'self-insert-command)
(define-key c-mode-base-map "{" 'self-insert-command)
(define-key c-mode-base-map "}" 'self-insert-command)
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)
(define-key c-mode-base-map ";" 'self-insert-command)
(define-key c-mode-base-map "," 'self-insert-command)
(define-key c-mode-base-map ":" 'self-insert-command)
(define-key c-mode-base-map "(" 'self-insert-command)
(define-key c-mode-base-map ")" 'self-insert-command)
(define-key c++-mode-map "}" nil)
;; FIXME: fix smartparens
;; (define-key c++-mode-map ">" nil)
(map! :map (c-mode-base-map c++-mode-map) :i ">" 'doom/autoclose->-maybe)
(define-key c++-mode-map "<" nil)))
;;;###autoload
(defun doom/autoclose->-maybe ()
"For some reason smartparens won't autoskip >'s, this hack does."
(interactive)
(if (save-excursion
(backward-char)
(looking-at-p "[^ \t]>"))
(forward-char)
(call-interactively 'self-insert-command)))
(defun doom--copy-face (new-face face)
"Define NEW-FACE from existing FACE."
(copy-face face new-face)
(eval `(defvar ,new-face nil))
(set new-face new-face))
;;;###autoload
(defun doom|extra-fontify-c++ ()
;; We could place some regexes into `c-mode-common-hook', but
;; note that their evaluation order matters.
;; NOTE modern-cpp-font-lock will eventually supercede some of these rules
(font-lock-add-keywords
nil '(;; c++11 string literals
;; L"wide string"
;; L"wide string with UNICODE codepoint: \u2018"
;; u8"UTF-8 string", u"UTF-16 string", U"UTF-32 string"
("\\<\\([LuU8]+\\)\".*?\"" 1 font-lock-keyword-face)
;; R"(user-defined literal)"
;; R"( a "quot'd" string )"
;; R"delimiter(The String Data" )delimiter"
;; R"delimiter((a-z))delimiter" is equivalent to "(a-z)"
("\\(\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\)" 1 font-lock-keyword-face t) ; start delimiter
( "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\(.*?\\))[^\\s-\\\\()]\\{0,16\\}\"" 1 font-lock-string-face t) ; actual string
( "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(.*?\\()[^\\s-\\\\()]\\{0,16\\}\"\\)" 1 font-lock-keyword-face t) ; end delimiter
) t))
;;;###autoload
(defun doom|extra-fontify-c/c++ ()
(font-lock-add-keywords
nil '(;; PREPROCESSOR_CONSTANT, PREPROCESSORCONSTANT
("\\<[A-Z]*_[A-Z_]+\\>" . font-lock-constant-face)
("\\<[A-Z]\\{3,\\}\\>" . font-lock-constant-face)
;; integer/float/scientific numbers
("\\<\\([\\-+]*[0-9\\.]+\\)\\>" 1 font-lock-constant-face t)
("\\<\\([\\-+]*[0-9\\.]+\\)\\(f\\)\\>"
(1 font-lock-constant-face t)
(2 font-lock-keyword-face t))
("\\<\\([\\-+]*[0-9\\.]+\\)\\([eE]\\)\\([\\-+]?[0-9]+\\)\\>"
(1 font-lock-constant-face t)
(2 font-lock-keyword-face t)
(3 font-lock-constant-face t))
) t))
;;;###autoload
(defun doom/append-semicolon ()
"Append a semicolon to the end of this (or each selected) non-empty line."
(interactive)
(let ((beg (if (evil-visual-state-p) evil-visual-beginning (line-beginning-position)))
(end (if (evil-visual-state-p) evil-visual-end (line-end-position))))
(save-excursion
(goto-char beg)
(while (< (point) end)
(let ((lend (save-excursion (evil-last-non-blank) (point))))
(goto-char (1+ lend))
(unless (or (eq (char-before) ?\;)
(= lend (line-beginning-position)))
(insert ";")))
(forward-line)))
(when (evil-visual-state-p)
(evil-normal-state))))
;;;###autoload
(defun doom/sp-point-is-template-p (id action context)
(and (sp-in-code-p id action context)
(sp-point-after-word-p id action context)))
;;;###autoload
(defun doom/sp-point-after-include-p (id action context)
(and (sp-in-code-p id action context)
(save-excursion
(goto-char (line-beginning-position))
(looking-at-p "[ ]*#include[^<]+"))))
(provide 'defuns-cc)
;;; defuns-cc.el ends here

View file

@ -1,224 +0,0 @@
;;; defuns-scss.el
;;;###autoload
(defun doom/css-toggle-inline-or-block ()
"Toggles between a SCSS multiline block and one-line block."
(interactive)
(save-excursion
(let* ((bounds (ignore-errors (evil-a-curly)))
beg end)
(unless bounds
(user-error "No block found"))
(setq beg (car bounds)
end (cadr bounds))
(if (= (line-number-at-pos beg) (line-number-at-pos end))
(save-excursion
(goto-char (1+ beg)) (insert "\n")
(unless (string-match ";[\s\t]*}$" (buffer-substring-no-properties beg (1+ end)))
(goto-char end) (insert "\n"))
(replace-regexp ";[\s\t]*" ";\n" nil beg (1+ end))
(setq end (cadr (evil-a-curly)))
(evil-indent beg end)
(delete-trailing-whitespace beg end))
(goto-char beg)
(evil-join beg end)
(goto-char (1+ beg))
(just-one-space)
(goto-char (cadr (evil-inner-curly)))
(just-one-space)))))
;;;###autoload
(defalias 'doom/sass-build 'doom/scss-build)
;;;###autoload
(defun doom/scss-build ()
"Compile all sass/scss files in project"
(interactive)
(if (bound-and-true-p gulpjs-project-mode)
(let ((default-directory (doom/project-root)))
(compile "gulp sass"))
(let ((scss-dir (f-slash (or (f-traverse-upwards (lambda (d)
(string-match-p "/\\(\\(s[ca]\\|c\\)ss\\|styles\\)/?$" d))
default-directory)
default-directory))))
(compile (format "%s %s --update '%s':'%s'"
scss-sass-command
(mapconcat 'identity scss-sass-options " ")
scss-dir
(or scss-output-directory
(awhen (f-traverse-upwards (lambda (d)
(f-dir? (format "%s/css" d)))
default-directory)
(format "%s/css" it))
"."))))))
(defface doom/counsel-css-selector-depth-face-1
'((((class color) (background dark)) (:foreground "#ffff00"))
(((class color) (background light)) (:foreground "#0000ff"))
(t (:foreground "#ffff00")))
"Selector depth 1")
(defface doom/counsel-css-selector-depth-face-2
'((((class color) (background dark)) (:foreground "#ffdd00"))
(((class color) (background light)) (:foreground "#3300ff"))
(t (:foreground "#ffdd00")))
"Selector depth 2")
(defface doom/counsel-css-selector-depth-face-3
'((((class color) (background dark)) (:foreground "#ffbb00"))
(((class color) (background light)) (:foreground "#6600ff"))
(t (:foreground "#ffbb00")))
"Selector depth 3")
(defface doom/counsel-css-selector-depth-face-4
'((((class color) (background dark)) (:foreground "#ff9900"))
(((class color) (background light)) (:foreground "#9900ff"))
(t (:foreground "#ff9900")))
"Selector depth 4")
(defface doom/counsel-css-selector-depth-face-5
'((((class color) (background dark)) (:foreground "#ff7700"))
(((class color) (background light)) (:foreground "#cc00ff"))
(t (:foreground "#ff7700")))
"Selector depth 5")
(defface doom/counsel-css-selector-depth-face-6
'((((class color) (background dark)) (:foreground "#ff5500"))
(((class color) (background light)) (:foreground "#ff00ff"))
(t (:foreground "#ff5500")))
"Selector depth 6")
(cl-defun doom/counsel-css--open-brace-forward (&optional $bound)
"Move to next open brace, skip commented brace"
(interactive)
(let ($ret)
(setq $ret (re-search-forward "[^#]{" $bound t))
(unless $ret (cl-return-from doom/counsel-css--open-brace-forward nil))
(backward-char)
(if (doom/counsel-css--comment-p (point))
(doom/counsel-css--open-brace-forward $bound)
$ret)))
(defun doom/counsel-css--substr-last-string ($text $key)
"Return the tail of $text without $key strings"
(while (string-match $key $text)
(setq $text (substring $text (1+ (string-match $key $text)))))
$text)
(cl-defun doom/counsel-css--fetch-previous-line (&optional $prev $noexcursion)
"Return previous nth ($prev) line strings.
If $noexcursion is not-nil cursor doesn't move."
;; In compressed Css without this return, it takes long time
(if (eq 1 (line-number-at-pos))
(cl-return-from doom/counsel-css--fetch-previous-line ""))
(or $prev (setq $prev 1))
(if $noexcursion (setq $noexcursion (point)))
(move-beginning-of-line (- 1 $prev))
(let (($po (point)) $res)
(move-end-of-line 1)
(setq $res (buffer-substring-no-properties $po (point)))
(if $noexcursion (goto-char $noexcursion))
$res))
(defun doom/counsel-css--comment-p (&optional $pos)
(or $pos (setq $pos (point)))
(nth 4 (parse-partial-sexp (point-min) $pos)))
(cl-defun doom/counsel-css--extract-selector ()
"Return selector infomation at the point"
(let (($multi "") $s $po1 $po2 $po3 $str $commentp)
;; Collect multiple selector across previous lines
;; (i.e. "div, \n p, \n span {...}")
(save-excursion
(while (string-match ",[\s\t]*$"
(setq $s (doom/counsel-css--fetch-previous-line)))
;; Skip commented selector (i.e. " // .blue,")
(save-excursion
(move-beginning-of-line 1)
(setq $po3 (point))
(setq $commentp (doom/counsel-css--comment-p (search-forward ","))))
(unless $commentp
(setq $multi (format "%s %s" (string-trim $s) $multi)))))
;; Extract selector include one-line-nesting (i.e. "div { p {...} }")
(save-excursion
(skip-chars-backward "^{};\n")
(setq $po1 (point))
;; (setq $beg2 $po1)
(skip-chars-forward "^{")
(setq $po2 (point))
(setq $str (buffer-substring-no-properties $po1 $po2))
;; i.e. "div { .box { p" -> " p"
(setq $str (doom/counsel-css--substr-last-string $str "{\\|}"))
(setq $str (string-trim $str))
;; Return (selector-name . (selector-beginning-point . selector-end-point))
(if (equal $multi "")
(cons (format "%s" $str) (cons $po1 $po2))
(cons (format "%s %s" (string-trim $multi) $str)
(cons $po3 $po2))))))
(cl-defun doom/counsel-css--selector-next (&optional $bound)
"Return and goto next selector."
(unless (doom/counsel-css--open-brace-forward $bound)
(cl-return-from doom/counsel-css--selector-next nil))
(doom/counsel-css--extract-selector))
(defun doom/counsel-css--selector-to-hash (&optional no-line-numbers)
"Collect all selectors and make hash table"
(let ($selector $paren-beg $paren-end $hash $dep $max $sl
$selector-name $selector-beg $selector-end
$selector-line)
(setq $hash (make-hash-table :test 'equal))
(save-excursion
(goto-char (point-min))
(while (setq $selector (doom/counsel-css--selector-next))
(setq $paren-beg (point))
(setq $paren-end (scan-sexps $paren-beg 1))
(setq $max (cons $paren-end $max))
(setq $max (mapcar (lambda ($p) (if (< $p $paren-beg) nil $p)) $max))
(setq $max (delq nil $max))
(setq $dep (length $max))
(setq $selector-name (car $selector))
(setq
$selector-name
(cl-case $dep
(1 (propertize $selector-name 'face 'doom/counsel-css-selector-depth-face-1))
(2 (propertize $selector-name 'face 'doom/counsel-css-selector-depth-face-2))
(3 (propertize $selector-name 'face 'doom/counsel-css-selector-depth-face-3))
(4 (propertize $selector-name 'face 'doom/counsel-css-selector-depth-face-4))
(5 (propertize $selector-name 'face 'doom/counsel-css-selector-depth-face-5))
(6 (propertize $selector-name 'face 'doom/counsel-css-selector-depth-face-6))))
(setq $selector-beg (cadr $selector))
(setq $selector-end (cddr $selector))
(setq $selector-line (line-number-at-pos $selector-beg))
(if (<= $dep (length $sl))
(cl-loop repeat (- (1+ (length $sl)) $dep) do (pop $sl)))
(setq $sl (cons $selector-name $sl))
(puthash
(if no-line-numbers
(mapconcat 'identity (reverse $sl) " ")
(format "%s: %s"
(propertize (number-to-string $selector-line)
'face 'font-lock-function-name-face)
(mapconcat 'identity (reverse $sl) " ")))
(list $paren-beg $paren-end $dep $selector-beg $selector-end $selector-line)
$hash)))
$hash))
(defun doom/counsel-css--imenu-create-index-function ()
(let (($hash (doom/counsel-css--selector-to-hash t)))
(cl-loop for $k being hash-key in $hash using (hash-values $v)
collect (cons $k $v))))
;;;###autoload
(defun doom|counsel-css-imenu-setup ()
(when (memq major-mode '(css-mode scss-mode less-css-mode))
(setq imenu-create-index-function 'doom/counsel-css--imenu-create-index-function)))
;;;###autoload
(defun doom/counsel-css ()
(interactive)
(require 'counsel)
(ivy-read "Selectors: "
(let (($hash (doom/counsel-css--selector-to-hash)))
(cl-loop for $k being hash-key in $hash using (hash-values $v)
collect (cons $k $v)))
:require-match t
:caller 'doom/counsel-css))
(provide 'defuns-scss)
;;; defuns-scss.el ends here

View file

@ -1,63 +0,0 @@
;;; defuns-elisp.el
;;;###autoload (autoload 'doom:byte-compile "defuns-elisp" nil t)
(evil-define-command doom:byte-compile (&optional bang)
(interactive "<!>")
(if bang (doom-byte-compile) (byte-compile-file buffer-file-name)))
;;;###autoload
(defun doom/elisp-find-function-at-pt ()
(interactive)
(let ((func (function-called-at-point)))
(if func (find-function func))))
;;;###autoload
(defun doom/elisp-find-function-at-pt-other-window ()
(interactive)
(let ((func (function-called-at-point)))
(if func (find-function-other-window func))))
(defsubst doom--ert-pre ()
(save-buffer)
(eval-buffer))
;;;###autoload
(defun doom/ert-run-test ()
(interactive)
(let (case-fold-search thing)
(doom--ert-pre)
(setq thing (thing-at-point 'defun t))
(if thing
(if (string-match "(ert-deftest \\([^ ]+\\)" thing)
(ert-run-tests-interactively
(substring thing (match-beginning 1) (match-end 1)))
(user-error "Invalid test at point"))
(user-error "No test found at point"))))
;;;###autoload
(defun doom/ert-rerun-test ()
(interactive)
(let (case-fold-search thing)
(doom--ert-pre)
(setq thing (car-safe ert--selector-history))
(if thing
(ert-run-tests-interactively thing)
(message "No test found in history, looking for test at point")
(doom/ert-run-test))))
;;;###autoload
(defun doom/ert-run-all-tests ()
(interactive)
(ert-delete-all-tests)
(doom--ert-pre)
(ert-run-tests-interactively t))
;;;###autoload
(defun doom/elisp-inf-ielm ()
(ielm)
(let ((buf (current-buffer)))
(bury-buffer)
(pop-to-buffer buf)))
(provide 'defuns-elisp)
;;; defuns-elisp.el ends here

View file

@ -1,140 +0,0 @@
;;; defuns-eshell.el
(require 'eshell)
(defvar doom-eshell-buffers '() "")
;;;###autoload
(defun doom|eshell-cleanup ()
(when (eq major-mode 'eshell-mode)
(setq doom-eshell-buffers (delete (current-buffer) doom-eshell-buffers))
(cond ((doom/popup-p)
(delete-window))
((string= "eshell" (wg-workgroup-name (wg-current-workgroup t)))
(if (one-window-p)
(doom:workgroup-delete)
(delete-window))))))
;;;###autoload
(defun doom|eshell-init ()
(when (eq major-mode 'eshell-mode)
(add-to-list 'doom-eshell-buffers (current-buffer))))
(defun doom--eshell-outside-prompt-p (&optional offset)
(< (point) eshell-last-output-end))
(defun doom--eshell-current-git-branch ()
(let ((branch (car (loop for match in (split-string (shell-command-to-string "git branch") "\n")
when (string-match "^\*" match)
collect match))))
(if (not (eq branch nil))
(concat " [" (substring branch 2) "]")
"")))
;;;###autoload
(defun doom/eshell-split ()
(interactive)
(select-window (split-window-vertically))
(doom:eshell))
;;;###autoload
(defun doom/eshell-vsplit ()
(interactive)
(select-window (split-window-horizontally))
(doom:eshell))
;;;###autoload
(defun doom/eshell-prompt ()
(concat (propertize (abbreviate-file-name (eshell/pwd)) 'face 'eshell-prompt)
(propertize (doom--eshell-current-git-branch) 'face 'font-lock-function-name-face)
(propertize " λ " 'face 'font-lock-constant-face)))
;;;###autoload (autoload 'doom:eshell "defuns-eshell" nil t)
(evil-define-command doom:eshell (&optional bang)
"Create a shell in the current buffer. If BANG, use a popup buffer."
(interactive "<!>")
(let ((buf (if bang
(get-buffer-create "*eshell:popup*")
(generate-new-buffer eshell-buffer-name))))
(with-current-buffer buf
(unless (eq major-mode 'eshell-mode) (eshell-mode)))
(if bang
(doom/popup-buffer buf)
(pop-to-buffer-same-window buf))))
;;;###autoload
(defun doom/eshell-tab ()
"Create a separate tab for the shell."
(interactive)
(unless (wg-switch-to-workgroup (wg-get-workgroup "eshell" t) t)
(doom:tab-create nil "eshell"))
(let ((buf (--find (string-match-p "^\\*eshell" (buffer-name (window-buffer it)))
(doom/get-visible-windows))))
(if buf
(select-window (get-buffer-window buf))
(doom:eshell))
(doom/workgroup-display)))
;;;###autoload
(defun doom/eshell-frame ()
"Create a separate frame for the shell."
(interactive)
(doom/new-frame)
(doom:eshell))
;;;###autoload
(defun doom/eshell-evil-append ()
(interactive)
(goto-char eshell-last-output-end)
(call-interactively 'evil-append-line))
;;;###autoload
(defun doom/eshell-evil-append-maybe ()
(interactive)
(if (doom--eshell-outside-prompt-p)
(doom/eshell-evil-append)
(call-interactively 'evil-append)))
;;;###autoload
(defun doom/eshell-evil-prepend ()
(interactive)
(goto-char eshell-last-output-end)
(call-interactively 'evil-insert))
;;;###autoload
(defun doom/eshell-evil-prepend-maybe ()
(interactive)
(if (doom--eshell-outside-prompt-p)
(doom/eshell-evil-prepend)
(call-interactively 'evil-insert)))
;;;###autoload
(defun doom/eshell-evil-replace-maybe ()
(interactive)
(if (doom--eshell-outside-prompt-p)
(user-error "Cannot edit read-only region")
(call-interactively 'evil-replace)))
;;;###autoload
(defun doom/eshell-evil-replace-state-maybe ()
(interactive)
(if (doom--eshell-outside-prompt-p)
(user-error "Cannot edit read-only region")
(call-interactively 'evil-replace-state)))
;;;###autoload
(defun doom/eshell-evil-change ()
(interactive)
(when (doom--eshell-outside-prompt-p)
(goto-char eshell-last-output-end))
(call-interactively 'evil-change))
;;;###autoload
(defun doom/eshell-evil-change-line ()
(interactive)
(when (doom--eshell-outside-prompt-p)
(goto-char eshell-last-output-end))
(call-interactively 'evil-change-line))
(provide 'defuns-eshell)
;;; defuns-eshell.el ends here

View file

@ -1,18 +0,0 @@
;;; defuns-go.el
;; TODO Implement doom:go-get-package
(defun doom--go-get-package ())
;;;###autoload
(defun doom:go-test-run-all ()
(interactive)
(async-shell-command (format "cd '%s' && go test" (doom/project-root))))
;;;###autoload
(defun doom:go-test-run-package ()
(interactive)
(error "Not yet implemented")
(async-shell-command (format "cd '%s' && go test %s" (doom/project-root) (doom--go-get-package))))
(provide 'defuns-go)
;;; defuns-go.el ends here

View file

@ -1,35 +0,0 @@
;;; defuns-java.el
;; yasnippet defuns
;;;###autoload
(defun doom/java-android-mode-is-layout-file ()
(and android-mode
(eq major-mode 'nxml-mode)
(string-equal (file-name-base (directory-file-name default-directory)) "layout")))
;;;###autoload
(defun doom/java-android-mode-in-tags (&rest tags)
(-contains? tags (android-mode-tag-name)))
;;;###autoload
(defun doom/java-android-mode-tag-name ()
(save-excursion
(let (beg end)
(nxml-backward-up-element)
(evil-forward-word-begin)
(setq beg (point))
(evil-forward-WORD-end)
(setq end (1+ (point)))
(buffer-substring-no-properties beg end))))
;;;###autoload
(defun doom|android-mode-enable-maybe ()
(let ((root (doom/project-root)))
(when (or (doom/project-has-files "local.properties" root)
(doom/project-has-files "AndroidManifest.xml" root)
(doom/project-has-files "src/main/AndroidManifest.xml" root))
(android-mode +1)
(doom/set-build-command "./gradlew %s" "build.gradle"))))
(provide 'defuns-java)
;;; defuns-java.el ends here

View file

@ -1,15 +0,0 @@
;;; defuns-julia.el
;;;###autoload
(defun doom/julia-repl ()
"Run an inferior instance of `julia' inside Emacs."
(interactive)
(let ((buffer (get-buffer-create "*Julia*")))
(unless (comint-check-proc "*Julia*")
(apply #'make-comint-in-buffer "Julia" "*Julia*" julia-program julia-arguments))
(pop-to-buffer buffer)
(with-current-buffer buffer
(inferior-julia-mode))))
(provide 'defuns-julia)
;;; defuns-julia.el ends here

View file

@ -1,10 +0,0 @@
;;; defuns-lua.el
;;;###autoload
(defun doom/inf-lua ()
(interactive)
(lua-start-process "lua" "lua")
(pop-to-buffer lua-process-buffer))
(provide 'defuns-lua)
;;; defuns-lua.el ends here

View file

@ -1,24 +0,0 @@
;;; defuns-markdown.el
;; Implement strike-through formatting
(defvar doom--markdown-regex-del
"\\(^\\|[^\\]\\)\\(\\(~\\{2\\}\\)\\([^ \n \\]\\|[^ \n ]\\(?:.\\|\n[^\n]\\)*?[^\\ ]\\)\\(\\3\\)\\)")
;;;###autoload
(defun doom/markdown-insert-del ()
"Surround region in github strike-through delimiters."
(interactive)
(let ((delim "~~"))
(if (markdown-use-region-p)
;; Active region
(let ((bounds (markdown-unwrap-things-in-region
(region-beginning) (region-end)
doom--markdown-regex-del 2 4)))
(markdown-wrap-or-insert delim delim nil (car bounds) (cdr bounds)))
;; Bold markup removal, bold word at point, or empty markup insertion
(if (thing-at-point-looking-at doom--markdown-regex-del)
(markdown-unwrap-thing-at-point nil 2 4)
(markdown-wrap-or-insert delim delim 'word nil nil)))))
(provide 'defuns-markdown)
;;; defuns-markdown.el ends here

View file

@ -1,415 +0,0 @@
;;; defuns-org.el
;;;###autoload
(defun doom/org-indent ()
"Indent the current item (header or item). Otherwise, forward to
`self-insert-command'."
(interactive)
(cond ((org-at-item-p)
(org-indent-item-tree))
((org-at-heading-p)
(ignore-errors (org-demote)))
(t (call-interactively 'self-insert-command))))
;;;###autoload
(defun doom/org-indent-or-next-field ()
"Depending on the context either indent the current item or go the next table field."
(interactive)
(call-interactively (if (org-at-table-p) 'org-table-next-field 'doom/org-indent)))
;;;###autoload
(defun doom/org-dedent ()
"Dedent the current item (header or item). Otherwise, forward to
`self-insert-command'."
(interactive)
(cond ((org-at-item-p)
(let ((struct (if (org-region-active-p)
(save-excursion (goto-char (region-beginning))
(org-list-struct))
(org-list-struct))))
(org-list-indent-item-generic -1 nil struct)))
((org-at-heading-p)
(ignore-errors (org-promote)))
(t (call-interactively 'self-insert-command))))
;;;###autoload
(defun doom/org-dedent-or-prev-field ()
"Depending on the context either dedent the current item or go the previous
table field."
(interactive)
(call-interactively (if (org-at-table-p) 'org-table-previous-field 'doom/org-dedent)))
;;;###autoload
(defun doom/org-insert-item (direction)
"Inserts a new heading, table cell or item, depending on the context.
DIRECTION can be 'above or 'below.
I use this instead of `org-insert-item' or `org-insert-heading' which are too
opinionated and perform this simple task incorrectly (e.g. whitespace in the
wrong places)."
(interactive)
(let* ((context (org-element-lineage
(org-element-context)
'(table table-row headline inlinetask item plain-list)
t))
(type (org-element-type context)))
(cond ((eq type 'item)
(let ((marker (org-element-property :bullet context)))
(cl-case direction
('below
(goto-char (line-end-position))
(insert (concat "\n" marker)))
('above
(goto-char (line-beginning-position))
(insert marker)
(save-excursion (insert "\n")))))
(when (org-element-property :checkbox context)
(insert "[ ] ")))
((memq type '(table table-row))
(cl-case direction
('below (org-table-insert-row t))
('above (doom/org-table-prepend-row-or-shift-up))))
(t
(let ((level (save-excursion
(org-back-to-heading)
(org-element-property
:level (org-element-lineage (org-element-context)
'(headline) t)))))
(cl-case direction
('below
(let ((at-eol (= (point) (1- (line-end-position)))))
(goto-char (line-end-position))
(org-end-of-subtree)
(insert (concat "\n"
(when (= level 1)
(if at-eol
(ignore (cl-incf level))
"\n"))
(make-string level ?*)
" "))))
('above
(org-back-to-heading)
(org-insert-heading)
(when (= level 1)
(save-excursion (evil-open-above 1))
(save-excursion (insert "\n")))))
(when (org-element-property :todo-type context)
(org-todo 'todo)))))
(evil-append-line 1)))
;;;###autoload
(defun doom/org-toggle-checkbox ()
(interactive)
(let ((context (org-element-lineage (org-element-context) '(item) t)))
(when context
(org-end-of-line)
(org-beginning-of-line)
(if (org-element-property :checkbox context)
(when (search-backward-regexp "\\[[ +-]\\]" (line-beginning-position) t)
(delete-char 4))
(insert "[ ] ")))))
;;;###autoload
(defun doom/org-toggle-fold ()
"Toggle the local fold at the point (as opposed to cycling through all levels
with `org-cycle')."
(interactive)
(cond ((org-at-heading-p)
(outline-toggle-children))
((org-at-item-p)
(org-cycle))))
;;;###autoload
(defun doom/org-dwim-at-point ()
"Do-what-I-mean at point. This includes following timestamp links, aligning
tables, toggling checkboxes/todos, executing babel blocks, previewing latex
fragments, opening links, or refreshing images."
(interactive)
(let* ((scroll-pt (window-start))
(context (org-element-context))
(type (org-element-type context))
(value (org-element-property :value context)))
(cond
((memq type '(planning timestamp))
(org-follow-timestamp-link))
((memq type '(table table-row))
(if (org-element-property :tblfm (org-element-property :parent context))
(org-table-recalculate t)
(org-table-align)))
((and (memq type '(item))
(org-element-property :checkbox context))
(org-toggle-checkbox))
((and (memq type '(headline))
(org-element-property :todo-type context))
(org-todo
(if (eq (org-element-property :todo-type context) 'done) 'todo 'done)))
((and (memq type '(headline))
(string= "ARCHIVE" (car-safe (org-get-tags))))
(org-force-cycle-archived))
((memq type '(headline))
(org-remove-latex-fragment-image-overlays)
(org-preview-latex-fragment '(4)))
((memq type '(babel-call))
(org-babel-lob-execute-maybe))
((memq type '(src-block inline-src-block))
(org-babel-execute-src-block))
((memq type '(latex-fragment latex-environment))
(org-preview-latex-fragment))
((memq type '(link))
(let ((path (org-element-property :path (org-element-lineage (org-element-context) '(link) t))))
(if (and path (image-type-from-file-name path))
(doom/org-refresh-inline-images)
(org-open-at-point))))
(t (doom/org-refresh-inline-images)))
(set-window-start nil scroll-pt)))
;;;###autoload
(defun doom/org-refresh-inline-images ()
"Refresh image previews in the current heading/tree."
(interactive)
(if (> (length org-inline-image-overlays) 0)
(org-remove-inline-images)
(org-display-inline-images
t t
(if (org-before-first-heading-p)
(line-beginning-position)
(save-excursion (org-back-to-heading) (point)))
(if (org-before-first-heading-p)
(line-end-position)
(save-excursion (org-end-of-subtree) (point))))))
;;;###autoload
(defun doom/org-surround (delim)
"Surround the cursor (or selected region) with DELIM."
(if (region-active-p)
(save-excursion
(goto-char (region-beginning))
(insert delim)
(goto-char (region-end))
(insert delim))
(insert delim)
(save-excursion (insert delim))))
;;
;; tables
;;
;;;###autoload
(defun doom/org-table-next-row ()
(interactive)
(if (org-at-table-p) (org-table-next-row) (org-down-element)))
;;;###autoload
(defun doom/org-table-previous-row ()
"Go to the previous row (same column) in the current table. Before doing so,
re-align the table if necessary. (Necessary because org-mode has a
`org-table-next-row', but not `org-table-previous-row')"
(interactive)
(if (org-at-table-p)
(progn
(org-table-maybe-eval-formula)
(org-table-maybe-recalculate-line)
(if (and org-table-automatic-realign
org-table-may-need-update)
(org-table-align))
(let ((col (org-table-current-column)))
(beginning-of-line 0)
(when (or (not (org-at-table-p)) (org-at-table-hline-p))
(beginning-of-line))
(org-table-goto-column col)
(skip-chars-backward "^|\n\r")
(when (org-looking-at-p " ") (forward-char))))
(org-up-element)))
;;;###autoload
(defun doom/org-table-next-field ()
(interactive)
(if (org-at-table-p) (org-table-next-field) (org-end-of-line)))
;;;###autoload
(defun doom/org-table-previous-field ()
(interactive)
(if (org-at-table-p) (org-table-previous-field) (org-beginning-of-line)))
;;;###autoload
(defun doom/org-table-append-field-or-shift-right ()
(interactive)
(org-shiftmetaright)
(when (org-at-table-p) (org-metaright)))
;;;###autoload
(defun doom/org-table-prepend-field-or-shift-left ()
(interactive)
(if (org-at-table-p) (org-shiftmetaright) (org-shiftmetaleft)))
;;;###autoload
(defun doom/org-table-append-row-or-shift-down ()
(interactive)
(org-shiftmetadown)
(when (org-at-table-p) (org-metadown)))
;;;###autoload
(defun doom/org-table-prepend-row-or-shift-up ()
(interactive)
(if (org-at-table-p)
(org-shiftmetadown)
(org-shiftmetaup)))
;;
;; Links
;;
;;;###autoload (autoload 'doom:org-link "defuns-org" nil t)
(evil-define-command doom:org-link (link)
"Add LINK to the org buffer. If a selection is active, link selection to LINK."
(interactive "<a>")
(unless (eq major-mode 'org-mode)
(user-error "Not in an org-mode buffer"))
(let ((beg evil-visual-beginning)
(end evil-visual-end))
(org-insert-link nil link (when (and beg end) (buffer-substring-no-properties beg end)))))
;;;###autoload
(defun doom/org-remove-link ()
"Replace an org link by its description or if empty its address"
(interactive)
(if (org-in-regexp org-bracket-link-regexp 1)
(let ((remove (list (match-beginning 0) (match-end 0)))
(description (if (match-end 3)
(org-match-string-no-properties 3)
(org-match-string-no-properties 1))))
(apply 'delete-region remove)
(insert description))))
;;
;; org-capture
;;
;;;###autoload
(defun doom/org-capture (&optional template string)
"Run `org-capture' in a new, disposable popup frame."
(interactive)
(let ((org-capture-entry (org-capture-select-template template)))
(cond ((equal org-capture-entry "C")
(find-file (expand-file-name "module-org-notes.el" doom-modules-dir))
(re-search-forward "^\\s-+(setq org-capture-templates" (point-max) t)
(recenter))
((not (equal org-capture-entry "q"))
(let ((frame (make-frame '((name . "org-capture") (height . 15) (width . 80)))))
(with-selected-frame frame
(if string
(org-capture-string string)
(org-capture))))))))
;;;###autoload (autoload 'doom:org-capture "defuns-org" nil t)
(evil-define-operator doom:org-capture (&optional beg end bang)
"Send a selection to `doom/org-capture'."
:move-point nil
:type inclusive
(interactive "<r><!>")
(doom/org-capture
(if (and (evil-visual-state-p) beg end)
(buffer-substring beg end)
"")))
;;
;; attachments
;;
;;;###autoload (autoload 'doom:org-attach "defuns-org-notes" nil t)
(evil-define-command doom:org-attach (&optional uri)
(interactive "<a>")
(unless (eq major-mode 'org-mode)
(user-error "Not in an org-mode buffer"))
(if uri
(let* ((rel-path (org-download--fullname uri))
(new-path (f-expand rel-path))
(image-p (image-type-from-file-name uri)))
(cond ((string-match-p (concat "^" (regexp-opt '("http" "https" "nfs" "ftp" "file")) ":/") uri)
(url-copy-file uri new-path))
(t (copy-file uri new-path)))
(unless new-path
(user-error "No file was provided"))
(if (evil-visual-state-p)
(org-insert-link nil (format "./%s" rel-path)
(concat (buffer-substring-no-properties (region-beginning) (region-end))
" " (doom--org-attach-icon rel-path)))
(insert (if image-p
(format "[[./%s]] " rel-path)
(format "%s [[./%s][%s]] "
(doom--org-attach-icon rel-path)
rel-path (f-filename rel-path)))))
(when (string-match-p (regexp-opt '("jpg" "jpeg" "gif" "png")) (f-ext rel-path))
(org-redisplay-inline-images)))
(let ((default-directory ".attach/"))
(if (file-exists-p default-directory)
(call-interactively 'find-file)
(user-error "No attachments")))))
(defun doom--org-attach-icon (path)
(char-to-string (pcase (downcase (f-ext path))
("jpg" ?) ("jpeg" ?) ("png" ?) ("gif" ?)
("pdf" ?)
("ppt" ?) ("pptx" ?)
("xls" ?) ("xlsx" ?)
("doc" ?) ("docx" ?)
("ogg" ?) ("mp3" ?) ("wav" ?)
("mp4" ?) ("mov" ?) ("avi" ?)
("zip" ?) ("gz" ?) ("tar" ?) ("7z" ?) ("rar" ?)
(_ ?))))
;;;###autoload
(defun doom/org-cleanup-attachments ()
;; "Deletes any attachments that are no longer present in the org-mode buffer."
(let* ((attachments-local (doom-org-attachments))
(attachments (f-entries org-attach-directory))
(to-delete (-difference attachments-local attachments)))
;; TODO
to-delete))
(defun doom-org-attachments ()
(unless (eq major-mode 'org-mode)
(user-error "Not an org buffer"))
(org-save-outline-visibility nil
(let ((attachments '())
element
file)
(when (and (f-dir? org-attach-directory)
(> (length (f-glob (concat (f-slash org-attach-directory) "*"))) 0))
(save-excursion
(goto-char (point-min))
(while (progn (org-next-link) (not org-link-search-failed))
(setq element (org-element-lineage (org-element-context) '(link) t))
(when element
(setq file (expand-file-name (org-element-property :path element)))
(when (and (string= (org-element-property :type element) "file")
(string= (concat (f-base (f-dirname file)) "/") org-attach-directory)
(file-exists-p file))
(push file attachments))))))
(-distinct attachments))))
;;;###autoload
(defun doom/org-download-dnd (uri action)
(if (eq major-mode 'org-mode)
(doom:org-attach uri)
(let ((dnd-protocol-alist
(rassq-delete-all 'doom/org-download-dnd (copy-alist dnd-protocol-alist))))
(dnd-handle-one-url nil action uri))))
(provide 'defuns-org)
;;; defuns-org.el ends here

View file

@ -1,15 +0,0 @@
;;; defuns-python.el
;;;###autoload
(defun doom*anaconda-mode-doc-buffer ()
"Delete the window on escape or C-g."
(with-current-buffer (get-buffer "*anaconda-doc*")
(local-set-key [escape] 'anaconda-nav-quit)
(local-set-key [?\C-g] 'anaconda-nav-quit)))
;;;###autoload
(defun doom/inf-python ()
(run-python python-shell-interpreter t t))
(provide 'defuns-python)
;;; defuns-python.el ends here

View file

@ -1,97 +0,0 @@
;;; defuns-quickrun.el
;;;; Code building ;;;;;;;;;;;;;;;;;;;;;;
;;;###autoload
(defvar doom--build-command '("make %s" . "Makefile"))
(make-variable-buffer-local 'doom--build-command)
;;;###autoload
(defun doom/set-build-command (command &optional file)
(when (or (null file)
(doom/project-has-files file))
(setq doom--build-command `(,command . ,file))))
;;;###autoload (autoload 'doom:build "defuns-quickrun" nil t)
(evil-define-command doom:build (arg)
"Call a build command in the current directory. If ARG is nil this function calls
`recompile', otherwise it calls `compile' passing ARG as build command."
(interactive "<sh>")
(when (null doom--build-command)
(user-error "No build command was set"))
(let ((build-file (cdr doom--build-command))
(build-cmd (car doom--build-command))
(project-dir (doom/project-root)))
(if (or (null build-file) (f-exists? (f-expand build-file project-dir)))
(if (or (symbolp build-cmd) (functionp build-cmd))
(if (commandp build-cmd)
(call-interactively build-cmd)
(funcall build-cmd))
(let ((default-directory project-dir))
(compile (format build-cmd (or arg "")))))
(error "Could not build!"))))
;;;; Code running ;;;;;;;;;;;;;;;;;;;;;;
;;;###autoload (autoload 'doom:eval-buffer "defuns-quickrun" nil t)
(evil-define-command doom:eval-buffer ()
"Evaluate the whole buffer."
:move-point nil :repeat nil
(interactive)
(cond ((eq major-mode 'emacs-lisp-mode)
(doom:eval-region (point-min) (point-max)))
(t (quickrun))))
;;;###autoload (autoload 'doom:eval-region "defuns-quickrun" nil t)
(evil-define-operator doom:eval-region (beg end)
"Evaluate a region and, if large enough, prints its output to a popup buffer (if an
elisp buffer). Otherwise forward the region to Quickrun."
:move-point nil :repeat nil
(interactive "<r>")
(cond ((eq major-mode 'emacs-lisp-mode)
(require 'pp)
(let ((result (eval (read (buffer-substring-no-properties beg end))))
lines)
(let ((buf (get-buffer-create "*eval*")))
(with-current-buffer buf
(read-only-mode -1)
(setq-local scroll-margin 0)
(erase-buffer)
(prin1 result buf)
(emacs-lisp-mode)
(pp-buffer)
(read-only-mode 1)
(setq lines (count-lines (point-min) (point-max)))
(goto-char (point-min))
(when (< lines 5)
(message "%s" (buffer-substring (point-min) (point-max)))
(kill-buffer buf)))
(unless (< lines 5)
(doom/popup-buffer buf)))))
(t (quickrun-region beg end))))
;;;###autoload (autoload 'doom:eval-region-and-replace "defuns-quickrun" nil t)
(evil-define-operator doom:eval-region-and-replace (beg end)
(interactive "<r>")
(cond ((eq major-mode 'emacs-lisp-mode)
(kill-region beg end)
(condition-case nil
(prin1 (eval (read (current-kill 0)))
(current-buffer))
(error (message "Invalid expression")
(insert (current-kill 0)))))
(t (quickrun-replace-region beg end))))
;;;###autoload
(defun doom*quickrun-close-popup (&optional _ _ _ _)
"Allows us to re-run quickrun from inside the quickrun buffer."
(awhen (get-buffer-window quickrun/buffer-name)
(shut-up! (quickrun/kill-running-process))
(doom/popup-close it nil)))
;;;###autoload
(defun doom|quickrun-after-run ()
"Ensures window is scrolled to BOF"
(with-selected-window (get-buffer-window quickrun/buffer-name)
(goto-char (point-min))))
(provide 'defuns-quickrun)
;;; defuns-quickrun.el ends here

View file

@ -1,73 +0,0 @@
;;; defuns-realgud.el
;; TODO Find a more elegant solution
;; FIXME Causes realgud:cmd-* to focus popup on every invocation
;;;###autoload
(defun doom*realgud:run-process (debugger-name script-filename cmd-args minibuffer-history &optional no-reset)
(let ((cmd-buf))
(setq cmd-buf
(apply 'realgud-exec-shell debugger-name script-filename
(car cmd-args) no-reset (cdr cmd-args)))
(let ((process (get-buffer-process cmd-buf)))
(if (and process (eq 'run (process-status process)))
(progn
(pop-to-buffer cmd-buf)
(define-key evil-emacs-state-local-map (kbd "ESC ESC") 'doom/debug-quit)
(realgud:track-set-debugger debugger-name)
(realgud-cmdbuf-info-in-debugger?= 't)
(realgud-cmdbuf-info-cmd-args= cmd-args)
(when cmd-buf
(switch-to-buffer cmd-buf)
(when realgud-cmdbuf-info
(let* ((info realgud-cmdbuf-info)
(cmd-args (realgud-cmdbuf-info-cmd-args info))
(cmd-str (mapconcat 'identity cmd-args " ")))
(set minibuffer-history
(list-utils-uniq (cons cmd-str (eval minibuffer-history))))))))
;; else
(progn
(if cmd-buf (switch-to-buffer cmd-buf))
(message "Error running command: %s" (mapconcat 'identity cmd-args " ")))))
cmd-buf))
;;;###autoload (autoload 'doom:debug-toggle-breakpoint "defuns-realgud" nil t)
(evil-define-command doom:debug-toggle-breakpoint (&optional bang)
(interactive "<!>")
(call-interactively (if bang 'realgud:cmd-clear 'realgud:cmd-break)))
;;;###autoload
(defun doom/debug-quit ()
(interactive)
(ignore-errors (call-interactively 'realgud:cmd-quit))
(doom/popup-close)
(evil-normal-state))
;;;###autoload (autoload 'doom:debug "defuns-realgud" nil t)
(evil-define-command doom:debug (&optional path)
"Initiate debugger for current major mode"
(interactive "<f>")
(let ((default-directory (doom/project-root)))
(cond ((memq major-mode '(c-mode c++-mode))
(realgud:gdb (if path (concat "gdb " path))))
((memq major-mode '(ruby-mode enh-ruby-mode))
(doom:repl nil (format "run '%s'" (f-filename (or path buffer-file-name)))))
((eq major-mode 'sh-mode)
(let ((shell sh-shell))
(when (string= shell "sh")
(setq shell "bash"))
(cond ((string= shell "bash")
(realgud:bashdb (if path (concat "bashdb " path))))
((string= shell "zsh")
(realgud:zshdb (if path (concat "zshdb " path))))
(t (user-error "No shell debugger for %s" shell)))))
;; TODO Add python debugging
((memq major-mode '(js-mode js2-mode js3-mode))
(realgud:trepanjs))
((eq major-mode 'haskell-mode)
(haskell-debug))
(t (user-error "No debugger for %s" major-mode)))))
(provide 'defuns-realgud)
;;; defuns-realgud.el ends here

View file

@ -1,40 +0,0 @@
;;; defuns-regex.el
;;;###autoload
(defun doom|reb-cleanup ()
(replace-regexp "^[ \n]*" "" nil (point-min) (point-max))
(text-scale-set 2)
(goto-char 2))
;;;###autoload (autoload 'doom:regex "defuns-regex" nil t)
(evil-define-operator doom:regex (beg end type &optional regexstr bang)
"Either a) converts selected (or entered-in) pcre regex into elisp
regex, OR b) opens up re-builder."
:move-point nil
:type inclusive
:repeat nil
(interactive "<R><a><!>")
(if (reb-mode-buffer-p)
(if regexstr
(let ((regexstr (s-trim (buffer-string))))
(if bang
(rxt-explain-pcre regexstr)
(rxt-pcre-to-elisp (s-trim (buffer-string)))))
(erase-buffer)
(insert (concat "/" regexstr "/")))
(cond ((and beg end (/= beg (1- end))) ; Convert selection from pcre regex to elisp
(let ((regexstr (buffer-substring-no-properties beg end)))
(if bang
(rxt-explain-pcre (concat "/" regexstr "/"))
(delete-region beg end)
(insert (rxt-pcre-to-elisp regexstr)))))
(regexstr ; Convert input regex into elisp regex
(let ((newregex (rxt-pcre-to-elisp regexstr)))
(when bang
(setq newregex (s-replace "\\" "\\\\" newregex)))
(kill-new newregex)
(message "Copied regex to kill ring: %s" newregex)))
(t (re-builder)))))
(provide 'defuns-regex)
;;; defuns-regex.el ends here

View file

@ -1,50 +0,0 @@
;;; defuns-sh.el
(defvar sh-extra-font-lock--keywords
`((doom/sh-extra-font-lock--match-var-in-double-quoted-string
(2 font-lock-variable-name-face prepend))
(,(concat
"\\<"
(regexp-opt '("sudo" "echo" "ls" "sleep" "tee" "cd" "cat" "service"))
"\\>")
(0 'font-lock-builtin-face))))
;;;###autoload
(defun doom/sh-extra-font-lock--is-in-double-quoted-string ()
"Non-nil if point in inside a double-quoted string."
(let ((state (syntax-ppss)))
(eq (nth 3 state) ?\")))
;;;###autoload
(defun doom/sh-extra-font-lock--match-var-in-double-quoted-string (limit)
"Search for variables in double-quoted strings bounded by LIMIT."
(let (res)
(while
(and (setq res
(re-search-forward
"\\$\\({#?\\)?\\([[:alpha:]_][[:alnum:]_]*\\|[-#?@!]\\)"
limit t))
(not (doom/sh-extra-font-lock--is-in-double-quoted-string))))
res))
;;;###autoload
(defun doom|sh-extra-font-lock-activate ()
"Activate sh-extra-font-lock."
(interactive)
(font-lock-add-keywords nil sh-extra-font-lock--keywords)
(if (fboundp 'font-lock-flush)
(font-lock-flush)
(when font-lock-mode
(with-no-warnings
(font-lock-fontify-buffer)))))
;;;###autoload
(defun doom/inf-shell ()
(let* ((dest-sh (symbol-name sh-shell))
(sh-shell-file dest-sh))
(sh-shell-process t)
(with-current-buffer "*shell*"
(rename-buffer (format "*shell [%s]*" dest-sh)))))
(provide 'defuns-sh)
;;; defuns-sh.el ends here

View file

@ -1,11 +0,0 @@
;;; defuns-text.el
;;;###autoload (autoload 'doom:insert-date "defuns-text" nil t)
(evil-define-command doom:insert-date (beg end &optional format)
(interactive "<r><a>")
(when (and (evil-visual-state-p) beg end)
(kill-region beg end))
(insert (format-time-string (or format "%x"))))
(provide 'defuns-text)
;;; defuns-text.el ends here

View file

@ -1,73 +0,0 @@
;;; defuns-typescript.el
(defvar ts-externs-vars-re
(concat "\\_<"
(regexp-opt
'("__dirname" "__filename"))
"\\_>"))
(defvar ts-externs-fns-re
(concat "\\_<"
(regexp-opt
'("Buffer" "clearInterval" "clearTimeout" "require" "setInterval"
"setTimeout" "querystring" "setImmediate" "clearImmediate"))
"\\_>"))
(defvar ts-ecma-externs-re
(concat "\\_<"
(regexp-opt '("decoreURI" "decoreURIComponent" "encodeURI"
"encodeURIComponent" "escape" "eval" "isFinite"
"isNaN" "parseFloat" "parseInt" "escape" "unescape"))
"\\_>"))
(defface ts-object-property '((t (:inherit font-lock-function-name-face)))
"")
;;;###autoload
(defun doom|ts-fontify ()
(font-lock-add-keywords
nil `((,ts-externs-vars-re
. 'font-lock-builtin-face)
(,ts-externs-fns-re
. 'font-lock-keyword-face)
(,ts-ecma-externs-re
. 'font-lock-builtin-face)
;; Lambda character
(" \\(=>\\) "
. 'font-lock-preprocessor-face)
;; $-prefixed variables
("\\_<\\$[[:alnum:]_]+\\_>"
. 'font-lock-keyword-face)
;; object keys
("\\(?:^\\|,\\|{\\)\\s-*\\([[:alpha:]_$][[:alnum:]_$]*\\)\\s-*:"
1 'ts-object-property)
;; variable.prefixes
("\\_<\\([a-z_$][[:alnum:]_$]*\\)\\."
1 'font-lock-variable-name-face)
;; functioncalls()
("\\_<\\([a-z_$][[:alnum:]_$]*\\)("
1 'font-lock-function-name-face)
;; PascalCase ClassNames
("\\_<[A-Z][a-z0-9_]+\\_>"
. 'font-lock-type-face)
;; CONSTANTS
("\\_<[A-Z0-9_]+\\_>"
. 'font-lock-builtin-face)
;; Import froms
("^\\s-*import\\s-+\\(?:{[^}]*}\\|[^ ]+\\|[^ ]+\\s-+as\\s-+[^ ]+\\)\\s-+\\(from\\)\\s-"
(1 'font-lock-keyword-face))
("^\\s-*import\\s-+\\(?:[^ ]+\\s-+\\(as\\)\\s-+[^ ]+\\)\\s-+from\\s-"
(1 'font-lock-keyword-face))
;; ES6 Lambda parameters (...) => {}
(,(concat
"\\s-(\\s-*"
typescript--name-start-re)
,(list (concat "\\(" typescript--name-re "\\)\\(\\s-*).*\\)?\\s-*")
'(backward-char)
'(end-of-line)
'(1 font-lock-variable-name-face)))
)))
(provide 'defuns-typescript)
;;; defuns-typescript.el ends here

View file

@ -1,45 +0,0 @@
;;; defuns-web.el
;;;###autoload
(defun doom/web-html-email2mailto (beg end)
(interactive "r")
(replace-regexp "\\b\\([a-zA-Z0-9._+-%]+@[a-zA-Z0-9-.]+\\.[a-zA-Z]+\\)\\b"
"<a href=\"mailto:\\1\">\\1</a>"
nil beg end))
;;;###autoload
(defun doom/web-html-url2anchor (beg end)
(interactive "r")
(replace-regexp "\\bhttps?://.+?\\b"
"<a href=\"\\1\">\\1</a>"
nil beg end))
;;;###autoload
(defun doom/web-refresh-browser ()
(interactive)
(call-process-shell-command "osascript -e 'tell application \"Google Chrome\" to tell the active tab of its first window to reload' &" nil 0))
;;;###autoload (autoload 'doom/html-entities "defuns-web" nil t)
(evil-define-operator doom/html-entities (bang beg end)
"HTML encode/decode the selected region. Based on Xah's replace HTML named entities
function @ http://ergoemacs.org/emacs/elisp_replace_html_entities_command.html"
(interactive "<!><r>")
(let ((reps [["&nbsp;" " "] ["&ensp;" ""] ["&emsp;" ""] ["&thinsp;" ""]
["&rlm;" ""] ["&lrm;" ""] ["&zwj;" ""] ["&zwnj;" ""]
["&iexcl;" "¡"] ["&cent;" "¢"] ["&pound;" "£"] ["&curren;" "¤"] ["&yen;" "¥"] ["&brvbar;" "¦"] ["&sect;" "§"] ["&uml;" "¨"] ["&copy;" "©"] ["&ordf;" "ª"] ["&laquo;" "«"] ["&not;" "¬"] ["&shy;" "­"] ["&reg;" "®"] ["&macr;" "¯"] ["&deg;" "°"] ["&plusmn;" "±"] ["&sup2;" "²"] ["&sup3;" "³"] ["&acute;" "´"] ["&micro;" "µ"] ["&para;" ""] ["&middot;" "·"] ["&cedil;" "¸"] ["&sup1;" "¹"] ["&ordm;" "º"] ["&raquo;" "»"] ["&frac14;" "¼"] ["&frac12;" "½"] ["&frac34;" "¾"] ["&iquest;" "¿"]
["&Agrave;" "À"] ["&Aacute;" "Á"] ["&Acirc;" "Â"] ["&Atilde;" "Ã"] ["&Auml;" "Ä"] ["&Aring;" "Å"] ["&AElig;" "Æ"] ["&Ccedil;" "Ç"] ["&Egrave;" "È"] ["&Eacute;" "É"] ["&Ecirc;" "Ê"] ["&Euml;" "Ë"] ["&Igrave;" "Ì"] ["&Iacute;" "Í"] ["&Icirc;" "Î"] ["&Iuml;" "Ï"] ["&ETH;" "Ð"] ["&Ntilde;" "Ñ"] ["&Ograve;" "Ò"] ["&Oacute;" "Ó"] ["&Ocirc;" "Ô"] ["&Otilde;" "Õ"] ["&Ouml;" "Ö"] ["&times;" "×"] ["&Oslash;" "Ø"] ["&Ugrave;" "Ù"] ["&Uacute;" "Ú"] ["&Ucirc;" "Û"] ["&Uuml;" "Ü"] ["&Yacute;" "Ý"] ["&THORN;" "Þ"] ["&szlig;" "ß"] ["&agrave;" "à"] ["&aacute;" "á"] ["&acirc;" "â"] ["&atilde;" "ã"] ["&auml;" "ä"] ["&aring;" "å"] ["&aelig;" "æ"] ["&ccedil;" "ç"] ["&egrave;" "è"] ["&eacute;" "é"] ["&ecirc;" "ê"] ["&euml;" "ë"] ["&igrave;" "ì"] ["&iacute;" "í"] ["&icirc;" "î"] ["&iuml;" "ï"] ["&eth;" "ð"] ["&ntilde;" "ñ"] ["&ograve;" "ò"] ["&oacute;" "ó"] ["&ocirc;" "ô"] ["&otilde;" "õ"] ["&ouml;" "ö"]
["&divide;" "÷"] ["&oslash;" "ø"] ["&ugrave;" "ù"] ["&uacute;" "ú"] ["&ucirc;" "û"] ["&uuml;" "ü"] ["&yacute;" "ý"] ["&thorn;" "þ"] ["&yuml;" "ÿ"] ["&fnof;" "ƒ"]
["&Alpha;" "Α"] ["&Beta;" "Β"] ["&Gamma;" "Γ"] ["&Delta;" "Δ"] ["&Epsilon;" "Ε"] ["&Zeta;" "Ζ"] ["&Eta;" "Η"] ["&Theta;" "Θ"] ["&Iota;" "Ι"] ["&Kappa;" "Κ"] ["&Lambda;" "Λ"] ["&Mu;" "Μ"] ["&Nu;" "Ν"] ["&Xi;" "Ξ"] ["&Omicron;" "Ο"] ["&Pi;" "Π"] ["&Rho;" "Ρ"] ["&Sigma;" "Σ"] ["&Tau;" "Τ"] ["&Upsilon;" "Υ"] ["&Phi;" "Φ"] ["&Chi;" "Χ"] ["&Psi;" "Ψ"] ["&Omega;" "Ω"] ["&alpha;" "α"] ["&beta;" "β"] ["&gamma;" "γ"] ["&delta;" "δ"] ["&epsilon;" "ε"] ["&zeta;" "ζ"] ["&eta;" "η"] ["&theta;" "θ"] ["&iota;" "ι"] ["&kappa;" "κ"] ["&lambda;" "λ"] ["&mu;" "μ"] ["&nu;" "ν"] ["&xi;" "ξ"] ["&omicron;" "ο"] ["&pi;" "π"] ["&rho;" "ρ"] ["&sigmaf;" "ς"] ["&sigma;" "σ"] ["&tau;" "τ"] ["&upsilon;" "υ"] ["&phi;" "φ"] ["&chi;" "χ"] ["&psi;" "ψ"] ["&omega;" "ω"] ["&thetasym;" "ϑ"] ["&upsih;" "ϒ"] ["&piv;" "ϖ"]
["&bull;" ""] ["&hellip;" ""] ["&prime;" ""] ["&Prime;" ""] ["&oline;" ""] ["&frasl;" ""] ["&weierp;" ""] ["&image;" ""] ["&real;" ""] ["&trade;" ""] ["&alefsym;" ""] ["&larr;" ""] ["&uarr;" ""] ["&rarr;" ""] ["&darr;" ""] ["&harr;" ""] ["&crarr;" ""] ["&lArr;" ""] ["&uArr;" ""] ["&rArr;" ""] ["&dArr;" ""] ["&hArr;" ""] ["&forall;" ""] ["&part;" ""] ["&exist;" ""] ["&empty;" ""] ["&nabla;" ""] ["&isin;" ""] ["&notin;" ""] ["&ni;" ""] ["&prod;" ""] ["&sum;" ""] ["&minus;" ""] ["&lowast;" ""] ["&radic;" ""] ["&prop;" ""] ["&infin;" ""] ["&ang;" ""] ["&and;" ""] ["&or;" ""] ["&cap;" ""] ["&cup;" ""] ["&int;" ""] ["&there4;" ""] ["&sim;" ""] ["&cong;" ""] ["&asymp;" ""] ["&ne;" ""] ["&equiv;" ""] ["&le;" ""] ["&ge;" ""] ["&sub;" ""] ["&sup;" ""] ["&nsub;" ""] ["&sube;" ""] ["&supe;" ""] ["&oplus;" ""] ["&otimes;" ""] ["&perp;" ""] ["&sdot;" ""] ["&lceil;" ""] ["&rceil;" ""] ["&lfloor;" ""] ["&rfloor;" ""] ["&lang;" ""] ["&rang;" ""] ["&loz;" ""] ["&spades;" ""] ["&clubs;" ""] ["&hearts;" ""] ["&diams;" ""] ["&quot;" "\""] ["&OElig;" "Œ"] ["&oelig;" "œ"] ["&Scaron;" "Š"] ["&scaron;" "š"] ["&Yuml;" "Ÿ"] ["&circ;" "ˆ"] ["&tilde;" "˜"] ["&ndash;" ""] ["&mdash;" ""] ["&lsquo;" ""] ["&rsquo;" ""] ["&sbquo;" ""] ["&ldquo;" ""] ["&rdquo;" ""] ["&bdquo;" ""] ["&dagger;" ""] ["&Dagger;" ""] ["&permil;" ""] ["&lsaquo;" ""] ["&rsaquo;" ""] ["&euro;" ""]
]))
(save-restriction
(narrow-to-region beg end)
(let (case-fold-search)
(mapc (lambda (rep)
(goto-char (point-min))
(while (search-forward (elt rep (if bang 0 1)) nil t)
(replace-match (elt rep (if bang 1 0)) 'FIXEDCASE 'LITERAL)))
reps)))))
(provide 'defuns-web)
;;; defuns-web.el ends here

View file

@ -1,45 +0,0 @@
;;; macros-org.el
;;;###autoload
(defmacro define-org-section! (type directory &optional id-func link-glob)
(setq directory (f-slash directory))
(let* ((type-str (symbol-name type))
(link-sym (intern (format "doom/org-link-%s" type-str)))
(dir-var (intern (format "org-directory-%s" type-str))))
`(progn
;; Variable containing directory: `org-directory-%s'
(defvar ,dir-var ,(expand-file-name directory org-directory))
;; Open helm in directory: `doom/helm-org-%s'
(evil-define-command ,(intern (format "doom:org-search-%s" type-str)) ()
(interactive)
(let ((default-directory (concat ,dir-var "/" (format-time-string "%Y") "/")))
(helm-find-files nil)))
;; Open helm in directory: `doom/helm-org-%s'
(defun ,(intern (format "doom/helm-org-find-file-in-%s" type-str)) ()
(interactive)
(helm-do-ag (f-slash ,dir-var)))
;; Org link handler
(defun ,link-sym (id)
(let ((path (f-glob (format (or ,link-glob "%s.org") id) ,dir-var)))
(unless path
(error "ID not found: %s" id))
(org-open-file (car path) t)))
(org-add-link-type ,type-str ',link-sym)
;; Org completion handler
(defun ,(intern (format "org-%s-complete-link" type-str)) ()
(let* ((default-directory (f-slash ,dir-var))
(file (org-iread-file-name "> "))
(relpath (f-relative file ,dir-var)))
(when (and (not (file-exists-p file))
(y-or-n-p (format "Create %s?" relpath)))
(write-region "" nil file)
(message "Created %s" file))
(format "%s:%s" ,type-str ,(if id-func `(funcall ,id-func relpath) '(f-no-ext relpath)))
)))))
(provide 'macros-org)
;;; macros-org.el ends here