Skip to content
Snippets Groups Projects
editor.el 6.76 KiB
Newer Older
MoScribe's avatar
MoScribe committed
;;; editor.el --- configs for Emacs settings
;;
;;; Commentary:
;;
;;; Code:

;; Resolve symlinks when opening files
(setq find-file-visit-truename t
      vc-follow-symlinks t)

(setq find-file-suppress-same-file-warnings t)

;; Create missing directory when we open a file that doesn't exist under
;; a directory tree tha may not exist.
(add-hook 'find-file-not-found-hooks
	  (lambda ()
	    (unless (file-remote-p buffer-file-name)
	      (let ((parent-directory (file-name-directory buffer-file-name)))
		(and (not (file-directory-p parent-directory))
		     (y-or-n-p (format "Directory `%s' does not exist! Create it? "
				       parent-directory))
		     (progn (make-directory parent-directory)
			    t))))))

;; Don't generate backups or lockfiles.
(setq create-lockfiles nil
      make-backup-files nil
      ring-bell-function 'ignore
      ;; build-in packages
      version-control t
      backup-by-copying t
      delete-old-versions t
      kept-old-versions 5
      kept-new-versions 5
      backup-directory-alist user/backup-directory-alist
      tramp-backup-directory-alist backup-directory-alist)

(setq-default scroll-step 1) ;; smooth scroll

(setq-default auto-image-file-mode t)

(setq auto-save-list-file-prefix user/auto-save-list-prefix)

(setq-default initial-scratch-message nil
              inhibit-splash-screen t
              initial-major-mode 'text-mode
              frame-title-format "%b")

;;; Formatting
(setq-default indent-tabs-mode nil
              tab-width 4
              tab-always-indent nil)

(setq-default fill-column 80)

(setq-default word-wrap t)

(setq-default truncate-lines t)

;; Default to soft line-wrapping in text modes.
(add-hook 'text-mode-hook #'visual-line-mode)

