doomemacs/core/core-editor.el

208 lines
7.0 KiB
EmacsLisp
Raw Normal View History

2017-01-17 12:15:48 +08:00
;;; core-editor.el --- filling the editor shaped hole in the Emacs OS
2017-02-20 07:11:28 +08:00
(setq-default
;; Save clipboard contents into kill-ring before replacing them
save-interprogram-paste-before-kill t
;; Bookmarks
bookmark-default-file (concat doom-cache-dir "bookmarks")
2017-02-20 07:11:28 +08:00
bookmark-save-flag t
;; Formatting
delete-trailing-lines nil
fill-column 80
sentence-end-double-space nil
;; Scrolling
hscroll-margin 1
hscroll-step 1
scroll-conservatively 1001
scroll-margin 0
scroll-preserve-screen-position t
;; Whitespace (see `editorconfig')
indent-tabs-mode nil
require-final-newline t
tab-always-indent t
tab-width 4
tabify-regexp "^\t* [ \t]+" ; for :retab
whitespace-line-column fill-column
whitespace-style
'(face tabs tab-mark trailing lines-tail)
whitespace-display-mappings
'((tab-mark ?\t [? ?\t]) (newline-mark 10 [36 10]))
;; Wrapping
truncate-lines t
truncate-partial-width-windows 50
visual-fill-column-center-text nil
2017-02-21 09:41:30 +08:00
word-wrap t
vc-follow-symlinks t)
2017-02-01 08:50:46 +08:00
;; Save point across sessions
(require 'saveplace)
(setq save-place-file (concat doom-cache-dir "saveplace"))
2017-02-21 13:47:34 +08:00
(save-place-mode +1)
2017-02-01 08:50:46 +08:00
;; Save history across sessions
(require 'savehist)
(setq savehist-file (concat doom-cache-dir "savehist")
savehist-save-minibuffer-history t
savehist-autosave-interval nil ; save on kill only
savehist-additional-variables '(kill-ring search-ring regexp-search-ring))
(savehist-mode 1)
2017-02-01 08:50:46 +08:00
;; Keep track of recently opened files
(require 'recentf)
(setq recentf-save-file (concat doom-cache-dir "recentf")
2017-03-28 01:05:30 +08:00
recentf-exclude (list "/tmp/" "/ssh:" "\\.?ido\\.last$" "\\.revive$" "/TAGS$"
"^/var/folders/.+$" doom-local-dir)
recentf-max-menu-items 0
recentf-max-saved-items 250
recentf-filename-handlers '(abbreviate-file-name))
(quiet! (recentf-mode 1))
2017-02-01 08:50:46 +08:00
;; Ediff
(add-hook! ediff-load
(setq ediff-diff-options "-w"
ediff-split-window-function #'split-window-horizontally
ediff-window-setup-function #'ediff-setup-windows-plain)) ; no extra frames
2017-02-01 08:50:46 +08:00
;; revert buffers for changed files
(global-auto-revert-mode 1)
(setq auto-revert-verbose nil)
2017-01-17 12:15:48 +08:00
;; don't kill scratch buffers
(defun doom|dont-kill-scratch-buffer ()
(or (not (eq (buffer-name) "*scratch*"))
(ignore (bury-buffer))))
(add-hook 'kill-buffer-query-functions #'doom|dont-kill-scratch-buffer)
;; enabled by default in Emacs 25+. No thanks.
(electric-indent-mode -1)
(defun doom*delete-trailing-whitespace (orig-fn &rest args)
"Don't affect trailing whitespace on current line."
(let ((spaces (1- (current-column)))
(linestr (buffer-substring-no-properties
(line-beginning-position)
(line-end-position))))
(apply orig-fn args)
(when (and (if (featurep 'evil) (evil-insert-state-p) t)
(string-match-p "^[\s\t]*$" linestr))
(insert linestr))))
(advice-add #'delete-trailing-whitespace :around #'doom*delete-trailing-whitespace)
2017-01-17 12:15:48 +08:00
;;
2017-02-01 08:50:46 +08:00
;; Core Plugins
2017-01-17 12:15:48 +08:00
;;
2017-02-01 08:50:46 +08:00
;; Handles whitespace (tabs/spaces) settings externally. This way projects can
;; specify their own formatting rules.
(def-package! editorconfig :demand t
2016-05-21 07:08:02 +08:00
:mode ("\\.?editorconfig$" . editorconfig-conf-mode)
2017-03-02 08:16:22 +08:00
:init
(def-setting! :editorconfig (action value)
`(after! editorconfig
,(cond ((eq action :add)
`(push ',value editorconfig-indentation-alist))
((eq action :remove)
(unless (symbolp value)
(error "%s is not a valid major-mode in editorconfig-indentation-alist" value))
`(setq editorconfig-indentation-alist
(delq (assq ',value editorconfig-indentation-alist)
editorconfig-indentation-alist)))
(t (error "%s is an invalid action for :editorconfig" action)))))
:config
(editorconfig-mode +1)
2016-05-21 07:08:02 +08:00
;; Show whitespace in tabs indentation mode
(add-hook! 'editorconfig-custom-hooks
(if indent-tabs-mode (whitespace-mode +1))))
2017-02-01 08:50:46 +08:00
;; Auto-close delimiters and blocks as you type
(def-package! smartparens :demand t
2017-01-17 12:15:48 +08:00
:init
2017-03-05 09:54:13 +08:00
(setq sp-autowrap-region nil ; let evil-surround handle this
2017-01-17 12:15:48 +08:00
sp-highlight-pair-overlay nil
sp-cancel-autoskip-on-backward-movement nil
sp-show-pair-delay 0
sp-max-pair-length 3)
2015-06-06 18:40:33 +08:00
2017-01-17 12:15:48 +08:00
:config
(smartparens-global-mode 1)
(require 'smartparens-config)
;; Smartparens interferes with Replace mode
(add-hook 'evil-replace-state-entry-hook #'turn-off-smartparens-mode)
(add-hook 'evil-replace-state-exit-hook #'turn-on-smartparens-mode)
2017-01-17 12:15:48 +08:00
;; Auto-close more conservatively
(sp-pair "'" nil :unless '(sp-point-before-word-p sp-point-after-word-p sp-point-before-same-p))
2017-01-17 12:15:48 +08:00
(sp-pair "\"" nil :unless '(sp-point-before-word-p sp-point-after-word-p sp-point-before-same-p))
(sp-pair "{" nil :post-handlers '(("||\n[i]" "RET") ("| " " "))
:unless '(sp-point-before-word-p sp-point-before-same-p))
(sp-pair "(" nil :post-handlers '(("||\n[i]" "RET") ("| " " "))
:unless '(sp-point-before-word-p sp-point-before-same-p))
(sp-pair "[" nil :post-handlers '(("| " " "))
:unless '(sp-point-before-word-p sp-point-before-same-p))
2016-01-31 10:16:10 +08:00
2017-01-17 12:15:48 +08:00
(sp-local-pair
'css-mode "/*" "*/" :post-handlers '(("[d-3]||\n[i]" "RET") ("| " "SPC")))
(sp-local-pair '(sh-mode markdown-mode) "`" nil
:unless '(sp-point-before-word-p sp-point-before-same-p))
(sp-local-pair '(xml-mode nxml-mode php-mode)
"<!--" "-->" :post-handlers '(("| " "SPC"))))
2016-03-23 23:59:06 +08:00
2016-03-04 04:04:14 +08:00
;;
2017-01-17 12:15:48 +08:00
;; Autoloaded Plugins
2016-03-04 04:04:14 +08:00
;;
2015-06-06 18:40:33 +08:00
(def-package! ace-link
2017-02-20 07:11:28 +08:00
:commands (ace-link-help ace-link-org))
2017-01-17 12:15:48 +08:00
(def-package! ace-window
:commands (ace-window ace-swap-window ace-delete-window
ace-select-window ace-delete-other-windows)
2017-02-20 07:11:28 +08:00
:config
(setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
aw-scope 'frame
aw-background t))
2015-06-06 18:40:33 +08:00
(def-package! avy
2016-04-17 09:27:59 +08:00
:commands (avy-goto-char-2 avy-goto-line)
2017-02-20 07:11:28 +08:00
:config
(setq avy-all-windows nil
avy-background t))
2016-04-17 09:27:59 +08:00
(def-package! command-log-mode
:commands (command-log-mode global-command-log-mode)
:config
(set! :popup "*command-log*" :size 40 :align 'right :noselect t)
(setq command-log-mode-auto-show t
command-log-mode-open-log-turns-on-mode t))
2016-06-09 09:08:19 +08:00
(def-package! expand-region
2017-02-20 07:11:28 +08:00
:commands (er/expand-region er/contract-region er/mark-symbol er/mark-word))
2015-06-06 18:40:33 +08:00
(def-package! goto-last-change :commands goto-last-change)
2015-06-06 18:40:33 +08:00
(def-package! help-fns+ ; Improved help commands
2016-10-03 05:21:47 +08:00
:commands (describe-buffer describe-command describe-file
describe-keymap describe-option describe-option-of-type))
(def-package! imenu-anywhere
2017-01-17 12:15:48 +08:00
:commands (ido-imenu-anywhere ivy-imenu-anywhere helm-imenu-anywhere))
(def-package! imenu-list :commands imenu-list-minor-mode)
2017-01-17 12:15:48 +08:00
(def-package! pcre2el :commands rxt-quote-pcre)
2017-01-17 12:15:48 +08:00
(def-package! smart-forward
:commands (smart-up smart-down smart-backward smart-forward))
2015-06-06 18:40:33 +08:00
(def-package! wgrep
2016-06-13 14:11:33 +08:00
:commands (wgrep-setup wgrep-change-to-wgrep-mode)
:config
(setq wgrep-auto-save-buffer t)
(advice-add #'wgrep-abort-changes :after #'doom/popup-close)
(advice-add #'wgrep-finish-edit :after #'doom/popup-close))
2016-06-13 14:11:33 +08:00
2015-06-05 06:23:21 +08:00
(provide 'core-editor)
;;; core-editor.el ends here