;;; -*- lexical-binding: t -*- (require 'counsel) (require 'ivy) (require 'swiper) (ivy-mode 1) (counsel-mode 1) (setq ivy-wrap t) (setq ivy-extra-directories '("./")) (setq ivy-count-format "%d/%d ") (setq counsel-find-file-at-point t) (setq counsel-find-file-ignore-regexp "\\(?:\\`[#.]\\)\\|\\(?:[#~]\\'\\)") (setq counsel-grep-base-command "grep -E -n -i -e %s %s") (setq counsel-rg-base-command "rg -S --no-heading --line-number --color never --hidden --ignore-file ~/.emacs.d/rg-ignore %s .") (defvar counsel-rg-files-command "rg --files --hidden --ignore-file ~/.emacs.d/rg-ignore") (defun counsel-rg-jump (&optional initial-input initial-directory) "Jump to a file below the current directory. List all files within the current directory or any of its subdirectories. INITIAL-INPUT can be given as the initial minibuffer input. INITIAL-DIRECTORY, if non-nil, is used as the root directory for search." (interactive (list nil (when current-prefix-arg (read-directory-name "From directory: ")))) (counsel-require-program "rg") (let ((default-directory (or initial-directory (locate-dominating-file default-directory ".git") default-directory))) (ivy-read "rg --files: " (split-string (shell-command-to-string counsel-rg-files-command) "\n" t) :matcher #'counsel--find-file-matcher :initial-input initial-input :action (lambda (x) (with-ivy-window (find-file (expand-file-name x ivy--directory)))) :preselect (counsel--preselect-file) :require-match 'confirm-after-completion :history 'file-name-history :keymap counsel-find-file-map :caller 'counsel-rg-jump)))