;;; mitch-defuns.el --- custom-defined functions ;;; Commentary: ;; _ _ _ ;; _ __ ___ (_)| |_ ___ | |__ ;; | '_ ` _ \ | || __|/ __|| '_ \ _____ ;; | | | | | || || |_| (__ | | | ||_____| ;; |_| |_| |_||_| \__|\___||_| |_| ;; _ __ _ ;; __| | ___ / _| _ _ _ __ ___ ___ | | ;; / _` | / _ \| |_ | | | || '_ \ / __| / _ \| | ;; | (_| || __/| _|| |_| || | | |\__ \ _ | __/| | ;; \__,_| \___||_| \__,_||_| |_||___/(_) \___||_| ;; ;; Some functions to run when loading packages... ;;; Code: (defun mitch/evil-config () "A batch of commands to run as the :config of evil's `use-package'. Made solely to reduce lines in the init-file." ;; Visual moving (defun move-screen-down-line () "Scroll down line but keep cursor in same visual position." (interactive) (evil-previous-line) (scroll-down-line)) (defun move-screen-up-line () "Scroll up line but keep cursor in same visual position." (interactive) (evil-next-line) (scroll-up-line)) ;; Search showing (defun mitch/search-and-rebalance (&optional &rest flush) (evil-scroll-line-to-center (car flush))) (advice-add 'evil-search-next :filter-return #'mitch/search-and-rebalance) (add-hook 'isearch-mode-end-hook #'mitch/search-and-rebalance)) (defun mitch/visual-setup () "Commands to run when setting up any display. To be called in use-package declarations for color schemes." (tooltip-mode -1) (menu-bar-mode -1) (set-face-attribute 'fixed-pitch nil :family "MesloLGS Nerd Font") (set-face-attribute 'default nil :family "MesloLGS Nerd Font") ;; (set-face-attribute 'variable-pitch nil ;; :inherit 'default ;; :family "Sans Serif") (setq window-divider-default-places t) (setq right-divider-width 5) (setq ring-bell-function 'ignore) (add-to-list 'initial-frame-alist '(alpha-background . 65)) (add-to-list 'default-frame-alist '(alpha-background . 65)) (add-to-list 'default-frame-alist '(cursor-color . "white")) (add-to-list 'default-frame-alist '(fullscreen . maximized)) ;; see also https://emacs.stackexchange.com/questions/7228/nice-tty-window-borders-in-24-4 (let ((display-table (or standard-display-table (make-display-table)))) (set-display-table-slot display-table 'vertical-border (make-glyph-code ?│)) (setq standard-display-table display-table))) (defun mitch/graphical-setup () "Commands to run at the beginning of init when on a graphical display. This prevents errors in termux and speeds up init when editing from the console." ;; hide gui scrollbars and menubar etc (scroll-bar-mode -1) ;; use `yascroll' instead (setq scroll-bar-adjust-thumb-portion nil) (tool-bar-mode 0) (menu-bar-mode 0) (set-fringe-mode 8) ;; diable stupid file open box thingy (setq use-file-dialog nil) (setq use-dialog-box nil) ;; Pixel scrolling. Only in emacs 29+... (if (>= (string-to-number emacs-version) 29) (pixel-scroll-precision-mode t) (pixel-scroll-mode t)) ;; Size of text. お前 わ 毛 しんでる. (if (eq system-type 'gnu/linux) (progn (set-face-attribute 'fixed-pitch nil :height 130) (set-face-attribute 'default nil :height 130) (set-face-attribute 'variable-pitch nil :height 140)) (progn (set-face-attribute 'fixed-pitch nil :height 100) (set-face-attribute 'default nil :height 100) (set-face-attribute 'variable-pitch nil :height 110)))) (defun toggle-ja-input () "Switch between english and japanese. Broken." (interactive) (if (eq current-input-method 'japanese) (setq current-input-method 'japanese-ascii) (setq current-input-method 'japanese))) (defun mitch/general-config () "A batch of commands to run immediately after loading the `general' package. Made solely to reduce lines in the init file." (require 'mitch-keybinds)) (defun turn-off-line-numbers () "A tiny wrapper around `display-line-numbers-mode' or `linum'. For use in hooks." (interactive) (if (bound-and-true-p display-line-numbers-mode) (display-line-numbers-mode -1)) (if (fboundp #'linum-mode) (linum-mode -1)) (if (fboundp #'linum-relative-mode) (linum-relative-mode -1)) (if (fboundp #'nlinum-mode) (nlinum-mode -1)) (if (fboundp #'nlinum-relative-mode) (nlinum-relative-mode -1))) (defun mitch/terminal-setup () "A batch of commands to run when opening anything that looks like a terminal. For instance: - Shell - (ansi-)term - eshell - vterm - Maybe SLIME too." (turn-off-line-numbers)) ;; for vterm (defun update-pwd (path) "Sync Emacs' working PATH with the shell's. For use with `vterm'." (setq default-directory path)) ;; reference: https://stackoverflow.com/questions/4114577/how-do-i-define-an-emacs-lisp-function-to-spawn-a-shell-buffer-with-a-particular (defun spawn-shell (name) "Invoke shell test" (interactive "MName of shell buffer to create: ") (pop-to-buffer (get-buffer-create (generate-new-buffer-name name))) (shell (current-buffer))) ;; This one line cost me over an hour of frustration... (provide 'mitch-defuns) ;;; mitch-defuns.el ends here