From 093ffa5fbf7143f4668bb0a3dc9659a5cc836e12 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sat, 17 Jun 2023 17:20:29 +1000 Subject: Moving things one level deeper To ease gnu stow usage. Now we can do stow -t ~ emacs --- emacs/.emacs.d/init/ycp-buffer.el | 239 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 emacs/.emacs.d/init/ycp-buffer.el (limited to 'emacs/.emacs.d/init/ycp-buffer.el') diff --git a/emacs/.emacs.d/init/ycp-buffer.el b/emacs/.emacs.d/init/ycp-buffer.el new file mode 100644 index 0000000..56bcf08 --- /dev/null +++ b/emacs/.emacs.d/init/ycp-buffer.el @@ -0,0 +1,239 @@ +;;; ycp-buffer.el -- My config for buffers, windows, frames etc. -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Free Software Foundation. + +;; Author: Yuchen Pei +;; Protesilaos Stavrou +;; Maintainer: Yuchen Pei +;; Package-Requires: ((emacs "28.2")) + +;; This file is part of dotfiles. + +;; dotfiles is free software: you can redistribute it and/or modify it under +;; the terms of the GNU Affero General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; dotfiles is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +;; Public License for more details. + +;; You should have received a copy of the GNU Affero General Public +;; License along with dotfiles. If not, see . + +;;; Commentary: + +;; My config for buffers, windows, frames etc.. + +;;; Code: + + +(my-package my-buffer + (:delay 15) + (my-keybind global-map + "\M-c" #'my-copy-buffer-file-name + "" #'my-rename-file-and-buffer + "C-x k" #'my-kill-buffer + "M-s b" #'my-switch-to-buffer-matching-major-mode + "M-s v" #'my-buffers-vc-root + ;; F7: Cycle or create buffers with the same base buffer as the + ;; current buffer + "" #'my-create-or-switch-indirect-buffers + ;; F8: Cycle or create buffers with the same major mode as the + ;; current buffer + "" #'my-buffer-create-or-cycle-same-mode + ;; F9: Prompt for a mode, then switch to or create a buffer of + ;; that mode + "" #'my-buffer-switch-or-create-major-mode + ) + ) + +(my-configure + (:delay 15) + (my-keybind ctl-x-x-map + "f" #'follow-mode ; override `font-lock-update' + "r" #'rename-uniquely + "l" #'visual-line-mode) + + ;; make ibuffer default + (advice-add 'list-buffers :override 'ibuffer-list-buffers) + + ;; In Emacs 27+, use Control + mouse wheel to scale text. + (setq mouse-wheel-scroll-amount + '(1 + ((shift) . 5) + ((meta) . 0.5) + ((control) . text-scale)) + mouse-drag-copy-region nil + make-pointer-invisible t + mouse-wheel-progressive-speed t + mouse-wheel-follow-mouse t) + + ;; Scrolling behaviour + (setq-default scroll-conservatively 1 ; affects `scroll-step' + scroll-margin 0 + next-screen-context-lines 0) + + (mouse-wheel-mode 1) + (define-key global-map (kbd "C-M-") #'tear-off-window)) + +;;; Repeatable key chords (repeat-mode) +(my-package repeat + (:delay 30) + (setq repeat-on-final-keystroke t + repeat-exit-timeout 5 + repeat-exit-key "" + repeat-keep-prefix nil + repeat-check-key t + repeat-echo-function 'ignore + ;; Technically, this is not in repeal.el, though it is the + ;; same idea. + set-mark-command-repeat-pop t) + (repeat-mode 1)) + +;;;; Built-in bookmarking framework (bookmark.el) +(my-package bookmark + (setq bookmark-use-annotations nil) + (setq bookmark-automatically-show-annotations t) + (add-hook 'bookmark-bmenu-mode-hook #'hl-line-mode)) + +(my-package follow + (:delay 15) + ;; TODO: update this to adapt to number of windows + (my-keybind follow-mode-map + "C-v" #'follow-scroll-up + "M-v" #'follow-scroll-down + "" #'follow-scroll-up + "" #'follow-scroll-down) + ) + +(my-package view + (:delay 10) + (my-keybind view-mode-map + "n" #'next-line + "p" #'previous-line + "f" #'forward-char + "b" #'backward-char + "e" #'move-end-of-line + "a" #'move-beginning-of-line + "v" #'scroll-up-command + "V" #'scroll-down-command + "l" #'previous-buffer + "r" #'next-buffer + "d" nil + "u" nil + "w" #'kill-ring-save + "i" #'view-mode) + (my-keybind global-map "C-`" #'view-mode)) + +;; move windows +(my-package windmove + (:delay 5) + (windmove-default-keybindings 'control) + ;; swap windows + (windmove-swap-states-default-keybindings '(control shift)) + (setq windmove-wrap-around t)) + +(my-package winner + (:delay 5) + (winner-mode t)) + +;;;; `window', `display-buffer-alist', and related +(my-package window + (require 'time) + (require 'my-buffer) + (setq display-buffer-alist + `(;; no window + ("\\`\\*Async Shell Command\\*\\'" + (display-buffer-no-window) + (dedicated . t)) + ;; bottom side window + ("\\*Org Select\\*" ; the `org-capture' key selection + (display-buffer-in-side-window) + (dedicated . t) + (side . bottom) + (slot . 0) + (window-parameters . ((mode-line-format . none)))) + ;; bottom buffer (NOT side window) + ((or . (,(my-buffer-make-display-matcher + '(flymake-diagnostics-buffer-mode + flymake-project-diagnostics-mode + messages-buffer-mode backtrace-mode)) + "\\*\\(Warnings\\|Compile-Log\\|Org Links\\)\\*" + ,world-clock-buffer-name)) + (display-buffer-reuse-mode-window display-buffer-at-bottom) + (window-height . 0.3) + (dedicated . t) + (preserve-size . (t . t))) + ("\\*\\(Output\\|Register Preview\\).*" + (display-buffer-reuse-mode-window display-buffer-at-bottom)) + ;; below current window + ((derived-mode . help-mode) ; See the hooks for `visual-line-mode' + (display-buffer-reuse-mode-window display-buffer-below-selected)) + ("\\*\\vc-\\(incoming\\|outgoing\\|git : \\).*" + (display-buffer-reuse-mode-window display-buffer-below-selected) + (window-height . 0.1) + (dedicated . t) + (preserve-size . (t . t))) + ((derived-mode . log-view-mode) + (display-buffer-reuse-mode-window display-buffer-below-selected) + (window-height . 0.3) + (dedicated . t) + (preserve-size . (t . t))) + ((derived-mode . reb-mode) ; M-x re-builder + (display-buffer-reuse-mode-window display-buffer-below-selected) + (window-height . 4) ; note this is literal lines, not relative + (dedicated . t) + (preserve-size . (t . t))) + ("\\*\\(Calendar\\|Bookmark Annotation\\).*" + (display-buffer-reuse-mode-window display-buffer-below-selected) + (dedicated . t) + (window-height . fit-window-to-buffer)) + ("\\*ispell-top-choices\\*.*" + (display-buffer-reuse-mode-window display-buffer-below-selected) + (window-height . fit-window-to-buffer)) + ;; same window + + ;; NOTE 2023-02-17: `man' does not fully obey the + ;; `display-buffer-alist'. It works for new frames and for + ;; `display-buffer-below-selected', but otherwise is + ;; unpredictable. See `Man-notify-method'. + ((or . ((derived-mode . Man-mode) + (derived-mode . woman-mode) + "\\*\\(Man\\|woman\\).*" + "\\*shell\\*.*")) + (display-buffer-same-window)) +)) + + (setq switch-to-buffer-in-dedicated-window 'pop) + (setq window-combination-resize t) + (my-keybind resize-window-repeat-map + ">" #'enlarge-window-horizontally + "<" #'shrink-window-horizontally) + ) + +(my-keybind global-map + "C-x C-n" #'next-buffer ; override `set-goal-column' + "C-x C-p" #'previous-buffer ; override `mark-page' + "C-x !" #'delete-other-windows-vertically + "C-x _" #'balance-windows ; underscore + "C-x -" #'fit-window-to-buffer ; hyphen + "C-x +" #'balance-windows-area + "C-x }" #'enlarge-window + "C-x {" #'shrink-window + "C-x >" #'enlarge-window-horizontally ; override `scroll-right' + "C-x <" #'shrink-window-horizontally) ; override `scroll-left' + +(my-package my-buffer + (:delay 10) + (my-keybind global-map + "" #'my-focus-write + "" #'my-cycle-windows + "C-M-" #'my-increase-default-face-height + "C-M-" #'my-decrease-default-face-height) + ) + +(setq large-file-warning-threshold 15000000) + +(provide 'ycp-buffer) -- cgit v1.2.3