(unless (assq 'menu-bar-lines default-frame-alist)
  (add-to-list 'default-frame-alist '(menu-bar-lines . 0))
  (add-to-list 'default-frame-alist '(tool-bar-lines . 0))
  (add-to-list 'default-frame-alist '(vertical-scroll-bars)))

(delete-selection-mode 1)
(electric-pair-mode 1)
(size-indication-mode t)

(add-hook 'emacs-startup-hook #'window-divider-mode)

;; Don't display floating tooltips;
(when (bound-and-true-p tooltip-mode)
  (tooltip-mode -1))



;;; Build-in packages

(use-package paren
  :hook (after-init . show-paren-mode)
  :config
  (setq show-paren-delay 0.1
        show-paren-highlight-openparen t
        show-paren-when-point-inside-paren t
        show-paren-when-point-in-periphery t))
  (use-package recentf
    :defer 1
    :commands (recentf-save-list)
    :init
    (progn
      (add-hook 'find-file-hook (lambda () (unless recentf-mode
					     (recentf-mode)
					     (recentf-track-opened-file))))
      (setq recentf-save-file user/recentf-save-file
	    recentf-max-saved-items 1000
	    recentf-auto-cleanup 'never
	    recentf-auto-save-timer (run-with-idle-timer 600 t
							 'recentf-save-list)))
    )

(use-package display-line-numbers
  :hook
  (prog-mode . display-line-numbers-mode)
  )

;;
(use-package saveplace
  :hook (after-init . save-place-mode)
  :init
  (setq save-place-file user/save-place-file)
  )

(use-package subword
  :hook (after-init . global-subword-mode)
  :diminish subword-mode)

(use-package winner-mode
  :ensure nil
  :hook (after-init . winner-mode))

(use-package autorevert
  :ensure nil
  :hook (after-init . global-auto-revert-mode))

(use-package imenu
  :defer t
  :bind (("C-c j i" . 'imenu))
  )

;;; Minibuffers
;; Allow for minibuffer-ception.
(setq enable-recursive-minibuffers t)

(setq echo-keystrokes 0.02)
(setq resize-mini-windows 'grow-only
      max-mini-window-height 0.15)

(fset #'yes-or-no-p #'y-or-n-p)

;; Try really hard to keep the cursor from getting stuce in the read-only prompt
;; portion of the minibuffer.
(setq minibuffer-prompt-properties
      '(read-only t intangible t cursor-intangible t face minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)

;;; Popwin
(use-package popwin
  :ensure t
  :config
  (progn
    (popwin-mode 1)
    (setq popwin:special-display-config nil)

    ;; buffer that we manage
    (push '("*Help*"                 :dedicated t :position bottom :stick t :noselect nil   :height 0.4) popwin:special-display-config)
    (push '("*Process List*"         :dedicated t :position bottom :stick t :noselect nil :height 0.4) popwin:special-display-config)
    (push '(compilation-mode         :dedicated nil :position bottom :stick t :noselect t   :height 0.4) popwin:special-display-config)
    (push '(dap-server-log-mode      :dedicated nil :position bottom :stick t :noselect t   :height 0.4) popwin:special-display-config)
    (push '("*Shell Command Output*" :dedicated t :position bottom :stick t :noselect nil            ) popwin:special-display-config)
    (push '("*Async Shell Command*"  :dedicated t :position bottom :stick t :noselect nil            ) popwin:special-display-config)
    (push '("*undo-tree*"            :dedicated t :position right  :stick t :noselect nil :width   60) popwin:special-display-config)
    (push '("*undo-tree Diff*"       :dedicated t :position bottom :stick t :noselect nil :height 0.3) popwin:special-display-config)
    (push '("*ert*"                  :dedicated t :position bottom :stick t :noselect nil            ) popwin:special-display-config)
    (push '("*grep*"                 :dedicated t :position bottom :stick t :noselect nil            ) popwin:special-display-config)
    (push '("*nosetests*"            :dedicated t :position bottom :stick t :noselect nil            ) popwin:special-display-config)
    (push '("^\*WoMan.+\*$" :regexp t             :position bottom                                   ) popwin:special-display-config)
    (push '("*Google Translate*"     :dedicated t :position bottom :stick t :noselect t   :height 0.4) popwin:special-display-config)
    ))

MoScribe's avatar
MoScribe committed

MoScriber's avatar
MoScriber committed
;;; Modeline
(use-package doom-modeline
  :ensure t
  :hook (after-init . doom-modeline-mode)
  :init
  (unless after-init-time
    (setq-default mode-line-format nil))

  (setq projectile-dynamic-mode-line nil)

  (setq doom-modeline-bar-width 3
        doom-modeline-github nil
        doom-modeline-mu4e nil
        doom-modeline-persp-name nil
        doom-modeline-minor-modes nil
        doom-modeline-major-mode-icon t
        doom-modeline-buffer-file-name-style 'relative-from-project)

  (use-package anzu
MoScribe's avatar
MoScribe committed
    :ensure t
    :defer t
Liu Miao's avatar
Liu Miao committed
    :hook (isearch-mode . anzu-mode)
MoScribe's avatar
MoScribe committed
    )
MoScriber's avatar
MoScriber committed

  (use-package evil-anzu
MoScribe's avatar
MoScribe committed
    :ensure t
    :defer t
MoScriber's avatar
MoScriber committed
    :config
Liu Miao's avatar
Liu Miao committed
    (global-anzu-mode +1)))
MoScriber's avatar
MoScriber committed

Liu Miao's avatar
Liu Miao committed
;;; doom themes
(use-package doom-themes
  :ensure t
  :config
  (load-theme 'doom-one))

MoScribe's avatar
MoScribe committed
;;; Whichkey
(use-package which-key
  :ensure t
  :init
  (which-key-mode)
  :config
  :diminish which-key-mode
  )


MoScribe's avatar
MoScribe committed
;;; General - for keybindings
(use-package general
  :ensure t
  :init
  (defalias 'define-key! #'general-def)
  (defalias 'undefine-key! #'general-unbind)
  )

MoScribe's avatar
MoScribe committed
(provide 'editor)
;;; editor.el ends here