From a86c7a79e5a66deac5f83bc02176f6565c78799c Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Mon, 10 Jun 2024 01:11:43 +0300 Subject: [PATCH] emacs: doom modeline as tab-bar --- .emacs.d/init.el | 80 ++++++++++++++++++++++++++++++++++++++++---- Emacs.org | 87 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 154 insertions(+), 13 deletions(-) diff --git a/.emacs.d/init.el b/.emacs.d/init.el index b8ed87e..5c59720 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -1395,6 +1395,66 @@ Obeys `widen-automatically', which see." (setq doom-modeline-buffer-state-icon nil) (doom-modeline-mode 1)) +(defun my/tab-bar-mode-line--format () + (unless (derived-mode-p 'company-box-mode) + (cl-letf (((symbol-function 'window-pixel-width) + 'frame-pixel-width) + ((symbol-function 'window-margins) + (lambda (&rest _) + (list nil)))) + (let ((doom-modeline-window-width-limit nil) + (doom-modeline--limited-width-p nil)) + (format-mode-line + '("%e" + (:eval + (doom-modeline-format--main)))))))) + +(defun my/hide-mode-line-if-only-window () + (let* ((windows (window-list)) + (hide-mode-line-p (length= windows 1))) + (dolist (win windows) + (with-current-buffer (window-buffer win) + (unless (eq hide-mode-line-p hide-mode-line-mode) + (hide-mode-line-mode + (if hide-mode-line-p +1 -1))))))) + +(define-minor-mode my/tab-bar-mode-line-mode + "Use tab-bar as mode line mode." + :global t + (if my/tab-bar-mode-line-mode + (progn + (tab-bar-mode +1) + (setq tab-bar-format '(my/tab-bar-mode-line--format)) + (set-face-attribute 'tab-bar nil :inherit 'mode-line) + (add-hook 'window-configuration-change-hook #'my/hide-mode-line-if-only-window) + + (dolist (buf (buffer-list)) + (with-current-buffer buf + (doom-modeline-set-modeline 'minimal))) + (doom-modeline-set-modeline 'minimal 'default) + + (dolist (frame (frame-list)) + (with-selected-frame frame + (my/hide-mode-line-if-only-window)) + (when-let (cb-frame (company-box--get-frame frame)) + (set-frame-parameter cb-frame 'tab-bar-lines 0))) + (setenv "POLYBAR_BOTTOM" "false") + (when (fboundp #'my/exwm-run-polybar) + (my/exwm-run-polybar))) + (tab-bar-mode -1) + (setq tab-bar-format + '(tab-bar-format-history tab-bar-format-tabs tab-bar-separator tab-bar-format-add-tab)) + (set-face-attribute 'tab-bar nil :inherit 'default) + (remove-hook 'window-configuration-change-hook #'my/hide-mode-line-if-only-window) + (global-hide-mode-line-mode -1) + (dolist (buf (buffer-list)) + (with-current-buffer buf + (doom-modeline-set-modeline 'main))) + (doom-modeline-set-modeline 'main 'default) + (setenv "POLYBAR_BOTTOM" "true") + (when (fboundp #'my/exwm-run-polybar) + (my/exwm-run-polybar)))) + (use-package perspective :straight t :init @@ -1961,12 +2021,15 @@ Returns ( . ) or nil." (indent-for-tab-command))) (use-package copilot - :straight (:host github :repo "SqrtMinusOne/copilot.el" :files ("dist" "*.el")) + :straight (:host github :repo "copilot/copilot.el") :commands (copilot-mode) :if (not (or my/remote-server my/is-termux)) :init - (add-hook 'prog-mode-hook #'copilot-mode) + (add-hook 'emacs-startup-hook + (lambda () + (add-hook 'prog-mode-hook #'copilot-mode))) :config + (push '(copilot) warning-suppress-types) (setq copilot-node-executable "/home/pavel/.guix-extra-profiles/dev/dev/bin/node") (general-define-key :keymaps 'company-active-map @@ -1975,8 +2038,7 @@ Returns ( . ) or nil." :keymaps 'copilot-mode-map "" #'my/copilot-tab "M-j" #'copilot-accept-completion-by-line - "M-l" #'copilot-accept-completion-by-word) - (setq copilot-lispy-integration t)) + "M-l" #'copilot-accept-completion-by-word)) (defun my/should-run-emmet-p () (and (bound-and-true-p emmet-mode) @@ -2573,7 +2635,7 @@ Returns ( . ) or nil." :straight t :commands (langtool-check) :config - (setq langtool-language-tool-server-jar "/home/pavel/bin/LanguageTool-5.7/languagetool-server.jar") + (setq langtool-language-tool-server-jar "/home/pavel/bin/LanguageTool-6.4/languagetool-server.jar") (setq langtool-mother-tongue "ru") (setq langtool-default-language "en-US")) @@ -3438,7 +3500,7 @@ With ARG, repeats or can move backward if negative." (use-package hide-mode-line :straight t - :after (org-present)) + :commands (hide-mode-line-mode)) (defun my/present-next-with-latex () (interactive) @@ -3544,6 +3606,12 @@ With ARG, repeats or can move backward if negative." name ".csv") "orgtbl-to-csv"))))) +(use-package phscroll + :straight (:host github :repo "misohena/phscroll") + :config + (with-eval-after-load 'org + (require 'org-phscroll))) + (defun my/update-org-agenda () (interactive) (let ((project-files diff --git a/Emacs.org b/Emacs.org index 5659d65..f6d2076 100644 --- a/Emacs.org +++ b/Emacs.org @@ -2200,6 +2200,69 @@ References: (setq doom-modeline-buffer-state-icon nil) (doom-modeline-mode 1)) #+end_src +*** Doom Modeline as Tab Bar +#+begin_src emacs-lisp +(defun my/tab-bar-mode-line--format () + (unless (derived-mode-p 'company-box-mode) + (cl-letf (((symbol-function 'window-pixel-width) + 'frame-pixel-width) + ((symbol-function 'window-margins) + (lambda (&rest _) + (list nil)))) + (let ((doom-modeline-window-width-limit nil) + (doom-modeline--limited-width-p nil)) + (format-mode-line + '("%e" + (:eval + (doom-modeline-format--main)))))))) + +(defun my/hide-mode-line-if-only-window () + (let* ((windows (window-list)) + (hide-mode-line-p (length= windows 1))) + (dolist (win windows) + (with-current-buffer (window-buffer win) + (unless (eq hide-mode-line-p hide-mode-line-mode) + (hide-mode-line-mode + (if hide-mode-line-p +1 -1))))))) + +(define-minor-mode my/tab-bar-mode-line-mode + "Use tab-bar as mode line mode." + :global t + (if my/tab-bar-mode-line-mode + (progn + (tab-bar-mode +1) + (setq tab-bar-format '(my/tab-bar-mode-line--format)) + (set-face-attribute 'tab-bar nil :inherit 'mode-line) + (add-hook 'window-configuration-change-hook #'my/hide-mode-line-if-only-window) + + (dolist (buf (buffer-list)) + (with-current-buffer buf + (doom-modeline-set-modeline 'minimal))) + (doom-modeline-set-modeline 'minimal 'default) + + (dolist (frame (frame-list)) + (with-selected-frame frame + (my/hide-mode-line-if-only-window)) + (when-let (cb-frame (company-box--get-frame frame)) + (set-frame-parameter cb-frame 'tab-bar-lines 0))) + (setenv "POLYBAR_BOTTOM" "false") + (when (fboundp #'my/exwm-run-polybar) + (my/exwm-run-polybar))) + (tab-bar-mode -1) + (setq tab-bar-format + '(tab-bar-format-history tab-bar-format-tabs tab-bar-separator tab-bar-format-add-tab)) + (set-face-attribute 'tab-bar nil :inherit 'default) + (remove-hook 'window-configuration-change-hook #'my/hide-mode-line-if-only-window) + (global-hide-mode-line-mode -1) + (dolist (buf (buffer-list)) + (with-current-buffer buf + (doom-modeline-set-modeline 'main))) + (doom-modeline-set-modeline 'main 'default) + (setenv "POLYBAR_BOTTOM" "true") + (when (fboundp #'my/exwm-run-polybar) + (my/exwm-run-polybar)))) +#+end_src + ** perspective.el [[https://github.com/nex3/perspective-el][perspective.el]] is a package that groups buffers in "perspectives". @@ -2935,12 +2998,15 @@ A general-purpose package to run formatters on files. While the most popular for (indent-for-tab-command))) (use-package copilot - :straight (:host github :repo "SqrtMinusOne/copilot.el" :files ("dist" "*.el")) + :straight (:host github :repo "copilot/copilot.el") :commands (copilot-mode) :if (not (or my/remote-server my/is-termux)) :init - (add-hook 'prog-mode-hook #'copilot-mode) + (add-hook 'emacs-startup-hook + (lambda () + (add-hook 'prog-mode-hook #'copilot-mode))) :config + (push '(copilot) warning-suppress-types) (setq copilot-node-executable "/home/pavel/.guix-extra-profiles/dev/dev/bin/node") (general-define-key :keymaps 'company-active-map @@ -2949,8 +3015,7 @@ A general-purpose package to run formatters on files. While the most popular for :keymaps 'copilot-mode-map "" #'my/copilot-tab "M-j" #'copilot-accept-completion-by-line - "M-l" #'copilot-accept-completion-by-word) - (setq copilot-lispy-integration t)) + "M-l" #'copilot-accept-completion-by-word)) #+end_src ** Web development Configs for various web development technologies I'm using. @@ -3533,7 +3598,7 @@ References: :straight t :commands (langtool-check) :config - (setq langtool-language-tool-server-jar "/home/pavel/bin/LanguageTool-5.7/languagetool-server.jar") + (setq langtool-language-tool-server-jar "/home/pavel/bin/LanguageTool-6.4/languagetool-server.jar") (setq langtool-mother-tongue "ru") (setq langtool-default-language "en-US")) @@ -4822,7 +4887,7 @@ Doing presentations with [[https://github.com/rlister/org-present][org-present]] #+begin_src emacs-lisp (use-package hide-mode-line :straight t - :after (org-present)) + :commands (hide-mode-line-mode)) (defun my/present-next-with-latex () (interactive) @@ -4951,6 +5016,15 @@ I use Org to manage some small tables which I want to process further. So here i name ".csv") "orgtbl-to-csv"))))) #+end_src +*** Partial scrolling +#+begin_src emacs-lisp +(use-package phscroll + :straight (:host github :repo "misohena/phscroll") + :config + (with-eval-after-load 'org + (require 'org-phscroll))) +#+end_src + ** Productivity & Knowledge management My ongoing effort to +get a productivity setup+ manage something in my life in Org. @@ -10995,7 +11069,6 @@ For gptel, this approach doesn't work and I've got no clue why. So... ,@(plist-get request-alist :options)))) request-alist))) #+end_src - ** Declarative filesystem management My filesystem is, shall we say, not the most orderly place.