This commit is contained in:
2023-05-20 01:57:20 +09:00
parent fc3f973d2a
commit 20c63a3122
12 changed files with 583 additions and 27 deletions

View File

@ -36,7 +36,6 @@
(set-fontset-font t '(#x1100 . #xffdc) (font-spec :family font))))))
(custom-setup-fonts)
(add-hook 'window-setup-hook #'custom-setup-fonts)
(add-hook 'server-after-make-frame-hook #'centaur-setup-fonts)
;; select theme
(setq custom-theme-sel 'doom-one)

View File

@ -65,8 +65,13 @@ Otherwise the startup will be very slow. "
(require 'init-yasnippet)
(require 'init-bookmark)
(require 'init-dashboard)
(require 'init-dired)
(require 'init-highlight)
(require 'init-ibuffer)
(require 'init-persp)
(require 'init-window)
(require 'init-treemacs)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; init.el ends here

View File

@ -0,0 +1,88 @@
;;; init-bookmark.el -*- lexical-binding: t -*-
;; Bookmark
(use-package bookmark
:ensure nil
:config
(with-no-warnings
;; Display icons for bookmarks
(defun my-bookmark-bmenu--revert ()
"Re-populate `tabulated-list-entries'."
(let (entries)
(dolist (full-record (bookmark-maybe-sort-alist))
(let* ((name (bookmark-name-from-full-record full-record))
(annotation (bookmark-get-annotation full-record))
(location (bookmark-location full-record))
(file (file-name-nondirectory location))
(type (let ((fmt "%-8.8s"))
(cond ((null location)
(propertize (format fmt "NOFILE") 'face 'warning))
((file-remote-p location)
(propertize (format fmt "REMOTE") 'face 'mode-line-buffer-id))
((not (file-exists-p location))
(propertize (format fmt "NOTFOUND") 'face 'error))
((file-directory-p location)
(propertize (format fmt "DIRED") 'face 'warning))
(t (propertize (format fmt "FILE") 'face 'success)))))
(icon (if (icons-displayable-p)
(cond
((file-remote-p location)
(nerd-icons-codicon "nf-cod-radio_tower"))
((file-directory-p location)
(nerd-icons-icon-for-dir location))
((not (string-empty-p file))
(nerd-icons-icon-for-file file)))
"")))
(push (list
full-record
`[,(if (and annotation (not (string-equal annotation "")))
"*" "")
,icon
,(if (display-mouse-p)
(propertize name
'font-lock-face 'bookmark-menu-bookmark
'mouse-face 'highlight
'follow-link t
'help-echo "mouse-2: go to this bookmark in other window")
name)
,type
,@(if bookmark-bmenu-toggle-filenames
(list (propertize location 'face 'completions-annotations)))])
entries)))
(tabulated-list-init-header)
(setq tabulated-list-entries entries))
(tabulated-list-print t))
(advice-add #'bookmark-bmenu--revert :override #'my-bookmark-bmenu--revert)
(defun my-bookmark-bmenu-list ()
"Display a list of existing bookmarks.
The list is displayed in a buffer named `*Bookmark List*'.
The leftmost column displays a D if the bookmark is flagged for
deletion, or > if it is flagged for displaying."
(interactive)
(bookmark-maybe-load-default-file)
(let ((buf (get-buffer-create bookmark-bmenu-buffer)))
(if (called-interactively-p 'interactive)
(pop-to-buffer buf)
(set-buffer buf)))
(bookmark-bmenu-mode)
(bookmark-bmenu--revert))
(advice-add #'bookmark-bmenu-list :override #'my-bookmark-bmenu-list)
(define-derived-mode bookmark-bmenu-mode tabulated-list-mode "Bookmark Menu"
(setq truncate-lines t)
(setq buffer-read-only t)
(setq tabulated-list-format
`[("" 1) ;; Space to add "*" for bookmark with annotation
("" ,(if (icons-displayable-p) 2 0)) ;; Icons
("Bookmark" ,bookmark-bmenu-file-column bookmark-bmenu--name-predicate)
("Type" 9)
,@(if bookmark-bmenu-toggle-filenames
'(("File" 0 bookmark-bmenu--file-predicate)))])
(setq tabulated-list-padding bookmark-bmenu-marks-width)
(setq tabulated-list-sort-key '("Bookmark" . nil))
(add-hook 'tabulated-list-revert-hook #'bookmark-bmenu--revert nil t)'
(setq revert-buffer-function #'bookmark-bmenu--revert)
(tabulated-list-init-header))))
(provide 'init-bookmark)
;;; init.el ends here

View File

@ -24,29 +24,29 @@
(evil-set-initial-state 'dashboard-mode 'normal)
;; eshell no evil
(dolist (mode '(eshell-mode))
(add-to-list 'evil-emacs-state-modes mode))
(add-to-list 'evil-emacs-state-modes mode)))
(use-package evil-collection
:defer nil
:config
(evil-collection-init))
(use-package evil-collection
:defer nil
:config
(evil-collection-init))
(use-package evil-nerd-commenter
:defer nil
:config
;; evil nerd commenter
(define-key evil-normal-state-map (kbd "g c") 'evilnc-comment-or-uncomment-lines)
(define-key evil-visual-state-map (kbd "g c") 'evilnc-comment-or-uncomment-lines))
(use-package evil-nerd-commenter
:defer nil
:config
;; evil nerd commenter
(define-key evil-normal-state-map (kbd "g c") 'evilnc-comment-or-uncomment-lines)
(define-key evil-visual-state-map (kbd "g c") 'evilnc-comment-or-uncomment-lines))
(use-package evil-numbers
:defer nil
:config
;; evil numbers
;; unfortunately C-x is emacs common key binding.
(define-key evil-normal-state-map (kbd "g =") 'evil-numbers/inc-at-pt)
(define-key evil-normal-state-map (kbd "g -") 'evil-numbers/dec-at-pt)
(define-key evil-visual-state-map (kbd "g =") 'evil-numbers/inc-at-pt)
(define-key evil-visual-state-map (kbd "g -") 'evil-numbers/dec-at-pt)))
(use-package evil-numbers
:defer nil
:config
;; evil numbers
;; unfortunately C-x is emacs common key binding.
(define-key evil-normal-state-map (kbd "g =") 'evil-numbers/inc-at-pt)
(define-key evil-normal-state-map (kbd "g -") 'evil-numbers/dec-at-pt)
(define-key evil-visual-state-map (kbd "g =") 'evil-numbers/inc-at-pt)
(define-key evil-visual-state-map (kbd "g -") 'evil-numbers/dec-at-pt))
(provide 'init-evil)
;;; init-evil.el ends here.

View File

@ -28,6 +28,9 @@
:prefix "SPC"
:global-prefix "C-SPC"))
(ju/leader-key-def
;; workspace
"TAB" '(persp-key-map :which-key "persp-mode")
;; file
"." 'find-file
;; Buffer
"b" '(:ignore t :which-key "buffer handling")
@ -38,6 +41,7 @@
"b p" '(previous-buffer :which-key "Previous buffer")
"b B" '(ibuffer-list-buffers :which-key "IBuffer List Buffers")
"b K" '(kill-buffer :which-key "IBuffer Kill Buffers")
"b s" '(consult-buffer :which-key "switch buffer")
;; Eshell
"e" '(:ignore t :which-key "eshell")
"e h" '(counsel-esh-history :which-key "Kill history")

View File

@ -6,7 +6,191 @@
:ensure nil
:hook ((after-init . global-hl-line-mode)
((dashboard-mode eshell-mode shell-mode term-mode vterm-mode) .
(lambda () (setq-local global-hl-line-mode nil)))))
(lambda () (setq-local global-hl-line-mode nil))))
:config
(set-face-background 'hl-line "gray8"))
(use-package symbol-overlay
:diminish
:custom-face
;;(symbol-overlay-default-face ((t (:inherit region :background unspecified :foreground unspecified))))
(symbol-overlay-default-face ((t (:inherit nerd-icons-purple :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-1 ((t (:inherit nerd-icons-blue :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-2 ((t (:inherit nerd-icons-pink :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-3 ((t (:inherit nerd-icons-yellow :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-4 ((t (:inherit nerd-icons-orange :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-5 ((t (:inherit nerd-icons-red :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-6 ((t (:inherit nerd-icons-purple :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-7 ((t (:inherit nerd-icons-green :background unspecified :foreground unspecified :inverse-video t))))
(symbol-overlay-face-8 ((t (:inherit nerd-icons-cyan :background unspecified :foreground unspecified :inverse-video t))))
:bind (("M-i" . symbol-overlay-put)
("M-I" . symbol-overlay-remove-all)
("M-n" . symbol-overlay-jump-next)
("M-p" . symbol-overlay-jump-prev))
:hook ((prog-mode yaml-mode) . symbol-overlay-mode)
:init (setq symbol-overlay-idle-time 0.5)
:config
(with-no-warnings
;; Disable symbol highlighting while selecting
(defun turn-off-symbol-overlay (&rest _)
"Turn off symbol highlighting."
(interactive)
(symbol-overlay-mode -1))
(advice-add #'set-mark :after #'turn-off-symbol-overlay)
(defun turn-on-symbol-overlay (&rest _)
"Turn on symbol highlighting."
(interactive)
(when (derived-mode-p 'prog-mode 'yaml-mode)
(symbol-overlay-mode 1)))
(advice-add #'deactivate-mark :after #'turn-on-symbol-overlay)))
;; Colorize color names in buffers
(use-package rainbow-mode
:diminish
:defines helpful-mode-map
:bind (:map help-mode-map
("w" . rainbow-mode))
:hook ((html-mode php-mode helpful-mode) . rainbow-mode)
:init (with-eval-after-load 'helpful
(bind-key "w" #'rainbow-mode helpful-mode-map))
:config
(with-no-warnings
;; HACK: Use overlay instead of text properties to override `hl-line' faces.
;; @see https://emacs.stackexchange.com/questions/36420
(defun my-rainbow-colorize-match (color &optional match)
(let* ((match (or match 0))
(ov (make-overlay (match-beginning match) (match-end match))))
(overlay-put ov 'ovrainbow t)
(overlay-put ov 'face `((:foreground ,(if (> 0.5 (rainbow-x-color-luminance color))
"white" "black"))
(:background ,color)))))
(advice-add #'rainbow-colorize-match :override #'my-rainbow-colorize-match)
(defun my-rainbow-clear-overlays ()
"Clear all rainbow overlays."
(remove-overlays (point-min) (point-max) 'ovrainbow t))
(advice-add #'rainbow-turn-off :after #'my-rainbow-clear-overlays)))
;; Highlight brackets according to their depth
(use-package rainbow-delimiters
:hook (prog-mode . rainbow-delimiters-mode))
;; keywords from doom-emacs
(use-package hl-todo
:custom-face
(hl-todo ((t (:inherit default :height 0.9 :width condensed :weight bold :underline nil :inverse-video t))))
:hook (after-init . global-hl-todo-mode)
:init
(setq hl-todo-require-punctuation t
hl-todo-highlight-punctuation ":")
:config
;; TODO: For things that need to be done, just not today.
(dolist (keyword '("TODO"))
(add-to-list 'hl-todo-keyword-faces `(,keyword . "#ffcb6b")))
;; FIXME: For problems that will become bigger problems later if not fixed ASAP.
;; BUG: For a known bug that needs a workaround
(dolist (keyword '("FIXME" "BUG"))
(add-to-list 'hl-todo-keyword-faces `(,keyword . "#ff5370")))
;; HACK: For tidbits that are unconventional and not intended
;; uses of the constituent parts, and may break in a future update.
;; XXX: For warning about a problematic or misguiding code
(dolist (keyword '("HACK" "XXX"))
(add-to-list 'hl-todo-keyword-faces `(,keyword . "#f78b69")))
;; REVIEW: For things that were done hastily and/or hasn't been thoroughly
;; tested. It may not even be necessary!
(dolist (keyword '("REVIEW"))
(add-to-list 'hl-todo-keyword-faces `(,keyword . "#89ddff")))
;; NOTE: For especially important gotchas with a given implementation,
;; directed at another user other than the author.
(dolist (keyword '("NOTE"))
(add-to-list 'hl-todo-keyword-faces `(,keyword . "#c2e88b")))
;; DEPRECATED: For things that just gotta go and will soon be gone.
(dolist (keyword '("DEPRECATED"))
(add-to-list 'hl-todo-keyword-faces `(,keyword . "#8d9eaf"))))
;;(use-package diff-hl
;; :config
;; (diff-hl-margin-mode))
(use-package diff-hl
:hook ((after-init . global-diff-hl-mode)
(magit-post-refresh . diff-hl-magit-post-refresh)
(dired-mode . diff-hl-dired-mode-unless-remote))
;;(dired-mode . diff-hl-dired-mode))
:config
;; Highlight on-the-fly
(diff-hl-flydiff-mode 1)
;; Set fringe style
(setq-default fringes-outside-margins nil)
(with-no-warnings
(defun my-diff-hl-fringe-bmp-function (_type _pos)
"Fringe bitmap function for use as `diff-hl-fringe-bmp-function'."
(define-fringe-bitmap 'my-diff-hl-bmp
(vector (if sys/linuxp #b11111100 #b11100000))
1 8
'(center t)))
(setq diff-hl-fringe-bmp-function #'my-diff-hl-fringe-bmp-function)
(unless (display-graphic-p)
;; Fall back to the display margin since the fringe is unavailable in tty
(diff-hl-margin-mode 1)
;; Avoid restoring `diff-hl-margin-mode'
(with-eval-after-load 'desktop
(add-to-list 'desktop-minor-mode-table
'(diff-hl-margin-mode nil))))
;; Integration with magit
(with-eval-after-load 'magit
(add-hook 'magit-pre-refresh-hook #'diff-hl-magit-pre-refresh)
(add-hook 'magit-post-refresh-hook #'diff-hl-magit-post-refresh))))
;; Pulse current line
(use-package pulse
:ensure nil
:custom-face
(pulse-highlight-start-face ((t (:inherit region :background unspecified))))
(pulse-highlight-face ((t (:inherit region :background unspecified :extend t))))
:hook (((dumb-jump-after-jump imenu-after-jump) . my-recenter-and-pulse)
((bookmark-after-jump magit-diff-visit-file next-error) . my-recenter-and-pulse-line))
:init
(with-no-warnings
(defun my-pulse-momentary-line (&rest _)
"Pulse the current line."
(pulse-momentary-highlight-one-line (point)))
(defun my-pulse-momentary (&rest _)
"Pulse the region or the current line."
(if (fboundp 'xref-pulse-momentarily)
(xref-pulse-momentarily)
(my-pulse-momentary-line)))
(defun my-recenter-and-pulse(&rest _)
"Recenter and pulse the region or the current line."
(recenter)
(my-pulse-momentary))
(defun my-recenter-and-pulse-line (&rest _)
"Recenter and pulse the current line."
(recenter)
(my-pulse-momentary-line))
(dolist (cmd '(recenter-top-bottom
other-window switch-to-buffer
aw-select toggle-window-split
windmove-do-window-select
pager-page-down pager-page-up
treemacs-select-window
symbol-overlay-basic-jump))
(advice-add cmd :after #'my-pulse-momentary-line))
(dolist (cmd '(pop-to-mark-command
pop-global-mark
goto-last-change))
(advice-add cmd :after #'my-recenter-and-pulse))))
(provide 'init-highlight)
;;; init-highlight.el ends here

View File

@ -0,0 +1,25 @@
;;; init-ibuffer.el -*- lexical-binding: t -*-
(require 'init-const)
(require 'init-funcs)
(use-package ibuffer
:ensure nil
:init (setq ibuffer-filter-group-name-face '(:inherit (font-lock-string-face bold)))
:config
;; Display icons for buffers
(use-package nerd-icons-ibuffer
:hook (ibuffer-mode . nerd-icons-ibuffer-mode)
:init (setq nerd-icons-ibuffer-icon t)))
;; Group ibuffer's list by project
(use-package ibuffer-project
:hook (ibuffer . (lambda ()
(setq ibuffer-filter-groups (ibuffer-project-generate-filter-groups))
(unless (eq ibuffer-sorting-mode 'project-file-relative)
(ibuffer-do-sort-by-project-file-relative))))
:init (setq ibuffer-project-use-cache t)
:config
(add-to-list 'ibuffer-project-root-functions '(file-remote-p . "Remote"))
(add-to-list 'ibuffer-project-root-functions '("\\*.+\\*" . "Default")))
(provide 'init-ibuffer)
;;; init-ibuffer.el ends here

View File

@ -0,0 +1,108 @@
;;; init-persp.el -*- lexical-binding: t -*-
(require 'init-const)
(require 'init-funcs)
;; Windows/buffers sets shared among frames + save/load.
(use-package persp-mode
:diminish
:autoload (get-current-persp persp-contain-buffer-p)
:hook (after-init . persp-mode)
:init (setq persp-keymap-prefix (kbd "C-x p")
persp-nil-name "default"
persp-set-last-persp-for-new-frames nil
persp-kill-foreign-buffer-behaviour 'kill
persp-auto-resume-time 0)
:config
(with-no-warnings
;; Don't save if the state is not loaded
(defvar persp-state-loaded nil
"Whether the state is loaded.")
(defun my-persp-after-load-state (&rest _)
(setq persp-state-loaded t))
(advice-add #'persp-load-state-from-file :after #'my-persp-after-load-state)
(add-hook 'emacs-startup-hook
(lambda ()
(add-hook 'find-file-hook #'my-persp-after-load-state)))
(defun my-persp-asave-on-exit (fn &optional interactive-query opt)
(if persp-state-loaded
(funcall fn interactive-query opt)
t))
(advice-add #'persp-asave-on-exit :around #'my-persp-asave-on-exit))
;; Don't save dead or temporary buffers
(add-hook 'persp-filter-save-buffers-functions
(lambda (b)
"Ignore dead and unneeded buffers."
(or (not (buffer-live-p b))
(string-prefix-p " *" (buffer-name b)))))
(add-hook 'persp-filter-save-buffers-functions
(lambda (b)
"Ignore temporary buffers."
(let ((bname (file-name-nondirectory (buffer-name b))))
(or (string-prefix-p ".newsrc" bname)
(string-prefix-p "magit" bname)
(string-prefix-p "COMMIT_EDITMSG" bname)
(string-prefix-p "Pfuture-Callback" bname)
(string-prefix-p "treemacs-persist" bname)
(string-match-p "\\.elc\\|\\.tar\\|\\.gz\\|\\.zip\\'" bname)
(string-match-p "\\.bin\\|\\.so\\|\\.dll\\|\\.exe\\'" bname)))))
;; Don't save persp configs in `recentf'
(with-eval-after-load 'recentf
(push persp-save-dir recentf-exclude))
;; Eshell integration
(persp-def-buffer-save/load
:mode 'eshell-mode :tag-symbol 'def-eshell-buffer
:save-vars '(major-mode default-directory))
;; Shell integration
(persp-def-buffer-save/load
:mode 'shell-mode :tag-symbol 'def-shell-buffer
:mode-restore-function (lambda (_) (shell))
:save-vars '(major-mode default-directory)))
;; Project integration
(use-package persp-mode-project-bridge
:autoload (persp-mode-project-bridge-find-perspectives-for-all-buffers
persp-mode-project-bridge-kill-perspectives)
:hook
(persp-mode-project-bridge-mode . (lambda ()
(if persp-mode-project-bridge-mode
(persp-mode-project-bridge-find-perspectives-for-all-buffers)
(persp-mode-project-bridge-kill-perspectives))))
(persp-mode . persp-mode-project-bridge-mode)
:init (when (icons-displayable-p)
(setq persp-mode-project-bridge-persp-name-prefix ""))
:config
(with-no-warnings
;; HACK: Allow saving to files
(defun my-persp-mode-project-bridge-add-new-persp (name)
(let ((persp (persp-get-by-name name *persp-hash* :nil)))
(if (eq :nil persp)
(prog1
(setq persp (persp-add-new name))
(when persp
(set-persp-parameter 'persp-mode-project-bridge t persp)
(persp-add-buffer (cl-remove-if-not #'get-file-buffer (project-files (project-current)))
persp nil nil)))
persp)))
(advice-add #'persp-mode-project-bridge-add-new-persp
:override #'my-persp-mode-project-bridge-add-new-persp)
;; HACK: Switch to buffer after switching perspective
(defun my-persp-mode-project-bridge-hook-switch (fn &rest _args)
"Switch to a perspective when hook is activated."
(let ((buf (current-buffer)))
(funcall fn)
(when (buffer-live-p buf)
(switch-to-buffer buf))))
(advice-add #'persp-mode-project-bridge-hook-switch
:around #'my-persp-mode-project-bridge-hook-switch)))
(provide 'init-persp)
;;; init-persp.el ends here

View File

@ -0,0 +1,53 @@
;;; init-treemacs.el -*- lexical-binding: t -*-
(require 'init-const)
(require 'init-funcs)
;; A tree layout file explorer
(use-package treemacs
:commands (treemacs-follow-mode
treemacs-filewatch-mode
treemacs-git-mode)
:custom-face
(cfrs-border-color ((t (:inherit posframe-border))))
:bind (([f8] . treemacs)
:map treemacs-mode-map
([mouse-1] . treemacs-single-click-expand-action))
:config
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-missing-project-action 'remove
treemacs-sorting 'alphabetic-asc
treemacs-follow-after-init t
treemacs-width 30
treemacs-no-png-images nil)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(pcase (cons (not (null (executable-find "git")))
(not (null (executable-find "python3"))))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple)))
(use-package treemacs-nerd-icons
:demand
:custom-face
(treemacs-nerd-icons-root-face ((t (:inherit nerd-icons-green :height 1.3))))
(treemacs-nerd-icons-file-face ((t (:inherit nerd-icons-dsilver))))
:config (treemacs-load-theme "nerd-icons"))
(use-package treemacs-magit
:after magit
:autoload treemacs-magit--schedule-update
:hook ((magit-post-commit
git-commit-post-finish
magit-post-stage
magit-post-unstage)
. treemacs-magit--schedule-update))
(use-package treemacs-persp
:after persp-mode
:demand t
:functions treemacs-set-scope-type
:config (treemacs-set-scope-type 'Perspectives)))
(provide 'init-treemacs)
;;; init-treemacs.el ends here

View File

@ -71,8 +71,8 @@
;; Display dividers between windows
(setq window-divider-default-places t
window-divider-default-bottom-width 1
window-divider-default-right-width 1)
window-divider-default-bottom-width 5
window-divider-default-right-width 5)
(add-hook 'window-setup-hook #'window-divider-mode)
(use-package time

View File

@ -9,6 +9,18 @@
:hook (after-init . vertico-mode)
:custom
(vertico-cycle t))
(use-package nerd-icons-completion
:hook (vertico-mode . nerd-icons-completion-mode))
(when (display-graphic-p)
(use-package vertico-posframe
:after vertico
:hook (vertico-mode . vertico-posframe-mode)
:config
(setq vertico-posframe-border-width 5)))
;; (setq vertico-posframe-parameters
;; '((left-fringe . 20)
;; (right-fringe . 20)))))
;; simple, but effective sorting and filtering for emacs.
(use-package vertico-prescient
@ -33,7 +45,13 @@
(completion-in-region-function #'consult-completion-in-region)
:config
(global-set-key (kbd "C-s") 'consult-line)
(global-set-key (kbd "C-M-j") 'consult-buffer))
;; HACK: https://github.com/Bad-ptr/persp-mode.el/issues/125
(with-eval-after-load "persp-mode-autoloads"
(defun my/consult-switch-to-buffer ()
"`consult-buffer' with buffers provided by persp."
(interactive)
(with-persp-buffer-list () (consult-buffer)))
(global-set-key (kbd "C-M-j") #'my/consult-switch-to-buffer)))
(use-package orderless
:defer t
@ -85,7 +103,47 @@
:custom
(kind-icon-default-face 'corfu-default) ; to compute blended backgrounds correctly
:config
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)))
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)
(when (icons-displayable-p)
(setq kind-icon-use-icons nil)
(setq kind-icon-mapping
`(
(array ,(nerd-icons-codicon "nf-cod-symbol_array") :face font-lock-type-face)
(boolean ,(nerd-icons-codicon "nf-cod-symbol_boolean") :face font-lock-builtin-face)
(class ,(nerd-icons-codicon "nf-cod-symbol_class") :face font-lock-type-face)
(color ,(nerd-icons-codicon "nf-cod-symbol_color") :face success)
(command ,(nerd-icons-codicon "nf-cod-terminal") :face default)
(constant ,(nerd-icons-codicon "nf-cod-symbol_constant") :face font-lock-constant-face)
(constructor ,(nerd-icons-codicon "nf-cod-triangle_right") :face font-lock-function-name-face)
(enummember ,(nerd-icons-codicon "nf-cod-symbol_enum_member") :face font-lock-builtin-face)
(enum-member ,(nerd-icons-codicon "nf-cod-symbol_enum_member") :face font-lock-builtin-face)
(enum ,(nerd-icons-codicon "nf-cod-symbol_enum") :face font-lock-builtin-face)
(event ,(nerd-icons-codicon "nf-cod-symbol_event") :face font-lock-warning-face)
(field ,(nerd-icons-codicon "nf-cod-symbol_field") :face font-lock-variable-name-face)
(file ,(nerd-icons-codicon "nf-cod-symbol_file") :face font-lock-string-face)
(folder ,(nerd-icons-codicon "nf-cod-folder") :face font-lock-doc-face)
(interface ,(nerd-icons-codicon "nf-cod-symbol_interface") :face font-lock-type-face)
(keyword ,(nerd-icons-codicon "nf-cod-symbol_keyword") :face font-lock-keyword-face)
(macro ,(nerd-icons-codicon "nf-cod-symbol_misc") :face font-lock-keyword-face)
(magic ,(nerd-icons-codicon "nf-cod-wand") :face font-lock-builtin-face)
(method ,(nerd-icons-codicon "nf-cod-symbol_method") :face font-lock-function-name-face)
(function ,(nerd-icons-codicon "nf-cod-symbol_method") :face font-lock-function-name-face)
(module ,(nerd-icons-codicon "nf-cod-file_submodule") :face font-lock-preprocessor-face)
(numeric ,(nerd-icons-codicon "nf-cod-symbol_numeric") :face font-lock-builtin-face)
(operator ,(nerd-icons-codicon "nf-cod-symbol_operator") :face font-lock-comment-delimiter-face)
(param ,(nerd-icons-codicon "nf-cod-symbol_parameter") :face default)
(property ,(nerd-icons-codicon "nf-cod-symbol_property") :face font-lock-variable-name-face)
(reference ,(nerd-icons-codicon "nf-cod-references") :face font-lock-variable-name-face)
(snippet ,(nerd-icons-codicon "nf-cod-symbol_snippet") :face font-lock-string-face)
(string ,(nerd-icons-codicon "nf-cod-symbol_string") :face font-lock-string-face)
(struct ,(nerd-icons-codicon "nf-cod-symbol_structure") :face font-lock-variable-name-face)
(text ,(nerd-icons-codicon "nf-cod-text_size") :face font-lock-doc-face)
(typeparameter ,(nerd-icons-codicon "nf-cod-list_unordered") :face font-lock-type-face)
(type-parameter ,(nerd-icons-codicon "nf-cod-list_unordered") :face font-lock-type-face)
(unit ,(nerd-icons-codicon "nf-cod-symbol_ruler") :face font-lock-constant-face)
(value ,(nerd-icons-codicon "nf-cod-symbol_field") :face font-lock-builtin-face)
(variable ,(nerd-icons-codicon "nf-cod-symbol_variable") :face font-lock-variable-name-face)
(t ,(nerd-icons-codicon "nf-cod-code") :face font-lock-warning-face))))))
(use-package corfu-terminal
@ -93,7 +151,6 @@
(unless (display-graphic-p)
(corfu-terminal-mode)))
;;; Cape
;; Setup Cape for better completion-at-point support and more
(use-package cape

View File

@ -0,0 +1,33 @@
;;; init-window.el -*- lexical-binding: t -*-
(require 'init-const)
(require 'init-funcs)
;; Window swap C-w C-r on evil
(use-package popper
:bind (("C-`" . popper-toggle-latest)
("M-`" . popper-cycle)
("C-M-`" . popper-toggle-type))
:hook (emacs-startup . popper-mode)
:init
(setq popper-reference-buffers
'("\\*Messages\\*"
"Output\\*$"
"\\*Async Shell Command\\*"
"\\*Compile-Log\\*"
help-mode
compilation-mode))
(with-eval-after-load 'doom-modeline
(setq popper-mode-line
'(:eval (let ((face (if (doom-modeline--active)
'mode-line-emphasis
'mode-line-inactive)))
(if (and (icons-displayable-p)
(bound-and-true-p doom-modeline-mode))
(format " %s "
(nerd-icons-octicon "nf-oct-pin" :face face))
(propertize " POP" 'face face))))))
:config
(popper-echo-mode +1))
(provide 'init-window)
;;; init-window.el ends here