7e2dcc97cc
Cleaning things up...
125 lines
3.5 KiB
EmacsLisp
125 lines
3.5 KiB
EmacsLisp
;; functions.el --- Helper functions for my Emacs development -*- lexical-binding: t -*-
|
|
;; Author: William Carroll <wpcarro@gmail.com>
|
|
|
|
;;; Commentary:
|
|
;; This file hopefully contains friendly APIs that making ELisp development more
|
|
;; enjoyable.
|
|
|
|
;; TODO: Break these out into separate modules.
|
|
|
|
;;; Code:
|
|
(defun wpc/evil-window-vsplit-right ()
|
|
(interactive)
|
|
(evil-window-vsplit)
|
|
(windmove-right))
|
|
|
|
(defun wpc/evil-window-split-down ()
|
|
(interactive)
|
|
(evil-window-split)
|
|
(windmove-down))
|
|
|
|
(defun wpc/reindent-defun-and-align-clojure-map ()
|
|
(interactive)
|
|
(call-interactively #'paredit-reindent-defun)
|
|
(call-interactively #'clojure-align))
|
|
|
|
(defun wpc/find-file-split (filename)
|
|
"Creates a window split and then edits `filename'."
|
|
(interactive)
|
|
(evil-window-vsplit)
|
|
(find-file filename))
|
|
|
|
(defun wpc/find-or-create-js-test ()
|
|
(->> buffer-file-name
|
|
(s-chop-suffix ".js")
|
|
(s-append ".test.js")
|
|
(find-file)))
|
|
|
|
(defun wpc/find-or-create-js-module ()
|
|
(->> buffer-file-name
|
|
(s-chop-suffix ".test.js")
|
|
(s-append ".js")
|
|
(find-file)))
|
|
|
|
(defun wpc/find-or-create-js-store ()
|
|
(->> buffer-file-name
|
|
(s-replace "index.js" "store.js")
|
|
(find-file)))
|
|
|
|
(defun wpc/find-or-create-js-component ()
|
|
(->> buffer-file-name
|
|
(s-replace "store.js" "index.js")
|
|
(find-file)))
|
|
|
|
(defun wpc/toggle-between-js-test-and-module ()
|
|
"Toggle between a Javascript test or module."
|
|
(interactive)
|
|
(if (s-ends-with? ".test.js" buffer-file-name)
|
|
(wpc/find-or-create-js-module)
|
|
(if (s-ends-with? ".js" buffer-file-name)
|
|
(wpc/find-or-create-js-test)
|
|
(message "Not in a Javascript file. Exiting..."))))
|
|
|
|
(defun wpc/toggle-between-js-component-and-store ()
|
|
"Toggle between a React component and its Redux store."
|
|
(interactive)
|
|
(if (s-ends-with? "index.js" buffer-file-name)
|
|
(wpc/find-or-create-js-store)
|
|
(if (or (s-ends-with? "store.js" buffer-file-name)
|
|
(s-ends-with? "store.test.js" buffer-file-name))
|
|
(wpc/find-or-create-js-component)
|
|
(message "Not in a React/Redux file. Exiting..."))))
|
|
|
|
(defun wpc/read-file-as-string (filename)
|
|
(with-temp-buffer
|
|
(insert-file-contents filename)
|
|
(s-trim (buffer-string))))
|
|
|
|
(defun wpc/create-snippet ()
|
|
"Creates a window split and then opens the Yasnippet editor."
|
|
(interactive)
|
|
(evil-window-vsplit)
|
|
(call-interactively #'yas-new-snippet))
|
|
|
|
(defun wpc/jump-to-parent-file ()
|
|
"Jumps to a React store or component's parent file. Useful for store or index file."
|
|
(interactive)
|
|
(-> buffer-file-name
|
|
f-dirname
|
|
(f-join "..")
|
|
(f-join (f-filename buffer-file-name))
|
|
find-file))
|
|
|
|
(defun wpc/add-earmuffs (x)
|
|
"Returns X surrounded by asterisks."
|
|
(format "*%s*" x))
|
|
|
|
(defun wpc/put-file-name-on-clipboard ()
|
|
"Put the current file name on the clipboard"
|
|
(interactive)
|
|
(let ((filename (if (equal major-mode 'dired-mode)
|
|
default-directory
|
|
(buffer-file-name))))
|
|
(when filename
|
|
(with-temp-buffer
|
|
(insert filename)
|
|
(clipboard-kill-region (point-min) (point-max)))
|
|
(message filename))))
|
|
|
|
(s-replace "/" "x" "a/b/c")
|
|
|
|
(defun wpc/evil-replace-under-point ()
|
|
"Faster than typing %s//thing/g."
|
|
(interactive)
|
|
(let ((term (s-replace "/" "\\/" (symbol/to-string (symbol-at-point)))))
|
|
(save-excursion
|
|
(evil-ex (concat "%s/\\b" term "\\b/")))))
|
|
|
|
(defun buffer-dirname ()
|
|
"Return the directory name of the current buffer as a string."
|
|
(->> buffer-file-name
|
|
f-dirname
|
|
f-filename))
|
|
|
|
(provide 'functions)
|
|
;;; functions.el ends here
|