;;; config--pkg-vlf.el --- Generated package (no.16) from my config -*- lexical-binding: t; -*- ;; ;; Copyright (C) 2025 TEC ;; ;; Author: TEC <https://code.tecosaur.net/tec> ;; Maintainer: TEC <contact@tecosaur.net> ;; Created: April 17, 2025 ;; Modified: April 17, 2025 ;; Version: 2025.04.17 ;; Homepage: https://code.tecosaur.net/tec/emacs-config ;; Package-Requires: ((emacs "29.1")) ;; ;; This file is not part of GNU Emacs. ;; ;;; Commentary: ;; ;; Generated package (no.16) from my config. ;; ;; During generation, dependency on other aspects of my configuration and ;; packages is inferred via (regexp-based) static analysis. While this seems ;; to do a good job, this method is imperfect. This code likely depends on ;; utilities provided by Doom, and if you try to run it in isolation you may ;; discover the code makes more assumptions. ;; ;; That said, I've found pretty good results so far. ;; ;; Package statement: ;; (package! vlf :recipe (:host github :repo "emacs-straight/vlf" :files ("*.el")) ;; :pin "d500f39672b35bf8551fdfafa892c551626c8d54") ;; ;;; Code: (use-package! vlf-setup :defer-incrementally vlf-tune vlf-base vlf-write vlf-search vlf-occur vlf-follow vlf-ediff vlf :commands vlf vlf-mode :init (defvar vlf-application 'ask) ; Avoid load-order issues (defadvice! +files--ask-about-large-file-vlf (size op-type filename offer-raw) "Like `files--ask-user-about-large-file', but with support for `vlf'." :override #'files--ask-user-about-large-file (if (eq vlf-application 'dont-ask) (progn (vlf filename) (error "")) (let ((prompt (format "File %s is large (%s), really %s?" (file-name-nondirectory filename) (funcall byte-count-to-string-function size) op-type))) (if (not offer-raw) (if (y-or-n-p prompt) nil 'abort) (let ((choice (car (read-multiple-choice prompt '((?y "yes") (?n "no") (?l "literally") (?v "vlf")) (files--ask-user-about-large-file-help-text op-type (funcall byte-count-to-string-function size)))))) (cond ((eq choice ?y) nil) ((eq choice ?l) 'raw) ((eq choice ?v) (vlf filename) (error "")) (t 'abort))))))) :config (advice-remove 'abort-if-file-too-large #'ad-Advice-abort-if-file-too-large) (defvar-local +vlf-cumulative-linenum '((0 . 0)) "An alist keeping track of the cumulative line number.") (defun +vlf-update-linum () "Update the line number offset." (let ((linenum-offset (alist-get vlf-start-pos +vlf-cumulative-linenum))) (setq display-line-numbers-offset (or linenum-offset 0)) (when (and linenum-offset (not (assq vlf-end-pos +vlf-cumulative-linenum))) (push (cons vlf-end-pos (+ linenum-offset (count-lines (point-min) (point-max)))) +vlf-cumulative-linenum)))) (add-hook 'vlf-after-chunk-update-hook #'+vlf-update-linum) ;; Since this only works with absolute line numbers, let's make sure we use them. (add-hook! 'vlf-mode-hook (setq-local display-line-numbers t)) (defun +vlf-next-chunk-or-start () (if (= vlf-file-size vlf-end-pos) (vlf-jump-to-chunk 1) (vlf-next-batch 1)) (goto-char (point-min))) (defun +vlf-last-chunk-or-end () (if (= 0 vlf-start-pos) (vlf-end-of-file) (vlf-prev-batch 1)) (goto-char (point-max))) (defun +vlf-isearch-wrap () (if isearch-forward (+vlf-next-chunk-or-start) (+vlf-last-chunk-or-end))) (add-hook! 'vlf-mode-hook (setq-local isearch-wrap-function #'+vlf-isearch-wrap))) (provide 'config--pkg-vlf) ;;; config--pkg-vlf.el ends here