;;; -*- lexical-binding: t -*- ;; ;; -------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) ;; -------------------------------------------------------------------------- ;; civlized scrolling, one line at a time (setq scroll-conservatively 10000) (setq auto-window-vscroll nil) ;; -------------------------------------------------------------------------- ;; vertical (defun scroll-up-1 () (i) (scroll-down 1)) (defun scroll-down-1 () (i) (scroll-up 1)) ;; -------------------------------------------------------------------------- ;; automatic (defun start-automatic-scroll-down () (i) (cl-loop for win = (window-end) do (scroll-down-1) (sleep-for 1) ; put speed here in seconds (redisplay) until (= win (window-end)))) ;; (start-automatic-scroll-down) ;; ^ test here, stop with C-g ;; -------------------------------------------------------------------------- ;; other window (defun scroll-up-other-window () (i) (scroll-other-window-down 1)) (defun scroll-down-other-window () (i) (scroll-other-window 1)) ;; -------------------------------------------------------------------------- ;; panes (defun get-window-lines () (pcase-let* ((`(,_ ,top ,_ ,bottom) (window-inside-edges)) (lines (- bottom top))) (if (member major-mode '(Buffer-menu-mode package-menu-mode w3m-mode)) (1- lines) lines))) (defun scroll-up-pane () (i) (condition-case nil (or (scroll-down (get-window-lines)) t) (error nil))) (defun scroll-down-pane () (i) (condition-case nil (or (scroll-up (get-window-lines)) t) (error nil))) ;; -------------------------------------------------------------------------- ;; horizontal scroll (put 'scroll-left 'disabled nil) (put 'scroll-right 'disabled nil) (setq hscroll-margin 1) (setq hscroll-step 1) (defun scroll-left-1 () (i) (scroll-right 1 0)) (defun scroll-right-1 () (i) (scroll-left 1 0)) ;; -------------------------------------------------------------------------- ;; keys (defun set-pane-scroll-keys (kmap) "Set KMAP keys for vertical scrolling in panes." (keymap-set kmap "I" #'scroll-up-pane) (keymap-set kmap "K" #'scroll-down-pane)) (defun set-scroll-keys (kmap &optional hori) (when hori (keymap-set kmap "j" #'scroll-left-1) (keymap-set kmap "l" #'scroll-right-1)) (keymap-set kmap "i" #'scroll-up-1) (keymap-set kmap "M-i" #'scroll-up-1) (keymap-set kmap "k" #'scroll-down-1) (keymap-set kmap "M-k" #'scroll-down-1) (set-pane-scroll-keys kmap)) (defun set-vertical-keys (kmap &optional button np tab funs) (pcase-let ((`(,up ,down) (or funs (if button `(,#'backward-button ,#'forward-button) `(,#'previous-line ,#'forward-line))))) (keymap-set kmap "i" up) (keymap-set kmap "k" down) (when np (keymap-set kmap "p" up) (keymap-set kmap "n" down)) (when tab (define-key kmap [backtab] up) (keymap-set kmap "TAB" down)))) ;; -------------------------------------------------------------------------- (<- 'll-scroll)