2019-10-14 17:38:14 +02:00
|
|
|
;;; ui.el --- Configure user interfaces. -*- lexical-binding: t; -*-
|
|
|
|
|
2020-11-29 09:15:58 +01:00
|
|
|
;; Time-stamp: <2020-11-29T09:15:41+0100>
|
2019-10-14 17:38:14 +02:00
|
|
|
|
|
|
|
;;; Commentary:
|
2019-11-09 18:55:55 +01:00
|
|
|
;; * treemacs
|
2019-10-14 18:02:20 +02:00
|
|
|
;; * ivy + counsel.
|
2019-10-14 17:38:14 +02:00
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
2019-11-09 18:55:55 +01:00
|
|
|
;; Directory tree.
|
2020-03-18 15:00:17 +01:00
|
|
|
|
|
|
|
(require 'basics/package-management)
|
|
|
|
|
2019-11-09 18:55:55 +01:00
|
|
|
(use-package treemacs
|
2020-11-29 09:11:03 +01:00
|
|
|
:after (display-line-numbers doom-themes hl-line)
|
2020-11-14 22:08:33 +01:00
|
|
|
;; ;; Start with a clean workspace list.
|
|
|
|
;; :init (delete-file (expand-file-name ".cache/treemacs-persist"
|
|
|
|
;; user-emacs-directory))
|
2020-03-10 14:33:47 +01:00
|
|
|
:custom ((treemacs-project-follow-cleanup t) ; Collapse projects when leaving.
|
|
|
|
(treemacs-silent-refresh t)) ; No log message on refresh.
|
2020-04-21 04:21:38 +02:00
|
|
|
:config (progn
|
2020-11-14 21:57:28 +01:00
|
|
|
;; (treemacs-tag-follow-mode)
|
2020-04-21 04:21:38 +02:00
|
|
|
(make-face 'hl-line-treemacs-face)
|
|
|
|
(set-face-attribute 'hl-line-treemacs-face nil
|
2020-04-22 03:17:11 +02:00
|
|
|
:background "#080011")
|
|
|
|
(when (>= emacs-major-version 27)
|
|
|
|
(set-face-attribute 'hl-line-treemacs-face nil
|
|
|
|
:extend t))
|
2020-04-21 04:21:38 +02:00
|
|
|
(defun my/treemacs-set-hl-line ()
|
|
|
|
(set (make-local-variable 'hl-line-face)
|
2020-11-14 22:10:34 +01:00
|
|
|
'hl-line-treemacs-face))
|
|
|
|
(defun my/treemacs-show-maybe ()
|
|
|
|
(when (and (>= (frame-width) 120)
|
|
|
|
(file-exists-p treemacs-persist-file))
|
|
|
|
(treemacs)
|
|
|
|
(other-window 1))))
|
2020-04-15 14:24:44 +02:00
|
|
|
:bind (("<f9>" . treemacs-select-window) ; Focus treemacs.
|
|
|
|
("C-<f9>" . treemacs) ; Toggle treemacs.
|
|
|
|
("M-<f9>" . treemacs-add-and-display-current-project)
|
2020-03-10 14:33:47 +01:00
|
|
|
(:map treemacs-mode-map
|
|
|
|
("<mouse-1>" . treemacs-single-click-expand-action)))
|
2020-04-21 04:21:38 +02:00
|
|
|
:hook ((treemacs-mode . my/disable-line-numbers)
|
2020-11-14 22:10:34 +01:00
|
|
|
(treemacs-mode . my/treemacs-set-hl-line)
|
2020-11-29 09:15:58 +01:00
|
|
|
(after-init . (lambda () (when (display-graphic-p)
|
|
|
|
(my/treemacs-show-maybe))))
|
|
|
|
(server-after-make-frame . my/treemacs-show-maybe)))
|
2019-11-09 18:55:55 +01:00
|
|
|
|
|
|
|
(use-package treemacs-projectile
|
2020-05-27 04:48:11 +02:00
|
|
|
:demand t
|
2020-03-10 14:33:47 +01:00
|
|
|
:after (treemacs projectile))
|
2019-11-09 18:55:55 +01:00
|
|
|
|
|
|
|
(use-package treemacs-magit
|
2020-05-25 13:40:41 +02:00
|
|
|
:demand t
|
2020-03-15 23:38:06 +01:00
|
|
|
:after (treemacs magit))
|
2019-10-14 17:38:14 +02:00
|
|
|
|
|
|
|
;; Completion in many Emacs commands.
|
|
|
|
(use-package ivy
|
2019-10-15 14:23:28 +02:00
|
|
|
:demand t
|
2020-02-11 17:48:50 +01:00
|
|
|
:diminish ivy-mode
|
2020-03-10 14:33:47 +01:00
|
|
|
:custom ((ivy-use-virtual-buffers t)
|
|
|
|
(ivy-count-format "[%d/%d] ")
|
|
|
|
(ivy-wrap t))
|
|
|
|
:config (ivy-mode 1)
|
|
|
|
:bind (("C-c C-r" . ivy-resume)
|
|
|
|
(:map ivy-minibuffer-map
|
|
|
|
("M-<up>" . ivy-previous-history-element)
|
|
|
|
("M-<down>" . ivy-next-history-element)
|
|
|
|
("S-<return>" . ivy-immediate-done)))) ; Ignore completion.
|
2019-10-14 17:38:14 +02:00
|
|
|
|
|
|
|
;; Extensions for ivy
|
|
|
|
(use-package counsel
|
2020-05-26 07:06:22 +02:00
|
|
|
:demand t
|
2020-11-13 18:02:16 +01:00
|
|
|
:after (ivy imenu)
|
2020-03-10 14:33:47 +01:00
|
|
|
:bind (("C-x C-f" . counsel-find-file)
|
2020-11-13 18:02:16 +01:00
|
|
|
("M-x" . counsel-M-x)
|
|
|
|
("M-i" . counsel-imenu)))
|
2019-10-14 17:38:14 +02:00
|
|
|
|
|
|
|
;; More information in ivy mini-buffers.
|
|
|
|
(use-package ivy-rich
|
2020-05-26 07:06:22 +02:00
|
|
|
:demand t
|
2020-05-30 19:39:20 +02:00
|
|
|
:after (counsel)
|
2020-03-10 14:33:47 +01:00
|
|
|
:config (ivy-rich-mode 1))
|
2019-10-14 17:38:14 +02:00
|
|
|
|
2020-02-20 18:50:23 +01:00
|
|
|
;; Use icons in ivy-rich.
|
|
|
|
(use-package all-the-icons-ivy-rich
|
2020-05-26 07:06:22 +02:00
|
|
|
:demand t
|
2020-02-20 18:50:23 +01:00
|
|
|
:after (all-the-icons ivy-rich)
|
2020-03-10 14:33:47 +01:00
|
|
|
:config (all-the-icons-ivy-rich-mode 1))
|
2020-02-19 23:51:22 +01:00
|
|
|
|
2020-01-21 02:52:03 +01:00
|
|
|
(use-package ivy-purpose
|
|
|
|
:after (window-purpose)
|
2020-03-10 14:33:47 +01:00
|
|
|
:config (ivy-purpose-setup)
|
|
|
|
:bind (:map purpose-mode-map
|
|
|
|
("C-x b" . ivy-switch-buffer)))
|
2020-01-21 02:52:03 +01:00
|
|
|
|
2020-03-24 12:21:13 +01:00
|
|
|
(use-package ivy-emoji ; Insert emojis with ivy.
|
|
|
|
:after (ivy)
|
|
|
|
:bind ("C-c e" . ivy-emoji))
|
|
|
|
|
2020-02-11 16:47:12 +01:00
|
|
|
(use-package counsel-projectile
|
2020-05-26 07:06:22 +02:00
|
|
|
:demand t
|
2020-02-11 16:47:12 +01:00
|
|
|
:after (projectile)
|
2020-03-10 14:33:47 +01:00
|
|
|
:config (progn
|
2020-08-03 03:13:46 +02:00
|
|
|
;; I'm not exactly sure what I did here but it seems to work.
|
2020-03-10 14:33:47 +01:00
|
|
|
(defun my/counsel-projectile-switch-project-action (project)
|
|
|
|
"Call `my/switch-project'."
|
|
|
|
(let ((projectile-switch-project-action 'my/switch-project))
|
|
|
|
(counsel-projectile-switch-project-by-name project)))
|
|
|
|
(counsel-projectile-modify-action
|
|
|
|
'counsel-projectile-switch-project-action
|
|
|
|
'((add ("Y" my/counsel-projectile-switch-project-action
|
2020-08-03 03:13:46 +02:00
|
|
|
"open project in treemacs") 1)))
|
|
|
|
|
|
|
|
;; Overwrite keybindings and so on.
|
|
|
|
(counsel-projectile-mode)))
|
2019-12-26 21:30:46 +01:00
|
|
|
|
|
|
|
;; Shows tabs of all visible buffers per window.
|
|
|
|
(when (>= emacs-major-version 27)
|
|
|
|
(use-package tab-line
|
2020-05-24 22:59:31 +02:00
|
|
|
:defer 4
|
2019-12-26 21:30:46 +01:00
|
|
|
:custom-face
|
|
|
|
(tab-line ((t (:inherit ruler-mode-default))))
|
|
|
|
(tab-line-tab ((t (:inherit ruler-mode-default))))
|
|
|
|
(tab-line-tab-inactive ((t (:inherit tab-line-tab))))
|
2020-04-17 03:51:57 +02:00
|
|
|
(tab-line-tab-current ((t (:inherit ruler-mode-fill-column))))
|
|
|
|
(tab-line-highlight ((t (:inherit tab-line-tab-current))))))
|
2019-12-26 21:30:46 +01:00
|
|
|
|
2019-10-14 17:38:14 +02:00
|
|
|
(provide 'basics/ui)
|
|
|
|
;;; ui.el ends here
|