From 8be34ee76be629fd7075042fe4dcd8cb3cbbf095 Mon Sep 17 00:00:00 2001 From: Aleksandr Lebedev Date: Mon, 3 Feb 2025 00:08:47 +0100 Subject: [PATCH] Removed vertico, improved dashboard --- config.org | 212 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 127 insertions(+), 85 deletions(-) diff --git a/config.org b/config.org index d0fe669..6fe4fad 100644 --- a/config.org +++ b/config.org @@ -7,6 +7,7 @@ - [[#important-programs-to-load-first][IMPORTANT PROGRAMS TO LOAD FIRST]] - [[#recent-files][Recent Files]] - [[#keybindings][Keybindings]] + - [[#focus-new-windows][Focus new windows]] - [[#support-functions][Support functions]] - [[#emacs-function-launcher][Emacs function launcher]] - [[#copy-to-clipboard][Copy to clipboard]] @@ -55,7 +56,7 @@ - [[#nerd-icons-completion][Nerd Icons Completion]] - [[#buffer-move][Buffer Move]] - [[#completions][Completions]] - - [[#vertico][Vertico]] + - [[#orderless][Orderless]] - [[#fido-mode][Fido-mode]] - [[#descriptions][Descriptions]] - [[#communication][Communication]] @@ -79,6 +80,39 @@ (global-set-key (kbd "M-o") 'other-window) ;;(windmove-default-keybindings) ;; move between windows with S-, S-, S-, S- #+end_src +** Focus new windows +Found this [[https://emacs.stackexchange.com/questions/21770/automatically-switch-focus-to-new-window][here]] and [[https://github.com/snackon/Witchmacs#creating-a-new-window-switches-your-cursor-to-it][here]] +#+begin_src emacs-lisp + (defun split-and-follow-horizontally () + (interactive) + (split-window-below) + (balance-windows) + (other-window 1)) + + (defun split-and-follow-vertically () + (interactive) + (split-window-right) + (balance-windows) + (other-window 1)) + + (use-package emacs + :bind (:map ctl-x-map + ("2" . split-and-follow-horizontally) + ("3" . split-and-follow-vertically)) + :custom + (info-lookup-other-window-flag t) + (help-window-select t "Switch to help buffers automatically")) +;; Auto-select new Info buffer window when it’s created. + (advice-add 'info-lookup :after + (lambda (&rest _) + (when-let (window (get-buffer-window "*info*")) + (select-window window)))) + + ;; Auto-select new window after splitting. Splitting commands almost + ;;,all use `split-window’, so advice the function for auto selection. + (advice-add 'split-window :after + (lambda (&rest _) (select-window (get-lru-window)))) +#+end_src * Support functions ** Emacs function launcher Launches emacs function as a window @@ -354,26 +388,73 @@ By default, Emacs creates automatic backups of files in their original directori * Dashboard Emacs Dashboard is an extensible startup screen showing you recent files, bookmarks, agenda items and an Emacs banner. #+begin_src emacs-lisp -(use-package dashboard - :ensure t - :init - (setq initial-buffer-choice 'dashboard-open) - (setq dashboard-set-heading-icons t) - (setq dashboard-set-file-icons t) - (setq dashboard-banner-logo-title "Emacs Is More Than A Text Editor!") - ;;(setq dashboard-startup-banner 'logo) ;; use standard emacs logo as banner - ;;(setq dashboard-startup-banner "/home/dt/.config/emacs/images/emacs-dash.png") ;; use custom image as banner - (setq dashboard-center-content nil) ;; set to 't' for centered content - (setq dashboard-items '((recents . 5) - (agenda . 5 ) - (bookmarks . 3) - (projects . 3) - (registers . 3))) - :custom - (dashboard-modify-heading-icons '((recents . "file-text") - (bookmarks . "book"))) - :config - (dashboard-setup-startup-hook)) + (use-package dashboard + :ensure t + :after nerd-icons + :init + (setq initial-buffer-choice (lambda () (get-buffer-create dashboard-buffer-name))) + (setq dashboard-week-agenda t) + ;;(setq dashboard-filter-agenda-entry 'dashboard-no-filter-agenda) + (setq dashboard-display-icons-p t) ; display icons on both GUI and terminal + (setq dashboard-icon-type 'nerd-icons) ; use `nerd-icons' package + (setq dashboard-set-heading-icons t) + (setq dashboard-projects-backend 'project-el) + (setq dashboard-set-file-icons t) + (setq dashboard-banner-logo-title "Emacs Is More Than A Text Editor!") + (setq dashboard-startup-banner 'logo) ;; use standard emacs logo as banner + ;;(setq dashboard-startup-banner "/home/dt/.config/emacs/images/emacs-dash.png") ;; use custom image as banner + (setq dashboard-center-content nil) ;; set to 't' for centered content + (setq dashboard-items '((recents . 5) + (agenda . 5 ) + (bookmarks . 3) + (projects . 3) + (registers . 3))) + (setq dashboard-startupify-list '(dashboard-insert-banner + dashboard-insert-newline + dashboard-insert-banner-title + dashboard-insert-newline + dashboard-insert-navigator + dashboard-insert-newline + dashboard-insert-init-info + dashboard-insert-items + dashboard-insert-newline + dashboard-insert-footer)) + (setq dashboard-navigator-buttons + `(;; Line 1 + ((,(nerd-icons-mdicon "nf-md-inbox" :height 1.1 :v-adjust 0.0) + "To Inbox" + "Capture to inbox" + (lambda (&rest _) (kylekrein/org-roam-capture-inbox))) + + (,(nerd-icons-mdicon "nf-md-calendar" :height 1.1 :v-adjust 0.0) + "Agenda" + "View agenda" + (lambda (&rest _) (org-agenda))) + + (,(nerd-icons-mdicon "nf-md-note" :height 1.1 :v-adjust 0.0) + "Note" + "Find a note" + (lambda (&rest _) (org-roam-node-find)))) + + ;; Line 2 + ((,(nerd-icons-mdicon "nf-md-sync" :height 1.1 :v-adjust 0.0) + "Sync" + "Sync org-roam and agenda" + (lambda (&rest _) + (org-roam-db-sync) + (org-agenda-redo) + (message "Org-Roam and Agenda synced!"))) + + (,(nerd-icons-mdicon "nf-md-calendar_today" :height 1.1 :v-adjust 0.0) + "Today" + "View today's tasks" + (lambda (&rest _) (org-agenda nil "a")))))) + + :custom + (dashboard-modify-heading-icons '((recents . "nf-oct-file_text") + (bookmarks . "nf-oct-book"))) + :config + (dashboard-setup-startup-hook)) #+end_src * Diminish This package implements hiding or abbreviation of the modeline displays (lighters) of minor-modes. With this package installed, you can add ‘:diminish’ to any use-package block to hide that particular mode in the modeline. @@ -965,77 +1046,38 @@ one, an error is signaled." (select-window other-win)))) #+end_src * Completions -** Vertico -[[https://github.com/minad/vertico][Vertico]] provides a performant and minimalistic vertical completion UI based on the default completion system. -#+begin_src emacs-lisp - ;; Enable vertico - (use-package vertico - :ensure t - :custom - ;; (vertico-scroll-margin 0) ;; Different scroll margin - ;; (vertico-count 20) ;; Show more candidates - ;; (vertico-resize t) ;; Grow and shrink the Vertico minibuffer - (vertico-cycle t) ;; Enable cycling for `vertico-next/previous' - :bind (:map vertico-map - ("C-j" . vertico-next) - ("C-k" . vertico-previous) - :map minibuffer-local-map - ("C-h" . backward-kill-word) - ) - :init - (vertico-mode)) - -(vertico-mode t) ;; enable vertico for all buffers - ;; Persist history over Emacs restarts. Vertico sorts by history position. - (use-package savehist - :init - (savehist-mode)) - - ;; A few more useful configurations... - (use-package emacs - :custom - ;; Support opening new minibuffers from inside existing minibuffers. - (enable-recursive-minibuffers t) - ;; Hide commands in M-x which do not work in the current mode. Vertico - ;; commands are hidden in normal buffers. This setting is useful beyond - ;; Vertico. - (read-extended-command-predicate #'command-completion-default-include-p) - :init - ;; Add prompt indicator to `completing-read-multiple'. - ;; We display [CRM], e.g., [CRM,] if the separator is a comma. - (defun crm-indicator (args) - (cons (format "[CRM%s] %s" - (replace-regexp-in-string - "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" "" - crm-separator) - (car args)) - (cdr args))) - (advice-add #'completing-read-multiple :filter-args #'crm-indicator) - - ;; Do not allow the cursor in the minibuffer prompt - (setq minibuffer-prompt-properties - '(read-only t cursor-intangible t face minibuffer-prompt)) - (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)) - #+end_src - ** Orderless +** Orderless Better searching #+begin_src emacs-lisp -;; Optionally use the `orderless' completion style. -(use-package orderless - :ensure t - :custom - ;; Configure a custom style dispatcher (see the Consult wiki) - ;; (orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch)) - ;; (orderless-component-separator #'orderless-escapable-split-on-space) - (completion-styles '(orderless basic)) - (completion-category-defaults nil) - (completion-category-overrides '((file (styles partial-completion))))) + ;; Optionally use the `orderless' completion style. + (use-package orderless + :ensure t + :custom + ;; Configure a custom style dispatcher (see the Consult wiki) + ;; (orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch)) + ;; (orderless-component-separator #'orderless-escapable-split-on-space) + (completion-styles '(orderless flex basic partial-completion)) + + (completion-category-defaults nil) + (completion-category-overrides '((file (styles partial-completion))))) #+end_src ** Fido-mode Enables fido completion in emacs. -#+begin_src emacs-lispp +#+begin_src emacs-lisp +(global-completion-preview-mode) (fido-mode t) +(savehist-mode t) (fido-vertical-mode t) +(setf completion-auto-select t ;; Show completion on first call + completion-auto-help 'visible ;; Display *Completions* upon first request + completions-format 'one-column ;; Use only one column + completions-sort 'historical ;; Order based on minibuffer history + completions-max-height 20 ;; Limit completions to 15 (completions start at line 5) + completion-ignore-case t) +(define-key icomplete-minibuffer-map (kbd "SPC") 'self-insert-command) ;; Allows to type spaces, if no completions available + +;; Have TAB complete using the first option and continue, instead of popping up the *Completions* buffer +(define-key icomplete-minibuffer-map [remap minibuffer-complete] 'icomplete-force-complete) #+end_src ** Descriptions *** Marginalia