X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/2331b5a061ecc167f035aef62c09a4b5d4bf873c..1eb203130bcee485d5abaead5dc7ee723a49d864:/init.el diff --git a/init.el b/init.el index bcde97a..d66ec10 100644 --- a/init.el +++ b/init.el @@ -250,6 +250,29 @@ For disabling the behaviour for certain buffers and/or modes." (point))) (move-beginning-of-line arg))) +(defun b/join-line-top () + "Like `join-line', but join next line to the current line." + (interactive) + (join-line 1)) + +(defun b/duplicate-line-or-region (&optional n) + "Duplicate the current line, or region (if active). +Make N (default: 1) copies of the current line or region." + (interactive "*p") + (let ((u-r-p (use-region-p)) ; if region is active + (n1 (or n 1))) + (save-excursion + (let ((text + (if u-r-p + (buffer-substring (region-beginning) (region-end)) + (prog1 (thing-at-point 'line) + (end-of-line) + (if (eobp) + (newline) + (forward-line 1)))))) + (dotimes (_ (abs n1)) + (insert text)))))) + ;;; Defaults @@ -272,7 +295,7 @@ For disabling the behaviour for certain buffers and/or modes." ;; scroll-margin 1 ;; scroll-conservatively 10000 scroll-step 1 - scroll-conservatively 10 + scroll-conservatively 101 scroll-preserve-screen-position 1 ;; focus follows mouse mouse-autoselect-window t) @@ -503,6 +526,7 @@ For disabling the behaviour for certain buffers and/or modes." (bind-keys ("C-a" . b/move-indentation-or-beginning-of-line) ("C-c a i" . ielm) + ("C-c d" . b/duplicate-line-or-region) ("C-c e b" . eval-buffer) ("C-c e e" . eval-last-sexp) @@ -523,6 +547,8 @@ For disabling the behaviour for certain buffers and/or modes." ("C-S-h C" . describe-char) ("C-S-h F" . describe-face) + ("C-S-j" . b/join-line-top) + ("C-c x" . execute-extended-command) ("C-x k" . b/kill-current-buffer) @@ -561,6 +587,8 @@ For disabling the behaviour for certain buffers and/or modes." (require 'bandali-org) +(require 'bandali-theme) + ;; *the* right way to do git (use-package magit :bind (("C-x g" . magit-status) @@ -610,6 +638,7 @@ For disabling the behaviour for certain buffers and/or modes." (require 'bandali-ivy) (require 'bandali-eshell) +;; (require 'bandali-multi-term) (require 'bandali-ibuffer) @@ -629,7 +658,12 @@ For disabling the behaviour for certain buffers and/or modes." ("H" . outline-hide-body) ("S" . outline-show-all) ("h" . outline-hide-subtree) - ("s" . outline-show-subtree))) + ("s" . outline-show-subtree)) + :config + (when (featurep 'which-key) + (which-key-add-key-based-replacements + "C-c @" "outline" + "s-O" "outline"))) (use-package ls-lisp :custom (ls-lisp-dirs-first t)) @@ -812,11 +846,6 @@ For disabling the behaviour for certain buffers and/or modes." (setq indent-tabs-mode nil)) (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode)) -(use-package reveal - :hook (emacs-lisp-mode . reveal-mode)) - -;; (use-package elisp-mode) - (use-package alloy-mode :mode "\\.\\(als\\|dsh\\)\\'" :config @@ -836,10 +865,10 @@ For disabling the behaviour for certain buffers and/or modes." ("TAB" . indent-for-tab-command)) :hook (alloy-mode . (lambda () (setq-local indent-tabs-mode nil)))) -(comment -(eval-when-compile (defvar lean-mode-map)) (use-package lean-mode + :disabled :defer 0.4 + :init (eval-when-compile (defvar lean-mode-map)) :bind (:map lean-mode-map ("S-SPC" . company-complete)) :config @@ -851,8 +880,6 @@ For disabling the behaviour for certain buffers and/or modes." lean-input-user-translations '(("/" "/"))) (lean-input-setup)) -;; (use-package mhtml-mode) - (use-package sgml-mode :config (setq sgml-basic-offset 0)) @@ -870,26 +897,30 @@ For disabling the behaviour for certain buffers and/or modes." (setq emmet-move-cursor-between-quotes t) :hook (css-mode html-mode sgml-mode)) -(use-package geiser) +(use-package geiser + :disabled) (use-package geiser-guile + :disabled :config (setq geiser-guile-load-path "~/src/git/guix")) -(use-package guix) - -(comment - (use-package auctex - :custom - (font-latex-fontify-sectioning 'color))) +(use-package guix + :disabled) (use-package go-mode :disabled) (use-package po-mode + :disabled :hook (po-mode . (lambda () (run-with-timer 0.1 nil 'View-exit)))) +(use-package auctex + :disabled + :custom + (font-latex-fontify-sectioning 'color)) + (use-package tex-mode :config (cl-delete-if @@ -903,92 +934,6 @@ For disabling the behaviour for certain buffers and/or modes." ;; :mode "\\.grg\\'") -;;; Theme - -(add-to-list 'custom-theme-load-path - (expand-file-name - (convert-standard-filename "lisp") user-emacs-directory)) -(load-theme 'tangomod t) - -(use-package smart-mode-line - :commands (sml/apply-theme) - :demand - :config - ;; thanks, but no thnaks; don't make fixed-width fills. - (defun sml/fill-for-buffer-identification () "") - (setq sml/theme 'tangomod) - (sml/setup) - (smart-mode-line-enable)) - -(use-package doom-modeline - :disabled - :demand - :hook (after-init . doom-modeline-init) - :custom - (doom-modeline-buffer-file-name-style 'relative-to-project)) - -(use-package doom-themes) - -(use-package moody - :disabled - :demand - :config - (setq x-underline-at-descent-line t) - (let ((line (face-attribute 'mode-line :underline))) - (set-face-attribute 'mode-line nil :overline line) - (set-face-attribute 'mode-line-inactive nil :overline line) - (set-face-attribute 'mode-line-inactive nil :underline line) - (set-face-attribute 'mode-line nil :box nil) - (set-face-attribute 'mode-line-inactive nil :box nil) - (set-face-attribute 'mode-line-inactive nil :background "#e1e1e1")) ; d3d7cf - (moody-replace-mode-line-buffer-identification) - (moody-replace-vc-mode)) - -(use-package mini-modeline - :disabled - :demand - :config (mini-modeline-mode)) - -(defvar b/org-mode-font-lock-keywords - '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)" - (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive - (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind - (4 '(:foreground "#c5c8c6") t))) ; title - "For use with the `doom-tomorrow-night' theme.") - -(defun b/lights-on () - "Enable my favourite light theme." - (interactive) - (mapc #'disable-theme custom-enabled-themes) - (load-theme 'tangomod t) - (when (featurep 'smart-mode-line) - (sml/apply-theme 'tangomod)) - (font-lock-remove-keywords - 'org-mode b/org-mode-font-lock-keywords) - (when (featurep 'erc-hl-nicks) - (erc-hl-nicks-reset-face-table)) - (when (featurep 'exwm-systemtray) - (exwm-systemtray--refresh))) - -(defun b/lights-off () - "Go dark." - (interactive) - (mapc #'disable-theme custom-enabled-themes) - (load-theme 'doom-one t) - (when (featurep 'smart-mode-line) - (sml/apply-theme 'automatic)) - (font-lock-add-keywords - 'org-mode b/org-mode-font-lock-keywords t) - (when (featurep 'erc-hl-nicks) - (erc-hl-nicks-reset-face-table)) - (when (featurep 'exwm-systemtray) - (exwm-systemtray--refresh))) - -(bind-keys - ("C-c t d" . b/lights-off) - ("C-c t l" . b/lights-on)) - - ;;; Emacs enhancements & auxiliary packages (use-package man @@ -999,7 +944,6 @@ For disabling the behaviour for certain buffers and/or modes." :config (which-key-add-key-based-replacements ;; prefixes for global prefixes and minor modes - "C-c @" "outline" "C-c !" "flycheck" "C-x RET" "coding system" "C-x 8" "unicode" @@ -1024,15 +968,8 @@ For disabling the behaviour for certain buffers and/or modes." "C-c F" "frames" "C-c g" "magit" "C-S-h" "help(ful)" - "C-c m" "multiple-cursors" - "C-c p" "projectile" - "C-c p s" "projectile/search" - "C-c p x" "projectile/execute" - "C-c p 4" "projectile/other-window" "C-c q" "boxquote" - "C-c t" "themes" - ;; "s-O" "outline" - ) + "C-c t" "themes") ;; prefixes for major modes (which-key-add-major-mode-key-based-replacements 'message-mode @@ -1043,57 +980,15 @@ For disabling the behaviour for certain buffers and/or modes." (which-key-mode) :custom (which-key-add-column-padding 5) - (which-key-max-description-length 32)) + (which-key-idle-delay 10000) + (which-key-idle-secondary-delay 0.05) + (which-key-max-description-length 32) + (which-key-show-early-on-C-h t)) -(use-package crux ; results in Waiting for git... [2 times] - :defer 0.4 - :bind (("C-c d" . crux-duplicate-current-line-or-region) - ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region) - ("C-c f C" . crux-copy-file-preserve-attributes) - ("C-c f D" . crux-delete-file-and-buffer) - ("C-c f R" . crux-rename-file-and-buffer) - ("C-c j" . crux-top-join-line) - ("C-S-j" . crux-top-join-line))) - -(use-package mwim - :bind (("C-a" . mwim-beginning-of-code-or-line) - ("C-e" . mwim-end-of-code-or-line) - ("" . mwim-beginning-of-line-or-code) - ("" . mwim-end-of-line-or-code))) - -(use-package projectile - :disabled - :defer 0.5 - :bind-keymap ("C-c p" . projectile-command-map) - :config - (projectile-mode) - - (defun b/projectile-mode-line-fun () - "Report project name and type in the modeline." - (let ((project-name (projectile-project-name)) - (project-type (projectile-project-type))) - (format "%s%s" - projectile-mode-line-prefix - (if project-type - (format ":%s" project-type) - "")))) - (setq projectile-mode-line-function 'b/projectile-mode-line-fun) - - (defun my-projectile-invalidate-cache (&rest _args) - ;; ignore the args to `magit-checkout' - (projectile-invalidate-cache nil)) - - (eval-after-load 'magit-branch - '(progn - (advice-add 'magit-checkout - :after #'my-projectile-invalidate-cache) - (advice-add 'magit-branch-and-checkout - :after #'my-projectile-invalidate-cache))) - :custom - (projectile-completion-system 'ivy) - (projectile-mode-line-prefix " proj")) +;; (require 'bandali-projectile) (use-package helpful + :disabled :defer 0.6 :bind (("C-S-h c" . helpful-command) @@ -1115,95 +1010,36 @@ For disabling the behaviour for certain buffers and/or modes." (use-package boxquote :defer 0.6 :bind - (:prefix-map b/boxquote-prefix-map - :prefix "C-c q" - ("b" . boxquote-buffer) - ("B" . boxquote-insert-buffer) - ("d" . boxquote-defun) - ("F" . boxquote-insert-file) - ("hf" . boxquote-describe-function) - ("hk" . boxquote-describe-key) - ("hv" . boxquote-describe-variable) - ("hw" . boxquote-where-is) - ("k" . boxquote-kill) - ("p" . boxquote-paragraph) - ("q" . boxquote-boxquote) - ("r" . boxquote-region) - ("s" . boxquote-shell-command) - ("t" . boxquote-text) - ("T" . boxquote-title) - ("u" . boxquote-unbox) - ("U" . boxquote-unbox-region) - ("y" . boxquote-yank) - ("M-q" . boxquote-fill-paragraph) - ("M-w" . boxquote-kill-ring-save))) - -(use-package orgalist - ;; breaks auto-fill-mode, showing this error: - ;; orgalist--boundaries: Lisp nesting exceeds ‘max-lisp-eval-depth’ - :disabled - :after message - :hook (message-mode . orgalist-mode)) + (:prefix-map + b/boxquote-prefix-map + :prefix "C-c q" + ("b" . boxquote-buffer) + ("B" . boxquote-insert-buffer) + ("d" . boxquote-defun) + ("F" . boxquote-insert-file) + ("hf" . boxquote-describe-function) + ("hk" . boxquote-describe-key) + ("hv" . boxquote-describe-variable) + ("hw" . boxquote-where-is) + ("k" . boxquote-kill) + ("p" . boxquote-paragraph) + ("q" . boxquote-boxquote) + ("r" . boxquote-region) + ("s" . boxquote-shell-command) + ("t" . boxquote-text) + ("T" . boxquote-title) + ("u" . boxquote-unbox) + ("U" . boxquote-unbox-region) + ("y" . boxquote-yank) + ("M-q" . boxquote-fill-paragraph) + ("M-w" . boxquote-kill-ring-save))) -;; highlight TODOs in buffers (use-package hl-todo + ;; highlight TODOs in buffers :defer 0.5 :config (global-hl-todo-mode)) -(use-package multi-term - :disabled - :defer 0.6 - :bind (("C-c a s m m" . multi-term) - ("C-c a s m d" . multi-term-dedicated-toggle) - ("C-c a s m p" . multi-term-prev) - ("C-c a s m n" . multi-term-next) - :map term-mode-map - ("C-c C-j" . term-char-mode)) - :config - (setq multi-term-program "screen" - multi-term-program-switches (concat "-c" - (getenv "XDG_CONFIG_HOME") - "/screen/screenrc") - ;; TODO: add separate bindings for connecting to existing - ;; session vs. always creating a new one - multi-term-dedicated-select-after-open-p t - multi-term-dedicated-window-height 20 - multi-term-dedicated-max-window-height 30 - term-bind-key-alist - '(("C-c C-c" . term-interrupt-subjob) - ("C-c C-e" . term-send-esc) - ("C-c C-j" . term-line-mode) - ("C-k" . kill-line) - ;; ("C-y" . term-paste) - ("C-y" . term-send-raw) - ("M-f" . term-send-forward-word) - ("M-b" . term-send-backward-word) - ("M-p" . term-send-up) - ("M-n" . term-send-down) - ("M-j" . term-send-raw-meta) - ("M-y" . term-send-raw-meta) - ("M-/" . term-send-raw-meta) - ("M-0" . term-send-raw-meta) - ("M-1" . term-send-raw-meta) - ("M-2" . term-send-raw-meta) - ("M-3" . term-send-raw-meta) - ("M-4" . term-send-raw-meta) - ("M-5" . term-send-raw-meta) - ("M-6" . term-send-raw-meta) - ("M-7" . term-send-raw-meta) - ("M-8" . term-send-raw-meta) - ("M-9" . term-send-raw-meta) - ("" . term-send-backward-kill-word) - ("" . term-send-backward-kill-word) - ("M-d" . term-send-delete-word) - ("M-," . term-send-raw) - ("M-." . comint-dynamic-complete)) - term-unbind-key-alist - '("C-z" "C-x" "C-c" "C-h" - ;; "C-y" - ""))) - (use-package page-break-lines :defer 0.5 :custom @@ -1214,35 +1050,9 @@ For disabling the behaviour for certain buffers and/or modes." (use-package expand-region :bind ("C-=" . er/expand-region)) -(use-package multiple-cursors - :bind - (("C-S-" . mc/add-cursor-on-click) - (:prefix-map b/mc-prefix-map - :prefix "C-c m" - ("c" . mc/edit-lines) - ("n" . mc/mark-next-like-this) - ("p" . mc/mark-previous-like-this) - ("a" . mc/mark-all-like-this)))) - -(use-package yasnippet - :defer 0.6 - :config - (defconst yas-verbosity-cur yas-verbosity) - (setq yas-verbosity 2) - (add-to-list 'yas-snippet-dirs "~/src/git/guix/etc/snippets" t) - (yas-reload-all) - (setq yas-verbosity yas-verbosity-cur) - - (defun b/yas--maybe-expand-key-filter (cmd) - (when (and (yas--maybe-expand-key-filter cmd) - (not (bound-and-true-p git-commit-mode))) - cmd)) - (defconst b/yas-maybe-expand - '(menu-item "" yas-expand :filter b/yas--maybe-expand-key-filter)) - (define-key yas-minor-mode-map - (kbd "SPC") b/yas-maybe-expand) - - (yas-global-mode)) +(require 'bandali-yasnippet) + +(comment (use-package debbugs :bind @@ -1354,10 +1164,6 @@ For disabling the behaviour for certain buffers and/or modes." (goto-char (cdr macro))) (reftex-this-word))))) -(use-package minions - :demand - :config (minions-mode)) - (use-package dmenu :custom (dmenu-prompt-string "run: ")