This post covers the following sections from my init.
Emacs is old school. You're either new to it - which means you wouldn't be here unless it was your type of thing - or you know what you're looking for. In either case, go to the side bar of this page and click on the 'Emacs' tag. Then read the posts y date from oldest to newest.
In the last emacs post I covered lines 2004 - 2188. This post covers lines 2188 - 2379. I include the lines for anyone that wants to patch together the entire init from start to finish. The lines won't always match up because I take stuff out when I'm in the init.
First the diff and Ediff code is on hold. Diff and Ediff in emacs are great packages, a lot of people however enjoy newer programs for managing changes in files, especially when working with git revisions. I use a program called Beyond Compare with git and Diff and Ediff with most files. I've yet to put my diff/ediff system into a hydra though. So that comes later.
query-replace-regexp is just like C-f in your browser. You need the code below to do that with emacs. Anzu shows the number of matches in a give region. Ag is the Silver Searcher executable. It's a linux program so you have to find a version compiled just for windows, which you can do on the net, or with the version I referenced in earlier posts. You can of course use other search utilities in your hydra. In the Ag case you set the path to the ag-executable-p variable you set earlier. Helm-ag enables use of the helm interface to access the ag results.
;find and replace expressions in an emacs buffer (global-set-key (kbd "M-&") 'query-replace-regexp) ;show number of matches (use-package anzu :diminish :config (global-anzu-mode +1) (global-set-key [remap query-replace] 'anzu-query-replace) (global-set-key [remap query-replace-regexp] 'anzu-query-replace-regexp) :hook (after-init . global-anzu-mode) );end anzu ;find expressions in files in directories using ag (use-package ag :commands (ag-files ag-regexp ag-project ag-project-files ag-project-regexp) :config (setq ag-executable ag-executable-p) ;(next-error-follow-minor-mode t) ;(automatically-display-search-results-at-point t) (setq ag-highligh-search t) (setq ag-reuse-buffers t) (setq ag-reuse-window t) ;:bind ;("M-s a" . ag-project) );end ag ;use helm to activate ag with extra functionality (use-package helm-ag :commands (helm-ag helm-ag-this-file helm-do-ag helm-ag-project-root help-ag-buffers) :init (custom-set-variables '(helm-follow-mode-persistent t)) :config (setq helm-ag-base-command "rg --no-heading --smart-case" helm-ag-fuzzy-match t ;helm-ag-use-grep-ignore-list t ;helm-ag-use-agignore t );end helm-ag-init :bind (:map helm-ag-map ("C-c o" . 'helm-ag-other-window-action) ("C-c >" . 'helm-ag-next-file) ("C-c >" . 'helm-ag-previous-file) );end helm ag map );end helm-ag
Here is the search Hydra
;find files hydra (defvar find-files-title (with-octicon "search" "Search Files And Text With The Silver Searcher")) ;generate hydra (pretty-hydra-define Search-Files (:title find-files-title :quit-key "q" :color teal ) ("Basic Searches" (("a" ag "Search With Ag") ("m" helm-ag "Search With Helm Prefix") ("b" ag-kill-buffers "Delete Ag Buffers") ("o" ag-kill-other-buffers "Delete Other Ag Buffers") );end basic "More Specific Searches" ( ("f" ag-file "Text and File Specific Search Ag" ) ("r" ag-regexp "Regular Expression Ag Search") ("t" helm-ag-this-file "Search Open File With Helm" ) ("s" helm-ag-buffers "Search Buffers With Helm") );end specific "Project Searches" ( ("p" ag-project "Search Text In Projects" ) ("R" ag-project-regexp "Search Regular Expresions In Projects") ("P" helm-ag-project-root "Search Project With Helm") ("h" hydra-helm/body "Return To Helm" :color blue ) ("<SPC>" nil "Quit" :color blue ) );end project );end hydra body );end pretty-hydra-find-files (bind-key "<C-m> s" 'Search-Files/body)
Ido mode is an alternative to helm. It structures searches in the minibuffer (whereas Helm enlarges greatly the mini-buffer and includes utilities.) With Helm my Ido-mode use drops off, but I include shortcuts to use it anyway. I enjoyed always use of Ido, only helm works for me a little bit better.
;ido mode and supporting (use-package flx-ido :init (require 'flx-ido) (ido-mode 1) ;(ido-everywhere 1) (flx-ido-mode 1) ;~ tilda to go to home directory (defun my/ido-go-straight-home () (interactive) (cond ((looking-back "~/") (insert "projects/")) ((looking-back "/") (insert "~/")) (:else (call-interactively 'self-insert-command)))) (defun recentf-ido-find-file () "Find a recent file using Ido." (interactive) (let ((file (ido-completing-read "Choose recent file: " recentf-list nil t))) (when file (find-file file)))) :bind ("C-x C-i" . ido-imenu) ("C-x M-f" . ido-find-file-other-window) ("C-x F" . recentf-ido-find-file) ("C-x C-b" . ibuffer) (:map ido-file-completion-map (("C-~" . my/ido-go-straight-home) ("C-w" . ido-delete-backward-updir) ("C-x C-w" . ido-copy-current-file-name) ("~" . (lambda () (interactive) (if (looking-back "/") (insert "~/") (call-interactively 'self-insert-command)))))) :config ; turning off ido faces and on flex matching faces (setq ido-enable-flex-matching t) (setq ido-use-faces nil) (setq ido-enable-prefix nil ido-enable-flex-matching t ido-case-fold nil ido-auto-merge-work-directories-length -1 ido-create-new-buffer 'always ido-use-filename-at-point nil ido-max-prospects 10) (setq flx-ido-use-faces t) ;; Always rescan buffer for imenu (set-default 'imenu-auto-rescan t) (global-unset-key (kbd "C-x TAB")) );use package flx-ido ;matching (use-package flx-isearch ) (use-package ido-at-point) (use-package ido-ubiquitous) (use-package ido-vertical-mode :config (ido-vertical-mode t) ;; C-n/p is more intuitive in vertical layout (setq ido-vertical-define-keys 'C-n-C-p-up-down-left-right) );end use package ;functions ;; Fix ido-ubiquitous for newer packages ;(defmacro ido-ubiquitous-use-new-completing-read (cmd package) ; `(eval-after-load ,package ; '(defadvice ,cmd (around ido-ubiquitous-new activate) ; (let ((ido-ubiquitous-enable-compatibility nil)) ; ad-do-it)))) ;; Ido at point (C-,) (require 'ido-at-point) (ido-at-point-mode) ;; Use ido everywhere ;(require 'ido-ubiquitus) ;(ido-ubiquitous-mode 1) ;(ido-ubiquitous-use-new-completing-read webjump 'webjump) ;(ido-ubiquitous-use-new-completing-read yas-expand 'yasnippet) ;(ido-ubiquitous-use-new-completing-read yas-visit-snippet-file 'yasnippet)
As mentioned earlier, Ediff and Diff code isn't finalized yet (it's commented out in this part of the init).