From a32cf8b13215c487724b1ddb0ebe98d58cb6c3d9 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Fri, 20 Apr 2018 10:29:45 +0100 Subject: [PATCH 01/38] Big refactor of modules and their use of use-package - Make use of use-package's :bind option whenever possible. - Make use of use-package's :hook option whenever possible. - Rename and move all mode setup functions into use-package's :init step. - Other minor misc fixes and tweaks to a few modules. --- custom.el | 2 +- modules/siren-auto-complete.el | 13 +-- modules/siren-browse-kill-ring.el | 2 +- modules/siren-coffee.el | 14 +-- modules/siren-company.el | 10 +- modules/siren-conf.el | 15 ++- modules/siren-css.el | 13 +-- modules/siren-cucumber.el | 13 +-- modules/siren-diff-hl.el | 10 +- modules/siren-dired.el | 18 +-- modules/siren-direx.el | 11 +- modules/siren-dockerfile.el | 15 +-- modules/siren-edit-server.el | 6 +- modules/siren-elscreen.el | 2 +- modules/siren-emacs-lisp.el | 10 +- modules/siren-escreen.el | 93 +++++++-------- modules/siren-eslintd-fix.el | 13 +++ modules/siren-evil.el | 31 +++-- modules/siren-folding.el | 5 +- modules/siren-full-ack.el | 56 +++++---- modules/siren-gitconfig.el | 13 +-- modules/siren-gitignore.el | 13 +-- modules/siren-go.el | 41 +++---- modules/siren-goto-chg.el | 17 ++- modules/siren-haml.el | 12 +- modules/siren-helm.el | 40 +++---- modules/siren-highlight-symbol.el | 5 +- modules/siren-js.el | 15 +-- modules/siren-json.el | 30 +++-- modules/siren-linum.el | 16 ++- modules/siren-lisp.el | 2 + modules/siren-lua.el | 20 ++-- modules/siren-magit.el | 36 +++--- modules/siren-makefile.el | 11 +- modules/siren-markdown.el | 22 ++-- modules/siren-move-beginning-of-line.el | 2 +- modules/siren-neotree.el | 4 +- modules/siren-org-mode.el | 6 +- modules/siren-package-lint.el | 2 + modules/siren-perspective.el | 59 +++++----- modules/siren-php.el | 17 +-- modules/siren-plantuml.el | 18 ++- modules/siren-programming.el | 14 +-- modules/siren-rainbow.el | 3 +- modules/siren-rubocop.el | 21 ++-- modules/siren-ruby.el | 149 +++++++++++++----------- modules/siren-sass.el | 13 +-- modules/siren-scss.el | 8 +- modules/siren-sh.el | 8 +- modules/siren-slim.el | 7 +- modules/siren-smartparens.el | 46 ++++---- modules/siren-thrift.el | 13 +-- modules/siren-treemacs.el | 36 +++--- modules/siren-web-mode.el | 27 +++-- modules/siren-yaml.el | 18 +-- 55 files changed, 540 insertions(+), 576 deletions(-) create mode 100644 modules/siren-eslintd-fix.el diff --git a/custom.el b/custom.el index 016b639..82e84da 100644 --- a/custom.el +++ b/custom.el @@ -7,7 +7,7 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (ace-ack ag anti-anywhere anzu-avy bright-bright browse browse-buffer coffee-column company-company completing-cursors dash-descbinds describe-diff diminish-direx-dockerfile dumb-dup-ecb editorconfig-eldoc-eslintd-evil exec-expand feature file-fill fix-flycheck flycheck flycheck-from full-gh git-git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido-imenu indent-indentation indicator inf-inflection json jump-kill line link-lint linum-lua magit-magit markdown-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-mode-mode mode-modes-move+ move-multiple open-package package-package-path phi-php plantuml-projectile-projectile pulls-quotes rainbow-read refactor region-relative rename-ring rspec-ruby-ruby ruby-sass scss-search shell shift smart-smart smartparens smex-string swoop-symbol-theme theme thrift-timemachine-toggle tools twilight-twilight use-vertical-web window-window-yaml-yari yasnippet zoom))) + (which-key ace-ack ag anti-anywhere anzu-avy bright-bright browse browse-buffer coffee-column company-company completing-cursors dash-descbinds describe-diff diminish-direx-dockerfile dumb-dup-ecb editorconfig-eldoc-eslintd-evil exec-expand feature file-fill fix-flycheck flycheck flycheck-from full-gh git-git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido-imenu indent-indentation indicator inf-inflection json jump-kill line link-lint linum-lua magit-magit markdown-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-mode-mode mode-modes-move+ move-multiple open-package package-package-path phi-php plantuml-projectile-projectile pulls-quotes rainbow-read refactor region-relative rename-ring rspec-ruby-ruby ruby-sass scss-search shell shift smart-smart smartparens smex-string swoop-symbol-theme theme thrift-timemachine-toggle tools twilight-twilight use-vertical-web window-window-yaml-yari yasnippet zoom))) '(plantuml-jar-path "/usr/local/Cellar/plantuml/8048/plantuml.8048.jar") '(siren-rubocop-autocorrect-on-save nil)) (custom-set-faces diff --git a/modules/siren-auto-complete.el b/modules/siren-auto-complete.el index a1958f4..0448909 100644 --- a/modules/siren-auto-complete.el +++ b/modules/siren-auto-complete.el @@ -9,6 +9,12 @@ (require 'siren-flyspell) (use-package auto-complete + :bind (:map ac-completing-map + ("RET" . ac-complete) + ("C-m" . ac-complete) + ("C-s" . ac-isearch) + ("C-n" . ac-next) + ("C-p" . ac-previous)) :config (ac-flyspell-workaround) @@ -17,13 +23,6 @@ ac-delay 0.05 ac-menu-height 15) - (let ((map ac-completing-map)) - (define-key map (kbd "RET") 'ac-complete) - (define-key map (kbd "C-m") 'ac-complete) - (define-key map (kbd "C-s") 'ac-isearch) - (define-key map (kbd "C-n") 'ac-next) - (define-key map (kbd "C-p") 'ac-previous)) - ;; Auto-complete when indenting. (defadvice indent-for-tab-command (around ac-before-indent activate) "Call `auto-complete' if text was recently entered." diff --git a/modules/siren-browse-kill-ring.el b/modules/siren-browse-kill-ring.el index e78f386..bdf04f3 100644 --- a/modules/siren-browse-kill-ring.el +++ b/modules/siren-browse-kill-ring.el @@ -7,7 +7,7 @@ ;;; Code: (use-package browse-kill-ring - :init + :config (browse-kill-ring-default-keybindings)) (provide 'siren-browse-kill-ring) diff --git a/modules/siren-coffee.el b/modules/siren-coffee.el index d9e832e..e09d6fa 100644 --- a/modules/siren-coffee.el +++ b/modules/siren-coffee.el @@ -11,12 +11,11 @@ (use-package coffee-mode :mode "\\.coffee\\'" :interpreter "coffee" + :hook (coffee-mode . siren-coffee-mode-setup) - :config - (setq coffee-tab-width 2) - - (defun siren-coffee-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-coffee-mode-setup () + (siren-prog-mode-setup) ;; remove the "Generated by CoffeeScript" header (add-to-list 'coffee-args-compile "--no-header") @@ -31,9 +30,8 @@ (highlight-indentation-current-column-mode) (subword-mode +1)) - (setq siren-coffee-mode-hook 'siren-coffee-mode-defaults) - (add-hook 'coffee-mode-hook (lambda () - (run-hooks 'siren-coffee-mode-hook)))) + :config + (setq coffee-tab-width 2)) (provide 'siren-coffee) ;;; siren-coffee.el ends here diff --git a/modules/siren-company.el b/modules/siren-company.el index ba28b67..0689744 100644 --- a/modules/siren-company.el +++ b/modules/siren-company.el @@ -9,11 +9,7 @@ (require 'siren-fci) (use-package company - :config - - ;; work-around for issues with fci-mode - (defvar-local company-fci-mode-on-p nil) - + :init (defun company-turn-off-fci (&rest ignore) (when (boundp 'fci-mode) (setq company-fci-mode-on-p fci-mode) @@ -22,6 +18,10 @@ (defun company-maybe-turn-on-fci (&rest ignore) (when company-fci-mode-on-p (fci-mode 1))) + :config + ;; work-around for issues with fci-mode + (defvar-local company-fci-mode-on-p nil) + (add-hook 'company-completion-started-hook 'company-turn-off-fci) (add-hook 'company-completion-finished-hook 'company-maybe-turn-on-fci) (add-hook 'company-completion-cancelled-hook 'company-maybe-turn-on-fci) diff --git a/modules/siren-conf.el b/modules/siren-conf.el index 327cf1c..b6b0050 100644 --- a/modules/siren-conf.el +++ b/modules/siren-conf.el @@ -9,16 +9,15 @@ (require 'siren-programming) (use-package conf-mode - :mode "Procfile\\'" - :config - (defun siren-conf-mode-defaults () - (siren-prog-mode-defaults) + :mode "Procfile\\'" "\\.conf\\'" "\\.cfg\\'" + :hook (conf-mode . siren-conf-mode-setup) + + :init + (defun siren-conf-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode)) - - (setq siren-conf-mode-hook 'siren-conf-mode-defaults) - (add-hook 'conf-mode-hook (lambda () (run-hooks 'siren-conf-mode-hook)))) + (highlight-indentation-current-column-mode))) (provide 'siren-conf) ;;; siren-conf.el ends here diff --git a/modules/siren-css.el b/modules/siren-css.el index 976dff9..5d53eb9 100644 --- a/modules/siren-css.el +++ b/modules/siren-css.el @@ -11,18 +11,17 @@ (use-package css-mode :mode "\\.css\\'" + :hook (css-mode-hook . siren-css-mode-setup) + :config (setq css-indent-offset 2) - (defun siren-css-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-css-mode-setup () + (siren-prog-mode-setup) (rainbow-mode +1) (setq tab-width 2) - (highlight-indentation-current-column-mode)) - - (setq siren-css-mode-hook 'siren-css-mode-defaults) - (add-hook 'css-mode-hook (lambda () - (run-hooks 'siren-css-mode-hook)))) + (highlight-indentation-current-column-mode))) (provide 'siren-css) ;;; siren-css.el ends here diff --git a/modules/siren-cucumber.el b/modules/siren-cucumber.el index 243fbea..83df072 100644 --- a/modules/siren-cucumber.el +++ b/modules/siren-cucumber.el @@ -11,17 +11,14 @@ (use-package feature-mode :mode "\\.feature\\'" :interpreter "cucumber" + :hook (feature-mode . siren-feature-mode-setup) - :config - (defun siren-feature-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-feature-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode)) - - (setq siren-feature-mode-hook 'siren-feature-mode-defaults) - (add-hook 'feature-mode-hook (lambda () - (run-hooks 'siren-feature-mode-hook)))) + (highlight-indentation-current-column-mode))) (provide 'siren-cucumber) ;;; siren-cucumber.el ends here diff --git a/modules/siren-diff-hl.el b/modules/siren-diff-hl.el index ffa43ee..b949724 100644 --- a/modules/siren-diff-hl.el +++ b/modules/siren-diff-hl.el @@ -7,9 +7,13 @@ ;;; Code: (use-package diff-hl - :init - (add-hook 'dired-mode-hook 'diff-hl-dired-mode) - (global-diff-hl-mode +1)) + :demand + :hook ((dired-mode . diff-hl-dired-mode) + (magit-post-refresh-hook . diff-hl-magit-post-refresh)) + + :config + (global-diff-hl-mode +1) + (diff-hl-flydiff-mode +1)) (provide 'siren-diff-hl) ;;; siren-diff-hl.el ends here diff --git a/modules/siren-dired.el b/modules/siren-dired.el index 8609123..20684c0 100644 --- a/modules/siren-dired.el +++ b/modules/siren-dired.el @@ -6,16 +6,18 @@ ;;; Code: -;; Loads from vendor. -(require 'dired+) +(require 'siren-linum) -(defun siren-dired-mode-defaults () - (linum-mode t) - (define-key dired-mode-map (kbd "c") 'dired-create-directory) - (toggle-diredp-find-file-reuse-dir 1)) +(use-package dired+ + :ensure nil ;; loaded from vendor + :demand + :hook (dired-mode . siren-dired-mode-setup) -(setq siren-dired-mode-hook 'siren-dired-mode-defaults) -(add-hook 'dired-mode-hook (lambda () (run-hooks 'siren-dired-mode-hook))) + :init + (defun siren-dired-mode-setup () + (linum-mode t) + (define-key dired-mode-map (kbd "c") 'dired-create-directory) + (toggle-diredp-find-file-reuse-dir 1))) (provide 'siren-dired) ;;; siren-dired.el ends here diff --git a/modules/siren-direx.el b/modules/siren-direx.el index 3b55a0b..a9b4b4f 100644 --- a/modules/siren-direx.el +++ b/modules/siren-direx.el @@ -7,17 +7,14 @@ ;;; Code: (use-package direx - :bind - ("C-x j" . direx-project:jump-to-project-root) + :bind ("C-x j" . direx-project:jump-to-project-root) + :hook (direx-mode . siren-direx-mode-setup) :config (setq direx:closed-icon " + " - direx:open-icon " - ") + direx:open-icon " - ")) - (defun siren-direx-mode-defaults ()) - - (setq siren-direx-mode-hook 'siren-direx-mode-defaults) - (add-hook 'direx-mode-hook (lambda () (run-hooks 'siren-direx-mode-hook)))) +(defun siren-direx-mode-setup ()) (provide 'siren-direx) ;;; siren-direx.el ends here diff --git a/modules/siren-dockerfile.el b/modules/siren-dockerfile.el index 08ffd58..94d837e 100644 --- a/modules/siren-dockerfile.el +++ b/modules/siren-dockerfile.el @@ -9,16 +9,13 @@ (require 'siren-programming) (use-package dockerfile-mode - :mode "Dockerfile\\'" + :mode "Dockerfile.*\\'" + :hook (dockerfile-mode . siren-dockerfile-mode-setup) - :config - (defun siren-dockerfile-mode-defaults () - (siren-prog-mode-defaults) - (subword-mode +1)) - - (setq siren-dockerfile-mode-hook 'siren-dockerfile-mode-defaults) - (add-hook 'dockerfile-mode-hook (lambda () - (run-hooks 'siren-dockerfile-mode-hook)))) + :init + (defun siren-dockerfile-mode-setup () + (siren-prog-mode-setup) + (subword-mode +1))) (provide 'siren-dockerfile) ;;; siren-dockerfile.el ends here diff --git a/modules/siren-edit-server.el b/modules/siren-edit-server.el index b3409e2..712a9ef 100644 --- a/modules/siren-edit-server.el +++ b/modules/siren-edit-server.el @@ -8,6 +8,8 @@ (use-package edit-server :if window-system + :hook (after-init . edit-server-start) + :init (setq edit-server-default-major-mode 'markdown-mode edit-server-new-frame-alist @@ -15,9 +17,7 @@ (width . 90) (height . 45) (minibuffer . t) - (menu-bar-lines . t))) - - (add-hook 'after-init-hook 'edit-server-start t)) + (menu-bar-lines . t)))) (provide 'siren-edit-server) ;;; siren-edit-server.el ends here diff --git a/modules/siren-elscreen.el b/modules/siren-elscreen.el index a614f13..4e7e5d6 100644 --- a/modules/siren-elscreen.el +++ b/modules/siren-elscreen.el @@ -7,6 +7,7 @@ ;;; Code: (use-package elscreen + :demand :bind (("s-}" . elscreen-next) ("s-{" . elscreen-previous) @@ -27,7 +28,6 @@ ("C-;" . elscreen-display-screen-name-list)) :config - ;; Start ElScreen. (elscreen-start)) (use-package elscreen-buffer-group :defer t) diff --git a/modules/siren-emacs-lisp.el b/modules/siren-emacs-lisp.el index 86363ef..47dfc28 100644 --- a/modules/siren-emacs-lisp.el +++ b/modules/siren-emacs-lisp.el @@ -24,7 +24,7 @@ (when (and file-name (string-match-p ".*-tests?\\.el\\'" file-name)) (setq-local flycheck-checkers '(emacs-lisp))))) -(defun siren-emacs-lisp-mode-defaults () +(defun siren-emacs-lisp-mode-setup () "Sensible defaults for `emacs-lisp-mode'." (highlight-indent-guides-mode) ;; (run-hooks 'siren-lisp-coding-hook) @@ -35,14 +35,8 @@ ;; (siren-conditional-emacs-lisp-checker) ) -(setq siren-emacs-lisp-mode-hook 'siren-emacs-lisp-mode-defaults) -(add-hook 'emacs-lisp-mode-hook (lambda () - (run-hooks 'siren-emacs-lisp-mode-hook))) - +(add-hook 'emacs-lisp-mode-hook #'siren-emacs-lisp-mode-setup) (add-to-list 'auto-mode-alist '("Cask\\'" . emacs-lisp-mode)) -(eval-after-load "rainbow-mode" - '(diminish 'rainbow-mode)) - (provide 'siren-emacs-lisp) ;;; siren-emacs-lisp.el ends here diff --git a/modules/siren-escreen.el b/modules/siren-escreen.el index fb1f83d..dbc8486 100644 --- a/modules/siren-escreen.el +++ b/modules/siren-escreen.el @@ -6,64 +6,49 @@ ;;; Code: -;; Loads from vendor. -(require 'escreen) +(use-package escreen + :ensure nil ;; loaded from vendor + :demand -;; Escreen Helper -;; - from http://blog.nguyenvq.com/2011/03/07/escreen-instead-of-elscreen-for-screen-like-features-in-emacs/ -(defun escreen-get-active-screen-numbers-with-emphasis () - "what the name says" - (interactive) - (let ((escreens (escreen-get-active-screen-numbers)) - (emphased "")) - (dolist (s escreens) - (setq emphased - (concat emphased (if (= escreen-current-screen-number s) - (propertize (number-to-string s) - ;;'face 'custom-variable-tag) " ") - ;;'face 'info-title-3) - 'face 'font-lock-warning-face) - ;;'face 'secondary-selection) - (number-to-string s)) - " "))) - (message "escreen: active screens: %s" emphased))) + :bind (("s-}" . escreen-goto-next-screen) + ("s-{" . escreen-goto-prev-screen) + :map escreen-map + ("C-z" . escreen-goto-last-screen) + ("l" . escreen-goto-last-screen) + ("C-l" . escreen-goto-last-screen) + (";" . siren-escreen-get-active-screen) + ("C-;" . siren-escreen-get-active-screen) + ("C-c" . escreen-create-screen) + ("C-g" . escreen-goto-screen) + ("C-k" . escreen-kill-screen) + ("C-n" . escreen-goto-next-screen) + ("C-p" . escreen-goto-prev-screen)) -;; Initialize escreen -(escreen-install) + :hook + (escreen-goto-screen . siren-escreen-get-active-screen) -;; Set prefix key to C-z. -(setq escreen-prefix-char (kbd "C-z")) -(global-set-key escreen-prefix-char 'escreen-prefix) -(define-key escreen-map escreen-prefix-char 'escreen-goto-last-screen) + :init + (defun siren-escreen-get-active-screen () + "what the name says" + (interactive) + (let ((escreens (escreen-get-active-screen-numbers)) + (emphased "")) + (dolist (s escreens) + (setq emphased + (concat emphased (if (= escreen-current-screen-number s) + (propertize (number-to-string s) + ;;'face 'custom-variable-tag) " ") + ;;'face 'info-title-3) + 'face 'font-lock-warning-face) + ;;'face 'secondary-selection) + (number-to-string s)) + " "))) + (message "escreen: active screens: %s" emphased))) -;; Toggle screens. -(define-key escreen-map (kbd "l") 'escreen-goto-last-screen) -(define-key escreen-map (kbd "C-l") 'escreen-goto-last-screen) - -;; List screens. -(define-key escreen-map (kbd "a") - 'escreen-get-active-screen-numbers-with-emphasis) -(define-key escreen-map (kbd "C-a") - 'escreen-get-active-screen-numbers-with-emphasis) -(define-key escreen-map (kbd ";") - 'escreen-get-active-screen-numbers-with-emphasis) -(define-key escreen-map (kbd "C-;") - 'escreen-get-active-screen-numbers-with-emphasis) - -;; Goto screens. -(global-set-key (kbd "s-}") 'escreen-goto-next-screen) -(global-set-key (kbd "s-{") 'escreen-goto-prev-screen) - -;; Ctrl versions of default commands. -(define-key escreen-map (kbd "C-c") 'escreen-create-screen) -(define-key escreen-map (kbd "C-g") 'escreen-goto-screen) -(define-key escreen-map (kbd "C-k") 'escreen-kill-screen) -(define-key escreen-map (kbd "C-n") 'escreen-goto-next-screen) -(define-key escreen-map (kbd "C-p") 'escreen-goto-prev-screen) - -;; Show list of screens when you switch/create/kill. -(add-hook 'escreen-goto-screen-hook - 'escreen-get-active-screen-numbers-with-emphasis) + :config + (escreen-install) + (setq escreen-prefix-char (kbd "C-z")) + (global-set-key escreen-prefix-char 'escreen-prefix)) (provide 'siren-escreen) ;;; siren-escreen.el ends here diff --git a/modules/siren-eslintd-fix.el b/modules/siren-eslintd-fix.el new file mode 100644 index 0000000..9913a72 --- /dev/null +++ b/modules/siren-eslintd-fix.el @@ -0,0 +1,13 @@ +;;; siren-eslintd-fix.el --- jimeh's Emacs Siren: eslintd-fix configuration. + +;;; Commentary: + +;; Basic configuration for eslintd-fix. + +;;; Code: + +(use-package eslintd-fix + :defer t) + +(provide 'siren-eslintd-fix) +;;; siren-eslintd-fix.el ends here diff --git a/modules/siren-evil.el b/modules/siren-evil.el index 0376fb4..5a928de 100644 --- a/modules/siren-evil.el +++ b/modules/siren-evil.el @@ -6,23 +6,22 @@ ;;; Code: +;; Various evil config options borrowed from: +;; http://www.lukeswart.net/2015/04/lightning-intro-to-emacs-using-evil-mode-and-org-mode/ (use-package evil - :config - ;; Various evil config options borrowed from: - ;; http://www.lukeswart.net/2015/04/lightning-intro-to-emacs-using-evil-mode-and-org-mode/ - - ;; Treat wrapped line scrolling as single lines - (define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line) - (define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line) - - ;; esc quits pretty much anything (like pending prompts in the minibuffer) - (define-key evil-normal-state-map [escape] 'keyboard-quit) - (define-key evil-visual-state-map [escape] 'keyboard-quit) - (define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit) - (define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit) - (define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit) - (define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit) - (define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)) + :demand + :bind (:map evil-normal-state-map + ;; Treat wrapped line scrolling as single lines. + ("j" . evil-next-visual-line) + ("k" . evil-previous-visual-line) + ;; esc quits pretty much anything (like pending prompts in the minibuffer) + :map evil-normal-state-map ("" . keyboard-quit) + :map evil-visual-state-map ("" . keyboard-quit) + :map minibuffer-local-map ("" . minibuffer-keyboard-quit) + :map minibuffer-local-ns-map ("" . minibuffer-keyboard-quit) + :map minibuffer-local-completion-map ("" . minibuffer-keyboard-quit) + :map minibuffer-local-must-match-map ("" . minibuffer-keyboard-quit) + :map minibuffer-local-isearch-map ("" . minibuffer-keyboard-quit))) (provide 'siren-evil) ;;; siren-evil.el ends here diff --git a/modules/siren-folding.el b/modules/siren-folding.el index d91fbc1..6b75f28 100644 --- a/modules/siren-folding.el +++ b/modules/siren-folding.el @@ -6,8 +6,9 @@ ;;; Code: -;; Loads from vendor. -(require 'hideshowvis) +(use-package hideshowvis + :ensure nil ;; loaded from vendor +) (defun siren-toggle-hiding (column) "Toggle hiding/showing blocks via hs-mode. diff --git a/modules/siren-full-ack.el b/modules/siren-full-ack.el index 149b8cf..3891b63 100644 --- a/modules/siren-full-ack.el +++ b/modules/siren-full-ack.el @@ -11,35 +11,33 @@ ("C-c C-a" . ack) :config - (setq ack-arguments - '("--sort-files" - "--ignore-dir=vendor/ruby" - "--ignore-dir=vendor/bundle" - "--ignore-dir=coverage" - "--ignore-dir=savefile" - "--ignore-dir=Godeps" - "--ignore-dir=elpa" - "--ignore-dir=docs" - "--ignore-dir=doc" - "--type-add=js=.js,.js.erb" - "--type-add=ruby=.jbuilder,.rabl" - "--type-add=html=.haml,.hamlc,.jade" - "--type-add=css=.sass,.scss,.styl" - "--type-set=coffee=.coffee" - "--type-set=cucumber=.feature")) - (setq ack-project-root-file-patterns - '(".project\\'" - ".xcodeproj\\'" - ".sln\\'" - "\\`Project.ede\\'" - "\\`.git\\'" - "\\`.bzr\\'" - "\\`_darcs\\'" - "\\`.hg\\'" - "\\`Gemfile\\'" - "\\`Rakefile\\'" - "\\`Makefile\\'")) - (setq ack-prompt-for-directory 'unless-guessed)) + (setq ack-arguments '("--sort-files" + "--ignore-dir=vendor/ruby" + "--ignore-dir=vendor/bundle" + "--ignore-dir=coverage" + "--ignore-dir=savefile" + "--ignore-dir=Godeps" + "--ignore-dir=elpa" + "--ignore-dir=docs" + "--ignore-dir=doc" + "--type-add=js=.js,.js.erb" + "--type-add=ruby=.jbuilder,.rabl" + "--type-add=html=.haml,.hamlc,.jade" + "--type-add=css=.sass,.scss,.styl" + "--type-set=coffee=.coffee" + "--type-set=cucumber=.feature") + ack-project-root-file-patterns '(".project\\'" + ".xcodeproj\\'" + ".sln\\'" + "\\`Project.ede\\'" + "\\`.git\\'" + "\\`.bzr\\'" + "\\`_darcs\\'" + "\\`.hg\\'" + "\\`Gemfile\\'" + "\\`Rakefile\\'" + "\\`Makefile\\'") + ack-prompt-for-directory 'unless-guessed)) (provide 'siren-full-ack) ;;; siren-full-ack.el ends here diff --git a/modules/siren-gitconfig.el b/modules/siren-gitconfig.el index 80683fa..4f9d859 100644 --- a/modules/siren-gitconfig.el +++ b/modules/siren-gitconfig.el @@ -10,17 +10,14 @@ (use-package gitconfig-mode :mode "\\.gitconfig" "gitconfig\\'" "\\.git\\\/config" + :hook (gitconfig-mode . siren-gitconfig-mode-setup) - :config - (defun siren-gitconfig-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-gitconfig-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-current-column-mode) - (run-hooks 'siren-prog-mode-hook)) - - (setq siren-gitconfig-mode-hook 'siren-gitconfig-mode-defaults) - (add-hook 'gitconfig-mode-hook (lambda () - (run-hooks 'siren-gitconfig-mode-hook)))) + (run-hooks 'siren-prog-mode-hook))) (provide 'siren-gitconfig) ;;; siren-gitconfig.el ends here diff --git a/modules/siren-gitignore.el b/modules/siren-gitignore.el index 7a7d8ae..d1fb627 100644 --- a/modules/siren-gitignore.el +++ b/modules/siren-gitignore.el @@ -10,17 +10,14 @@ (use-package gitignore-mode :mode "\\.gitignore" "gitignore\\'" + :hook (gitignore-mode . siren-gitignore-mode-setup) - :config - (defun siren-gitignore-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-gitignore-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-current-column-mode) - (run-hooks 'siren-prog-mode-hook)) - - (setq siren-gitignore-mode-hook 'siren-gitignore-mode-defaults) - (add-hook 'gitignore-mode-hook (lambda () - (run-hooks 'siren-gitignore-mode-hook)))) + (run-hooks 'siren-prog-mode-hook))) (provide 'siren-gitignore) ;;; siren-gitignore.el ends here diff --git a/modules/siren-go.el b/modules/siren-go.el index cd50c83..d1d7fd8 100644 --- a/modules/siren-go.el +++ b/modules/siren-go.el @@ -7,6 +7,7 @@ ;;; Code: (require 'siren-programming) +(require 'siren-flycheck) (use-package go-mode :mode "\\.go\\'" @@ -20,21 +21,16 @@ ("C-c b" . go-run) ("C-c d" . godef-jump) ("C-c C-j" . avy-goto-word-or-subword-1) - ("C-h f" . godoc-at-point)) + ("C-h f" . godoc-at-point) + :map help-command + ("G" . godoc)) - :config - (message "loading go-mode") + :hook + (go-mode . siren-go-mode-setup) - (when (memq window-system '(mac ns)) - (exec-path-from-shell-copy-env "GOPATH")) - - ;; Ignore go test -c output files - (add-to-list 'completion-ignored-extensions ".test") - - (define-key 'help-command (kbd "G") 'godoc) - - (defun siren-go-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-go-mode-setup () + (siren-prog-mode-setup) ;; Prefer goimports to gofmt if installed (let ((goimports (executable-find "goimports"))) @@ -70,9 +66,14 @@ ;; CamelCase aware editing operations (subword-mode +1)) - (setq siren-go-mode-hook 'siren-go-mode-defaults) - (add-hook 'go-mode-hook (lambda () - (run-hooks 'siren-go-mode-hook)))) + :config + (message "loading go-mode") + + (when (memq window-system '(mac ns)) + (exec-path-from-shell-copy-env "GOPATH")) + + ;; Ignore go test -c output files + (add-to-list 'completion-ignored-extensions ".test")) (use-package company-go :defer t) (use-package go-eldoc :defer t) @@ -87,13 +88,13 @@ (setq go-projectile-switch-gopath 'never)) (use-package flycheck-gometalinter + :requires flycheck + :hook (flycheck-mode . flycheck-gometalinter-setup) + :init (setq flycheck-gometalinter-fast t flycheck-gometalinter-tests t - flycheck-gometalinter-vendor t) - :config - (eval-after-load 'flycheck - '(add-hook 'flycheck-mode-hook #'flycheck-gometalinter-setup))) + flycheck-gometalinter-vendor t)) (provide 'siren-go) ;;; siren-go.el ends here diff --git a/modules/siren-goto-chg.el b/modules/siren-goto-chg.el index 9518727..32f7abd 100644 --- a/modules/siren-goto-chg.el +++ b/modules/siren-goto-chg.el @@ -7,15 +7,14 @@ ;;; Code: (use-package goto-chg - :config - (global-set-key (kbd "C-.") 'goto-last-change) - (global-set-key (kbd "C-,") 'goto-last-change-reverse) - - ;; Flyspell uses C-. and C-, itself in a such a way that this is the only way - ;; to make goto-chg bind to those keys while flyspell-mode is enabled. - (let ((map flyspell-mode-map)) - (define-key map (kbd "C-.") 'goto-last-change) - (define-key map (kbd "C-,") 'goto-last-change-reverse))) + :bind (("C-." . goto-last-change) + ("C-," . goto-last-change-reverse) + ;; Flyspell uses C-. and C-, itself in a such a way that this is the + ;; only way to make goto-chg bind to those keys while flyspell-mode is + ;; enabled. + :map flyspell-mode-map + ("C-." . goto-last-change) + ("C-," . goto-last-change-reverse))) (provide 'siren-goto-chg) ;;; siren-goto-chg.el ends here diff --git a/modules/siren-haml.el b/modules/siren-haml.el index 68da340..c1bbe10 100644 --- a/modules/siren-haml.el +++ b/modules/siren-haml.el @@ -8,16 +8,14 @@ (use-package haml-mode :mode "\\.haml\\'" "\\.hamlc\\'" + :hook (haml-mode . siren-haml-mode-setup) - :config - (defun siren-haml-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-haml-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode)) - - (setq siren-haml-mode-hook 'siren-haml-mode-defaults) - (add-hook 'haml-mode-hook (lambda () (run-hooks 'siren-haml-mode-hook)))) + (highlight-indentation-current-column-mode))) (provide 'siren-haml) ;;; siren-haml.el ends here diff --git a/modules/siren-helm.el b/modules/siren-helm.el index 9b56422..6d257f2 100644 --- a/modules/siren-helm.el +++ b/modules/siren-helm.el @@ -8,18 +8,13 @@ (use-package helm :defer t - :config - (setq helm-autoresize-mode t - helm-autoresize-max-height 30 - helm-autoresize-min-height 30 - helm-buffer-max-length 64 - helm-case-fold-search 'smart - helm-echo-input-in-header-line t - helm-file-name-case-fold-search 'smart - helm-split-window-default-side 'below) - - (setq siren-helm--did-hide-neotree nil) + :hook ((helm-minibuffer-set-up . siren-helm--hide-minibuffer-maybe) + (helm-before-initialize . siren-helm--toggle-header-line) + (helm-minibuffer-set-up . siren-helm--popwin-help-mode-off) + (helm-cleanup . siren-helm--popwin-help-mode-on) + (helm-cleanup . siren-helm--show-neotree-maybe)) + :init ;; From: https://www.reddit.com/r/emacs/comments/3asbyn/new_and_very_useful_helm_feature_enter_search/ (defun siren-helm--hide-minibuffer-maybe () (when (with-helm-buffer helm-echo-input-in-header-line) @@ -29,16 +24,12 @@ `(:background ,bg-color :foreground ,bg-color))) (setq-local cursor-type nil)))) - (add-hook 'helm-minibuffer-set-up-hook #'siren-helm--hide-minibuffer-maybe) - ;; From: https://github.com/emacs-helm/helm/issues/918#issuecomment-81555133 (defun siren-helm--toggle-header-line () (if (= (length helm-sources) 1) (set-face-attribute 'helm-source-header nil :height 0.1) (set-face-attribute 'helm-source-header nil :height 1.0))) - (add-hook 'helm-before-initialize-hook #'siren-helm--toggle-header-line) - ;; From: https://github.com/emacs-helm/helm/wiki/Popwin (defun siren-helm--popwin-help-mode-off () "Turn `popwin-mode' off for *Help* buffers." @@ -46,8 +37,6 @@ (customize-set-variable 'popwin:special-display-config (delq 'help-mode popwin:special-display-config)))) - (add-hook 'helm-minibuffer-set-up-hook #'siren-helm--popwin-help-mode-off) - ;; From: https://github.com/emacs-helm/helm/wiki/Popwin (defun siren-helm--popwin-help-mode-on () "Turn `popwin-mode' on for *Help* buffers." @@ -55,8 +44,6 @@ (customize-set-variable 'popwin:special-display-config (add-to-list 'popwin:special-display-config 'help-mode nil #'eq)))) - (add-hook 'helm-cleanup-hook #'siren-helm--popwin-help-mode-on) - (defun siren-helm--hide-neotree (&rest plist) (when (and (fboundp 'neotree-hide) (fboundp 'neo-global--window-exists-p) @@ -64,15 +51,24 @@ (setq siren-helm--did-hide-neotree t) (neotree-hide))) - (advice-add 'helm :before 'siren-helm--hide-neotree) - (defun siren-helm--show-neotree-maybe () (when (and (fboundp 'neotree-show) siren-helm--did-hide-neotree) (setq siren-helm--did-hide-neotree nil) (run-with-timer 0.01 nil #'neotree-show))) - (add-hook 'helm-cleanup-hook #'siren-helm--show-neotree-maybe)) + :config + (setq helm-autoresize-max-height 30 + helm-autoresize-min-height 30 + helm-autoresize-mode t + helm-buffer-max-length 64 + helm-case-fold-search 'smart + helm-echo-input-in-header-line t + helm-file-name-case-fold-search 'smart + helm-split-window-default-side 'below + siren-helm--did-hide-neotree nil) + + (advice-add 'helm :before 'siren-helm--hide-neotree)) (use-package helm-descbinds :defer t) diff --git a/modules/siren-highlight-symbol.el b/modules/siren-highlight-symbol.el index beda145..5e78490 100644 --- a/modules/siren-highlight-symbol.el +++ b/modules/siren-highlight-symbol.el @@ -8,8 +8,9 @@ (use-package highlight-symbol :bind - (("C-c C-p" . highlight-symbol-prev) - ("C-c C-n" . highlight-symbol-next)) + ("C-c C-p" . highlight-symbol-prev) + ("C-c C-n" . highlight-symbol-next) + :config (setq highlight-symbol-highlight-single-occurrence 'nil highlight-symbol-idle-delay 0.5)) diff --git a/modules/siren-js.el b/modules/siren-js.el index 5fa7b71..28b8434 100644 --- a/modules/siren-js.el +++ b/modules/siren-js.el @@ -6,16 +6,16 @@ ;;; Code: -(use-package eslintd-fix - :defer t) - +(require 'siren-eslintd-fix) +(require 'siren-flycheck) +(require 'siren-folding) (require 'siren-programming) (add-to-list 'auto-mode-alist '("\\.js\\'" . js-mode)) (add-to-list 'auto-mode-alist '("\\.pac\\'" . js-mode)) (add-to-list 'interpreter-mode-alist '("node" . js-mode)) -(defun siren-js-mode-defaults () +(defun siren-js-mode-setup () "Default tweaks for `js-mode'." (let ((width 2)) (setq js-indent-level width @@ -25,7 +25,7 @@ (setq flycheck-checker 'javascript-eslint flycheck-javascript-eslint-executable "eslint_d") - (siren-prog-mode-defaults) + (siren-prog-mode-setup) (eslintd-fix-mode) (company-mode +1) (subword-mode +1) @@ -37,10 +37,7 @@ (define-key map (kbd "C-j") 'newline-and-indent) (define-key map (kbd "C-c C-h") 'siren-toggle-hiding))) -(setq siren-js-mode-hook 'siren-js-mode-defaults) - -(add-hook 'js-mode-hook (lambda () - (run-hooks 'siren-js-mode-hook))) +(add-hook 'js-mode-hook #'siren-js-mode-setup) (provide 'siren-js) ;;; siren-js.el ends here diff --git a/modules/siren-json.el b/modules/siren-json.el index d91af27..cf17fd6 100644 --- a/modules/siren-json.el +++ b/modules/siren-json.el @@ -6,16 +6,26 @@ ;;; Code: +(require 'siren-eslintd-fix) +(require 'siren-folding) (require 'siren-programming) +(use-package omnifmt + :ensure nil ;; loaded from vendor + ) + (use-package json-mode :mode "\\.json\\'" - :config - (require 'omnifmt) + :requires (flycheck highlight-indentation omnifmt hideshowvis) - (defun siren-json-mode-defaults () + :bind (:map json-mode-map + ("C-j" . newline-and-indent) + ("C-c C-h" . siren-toggle-hiding)) + + :init + (defun siren-json-mode-setup () "Default tweaks for `json-mode'." - (siren-prog-mode-defaults) + (siren-prog-mode-setup) (let ((width 2)) (setq js-indent-level width) @@ -26,19 +36,15 @@ (setq flycheck-checker 'json-jsonlint) (eslintd-fix-mode -1) - (omnifmt-mode) + (omnifmt-mode +1) (company-mode +1) (subword-mode +1) (hs-minor-mode 1) (highlight-indentation-current-column-mode) - (hideshowvis-enable) - (let ((map json-mode-map)) - (define-key map (kbd "C-j") 'newline-and-indent) - (define-key map (kbd "C-c C-h") 'siren-toggle-hiding))) + (hideshowvis-enable)) - (setq siren-json-mode-hook 'siren-json-mode-defaults) - (add-hook 'json-mode-hook (lambda () - (run-hooks 'siren-json-mode-hook)))) + :hook + (json-mode . siren-json-mode-setup)) (provide 'siren-json) ;;; siren-js.el ends here diff --git a/modules/siren-linum.el b/modules/siren-linum.el index 4436dc4..60ec64c 100644 --- a/modules/siren-linum.el +++ b/modules/siren-linum.el @@ -6,14 +6,18 @@ ;;; Code: -;; Customize line numbers - In gui mode the fringe is the spacer between line -;; numbers and code, while in console mode we add an extra space for it. -(if window-system (setq linum+-dynamic-format " %%%dd") - (setq linum+-dynamic-format " %%%dd ")) +(use-package linum+ + :ensure nil ;; loaded from vendor + :demand -(eval-after-load "linum+" '(progn (setq linum-format 'dynamic))) + :init + ;; Customize line numbers - In GUI mode the fringe is the spacer between line + ;; numbers and code, while in console mode we add an extra space for it. + (if window-system (setq linum+-dynamic-format " %%%dd") + (setq linum+-dynamic-format " %%%dd ")) -(require 'linum+) + :config + (setq linum-format 'dynamic)) (provide 'siren-linum) ;;; siren-linum.el ends here diff --git a/modules/siren-lisp.el b/modules/siren-lisp.el index 823954f..9d5f4f7 100644 --- a/modules/siren-lisp.el +++ b/modules/siren-lisp.el @@ -6,6 +6,8 @@ ;;; Code: +(require 'siren-programming) + ;; Lisp configuration (define-key read-expression-map (kbd "TAB") 'completion-at-point) diff --git a/modules/siren-lua.el b/modules/siren-lua.el index e1b2bb0..f7ffb2b 100644 --- a/modules/siren-lua.el +++ b/modules/siren-lua.el @@ -9,18 +9,18 @@ (require 'siren-programming) (use-package lua-mode - :config - (defun siren-lua-mode-defaults () - (siren-prog-mode-defaults) + :hook + (lua-mode . siren-lua-mode-setup) + + :init + (defun siren-lua-mode-setup () + (siren-prog-mode-setup) + + (setq lua-indent-level 2 + whitespace-action '(auto-cleanup)) (highlight-indentation-current-column-mode) - (subword-mode +1) - (setq lua-indent-level 2 - whitespace-action (quote (auto-cleanup)))) - - (setq siren-lua-mode-hook 'siren-lua-mode-defaults) - (add-hook 'lua-mode-hook (lambda () - (run-hooks 'siren-lua-mode-hook)))) + (subword-mode +1))) (provide 'siren-lua) ;;; siren-lua.el ends here diff --git a/modules/siren-magit.el b/modules/siren-magit.el index 74ee592..75e4a44 100644 --- a/modules/siren-magit.el +++ b/modules/siren-magit.el @@ -14,9 +14,23 @@ :bind ("C-x g". magit-status) + :hook + (siren-magit-mode . siren-magit-mode-setup) + (git-commit-mode . siren-git-commit-mode-setup) + :init (defalias 'bl 'magit-blame) + (defun siren-magit-mode-setup ()) + + (defun siren-git-commit-mode-setup () + (subword-mode) + (setq tab-width 2) + (fci-mode t) + ;; (flyspell-mode) ;; in GUI causes git-commit-mode to lock up emacs + (linum-mode t) + (auto-fill-mode)) + :config (require 'magit) @@ -27,28 +41,12 @@ magit-revert-buffers 'silent magit-default-tracking-name-function 'magit-default-tracking-name-branch-only magit-repository-directories '("~/Projects" "~/src" "~/.emacs.d" "~/.dotfiles") - magit-display-buffer-function 'magit-display-buffer-same-window-except-diff-v1) - - (defun siren-magit-mode-defaults ()) - (setq siren-magit-mode-hook 'siren-magit-mode-defaults) - (add-hook 'magit-mode-hook (lambda () (run-hooks 'siren-magit-mode-hook))) - - (defun siren-git-commit-mode-defaults () - (subword-mode) - (setq tab-width 2) - (fci-mode t) - ;; (flyspell-mode) ;; in GUI causes git-commit-mode to lock up emacs - (linum-mode t) - (auto-fill-mode)) - - (setq siren-git-commit-mode-hook 'siren-git-commit-mode-defaults) - (add-hook 'git-commit-mode-hook (lambda () - (run-hooks 'siren-git-commit-mode-hook)))) + magit-display-buffer-function 'magit-display-buffer-same-window-except-diff-v1)) (use-package magit-gh-pulls + :hook (magit-mode . turn-on-magit-gh-pulls) :config - (setq gh-use-local-git-config t) - (add-hook 'magit-mode-hook 'turn-on-magit-gh-pulls)) + (setq gh-use-local-git-config t)) (provide 'siren-magit) ;;; siren-magit.el ends here diff --git a/modules/siren-makefile.el b/modules/siren-makefile.el index c55cc76..baeaed3 100644 --- a/modules/siren-makefile.el +++ b/modules/siren-makefile.el @@ -8,19 +8,16 @@ (require 'siren-programming) -(add-to-list 'siren-yank-indent-modes 'makefile-mode) +(add-to-list 'siren-indent-sensitive-modes 'makefile-mode) -(defun siren-makefile-mode-defaults () - (siren-prog-mode-defaults) +(defun siren-makefile-mode-setup () + (siren-prog-mode-setup) (subword-mode) (setq tab-width 4) (highlight-indentation-set-offset 4) (highlight-indentation-current-column-mode)) -(setq siren-makefile-mode-hook 'siren-makefile-mode-defaults) - -(add-hook 'makefile-mode-hook (lambda () - (run-hooks 'siren-makefile-mode-hook))) +(add-hook 'makefile-mode-hook #'siren-makefile-mode-setup) (provide 'siren-makefile) ;;; siren-makefile.el ends here diff --git a/modules/siren-markdown.el b/modules/siren-markdown.el index ceb3bff..30e678a 100644 --- a/modules/siren-markdown.el +++ b/modules/siren-markdown.el @@ -17,10 +17,14 @@ "\\.mdown" "\\.markdown" - :config - (setq markdown-command "redcarpet") + :bind (:map markdown-mode-map + ("C-c p" . markdown-preview)) - (defun siren-markdown-mode-defaults () + :hook + (markdown-mode . siren-markdown-mode-setup) + + :init + (defun siren-markdown-mode-setup () (setq whitespace-action nil fill-column 80 markdown-asymmetric-header t) @@ -30,15 +34,11 @@ (flyspell-mode) (auto-fill-mode) (smartparens-mode +1) - (subword-mode) - (define-key markdown-mode-map (kbd "C-c p") 'markdown-preview)) + (subword-mode)) - (setq siren-markdown-mode-hook 'siren-markdown-mode-defaults) - (add-hook 'markdown-mode-hook (lambda () - (run-hooks 'siren-markdown-mode-hook)))) - -(custom-set-faces - '(markdown-code-face ((t nil)))) + :config + (setq markdown-command "redcarpet") + (custom-set-faces '(markdown-code-face ((t nil))))) (provide 'siren-markdown) ;;; siren-markdown.el ends here diff --git a/modules/siren-move-beginning-of-line.el b/modules/siren-move-beginning-of-line.el index a1dbace..6f58d6b 100644 --- a/modules/siren-move-beginning-of-line.el +++ b/modules/siren-move-beginning-of-line.el @@ -7,7 +7,7 @@ ;;; Code: (defun siren-move-beginning-of-line (arg) - "Move point back to indentation of beginning of line. + "Move point back to indentation or beginning of line. Move point to the first non-whitespace character on this line. If point is already there, move to the beginning of the line. diff --git a/modules/siren-neotree.el b/modules/siren-neotree.el index 9b165f6..8f5854f 100644 --- a/modules/siren-neotree.el +++ b/modules/siren-neotree.el @@ -11,8 +11,8 @@ (use-package neotree :bind - ("C-x C-p" . neotree-toggle) - ("C-x p" . neotree-project-dir) + ("C-x p" . neotree-toggle) + ("C-x C-p" . neotree-project-dir) :init (defun neotree-project-dir () diff --git a/modules/siren-org-mode.el b/modules/siren-org-mode.el index 107a2b5..dbbb764 100644 --- a/modules/siren-org-mode.el +++ b/modules/siren-org-mode.el @@ -10,7 +10,7 @@ (require 'siren-flyspell) (require 'siren-smartparens) -(defun siren-org-mode-defaults () +(defun siren-org-mode-setup () (setq org-export-backends '(ascii html icalendar latex md confluence) fill-column 80 whitespace-action '(auto-cleanup)) @@ -31,9 +31,7 @@ (define-key map (kbd "C-M-n") 'outline-next-visible-heading) (define-key map (kbd "C-M-p") 'outline-previous-visible-heading))) -(setq siren-org-mode-hook 'siren-org-mode-defaults) -(add-hook 'org-mode-hook (lambda () - (run-hooks 'siren-org-mode-hook))) +(add-hook 'org-mode-hook #'siren-org-mode-setup) (provide 'siren-org-mode) ;;; siren-org-mode.el ends here diff --git a/modules/siren-package-lint.el b/modules/siren-package-lint.el index 8fb170c..40e9b69 100644 --- a/modules/siren-package-lint.el +++ b/modules/siren-package-lint.el @@ -6,6 +6,8 @@ ;;; Code: +(require 'siren-flycheck) + (use-package package-lint :defer t) diff --git a/modules/siren-perspective.el b/modules/siren-perspective.el index 09c7857..50b571a 100644 --- a/modules/siren-perspective.el +++ b/modules/siren-perspective.el @@ -7,44 +7,37 @@ ;;; Code: (use-package perspective + :demand + :bind (:map persp-mode-map + ("C-z z" . persp-switch) + ("C-z C-z" . persp-switch) + ("C-z c" . persp-switch) + ("C-z C-c" . persp-switch) + ("C-z s" . persp-switch) + ("C-z C-s" . persp-switch) + ("C-z b" . persp-switch) + ("C-z C-b" . persp-switch) + ("C-z l" . persp-switch-last) + ("C-z C-l" . persp-switch-last) + ("C-z c" . persp-remove-buffer) + ("C-z C-c" . persp-remove-buffer) + ("C-z k" . persp-kill) + ("C-z C-k" . persp-kill) + ("C-z r" . persp-rename) + ("C-z C-r" . persp-rename) + ("C-z a" . persp-add-buffer) + ("C-z C-a" . persp-add-buffer) + ("C-z i" . persp-import) + ("C-z C-i" . persp-import) + ("C-z n" . persp-next) + ("C-z C-n" . persp-next) + ("C-z p" . persp-prev) + ("C-z C-p" . persp-prev)) :config (setq persp-mode-prefix-key "" persp-initial-frame-name "0:main") (define-key persp-mode-map (kbd "C-z") perspective-map) - - (define-key persp-mode-map (kbd "C-z z") 'persp-switch) - (define-key persp-mode-map (kbd "C-z C-z") 'persp-switch) - (define-key persp-mode-map (kbd "C-z c") 'persp-switch) - (define-key persp-mode-map (kbd "C-z C-c") 'persp-switch) - (define-key persp-mode-map (kbd "C-z s") 'persp-switch) - (define-key persp-mode-map (kbd "C-z C-s") 'persp-switch) - (define-key persp-mode-map (kbd "C-z b") 'persp-switch) - (define-key persp-mode-map (kbd "C-z C-b") 'persp-switch) - - (define-key persp-mode-map (kbd "C-z l") 'persp-switch-last) - (define-key persp-mode-map (kbd "C-z C-l") 'persp-switch-last) - - (define-key persp-mode-map (kbd "C-z c") 'persp-remove-buffer) - (define-key persp-mode-map (kbd "C-z C-c") 'persp-remove-buffer) - - (define-key persp-mode-map (kbd "C-z k") 'persp-kill) - (define-key persp-mode-map (kbd "C-z C-k") 'persp-kill) - - (define-key persp-mode-map (kbd "C-z r") 'persp-rename) - (define-key persp-mode-map (kbd "C-z C-r") 'persp-rename) - - (define-key persp-mode-map (kbd "C-z a") 'persp-add-buffer) - (define-key persp-mode-map (kbd "C-z C-a") 'persp-add-buffer) - - (define-key persp-mode-map (kbd "C-z i") 'persp-import) - (define-key persp-mode-map (kbd "C-z C-i") 'persp-import) - - (define-key persp-mode-map (kbd "C-z n") 'persp-next) - (define-key persp-mode-map (kbd "C-z C-n") 'persp-next) - (define-key persp-mode-map (kbd "C-z p") 'persp-prev) - (define-key persp-mode-map (kbd "C-z C-p") 'persp-prev) - (persp-mode) ;; (custom-set-faces diff --git a/modules/siren-php.el b/modules/siren-php.el index 11dc69d..e3cce60 100644 --- a/modules/siren-php.el +++ b/modules/siren-php.el @@ -10,19 +10,20 @@ (require 'siren-rainbow) (use-package php-mode - :config - (defun siren-php-mode-defaults () - (siren-prog-mode-defaults) + :interpreter "php" + :mode "\\.php\\'" "\\.inc\\'" "\\.module\\'" + :hook + (php-mode . siren-php-mode-setup) + + :init + (defun siren-php-mode-setup () + (siren-prog-mode-setup) (rainbow-mode +1) (company-mode +1) (subword-mode +1) (highlight-indentation-current-column-mode) (hs-minor-mode 1) - (hideshowvis-enable)) - - (setq siren-php-mode-hook 'siren-php-mode-defaults) - (add-hook 'php-mode-hook (lambda () - (run-hooks 'siren-php-mode-hook)))) + (hideshowvis-enable))) (provide 'siren-php) ;;; siren-php.el ends here diff --git a/modules/siren-plantuml.el b/modules/siren-plantuml.el index 5be9100..c5f7a93 100644 --- a/modules/siren-plantuml.el +++ b/modules/siren-plantuml.el @@ -10,18 +10,16 @@ (use-package plantuml-mode :mode "\\.uml\\'" + :hook + (plantuml-mode . siren-plantuml-mode-setup) - :config - (defun siren-plantuml-mode-defaults () - (siren-prog-mode-defaults) - (setq tab-width 2) - (setq plantuml-jar-path "/usr/local/Cellar/plantuml/8048/plantuml.8048.jar") + :init + (defun siren-plantuml-mode-setup () + (siren-prog-mode-setup) + (setq tab-width 2 + plantuml-jar-path "/usr/local/opt/plantuml/libexec/plantuml.jar") (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode)) - - (setq siren-plantuml-mode-hook 'siren-plantuml-mode-defaults) - (add-hook 'plantuml-mode-hook (lambda () - (run-hooks 'siren-plantuml-mode-hook)))) + (highlight-indentation-current-column-mode))) (provide 'siren-plantuml) ;;; siren-plantuml.el ends here diff --git a/modules/siren-programming.el b/modules/siren-programming.el index 5bcfa1b..8b5dabf 100644 --- a/modules/siren-programming.el +++ b/modules/siren-programming.el @@ -13,26 +13,20 @@ (require 'siren-highlight-indentation) (require 'siren-highlight-symbol) -(defun siren-prog-mode-defaults () +(defun siren-prog-mode-setup () "Default coding hook, useful with any programming language." (setq fill-column 80) (linum-mode t) (flyspell-prog-mode) + (flycheck-mode +1) (fci-mode) (smartparens-mode +1) (highlight-symbol-mode) - (setq whitespace-action (quote (auto-cleanup))) + (setq whitespace-action '(auto-cleanup)) (visual-line-mode +1) (whitespace-mode +1)) -(setq siren-prog-mode-hook 'siren-prog-mode-defaults) -(add-hook 'prog-mode-hook (lambda () - (run-hooks 'siren-prog-mode-hook))) - -;; enable on-the-fly syntax checking -(if (fboundp 'global-flycheck-mode) - (global-flycheck-mode +1) - (add-hook 'prog-mode-hook 'flycheck-mode)) +(add-hook 'prog-mode-hook #'siren-prog-mode-setup) (provide 'siren-programming) ;;; siren-programming.el ends here diff --git a/modules/siren-rainbow.el b/modules/siren-rainbow.el index 210fd2c..f5bdefd 100644 --- a/modules/siren-rainbow.el +++ b/modules/siren-rainbow.el @@ -7,7 +7,8 @@ ;;; Code: (use-package rainbow-mode - :defer t) + :defer t + :diminish raindbox-mode) (provide 'siren-rainbow) ;;; siren-rainbow.el ends here diff --git a/modules/siren-rubocop.el b/modules/siren-rubocop.el index e6584ef..1985471 100644 --- a/modules/siren-rubocop.el +++ b/modules/siren-rubocop.el @@ -8,6 +8,15 @@ (use-package rubocop :defer t + :bind (:map rubocop-mode-map + ("C-c C-f" . siren-rubocop-autocorrect)) + + :hook + (rubocop-mode . siren-rubocop-mode-setup) + (after-save . siren-rubocop-autocorrect-hook) + + :init + (defun siren-rubocop-mode-setup ()) :config (defgroup siren-rubocop nil @@ -56,17 +65,7 @@ auto-correction is triggered." (defun siren-rubocop-autocorrect-hook () "Siren's Rubocop auto-correct hook." (if siren-rubocop-autocorrect-on-save - (siren-rubocop-autocorrect-p nil))) - - (defun siren-rubocop-mode-defaults () - (add-hook 'after-save-hook 'siren-rubocop-autocorrect-hook nil t) - - (let ((map rubocop-mode-map)) - (define-key map (kbd "C-c C-f") 'siren-rubocop-autocorrect))) - - (setq siren-rubocop-mode-hook 'siren-rubocop-mode-defaults) - (add-hook 'rubocop-mode-hook (lambda () - (run-hooks 'siren-rubocop-mode-hook)))) + (siren-rubocop-autocorrect-p nil)))) (provide 'siren-rubocop) ;;; siren-rubocop.el ends here diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index 55774ef..45aa84d 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -6,101 +6,108 @@ ;;; Code: +(require 'siren-company) +(require 'siren-folding) +(require 'siren-programming) +(require 'siren-smartparens) +(require 'siren-toggle-quotes) + +(require 'smartparens-ruby) + +(use-package rubocopfmt + :ensure nil ;; loaded from vendor + ) + (use-package inf-ruby :defer t) (use-package rspec-mode :defer t - :init - (eval-after-load 'rspec-mode '(rspec-install-snippets))) + :config + (rspec-install-snippets)) (use-package ruby-refactor :defer t) (use-package ruby-tools - :defer t) + :defer t + :bind (:map ruby-tools-mode-map + ("C-'" . toggle-quotes))) (use-package yari :defer t :init (define-key 'help-command (kbd "R") 'yari)) -(require 'siren-programming) -(require 'siren-company) -(require 'siren-smartparens) -(require 'siren-toggle-quotes) +(use-package ruby-mode + :ensure nil ;; loaded from emacs built-ins + :interpreter "ruby" + :mode + "Appraisals\\'" + "Berksfile\\'" + "Capfile\\'" + "Gemfile\\'" + "Guardfile\\'" + "Podfile\\'" + "Puppetfile\\'" + "Rakefile\\'" + "Thorfile\\'" + "Vagrantfile\\'" + "\\.cap\\'" + "\\.gemspec\\'" + "\\.jbuilder\\'" + "\\.podspec\\'" + "\\.rabl\\'" + "\\.rake\\'" + "\\.ru\\'" + "\\.thor\\'" + "\\.rb\\'" -(require 'smartparens-ruby) -(require 'rubocopfmt) -(require 'ruby-mode) + :bind (:map ruby-mode-map + ("C-j" . newline-and-indent) + ("RET" . newline-and-indent) + ("C-c C-h" . siren-toggle-hiding) + ("C-c C-l" . goto-line) + ("C-M-f" . sp-ruby-forward-sexp) + ("C-M-b" . sp-ruby-backward-sexp)) -;; Rake files are ruby, too, as are gemspecs, rackup files, and gemfiles. -(add-to-list 'auto-mode-alist '("\\.rake\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Rakefile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.gemspec\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.ru\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Gemfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Guardfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Capfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.cap\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.thor\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.rabl\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Thorfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Vagrantfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.jbuilder\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Podfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.podspec\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Puppetfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Berksfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Appraisals\\'" . ruby-mode)) + :hook + (ruby-mode . siren-ruby-mode-setup) -;; We never want to edit Rubinius bytecode -(add-to-list 'completion-ignored-extensions ".rbc") + :init + (defun siren-ruby-mode-setup () + (siren-prog-mode-setup) -;; Set up hs-mode (HideShow) for Ruby -(add-to-list 'hs-special-modes-alist - `(ruby-mode - ,(rx (or "def" "class" "module" "do" "if" "case")) ;; Block start - ,(rx (or "end")) ;; Block end - ,(rx (or "#" "=begin")) ;; Comment start - ruby-forward-sexp nil)) + (setq c-tab-always-indent nil + rspec-primary-source-dirs '("app") + ruby-align-chained-calls t + ruby-insert-encoding-magic-comment t + ruby-refactor-add-parens t + ruby-use-smie t + tab-width 2) -;; Make company-mode play nice -(push 'ruby-mode company-dabbrev-code-modes) + (rubocopfmt-mode) + (ruby-tools-mode +1) + (hs-minor-mode 1) + (company-mode +1) + (subword-mode +1) + (highlight-indentation-current-column-mode) + (hideshowvis-enable)) -(defun siren-ruby-mode-defaults () - (siren-prog-mode-defaults) + :config + ;; We never want to edit Rubinius bytecode + (add-to-list 'completion-ignored-extensions ".rbc") - (setq c-tab-always-indent nil - rspec-primary-source-dirs '("app") - ruby-align-chained-calls t - ruby-insert-encoding-magic-comment t - ruby-refactor-add-parens t - ruby-use-smie t - tab-width 2) + ;; Set up hs-mode (HideShow) for Ruby + (add-to-list 'hs-special-modes-alist + `(ruby-mode + ,(rx (or "def" "class" "module" "do" "if" "case")) ;; Block start + ,(rx (or "end")) ;; Block end + ,(rx (or "#" "=begin")) ;; Comment start + ruby-forward-sexp nil)) - (rubocopfmt-mode) - (ruby-tools-mode +1) - (hs-minor-mode 1) - (company-mode +1) - (subword-mode +1) - (highlight-indentation-current-column-mode) - (hideshowvis-enable) - - (let ((map ruby-mode-map)) - (define-key map (kbd "C-j") 'newline-and-indent) - (define-key map (kbd "RET") 'newline-and-indent) - (define-key map (kbd "C-c C-h") 'siren-toggle-hiding) - (define-key map (kbd "C-c C-l") 'goto-line) - (define-key map (kbd "C-M-f") 'sp-ruby-forward-sexp) - (define-key map (kbd "C-M-b") 'sp-ruby-backward-sexp)) - - (let ((map ruby-tools-mode-map)) - (define-key map (kbd "C-'") 'toggle-quotes))) - -(setq siren-ruby-mode-hook 'siren-ruby-mode-defaults) -(add-hook 'ruby-mode-hook (lambda () - (run-hooks 'siren-ruby-mode-hook))) + ;; Make company-mode play nice + (push 'ruby-mode company-dabbrev-code-modes)) (provide 'siren-ruby) ;;; siren-ruby.el ends here diff --git a/modules/siren-sass.el b/modules/siren-sass.el index 5351444..4b6ed14 100644 --- a/modules/siren-sass.el +++ b/modules/siren-sass.el @@ -10,16 +10,15 @@ (use-package sass-mode :mode "\\.sass\\'" + :hook (sass-mode . siren-sass-mode-setup) + + :init + (defun siren-sass-mode-setup () + (siren-css-mode-css)) :config ;; turn off annoying auto-compile on save - (setq sass-compile-at-save nil) - - (defun siren-sass-mode-defaults () - (siren-css-mode-defaults)) - - (setq siren-sass-mode-hook 'siren-sass-mode-defaults) - (add-hook 'sass-mode-hook (lambda () (run-hooks 'siren-sass-mode-hook)))) + (setq sass-compile-at-save nil)) (provide 'siren-sass) ;;; siren-sass.el ends here diff --git a/modules/siren-scss.el b/modules/siren-scss.el index 904f4ba..9f347c2 100644 --- a/modules/siren-scss.el +++ b/modules/siren-scss.el @@ -10,16 +10,14 @@ (use-package scss-mode :mode "\\.scss\\'" + :hook (scss-mode-hook . siren-scss-mode-setup) :config ;; turn off annoying auto-compile on save (setq scss-compile-at-save nil) - (defun siren-scss-mode-defaults () - (siren-css-mode-defaults)) - - (setq siren-scss-mode-hook 'siren-scss-mode-defaults) - (add-hook 'scss-mode-hook (lambda () (run-hooks 'siren-scss-mode-hook)))) + (defun siren-scss-mode-setup () + (siren-css-mode-setup))) (provide 'siren-scss) ;;; siren-scss.el ends here diff --git a/modules/siren-sh.el b/modules/siren-sh.el index 66a9f09..2ccc539 100644 --- a/modules/siren-sh.el +++ b/modules/siren-sh.el @@ -8,8 +8,8 @@ (require 'siren-programming) -(defun siren-sh-mode-defaults () - (siren-prog-mode-defaults) +(defun siren-sh-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2 sh-basic-offset 2 @@ -21,9 +21,7 @@ (highlight-indentation-current-column-mode) (define-key sh-mode-map (kbd "RET") 'newline-and-indent)) -(setq siren-sh-mode-hook 'siren-sh-mode-defaults) -(add-hook 'sh-mode-hook (lambda () - (run-hooks 'siren-sh-mode-hook))) +(add-hook 'sh-mode-hook #'siren-sh-mode-setup) (provide 'siren-sh) ;;; siren-sh.el ends here diff --git a/modules/siren-slim.el b/modules/siren-slim.el index 3d19dc5..02e0a88 100644 --- a/modules/siren-slim.el +++ b/modules/siren-slim.el @@ -8,10 +8,11 @@ (use-package slim-mode :mode "\\.slim\\'" + :hook (slim-mode-hook . siren-slim-mode-hook) - :config - (defun siren-slim-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-slim-mode-setup () + (siren-prog-mode-setup) (highlight-indentation-current-column-mode)) (setq siren-slim-mode-hook 'siren-slim-mode-defaults) diff --git a/modules/siren-smartparens.el b/modules/siren-smartparens.el index 7ef7eab..60aef44 100644 --- a/modules/siren-smartparens.el +++ b/modules/siren-smartparens.el @@ -9,15 +9,35 @@ (use-package smartparens :defer t :diminish smartparens-mode + :bind (:map smartparens-mode-map + ("C-M-t" . sp-transpose-sexp) + ("C-M-r" . siren-sp-transpose-sexp-reverse) + ("C-M-f" . sp-forward-sexp) + ("C-M-b" . sp-backward-sexp) + ("C-M-a" . sp-beginning-of-sexp) + ("C-M-e" . sp-end-of-sexp) + ("C-M-]" . sp-forward-slurp-sexp) + ("C-M-[" . sp-forward-barf-sexp) + ("C-M-." . sp-forward-slurp-sexp) + ("C-M-," . sp-forward-barf-sexp) + ("s->" . sp-forward-slurp-sexp) + ("s-<" . sp-forward-barf-sexp) + ("M-|" . sp-split-sexp) + ("M-t" . sp-backward-up-sexp) + ("C-" . sp-backward-kill-sexp) + ("C-" . sp-kill-sexp)) :init - (defalias 'rw 'sp-rewrap-sexp) - (show-smartparens-global-mode +1) + (defun siren-sp-transpose-sexp-reverse () + (sp-transpose-sexp -1)) :config ;; smart pairing for all (require 'smartparens-config) + (defalias 'rw 'sp-rewrap-sexp) + (show-smartparens-global-mode +1) + (setq sp-base-key-bindings 'paredit sp-autoskip-closing-pair 'always sp-hybrid-kill-entire-symbol nil) @@ -27,27 +47,7 @@ (sp-pair "{" nil :post-handlers '(((lambda (&rest _ignored) - (siren-smart-open-line-above)) "RET"))) - - ;; Keybindings - (let ((map smartparens-mode-map)) - (define-key map (kbd "C-M-t") 'sp-transpose-sexp) - (define-key map (kbd "C-M-r") (lambda () - (interactive) (sp-transpose-sexp -1))) - (define-key map (kbd "C-M-f") 'sp-forward-sexp) - (define-key map (kbd "C-M-b") 'sp-backward-sexp) - (define-key map (kbd "C-M-a") 'sp-beginning-of-sexp) - (define-key map (kbd "C-M-e") 'sp-end-of-sexp) - (define-key map (kbd "C-M-]") 'sp-forward-slurp-sexp) - (define-key map (kbd "C-M-[") 'sp-forward-barf-sexp) - (define-key map (kbd "C-M-.") 'sp-forward-slurp-sexp) - (define-key map (kbd "C-M-,") 'sp-forward-barf-sexp) - (define-key map (kbd "s->") 'sp-forward-slurp-sexp) - (define-key map (kbd "s-<") 'sp-forward-barf-sexp) - (define-key map (kbd "M-|") 'sp-split-sexp) - ;; (define-key map (kbd "M-t") 'sp-backward-up-sexp) - (define-key map (kbd "C-") 'sp-backward-kill-sexp) - (define-key map (kbd "C-") 'sp-kill-sexp))) + (siren-smart-open-line-above)) "RET")))) (provide 'siren-smartparens) ;;; siren-smartparens.el ends here diff --git a/modules/siren-thrift.el b/modules/siren-thrift.el index 3e6944a..ff827a4 100644 --- a/modules/siren-thrift.el +++ b/modules/siren-thrift.el @@ -10,18 +10,15 @@ (use-package thrift :mode "\\.thrift\\'" + :hook (thrift-mode-hook . siren-thrift-mode-setup) - :config - (defun siren-thrift-mode-defaults () - (siren-prog-mode-defaults) + :init + (defun siren-thrift-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-current-column-mode) - (subword-mode +1)) - - (setq siren-thrift-mode-hook 'siren-thrift-mode-defaults) - (add-hook 'thrift-mode-hook (lambda () - (run-hooks 'siren-thrift-mode-hook)))) + (subword-mode +1))) (provide 'siren-thrift) ;;; siren-thrift.el ends here diff --git a/modules/siren-treemacs.el b/modules/siren-treemacs.el index 86f091b..cf293cd 100644 --- a/modules/siren-treemacs.el +++ b/modules/siren-treemacs.el @@ -7,8 +7,18 @@ ;;; Code: (use-package treemacs - :ensure t :defer t + + :bind + ([f8] . treemacs-toggle) + ("M-0" . treemacs-select-window) + ("C-c 1" . treemacs-delete-other-windows) + ;; ("M-m ft" . treemacs-toggle) + ;; ("M-m fT" . treemacs) + ;; ("M-m fB" . treemacs-bookmark) + ;; ("M-m f C-t" . treemacs-find-file) + ;; ("M-m f M-t" . treemacs-find-tag) + :config (progn (use-package treemacs-evil @@ -28,28 +38,16 @@ treemacs-goto-tag-strategy 'refetch-index) (treemacs-follow-mode t) - (treemacs-filewatch-mode t)) - :bind - (:map global-map - ([f8] . treemacs-toggle) - ("M-0" . treemacs-select-window) - ("C-c 1" . treemacs-delete-other-windows) - ;; ("M-m ft" . treemacs-toggle) - ;; ("M-m fT" . treemacs) - ;; ("M-m fB" . treemacs-bookmark) - ;; ("M-m f C-t" . treemacs-find-file) - ;; ("M-m f M-t" . treemacs-find-tag) - ) - ) + (treemacs-filewatch-mode t))) (use-package treemacs-projectile :defer t - :ensure t + :bind + ("C-x C-p" . treemacs-projectile) + ("C-x C-p" . treemacs-projectile-toggle) + :config - (setq treemacs-header-function #'treemacs-projectile-create-header) - :bind (:map global-map - ("C-x C-p" . treemacs-projectile) - ("C-x C-p" . treemacs-projectile-toggle))) + (setq treemacs-header-function #'treemacs-projectile-create-header)) (provide 'siren-treemacs) ;;; siren-treemacs.el ends here diff --git a/modules/siren-web-mode.el b/modules/siren-web-mode.el index fcc5639..b9b2138 100644 --- a/modules/siren-web-mode.el +++ b/modules/siren-web-mode.el @@ -13,29 +13,32 @@ "\\.html\\'" "\\.html.erb\\'" - :config - (setq web-mode-code-indent-offset 2 - web-mode-css-indent-offset 2 - web-mode-markup-indent-offset 2 - web-mode-sql-indent-offset 2) + :bind (:map web-mode-map + ("C-j" . newline-and-indent) + ("C-c C-h" . siren-toggle-hiding)) - (defun siren-web-mode-mode-hook () + :hook + (web-mode-hook . siren-web-mode-setup) + + :init + (defun siren-web-mode-mode-setup () "Default tweaks for `web-mode'." (setq tab-width 2) - (siren-prog-mode-defaults) + (siren-prog-mode-setup) (company-mode +1) (fci-mode -1) (hideshowvis-enable) (hs-minor-mode +1) (highlight-indentation-current-column-mode) (highlight-indentation-set-offset 2) - (subword-mode +1) - (let ((map web-mode-map)) - (define-key map (kbd "C-j") 'newline-and-indent) - (define-key map (kbd "C-c C-h") 'siren-toggle-hiding))) + (subword-mode +1)) - (add-hook 'web-mode-hook 'siren-web-mode-mode-hook)) + :config + (setq web-mode-code-indent-offset 2 + web-mode-css-indent-offset 2 + web-mode-markup-indent-offset 2 + web-mode-sql-indent-offset 2)) (provide 'siren-web-mode) ;;; siren-web-mode.el ends here diff --git a/modules/siren-yaml.el b/modules/siren-yaml.el index d5b16ed..02beb45 100644 --- a/modules/siren-yaml.el +++ b/modules/siren-yaml.el @@ -10,19 +10,21 @@ (use-package yaml-mode :mode "\\.yml\\'" "\\.yaml\\'" - :config - (defun siren-yaml-mode-defaults () - (siren-prog-mode-defaults) + :bind (:map yaml-mode-map + ("RET" . newline-and-indent)) + + :hook + (yaml-mode . siren-yaml-mode-setup) + + :init + (defun siren-yaml-mode-setup () + (siren-prog-mode-setup) (setq tab-width 2 whitespace-action '(auto-cleanup)) (highlight-indentation-set-offset 2) (highlight-indentation-current-column-mode) - (subword-mode +1) - (define-key yaml-mode-map (kbd "RET") 'newline-and-indent)) - - (setq siren-yaml-mode-hook 'siren-yaml-mode-defaults) - (add-hook 'yaml-mode-hook (lambda () (run-hooks 'siren-yaml-mode-hook)))) + (subword-mode +1))) (provide 'siren-yaml) ;;; siren-yaml.el ends here From 7af120c5db944cf6bf97db07e3996289277d005b Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Fri, 20 Apr 2018 16:40:56 +0100 Subject: [PATCH 02/38] Attempt to fix issue with undo-tree --- modules/siren-undo-tree.el | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/siren-undo-tree.el b/modules/siren-undo-tree.el index 9083bc2..d25d69c 100644 --- a/modules/siren-undo-tree.el +++ b/modules/siren-undo-tree.el @@ -7,6 +7,7 @@ ;;; Code: (use-package undo-tree + :demand :bind ("C-x u" . undo-tree-visualize) ("M--" . undo-tree-undo) @@ -17,10 +18,8 @@ :diminish undo-tree-mode - :init - (global-undo-tree-mode) - :config + (global-undo-tree-mode) ;; autosave the undo-tree history (setq undo-tree-history-directory-alist `((".*" . ,temporary-file-directory)) undo-tree-auto-save-history t)) From 36c0bfcf8cd2cd4904166ba6ed6b8050fe809b40 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Mon, 23 Apr 2018 23:52:36 +0100 Subject: [PATCH 03/38] Sort package-selected-packages list --- custom.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom.el b/custom.el index 82e84da..d4f8010 100644 --- a/custom.el +++ b/custom.el @@ -7,7 +7,7 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (which-key ace-ack ag anti-anywhere anzu-avy bright-bright browse browse-buffer coffee-column company-company completing-cursors dash-descbinds describe-diff diminish-direx-dockerfile dumb-dup-ecb editorconfig-eldoc-eslintd-evil exec-expand feature file-fill fix-flycheck flycheck flycheck-from full-gh git-git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido-imenu indent-indentation indicator inf-inflection json jump-kill line link-lint linum-lua magit-magit markdown-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-mode-mode mode-modes-move+ move-multiple open-package package-package-path phi-php plantuml-projectile-projectile pulls-quotes rainbow-read refactor region-relative rename-ring rspec-ruby-ruby ruby-sass scss-search shell shift smart-smart smartparens smex-string swoop-symbol-theme theme thrift-timemachine-toggle tools twilight-twilight use-vertical-web window-window-yaml-yari yasnippet zoom))) + (ace-ack ag-anti anywhere anzu-avy bright-bright browse-browse buffer coffee-column company-company completing-cursors dash-descbinds describe-diff diminish-direx dockerfile-dumb-dup ecb-editorconfig-eldoc eslintd-evil-exec-expand feature-file fill fix-flycheck flycheck-flycheck from full-gh git-git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido imenu-indent-indentation indicator-inf inflection json-jump key kill-line link lint-linum lua-magit magit-markdown mode-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-mode-mode modes-move-move+ multiple-open package-package package-path-phi php-plantuml projectile-projectile-pulls quotes-rainbow read-refactor region relative-rename ring-rspec ruby-ruby-ruby sass-scss search-shell shift smart smart-smartparens smex string-swoop symbol-theme-theme thrift timemachine-toggle-tools twilight twilight-use vertical-web-which window-window-yaml-yari yasnippet zoom))) '(plantuml-jar-path "/usr/local/Cellar/plantuml/8048/plantuml.8048.jar") '(siren-rubocop-autocorrect-on-save nil)) (custom-set-faces From ba583e21fce59a3e0695b28ba3c2cd1c28fd8494 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Tue, 24 Apr 2018 00:10:11 +0100 Subject: [PATCH 04/38] Fix siren-go module It would fail to load anything. --- modules/siren-go.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/siren-go.el b/modules/siren-go.el index d1d7fd8..2bbf0d4 100644 --- a/modules/siren-go.el +++ b/modules/siren-go.el @@ -21,9 +21,7 @@ ("C-c b" . go-run) ("C-c d" . godef-jump) ("C-c C-j" . avy-goto-word-or-subword-1) - ("C-h f" . godoc-at-point) - :map help-command - ("G" . godoc)) + ("C-h f" . godoc-at-point)) :hook (go-mode . siren-go-mode-setup) @@ -72,6 +70,8 @@ (when (memq window-system '(mac ns)) (exec-path-from-shell-copy-env "GOPATH")) + (define-key 'help-command (kbd "G") 'godoc) + ;; Ignore go test -c output files (add-to-list 'completion-ignored-extensions ".test")) From a158d0fade40c3b8bb1b6200949732ef4bc0fdfb Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Tue, 24 Apr 2018 00:11:41 +0100 Subject: [PATCH 05/38] Fix loading order for some modules --- modules/siren-smex.el | 4 +--- modules/siren-volatile-highlights.el | 3 ++- modules/siren-yasnippet.el | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/siren-smex.el b/modules/siren-smex.el index fdf924f..f67f4d5 100644 --- a/modules/siren-smex.el +++ b/modules/siren-smex.el @@ -14,10 +14,8 @@ ("C-c C-m" . smex) ("C-c C-c M-x" . execute-extended-command) - :init - (setq smex-save-file (expand-file-name ".smex-items" siren-savefile-dir)) - :config + (setq smex-save-file (expand-file-name ".smex-items" siren-savefile-dir)) (smex-initialize)) (provide 'siren-smex) diff --git a/modules/siren-volatile-highlights.el b/modules/siren-volatile-highlights.el index 9fef853..14071cc 100644 --- a/modules/siren-volatile-highlights.el +++ b/modules/siren-volatile-highlights.el @@ -7,8 +7,9 @@ ;;; Code: (use-package volatile-highlights-mode + :demand :diminish volatile-highlights-mode - :init + :config (volatile-highlights-mode t)) (provide 'siren-volatile-highlights) diff --git a/modules/siren-yasnippet.el b/modules/siren-yasnippet.el index 4b0f712..3fb1e00 100644 --- a/modules/siren-yasnippet.el +++ b/modules/siren-yasnippet.el @@ -9,8 +9,9 @@ (use-package yasnippet-snippets) (use-package yasnippet + :demand :diminish yas-minor-mode - :init + :config (yas-global-mode t)) (provide 'siren-yasnippet) From 763d5d78cb5dbc8c38108b313b30e5b4c3bcae06 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 10 May 2018 14:50:17 +0100 Subject: [PATCH 06/38] Swap neotree keybindings around back to their original state --- modules/siren-neotree.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/siren-neotree.el b/modules/siren-neotree.el index 8f5854f..9b165f6 100644 --- a/modules/siren-neotree.el +++ b/modules/siren-neotree.el @@ -11,8 +11,8 @@ (use-package neotree :bind - ("C-x p" . neotree-toggle) - ("C-x C-p" . neotree-project-dir) + ("C-x C-p" . neotree-toggle) + ("C-x p" . neotree-project-dir) :init (defun neotree-project-dir () From e523eca5c0c05066b0898effc613bcf24f99fd8f Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 10 May 2018 14:50:43 +0100 Subject: [PATCH 07/38] Use rjsx-mode for ReactJS instead of web-mode --- modules/siren-jsx.el | 19 +++++++++++++++++-- modules/siren-prettier-js.el | 16 ++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 modules/siren-prettier-js.el diff --git a/modules/siren-jsx.el b/modules/siren-jsx.el index 26599ec..548ad1c 100644 --- a/modules/siren-jsx.el +++ b/modules/siren-jsx.el @@ -6,8 +6,23 @@ ;;; Code: -(require 'siren-web-mode) -(add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) +(require 'siren-prettier-js) + +(use-package rjsx-mode + :mode "components\\/.*\\.js\\'" + + :hook (rjsx-mode . siren-rjsx-mode-setup) + + :init + (defun siren-rjsx-mode-setup () + (siren-prog-mode-setup) + + (prettier-js-mode) + (company-mode +1) + (subword-mode +1) + (hs-minor-mode 1) + (highlight-indentation-current-column-mode) + (hideshowvis-enable))) (provide 'siren-jsx) ;;; siren-jsx.el ends here diff --git a/modules/siren-prettier-js.el b/modules/siren-prettier-js.el new file mode 100644 index 0000000..453062a --- /dev/null +++ b/modules/siren-prettier-js.el @@ -0,0 +1,16 @@ +;;; siren-prettier-js.el --- jimeh's Emacs Siren: prettier-js configuration. + +;;; Commentary: + +;; Basic configuration for prettier-js package + +;;; Code: + +(use-package prettier-js + :hook (prettier-js-mode . siren-prettier-js-mode-setup) + + :init + (defun siren-prettier-js-mode-setup ())) + +(provide 'siren-prettier-js) +;;; siren-prettier-js.el ends here From 3d8961a031905f99337ce3b085a0c84ffc3f57ed Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 10 May 2018 14:51:01 +0100 Subject: [PATCH 08/38] Switch js-mode to use prettier-js instead of eslint for formatting --- modules/siren-js.el | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/modules/siren-js.el b/modules/siren-js.el index 28b8434..df3a540 100644 --- a/modules/siren-js.el +++ b/modules/siren-js.el @@ -6,8 +6,7 @@ ;;; Code: -(require 'siren-eslintd-fix) -(require 'siren-flycheck) +(require 'siren-prettier-js) (require 'siren-folding) (require 'siren-programming) @@ -22,11 +21,8 @@ indent-level width tab-width width)) - (setq flycheck-checker 'javascript-eslint - flycheck-javascript-eslint-executable "eslint_d") - (siren-prog-mode-setup) - (eslintd-fix-mode) + (prettier-js-mode) (company-mode +1) (subword-mode +1) (hs-minor-mode 1) From 53b1b207b767ca46d05feab160eaa8c74d97d3d8 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 10 May 2018 14:52:53 +0100 Subject: [PATCH 09/38] Update package-selected-packages custom var --- custom.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom.el b/custom.el index d4f8010..20a6463 100644 --- a/custom.el +++ b/custom.el @@ -7,7 +7,7 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (ace-ack ag-anti anywhere anzu-avy bright-bright browse-browse buffer coffee-column company-company completing-cursors dash-descbinds describe-diff diminish-direx dockerfile-dumb-dup ecb-editorconfig-eldoc eslintd-evil-exec-expand feature-file fill fix-flycheck flycheck-flycheck from full-gh git-git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido imenu-indent-indentation indicator-inf inflection json-jump key kill-line link lint-linum lua-magit magit-markdown mode-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-mode-mode modes-move-move+ multiple-open package-package package-path-phi php-plantuml projectile-projectile-pulls quotes-rainbow read-refactor region relative-rename ring-rspec ruby-ruby-ruby sass-scss search-shell shift smart smart-smartparens smex string-swoop symbol-theme-theme thrift timemachine-toggle-tools twilight twilight-use vertical-web-which window-window-yaml-yari yasnippet zoom))) + (ace-ack ag-anti anywhere-anzu avy-bright bright browse-browse buffer-coffee column-company company completing-cursors dash-descbinds describe-diff diminish-direx dockerfile-dumb dup-ecb editorconfig-eldoc-eslintd evil-exec-expand feature-file-fill-fix flycheck-flycheck flycheck from-full gh-git git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido imenu-indent indentation-indicator inf-inflection-js json-jump key kill-line link lint-linum lua magit-magit markdown-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-modes-move move-multiple-open+ package-package package-path phi-php-plantuml prettier-projectile projectile-pulls-quotes rainbow-read refactor-region relative rename-ring rjsx-rspec ruby-ruby-ruby sass-scss search-shell shift smart smart-smartparens smex string-swoop symbol-theme-theme thrift timemachine-toggle-tools twilight twilight-use vertical-web-which window-window-yaml-yari yasnippet zoom))) '(plantuml-jar-path "/usr/local/Cellar/plantuml/8048/plantuml.8048.jar") '(siren-rubocop-autocorrect-on-save nil)) (custom-set-faces From 0b945714debb71bb7cf25f35996af288feb3d5f2 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Mon, 14 May 2018 01:30:45 +0100 Subject: [PATCH 10/38] Add module for rust programming language --- core/siren-modules.el | 1 + custom.el | 2 +- modules/siren-rust.el | 62 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 modules/siren-rust.el diff --git a/core/siren-modules.el b/core/siren-modules.el index 2d4ef92..2d481a3 100644 --- a/core/siren-modules.el +++ b/core/siren-modules.el @@ -96,6 +96,7 @@ (require 'siren-php) (require 'siren-plantuml) (require 'siren-ruby) +(require 'siren-rust) (require 'siren-sass) (require 'siren-scss) (require 'siren-sh) diff --git a/custom.el b/custom.el index 20a6463..b32d69f 100644 --- a/custom.el +++ b/custom.el @@ -7,7 +7,7 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (ace-ack ag-anti anywhere-anzu avy-bright bright browse-browse buffer-coffee column-company company completing-cursors dash-descbinds describe-diff diminish-direx dockerfile-dumb dup-ecb editorconfig-eldoc-eslintd evil-exec-expand feature-file-fill-fix flycheck-flycheck flycheck from-full gh-git git gitconfig-github github-gitignore go-go go-go go-go gometalinter-gotest gtags-guides guru-haml helm-helm helm-helm helm-helm helm-helm highlight-highlight highlight-hl ido-ido imenu-indent indentation-indicator inf-inflection-js json-jump key kill-line link lint-linum lua magit-magit markdown-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode mode mode-mode mode mode-modes-move move-multiple-open+ package-package package-path phi-php-plantuml prettier-projectile projectile-pulls-quotes rainbow-read refactor-region relative rename-ring rjsx-rspec ruby-ruby-ruby sass-scss search-shell shift smart smart-smartparens smex string-swoop symbol-theme-theme thrift timemachine-toggle-tools twilight twilight-use vertical-web-which window-window-yaml-yari yasnippet zoom))) + (ace-ack ag anti anywhere-anzu avy-bright bright-browse browse-buffer cargo-cargo coffee-column company-company completing cursors-dash descbinds-describe diff-diminish direx dockerfile-dumb dup-ecb editorconfig-eldoc eslintd-evil exec-expand feature-file fill-fix-flycheck flycheck-flycheck-flycheck from-full-gh-git git-gitconfig github github-gitignore go-go go go-go go-gometalinter gotest-gtags guides-guru haml-helm helm-helm helm-helm helm-helm helm-highlight highlight-highlight hl-ido ido-imenu indent-indentation indicator-inf inflection-js json-jump key-kill line-link-lint linum-lua magit magit-markdown mode mode-mode mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode modes move-move multiple open-package-package package-path-phi+ php-plantuml playground-prettier projectile-projectile-pulls quotes-racer rainbow-read-refactor region-relative rename-ring rjsx rspec-ruby ruby-ruby rust-rust-rust sass-scss search-shell shift smart smart-smartparens smex string-swoop symbol-theme-theme thrift timemachine-toggle-tools twilight twilight-use vertical-web-which window-window-yaml-yari yasnippet zoom))) '(plantuml-jar-path "/usr/local/Cellar/plantuml/8048/plantuml.8048.jar") '(siren-rubocop-autocorrect-on-save nil)) (custom-set-faces diff --git a/modules/siren-rust.el b/modules/siren-rust.el new file mode 100644 index 0000000..0ef1a4c --- /dev/null +++ b/modules/siren-rust.el @@ -0,0 +1,62 @@ +;;; siren-rust.el --- jimeh's Emacs Siren: rust-mode configuration. + +;;; Commentary: + +;; Basic configuration for rust-mode. + +;;; Code: + +(require 'siren-flycheck) +(require 'siren-folding) +(require 'siren-programming) + +(use-package rust-mode + :mode "\\.rs\\'" + :interpreter "rust" + :commands rust-mode + :bind (:map rust-mode-map + ("RET" . newline-and-indent)) + + :hook + (rust-mode . siren-rust-mode-setup) + + :init + (defun siren-rust-mode-setup () + (siren-prog-mode-setup) + + (setq rust-format-on-save t) + + (hs-minor-mode 1) + (hideshowvis-enable) + (highlight-indentation-current-column-mode) + (subword-mode +1))) + +(use-package cargo + :hook (rust-mode . cargo-minor-mode)) + +(use-package flycheck-rust + :requires rust-mode flycheck + :commands flycheck-rust-setup + :init + (with-eval-after-load 'rust-mode + (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))) + +(use-package racer + :requires rust-mode company + :commands racer-mode + :bind (:map rust-mode-map + ("TAB" . company-indent-or-complete-common)) + + :hook + (rust-mode . racer-mode) + (racer-mode . eldoc-mode) + (racer-mode . siren-racer-mode-setup) + + :config + (defun siren-racer-mode-setup () + (setq company-tooltip-align-annotations t))) + +(use-package rust-playground) + +(provide 'siren-rust) +;;; siren-rust.el ends here From cb609eab8d1ff7df52d212eaa02ddc786ceffbee Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Mon, 14 May 2018 01:31:10 +0100 Subject: [PATCH 11/38] Enable hideshowvis mode within go-mode --- modules/siren-go.el | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/siren-go.el b/modules/siren-go.el index 2bbf0d4..20f68ba 100644 --- a/modules/siren-go.el +++ b/modules/siren-go.el @@ -47,6 +47,7 @@ ;; enable hide/show (hs-minor-mode 1) + (hideshowvis-enable) ;; go-guru (go-guru-hl-identifier-mode 1) From 39368f4379fd1b72b0a1012c80c89e280066e547 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Mon, 14 May 2018 01:31:54 +0100 Subject: [PATCH 12/38] Minor tweaks to siren-go module --- modules/siren-go.el | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/siren-go.el b/modules/siren-go.el index 20f68ba..2694e51 100644 --- a/modules/siren-go.el +++ b/modules/siren-go.el @@ -6,8 +6,9 @@ ;;; Code: -(require 'siren-programming) (require 'siren-flycheck) +(require 'siren-folding) +(require 'siren-programming) (use-package go-mode :mode "\\.go\\'" @@ -89,13 +90,15 @@ (setq go-projectile-switch-gopath 'never)) (use-package flycheck-gometalinter - :requires flycheck - :hook (flycheck-mode . flycheck-gometalinter-setup) - + :requires go-mode flycheck + :commands flycheck-gometalinter-setup :init (setq flycheck-gometalinter-fast t flycheck-gometalinter-tests t - flycheck-gometalinter-vendor t)) + flycheck-gometalinter-vendor t) + + (with-eval-after-load 'go-mode + (add-hook 'flycheck-mode-hook #'flycheck-gometalinter-setup))) (provide 'siren-go) ;;; siren-go.el ends here From 93df106f3055ee73e41dd369eae1f4d4f5714461 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Mon, 14 May 2018 01:35:06 +0100 Subject: [PATCH 13/38] Rename siren-go module to siren-golang --- core/siren-modules.el | 2 +- modules/{siren-go.el => siren-golang.el} | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename modules/{siren-go.el => siren-golang.el} (95%) diff --git a/core/siren-modules.el b/core/siren-modules.el index 2d481a3..831b215 100644 --- a/core/siren-modules.el +++ b/core/siren-modules.el @@ -85,7 +85,7 @@ (require 'siren-emacs-lisp) (require 'siren-gitconfig) (require 'siren-gitignore) -(require 'siren-go) +(require 'siren-golang) (require 'siren-haml) (require 'siren-js) (require 'siren-json) diff --git a/modules/siren-go.el b/modules/siren-golang.el similarity index 95% rename from modules/siren-go.el rename to modules/siren-golang.el index 2694e51..0428550 100644 --- a/modules/siren-go.el +++ b/modules/siren-golang.el @@ -1,4 +1,4 @@ -;;; siren-go.el --- jimeh's Emacs Siren: go-mode configuration. +;;; siren-golang.el --- jimeh's Emacs Siren: go-mode configuration. ;;; Commentary: @@ -100,5 +100,5 @@ (with-eval-after-load 'go-mode (add-hook 'flycheck-mode-hook #'flycheck-gometalinter-setup))) -(provide 'siren-go) -;;; siren-go.el ends here +(provide 'siren-golang) +;;; siren-golang.el ends here From 56eb8b30c4e65a0d68e7cef8c76414af9c9ef2f2 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Tue, 15 May 2018 20:01:56 +0100 Subject: [PATCH 14/38] Fix flycheck-rust setup --- modules/siren-rust.el | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/modules/siren-rust.el b/modules/siren-rust.el index 0ef1a4c..ae63f0b 100644 --- a/modules/siren-rust.el +++ b/modules/siren-rust.el @@ -35,11 +35,8 @@ :hook (rust-mode . cargo-minor-mode)) (use-package flycheck-rust - :requires rust-mode flycheck - :commands flycheck-rust-setup - :init - (with-eval-after-load 'rust-mode - (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))) + :after rust-mode + :hook (flycheck-mode . flycheck-rust-setup)) (use-package racer :requires rust-mode company From f762ac03d46a45722a1014ccc6863d5603674899 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Wed, 16 May 2018 13:42:24 +0100 Subject: [PATCH 15/38] Add go-playground package to siren-golang module --- modules/siren-golang.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index 0428550..a596611 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -100,5 +100,8 @@ (with-eval-after-load 'go-mode (add-hook 'flycheck-mode-hook #'flycheck-gometalinter-setup))) +(use-package go-playground + :commands go-playground) + (provide 'siren-golang) ;;; siren-golang.el ends here From 6f737fbe5c17a480cc3c8140db127737660f74a5 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 19 May 2018 14:26:31 +0100 Subject: [PATCH 16/38] Sort list of vendored dependencies --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a87553e..11d3461 100644 --- a/Makefile +++ b/Makefile @@ -11,15 +11,15 @@ backup-elpa: .PHONY: vendor vendor: \ - vendor/escreen.el \ vendor/dired+.el \ + vendor/escreen.el \ vendor/hideshowvis.el \ vendor/linum+.el .PHONY: update_vendor update_vendor: \ - update_vendor/escreen.el \ update_vendor/dired+.el \ + update_vendor/escreen.el \ update_vendor/hideshowvis.el \ update_vendor/linum+.el @@ -44,7 +44,7 @@ endef # Specify vendor targets # -$(eval $(call vendored,vendor/escreen.el,"https://github.com/renard/escreen-el/raw/master/escreen.el")) $(eval $(call vendored,vendor/dired+.el,"https://www.emacswiki.org/emacs/download/dired%2b.el")) +$(eval $(call vendored,vendor/escreen.el,"https://github.com/renard/escreen-el/raw/master/escreen.el")) $(eval $(call vendored,vendor/hideshowvis.el,"https://www.emacswiki.org/emacs/download/hideshowvis.el")) $(eval $(call vendored,vendor/linum+.el,"http://www.emacswiki.org/emacs/download/linum%2b.el")) From 777cd88a04228ecc954c777eb4566773a2d9e7af Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 19 May 2018 15:11:01 +0100 Subject: [PATCH 17/38] Update emacs package related module --- core/siren-modules.el | 2 +- modules/siren-package-lint.el | 20 -------------------- modules/siren-packages.el | 23 +++++++++++++++++++++++ 3 files changed, 24 insertions(+), 21 deletions(-) delete mode 100644 modules/siren-package-lint.el create mode 100644 modules/siren-packages.el diff --git a/core/siren-modules.el b/core/siren-modules.el index 831b215..ab27cac 100644 --- a/core/siren-modules.el +++ b/core/siren-modules.el @@ -43,7 +43,7 @@ (require 'siren-move-beginning-of-line) (require 'siren-multiple-cursors) (require 'siren-org-mode) -(require 'siren-package-lint) +(require 'siren-packages) (require 'siren-rainbow) (require 'siren-scroll-half-screen) (require 'siren-smartparens) diff --git a/modules/siren-package-lint.el b/modules/siren-package-lint.el deleted file mode 100644 index 40e9b69..0000000 --- a/modules/siren-package-lint.el +++ /dev/null @@ -1,20 +0,0 @@ -;;; siren-package-lint.el --- jimeh's Emacs Siren: avy configuration. - -;;; Commentary: - -;; Basic configuration for package-lint. - -;;; Code: - -(require 'siren-flycheck) - -(use-package package-lint - :defer t) - -(use-package flycheck-package - :defer t - :config - (flycheck-package-setup)) - -(provide 'siren-package-lint) -;;; siren-package-lint.el ends here diff --git a/modules/siren-packages.el b/modules/siren-packages.el new file mode 100644 index 0000000..ec693b9 --- /dev/null +++ b/modules/siren-packages.el @@ -0,0 +1,23 @@ +;;; siren-packages.el --- jimeh's Emacs Siren: avy configuration. + +;;; Commentary: + +;; Basic configuration for packages. + +;;; Code: + +(require 'siren-flycheck) + +(use-package package-lint + :defer t) + +(use-package package-build + :defer t) + +(use-package flycheck-package + :defer t + :config + (flycheck-package-setup)) + +(provide 'siren-packages) +;;; siren-packages.el ends here From c9cd357a9301ff1659f3fcabb6a6ac8b3436c79c Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 19 May 2018 15:12:13 +0100 Subject: [PATCH 18/38] Update vendored rubocopfmt package --- Makefile | 7 +- vendor/rubocopfmt.el | 225 +++++++++++++++++++++++++++++++++---------- 2 files changed, 178 insertions(+), 54 deletions(-) diff --git a/Makefile b/Makefile index 11d3461..bc27f73 100644 --- a/Makefile +++ b/Makefile @@ -14,14 +14,16 @@ vendor: \ vendor/dired+.el \ vendor/escreen.el \ vendor/hideshowvis.el \ - vendor/linum+.el + vendor/linum+.el \ + vendor/rubocopfmt.el .PHONY: update_vendor update_vendor: \ update_vendor/dired+.el \ update_vendor/escreen.el \ update_vendor/hideshowvis.el \ - update_vendor/linum+.el + update_vendor/linum+.el \ + update_vendor/rubocopfmt.el # # Internals @@ -48,3 +50,4 @@ $(eval $(call vendored,vendor/dired+.el,"https://www.emacswiki.org/emacs/downloa $(eval $(call vendored,vendor/escreen.el,"https://github.com/renard/escreen-el/raw/master/escreen.el")) $(eval $(call vendored,vendor/hideshowvis.el,"https://www.emacswiki.org/emacs/download/hideshowvis.el")) $(eval $(call vendored,vendor/linum+.el,"http://www.emacswiki.org/emacs/download/linum%2b.el")) +$(eval $(call vendored,vendor/rubocopfmt.el,"https://github.com/jimeh/rubocopfmt.el/raw/master/rubocopfmt.el")) diff --git a/vendor/rubocopfmt.el b/vendor/rubocopfmt.el index 37ac1f2..ba4c200 100644 --- a/vendor/rubocopfmt.el +++ b/vendor/rubocopfmt.el @@ -1,75 +1,86 @@ -;;; rubocopfmt.el --- Format ruby code with rubocopfmt. +;;; rubocopfmt.el --- Format ruby code with rubocop -;; Copyright (C) 2017 Jim Myhrberg - -;; Author: Jim Myhrberg -;; Keywords: ruby rubocop rubocopfmt -;; URL: https://github.com/jimeh/rubocopfmt-emacs ;; Version: 0.1.0 +;; Keywords: convenience wp edit ruby rubocop +;; URL: https://github.com/jimeh/rubocopfmt.el +;; Author: Jim Myhrberg ;; This file is not part of GNU Emacs. ;;; License: ;; -;; Permission is hereby granted, free of charge, to any person obtaining a -;; copy of this software and associated documentation files (the "Software"), -;; to deal in the Software without restriction, including without limitation -;; the rights to use, copy, modify, merge, publish, distribute, sublicense, -;; and/or sell copies of the Software, and to permit persons to whom the -;; Software is furnished to do so, subject to the following conditions: +;; Copyright (c) 2014 The go-mode Authors. All rights reserved. +;; Portions Copyright (c) 2018 Jim Myhrberg. ;; -;; The above copyright notice and this permission notice shall be included in -;; all copies or substantial portions of the Software. +;; Redistribution and use in source and binary forms, with or without +;; modification, are permitted provided that the following conditions are +;; met: ;; -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -;; DEALINGS IN THE SOFTWARE. +;; * Redistributions of source code must retain the above copyright +;; notice, this list of conditions and the following disclaimer. +;; * Redistributions in binary form must reproduce the above +;; copyright notice, this list of conditions and the following disclaimer +;; in the documentation and/or other materials provided with the +;; distribution. +;; * Neither the name of the copyright holder nor the names of its +;; contributors may be used to endorse or promote products derived from +;; this software without specific prior written permission. +;; +;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; Commentary: ;; -;; The core parts of rubocopfmt.el are borrowed from the gofmt related parts of -;; go-mode.el 1.4.0. So most credit goes to The Go Authors. +;; This library formats Ruby code by using rubocop and it's --auto-correct +;; option. ;;; Code: (defgroup rubocopfmt nil - "Minor mode for formatting Ruby buffers with rubocopfmt." + "Minor mode for formatting Ruby buffers with rubocop." + :group 'languages :link '(url-link "https://github.com/jimeh/rubocopfmt.el")) -(defcustom rubocopfmt-command "rubocopfmt" - "The 'rubocopfmt' command." +(defcustom rubocopfmt-rubocop-command "rubocop" + "Name of rubocop executable." :type 'string :group 'rubocopfmt) -(defun rubocopfmt () - "Format the current buffer with rubocopfmt." - (interactive) - (let ((patchbuf (get-buffer-create "*Rubocopfmt patch*")) - (coding-system-for-read 'utf-8) - (coding-system-for-write 'utf-8) - (rubocopfmt-args - (list "--diff-format" "rcs" - "--interactive" - "--src-file" (file-truename buffer-file-name)))) +(defcustom rubocopfmt-disabled-cops + '("Lint/Debugger" ; Don't remove debugger calls. + "Lint/UnusedBlockArgument" ; Don't rename unused block arguments. + "Lint/UnusedMethodArgument" ; Don't rename unused method arguments. + "Style/EmptyMethod" ; Don't remove blank line in empty methods. + ) + "A list of RuboCop cops to disable during auto-correction. +These cops are disabled because they cause confusion during +interactive use within a text-editor." + :type '(repeat string) + :group 'rubocopfmt) + +(defcustom rubocopfmt-show-errors 'buffer + "Where to display rubocopfmt error output. +It can either be displayed in its own buffer, in the echo area, +or not at all. + +Please note that Emacs outputs to the echo area when writing +files and will overwrite rubocopfmt's echo output if used from +inside a `before-save-hook'." + :type '(choice + (const :tag "Own buffer" buffer) + (const :tag "Echo area" echo) + (const :tag "None" nil)) + :group 'rubocopfmt) - (unwind-protect - (save-restriction - (widen) - (with-current-buffer patchbuf (erase-buffer)) - (message "Calling rubocopfmt: %s %s" - rubocopfmt-command rubocopfmt-args) - (apply #'call-process-region (point-min) (point-max) - rubocopfmt-command nil patchbuf nil rubocopfmt-args) - (if (= (buffer-size patchbuf) 0) - (message "Buffer is already rubocopfmted") - (progn - (rubocopfmt--apply-rcs-patch patchbuf) - (message "Applied rubocopfmt"))))) - (kill-buffer patchbuf))) (defun rubocopfmt--apply-rcs-patch (patch-buffer) "Apply an RCS-formatted diff from PATCH-BUFFER to the current buffer." @@ -90,7 +101,7 @@ (goto-char (point-min)) (while (not (eobp)) (unless (looking-at "^\\([ad]\\)\\([0-9]+\\) \\([0-9]+\\)") - (error "invalid rcs patch or internal error in rubocopfmt--apply-rcs-patch")) + (error "Invalid rcs patch or internal error in rubocopfmt--apply-rcs-patch")) (forward-line) (let ((action (match-string 1)) (from (string-to-number (match-string 2))) @@ -111,7 +122,7 @@ (cl-incf line-offset len) (rubocopfmt--delete-whole-line len))) (t - (error "invalid rcs patch or internal error in rubocopfmt--apply-rcs-patch"))))))))) + (error "Invalid rcs patch or internal error in rubocopfmt--apply-rcs-patch"))))))))) (defun rubocopfmt--delete-whole-line (&optional arg) "Delete the current line without putting it in the `kill-ring'. @@ -140,9 +151,119 @@ function." (progn (forward-visible-line arg) (point)))))) (defun rubocopfmt--goto-line (line) + "Move cursor to LINE." (goto-char (point-min)) (forward-line (1- line))) +(defun rubocopfmt--bundled-path-p (directory) + "Check if there is a Gemfile in DIRECTORY, or any parent of DIRECTORY." + (rubocopfmt--file-search-upward directory "Gemfile")) + +(defun rubocopfmt--file-search-upward (directory file) + "Search DIRECTORY for FILE and return its full path if found, or NIL if not. + +If FILE is not found in DIRECTORY, the parent of DIRECTORY will be searched." + (let ((parent-dir (file-truename (concat (file-name-directory directory) "../"))) + (current-path (if (not (string= (substring directory (- (length directory) 1)) "/")) + (concat directory "/" file) + (concat directory file)))) + + (if (file-exists-p current-path) + current-path + (when (and (not (string= (file-truename directory) parent-dir)) + (< (length parent-dir) (length (file-truename directory)))) + (rubocopfmt--file-search-upward parent-dir file))))) + +(defun rubocopfmt--parse-result (resultbuf tmpfile) + "Parse Rubocop result in RESULTBUF and write corrections to TMPFILE." + (let ((split 0)) + (with-current-buffer resultbuf + (goto-char (point-min)) + ;; Only find the separator when RuboCop has printed complaints. + (setq split (search-forward "\n====================\n" nil t)) + + ;; If no RuboCop complaints were printed, we need to find the separator at + ;; the beginning of the buffer. This separation helps prevent false + ;; positive separator matches. + (unless split + (setq split (search-forward "====================\n" nil t))) + + (if split + (when (> split 22) + (goto-char (point-min)) + (when (search-forward "[Corrected]" split t) + (write-region split (point-max) tmpfile) + t)) + (rubocopfmt--process-errors resultbuf) + nil)))) + +(defun rubocopfmt--process-errors (resultbuf) + "Display contents of RESULTBUF as errors." + (if (eq rubocopfmt-show-errors 'echo) + (with-current-buffer resultbuf + (message (buffer-string)))) + + (if (eq rubocopfmt-show-errors 'buffer) + (let ((errbuf (get-buffer-create "*Rubocopfmt Errors*"))) + (with-current-buffer errbuf + (erase-buffer) + (goto-char (point-min)) + (insert-buffer-substring resultbuf)) + (display-buffer errbuf)))) + + +;;;###autoload +(defun rubocopfmt () + "Format the current buffer with rubocop." + (interactive) + (let* ((coding-system-for-read 'utf-8) + (coding-system-for-write 'utf-8) + (tmpfile (make-temp-file "rubocopfmt" nil ".rb")) + (resultbuf (get-buffer-create "*Rubocopfmt Result*")) + (patchbuf (get-buffer-create "*Rubocopfmt Patch*")) + (buffer-file (file-truename buffer-file-name)) + (src-dir (file-name-directory buffer-file)) + (src-file (file-name-nondirectory buffer-file)) + (fmt-command rubocopfmt-rubocop-command) + (fmt-args (list "--stdin" src-file + "--auto-correct" + "--format" "emacs"))) + + (if (rubocopfmt--bundled-path-p src-dir) + (setq fmt-command "bundle" + fmt-args (append (list "exec" rubocopfmt-rubocop-command) + fmt-args))) + + (if rubocopfmt-disabled-cops + (setq fmt-args (append fmt-args (list "--except" + (combine-and-quote-strings + rubocopfmt-disabled-cops ","))))) + + (unwind-protect + (save-restriction + (widen) + (write-region nil nil tmpfile) + (with-current-buffer resultbuf (erase-buffer)) + (with-current-buffer patchbuf (erase-buffer)) + + (let ((current-directory src-dir)) + (message "Calling rubocop from directory \"%s\": %s %s" + src-dir fmt-command (mapconcat 'identity fmt-args " ")) + (apply #'call-process-region (point-min) (point-max) + fmt-command nil resultbuf nil fmt-args) + (if (rubocopfmt--parse-result resultbuf tmpfile) + (call-process-region (point-min) (point-max) "diff" + nil patchbuf nil "-n" "-" tmpfile))) + + (if (= (buffer-size patchbuf) 0) + (message "Buffer is already rubocopfmted") + (rubocopfmt--apply-rcs-patch patchbuf) + (message "Applied rubocopfmt"))) + + (delete-file tmpfile) + (kill-buffer resultbuf) + (kill-buffer patchbuf)))) + ;;;###autoload (define-minor-mode rubocopfmt-mode "Enable format-on-save for `ruby-mode' buffers via rubocopfmt." From eebd307ba78c9bda857d2713f9bfd102401b85bd Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 19 May 2018 15:12:30 +0100 Subject: [PATCH 19/38] Update vendored dired+ package --- vendor/dired+.el | 519 +++++++++++++++++++++++++++++++---------------- 1 file changed, 349 insertions(+), 170 deletions(-) diff --git a/vendor/dired+.el b/vendor/dired+.el index 10f6414..0855d24 100644 --- a/vendor/dired+.el +++ b/vendor/dired+.el @@ -8,9 +8,9 @@ ;; Created: Fri Mar 19 15:58:58 1999 ;; Version: 2017.10.23 ;; Package-Requires: () -;; Last-Updated: Sat Mar 3 09:33:56 2018 (-0800) +;; Last-Updated: Sun Mar 25 11:18:04 2018 (-0700) ;; By: dradams -;; Update #: 10754 +;; Update #: 10917 ;; URL: https://www.emacswiki.org/emacs/download/dired%2b.el ;; Doc URL: https://www.emacswiki.org/emacs/DiredPlus ;; Keywords: unix, mouse, directories, diredp, dired @@ -646,6 +646,7 @@ ;; ;; Macros defined here: ;; +;; `diredp-mark-if', `diredp-user-error', ;; `diredp-with-help-window'. ;; ;; @@ -653,7 +654,6 @@ ;; been REDEFINED HERE: ;; ;; `dired-map-over-marks' - Treat multiple `C-u' specially. -;; `dired-mark-if' - Better initial msg - Emacs bug #8523. ;; ;; ;; ***** NOTE: The following functions defined in `dired.el' have @@ -667,6 +667,8 @@ ;; `dired-dwim-target-directory' - Uses `diredp-dwim-any-frame-flag'. ;; `dired-find-file' - Allow `.' and `..' (Emacs 20 only). ;; `dired-get-filename' - Test `./' and `../' (like `.', `..'). +;; `dired-get-marked-files' - Can include `.' and `..'. +;; Allow FILTER + DISTINGUISH-ONE-MARKED. ;; `dired-goto-file' - Fix Emacs bug #7126. ;; Remove `/' from dir before compare. ;; (Emacs < 24 only.) @@ -679,6 +681,10 @@ ;; (don't just use nil). (Emacs 23+, and ;; only for MS Windows) ;; `dired-insert-set-properties' - `mouse-face' on whole line. +;; `dired-flag-auto-save-files', `dired-mark-directories', +;; `dired-mark-executables', `dired-mark-files-containing-regexp', +;; `dired-mark-files-regexp', `dired-mark-symlinks' +;; - Use `diredp-mark-if', not `dired-mark-if'. ;; `dired-mark-files-regexp' - Add regexp to `regexp-search-ring'. ;; More matching possibilities. ;; Added optional arg LOCALP. @@ -705,8 +711,7 @@ ;; take advantage of the new definition of macro ;; `dired-map-over-marks': ;; -;; `dired-do-redisplay', `dired-get-marked-files', -;; `dired-map-over-marks-check', +;; `dired-do-redisplay', `dired-map-over-marks-check', ;; `image-dired-dired-insert-marked-thumbs', ;; `image-dired-dired-toggle-marked-thumbs'. ;; @@ -730,7 +735,8 @@ ;; `dired-copy-filename-as-kill' - ;; Put file names also in var `diredp-last-copied-filenames'. ;; `dired-do-find-marked-files' - -;; Doc string reflects new `dired-simultaneous-find-file'. +;; Call `dired-get-marked-files' with original ARG. +;; Added optional arg INTERACTIVEP - no error if nil and no files. ;; `dired-do-run-mail' - Require confirmation. ;; `dired-mark-sexp' - 1. Variable `s' -> `blks'. ;; 2. Fixes to `uid' and `gid'. @@ -739,6 +745,7 @@ ;; Use separate frames instead of windows if `pop-up-frames' is ;; non-nil, or if prefix arg < 0. ;; +;; ;; ***** NOTE: (Emacs 20 only) The following variable defined in ;; `dired.el' has been REDEFINED HERE: ;; @@ -748,6 +755,20 @@ ;; ;;; Change Log: ;; +;; 2018/03/25 dadams +;; Added: diredp-user-error. +;; Updated for Emacs 27-pretest-2 change in dired-get-marked-files signature. +;; dired-get-marked-files: Added optional arg ERROR-IF-NONE-P. +;; diredp-list-marked, diredp-insert-subdirs, dired-do-(i)search(-regexp), dired-do-query-replace-regexp, +;; dired-do-find-marked-files, diredp-describe-marked-autofiles: +;; Added optional arg INTERACTIVEP. +;; Pass non-nil ERROR-IF-NONE-P to dired-get-marked-files when INTERACTIVEP. (See Emacs bug #30938.) +;; 2018/03/23 dadams +;; Added diredp-mark-if. Removed: redefinition of dired-mark-if. +;; Differences: msg and return value include both number of matches and number of changes. +;; Added redefinitions (use diredp-mark-if) of dired-flag-auto-save-files, +;; dired-mark-(files-containing-regexp|symlinks|directories|executables). +;; Everywhere: Use diredp-mark-if, not dired-mark-if. ;; 2018/03/03 dadams ;; diredp-delete-dups: defalias the symbol, not its symbol-function (dunno why I did the latter). ;; 2018/02/28 dadams @@ -1810,6 +1831,9 @@ rather than FUN itself, to `minibuffer-setup-hook'." (progn (add-hook 'minibuffer-setup-hook ,hook) ,@body) (remove-hook 'minibuffer-setup-hook ,hook))))))) +(defmacro diredp-user-error (&rest args) + `(if (fboundp 'user-error) (user-error ,@args) (error ,@args))) + ;; Define these for Emacs 20 and 21. (unless (fboundp 'dired-get-file-for-visit) ; Emacs 22+ (defun dired-get-file-for-visit () ; Not bound @@ -1843,6 +1867,7 @@ rather than FUN itself, to `minibuffer-setup-hook'." (defvar bookmark-default-file) ; In `bookmark.el' (defvar compilation-current-error) ; In `compile.el' (defvar delete-by-moving-to-trash) ; Built-in, Emacs 23+ +(defvar dired-always-read-filesystem) ; In `dired.el', Emacs 26+ (defvar dired-auto-revert-buffer) ; In `dired.el', Emacs 23+ (defvar dired-details-state) ; In `dired-details+.el' (defvar dired-keep-marker-hardlink) ; In `dired-x.el' @@ -2104,37 +2129,50 @@ Initialized to the value of option `diredp-hide-details-initially-flag'.") ;;; Macros -;; REPLACE ORIGINAL in `dired.el'. +;; Unlike `dired-mark-if': ;; -;; Do not count lines that satisfy predicate if they already have `dired-marker-char'. +;; 1. Value returned and message indicate both the number matched and the number changed. +;; 2. Added optional arg PLURAL, for irregular plurals (e.g. "directories"). ;; -(defmacro dired-mark-if (predicate msg) +(defmacro diredp-mark-if (predicate singular &optional plural) "Mark files for PREDICATE, according to `dired-marker-char'. PREDICATE is evaluated on each line, with point at beginning of line. -MSG is a noun phrase for the type of files being marked. -It should end with a noun that can be pluralized by adding `s'. -Return value is the number of files marked, or nil if none were marked." +SINGULAR is a singular noun phrase for the type of files being marked. +Optional arg PLURAL is a plural noun phrase for the type of files + being marked. +If PLURAL is nil then SINGULAR should end with a noun that can be +pluralized by adding `s'. + +Return nil if no files matched PREDICATE. +Otherwise return a cons (CHANGED . MATCHED), where: + CHANGED is the number of markings that were changed by the operation. + MATCHED is the number of files that matched PREDICATE." `(let ((inhibit-read-only t) - count) + changed matched) (save-excursion - (setq count 0) - (when ,msg (message "%s %ss%s..." - (cond ((eq dired-marker-char ?\040) "Unmarking") - ((eq dired-del-marker dired-marker-char) "Flagging") - (t "Marking")) - ,msg - (if (eq dired-del-marker dired-marker-char) " for deletion" ""))) + (setq matched 0 + changed 0) + (when ,singular (message "%s %s%s..." + (cond ((eq dired-marker-char ?\040) "Unmarking") + ((eq dired-del-marker dired-marker-char) "Flagging") + (t "Marking")) + (or ,plural (concat ,singular "s")) + (if (eq dired-del-marker dired-marker-char) " for deletion" ""))) (goto-char (point-min)) (while (not (eobp)) (when ,predicate + (setq matched (1+ matched)) (unless (diredp-looking-at-p (char-to-string dired-marker-char)) - (delete-char 1) (insert dired-marker-char) (setq count (1+ count)))) + (delete-char 1) (insert dired-marker-char) (setq changed (1+ changed)))) (forward-line 1)) - (when ,msg (message "%s %s%s %s%s" count ,msg - (dired-plural-s count) - (if (eq dired-marker-char ?\040) "un" "") - (if (eq dired-marker-char dired-del-marker) "flagged" "marked")))) - (and (> count 0) count))) + (when ,singular (message "%s %s%s%s newly %s%s" + matched + (if (= matched 1) ,singular (or ,plural (concat ,singular "s"))) + (if (not (= matched changed)) " matched, " "") + (if (not (= matched changed)) changed "") + (if (eq dired-marker-char ?\040) "un" "") + (if (eq dired-marker-char dired-del-marker) "flagged" "marked")))) + (and (> matched 0) (cons changed matched)))) ;; Just a helper function for `dired-map-over-marks'. @@ -2361,7 +2399,7 @@ Uses the `derived-mode-parent' property of the symbol to trace backwards." ;; 2. Doc string is updated to reflect the new ARG behavior. ;; 3. Allow, unlike vanilla Emacs, use of FILTER and DISTINGUISH-ONE-MARKED together. ;; -(defun dired-get-marked-files (&optional localp arg filter distinguish-one-marked) +(defun dired-get-marked-files (&optional localp arg filter distinguish-one-marked error-if-none-p) "Return names of the marked files and directories as a list of strings. The list is in the same order as the buffer, that is, the car is the first marked file. @@ -2383,6 +2421,8 @@ Optional third argument FILTER, if non-nil, is a function to select If DISTINGUISH-ONE-MARKED is non-nil, then return (t FILENAME) instead of (FILENAME) if only one file is marked (after any filtering by FILTER). +If ERROR-IF-NONE-P is non-nil, signal an error if the list of files is + empty. If ERROR-IF-NONE-P is a string then it is the error message. Note that the Dired+ version of this function differs from the vanilla version in these respects: @@ -2390,9 +2430,10 @@ version in these respects: * There are more possibilities for argument ARG (prefix argument). * Directories `.' and `..' can be included as marked. * You can use arguments FILTER and DISTINGUISH-ONE-MARKED together." - (let ((all (delq nil (save-excursion - (dired-map-over-marks (dired-get-filename localp t) - arg nil distinguish-one-marked)))) + (let ((all (delq nil (save-excursion (dired-map-over-marks (dired-get-filename localp 'NO-ERROR-IF-NOT-FILEP) + arg + nil + distinguish-one-marked)))) result) (if (and distinguish-one-marked (eq (car all) t)) (if (not filter) @@ -2400,6 +2441,8 @@ version in these respects: (and (funcall filter (cadr all)) (list t (cadr all)))) (dolist (file all) (when (or (not filter) (funcall filter file)) (push file result))) + (when (and (null result) error-if-none-p) + (diredp-user-error (if (stringp error-if-none-p) error-if-none-p "No files specified"))) (if (and distinguish-one-marked (= 1 (length result))) (cons t result) result)))) @@ -4294,7 +4337,7 @@ The full text of the line is used as the file name." (save-excursion (mouse-set-point e) (diredp-find-line-file-other-window))) ;;;###autoload -(defun diredp-list-marked (&optional arg predicate) ; Bound to `C-M-l' +(defun diredp-list-marked (&optional arg predicate interactivep) ; Bound to `C-M-l' "List the marked files in this Dired buffer. A prefix arg specifies files to use instead of the marked files: @@ -4310,8 +4353,9 @@ shows image previews. Non-interactively, non-nil arg PREDICATE is a file-name predicate. List only the files for which it returns non-nil." - (interactive (progn (diredp-ensure-mode) (list current-prefix-arg))) - (let ((files (dired-get-marked-files nil arg predicate))) (diredp-list-files files))) + (interactive (progn (diredp-ensure-mode) (list current-prefix-arg nil t))) + (let ((files (dired-get-marked-files nil arg predicate 'DISTINGUISH-ONE interactivep))) + (diredp-list-files files))) (defun diredp-list-files (files &optional dir bufname predicate) "Display FILES, a list of file names. Wildcard patterns are expanded. @@ -4647,18 +4691,20 @@ Raise an error first if not in Dired mode." (dired-kill-tree (dired-current-directory) nil 'KILL-ROOT))) ;;;###autoload -(defun diredp-insert-subdirs (&optional switches) ; Bound to `M-i' +(defun diredp-insert-subdirs (&optional switches interactivep) ; Bound to `M-i' "Insert the marked subdirectories. Like using \\`\\[dired-maybe-insert-subdir]' at each marked directory line." (interactive (list (and current-prefix-arg (read-string "Switches for listing: " (or (and (boundp 'dired-subdir-switches) dired-subdir-switches) - dired-actual-switches))))) - (dolist (subdir (dired-get-marked-files nil nil - (lambda (fl) - (and (file-directory-p fl) ; Exclude `.' and `..' - (not (diredp-string-match-p "/[.][.]?\\'" - fl)))))) + dired-actual-switches))) + t)) + (dolist (subdir (dired-get-marked-files nil + nil + (lambda (fl) (and (file-directory-p fl) ; Exclude `.' and `..' + (not (diredp-string-match-p "/[.][.]?\\'" fl)))) + nil + interactivep)) (dired-maybe-insert-subdir subdir switches))) ;;;###autoload @@ -5442,20 +5488,26 @@ then only the first such is used." (add-to-list 'regexp-search-ring regexp) ; Add REGEXP to `regexp-search-ring'. (let ((dired-marker-char (or marker-char dired-marker-char)) (sdirs (diredp-get-subdirs ignore-marks-p)) - (total-count 0) - dbufs) - (message "%s matching files..." (if (eq ?\040 dired-marker-char) "UNmarking" "Marking")) + (matched 0) + (changed 0) + dbufs chg.mtch) + (message "%s files..." (if (eq ?\040 dired-marker-char) "UNmarking" "Marking")) (dolist (dir (cons default-directory sdirs)) (when (setq dbufs (dired-buffers-for-dir (expand-file-name dir))) ; Dirs with Dired buffers only. (with-current-buffer (car dbufs) - (setq total-count - (+ total-count (or (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) - (not (eolp)) ; Empty line - (let ((fn (dired-get-filename nil 'NO-ERROR))) - (and fn (diredp-string-match-p regexp fn)))) - "matching file") - 0)))))) - (message "%s %d matching files" (if (eq ?\040 dired-marker-char) "UNmarked" "Marked") total-count))) + (setq chg.mtch (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) + (not (eolp)) ; Empty line + (let ((fn (dired-get-filename nil 'NO-ERROR))) + (and fn (diredp-string-match-p regexp fn)))) + "file") + changed (+ changed (or (car chg.mtch) 0)) + matched (+ matched (or (cdr chg.mtch) 0)))))) + (message "%s file%s%s%s newly %s" + matched + (dired-plural-s matched) + (if (not (= matched changed)) " matched, " "") + (if (not (= matched changed)) changed "") + (if (eq ?\040 dired-marker-char) "unmarked" "marked")))) (defun diredp-mark-extension-recursive (extension &optional arg) ; Bound to `M-+ * .' "Mark all files with a certain EXTENSION, including in marked subdirs. @@ -5532,8 +5584,8 @@ A non-positive prefix arg means to ignore subdir markings and act instead on ALL subdirs. That is, mark all in this directory and all descendant directories." (interactive "P") - (diredp-mark-recursive-1 arg "directories" "directory file" '(and (diredp-looking-at-p dired-re-dir) - (not (diredp-looking-at-p dired-re-dot))))) + (diredp-mark-recursive-1 arg "directories" "directory" '(and (diredp-looking-at-p dired-re-dir) + (not (diredp-looking-at-p dired-re-dot))))) ;;;###autoload (defun diredp-mark-symlinks-recursive (&optional arg) ; Bound to `M-+ * @' "Mark all symbolic links, including in marked subdirs. @@ -5556,14 +5608,22 @@ descendant directories." (ignorep (and numarg (<= numarg 0))) (dired-marker-char (if unmark ?\040 dired-marker-char)) (sdirs (diredp-get-subdirs ignorep)) - (total-count 0) - dbufs) + (changed 0) + (matched 0) + dbufs chg.mtch) (message "%s %s..." (if (eq ?\040 dired-marker-char) "UNmarking" "Marking") plural) (dolist (dir (cons default-directory sdirs)) (when (setq dbufs (dired-buffers-for-dir (expand-file-name dir))) ; Dirs with Dired buffers only. (with-current-buffer (car dbufs) - (setq total-count (+ total-count (or (dired-mark-if (eval predicate-sexp) singular) 0)))))) - (message "%s %d %s" (if (eq ?\040 dired-marker-char) "UNmarked" "Marked") total-count plural))) + (setq chg.mtch (diredp-mark-if (eval predicate-sexp) singular) + changed (+ changed (or (car chg.mtch) 0)) + matched (+ matched (or (cdr chg.mtch) 0)))))) + (message "%s %s%s%s newly %s" + matched + (if (= 1 matched) singular plural) + (if (not (= matched changed)) " matched, " "") + (if (not (= matched changed)) changed "") + (if (eq ?\040 dired-marker-char) "unmarked" "marked")))) ;;;###autoload (defun diredp-capitalize-recursive (&optional ignore-marks-p) ; Bound to `M-+ % c' @@ -6023,21 +6083,21 @@ As a special case, if TAGS is empty, then mark or unmark the files that have any tags at all, or if NONEP is non-nil then mark or unmark those that have no tags at all." (let ((dired-marker-char (if unmarkp ?\040 dired-marker-char))) - (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) - (let* ((fname (dired-get-filename nil t)) - (bmk (and fname (bmkp-get-autofile-bookmark fname nil prefix))) - (btgs (and bmk (bmkp-get-tags bmk))) - (presentp nil) - (allp (and btgs (catch 'diredp-m-f-t-an - (dolist (tag tags) - (setq presentp (assoc-default tag btgs nil t)) - (unless (if none-p (not presentp) presentp) - (throw 'diredp-m-f-t-an nil))) - t)))) - (if (null tags) - (if none-p (not btgs) btgs) - allp))) - (if none-p "no-tags-matching file" "all-tags-matching file")))) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) + (let* ((fname (dired-get-filename nil t)) + (bmk (and fname (bmkp-get-autofile-bookmark fname nil prefix))) + (btgs (and bmk (bmkp-get-tags bmk))) + (presentp nil) + (allp (and btgs (catch 'diredp-m-f-t-an + (dolist (tag tags) + (setq presentp (assoc-default tag btgs nil t)) + (unless (if none-p (not presentp) presentp) + (throw 'diredp-m-f-t-an nil))) + t)))) + (if (null tags) + (if none-p (not btgs) btgs) + allp))) + (if none-p "no-tags-matching file" "all-tags-matching file")))) (defun diredp-mark-files-tagged-some/not-all (tags &optional notallp unmarkp prefix) "Mark or unmark files tagged with any or not all of TAGS. @@ -6050,20 +6110,20 @@ As a special case, if TAGS is empty, then mark or unmark the files that have any tags at all, or if NOTALLP is non-nil then mark or unmark those that have no tags at all." (let ((dired-marker-char (if unmarkp ?\040 dired-marker-char))) - (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) - (let* ((fname (dired-get-filename nil t)) - (bmk (and fname - (bmkp-get-autofile-bookmark fname nil prefix))) - (btgs (and bmk (bmkp-get-tags bmk))) - (presentp nil) - (allp (and btgs (catch 'diredp-m-f-t-sna - (dolist (tag tags) - (setq presentp (assoc-default tag btgs nil t)) - (when (if notallp (not presentp) presentp) - (throw 'diredp-m-f-t-sna t))) - nil)))) - (if (null tags) (if notallp (not btgs) btgs) allp))) - (if notallp "some-tags-not-matching file" "some-tags-matching file")))) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) + (let* ((fname (dired-get-filename nil t)) + (bmk (and fname + (bmkp-get-autofile-bookmark fname nil prefix))) + (btgs (and bmk (bmkp-get-tags bmk))) + (presentp nil) + (allp (and btgs (catch 'diredp-m-f-t-sna + (dolist (tag tags) + (setq presentp (assoc-default tag btgs nil t)) + (when (if notallp (not presentp) presentp) + (throw 'diredp-m-f-t-sna t))) + nil)))) + (if (null tags) (if notallp (not btgs) btgs) allp))) + (if notallp "some-tags-not-matching file" "some-tags-matching file")))) ;;;###autoload (defun diredp-mark-files-tagged-all (tags &optional none-p prefix) ; `T m *' @@ -6136,18 +6196,18 @@ You need library `bookmark+.el' to use this command." (read-string "Prefix for autofile bookmark names: ")))) (diredp-ensure-bookmark+) (diredp-ensure-mode) - (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) - (lexical-let* ((fname (dired-get-filename nil t)) - (bmk (and fname - (bmkp-get-autofile-bookmark fname nil prefix))) - (btgs (and bmk (bmkp-get-tags bmk))) - (anyp (and btgs (bmkp-some #'(lambda (tag) - (diredp-string-match-p - regexp - (bmkp-tag-name tag))) - btgs)))) - (and btgs (if notp (not anyp) anyp)))) - "some-tag-matching-regexp file")) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) + (lexical-let* ((fname (dired-get-filename nil t)) + (bmk (and fname + (bmkp-get-autofile-bookmark fname nil prefix))) + (btgs (and bmk (bmkp-get-tags bmk))) + (anyp (and btgs (bmkp-some #'(lambda (tag) + (diredp-string-match-p + regexp + (bmkp-tag-name tag))) + btgs)))) + (and btgs (if notp (not anyp) anyp)))) + "some-tag-matching-regexp file")) ;;;###autoload (defun diredp-unmark-files-tagged-regexp (regexp &optional notp prefix) ; `T u %' @@ -6161,17 +6221,17 @@ You need library `bookmark+.el' to use this command." (diredp-ensure-bookmark+) (diredp-ensure-mode) (let ((dired-marker-char ?\040)) - (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) - (lexical-let* ((fname (dired-get-filename nil t)) - (bmk (and fname (bmkp-get-autofile-bookmark fname nil prefix))) - (btgs (and bmk (bmkp-get-tags bmk))) - (anyp (and btgs (bmkp-some #'(lambda (tag) - (diredp-string-match-p - regexp - (bmkp-tag-name tag))) - btgs)))) - (and btgs (if notp (not anyp) anyp)))) - "some-tag-matching-regexp file"))) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) + (lexical-let* ((fname (dired-get-filename nil t)) + (bmk (and fname (bmkp-get-autofile-bookmark fname nil prefix))) + (btgs (and bmk (bmkp-get-tags bmk))) + (anyp (and btgs (bmkp-some #'(lambda (tag) + (diredp-string-match-p + regexp + (bmkp-tag-name tag))) + btgs)))) + (and btgs (if notp (not anyp) anyp)))) + "some-tag-matching-regexp file"))) ;;;###autoload (defun diredp-unmark-files-tagged-all (tags &optional none-p prefix) ; `T u *' @@ -6616,10 +6676,10 @@ You need library `bookmark+.el' to use this command." (defun diredp-mark/unmark-autofiles (&optional unmarkp) "Mark all autofiles, or unmark if UNMARKP is non-nil." (let ((dired-marker-char (if unmarkp ?\040 dired-marker-char))) - (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) - (let ((fname (dired-get-filename nil t))) - (and fname (bmkp-get-autofile-bookmark fname)))) - "autofile"))) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) (not (eolp)) + (let ((fname (dired-get-filename nil t))) + (and fname (bmkp-get-autofile-bookmark fname)))) + "autofile"))) (when (and (fboundp 'bmkp-get-autofile-bookmark) ; Defined in `bookmark+-1.el'. (fboundp 'hlt-highlight-region)) ; Defined in `highlight.el'. @@ -7256,48 +7316,56 @@ A prefix argument ARG specifies files to use instead of those marked. ;; REPLACE ORIGINAL in `dired.el': ;; - ;; Added optional ARG, so you can act on next ARG files or on all files. + ;; 1. Added optional arg ARG, so you can act on next ARG files or on all files. + ;; 2. Added optional arg INTERACTIVEP. + ;; 3. Do not raise error if no files when not INTERACTIVEP. ;; - (defun dired-do-isearch (&optional arg) + (defun dired-do-isearch (&optional arg interactivep) "Search for a string through all marked files using Isearch. A prefix argument ARG specifies files to use instead of those marked. * An integer means use the next ARG files (previous -ARG, if < 0). * Two or more `C-u' (e.g. `C-u C-u') means ignore any marks and use all files in the Dired buffer. - * Any other prefix arg means use the current file." + * Any other prefix arg means use the current file. +When invoked interactively, raise an error if no files are marked." (interactive (let* ((arg current-prefix-arg) (C-u (and (consp arg) arg))) (when (and C-u (> (prefix-numeric-value arg) 16)) (setq arg '(16))) - (list arg))) - (multi-isearch-files (dired-get-marked-files nil arg 'dired-nondirectory-p))) + (list arg t))) + (multi-isearch-files (dired-get-marked-files nil arg 'dired-nondirectory-p nil interactivep))) ;; REPLACE ORIGINAL in `dired.el': ;; - ;; Added optional ARG, so you can act on next ARG files or on all files. + ;; 1. Added optional arg ARG, so you can act on next ARG files or on all files. + ;; 2. Added optional arg INTERACTIVEP. + ;; 3. Do not raise error if no files when not INTERACTIVEP. ;; - (defun dired-do-isearch-regexp (&optional arg) + (defun dired-do-isearch-regexp (&optional arg interactivep) "Search for a regexp through all marked files using Isearch. A prefix arg behaves as follows: * An integer means use the next ARG files (previous -ARG, if < 0). * Two or more `C-u' (e.g. `C-u C-u') means ignore any marks and use all files in the Dired buffer. - * Any other prefix arg means use the current file." + * Any other prefix arg means use the current file. +When invoked interactively, raise an error if no files are marked." (interactive (let* ((arg current-prefix-arg) (C-u (and (consp arg) arg))) (when (and C-u (> (prefix-numeric-value arg) 16)) (setq arg '(16))) - (list arg))) - (multi-isearch-files-regexp (dired-get-marked-files nil arg 'dired-nondirectory-p))) + (list arg t))) + (multi-isearch-files-regexp (dired-get-marked-files nil arg 'dired-nondirectory-p nil interactivep))) ) ;; REPLACE ORIGINAL in `dired.el': ;; -;; Added optional ARG, so you can act on next ARG files or on all files. +;; 1. Added optional arg ARG, so you can act on next ARG files or on all files. +;; 2. Added optional arg INTERACTIVEP. +;; 3. Do not raise error if no files when not INTERACTIVEP. ;; ;;;###autoload -(defun dired-do-search (regexp &optional arg) +(defun dired-do-search (regexp &optional arg interactivep) "Search through all marked files for a match for REGEXP. Stops when a match is found. To continue searching for next match, use command \\[tags-loop-continue]. @@ -7306,21 +7374,26 @@ A prefix arg behaves as follows: * An integer means use the next ARG files (previous -ARG, if < 0). * Two or more `C-u' (e.g. `C-u C-u') means ignore any marks and use all files in the Dired buffer. - * Any other prefix arg means use the current file." + * Any other prefix arg means use the current file. + +When invoked interactively, raise an error if no files are marked." (interactive (let* ((arg current-prefix-arg) (C-u (and (consp arg) arg))) (when (and C-u (> (prefix-numeric-value arg) 16)) (setq arg '(16))) (list (diredp-read-regexp "Search marked files (regexp): ") - arg))) - (tags-search regexp `(dired-get-marked-files nil ',arg 'dired-nondirectory-p))) + arg + t))) + (tags-search regexp `(dired-get-marked-files nil ',arg 'dired-nondirectory-p nil ,interactivep))) ;; REPLACE ORIGINAL in `dired.el': ;; -;; Added optional ARG, so you can act on next ARG files or on all files. +;; 1. Added optional arg ARG, so you can act on next ARG files or on all files. +;; 2. Added optional arg INTERACTIVEP. +;; 3. Do not raise error if no files when not INTERACTIVEP. ;; ;;;###autoload -(defun dired-do-query-replace-regexp (from to &optional arg) +(defun dired-do-query-replace-regexp (from to &optional arg interactivep) "Do `query-replace-regexp' of FROM with TO, on all marked files. NOTE: A prefix arg for this command acts differently than for other commands, so that you can use it to request word-delimited matches. @@ -7337,17 +7410,23 @@ So for example: * `C-u 4': act on the next 4 files. `C-4' means the same thing. * `C-u': act on the marked files, replacing word-delimited matches. +When invoked interactively, raise an error if no files are marked. + If you exit (\\[keyboard-quit], RET or q), you can resume the query replace with the command \\[tags-loop-continue]." (interactive (let ((common (query-replace-read-args "Query replace regexp in marked files" t t))) (list (nth 0 common) (nth 1 common) - current-prefix-arg))) + current-prefix-arg + t))) (let* ((argnum (and (consp arg) (prefix-numeric-value arg))) (delimited (and argnum (eq (logand (truncate (log argnum 4)) 1) 1))) ; Odd number of plain `C-u'. (all (and argnum (> argnum 4))) ; At least 3 plain `C-u'. - (dgmf-arg (dired-get-marked-files nil (if (and arg (atom arg)) (abs arg) (and all '(16))) - 'dired-nondirectory-p))) + (dgmf-arg (dired-get-marked-files nil + (if (and arg (atom arg)) (abs arg) (and all '(16))) + 'dired-nondirectory-p + nil + interactivep))) (dolist (file dgmf-arg) (let ((buffer (get-file-buffer file))) (when (and buffer (with-current-buffer buffer buffer-read-only)) @@ -7707,20 +7786,21 @@ Non-interactively: current-prefix-arg nil)) (let ((dired-marker-char (if unflag-p ?\ dired-marker-char))) - (dired-mark-if (and (diredp-looking-at-p " ") ; Not already marked - (let ((fn (dired-get-filename localp 'NO-ERROR))) ; Uninteresting - (and fn (diredp-string-match-p regexp fn)))) - msg)))) + (diredp-mark-if (and (diredp-looking-at-p " ") ; Not already marked + (let ((fn (dired-get-filename localp 'NO-ERROR))) ; Uninteresting + (and fn (diredp-string-match-p regexp fn)))) + msg)))) ;; REPLACE ORIGINAL in `dired-x.el'. ;; ;; 1. Call `dired-get-marked-files' with original ARG, to get its multi-`C-u' behavior. -;; ;; 2. Doc string updated to reflect change to `dired-simultaneous-find-file'. +;; 3. Added optional arg INTERACTIVEP. +;; 4. Do not raise error if no files when not INTERACTIVEP. ;; ;;;###autoload -(defun dired-do-find-marked-files (&optional arg) ; Bound to `F' +(defun dired-do-find-marked-files (&optional arg interactivep) ; Bound to `F' "Find marked files, displaying all of them simultaneously. With no prefix argument: @@ -7751,10 +7831,13 @@ than it does with other `dired-do-*' commands: it does NOT act on the next or previous (abs ARG) files, ignoring markings. To keep the Dired buffer displayed, split the window (e.g., `C-x 2') -first. To show only the marked files, type `\\[delete-other-windows]' first." - (interactive "P") - (dired-simultaneous-find-file (dired-get-marked-files nil (and (consp arg) arg)) - (and arg (prefix-numeric-value arg)))) +first. To show only the marked files, type `\\[delete-other-windows]' first. + +When invoked interactively, raise an error if no files are marked." + (interactive "P\np") + (dired-simultaneous-find-file + (dired-get-marked-files nil (and (consp arg) arg) nil nil interactivep) + (and arg (prefix-numeric-value arg)))) ;; REPLACE ORIGINAL in `dired-x.el'. @@ -8608,9 +8691,9 @@ The form of a file name used for matching: Note that the default matching behavior of this command is different for Dired+ than it is for vanilla Emacs. Using a positive prefix arg -or a double plain prefix arg (`C-u C-u' gives you the same behavior as -vanilla Emacs (marking or unmarking, respectively): matching against -names that are relative to the `default-directory'. +or a double plain prefix arg (`C-u C-u') gives you the same behavior +as vanilla Emacs (marking or unmarking, respectively): matching +against names that are relative to the `default-directory'. What Dired+ offers in addition is the possibility to match against names that are relative (have no directory part - no prefix arg or @@ -8633,20 +8716,121 @@ Non-interactively: (C-u-C-u (and (consp raw) (= 16 (car raw)))) (num (and raw (prefix-numeric-value raw)))) (list (diredp-read-regexp (concat (if (or (consp raw) (and num (zerop num))) - "UNmark" - "Mark") - " files (regexp): ")) + "UNmark" + "Mark") + " files (regexp): ")) (and raw (or C-u C-u-C-u (zerop num)) ?\040) (cond ((or (not raw) C-u) t) ; none, `C-u' ((> num 0) nil) ; `M-+', `C-u C-u' (t 'no-dir))))) ; `M--', `M-0' (add-to-list 'regexp-search-ring regexp) ; Add REGEXP to `regexp-search-ring'. (let ((dired-marker-char (or marker-char dired-marker-char))) - (dired-mark-if (and (not (diredp-looking-at-p dired-re-dot)) - (not (eolp)) ; Empty line - (let ((fn (dired-get-filename localp t))) - (and fn (diredp-string-match-p regexp fn)))) - "matching file"))) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) + (not (eolp)) ; Empty line + (let ((fn (dired-get-filename localp t))) + (and fn (diredp-string-match-p regexp fn)))) + "file"))) + + +;; REPLACE ORIGINAL in `dired.el': +;; +;; Use `diredp-mark-if', not `dired-mark-if'. +;; +;;;###autoload +(defun dired-mark-files-containing-regexp (regexp &optional marker-char) + "Mark files with contents containing a REGEXP match. +A prefix argument means unmark them instead. +`.' and `..' are never marked. + +If a file is visited in a buffer and `dired-always-read-filesystem' is +nil, this looks in the buffer without revisiting the file, so the +results might be inconsistent with the file on disk if its contents +have changed since it was last visited." + (interactive + (list (diredp-read-regexp (concat (if current-prefix-arg "Unmark" "Mark") " files containing (regexp): ") + nil 'dired-regexp-history) + (and current-prefix-arg ?\040))) + (let ((dired-marker-char (or marker-char dired-marker-char))) + (diredp-mark-if (and (not (diredp-looking-at-p dired-re-dot)) + (not (eolp)) + (let ((fname (dired-get-filename nil t))) + (when (and fname (file-readable-p fname) (not (file-directory-p fname))) + (let ((prebuf (get-file-buffer fname))) + (message "Checking %s" fname) + ;; For now, do it inside Emacs. Grep might be better if there are lots of files. + (if (and prebuf (or (not (boundp 'dired-always-read-filesystem)) + (not dired-always-read-filesystem))) ; Emacs 26+ + (with-current-buffer prebuf + (save-excursion (goto-char (point-min)) (re-search-forward regexp nil t))) + (with-temp-buffer + (insert-file-contents fname) + (goto-char (point-min)) + (re-search-forward regexp nil t))))))) + "file"))) + + +;; REPLACE ORIGINAL in `dired.el': +;; +;; Use `diredp-mark-if', not `dired-mark-if'. +;; +;;;###autoload +(defun dired-mark-symlinks (unflag-p) + "Mark all symbolic links. +With prefix argument, unmark or unflag all those files." + (interactive "P") + (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))) + (diredp-mark-if (diredp-looking-at-p dired-re-sym) "symbolic link"))) + + +;; REPLACE ORIGINAL in `dired.el': +;; +;; Use `diredp-mark-if', not `dired-mark-if'. +;; +;;;###autoload +(defun dired-mark-directories (unflag-p) + "Mark all directory file lines except `.' and `..'. +With prefix argument, unmark or unflag the files instead." + (interactive "P") + (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))) + (diredp-mark-if (and (diredp-looking-at-p dired-re-dir) (not (diredp-looking-at-p dired-re-dot))) + "directory" "directories"))) + + +;; REPLACE ORIGINAL in `dired.el': +;; +;; Use `diredp-mark-if', not `dired-mark-if'. +;; +;;;###autoload +(defun dired-mark-executables (unflag-p) + "Mark all executable files. +With prefix argument, unmark or unflag the files instead." + (interactive "P") + (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))) + (diredp-mark-if (diredp-looking-at-p dired-re-exe) "executable file"))) + + +;; REPLACE ORIGINAL in `dired.el': +;; +;; Use `diredp-mark-if', not `dired-mark-if'. +;; +;;;###autoload +(defun dired-flag-auto-save-files (&optional unflag-p) + "Flag for deletion files whose names suggest they are auto save files. +A prefix argument says to unmark or unflag the files instead." + (interactive "P") + (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker))) + (diredp-mark-if + ;; It is less than general to check for # here, but it's the only way this runs fast enough. + (and (save-excursion (end-of-line) + (or (eq (preceding-char) ?#) + ;; Handle executables in case of -F option. Need not worry about the other kinds + ;; of markings that -F makes, since they won't appear on real auto-save files. + (and (eq (preceding-char) ?*) + (progn (forward-char -1) (eq (preceding-char) ?#))))) + (not (diredp-looking-at-p dired-re-dir)) + (let ((fname (dired-get-filename t t))) + (and fname (auto-save-file-name-p (file-name-nondirectory fname))))) + "auto-save file"))) ;;;###autoload (defun diredp-capitalize (&optional arg) ; Bound to `% c' @@ -8969,13 +9153,13 @@ You need library `bookmark+.el' for this command." ;;;###autoload (defalias 'diredp-show-metadata-for-marked 'diredp-describe-marked-autofiles) ;;;###autoload -(defun diredp-describe-marked-autofiles (&optional internal-form-p) +(defun diredp-describe-marked-autofiles (&optional internal-form-p interactivep) "Show metadata for the marked files. If no file is marked, describe ALL autofiles in this directory. With a prefix argument, show the internal (Lisp) form of the metadata. - +When invoked interactively, raise an error if no files are marked. You need library `bookmark+.el' for this command." - (interactive "P") + (interactive "P\np") (diredp-ensure-bookmark+) (let ((help-xref-following nil)) (help-setup-xref (list `(lambda (_buf) @@ -8986,7 +9170,7 @@ You need library `bookmark+.el' for this command." (called-interactively-p 'interactive) (interactive-p)))) (diredp-with-help-window "*Help*" - (let ((marked (dired-get-marked-files nil nil nil 'DISTINGUISH-ONE-MARKED))) + (let ((marked (dired-get-marked-files nil nil nil 'DISTINGUISH-ONE-MARKED interactivep))) (unless (cdr marked) (message "Describing ALL autofiles here (none are marked)...") (setq marked (diredp-get-files 'IGNORE-MARKS-P))) @@ -9077,7 +9261,6 @@ present for some values of `ls-lisp-emulation'. This function operates only on the Dired buffer content. It does not refer at all to the underlying file system. Contrast this with `find-dired', which might be preferable for the task at hand." - ;; Using `sym' = "", instead of nil, for non-linked files avoids the trap of ;; (string-match "foo" sym) into which a user would soon fall. ;; Use `equal' instead of `=' in the example, as it works on integers and strings. @@ -9087,7 +9270,7 @@ refer at all to the underlying file system. Contrast this with (inode nil) (blks ()) mode nlink uid gid size time name sym) - (dired-mark-if + (diredp-mark-if (save-excursion (and ;; Sets vars INODE BLKS MODE NLINK UID GID SIZE TIME NAME and SYM @@ -9210,8 +9393,7 @@ With non-nil prefix arg, unmark them instead." (setq beg (save-excursion (goto-char beg) (line-beginning-position)) end (save-excursion (goto-char end) (line-end-position))) (let ((dired-marker-char (if unmark-p ?\040 dired-marker-char))) - (dired-mark-if (and (<= (point) end) (>= (point) beg) (diredp-this-file-unmarked-p)) - "region file")))) + (diredp-mark-if (and (<= (point) end) (>= (point) beg) (diredp-this-file-unmarked-p)) "region file")))) ;;;###autoload (defun diredp-unmark-region-files (&optional mark-p) ; Not bound @@ -9224,8 +9406,7 @@ With non-nil prefix arg, mark them instead." (setq beg (save-excursion (goto-char beg) (line-beginning-position)) end (save-excursion (goto-char end) (line-end-position))) (let ((dired-marker-char (if mark-p dired-marker-char ?\040))) - (dired-mark-if (and (<= (point) end) (>= (point) beg) (diredp-this-file-marked-p)) - "region file")))) + (diredp-mark-if (and (<= (point) end) (>= (point) beg) (diredp-this-file-marked-p)) "region file")))) ;;;###autoload (defun diredp-flag-region-files-for-deletion () ; Not bound @@ -9237,8 +9418,8 @@ With non-nil prefix arg, mark them instead." (setq beg (save-excursion (goto-char beg) (line-beginning-position)) end (save-excursion (goto-char end) (line-end-position))) (let ((dired-marker-char dired-del-marker)) - (dired-mark-if (and (<= (point) end) (>= (point) beg) (diredp-this-file-unmarked-p ?\D)) - "region file")))) + (diredp-mark-if (and (<= (point) end) (>= (point) beg) (diredp-this-file-unmarked-p ?\D)) + "region file")))) ;;;###autoload (defun diredp-toggle-marks-in-region (start end) ; Not bound @@ -9720,13 +9901,11 @@ output files usually are created there instead of in a subdir." ;;actual work and can be redefined for customization. (interactive "e") (lexical-let ((mouse-pos (event-start event)) - (command (dired-read-shell-command "! on %s: " nil - (dired-get-marked-files t nil)))) + (command (dired-read-shell-command "! on %s: " nil (dired-get-marked-files t nil)))) (select-window (posn-window mouse-pos)) (goto-char (posn-point mouse-pos)) (dired-bunch-files (- 10000 (length command)) - #'(lambda (&rest files) - (dired-run-shell-command (dired-shell-stuff-it command files t 1))) + (lambda (&rest files) (dired-run-shell-command (dired-shell-stuff-it command files t 1))) nil (dired-get-marked-files t 1)))) From 0696f378381dec141edad5248da20c8df383786f Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 01:59:40 +0100 Subject: [PATCH 20/38] Upgate configuration for Ruby in siren-ruby --- modules/siren-ruby.el | 83 +++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 30 deletions(-) diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index 45aa84d..5bd9de1 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -14,31 +14,6 @@ (require 'smartparens-ruby) -(use-package rubocopfmt - :ensure nil ;; loaded from vendor - ) - -(use-package inf-ruby - :defer t) - -(use-package rspec-mode - :defer t - :config - (rspec-install-snippets)) - -(use-package ruby-refactor - :defer t) - -(use-package ruby-tools - :defer t - :bind (:map ruby-tools-mode-map - ("C-'" . toggle-quotes))) - -(use-package yari - :defer t - :init - (define-key 'help-command (kbd "R") 'yari)) - (use-package ruby-mode :ensure nil ;; loaded from emacs built-ins :interpreter "ruby" @@ -68,6 +43,7 @@ ("RET" . newline-and-indent) ("C-c C-h" . siren-toggle-hiding) ("C-c C-l" . goto-line) + ("C-c C-r" . anzu-query-replace) ("C-M-f" . sp-ruby-forward-sexp) ("C-M-b" . sp-ruby-backward-sexp)) @@ -86,13 +62,11 @@ ruby-use-smie t tab-width 2) - (rubocopfmt-mode) - (ruby-tools-mode +1) - (hs-minor-mode 1) (company-mode +1) - (subword-mode +1) + (hs-minor-mode 1) + (hideshowvis-enable) (highlight-indentation-current-column-mode) - (hideshowvis-enable)) + (subword-mode +1)) :config ;; We never want to edit Rubinius bytecode @@ -109,5 +83,54 @@ ;; Make company-mode play nice (push 'ruby-mode company-dabbrev-code-modes)) +(use-package inf-ruby + :defer t + :hook + (ruby-mode . inf-ruby-mode) + (compilation-filter . inf-ruby-auto-enter)) + +(use-package rspec-mode + :defer t + :hook (rspec-mode . siren-rspec-mode-setup) + :init + (defun siren-rspec-mode-setup () + (setq compilation-scroll-output t)) + + :config + (rspec-install-snippets)) + +(use-package rubocopfmt + :commands (rubocopfmt rubocopfmt-mode) + :hook (ruby-mode . rubocopfmt-mode)) + +(use-package ruby-compilation + :defer t) + +(use-package ruby-refactor + :defer t + :hook + (ruby-mode . ruby-refactor-mode) + (ruby-refactor . siren-ruby-refactor-setup) + + :init + (setq ruby-refactor-keymap-prefix (kbd "C-c C-=")) + (defun siren-ruby-refactor-setup ())) + +(use-package ruby-tools + :defer t + :diminish ruby-tools-mode + :bind (:map ruby-tools-mode-map + ("C-'" . toggle-quotes)) + :hook (ruby-mode . ruby-tools-mode)) + +(use-package seeing-is-believing + :defer t + :commands seeing-is-believing) + +(use-package yari + :defer t + :init + (define-key 'help-command (kbd "R") 'yari)) + (provide 'siren-ruby) ;;; siren-ruby.el ends here From c1225642f41554e129df105710a4ba582236a9a5 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 02:00:12 +0100 Subject: [PATCH 21/38] Fix issue with siren-smartparens module --- modules/siren-smartparens.el | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/siren-smartparens.el b/modules/siren-smartparens.el index 60aef44..989ab4c 100644 --- a/modules/siren-smartparens.el +++ b/modules/siren-smartparens.el @@ -11,7 +11,7 @@ :diminish smartparens-mode :bind (:map smartparens-mode-map ("C-M-t" . sp-transpose-sexp) - ("C-M-r" . siren-sp-transpose-sexp-reverse) + ("C-M-r" . sp-transpose-sexp-reverse) ("C-M-f" . sp-forward-sexp) ("C-M-b" . sp-backward-sexp) ("C-M-a" . sp-beginning-of-sexp) @@ -27,14 +27,14 @@ ("C-" . sp-backward-kill-sexp) ("C-" . sp-kill-sexp)) - :init - (defun siren-sp-transpose-sexp-reverse () - (sp-transpose-sexp -1)) - :config ;; smart pairing for all (require 'smartparens-config) + (defun sp-transpose-sexp-reverse () + (interactive) + (sp-transpose-sexp -1)) + (defalias 'rw 'sp-rewrap-sexp) (show-smartparens-global-mode +1) From f22a16d1ce873ab0f3e340a3112a807b83400781 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 02:00:54 +0100 Subject: [PATCH 22/38] Update Golang config in siren-golang module --- modules/siren-golang.el | 93 ++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index a596611..3f7a85c 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -16,11 +16,6 @@ :commands go-mode :bind (:map go-mode-map ("RET" . newline-and-indent) - ("C-c a" . go-test-current-project) - ("C-c m" . go-test-current-file) - ("C-c ." . go-test-current-test) - ("C-c b" . go-run) - ("C-c d" . godef-jump) ("C-c C-j" . avy-goto-word-or-subword-1) ("C-h f" . godoc-at-point)) @@ -39,31 +34,10 @@ ;; gofmt on save (add-hook 'before-save-hook 'gofmt-before-save nil t) - ;; prevent go-projectile from screwing up GOPATH - (setq go-projectile-switch-gopath 'never) - - ;; enable company-mode - (set (make-local-variable 'company-backends) '(company-go)) - (company-mode +1) - - ;; enable hide/show (hs-minor-mode 1) (hideshowvis-enable) - - ;; go-guru - (go-guru-hl-identifier-mode 1) - (setq go-guru-hl-identifier-idle-time 0.1) - - ;; stop whitespace being highlighted (whitespace-toggle-options '(tabs)) - - ;; make tabs 4 spaces wide (setq tab-width 4) - - ;; El-doc for Go - ;; (go-eldoc-setup) - - ;; CamelCase aware editing operations (subword-mode +1)) :config @@ -77,28 +51,71 @@ ;; Ignore go test -c output files (add-to-list 'completion-ignored-extensions ".test")) -(use-package company-go :defer t) -(use-package go-eldoc :defer t) -(use-package go-guru :defer t) -(use-package go-rename :defer t) -(use-package gotest :defer t) +(use-package company-go + :defer t + :after go-mode + :hook (go-mode . siren-company-go-setup) + + :init + (defun siren-company-go-setup () + (set (make-local-variable 'company-backends) '(company-go)) + (company-mode +1))) + +(use-package go-eldoc + :defer t + :diminish eldoc-mode + :hook (go-mode . go-eldoc-setup)) + +(use-package go-guru + :defer t + :after go-mode + :bind (:map go-mode-map + ("C-c d" . go-guru-definition)) + :hook (go-mode . siren-go-guru-setup) + + :init + (defun siren-go-guru-setup () + (setq go-guru-hl-identifier-idle-time 0.1) + (go-guru-hl-identifier-mode 1))) + +(use-package go-rename + :defer t + :after go-mode + :bind (:map go-mode-map + ("C-c ." . go-rename))) + +(use-package gotest + :defer t + :after go-mode + :bind (:map go-mode-map + ("C-c , a" . go-test-current-project) + ("C-c , v" . go-test-current-file) + ("C-c , s" . go-test-current-test) + ("C-c , c" . go-test-current-coverage) + ("C-c , b" . go-test-current-benchmark) + ("C-c , B" . go-test-current-project-benchmarks) + ("C-c , r" . go-run))) (use-package go-projectile :defer t + :after go-mode + :hook (go-mode . siren-go-projectile-setup) + :init - ;; prevent go-projectile from screwing up GOPATH - (setq go-projectile-switch-gopath 'never)) + (defun siren-go-projectile-setup () + ;; prevent go-projectile from screwing up GOPATH + (setq go-projectile-switch-gopath 'never))) (use-package flycheck-gometalinter - :requires go-mode flycheck + :defer t + :after go-mode :commands flycheck-gometalinter-setup + :hook (flycheck-mode . flycheck-gometalinter-setup) + :init (setq flycheck-gometalinter-fast t flycheck-gometalinter-tests t - flycheck-gometalinter-vendor t) - - (with-eval-after-load 'go-mode - (add-hook 'flycheck-mode-hook #'flycheck-gometalinter-setup))) + flycheck-gometalinter-vendor t)) (use-package go-playground :commands go-playground) From 7a9ab68e33092a14aa9feef7df2f6b0805cde359 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 02:01:20 +0100 Subject: [PATCH 23/38] Add "C-c d" keybinding for dumb-jump's jump to definition --- modules/siren-dumb-jump.el | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/siren-dumb-jump.el b/modules/siren-dumb-jump.el index c04f24a..5851b4e 100644 --- a/modules/siren-dumb-jump.el +++ b/modules/siren-dumb-jump.el @@ -8,6 +8,7 @@ (use-package dumb-jump :bind + ("C-c d" . dumb-jump-go) ("M-g o" . dumb-jump-go-other-window) ("M-g j" . dumb-jump-go) ("M-g b" . dumb-jump-back) From d35bd033515fad7fd21c94245100694bf3fd4428 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:03:18 +0100 Subject: [PATCH 24/38] Jump back after jump to def with "C-c b" --- modules/siren-dumb-jump.el | 1 + modules/siren-golang.el | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/siren-dumb-jump.el b/modules/siren-dumb-jump.el index 5851b4e..82995cd 100644 --- a/modules/siren-dumb-jump.el +++ b/modules/siren-dumb-jump.el @@ -9,6 +9,7 @@ (use-package dumb-jump :bind ("C-c d" . dumb-jump-go) + ("C-c b" . dumb-jump-back) ("M-g o" . dumb-jump-go-other-window) ("M-g j" . dumb-jump-go) ("M-g b" . dumb-jump-back) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index 3f7a85c..f68f819 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -70,7 +70,8 @@ :defer t :after go-mode :bind (:map go-mode-map - ("C-c d" . go-guru-definition)) + ("C-c d" . go-guru-definition) + ("C-c b" . pop-tag-mark)) :hook (go-mode . siren-go-guru-setup) :init From a2164b85ce4d7af835416a0abefd3a850f7d50e0 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:05:01 +0100 Subject: [PATCH 25/38] Fix issue with siren-ruby module, and move stuff around --- modules/siren-ruby.el | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index 5bd9de1..a4fa6c2 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -41,9 +41,7 @@ :bind (:map ruby-mode-map ("C-j" . newline-and-indent) ("RET" . newline-and-indent) - ("C-c C-h" . siren-toggle-hiding) ("C-c C-l" . goto-line) - ("C-c C-r" . anzu-query-replace) ("C-M-f" . sp-ruby-forward-sexp) ("C-M-b" . sp-ruby-backward-sexp)) @@ -55,10 +53,8 @@ (siren-prog-mode-setup) (setq c-tab-always-indent nil - rspec-primary-source-dirs '("app") ruby-align-chained-calls t ruby-insert-encoding-magic-comment t - ruby-refactor-add-parens t ruby-use-smie t tab-width 2) @@ -86,21 +82,26 @@ (use-package inf-ruby :defer t :hook - (ruby-mode . inf-ruby-mode) - (compilation-filter . inf-ruby-auto-enter)) + (ruby-mode . inf-ruby-minor-mode) + (compilation-filter . inf-ruby-auto-enter) + :config + (unbind-key "C-c C-r" inf-ruby-minor-mode-map)) (use-package rspec-mode :defer t :hook (rspec-mode . siren-rspec-mode-setup) :init (defun siren-rspec-mode-setup () - (setq compilation-scroll-output t)) + (setq compilation-scroll-output t + rspec-primary-source-dirs '("app"))) :config (rspec-install-snippets)) (use-package rubocopfmt :commands (rubocopfmt rubocopfmt-mode) + :bind (:map ruby-mode-map + ("C-c C-f" . rubocopfmt)) :hook (ruby-mode . rubocopfmt-mode)) (use-package ruby-compilation @@ -114,7 +115,8 @@ :init (setq ruby-refactor-keymap-prefix (kbd "C-c C-=")) - (defun siren-ruby-refactor-setup ())) + (defun siren-ruby-refactor-setup () + (setq ruby-refactor-add-parens t))) (use-package ruby-tools :defer t From 6bce5b9949bb8cab0f39713d9b362077f48cb04c Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:05:38 +0100 Subject: [PATCH 26/38] Disable highlight-symbol-mode in go-mode Instead use the much more reliable go-guru-hl-identifier-mode. --- modules/siren-golang.el | 1 + modules/siren-highlight-symbol.el | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index f68f819..f195c29 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -34,6 +34,7 @@ ;; gofmt on save (add-hook 'before-save-hook 'gofmt-before-save nil t) + (highlight-symbol-mode -1) (hs-minor-mode 1) (hideshowvis-enable) (whitespace-toggle-options '(tabs)) diff --git a/modules/siren-highlight-symbol.el b/modules/siren-highlight-symbol.el index 5e78490..dfb3e4c 100644 --- a/modules/siren-highlight-symbol.el +++ b/modules/siren-highlight-symbol.el @@ -7,6 +7,7 @@ ;;; Code: (use-package highlight-symbol + :diminish highlight-symbol-mode :bind ("C-c C-p" . highlight-symbol-prev) ("C-c C-n" . highlight-symbol-next) From e29ef96734d815de34a9d680003e41bd1a58d2b7 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:06:43 +0100 Subject: [PATCH 27/38] Add robe to Ruby for better jump to def and ElDoc --- modules/siren-ruby.el | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index a4fa6c2..395fbfc 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -87,6 +87,16 @@ :config (unbind-key "C-c C-r" inf-ruby-minor-mode-map)) +(use-package robe + :defer t + :bind (:map robe-mode-map + ("C-c d" . robe-jump) + ("C-c b". pop-tag-mark)) + :hook (ruby-mode . robe-mode) + :config + (unbind-key "M-." robe-mode-map) + (unbind-key "M-," robe-mode-map)) + (use-package rspec-mode :defer t :hook (rspec-mode . siren-rspec-mode-setup) From 7f49b7532c60b28da1cd09c4eb83170166c64b55 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:07:25 +0100 Subject: [PATCH 28/38] Remove useless :defer options --- modules/siren-golang.el | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index f195c29..7ab3f26 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -65,10 +65,10 @@ (use-package go-eldoc :defer t :diminish eldoc-mode + :commands go-eldoc-setup :hook (go-mode . go-eldoc-setup)) (use-package go-guru - :defer t :after go-mode :bind (:map go-mode-map ("C-c d" . go-guru-definition) @@ -81,13 +81,11 @@ (go-guru-hl-identifier-mode 1))) (use-package go-rename - :defer t :after go-mode :bind (:map go-mode-map ("C-c ." . go-rename))) (use-package gotest - :defer t :after go-mode :bind (:map go-mode-map ("C-c , a" . go-test-current-project) @@ -99,7 +97,6 @@ ("C-c , r" . go-run))) (use-package go-projectile - :defer t :after go-mode :hook (go-mode . siren-go-projectile-setup) From aa80e5e04c10d51bd63667b55509e0f47752c6a8 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:07:57 +0100 Subject: [PATCH 29/38] Customize go-guru-hl-identifier-face to something nice --- modules/siren-golang.el | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index 7ab3f26..1c4816d 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -78,7 +78,11 @@ :init (defun siren-go-guru-setup () (setq go-guru-hl-identifier-idle-time 0.1) - (go-guru-hl-identifier-mode 1))) + (go-guru-hl-identifier-mode 1)) + + :config + (custom-set-faces + '(go-guru-hl-identifier-face ((t (:background "gray30")))))) (use-package go-rename :after go-mode From 411f2648475be7d1196dc50e25fbd1f71e37b839 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:17:17 +0100 Subject: [PATCH 30/38] Use C-c C-j as jump to definition in most languages --- modules/siren-avy.el | 2 +- modules/siren-dumb-jump.el | 2 +- modules/siren-golang.el | 3 +-- modules/siren-ruby.el | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/siren-avy.el b/modules/siren-avy.el index 049114b..e58c0ea 100644 --- a/modules/siren-avy.el +++ b/modules/siren-avy.el @@ -9,7 +9,7 @@ (use-package avy :bind - ("C-c C-j" . avy-goto-word-or-subword-1) + ("C-c j" . avy-goto-word-or-subword-1) ("C-c SPC" . avy-goto-char) ("M-o" . ace-window) diff --git a/modules/siren-dumb-jump.el b/modules/siren-dumb-jump.el index 82995cd..1ffdadc 100644 --- a/modules/siren-dumb-jump.el +++ b/modules/siren-dumb-jump.el @@ -8,7 +8,7 @@ (use-package dumb-jump :bind - ("C-c d" . dumb-jump-go) + ("C-c C-j" . dumb-jump-go) ("C-c b" . dumb-jump-back) ("M-g o" . dumb-jump-go-other-window) ("M-g j" . dumb-jump-go) diff --git a/modules/siren-golang.el b/modules/siren-golang.el index 1c4816d..bb3dc4f 100644 --- a/modules/siren-golang.el +++ b/modules/siren-golang.el @@ -16,7 +16,6 @@ :commands go-mode :bind (:map go-mode-map ("RET" . newline-and-indent) - ("C-c C-j" . avy-goto-word-or-subword-1) ("C-h f" . godoc-at-point)) :hook @@ -71,7 +70,7 @@ (use-package go-guru :after go-mode :bind (:map go-mode-map - ("C-c d" . go-guru-definition) + ("C-c C-j" . go-guru-definition) ("C-c b" . pop-tag-mark)) :hook (go-mode . siren-go-guru-setup) diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index 395fbfc..a984167 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -90,7 +90,7 @@ (use-package robe :defer t :bind (:map robe-mode-map - ("C-c d" . robe-jump) + ("C-c C-j" . robe-jump) ("C-c b". pop-tag-mark)) :hook (ruby-mode . robe-mode) :config From 673c283bb5de0c0da01d08a19a9a123984fbd230 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 03:19:08 +0100 Subject: [PATCH 31/38] Have most of custom.el re-generated --- custom.el | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/custom.el b/custom.el index b32d69f..2d65681 100644 --- a/custom.el +++ b/custom.el @@ -7,13 +7,11 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (ace-ack ag anti anywhere-anzu avy-bright bright-browse browse-buffer cargo-cargo coffee-column company-company completing cursors-dash descbinds-describe diff-diminish direx dockerfile-dumb dup-ecb editorconfig-eldoc eslintd-evil exec-expand feature-file fill-fix-flycheck flycheck-flycheck-flycheck from-full-gh-git git-gitconfig github github-gitignore go-go go go-go go-gometalinter gotest-gtags guides-guru haml-helm helm-helm helm-helm helm-helm helm-highlight highlight-highlight hl-ido ido-imenu indent-indentation indicator-inf inflection-js json-jump key-kill line-link-lint linum-lua magit magit-markdown mode mode-mode mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode-mode mode mode-mode modes move-move multiple open-package-package package-path-phi+ php-plantuml playground-prettier projectile-projectile-pulls quotes-racer rainbow-read-refactor region-relative rename-ring rjsx rspec-ruby ruby-ruby rust-rust-rust sass-scss search-shell shift smart smart-smartparens smex string-swoop symbol-theme-theme thrift timemachine-toggle-tools twilight twilight-use vertical-web-which window-window-yaml-yari yasnippet zoom))) - '(plantuml-jar-path "/usr/local/Cellar/plantuml/8048/plantuml.8048.jar") - '(siren-rubocop-autocorrect-on-save nil)) + (zoom-window yasnippet-snippets yari yaml-mode which-key web-mode use-package toggle-quotes thrift string-inflection smex smartparens smart-shift smart-mode-line seeing-is-believing scss-mode sass-mode rust-playground ruby-tools ruby-refactor ruby-extra-highlight ruby-compilation rubocopfmt rspec-mode robe rjsx-mode rainbow-mode racer prettier-js plantuml-mode php-mode phi-search package-build neotree multiple-cursors move-dup markdown-mode magit-gh-pulls lua-mode linum-relative json-mode imenu-anywhere ido-vertical-mode ido-completing-read+ highlight-symbol highlight-indentation highlight-indent-guides helm-swoop helm-projectile helm-open-github helm-gtags helm-describe-modes helm-descbinds helm-ag go-projectile go-playground gitignore-mode github-browse-file gitconfig-mode git-timemachine git-link full-ack flycheck-rust flycheck-package flycheck-gometalinter fill-column-indicator feature-mode expand-region exec-path-from-shell evil eslintd-fix editorconfig dumb-jump doom-themes dockerfile-mode direx diminish diff-hl company-go coffee-mode cargo buffer-move browse-kill-ring anzu ace-window)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - '(markdown-code-face ((t nil))) + '(go-guru-hl-identifier-face ((t (:background "gray30")))) '(sp-pair-overlay-face ((t (:inherit nil))))) From 7d90da6bfed48ab0baa1de7b169df32dfb1f031a Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 11:29:13 +0100 Subject: [PATCH 32/38] Update ruby configuration --- modules/siren-ruby.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index a984167..f01f898 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -93,7 +93,13 @@ ("C-c C-j" . robe-jump) ("C-c b". pop-tag-mark)) :hook (ruby-mode . robe-mode) + + :init + (eval-after-load 'company + '(push 'company-robe company-backends)) + :config + ;; Unbind keys used by siren-text-manipulation module (unbind-key "M-." robe-mode-map) (unbind-key "M-," robe-mode-map)) @@ -103,7 +109,8 @@ :init (defun siren-rspec-mode-setup () (setq compilation-scroll-output t - rspec-primary-source-dirs '("app"))) + rspec-primary-source-dirs '("app") + rspec-use-spring-when-possible nil)) :config (rspec-install-snippets)) From 9959e65d8dfbadc925f8d180ec37210e91b05281 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 11:32:59 +0100 Subject: [PATCH 33/38] Update rubocopfmt in vendor dir Once the melpa package pull request is merged, I can switch to loading it like a regular package. --- custom.el | 2 +- modules/siren-ruby.el | 1 + vendor/rubocopfmt.el | 7 +++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/custom.el b/custom.el index 2d65681..e5221db 100644 --- a/custom.el +++ b/custom.el @@ -7,7 +7,7 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (zoom-window yasnippet-snippets yari yaml-mode which-key web-mode use-package toggle-quotes thrift string-inflection smex smartparens smart-shift smart-mode-line seeing-is-believing scss-mode sass-mode rust-playground ruby-tools ruby-refactor ruby-extra-highlight ruby-compilation rubocopfmt rspec-mode robe rjsx-mode rainbow-mode racer prettier-js plantuml-mode php-mode phi-search package-build neotree multiple-cursors move-dup markdown-mode magit-gh-pulls lua-mode linum-relative json-mode imenu-anywhere ido-vertical-mode ido-completing-read+ highlight-symbol highlight-indentation highlight-indent-guides helm-swoop helm-projectile helm-open-github helm-gtags helm-describe-modes helm-descbinds helm-ag go-projectile go-playground gitignore-mode github-browse-file gitconfig-mode git-timemachine git-link full-ack flycheck-rust flycheck-package flycheck-gometalinter fill-column-indicator feature-mode expand-region exec-path-from-shell evil eslintd-fix editorconfig dumb-jump doom-themes dockerfile-mode direx diminish diff-hl company-go coffee-mode cargo buffer-move browse-kill-ring anzu ace-window)))) + (zoom-window yasnippet-snippets yari yaml-mode which-key web-mode use-package toggle-quotes thrift string-inflection smex smartparens smart-shift smart-mode-line seeing-is-believing scss-mode sass-mode rust-playground ruby-tools ruby-refactor ruby-extra-highlight ruby-compilation rspec-mode robe rjsx-mode rainbow-mode racer prettier-js plantuml-mode php-mode phi-search package-build neotree multiple-cursors move-dup markdown-mode magit-gh-pulls lua-mode linum-relative json-mode imenu-anywhere ido-vertical-mode ido-completing-read+ highlight-symbol highlight-indentation highlight-indent-guides helm-swoop helm-projectile helm-open-github helm-gtags helm-describe-modes helm-descbinds helm-ag go-projectile go-playground gitignore-mode github-browse-file gitconfig-mode git-timemachine git-link full-ack flycheck-rust flycheck-package flycheck-gometalinter fill-column-indicator feature-mode expand-region exec-path-from-shell evil eslintd-fix editorconfig dumb-jump doom-themes dockerfile-mode direx diminish diff-hl company-go coffee-mode cargo buffer-move browse-kill-ring anzu ace-window)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/modules/siren-ruby.el b/modules/siren-ruby.el index f01f898..35ef76a 100644 --- a/modules/siren-ruby.el +++ b/modules/siren-ruby.el @@ -116,6 +116,7 @@ (rspec-install-snippets)) (use-package rubocopfmt + :ensure nil ;; loaded from vendor :commands (rubocopfmt rubocopfmt-mode) :bind (:map ruby-mode-map ("C-c C-f" . rubocopfmt)) diff --git a/vendor/rubocopfmt.el b/vendor/rubocopfmt.el index ba4c200..58445ae 100644 --- a/vendor/rubocopfmt.el +++ b/vendor/rubocopfmt.el @@ -1,7 +1,8 @@ -;;; rubocopfmt.el --- Format ruby code with rubocop +;;; rubocopfmt.el --- Minor-mode to format Ruby code with RuboCop on save -;; Version: 0.1.0 +;; Version: 0.2.2 ;; Keywords: convenience wp edit ruby rubocop +;; Package-Requires: ((cl-lib "0.5")) ;; URL: https://github.com/jimeh/rubocopfmt.el ;; Author: Jim Myhrberg @@ -45,6 +46,8 @@ ;;; Code: +(require 'cl-lib) + (defgroup rubocopfmt nil "Minor mode for formatting Ruby buffers with rubocop." :group 'languages From e1f1adfea8a0147052a3d947b145df8e5dddd78c Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 17:19:56 +0100 Subject: [PATCH 34/38] Update custom.el --- custom.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/custom.el b/custom.el index e5221db..17b9477 100644 --- a/custom.el +++ b/custom.el @@ -7,11 +7,12 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (zoom-window yasnippet-snippets yari yaml-mode which-key web-mode use-package toggle-quotes thrift string-inflection smex smartparens smart-shift smart-mode-line seeing-is-believing scss-mode sass-mode rust-playground ruby-tools ruby-refactor ruby-extra-highlight ruby-compilation rspec-mode robe rjsx-mode rainbow-mode racer prettier-js plantuml-mode php-mode phi-search package-build neotree multiple-cursors move-dup markdown-mode magit-gh-pulls lua-mode linum-relative json-mode imenu-anywhere ido-vertical-mode ido-completing-read+ highlight-symbol highlight-indentation highlight-indent-guides helm-swoop helm-projectile helm-open-github helm-gtags helm-describe-modes helm-descbinds helm-ag go-projectile go-playground gitignore-mode github-browse-file gitconfig-mode git-timemachine git-link full-ack flycheck-rust flycheck-package flycheck-gometalinter fill-column-indicator feature-mode expand-region exec-path-from-shell evil eslintd-fix editorconfig dumb-jump doom-themes dockerfile-mode direx diminish diff-hl company-go coffee-mode cargo buffer-move browse-kill-ring anzu ace-window)))) + (doom-themes yaml-mode web-mode thrift slim-mode scss-mode sass-mode rust-playground racer flycheck-rust cargo rust-mode yari seeing-is-believing ruby-tools ruby-refactor ruby-compilation rspec-mode robe inf-ruby plantuml-mode php-mode markdown-mode lua-mode rjsx-mode json-mode eslintd-fix prettier-js haml-mode go-playground flycheck-gometalinter go-projectile gotest go-rename go-guru go-eldoc company-go go-mode gitignore-mode gitconfig-mode dockerfile-mode feature-mode highlight-symbol highlight-indent-guides highlight-indentation coffee-mode zoom-window buffer-move magit-gh-pulls magit github-browse-file git-timemachine diff-hl yasnippet-snippets toggle-quotes string-inflection smartparens smart-shift phi-search multiple-cursors move-dup expand-region neotree all-the-icons helm-projectile editorconfig helm-swoop helm-open-github helm-gtags helm-ag helm-describe-modes helm-descbinds helm imenu-anywhere git-link full-ack dumb-jump direx ace-window avy anzu flycheck which-key smex rainbow-mode linum-relative ido-vertical-mode ido-completing-read+ evil browse-kill-ring company fill-column-indicator use-package smart-mode-line exec-path-from-shell diminish dash)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(go-guru-hl-identifier-face ((t (:background "gray30")))) + '(markdown-code-face ((t nil))) '(sp-pair-overlay-face ((t (:inherit nil))))) From 3b07c4cfbf74aae31220f3ae305f397683583ba3 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 17:21:22 +0100 Subject: [PATCH 35/38] Add siren-ignore-error-wrapper as core function of siren --- core/siren-core.el | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/siren-core.el b/core/siren-core.el index edda98f..f030fe4 100644 --- a/core/siren-core.el +++ b/core/siren-core.el @@ -68,5 +68,13 @@ Borrowed from: http://emacsredux.com/blog/2013/05/04/rename-file-and-buffer/" (set-visited-file-name new-name) (set-buffer-modified-p nil))))))) +(defun siren-ignore-error-wrapper (fn) + "Funtion return new function that ignore errors. + The function wraps a function with `ignore-errors' macro." + (lexical-let ((fn fn)) + (lambda () + (interactive) + (ignore-errors (funcall fn))))) + (provide 'siren-core) ;;; siren-core.el ends here From 87a86191db4f965ae3240299d66b9f6ee32afbf4 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 17:31:11 +0100 Subject: [PATCH 36/38] Majorly re-organize modules - Split large modules into smaller parts (e.g. siren-text-manipulation) - Organize modules into high level groups: - completion - core - editor - languages - linting - misc - navigation - projects - spelling - text-editing - version-control - windows - workspaces --- core/siren-modules.el | 102 ++++++++++-------- .../{ => completion}/siren-auto-complete.el | 0 modules/{ => completion}/siren-company.el | 0 modules/{ => core}/siren-aliases.el | 0 .../{ => core}/siren-global-keybindings.el | 0 modules/{ => core}/siren-packages.el | 0 .../{ => editor}/siren-browse-kill-ring.el | 0 modules/{ => editor}/siren-edit-server.el | 0 modules/{ => editor}/siren-evil.el | 0 modules/{ => editor}/siren-fci.el | 1 + .../editor/siren-highlight-indent-guides.el | 15 +++ .../siren-highlight-indentation.el | 3 - modules/{ => editor}/siren-ido.el | 0 modules/{ => editor}/siren-linum-relative.el | 0 modules/{ => editor}/siren-linum.el | 7 +- modules/{ => editor}/siren-rainbow.el | 0 modules/{ => editor}/siren-smex.el | 0 modules/{ => editor}/siren-undo-tree.el | 0 .../{ => editor}/siren-volatile-highlights.el | 8 +- modules/{ => editor}/siren-which-key.el | 0 modules/{ => languages}/siren-coffee.el | 4 - modules/{ => languages}/siren-conf.el | 18 +++- modules/{ => languages}/siren-css.el | 7 +- modules/{ => languages}/siren-cucumber.el | 18 +++- modules/{ => languages}/siren-dockerfile.el | 3 - modules/{ => languages}/siren-emacs-lisp.el | 0 modules/{ => languages}/siren-gitconfig.el | 8 +- modules/{ => languages}/siren-gitignore.el | 8 +- modules/{ => languages}/siren-golang.el | 5 +- modules/{ => languages}/siren-haml.el | 3 +- modules/languages/siren-js.el | 42 ++++++++ modules/{ => languages}/siren-json.el | 22 +--- modules/{ => languages}/siren-jsx.el | 8 +- modules/{ => languages}/siren-lisp.el | 2 +- modules/{ => languages}/siren-lua.el | 4 - modules/languages/siren-makefile.el | 23 ++++ modules/{ => languages}/siren-markdown.el | 13 +-- modules/languages/siren-org-mode.el | 43 ++++++++ modules/{ => languages}/siren-php.el | 4 +- modules/{ => languages}/siren-plantuml.el | 4 +- modules/languages/siren-prog-mode.el | 24 +++++ modules/{ => languages}/siren-ruby.el | 6 +- modules/{ => languages}/siren-rust.el | 5 +- modules/{ => languages}/siren-sass.el | 0 modules/{ => languages}/siren-scss.el | 9 +- modules/languages/siren-sh.el | 29 +++++ modules/{ => languages}/siren-slim.el | 8 +- modules/languages/siren-text-mode.el | 17 +++ modules/{ => languages}/siren-thrift.el | 18 +++- modules/{ => languages}/siren-web-mode.el | 6 +- modules/{ => languages}/siren-yaml.el | 13 ++- modules/{ => linting}/siren-eslintd-fix.el | 0 modules/{ => linting}/siren-flycheck.el | 1 + modules/{ => linting}/siren-prettier-js.el | 0 modules/{ => linting}/siren-rubocop.el | 0 modules/{ => misc}/siren-zone.el | 0 modules/{ => navigation}/siren-anzu.el | 0 modules/{ => navigation}/siren-avy.el | 0 modules/{ => navigation}/siren-dired.el | 6 +- modules/{ => navigation}/siren-direx.el | 0 modules/{ => navigation}/siren-dumb-jump.el | 0 modules/{ => navigation}/siren-folding.el | 0 modules/{ => navigation}/siren-full-ack.el | 0 modules/{ => navigation}/siren-git-link.el | 0 modules/{ => navigation}/siren-goto-symbol.el | 0 modules/{ => navigation}/siren-helm-ag.el | 0 modules/{ => navigation}/siren-helm-gtags.el | 0 .../siren-helm-open-github.el | 0 modules/{ => navigation}/siren-helm-swoop.el | 0 modules/{ => navigation}/siren-helm.el | 0 .../siren-highlight-symbol.el | 3 + .../siren-move-beginning-of-line.el | 0 .../siren-scroll-half-screen.el | 0 modules/{ => navigation}/siren-swiper.el | 0 modules/{ => projects}/siren-all-the-icons.el | 0 modules/{ => projects}/siren-ecb.el | 0 modules/{ => projects}/siren-editorconfig.el | 0 .../{ => projects}/siren-helm-projectile.el | 0 modules/{ => projects}/siren-neotree.el | 0 .../{ => projects}/siren-project-explorer.el | 0 modules/{ => projects}/siren-projectile.el | 0 modules/{ => projects}/siren-treemacs.el | 0 modules/siren-flyspell.el | 17 --- modules/siren-js.el | 39 ------- modules/siren-makefile.el | 23 ---- modules/siren-org-mode.el | 37 ------- modules/siren-phi-search.el | 14 --- modules/siren-programming.el | 32 ------ modules/siren-sh.el | 27 ----- modules/siren-text-manipulation.el | 86 --------------- modules/siren-window-management.el | 33 ------ modules/spelling/siren-flyspell.el | 28 +++++ modules/text-editing/siren-expand-region.el | 15 +++ modules/{ => text-editing}/siren-goto-chg.el | 6 -- modules/text-editing/siren-move-dup.el | 16 +++ .../siren-multiple-cursors.el | 7 +- .../text-editing/siren-randomize-region.el | 24 +++++ modules/text-editing/siren-smart-shift.el | 17 +++ .../{ => text-editing}/siren-smartparens.el | 3 + modules/text-editing/siren-sort-symbols.el | 19 ++++ modules/text-editing/siren-sort-words.el | 24 +++++ .../siren-string-inflection.el | 0 modules/text-editing/siren-toggle-comments.el | 32 ++++++ .../{ => text-editing}/siren-toggle-quotes.el | 0 modules/{ => text-editing}/siren-yasnippet.el | 0 .../{ => version-control}/siren-diff-hl.el | 0 modules/{ => version-control}/siren-ediff.el | 0 .../siren-git-timemachine.el | 0 modules/{ => version-control}/siren-github.el | 0 modules/{ => version-control}/siren-magit.el | 1 - modules/windows/siren-buffer-move.el | 17 +++ modules/windows/siren-windmove.el | 18 ++++ modules/{ => windows}/siren-zoom-window.el | 0 modules/{ => workspaces}/siren-elscreen.el | 0 modules/{ => workspaces}/siren-escreen.el | 0 modules/{ => workspaces}/siren-eyebrowse.el | 0 modules/{ => workspaces}/siren-perspective.el | 0 modules/{ => workspaces}/siren-workgroups2.el | 0 118 files changed, 592 insertions(+), 463 deletions(-) rename modules/{ => completion}/siren-auto-complete.el (100%) rename modules/{ => completion}/siren-company.el (100%) rename modules/{ => core}/siren-aliases.el (100%) rename modules/{ => core}/siren-global-keybindings.el (100%) rename modules/{ => core}/siren-packages.el (100%) rename modules/{ => editor}/siren-browse-kill-ring.el (100%) rename modules/{ => editor}/siren-edit-server.el (100%) rename modules/{ => editor}/siren-evil.el (100%) rename modules/{ => editor}/siren-fci.el (91%) create mode 100644 modules/editor/siren-highlight-indent-guides.el rename modules/{ => editor}/siren-highlight-indentation.el (89%) rename modules/{ => editor}/siren-ido.el (100%) rename modules/{ => editor}/siren-linum-relative.el (100%) rename modules/{ => editor}/siren-linum.el (82%) rename modules/{ => editor}/siren-rainbow.el (100%) rename modules/{ => editor}/siren-smex.el (100%) rename modules/{ => editor}/siren-undo-tree.el (100%) rename modules/{ => editor}/siren-volatile-highlights.el (61%) rename modules/{ => editor}/siren-which-key.el (100%) rename modules/{ => languages}/siren-coffee.el (93%) rename modules/{ => languages}/siren-conf.el (51%) rename modules/{ => languages}/siren-css.el (75%) rename modules/{ => languages}/siren-cucumber.el (53%) rename modules/{ => languages}/siren-dockerfile.el (87%) rename modules/{ => languages}/siren-emacs-lisp.el (100%) rename modules/{ => languages}/siren-gitconfig.el (63%) rename modules/{ => languages}/siren-gitignore.el (62%) rename modules/{ => languages}/siren-golang.el (98%) rename modules/{ => languages}/siren-haml.el (83%) create mode 100644 modules/languages/siren-js.el rename modules/{ => languages}/siren-json.el (65%) rename modules/{ => languages}/siren-jsx.el (78%) rename modules/{ => languages}/siren-lisp.el (94%) rename modules/{ => languages}/siren-lua.el (88%) create mode 100644 modules/languages/siren-makefile.el rename modules/{ => languages}/siren-markdown.el (86%) create mode 100644 modules/languages/siren-org-mode.el rename modules/{ => languages}/siren-php.el (89%) rename modules/{ => languages}/siren-plantuml.el (90%) create mode 100644 modules/languages/siren-prog-mode.el rename modules/{ => languages}/siren-ruby.el (96%) rename modules/{ => languages}/siren-rust.el (93%) rename modules/{ => languages}/siren-sass.el (100%) rename modules/{ => languages}/siren-scss.el (84%) create mode 100644 modules/languages/siren-sh.el rename modules/{ => languages}/siren-slim.el (60%) create mode 100644 modules/languages/siren-text-mode.el rename modules/{ => languages}/siren-thrift.el (54%) rename modules/{ => languages}/siren-web-mode.el (89%) rename modules/{ => languages}/siren-yaml.el (71%) rename modules/{ => linting}/siren-eslintd-fix.el (100%) rename modules/{ => linting}/siren-flycheck.el (93%) rename modules/{ => linting}/siren-prettier-js.el (100%) rename modules/{ => linting}/siren-rubocop.el (100%) rename modules/{ => misc}/siren-zone.el (100%) rename modules/{ => navigation}/siren-anzu.el (100%) rename modules/{ => navigation}/siren-avy.el (100%) rename modules/{ => navigation}/siren-dired.el (77%) rename modules/{ => navigation}/siren-direx.el (100%) rename modules/{ => navigation}/siren-dumb-jump.el (100%) rename modules/{ => navigation}/siren-folding.el (100%) rename modules/{ => navigation}/siren-full-ack.el (100%) rename modules/{ => navigation}/siren-git-link.el (100%) rename modules/{ => navigation}/siren-goto-symbol.el (100%) rename modules/{ => navigation}/siren-helm-ag.el (100%) rename modules/{ => navigation}/siren-helm-gtags.el (100%) rename modules/{ => navigation}/siren-helm-open-github.el (100%) rename modules/{ => navigation}/siren-helm-swoop.el (100%) rename modules/{ => navigation}/siren-helm.el (100%) rename modules/{ => navigation}/siren-highlight-symbol.el (91%) rename modules/{ => navigation}/siren-move-beginning-of-line.el (100%) rename modules/{ => navigation}/siren-scroll-half-screen.el (100%) rename modules/{ => navigation}/siren-swiper.el (100%) rename modules/{ => projects}/siren-all-the-icons.el (100%) rename modules/{ => projects}/siren-ecb.el (100%) rename modules/{ => projects}/siren-editorconfig.el (100%) rename modules/{ => projects}/siren-helm-projectile.el (100%) rename modules/{ => projects}/siren-neotree.el (100%) rename modules/{ => projects}/siren-project-explorer.el (100%) rename modules/{ => projects}/siren-projectile.el (100%) rename modules/{ => projects}/siren-treemacs.el (100%) delete mode 100644 modules/siren-flyspell.el delete mode 100644 modules/siren-js.el delete mode 100644 modules/siren-makefile.el delete mode 100644 modules/siren-org-mode.el delete mode 100644 modules/siren-phi-search.el delete mode 100644 modules/siren-programming.el delete mode 100644 modules/siren-sh.el delete mode 100644 modules/siren-text-manipulation.el delete mode 100644 modules/siren-window-management.el create mode 100644 modules/spelling/siren-flyspell.el create mode 100644 modules/text-editing/siren-expand-region.el rename modules/{ => text-editing}/siren-goto-chg.el (50%) create mode 100644 modules/text-editing/siren-move-dup.el rename modules/{ => text-editing}/siren-multiple-cursors.el (83%) create mode 100644 modules/text-editing/siren-randomize-region.el create mode 100644 modules/text-editing/siren-smart-shift.el rename modules/{ => text-editing}/siren-smartparens.el (97%) create mode 100644 modules/text-editing/siren-sort-symbols.el create mode 100644 modules/text-editing/siren-sort-words.el rename modules/{ => text-editing}/siren-string-inflection.el (100%) create mode 100644 modules/text-editing/siren-toggle-comments.el rename modules/{ => text-editing}/siren-toggle-quotes.el (100%) rename modules/{ => text-editing}/siren-yasnippet.el (100%) rename modules/{ => version-control}/siren-diff-hl.el (100%) rename modules/{ => version-control}/siren-ediff.el (100%) rename modules/{ => version-control}/siren-git-timemachine.el (100%) rename modules/{ => version-control}/siren-github.el (100%) rename modules/{ => version-control}/siren-magit.el (98%) create mode 100644 modules/windows/siren-buffer-move.el create mode 100644 modules/windows/siren-windmove.el rename modules/{ => windows}/siren-zoom-window.el (100%) rename modules/{ => workspaces}/siren-elscreen.el (100%) rename modules/{ => workspaces}/siren-escreen.el (100%) rename modules/{ => workspaces}/siren-eyebrowse.el (100%) rename modules/{ => workspaces}/siren-perspective.el (100%) rename modules/{ => workspaces}/siren-workgroups2.el (100%) diff --git a/core/siren-modules.el b/core/siren-modules.el index ab27cac..4763091 100644 --- a/core/siren-modules.el +++ b/core/siren-modules.el @@ -8,73 +8,86 @@ (setq siren-modules-dir (expand-file-name "modules" siren-dir)) (add-to-list 'load-path siren-modules-dir) +(siren-add-subfolders-to-load-path siren-modules-dir) -;; Modules +;; Core (require 'siren-aliases) +(require 'siren-global-keybindings) +(require 'siren-packages) + +;; Completion +(require 'siren-company) + +;; Editor +(require 'siren-browse-kill-ring) +(require 'siren-evil) +(require 'siren-ido) +(require 'siren-linum) +(require 'siren-linum-relative) +(require 'siren-rainbow) +(require 'siren-smex) +(require 'siren-undo-tree) +(require 'siren-which-key) + +;; Linting +(require 'siren-flycheck) + +;; Navigation (require 'siren-anzu) (require 'siren-avy) -(require 'siren-browse-kill-ring) -(require 'siren-company) -(require 'siren-diff-hl) (require 'siren-dired) (require 'siren-direx) (require 'siren-dumb-jump) -(require 'siren-editorconfig) -(require 'siren-evil) -(require 'siren-flyspell) (require 'siren-folding) (require 'siren-full-ack) (require 'siren-git-link) -(require 'siren-git-timemachine) -(require 'siren-github) -(require 'siren-global-keybindings) -(require 'siren-goto-chg) (require 'siren-goto-symbol) (require 'siren-helm) (require 'siren-helm-ag) (require 'siren-helm-gtags) (require 'siren-helm-open-github) -(require 'siren-helm-projectile) (require 'siren-helm-swoop) -(require 'siren-ido) -(require 'siren-linum) -(require 'siren-linum-relative) -(require 'siren-magit) (require 'siren-move-beginning-of-line) -(require 'siren-multiple-cursors) -(require 'siren-org-mode) -(require 'siren-packages) -(require 'siren-rainbow) (require 'siren-scroll-half-screen) -(require 'siren-smartparens) -(require 'siren-smex) -(require 'siren-string-inflection) -(require 'siren-text-manipulation) -(require 'siren-toggle-quotes) -(require 'siren-undo-tree) -(require 'siren-which-key) -(require 'siren-window-management) -(require 'siren-yasnippet) -(require 'siren-zoom-window) -;; (require 'siren-auto-complete) -;; (require 'siren-edit-server) -;; (require 'siren-swiper) -;; (require 'siren-volatile-highlights) -;; (require 'siren-zone) ;; Project management +(require 'siren-editorconfig) +(require 'siren-helm-projectile) (require 'siren-neotree) (require 'siren-projectile) -;; (require 'siren-ecb) -;; (require 'siren-project-explorer) -;; (require 'siren-treemacs) + +;; Spelling +(require 'siren-flyspell) + +;; Text editing +(require 'siren-expand-region) +(require 'siren-goto-chg) +(require 'siren-move-dup) +(require 'siren-multiple-cursors) +(require 'siren-randomize-region) +(require 'siren-smart-shift) +(require 'siren-smartparens) +(require 'siren-sort-symbols) +(require 'siren-sort-words) +(require 'siren-string-inflection) +(require 'siren-toggle-comments) +(require 'siren-toggle-quotes) +(require 'siren-yasnippet) + +;; Version control +(require 'siren-diff-hl) +(require 'siren-ediff) +(require 'siren-git-timemachine) +(require 'siren-github) +(require 'siren-magit) + +;; Window management +(require 'siren-buffer-move) +(require 'siren-windmove) +(require 'siren-zoom-window) ;; Workspace management (require 'siren-escreen) -;; (require 'siren-elscreen) -;; (require 'siren-eyebrowse) -;; (require 'siren-perspective) -;; (require 'siren-workgroups2) ;; Languages (require 'siren-coffee) @@ -93,17 +106,20 @@ (require 'siren-lua) (require 'siren-makefile) (require 'siren-markdown) +(require 'siren-org-mode) (require 'siren-php) (require 'siren-plantuml) +(require 'siren-prog-mode) (require 'siren-ruby) (require 'siren-rust) (require 'siren-sass) (require 'siren-scss) (require 'siren-sh) +(require 'siren-slim) +(require 'siren-text-mode) (require 'siren-thrift) (require 'siren-web-mode) (require 'siren-yaml) -;; (require 'siren-slim) (provide 'siren-modules) ;;; siren-modules.el ends here diff --git a/modules/siren-auto-complete.el b/modules/completion/siren-auto-complete.el similarity index 100% rename from modules/siren-auto-complete.el rename to modules/completion/siren-auto-complete.el diff --git a/modules/siren-company.el b/modules/completion/siren-company.el similarity index 100% rename from modules/siren-company.el rename to modules/completion/siren-company.el diff --git a/modules/siren-aliases.el b/modules/core/siren-aliases.el similarity index 100% rename from modules/siren-aliases.el rename to modules/core/siren-aliases.el diff --git a/modules/siren-global-keybindings.el b/modules/core/siren-global-keybindings.el similarity index 100% rename from modules/siren-global-keybindings.el rename to modules/core/siren-global-keybindings.el diff --git a/modules/siren-packages.el b/modules/core/siren-packages.el similarity index 100% rename from modules/siren-packages.el rename to modules/core/siren-packages.el diff --git a/modules/siren-browse-kill-ring.el b/modules/editor/siren-browse-kill-ring.el similarity index 100% rename from modules/siren-browse-kill-ring.el rename to modules/editor/siren-browse-kill-ring.el diff --git a/modules/siren-edit-server.el b/modules/editor/siren-edit-server.el similarity index 100% rename from modules/siren-edit-server.el rename to modules/editor/siren-edit-server.el diff --git a/modules/siren-evil.el b/modules/editor/siren-evil.el similarity index 100% rename from modules/siren-evil.el rename to modules/editor/siren-evil.el diff --git a/modules/siren-fci.el b/modules/editor/siren-fci.el similarity index 91% rename from modules/siren-fci.el rename to modules/editor/siren-fci.el index d6cd4b2..14f3f4b 100644 --- a/modules/siren-fci.el +++ b/modules/editor/siren-fci.el @@ -7,6 +7,7 @@ ;;; Code: (use-package fill-column-indicator + :hook (prog-mode . fci-mode) :config (setq fci-rule-width 1 fci-handle-trucate-lines nil)) diff --git a/modules/editor/siren-highlight-indent-guides.el b/modules/editor/siren-highlight-indent-guides.el new file mode 100644 index 0000000..65e1dfc --- /dev/null +++ b/modules/editor/siren-highlight-indent-guides.el @@ -0,0 +1,15 @@ +;;; siren-highlight-indent-guides.el --- jimeh's Emacs Siren: highlight-indent-guides-mode configuration. + +;;; Commentary: + +;; Basic configuration for highlight-indent-guides-mode. + +;;; Code: + +(use-package highlight-indent-guides + :defer t + :commands highlight-indent-guides-mode + :diminish highlight-indent-guides-mode) + +(provide 'siren-highlight-indent-guides) +;;; siren-highlight-indent-guides.el ends here diff --git a/modules/siren-highlight-indentation.el b/modules/editor/siren-highlight-indentation.el similarity index 89% rename from modules/siren-highlight-indentation.el rename to modules/editor/siren-highlight-indentation.el index 31fd54a..9f72d06 100644 --- a/modules/siren-highlight-indentation.el +++ b/modules/editor/siren-highlight-indentation.el @@ -11,8 +11,5 @@ :diminish (highlight-indentation-mode highlight-indentation-current-column-mode)) -(use-package highlight-indent-guides - :defer t) - (provide 'siren-highlight-indentation) ;;; siren-highlight-indentation.el ends here diff --git a/modules/siren-ido.el b/modules/editor/siren-ido.el similarity index 100% rename from modules/siren-ido.el rename to modules/editor/siren-ido.el diff --git a/modules/siren-linum-relative.el b/modules/editor/siren-linum-relative.el similarity index 100% rename from modules/siren-linum-relative.el rename to modules/editor/siren-linum-relative.el diff --git a/modules/siren-linum.el b/modules/editor/siren-linum.el similarity index 82% rename from modules/siren-linum.el rename to modules/editor/siren-linum.el index 60ec64c..56777f9 100644 --- a/modules/siren-linum.el +++ b/modules/editor/siren-linum.el @@ -6,10 +6,13 @@ ;;; Code: +(use-package linum + :ensure nil ;; loaded from emacs built-ins + :hook (prog-mode . linum-mode)) + (use-package linum+ :ensure nil ;; loaded from vendor - :demand - + :after linum :init ;; Customize line numbers - In GUI mode the fringe is the spacer between line ;; numbers and code, while in console mode we add an extra space for it. diff --git a/modules/siren-rainbow.el b/modules/editor/siren-rainbow.el similarity index 100% rename from modules/siren-rainbow.el rename to modules/editor/siren-rainbow.el diff --git a/modules/siren-smex.el b/modules/editor/siren-smex.el similarity index 100% rename from modules/siren-smex.el rename to modules/editor/siren-smex.el diff --git a/modules/siren-undo-tree.el b/modules/editor/siren-undo-tree.el similarity index 100% rename from modules/siren-undo-tree.el rename to modules/editor/siren-undo-tree.el diff --git a/modules/siren-volatile-highlights.el b/modules/editor/siren-volatile-highlights.el similarity index 61% rename from modules/siren-volatile-highlights.el rename to modules/editor/siren-volatile-highlights.el index 14071cc..94089dd 100644 --- a/modules/siren-volatile-highlights.el +++ b/modules/editor/siren-volatile-highlights.el @@ -6,11 +6,15 @@ ;;; Code: -(use-package volatile-highlights-mode +(require 'siren-undo-tree) + +(use-package volatile-highlights :demand :diminish volatile-highlights-mode :config - (volatile-highlights-mode t)) + (volatile-highlights-mode t) + (vhl/define-extension 'undo-tree 'undo-tree-yank 'undo-tree-move) + (vhl/install-extension 'undo-tree)) (provide 'siren-volatile-highlights) ;;; siren-volatile-highlights.el ends here diff --git a/modules/siren-which-key.el b/modules/editor/siren-which-key.el similarity index 100% rename from modules/siren-which-key.el rename to modules/editor/siren-which-key.el diff --git a/modules/siren-coffee.el b/modules/languages/siren-coffee.el similarity index 93% rename from modules/siren-coffee.el rename to modules/languages/siren-coffee.el index e09d6fa..77af804 100644 --- a/modules/siren-coffee.el +++ b/modules/languages/siren-coffee.el @@ -6,8 +6,6 @@ ;;; Code: -(require 'siren-programming) - (use-package coffee-mode :mode "\\.coffee\\'" :interpreter "coffee" @@ -15,8 +13,6 @@ :init (defun siren-coffee-mode-setup () - (siren-prog-mode-setup) - ;; remove the "Generated by CoffeeScript" header (add-to-list 'coffee-args-compile "--no-header") diff --git a/modules/siren-conf.el b/modules/languages/siren-conf.el similarity index 51% rename from modules/siren-conf.el rename to modules/languages/siren-conf.el index b6b0050..dcf60a7 100644 --- a/modules/siren-conf.el +++ b/modules/languages/siren-conf.el @@ -6,7 +6,14 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-fci) +(require 'siren-flyspell) +(require 'siren-linum) +(require 'siren-prog-mode) +(require 'siren-flycheck) +(require 'siren-highlight-indentation) +(require 'siren-highlight-symbol) +(require 'siren-smartparens) (use-package conf-mode :mode "Procfile\\'" "\\.conf\\'" "\\.cfg\\'" @@ -16,8 +23,15 @@ (defun siren-conf-mode-setup () (siren-prog-mode-setup) (setq tab-width 2) + + (fci-mode) + (flycheck-mode) + (flyspell-prog-mode) + (highlight-indentation-current-column-mode) (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode))) + (highlight-symbol-mode) + (linum-mode) + (smartparens-mode))) (provide 'siren-conf) ;;; siren-conf.el ends here diff --git a/modules/siren-css.el b/modules/languages/siren-css.el similarity index 75% rename from modules/siren-css.el rename to modules/languages/siren-css.el index 5d53eb9..8a57a07 100644 --- a/modules/siren-css.el +++ b/modules/languages/siren-css.el @@ -6,7 +6,6 @@ ;;; Code: -(require 'siren-programming) (require 'siren-rainbow) (use-package css-mode @@ -18,10 +17,10 @@ :init (defun siren-css-mode-setup () - (siren-prog-mode-setup) - (rainbow-mode +1) (setq tab-width 2) - (highlight-indentation-current-column-mode))) + + (highlight-indentation-current-column-mode +1) + (rainbow-mode +1))) (provide 'siren-css) ;;; siren-css.el ends here diff --git a/modules/siren-cucumber.el b/modules/languages/siren-cucumber.el similarity index 53% rename from modules/siren-cucumber.el rename to modules/languages/siren-cucumber.el index 83df072..839a6e0 100644 --- a/modules/siren-cucumber.el +++ b/modules/languages/siren-cucumber.el @@ -6,7 +6,14 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-fci) +(require 'siren-flyspell) +(require 'siren-linum) +(require 'siren-prog-mode) +(require 'siren-flycheck) +(require 'siren-highlight-indentation) +(require 'siren-highlight-symbol) +(require 'siren-smartparens) (use-package feature-mode :mode "\\.feature\\'" @@ -17,8 +24,15 @@ (defun siren-feature-mode-setup () (siren-prog-mode-setup) (setq tab-width 2) + + (fci-mode) + (flycheck-mode) + (flyspell-prog-mode) + (highlight-indentation-current-column-mode) (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode))) + (highlight-symbol-mode) + (linum-mode) + (smartparens-mode))) (provide 'siren-cucumber) ;;; siren-cucumber.el ends here diff --git a/modules/siren-dockerfile.el b/modules/languages/siren-dockerfile.el similarity index 87% rename from modules/siren-dockerfile.el rename to modules/languages/siren-dockerfile.el index 94d837e..d1a50c1 100644 --- a/modules/siren-dockerfile.el +++ b/modules/languages/siren-dockerfile.el @@ -6,15 +6,12 @@ ;;; Code: -(require 'siren-programming) - (use-package dockerfile-mode :mode "Dockerfile.*\\'" :hook (dockerfile-mode . siren-dockerfile-mode-setup) :init (defun siren-dockerfile-mode-setup () - (siren-prog-mode-setup) (subword-mode +1))) (provide 'siren-dockerfile) diff --git a/modules/siren-emacs-lisp.el b/modules/languages/siren-emacs-lisp.el similarity index 100% rename from modules/siren-emacs-lisp.el rename to modules/languages/siren-emacs-lisp.el diff --git a/modules/siren-gitconfig.el b/modules/languages/siren-gitconfig.el similarity index 63% rename from modules/siren-gitconfig.el rename to modules/languages/siren-gitconfig.el index 4f9d859..aafd9ea 100644 --- a/modules/siren-gitconfig.el +++ b/modules/languages/siren-gitconfig.el @@ -6,18 +6,12 @@ ;;; Code: -(require 'siren-programming) - (use-package gitconfig-mode :mode "\\.gitconfig" "gitconfig\\'" "\\.git\\\/config" :hook (gitconfig-mode . siren-gitconfig-mode-setup) :init - (defun siren-gitconfig-mode-setup () - (siren-prog-mode-setup) - (setq tab-width 2) - (highlight-indentation-current-column-mode) - (run-hooks 'siren-prog-mode-hook))) + (defun siren-gitconfig-mode-setup ())) (provide 'siren-gitconfig) ;;; siren-gitconfig.el ends here diff --git a/modules/siren-gitignore.el b/modules/languages/siren-gitignore.el similarity index 62% rename from modules/siren-gitignore.el rename to modules/languages/siren-gitignore.el index d1fb627..ee8e3a2 100644 --- a/modules/siren-gitignore.el +++ b/modules/languages/siren-gitignore.el @@ -6,18 +6,12 @@ ;;; Code: -(require 'siren-programming) - (use-package gitignore-mode :mode "\\.gitignore" "gitignore\\'" :hook (gitignore-mode . siren-gitignore-mode-setup) :init - (defun siren-gitignore-mode-setup () - (siren-prog-mode-setup) - (setq tab-width 2) - (highlight-indentation-current-column-mode) - (run-hooks 'siren-prog-mode-hook))) + (defun siren-gitignore-mode-setup ())) (provide 'siren-gitignore) ;;; siren-gitignore.el ends here diff --git a/modules/siren-golang.el b/modules/languages/siren-golang.el similarity index 98% rename from modules/siren-golang.el rename to modules/languages/siren-golang.el index bb3dc4f..b305658 100644 --- a/modules/siren-golang.el +++ b/modules/languages/siren-golang.el @@ -6,9 +6,10 @@ ;;; Code: +(require 'siren-company) (require 'siren-flycheck) (require 'siren-folding) -(require 'siren-programming) +(require 'siren-projectile) (use-package go-mode :mode "\\.go\\'" @@ -23,8 +24,6 @@ :init (defun siren-go-mode-setup () - (siren-prog-mode-setup) - ;; Prefer goimports to gofmt if installed (let ((goimports (executable-find "goimports"))) (when goimports diff --git a/modules/siren-haml.el b/modules/languages/siren-haml.el similarity index 83% rename from modules/siren-haml.el rename to modules/languages/siren-haml.el index c1bbe10..e818ec3 100644 --- a/modules/siren-haml.el +++ b/modules/languages/siren-haml.el @@ -12,10 +12,9 @@ :init (defun siren-haml-mode-setup () - (siren-prog-mode-setup) (setq tab-width 2) (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode))) + (highlight-indentation-current-column-mode +1))) (provide 'siren-haml) ;;; siren-haml.el ends here diff --git a/modules/languages/siren-js.el b/modules/languages/siren-js.el new file mode 100644 index 0000000..1d7770c --- /dev/null +++ b/modules/languages/siren-js.el @@ -0,0 +1,42 @@ +;;; siren-js.el --- jimeh's Emacs Siren: js-mode configuration. + +;;; Commentary: + +;; Basic configuration for js-mode. + +;;; Code: + +(require 'siren-prettier-js) +(require 'siren-folding) + +(use-package js-mode + :ensure nil ;; loaded from emacs built-ins + :mode + "\\.js\\'" + "\\.pac\\'" + "node" + + :hook + (js-mode . siren-js-mode-setup) + + :init + (defun siren-js-mode-setup () + "Default tweaks for `js-mode'." + (let ((width 2)) + (setq js-indent-level width + indent-level width + tab-width width)) + + (prettier-js-mode) + (company-mode +1) + (subword-mode +1) + (hs-minor-mode 1) + (highlight-indentation-current-column-mode) + (hideshowvis-enable) + + (let ((map js-mode-map)) + (define-key map (kbd "C-j") 'newline-and-indent) + (define-key map (kbd "C-c C-h") 'siren-toggle-hiding)))) + +(provide 'siren-js) +;;; siren-js.el ends here diff --git a/modules/siren-json.el b/modules/languages/siren-json.el similarity index 65% rename from modules/siren-json.el rename to modules/languages/siren-json.el index cf17fd6..923ae81 100644 --- a/modules/siren-json.el +++ b/modules/languages/siren-json.el @@ -8,11 +8,6 @@ (require 'siren-eslintd-fix) (require 'siren-folding) -(require 'siren-programming) - -(use-package omnifmt - :ensure nil ;; loaded from vendor - ) (use-package json-mode :mode "\\.json\\'" @@ -22,10 +17,12 @@ ("C-j" . newline-and-indent) ("C-c C-h" . siren-toggle-hiding)) + :hook + (json-mode . siren-json-mode-setup) + :init (defun siren-json-mode-setup () "Default tweaks for `json-mode'." - (siren-prog-mode-setup) (let ((width 2)) (setq js-indent-level width) @@ -33,18 +30,7 @@ (setq tab-width width) (highlight-indentation-set-offset width)) - (setq flycheck-checker 'json-jsonlint) - - (eslintd-fix-mode -1) - (omnifmt-mode +1) - (company-mode +1) - (subword-mode +1) - (hs-minor-mode 1) - (highlight-indentation-current-column-mode) - (hideshowvis-enable)) - - :hook - (json-mode . siren-json-mode-setup)) + (setq flycheck-checker 'json-jsonlint))) (provide 'siren-json) ;;; siren-js.el ends here diff --git a/modules/siren-jsx.el b/modules/languages/siren-jsx.el similarity index 78% rename from modules/siren-jsx.el rename to modules/languages/siren-jsx.el index 548ad1c..e4840b5 100644 --- a/modules/siren-jsx.el +++ b/modules/languages/siren-jsx.el @@ -15,13 +15,11 @@ :init (defun siren-rjsx-mode-setup () - (siren-prog-mode-setup) - - (prettier-js-mode) + (prettier-js-mode +1) (company-mode +1) (subword-mode +1) - (hs-minor-mode 1) - (highlight-indentation-current-column-mode) + (hs-minor-mode +1) + (highlight-indentation-current-column-mode +1) (hideshowvis-enable))) (provide 'siren-jsx) diff --git a/modules/siren-lisp.el b/modules/languages/siren-lisp.el similarity index 94% rename from modules/siren-lisp.el rename to modules/languages/siren-lisp.el index 9d5f4f7..efe9fe2 100644 --- a/modules/siren-lisp.el +++ b/modules/languages/siren-lisp.el @@ -6,7 +6,7 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-highlight-indent-guides) ;; Lisp configuration (define-key read-expression-map (kbd "TAB") 'completion-at-point) diff --git a/modules/siren-lua.el b/modules/languages/siren-lua.el similarity index 88% rename from modules/siren-lua.el rename to modules/languages/siren-lua.el index f7ffb2b..2b0b258 100644 --- a/modules/siren-lua.el +++ b/modules/languages/siren-lua.el @@ -6,16 +6,12 @@ ;;; Code: -(require 'siren-programming) - (use-package lua-mode :hook (lua-mode . siren-lua-mode-setup) :init (defun siren-lua-mode-setup () - (siren-prog-mode-setup) - (setq lua-indent-level 2 whitespace-action '(auto-cleanup)) diff --git a/modules/languages/siren-makefile.el b/modules/languages/siren-makefile.el new file mode 100644 index 0000000..55a5656 --- /dev/null +++ b/modules/languages/siren-makefile.el @@ -0,0 +1,23 @@ +;;; siren-makefile.el --- jimeh's Emacs Siren: makefile-mode configuration. + +;;; Commentary: + +;; Basic configuration for makefile-mode. + +;;; Code: + +(use-package make-mode + :ensure nil ;; loaded from emacs built-ins + :hook + (makefile-mode-hook . siren-makefile-mode-setup) + + :init + (add-to-list 'siren-indent-sensitive-modes 'makefile-mode) + (defun siren-makefile-mode-setup () + (subword-mode +1) + (setq tab-width 4) + (highlight-indentation-set-offset 4) + (highlight-indentation-current-column-mode))) + +(provide 'siren-makefile) +;;; siren-makefile.el ends here diff --git a/modules/siren-markdown.el b/modules/languages/siren-markdown.el similarity index 86% rename from modules/siren-markdown.el rename to modules/languages/siren-markdown.el index 30e678a..1ab83e9 100644 --- a/modules/siren-markdown.el +++ b/modules/languages/siren-markdown.el @@ -6,7 +6,9 @@ ;;; Code: +(require 'siren-fci) (require 'siren-flyspell) +(require 'siren-linum) (require 'siren-smartparens) (use-package markdown-mode @@ -25,14 +27,13 @@ :init (defun siren-markdown-mode-setup () - (setq whitespace-action nil - fill-column 80 - markdown-asymmetric-header t) + (setq markdown-asymmetric-header t + whitespace-action nil) - (fci-mode) - (linum-mode t) - (flyspell-mode) (auto-fill-mode) + (fci-mode) + (flyspell-mode) + (linum-mode t) (smartparens-mode +1) (subword-mode)) diff --git a/modules/languages/siren-org-mode.el b/modules/languages/siren-org-mode.el new file mode 100644 index 0000000..91cb84b --- /dev/null +++ b/modules/languages/siren-org-mode.el @@ -0,0 +1,43 @@ +;;; siren-org-mode.el --- jimeh's Emacs Siren: org-mode configuration. + +;;; Commentary: + +;; Basic configuration for org-mode. + +;;; Code: + +(require 'siren-fci) +(require 'siren-flyspell) +(require 'siren-linum) +(require 'siren-smartparens) + +(use-package org-mode + :ensure nil ;; loaded from emacs built-ins + :hook (org-mode-hook . siren-org-mode-setup) + + :init + (defun siren-org-mode-setup () + (setq org-export-backends '(ascii html icalendar latex md confluence) + fill-column 80 + whitespace-action '(auto-cleanup)) + + (linum-mode t) + (flyspell-mode) + (fci-mode) + (smartparens-mode +1) + (visual-line-mode +1) + (whitespace-mode +1) + (let ((map org-mode-map)) + (define-key map (kbd "M-[") 'org-promote-subtree) + (define-key map (kbd "M-]") 'org-demote-subtree) + (define-key map (kbd "M-p") 'org-metaup) + (define-key map (kbd "M-n") 'org-metadown) + (define-key map (kbd "C-M-n") 'outline-next-visible-heading) + (define-key map (kbd "C-M-p") 'outline-previous-visible-heading)))) + +(use-package org-mouse + :ensure nil ;; loaded from emacs built-ins + :after org-mode) + +(provide 'siren-org-mode) +;;; siren-org-mode.el ends here diff --git a/modules/siren-php.el b/modules/languages/siren-php.el similarity index 89% rename from modules/siren-php.el rename to modules/languages/siren-php.el index e3cce60..28dfd59 100644 --- a/modules/siren-php.el +++ b/modules/languages/siren-php.el @@ -6,7 +6,8 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-folding) +(require 'siren-highlight-indentation) (require 'siren-rainbow) (use-package php-mode @@ -17,7 +18,6 @@ :init (defun siren-php-mode-setup () - (siren-prog-mode-setup) (rainbow-mode +1) (company-mode +1) (subword-mode +1) diff --git a/modules/siren-plantuml.el b/modules/languages/siren-plantuml.el similarity index 90% rename from modules/siren-plantuml.el rename to modules/languages/siren-plantuml.el index c5f7a93..f7c601a 100644 --- a/modules/siren-plantuml.el +++ b/modules/languages/siren-plantuml.el @@ -6,7 +6,7 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-highlight-indentation) (use-package plantuml-mode :mode "\\.uml\\'" @@ -15,9 +15,9 @@ :init (defun siren-plantuml-mode-setup () - (siren-prog-mode-setup) (setq tab-width 2 plantuml-jar-path "/usr/local/opt/plantuml/libexec/plantuml.jar") + (highlight-indentation-set-offset 2) (highlight-indentation-current-column-mode))) diff --git a/modules/languages/siren-prog-mode.el b/modules/languages/siren-prog-mode.el new file mode 100644 index 0000000..464558e --- /dev/null +++ b/modules/languages/siren-prog-mode.el @@ -0,0 +1,24 @@ +;;; siren-prog-mode.el --- jimeh's Emacs Siren: defaults for programming modes + +;;; Commentary: + +;; Basic configuration shared across all programming languages. + +;;; Code: + +(use-package prog-mode + :ensure nil ;; loaded from emacs built-ins + :hook + (prog-mode . siren-prog-mode-setup) + + :init + (defun siren-prog-mode-setup () + "Default coding hook, useful with any programming language." + (setq fill-column 80 + whitespace-action '(auto-cleanup)) + + (visual-line-mode +1) + (whitespace-mode +1))) + +(provide 'siren-prog-mode) +;;; siren-prog-mode.el ends here diff --git a/modules/siren-ruby.el b/modules/languages/siren-ruby.el similarity index 96% rename from modules/siren-ruby.el rename to modules/languages/siren-ruby.el index 35ef76a..99efa72 100644 --- a/modules/siren-ruby.el +++ b/modules/languages/siren-ruby.el @@ -8,7 +8,7 @@ (require 'siren-company) (require 'siren-folding) -(require 'siren-programming) +(require 'siren-highlight-indentation) (require 'siren-smartparens) (require 'siren-toggle-quotes) @@ -50,8 +50,6 @@ :init (defun siren-ruby-mode-setup () - (siren-prog-mode-setup) - (setq c-tab-always-indent nil ruby-align-chained-calls t ruby-insert-encoding-magic-comment t @@ -99,7 +97,7 @@ '(push 'company-robe company-backends)) :config - ;; Unbind keys used by siren-text-manipulation module + ;; Unbind keys used by siren-expand-region module (unbind-key "M-." robe-mode-map) (unbind-key "M-," robe-mode-map)) diff --git a/modules/siren-rust.el b/modules/languages/siren-rust.el similarity index 93% rename from modules/siren-rust.el rename to modules/languages/siren-rust.el index ae63f0b..bfbf3c0 100644 --- a/modules/siren-rust.el +++ b/modules/languages/siren-rust.el @@ -6,9 +6,8 @@ ;;; Code: -(require 'siren-flycheck) (require 'siren-folding) -(require 'siren-programming) +(require 'siren-highlight-indentation) (use-package rust-mode :mode "\\.rs\\'" @@ -22,8 +21,6 @@ :init (defun siren-rust-mode-setup () - (siren-prog-mode-setup) - (setq rust-format-on-save t) (hs-minor-mode 1) diff --git a/modules/siren-sass.el b/modules/languages/siren-sass.el similarity index 100% rename from modules/siren-sass.el rename to modules/languages/siren-sass.el diff --git a/modules/siren-scss.el b/modules/languages/siren-scss.el similarity index 84% rename from modules/siren-scss.el rename to modules/languages/siren-scss.el index 9f347c2..e40b6f2 100644 --- a/modules/siren-scss.el +++ b/modules/languages/siren-scss.el @@ -12,12 +12,13 @@ :mode "\\.scss\\'" :hook (scss-mode-hook . siren-scss-mode-setup) + :init + (defun siren-scss-mode-setup () + (siren-css-mode-setup)) + :config ;; turn off annoying auto-compile on save - (setq scss-compile-at-save nil) - - (defun siren-scss-mode-setup () - (siren-css-mode-setup))) + (setq scss-compile-at-save nil)) (provide 'siren-scss) ;;; siren-scss.el ends here diff --git a/modules/languages/siren-sh.el b/modules/languages/siren-sh.el new file mode 100644 index 0000000..e80b10d --- /dev/null +++ b/modules/languages/siren-sh.el @@ -0,0 +1,29 @@ +;;; siren-sh.el --- jimeh's Emacs Siren: sh-mode configuration. + +;;; Commentary: + +;; Basic configuration for sh-mode. + +;;; Code: + +(require 'siren-highlight-indentation) + +(use-package sh-script + :ensure nil ;; loaded from emacs built-ins + :hook + (sh-mode-hook . siren-sh-mode-setup) + + :init + (defun siren-sh-mode-setup () + (setq tab-width 2 + sh-basic-offset 2 + sh-indentation 2 + whitespace-action '(auto-cleanup)) + + (subword-mode +1) + (highlight-indentation-set-offset 2) + (highlight-indentation-current-column-mode) + (define-key sh-mode-map (kbd "RET") 'newline-and-indent))) + +(provide 'siren-sh) +;;; siren-sh.el ends here diff --git a/modules/siren-slim.el b/modules/languages/siren-slim.el similarity index 60% rename from modules/siren-slim.el rename to modules/languages/siren-slim.el index 02e0a88..12ee148 100644 --- a/modules/siren-slim.el +++ b/modules/languages/siren-slim.el @@ -6,17 +6,15 @@ ;;; Code: +(require 'siren-highlight-indentation) + (use-package slim-mode :mode "\\.slim\\'" :hook (slim-mode-hook . siren-slim-mode-hook) :init (defun siren-slim-mode-setup () - (siren-prog-mode-setup) - (highlight-indentation-current-column-mode)) - - (setq siren-slim-mode-hook 'siren-slim-mode-defaults) - (add-hook 'slim-mode-hook (lambda () (run-hooks 'siren-slim-mode-hook)))) + (highlight-indentation-current-column-mode))) (provide 'siren-slim) ;;; siren-slim.el ends here diff --git a/modules/languages/siren-text-mode.el b/modules/languages/siren-text-mode.el new file mode 100644 index 0000000..c4b2a4f --- /dev/null +++ b/modules/languages/siren-text-mode.el @@ -0,0 +1,17 @@ +;;; siren-text-mode.el --- jimeh's Emacs Siren: text-mode configuration. + +;;; Commentary: + +;; Basic configuration for text-mode. + +;;; Code: + +(use-package text-mode + :ensure nil ;; loaded from emacs built-ins + :hook (text-mode . siren-text-mode-setup) + :init + (defun siren-text-mode-setup () + (setq fill-column 80))) + +(provide 'siren-text-mode) +;;; siren-text-mode.el ends here diff --git a/modules/siren-thrift.el b/modules/languages/siren-thrift.el similarity index 54% rename from modules/siren-thrift.el rename to modules/languages/siren-thrift.el index ff827a4..e7d3fac 100644 --- a/modules/siren-thrift.el +++ b/modules/languages/siren-thrift.el @@ -6,7 +6,14 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-fci) +(require 'siren-flyspell) +(require 'siren-linum) +(require 'siren-prog-mode) +(require 'siren-flycheck) +(require 'siren-highlight-indentation) +(require 'siren-highlight-symbol) +(require 'siren-smartparens) (use-package thrift :mode "\\.thrift\\'" @@ -15,9 +22,16 @@ :init (defun siren-thrift-mode-setup () (siren-prog-mode-setup) - (setq tab-width 2) + + (fci-mode) + (flycheck-mode) + (flyspell-prog-mode) (highlight-indentation-current-column-mode) + (highlight-indentation-set-offset 2) + (highlight-symbol-mode) + (linum-mode) + (smartparens-mode) (subword-mode +1))) (provide 'siren-thrift) diff --git a/modules/siren-web-mode.el b/modules/languages/siren-web-mode.el similarity index 89% rename from modules/siren-web-mode.el rename to modules/languages/siren-web-mode.el index b9b2138..604cd03 100644 --- a/modules/siren-web-mode.el +++ b/modules/languages/siren-web-mode.el @@ -6,7 +6,10 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-company) +(require 'siren-fci) +(require 'siren-folding) +(require 'siren-highlight-indentation) (use-package web-mode :mode @@ -25,7 +28,6 @@ "Default tweaks for `web-mode'." (setq tab-width 2) - (siren-prog-mode-setup) (company-mode +1) (fci-mode -1) (hideshowvis-enable) diff --git a/modules/siren-yaml.el b/modules/languages/siren-yaml.el similarity index 71% rename from modules/siren-yaml.el rename to modules/languages/siren-yaml.el index 02beb45..7e31495 100644 --- a/modules/siren-yaml.el +++ b/modules/languages/siren-yaml.el @@ -6,7 +6,12 @@ ;;; Code: -(require 'siren-programming) +(require 'siren-fci) +(require 'siren-flyspell) +(require 'siren-highlight-indentation) +(require 'siren-linum) +(require 'siren-prog-mode) +(require 'siren-smartparens) (use-package yaml-mode :mode "\\.yml\\'" "\\.yaml\\'" @@ -22,8 +27,12 @@ (setq tab-width 2 whitespace-action '(auto-cleanup)) - (highlight-indentation-set-offset 2) + (fci-mode) + (flyspell-mode) (highlight-indentation-current-column-mode) + (highlight-indentation-set-offset 2) + (linum-mode t) + (smartparens-mode +1) (subword-mode +1))) (provide 'siren-yaml) diff --git a/modules/siren-eslintd-fix.el b/modules/linting/siren-eslintd-fix.el similarity index 100% rename from modules/siren-eslintd-fix.el rename to modules/linting/siren-eslintd-fix.el diff --git a/modules/siren-flycheck.el b/modules/linting/siren-flycheck.el similarity index 93% rename from modules/siren-flycheck.el rename to modules/linting/siren-flycheck.el index 3f741c1..4b7d2f7 100644 --- a/modules/siren-flycheck.el +++ b/modules/linting/siren-flycheck.el @@ -7,6 +7,7 @@ ;;; Code: (use-package flycheck + :hook (prog-mode . flycheck-mode) :config (setq flycheck-completion-system 'ido flycheck-idle-change-delay 1.0 diff --git a/modules/siren-prettier-js.el b/modules/linting/siren-prettier-js.el similarity index 100% rename from modules/siren-prettier-js.el rename to modules/linting/siren-prettier-js.el diff --git a/modules/siren-rubocop.el b/modules/linting/siren-rubocop.el similarity index 100% rename from modules/siren-rubocop.el rename to modules/linting/siren-rubocop.el diff --git a/modules/siren-zone.el b/modules/misc/siren-zone.el similarity index 100% rename from modules/siren-zone.el rename to modules/misc/siren-zone.el diff --git a/modules/siren-anzu.el b/modules/navigation/siren-anzu.el similarity index 100% rename from modules/siren-anzu.el rename to modules/navigation/siren-anzu.el diff --git a/modules/siren-avy.el b/modules/navigation/siren-avy.el similarity index 100% rename from modules/siren-avy.el rename to modules/navigation/siren-avy.el diff --git a/modules/siren-dired.el b/modules/navigation/siren-dired.el similarity index 77% rename from modules/siren-dired.el rename to modules/navigation/siren-dired.el index 20684c0..4ca366f 100644 --- a/modules/siren-dired.el +++ b/modules/navigation/siren-dired.el @@ -17,7 +17,11 @@ (defun siren-dired-mode-setup () (linum-mode t) (define-key dired-mode-map (kbd "c") 'dired-create-directory) - (toggle-diredp-find-file-reuse-dir 1))) + (toggle-diredp-find-file-reuse-dir 1)) + + :config + (unbind-key "M-i" dired-mode-map) + (unbind-key "M-l" dired-mode-map)) (provide 'siren-dired) ;;; siren-dired.el ends here diff --git a/modules/siren-direx.el b/modules/navigation/siren-direx.el similarity index 100% rename from modules/siren-direx.el rename to modules/navigation/siren-direx.el diff --git a/modules/siren-dumb-jump.el b/modules/navigation/siren-dumb-jump.el similarity index 100% rename from modules/siren-dumb-jump.el rename to modules/navigation/siren-dumb-jump.el diff --git a/modules/siren-folding.el b/modules/navigation/siren-folding.el similarity index 100% rename from modules/siren-folding.el rename to modules/navigation/siren-folding.el diff --git a/modules/siren-full-ack.el b/modules/navigation/siren-full-ack.el similarity index 100% rename from modules/siren-full-ack.el rename to modules/navigation/siren-full-ack.el diff --git a/modules/siren-git-link.el b/modules/navigation/siren-git-link.el similarity index 100% rename from modules/siren-git-link.el rename to modules/navigation/siren-git-link.el diff --git a/modules/siren-goto-symbol.el b/modules/navigation/siren-goto-symbol.el similarity index 100% rename from modules/siren-goto-symbol.el rename to modules/navigation/siren-goto-symbol.el diff --git a/modules/siren-helm-ag.el b/modules/navigation/siren-helm-ag.el similarity index 100% rename from modules/siren-helm-ag.el rename to modules/navigation/siren-helm-ag.el diff --git a/modules/siren-helm-gtags.el b/modules/navigation/siren-helm-gtags.el similarity index 100% rename from modules/siren-helm-gtags.el rename to modules/navigation/siren-helm-gtags.el diff --git a/modules/siren-helm-open-github.el b/modules/navigation/siren-helm-open-github.el similarity index 100% rename from modules/siren-helm-open-github.el rename to modules/navigation/siren-helm-open-github.el diff --git a/modules/siren-helm-swoop.el b/modules/navigation/siren-helm-swoop.el similarity index 100% rename from modules/siren-helm-swoop.el rename to modules/navigation/siren-helm-swoop.el diff --git a/modules/siren-helm.el b/modules/navigation/siren-helm.el similarity index 100% rename from modules/siren-helm.el rename to modules/navigation/siren-helm.el diff --git a/modules/siren-highlight-symbol.el b/modules/navigation/siren-highlight-symbol.el similarity index 91% rename from modules/siren-highlight-symbol.el rename to modules/navigation/siren-highlight-symbol.el index dfb3e4c..edaa677 100644 --- a/modules/siren-highlight-symbol.el +++ b/modules/navigation/siren-highlight-symbol.el @@ -12,6 +12,9 @@ ("C-c C-p" . highlight-symbol-prev) ("C-c C-n" . highlight-symbol-next) + :hook + (prog-mode . highlight-symbol-mode) + :config (setq highlight-symbol-highlight-single-occurrence 'nil highlight-symbol-idle-delay 0.5)) diff --git a/modules/siren-move-beginning-of-line.el b/modules/navigation/siren-move-beginning-of-line.el similarity index 100% rename from modules/siren-move-beginning-of-line.el rename to modules/navigation/siren-move-beginning-of-line.el diff --git a/modules/siren-scroll-half-screen.el b/modules/navigation/siren-scroll-half-screen.el similarity index 100% rename from modules/siren-scroll-half-screen.el rename to modules/navigation/siren-scroll-half-screen.el diff --git a/modules/siren-swiper.el b/modules/navigation/siren-swiper.el similarity index 100% rename from modules/siren-swiper.el rename to modules/navigation/siren-swiper.el diff --git a/modules/siren-all-the-icons.el b/modules/projects/siren-all-the-icons.el similarity index 100% rename from modules/siren-all-the-icons.el rename to modules/projects/siren-all-the-icons.el diff --git a/modules/siren-ecb.el b/modules/projects/siren-ecb.el similarity index 100% rename from modules/siren-ecb.el rename to modules/projects/siren-ecb.el diff --git a/modules/siren-editorconfig.el b/modules/projects/siren-editorconfig.el similarity index 100% rename from modules/siren-editorconfig.el rename to modules/projects/siren-editorconfig.el diff --git a/modules/siren-helm-projectile.el b/modules/projects/siren-helm-projectile.el similarity index 100% rename from modules/siren-helm-projectile.el rename to modules/projects/siren-helm-projectile.el diff --git a/modules/siren-neotree.el b/modules/projects/siren-neotree.el similarity index 100% rename from modules/siren-neotree.el rename to modules/projects/siren-neotree.el diff --git a/modules/siren-project-explorer.el b/modules/projects/siren-project-explorer.el similarity index 100% rename from modules/siren-project-explorer.el rename to modules/projects/siren-project-explorer.el diff --git a/modules/siren-projectile.el b/modules/projects/siren-projectile.el similarity index 100% rename from modules/siren-projectile.el rename to modules/projects/siren-projectile.el diff --git a/modules/siren-treemacs.el b/modules/projects/siren-treemacs.el similarity index 100% rename from modules/siren-treemacs.el rename to modules/projects/siren-treemacs.el diff --git a/modules/siren-flyspell.el b/modules/siren-flyspell.el deleted file mode 100644 index 2f45abf..0000000 --- a/modules/siren-flyspell.el +++ /dev/null @@ -1,17 +0,0 @@ -;;; siren-flyspell.el --- jimeh's Emacs Siren: flyspell configuration. - -;;; Commentary: - -;; Basic configuration for flyspell. - -;;; Code: - -(require 'flyspell) -(diminish 'flyspell-mode) -(setq ispell-program-name "aspell" ; use aspell instead of ispell - ispell-extra-args '("--lang=en" "--sug-mode=ultra")) - -(global-set-key (kbd "s-.") 'flyspell-correct-word-before-point) - -(provide 'siren-flyspell) -;;; siren-flyspell.el ends here diff --git a/modules/siren-js.el b/modules/siren-js.el deleted file mode 100644 index df3a540..0000000 --- a/modules/siren-js.el +++ /dev/null @@ -1,39 +0,0 @@ -;;; siren-js.el --- jimeh's Emacs Siren: js-mode configuration. - -;;; Commentary: - -;; Basic configuration for js-mode. - -;;; Code: - -(require 'siren-prettier-js) -(require 'siren-folding) -(require 'siren-programming) - -(add-to-list 'auto-mode-alist '("\\.js\\'" . js-mode)) -(add-to-list 'auto-mode-alist '("\\.pac\\'" . js-mode)) -(add-to-list 'interpreter-mode-alist '("node" . js-mode)) - -(defun siren-js-mode-setup () - "Default tweaks for `js-mode'." - (let ((width 2)) - (setq js-indent-level width - indent-level width - tab-width width)) - - (siren-prog-mode-setup) - (prettier-js-mode) - (company-mode +1) - (subword-mode +1) - (hs-minor-mode 1) - (highlight-indentation-current-column-mode) - (hideshowvis-enable) - - (let ((map js-mode-map)) - (define-key map (kbd "C-j") 'newline-and-indent) - (define-key map (kbd "C-c C-h") 'siren-toggle-hiding))) - -(add-hook 'js-mode-hook #'siren-js-mode-setup) - -(provide 'siren-js) -;;; siren-js.el ends here diff --git a/modules/siren-makefile.el b/modules/siren-makefile.el deleted file mode 100644 index baeaed3..0000000 --- a/modules/siren-makefile.el +++ /dev/null @@ -1,23 +0,0 @@ -;;; siren-makefile.el --- jimeh's Emacs Siren: makefile-mode configuration. - -;;; Commentary: - -;; Basic configuration for makefile-mode. - -;;; Code: - -(require 'siren-programming) - -(add-to-list 'siren-indent-sensitive-modes 'makefile-mode) - -(defun siren-makefile-mode-setup () - (siren-prog-mode-setup) - (subword-mode) - (setq tab-width 4) - (highlight-indentation-set-offset 4) - (highlight-indentation-current-column-mode)) - -(add-hook 'makefile-mode-hook #'siren-makefile-mode-setup) - -(provide 'siren-makefile) -;;; siren-makefile.el ends here diff --git a/modules/siren-org-mode.el b/modules/siren-org-mode.el deleted file mode 100644 index dbbb764..0000000 --- a/modules/siren-org-mode.el +++ /dev/null @@ -1,37 +0,0 @@ -;;; siren-org-mode.el --- jimeh's Emacs Siren: org-mode configuration. - -;;; Commentary: - -;; Basic configuration for org-mode. - -;;; Code: - -(require 'siren-fci) -(require 'siren-flyspell) -(require 'siren-smartparens) - -(defun siren-org-mode-setup () - (setq org-export-backends '(ascii html icalendar latex md confluence) - fill-column 80 - whitespace-action '(auto-cleanup)) - - (require 'org-mouse) - - (linum-mode t) - (flyspell-mode) - (fci-mode) - (smartparens-mode +1) - (visual-line-mode +1) - (whitespace-mode +1) - (let ((map org-mode-map)) - (define-key map (kbd "M-[") 'org-promote-subtree) - (define-key map (kbd "M-]") 'org-demote-subtree) - (define-key map (kbd "M-p") 'org-metaup) - (define-key map (kbd "M-n") 'org-metadown) - (define-key map (kbd "C-M-n") 'outline-next-visible-heading) - (define-key map (kbd "C-M-p") 'outline-previous-visible-heading))) - -(add-hook 'org-mode-hook #'siren-org-mode-setup) - -(provide 'siren-org-mode) -;;; siren-org-mode.el ends here diff --git a/modules/siren-phi-search.el b/modules/siren-phi-search.el deleted file mode 100644 index 2eef5a1..0000000 --- a/modules/siren-phi-search.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; siren-phi-search.el --- jimeh's Emacs Siren: phi-search configuration. - -;;; Commentary: - -;; Basic configuration for phi-search. - -;;; Code: - -(use-package phi-search - :config - (setq phi-search-limit 3000)) - -(provide 'siren-phi-search) -;;; siren-phi-search.el ends here diff --git a/modules/siren-programming.el b/modules/siren-programming.el deleted file mode 100644 index 8b5dabf..0000000 --- a/modules/siren-programming.el +++ /dev/null @@ -1,32 +0,0 @@ -;;; siren-programming.el --- jimeh's Emacs Siren: defaults for programming modes - -;;; Commentary: - -;; Basic configuration shared across all programming languages. - -;;; Code: - -(require 'siren-fci) -(require 'siren-flycheck) -(require 'siren-flyspell) -(require 'siren-smartparens) -(require 'siren-highlight-indentation) -(require 'siren-highlight-symbol) - -(defun siren-prog-mode-setup () - "Default coding hook, useful with any programming language." - (setq fill-column 80) - (linum-mode t) - (flyspell-prog-mode) - (flycheck-mode +1) - (fci-mode) - (smartparens-mode +1) - (highlight-symbol-mode) - (setq whitespace-action '(auto-cleanup)) - (visual-line-mode +1) - (whitespace-mode +1)) - -(add-hook 'prog-mode-hook #'siren-prog-mode-setup) - -(provide 'siren-programming) -;;; siren-programming.el ends here diff --git a/modules/siren-sh.el b/modules/siren-sh.el deleted file mode 100644 index 2ccc539..0000000 --- a/modules/siren-sh.el +++ /dev/null @@ -1,27 +0,0 @@ -;;; siren-sh.el --- jimeh's Emacs Siren: sh-mode configuration. - -;;; Commentary: - -;; Basic configuration for sh-mode. - -;;; Code: - -(require 'siren-programming) - -(defun siren-sh-mode-setup () - (siren-prog-mode-setup) - - (setq tab-width 2 - sh-basic-offset 2 - sh-indentation 2 - whitespace-action '(auto-cleanup)) - - (subword-mode +1) - (highlight-indentation-set-offset 2) - (highlight-indentation-current-column-mode) - (define-key sh-mode-map (kbd "RET") 'newline-and-indent)) - -(add-hook 'sh-mode-hook #'siren-sh-mode-setup) - -(provide 'siren-sh) -;;; siren-sh.el ends here diff --git a/modules/siren-text-manipulation.el b/modules/siren-text-manipulation.el deleted file mode 100644 index 18d1fcf..0000000 --- a/modules/siren-text-manipulation.el +++ /dev/null @@ -1,86 +0,0 @@ -;;; siren-text-manipulation.el --- jimeh's Emacs Siren: text-manipulation. - -;;; Commentary: - -;; Various text manipulation functions and keybindings. Some of them shamelessly -;; ripped from textmate.el: https://github.com/defunkt/textmate.el - -;;; Code: - -(use-package move-dup - :bind - ("M-p" . md/move-lines-up) - ("M-n" . md/move-lines-down) - ("C-x C-d" . md/duplicate-down)) - -(use-package expand-region - :bind - ("M-." . er/expand-region) - ("M-," . er/contract-region)) - -(use-package smart-shift - :bind - ("C-c [" . smart-shift-left) - ("C-c ]" . smart-shift-right) - ("M-[" . smart-shift-left) - ("M-]" . smart-shift-right)) - -(defmacro allow-line-as-region-for-function (orig-function) -`(defun ,(intern (concat (symbol-name orig-function) "-or-line")) - () - ,(format "Like `%s', but acts on the current line if mark is not active." - orig-function) - (interactive) - (if mark-active - (call-interactively (function ,orig-function)) - (save-excursion - ;; define a region (temporarily) -- so any C-u prefixes etc. are preserved. - (beginning-of-line) - (set-mark (point)) - (end-of-line) - (call-interactively (function ,orig-function)))))) - -(unless (fboundp 'comment-or-uncomment-region-or-line) - (allow-line-as-region-for-function comment-or-uncomment-region)) - -;; from: https://www.emacswiki.org/emacs/RandomizeBuffer -(defun randomize-region (beg end) - "Randomize lines in region from BEG to END." - (interactive "*r") - (let ((lines (split-string - (delete-and-extract-region beg end) "\n"))) - (when (string-equal "" (car (last lines 1))) - (setq lines (butlast lines 1))) - (apply 'insert - (mapcar 'cdr - (sort (mapcar - (lambda (x) (cons (random) (concat x "\n"))) lines) - (lambda (a b) (< (car a) (car b)))))))) - -;; from: https://www.emacswiki.org/emacs/SortWords -(defun sort-words (reverse beg end) - "Sort words in region alphabetically, in REVERSE if negative. -Prefixed with negative \\[universal-argument], sorts in reverse. - -The variable `sort-fold-case' determines whether alphabetic case -affects the sort order. - -See `sort-regexp-fields'." - (interactive "*P\nr") - (sort-regexp-fields reverse "\\w+" "\\&" beg end)) - -(global-set-key (kbd "C-c /") 'comment-or-uncomment-region-or-line) -(global-set-key (kbd "C-c C-/") 'comment-or-uncomment-region-or-line) - -;; from: https://www.emacswiki.org/emacs/SortWords -(defun sort-symbols (reverse beg end) - "Sort symbols in region alphabetically, in REVERSE if negative. -See `sort-words'." - (interactive "*P\nr") - (sort-regexp-fields reverse "\\(\\sw\\|\\s_\\)+" "\\&" beg end)) - -(defalias 'sw 'sort-words) -(defalias 'ss 'sort-symbols) - -(provide 'siren-text-manipulation) -;;; siren-text-manipulation.el ends here diff --git a/modules/siren-window-management.el b/modules/siren-window-management.el deleted file mode 100644 index 144d042..0000000 --- a/modules/siren-window-management.el +++ /dev/null @@ -1,33 +0,0 @@ -;;; siren-window-management.el --- jimeh's Emacs Siren: window-management. - -;;; Commentary: - -;; Basic window management stuff. - -;;; Code: - -(use-package buffer-move - :bind - ("M-K" . buf-move-down) - ("M-I" . buf-move-up) - ("M-J" . buf-move-left) - ("M-L" . buf-move-right)) - -(require 'windmove) - -(defun ignore-error-wrapper (fn) - "Funtion return new function that ignore errors. - The function wraps a function with `ignore-errors' macro." - (lexical-let ((fn fn)) - (lambda () - (interactive) - (ignore-errors (funcall fn))))) - -;; Navigate to windows -(global-set-key (kbd "M-k") (ignore-error-wrapper 'windmove-down)) -(global-set-key (kbd "M-i") (ignore-error-wrapper 'windmove-up)) -(global-set-key (kbd "M-j") (ignore-error-wrapper 'windmove-left)) -(global-set-key (kbd "M-l") (ignore-error-wrapper 'windmove-right)) - -(provide 'siren-window-management) -;;; siren-window-management.el ends here diff --git a/modules/spelling/siren-flyspell.el b/modules/spelling/siren-flyspell.el new file mode 100644 index 0000000..77ad191 --- /dev/null +++ b/modules/spelling/siren-flyspell.el @@ -0,0 +1,28 @@ +;;; siren-flyspell.el --- jimeh's Emacs Siren: flyspell configuration. + +;;; Commentary: + +;; Basic configuration for flyspell. + +;;; Code: + +(use-package flyspell + :ensure nil ;; loaded from emacs built-ins + :demand + :diminish flyspell-mode + :bind + ("s-." . flyspell-correct-word-before-point) + + :hook + (prog-mode . flyspell-prog-mode) + + :config + ;; Ensure flyspell does not override keybindings of siren-goto-chg module. + (unbind-key "C-." flyspell-mode-map) + (unbind-key "C-," flyspell-mode-map) + + (setq ispell-program-name "aspell" ; use aspell instead of ispell + ispell-extra-args '("--lang=en" "--sug-mode=ultra"))) + +(provide 'siren-flyspell) +;;; siren-flyspell.el ends here diff --git a/modules/text-editing/siren-expand-region.el b/modules/text-editing/siren-expand-region.el new file mode 100644 index 0000000..e21254d --- /dev/null +++ b/modules/text-editing/siren-expand-region.el @@ -0,0 +1,15 @@ +;;; siren-expand-region.el --- jimeh's Emacs Siren: expand-region + +;;; Commentary: + +;; Configuration for expand-region + +;;; Code: + +(use-package expand-region + :bind + ("M-." . er/expand-region) + ("M-," . er/contract-region)) + +(provide 'siren-expand-region) +;;; siren-expand-region.el ends here diff --git a/modules/siren-goto-chg.el b/modules/text-editing/siren-goto-chg.el similarity index 50% rename from modules/siren-goto-chg.el rename to modules/text-editing/siren-goto-chg.el index 32f7abd..a52748d 100644 --- a/modules/siren-goto-chg.el +++ b/modules/text-editing/siren-goto-chg.el @@ -8,12 +8,6 @@ (use-package goto-chg :bind (("C-." . goto-last-change) - ("C-," . goto-last-change-reverse) - ;; Flyspell uses C-. and C-, itself in a such a way that this is the - ;; only way to make goto-chg bind to those keys while flyspell-mode is - ;; enabled. - :map flyspell-mode-map - ("C-." . goto-last-change) ("C-," . goto-last-change-reverse))) (provide 'siren-goto-chg) diff --git a/modules/text-editing/siren-move-dup.el b/modules/text-editing/siren-move-dup.el new file mode 100644 index 0000000..7b7ede2 --- /dev/null +++ b/modules/text-editing/siren-move-dup.el @@ -0,0 +1,16 @@ +;;; siren-move-dup.el --- jimeh's Emacs Siren: move-dup + +;;; Commentary: + +;; Configuration for move-dup + +;;; Code: + +(use-package move-dup + :bind + ("M-p" . md/move-lines-up) + ("M-n" . md/move-lines-down) + ("C-x C-d" . md/duplicate-down)) + +(provide 'siren-move-dup) +;;; siren-move-dup.el ends here diff --git a/modules/siren-multiple-cursors.el b/modules/text-editing/siren-multiple-cursors.el similarity index 83% rename from modules/siren-multiple-cursors.el rename to modules/text-editing/siren-multiple-cursors.el index 787d0fa..17a1f13 100644 --- a/modules/siren-multiple-cursors.el +++ b/modules/text-editing/siren-multiple-cursors.el @@ -6,8 +6,6 @@ ;;; Code: -(require 'siren-phi-search) - (use-package multiple-cursors :bind ("C-x C-@" . mc/edit-lines) ;; Terminal @@ -23,5 +21,10 @@ (global-unset-key (kbd "M-")) ;; must unset key first (global-set-key (kbd "M-") 'mc/add-cursor-on-click)) +;; Allows searching forward/back (C-s/C-r) searching with multiple cursors. +(use-package phi-search + :config + (setq phi-search-limit 3000)) + (provide 'siren-multiple-cursors) ;;; siren-multiple-cursors.el ends here diff --git a/modules/text-editing/siren-randomize-region.el b/modules/text-editing/siren-randomize-region.el new file mode 100644 index 0000000..e92f934 --- /dev/null +++ b/modules/text-editing/siren-randomize-region.el @@ -0,0 +1,24 @@ +;;; siren-randomize-region.el --- jimeh's Emacs Siren: randomize-region + +;;; Commentary: + +;; Helper command to randomize the order of lines in region. Shamelessly ripped +;; from: https://www.emacswiki.org/emacs/RandomizeBuffer + +;;; Code: + +(defun randomize-region (beg end) + "Randomize lines in region from BEG to END." + (interactive "*r") + (let ((lines (split-string + (delete-and-extract-region beg end) "\n"))) + (when (string-equal "" (car (last lines 1))) + (setq lines (butlast lines 1))) + (apply 'insert + (mapcar 'cdr + (sort (mapcar + (lambda (x) (cons (random) (concat x "\n"))) lines) + (lambda (a b) (< (car a) (car b)))))))) + +(provide 'siren-randomize-region) +;;; siren-randomize-region.el ends here diff --git a/modules/text-editing/siren-smart-shift.el b/modules/text-editing/siren-smart-shift.el new file mode 100644 index 0000000..4586593 --- /dev/null +++ b/modules/text-editing/siren-smart-shift.el @@ -0,0 +1,17 @@ +;;; siren-smart-shift.el --- jimeh's Emacs Siren: smart-shift + +;;; Commentary: + +;; Configuration for smart-shift + +;;; Code: + +(use-package smart-shift + :bind + ("C-c [" . smart-shift-left) + ("C-c ]" . smart-shift-right) + ("M-[" . smart-shift-left) + ("M-]" . smart-shift-right)) + +(provide 'siren-smart-shift) +;;; siren-smart-shift.el ends here diff --git a/modules/siren-smartparens.el b/modules/text-editing/siren-smartparens.el similarity index 97% rename from modules/siren-smartparens.el rename to modules/text-editing/siren-smartparens.el index 989ab4c..b22e168 100644 --- a/modules/siren-smartparens.el +++ b/modules/text-editing/siren-smartparens.el @@ -27,6 +27,9 @@ ("C-" . sp-backward-kill-sexp) ("C-" . sp-kill-sexp)) + :hook + (prog-mode . smartparens-mode) + :config ;; smart pairing for all (require 'smartparens-config) diff --git a/modules/text-editing/siren-sort-symbols.el b/modules/text-editing/siren-sort-symbols.el new file mode 100644 index 0000000..1c4f7b6 --- /dev/null +++ b/modules/text-editing/siren-sort-symbols.el @@ -0,0 +1,19 @@ +;;; siren-sort-symbols.el --- jimeh's Emacs Siren: sort-symbols. + +;;; Commentary: + +;; Helper command to sort symbols in region. Shamelessly ripped from: +;; https://www.emacswiki.org/emacs/SortWords + +;;; Code: + +(defun sort-symbols (reverse beg end) + "Sort symbols in region alphabetically, in REVERSE if negative. +See `sort-symbols'." + (interactive "*P\nr") + (sort-regexp-fields reverse "\\(\\sw\\|\\s_\\)+" "\\&" beg end)) + +(defalias 'ss 'sort-symbols) + +(provide 'siren-sort-symbols) +;;; siren-sort-symbols.el ends here diff --git a/modules/text-editing/siren-sort-words.el b/modules/text-editing/siren-sort-words.el new file mode 100644 index 0000000..739861e --- /dev/null +++ b/modules/text-editing/siren-sort-words.el @@ -0,0 +1,24 @@ +;;; siren-sort-words.el --- jimeh's Emacs Siren: sort-words. + +;;; Commentary: + +;; Helper command to sort words in region. Shamelessly ripped from: +;; https://www.emacswiki.org/emacs/SortWords + +;;; Code: + +(defun sort-words (reverse beg end) + "Sort words in region alphabetically, in REVERSE if negative. +Prefixed with negative \\[universal-argument], sorts in reverse. + +The variable `sort-fold-case' determines whether alphabetic case +affects the sort order. + +See `sort-regexp-fields'." + (interactive "*P\nr") + (sort-regexp-fields reverse "\\w+" "\\&" beg end)) + +(defalias 'sw 'sort-words) + +(provide 'siren-sort-words) +;;; siren-sort-words.el ends here diff --git a/modules/siren-string-inflection.el b/modules/text-editing/siren-string-inflection.el similarity index 100% rename from modules/siren-string-inflection.el rename to modules/text-editing/siren-string-inflection.el diff --git a/modules/text-editing/siren-toggle-comments.el b/modules/text-editing/siren-toggle-comments.el new file mode 100644 index 0000000..4b7abfc --- /dev/null +++ b/modules/text-editing/siren-toggle-comments.el @@ -0,0 +1,32 @@ +;;; siren-toggle-comments.el --- jimeh's Emacs Siren: toggle-comments + +;;; Commentary: + +;; Allows to toggle comments for current line or selected region. Shamelessly +;; ripped from textmate.el: https://github.com/defunkt/textmate.el + +;;; Code: + +(defmacro allow-line-as-region-for-function (orig-function) + `(defun ,(intern (concat (symbol-name orig-function) "-or-line")) + () + ,(format "Like `%s', but acts on the current line if mark is not active." + orig-function) + (interactive) + (if mark-active + (call-interactively (function ,orig-function)) + (save-excursion + ;; define a region (temporarily) -- so any C-u prefixes etc. are preserved. + (beginning-of-line) + (set-mark (point)) + (end-of-line) + (call-interactively (function ,orig-function)))))) + +(unless (fboundp 'comment-or-uncomment-region-or-line) + (allow-line-as-region-for-function comment-or-uncomment-region)) + +(global-set-key (kbd "C-c /") 'comment-or-uncomment-region-or-line) +(global-set-key (kbd "C-c C-/") 'comment-or-uncomment-region-or-line) + +(provide 'siren-toggle-comments) +;;; siren-toggle-comments.el ends here diff --git a/modules/siren-toggle-quotes.el b/modules/text-editing/siren-toggle-quotes.el similarity index 100% rename from modules/siren-toggle-quotes.el rename to modules/text-editing/siren-toggle-quotes.el diff --git a/modules/siren-yasnippet.el b/modules/text-editing/siren-yasnippet.el similarity index 100% rename from modules/siren-yasnippet.el rename to modules/text-editing/siren-yasnippet.el diff --git a/modules/siren-diff-hl.el b/modules/version-control/siren-diff-hl.el similarity index 100% rename from modules/siren-diff-hl.el rename to modules/version-control/siren-diff-hl.el diff --git a/modules/siren-ediff.el b/modules/version-control/siren-ediff.el similarity index 100% rename from modules/siren-ediff.el rename to modules/version-control/siren-ediff.el diff --git a/modules/siren-git-timemachine.el b/modules/version-control/siren-git-timemachine.el similarity index 100% rename from modules/siren-git-timemachine.el rename to modules/version-control/siren-git-timemachine.el diff --git a/modules/siren-github.el b/modules/version-control/siren-github.el similarity index 100% rename from modules/siren-github.el rename to modules/version-control/siren-github.el diff --git a/modules/siren-magit.el b/modules/version-control/siren-magit.el similarity index 98% rename from modules/siren-magit.el rename to modules/version-control/siren-magit.el index 75e4a44..12c861f 100644 --- a/modules/siren-magit.el +++ b/modules/version-control/siren-magit.el @@ -8,7 +8,6 @@ (require 'siren-fci) (require 'siren-flyspell) -(require 'siren-ediff) (use-package magit :bind diff --git a/modules/windows/siren-buffer-move.el b/modules/windows/siren-buffer-move.el new file mode 100644 index 0000000..d16792d --- /dev/null +++ b/modules/windows/siren-buffer-move.el @@ -0,0 +1,17 @@ +;;; siren-buffer-move.el --- jimeh's Emacs Siren: buffer-move + +;;; Commentary: + +;; Configuration for buffer-move + +;;; Code: + +(use-package buffer-move + :bind + ("M-K" . buf-move-down) + ("M-I" . buf-move-up) + ("M-J" . buf-move-left) + ("M-L" . buf-move-right)) + +(provide 'siren-buffer-move) +;;; siren-buffer-move.el ends here diff --git a/modules/windows/siren-windmove.el b/modules/windows/siren-windmove.el new file mode 100644 index 0000000..98dec02 --- /dev/null +++ b/modules/windows/siren-windmove.el @@ -0,0 +1,18 @@ +;;; siren-windmove.el --- jimeh's Emacs Siren: windmove + +;;; Commentary: + +;; Configuration for windmove. + +;;; Code: + +(use-package windmove + :ensure nil ;; loaded from emacs built-ins + :config + (global-set-key (kbd "M-k") (siren-ignore-error-wrapper 'windmove-down)) + (global-set-key (kbd "M-i") (siren-ignore-error-wrapper 'windmove-up)) + (global-set-key (kbd "M-j") (siren-ignore-error-wrapper 'windmove-left)) + (global-set-key (kbd "M-l") (siren-ignore-error-wrapper 'windmove-right))) + +(provide 'siren-windmove) +;;; siren-windmove.el ends here diff --git a/modules/siren-zoom-window.el b/modules/windows/siren-zoom-window.el similarity index 100% rename from modules/siren-zoom-window.el rename to modules/windows/siren-zoom-window.el diff --git a/modules/siren-elscreen.el b/modules/workspaces/siren-elscreen.el similarity index 100% rename from modules/siren-elscreen.el rename to modules/workspaces/siren-elscreen.el diff --git a/modules/siren-escreen.el b/modules/workspaces/siren-escreen.el similarity index 100% rename from modules/siren-escreen.el rename to modules/workspaces/siren-escreen.el diff --git a/modules/siren-eyebrowse.el b/modules/workspaces/siren-eyebrowse.el similarity index 100% rename from modules/siren-eyebrowse.el rename to modules/workspaces/siren-eyebrowse.el diff --git a/modules/siren-perspective.el b/modules/workspaces/siren-perspective.el similarity index 100% rename from modules/siren-perspective.el rename to modules/workspaces/siren-perspective.el diff --git a/modules/siren-workgroups2.el b/modules/workspaces/siren-workgroups2.el similarity index 100% rename from modules/siren-workgroups2.el rename to modules/workspaces/siren-workgroups2.el From 8d7ab11d8cec5ee6b49b6e54e150ea97698813ab Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 17:42:14 +0100 Subject: [PATCH 37/38] Add resize-window package --- core/siren-modules.el | 1 + modules/languages/siren-ruby.el | 9 +++++++-- modules/spelling/siren-flyspell.el | 4 +++- modules/windows/siren-resize-window.el | 15 +++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 modules/windows/siren-resize-window.el diff --git a/core/siren-modules.el b/core/siren-modules.el index 4763091..9928a34 100644 --- a/core/siren-modules.el +++ b/core/siren-modules.el @@ -83,6 +83,7 @@ ;; Window management (require 'siren-buffer-move) +(require 'siren-resize-window) (require 'siren-windmove) (require 'siren-zoom-window) diff --git a/modules/languages/siren-ruby.el b/modules/languages/siren-ruby.el index 99efa72..12f855e 100644 --- a/modules/languages/siren-ruby.el +++ b/modules/languages/siren-ruby.el @@ -97,7 +97,7 @@ '(push 'company-robe company-backends)) :config - ;; Unbind keys used by siren-expand-region module + ;; Unbind keys used by siren-expand-region module. (unbind-key "M-." robe-mode-map) (unbind-key "M-," robe-mode-map)) @@ -139,7 +139,12 @@ :diminish ruby-tools-mode :bind (:map ruby-tools-mode-map ("C-'" . toggle-quotes)) - :hook (ruby-mode . ruby-tools-mode)) + :hook + (ruby-mode . ruby-tools-mode) + + :config + ;; Unbind key used by siren-resize-window module. + (unbind-key "C-;" ruby-tools-mode-map)) (use-package seeing-is-believing :defer t diff --git a/modules/spelling/siren-flyspell.el b/modules/spelling/siren-flyspell.el index 77ad191..212e294 100644 --- a/modules/spelling/siren-flyspell.el +++ b/modules/spelling/siren-flyspell.el @@ -17,9 +17,11 @@ (prog-mode . flyspell-prog-mode) :config - ;; Ensure flyspell does not override keybindings of siren-goto-chg module. + ;; Unbind keys used by siren-goto-chg module. (unbind-key "C-." flyspell-mode-map) (unbind-key "C-," flyspell-mode-map) + ;; Unbind keys used by siren-resize-window module. + (unbind-key "C-;" flyspell-mode-map) (setq ispell-program-name "aspell" ; use aspell instead of ispell ispell-extra-args '("--lang=en" "--sug-mode=ultra"))) diff --git a/modules/windows/siren-resize-window.el b/modules/windows/siren-resize-window.el new file mode 100644 index 0000000..54f5223 --- /dev/null +++ b/modules/windows/siren-resize-window.el @@ -0,0 +1,15 @@ +;;; siren-resize-window.el --- jimeh's Emacs Siren: resize-window + +;;; Commentary: + +;; Configuration for resize-window. + +;;; Code: + +(use-package resize-window + :commands resize-window + :bind + ("C-;" . resize-window)) + +(provide 'siren-resize-window) +;;; siren-resize-window.el ends here From 35a78602ae60946d6f7a8e0fb0b20f1b2820d4dd Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 20 May 2018 17:43:14 +0100 Subject: [PATCH 38/38] Update custom.el --- custom.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom.el b/custom.el index 17b9477..0c20c1b 100644 --- a/custom.el +++ b/custom.el @@ -7,7 +7,7 @@ '(magit-commit-arguments (quote ("-S"))) '(package-selected-packages (quote - (doom-themes yaml-mode web-mode thrift slim-mode scss-mode sass-mode rust-playground racer flycheck-rust cargo rust-mode yari seeing-is-believing ruby-tools ruby-refactor ruby-compilation rspec-mode robe inf-ruby plantuml-mode php-mode markdown-mode lua-mode rjsx-mode json-mode eslintd-fix prettier-js haml-mode go-playground flycheck-gometalinter go-projectile gotest go-rename go-guru go-eldoc company-go go-mode gitignore-mode gitconfig-mode dockerfile-mode feature-mode highlight-symbol highlight-indent-guides highlight-indentation coffee-mode zoom-window buffer-move magit-gh-pulls magit github-browse-file git-timemachine diff-hl yasnippet-snippets toggle-quotes string-inflection smartparens smart-shift phi-search multiple-cursors move-dup expand-region neotree all-the-icons helm-projectile editorconfig helm-swoop helm-open-github helm-gtags helm-ag helm-describe-modes helm-descbinds helm imenu-anywhere git-link full-ack dumb-jump direx ace-window avy anzu flycheck which-key smex rainbow-mode linum-relative ido-vertical-mode ido-completing-read+ evil browse-kill-ring company fill-column-indicator use-package smart-mode-line exec-path-from-shell diminish dash)))) + (zoom-window yasnippet-snippets yari yaml-mode which-key web-mode use-package toggle-quotes thrift string-inflection smex smartparens smart-shift smart-mode-line slim-mode seeing-is-believing scss-mode sass-mode rust-playground ruby-tools ruby-refactor ruby-compilation rspec-mode robe rjsx-mode resize-window rainbow-mode racer prettier-js plantuml-mode php-mode phi-search neotree multiple-cursors move-dup markdown-mode magit-gh-pulls lua-mode linum-relative json-mode imenu-anywhere ido-vertical-mode ido-completing-read+ highlight-symbol highlight-indentation highlight-indent-guides helm-swoop helm-projectile helm-open-github helm-gtags helm-describe-modes helm-descbinds helm-ag go-projectile go-playground gitignore-mode github-browse-file gitconfig-mode git-timemachine git-link full-ack flycheck-rust flycheck-gometalinter fill-column-indicator feature-mode expand-region exec-path-from-shell evil eslintd-fix editorconfig dumb-jump doom-themes dockerfile-mode direx diminish diff-hl company-go coffee-mode cargo buffer-move browse-kill-ring anzu ace-window)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful.