2016-04-23 22:10:05 -04:00
|
|
|
;;; macros-editor.el
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defmacro def-electric! (modes &rest rest)
|
2016-10-05 07:26:07 +02:00
|
|
|
"Declare :words (list of strings) or :chars (lists of chars) in MODES that
|
|
|
|
trigger electric indentation."
|
2016-04-23 22:10:05 -04:00
|
|
|
(declare (indent 1))
|
2016-05-12 02:53:31 -04:00
|
|
|
(let ((modes (-list modes))
|
2016-04-23 22:10:05 -04:00
|
|
|
(chars (plist-get rest :chars))
|
|
|
|
(words (plist-get rest :words)))
|
|
|
|
(when (or chars words)
|
2016-05-20 22:37:30 -04:00
|
|
|
(let ((fn-name (intern (format "doom--electric-%s" (s-join "-" (mapcar 'symbol-name modes))))))
|
2016-04-23 22:10:05 -04:00
|
|
|
`(progn
|
|
|
|
(defun ,fn-name ()
|
|
|
|
(electric-indent-local-mode +1)
|
|
|
|
,(if chars `(setq electric-indent-chars ',chars))
|
2016-05-20 22:37:30 -04:00
|
|
|
,(if words `(setq doom-electric-indent-words ',words)))
|
2016-04-23 22:10:05 -04:00
|
|
|
(add-hook! ,modes ',fn-name))))))
|
|
|
|
|
2016-05-12 02:53:31 -04:00
|
|
|
;;;###autoload
|
|
|
|
(defmacro def-rotate! (modes &rest rest)
|
2016-10-05 07:26:07 +02:00
|
|
|
"Declare :symbols, :words or :patterns that `rotate-text' will cycle through."
|
2016-05-12 02:53:31 -04:00
|
|
|
(declare (indent 1))
|
|
|
|
(let ((modes (if (listp modes) modes (list modes)))
|
|
|
|
(symbols (plist-get rest :symbols))
|
|
|
|
(words (plist-get rest :words))
|
|
|
|
(patterns (plist-get rest :patterns)))
|
|
|
|
(when (or symbols words patterns)
|
2016-05-20 22:37:30 -04:00
|
|
|
(let ((fn-name (intern (format "doom--rotate-%s" (s-join "-" (mapcar 'symbol-name modes))))))
|
2016-05-12 02:53:31 -04:00
|
|
|
`(progn
|
|
|
|
(defun ,fn-name ()
|
|
|
|
,(if symbols `(setq-local rotate-text-local-symbols ',symbols))
|
|
|
|
,(if words `(setq-local rotate-text-local-words ',words))
|
|
|
|
,(if patterns `(setq-local rotate-text-local-patterns ',patterns)))
|
|
|
|
(add-hook! ,modes ',fn-name))))))
|
|
|
|
|
2016-04-23 22:10:05 -04:00
|
|
|
(provide 'macros-editor)
|
|
|
|
;;; macros-editor.el ends here
|