2016-05-16 01:58:41 +00:00
|
|
|
|
;;; funcs.el --- Helm Layer functions File for Spacemacs
|
|
|
|
|
;;
|
2021-03-22 20:11:29 +00:00
|
|
|
|
;; Copyright (c) 2012-2021 Sylvain Benner & Contributors
|
2016-05-16 01:58:41 +00:00
|
|
|
|
;;
|
|
|
|
|
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
|
|
|
|
;; URL: https://github.com/syl20bnr/spacemacs
|
|
|
|
|
;;
|
|
|
|
|
;; This file is not part of GNU Emacs.
|
|
|
|
|
;;
|
2021-03-24 03:31:44 +00:00
|
|
|
|
;; This program is free software; you can redistribute it and/or modify
|
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
;; (at your option) any later version.
|
|
|
|
|
;;
|
|
|
|
|
;; This program 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 General Public License for more details.
|
|
|
|
|
;;
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
|
|
|
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
2016-05-16 01:58:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-05 19:26:26 +00:00
|
|
|
|
(defvar spacemacs--helm-popwin-mode nil
|
2016-08-02 16:18:28 +00:00
|
|
|
|
"Temp variable to store `popwin-mode''s value.")
|
|
|
|
|
|
2016-05-16 01:58:41 +00:00
|
|
|
|
(defun spacemacs//helm-cleanup ()
|
|
|
|
|
"Cleanup some helm related states when quitting."
|
2019-04-04 16:14:28 +00:00
|
|
|
|
;; deactivate helm transient state if active when closing the helm buffer
|
|
|
|
|
(ignore-errors
|
|
|
|
|
(spacemacs/helm-navigation-transient-state/nil)))
|
2016-05-16 01:58:41 +00:00
|
|
|
|
|
2016-08-02 16:18:28 +00:00
|
|
|
|
(defun spacemacs//helm-prepare-display ()
|
|
|
|
|
"Prepare necessary settings to make Helm display properly."
|
|
|
|
|
(setq spacemacs-display-buffer-alist display-buffer-alist)
|
|
|
|
|
;; the only buffer to display is Helm, nothing else we must set this
|
|
|
|
|
;; otherwise Helm cannot reuse its own windows for copyinng/deleting
|
|
|
|
|
;; etc... because of existing popwin buffers in the alist
|
|
|
|
|
(setq display-buffer-alist nil)
|
2016-08-05 19:26:26 +00:00
|
|
|
|
(setq spacemacs--helm-popwin-mode popwin-mode)
|
2016-08-02 16:18:28 +00:00
|
|
|
|
(when popwin-mode
|
|
|
|
|
(popwin-mode -1)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs//helm-restore-display ()
|
|
|
|
|
;; we must enable popwin-mode first then restore `display-buffer-alist'
|
|
|
|
|
;; Otherwise, popwin keeps adding up its own buffers to
|
|
|
|
|
;; `display-buffer-alist' and could slow down Emacs as the list grows
|
2016-08-05 19:26:26 +00:00
|
|
|
|
(when spacemacs--helm-popwin-mode
|
2016-08-02 16:18:28 +00:00
|
|
|
|
(popwin-mode))
|
|
|
|
|
(setq display-buffer-alist spacemacs-display-buffer-alist))
|
|
|
|
|
|
2016-05-16 01:58:41 +00:00
|
|
|
|
|
|
|
|
|
;; REPLs integration
|
|
|
|
|
|
|
|
|
|
(defun helm-available-repls ()
|
|
|
|
|
"Show all the repls available."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((helm-available-repls
|
|
|
|
|
`((name . "HELM available REPLs")
|
|
|
|
|
(candidates . ,(mapcar #'car spacemacs-repl-list))
|
|
|
|
|
(action . (lambda (candidate)
|
|
|
|
|
(let ((repl (cdr (assoc candidate spacemacs-repl-list))))
|
|
|
|
|
(require (car repl))
|
|
|
|
|
(call-interactively (cdr repl))))))))
|
|
|
|
|
(helm :sources '(helm-available-repls)
|
|
|
|
|
:buffer "*helm repls*")))
|
|
|
|
|
|
2018-05-21 05:17:14 +00:00
|
|
|
|
|
|
|
|
|
|
2016-05-16 01:58:41 +00:00
|
|
|
|
|
|
|
|
|
;; Search tools integration
|
|
|
|
|
|
2018-05-21 05:17:14 +00:00
|
|
|
|
(defun spacemacs//helm-do-ag-region-or-symbol (func &optional dir)
|
|
|
|
|
"Search with `ag' with a default input."
|
|
|
|
|
(require 'helm-ag)
|
|
|
|
|
(cl-letf* (((symbol-value 'helm-ag-insert-at-point) 'symbol)
|
|
|
|
|
;; make thing-at-point choosing the active region first
|
|
|
|
|
((symbol-function 'this-fn) (symbol-function 'thing-at-point))
|
|
|
|
|
((symbol-function 'thing-at-point)
|
|
|
|
|
(lambda (thing)
|
|
|
|
|
(let ((res (if (region-active-p)
|
|
|
|
|
(buffer-substring-no-properties
|
|
|
|
|
(region-beginning) (region-end))
|
|
|
|
|
(this-fn thing))))
|
|
|
|
|
(when res (rxt-quote-pcre res))))))
|
|
|
|
|
(funcall func dir)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs//helm-do-search-find-tool (base tools default-inputp)
|
|
|
|
|
"Create a cond form given a TOOLS string list and evaluate it."
|
|
|
|
|
(eval
|
|
|
|
|
`(cond
|
|
|
|
|
,@(mapcar
|
|
|
|
|
(lambda (x)
|
|
|
|
|
`((executable-find ,x)
|
|
|
|
|
',(let ((func
|
|
|
|
|
(intern
|
|
|
|
|
(format (if default-inputp
|
|
|
|
|
"spacemacs/%s-%s-region-or-symbol"
|
|
|
|
|
"spacemacs/%s-%s")
|
|
|
|
|
base x))))
|
|
|
|
|
(if (fboundp func)
|
|
|
|
|
func
|
|
|
|
|
(intern (format "%s-%s" base x))))))
|
|
|
|
|
tools)
|
|
|
|
|
(t 'helm-do-grep))))
|
|
|
|
|
|
|
|
|
|
;; Search in current file ----------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-file-do-ag (&optional _)
|
|
|
|
|
"Wrapper to execute `helm-ag-this-file.'"
|
|
|
|
|
(interactive)
|
|
|
|
|
(helm-do-ag-this-file))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-file-do-ag-region-or-symbol ()
|
|
|
|
|
"Search in current file with `ag' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-file-do-ag))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-file-smart-do-search (&optional default-inputp)
|
|
|
|
|
"Search in current file using `dotspacemacs-search-tools'.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'
|
|
|
|
|
If DEFAULT-INPUTP is non nil then the current region or symbol at point
|
|
|
|
|
are used as default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(call-interactively
|
|
|
|
|
(spacemacs//helm-do-search-find-tool "helm-file-do"
|
2020-05-11 10:36:56 +00:00
|
|
|
|
dotspacemacs-search-tools
|
|
|
|
|
default-inputp)))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-file-smart-do-search-region-or-symbol ()
|
|
|
|
|
"Search in current file using `dotspacemacs-search-tools' with
|
|
|
|
|
default input.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-file-smart-do-search t))
|
|
|
|
|
|
|
|
|
|
;; Search in files -----------------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-ag (&optional dir)
|
|
|
|
|
"Search in files with `ag' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(helm-do-ag dir))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-ag-region-or-symbol ()
|
|
|
|
|
"Search in files with `ag' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-ag))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-ack (&optional dir)
|
|
|
|
|
"Search in files with `ack'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((helm-ag-base-command "ack --nocolor --nogroup"))
|
|
|
|
|
(helm-do-ag dir)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-ack-region-or-symbol ()
|
|
|
|
|
"Search in files with `ack' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-ack))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-pt (&optional dir)
|
|
|
|
|
"Search in files with `pt'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((helm-ag-base-command "pt -e --nocolor --nogroup"))
|
|
|
|
|
(helm-do-ag dir)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-pt-region-or-symbol ()
|
|
|
|
|
"Search in files with `pt' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-pt))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-rg (&optional dir)
|
|
|
|
|
"Search in files with `rg'."
|
|
|
|
|
(interactive)
|
|
|
|
|
;; --line-number forces line numbers (disabled by default on windows)
|
|
|
|
|
;; no --vimgrep because it adds column numbers that wgrep can't handle
|
|
|
|
|
;; see https://github.com/syl20bnr/spacemacs/pull/8065
|
2020-01-02 17:56:32 +00:00
|
|
|
|
(let* ((root-helm-ag-base-command "rg --smart-case --no-heading --color=never --line-number")
|
2018-05-21 05:17:14 +00:00
|
|
|
|
(helm-ag-base-command (if spacemacs-helm-rg-max-column-number
|
2020-01-02 17:56:32 +00:00
|
|
|
|
(concat root-helm-ag-base-command " --max-columns=" (number-to-string spacemacs-helm-rg-max-column-number))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
root-helm-ag-base-command)))
|
|
|
|
|
(helm-do-ag dir)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-rg-region-or-symbol ()
|
|
|
|
|
"Search in files with `rg' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-rg))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-smart-do-search (&optional default-inputp)
|
|
|
|
|
"Search in files using `dotspacemacs-search-tools'.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'
|
|
|
|
|
If DEFAULT-INPUTP is non nil then the current region or symbol at point
|
|
|
|
|
are used as default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(call-interactively
|
|
|
|
|
(spacemacs//helm-do-search-find-tool "helm-files-do"
|
2020-05-11 10:36:56 +00:00
|
|
|
|
dotspacemacs-search-tools
|
|
|
|
|
default-inputp)))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-smart-do-search-region-or-symbol ()
|
|
|
|
|
"Search in files using `dotspacemacs-search-tools' with default input.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-files-smart-do-search t))
|
|
|
|
|
|
|
|
|
|
;; Search in current dir -----------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-ag ()
|
|
|
|
|
"Search in current directory with `ag'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-files-do-ag default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-ag-region-or-symbol ()
|
|
|
|
|
"Search in current directory with `ag' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-ag default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-ack ()
|
|
|
|
|
"Search in current directory with `ack'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-files-do-ack default-directory))
|
|
|
|
|
|
2020-01-18 21:03:11 +00:00
|
|
|
|
(defun spacemacs/helm-dir-do-grep ()
|
|
|
|
|
"Search in current directory with `grep'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol (list default-directory) nil))
|
|
|
|
|
|
2018-05-21 05:17:14 +00:00
|
|
|
|
(defun spacemacs/helm-dir-do-ack-region-or-symbol ()
|
|
|
|
|
"Search in current directory with `ack' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-ack default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-pt ()
|
|
|
|
|
"Search in current directory with `pt'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-files-do-pt default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-pt-region-or-symbol ()
|
|
|
|
|
"Search in current directory with `pt' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-pt default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-rg ()
|
|
|
|
|
"Search in current directory with `rg'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-files-do-rg default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-do-rg-region-or-symbol ()
|
|
|
|
|
"Search in current directory with `rg' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-rg default-directory))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-smart-do-search (&optional default-inputp)
|
|
|
|
|
"Search in current directory using `dotspacemacs-search-tools'.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'
|
|
|
|
|
If DEFAULT-INPUTP is non nil then the current region or symbol at point
|
|
|
|
|
are used as default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(call-interactively
|
|
|
|
|
(spacemacs//helm-do-search-find-tool "helm-dir-do"
|
2020-05-11 10:36:56 +00:00
|
|
|
|
dotspacemacs-search-tools
|
|
|
|
|
default-inputp)))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-dir-smart-do-search-region-or-symbol ()
|
|
|
|
|
"Search in current directory using `dotspacemacs-search-tools'.
|
|
|
|
|
with default input.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-dir-smart-do-search t))
|
|
|
|
|
|
|
|
|
|
;; Search in buffers ---------------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-ag (&optional _)
|
|
|
|
|
"Wrapper to execute `helm-ag-buffers.'"
|
|
|
|
|
(interactive)
|
|
|
|
|
(helm-do-ag-buffers))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-ag-region-or-symbol ()
|
|
|
|
|
"Search in opened buffers with `ag' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-ag))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-ack (&optional _)
|
|
|
|
|
"Search in opened buffers with `ack'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((helm-ag-base-command "ack --nocolor --nogroup"))
|
|
|
|
|
(helm-do-ag-buffers)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-ack-region-or-symbol ()
|
|
|
|
|
"Search in opened buffers with `ack' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-ack))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-pt (&optional _)
|
|
|
|
|
"Search in opened buffers with `pt'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((helm-ag-base-command "pt -e --nocolor --nogroup"))
|
|
|
|
|
(helm-do-ag-buffers)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-pt-region-or-symbol ()
|
|
|
|
|
"Search in opened buffers with `pt' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-pt))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-rg (&optional _)
|
|
|
|
|
"Search in opened buffers with `rg'."
|
|
|
|
|
(interactive)
|
|
|
|
|
;; --line-number forces line numbers (disabled by default on windows)
|
|
|
|
|
;; no --vimgrep because it adds column numbers that wgrep can't handle
|
|
|
|
|
;; see https://github.com/syl20bnr/spacemacs/pull/8065
|
2020-10-26 22:11:54 +00:00
|
|
|
|
(let ((helm-ag-base-command "rg --smart-case --no-heading --color=never --line-number --max-columns=150")
|
|
|
|
|
(helm-ag-success-exit-status '(0 2)))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
(helm-do-ag-buffers)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-rg-region-or-symbol ()
|
|
|
|
|
"Search in opened buffers with `rg' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-rg))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-smart-do-search (&optional default-inputp)
|
|
|
|
|
"Search in opened buffers using `dotspacemacs-search-tools'.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'
|
|
|
|
|
If DEFAULT-INPUTP is non nil then the current region or symbol at point
|
|
|
|
|
are used as default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(call-interactively
|
|
|
|
|
(spacemacs//helm-do-search-find-tool "helm-buffers-do"
|
2020-05-11 10:36:56 +00:00
|
|
|
|
dotspacemacs-search-tools
|
|
|
|
|
default-inputp)))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-smart-do-search-region-or-symbol ()
|
|
|
|
|
"Search in opened buffers using `dotspacemacs-search-tools' with
|
|
|
|
|
default input.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-buffers-smart-do-search t))
|
|
|
|
|
|
|
|
|
|
;; Search in project ---------------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-smart-do-search-in-dir (dir)
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((default-directory dir))
|
|
|
|
|
(spacemacs/helm-project-smart-do-search)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-projectile-grep ()
|
|
|
|
|
"Replace `helm-projectile-grep' to actually use `ag', `pt' etc.."
|
|
|
|
|
(interactive)
|
|
|
|
|
(helm-exit-and-execute-action
|
|
|
|
|
'spacemacs/helm-project-smart-do-search-in-dir))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-ag ()
|
|
|
|
|
"Search in current project with `ag'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(helm-do-ag dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-ag-region-or-symbol ()
|
|
|
|
|
"Search in current project with `ag' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol 'helm-do-ag dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-ack ()
|
|
|
|
|
"Search in current project with `ack'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs/helm-files-do-ack dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-ack-region-or-symbol ()
|
|
|
|
|
"Search in current project with `ack' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol
|
|
|
|
|
'spacemacs/helm-files-do-ack dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-pt ()
|
|
|
|
|
"Search in current project with `pt'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs/helm-files-do-pt dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-pt-region-or-symbol ()
|
|
|
|
|
"Search in current project with `pt' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol
|
|
|
|
|
'spacemacs/helm-files-do-pt dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-rg ()
|
|
|
|
|
"Search in current project with `rg'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs/helm-files-do-rg dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-do-rg-region-or-symbol ()
|
|
|
|
|
"Search in current project with `rg' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((dir (projectile-project-root)))
|
|
|
|
|
(if dir
|
|
|
|
|
(spacemacs//helm-do-ag-region-or-symbol
|
|
|
|
|
'spacemacs/helm-files-do-rg dir)
|
|
|
|
|
(message "error: Not in a project."))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-smart-do-search (&optional default-inputp)
|
|
|
|
|
"Search in current project using `dotspacemacs-search-tools'.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'
|
|
|
|
|
If DEFAULT-INPUTP is non nil then the current region or symbol at point
|
|
|
|
|
are used as default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((projectile-require-project-root nil))
|
|
|
|
|
(call-interactively
|
|
|
|
|
(spacemacs//helm-do-search-find-tool "helm-project-do"
|
2020-05-11 10:36:56 +00:00
|
|
|
|
dotspacemacs-search-tools
|
|
|
|
|
default-inputp))))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-project-smart-do-search-region-or-symbol ()
|
|
|
|
|
"Search in current project using `dotspacemacs-search-tools' with
|
|
|
|
|
default input.
|
|
|
|
|
Search for a search tool in the order provided by `dotspacemacs-search-tools'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs/helm-project-smart-do-search t))
|
|
|
|
|
|
|
|
|
|
;; grep
|
|
|
|
|
|
2016-05-16 01:58:41 +00:00
|
|
|
|
(defun spacemacs//helm-do-grep-region-or-symbol
|
2018-05-21 05:17:14 +00:00
|
|
|
|
(&optional targs use-region-or-symbol-p)
|
|
|
|
|
"Version of `helm-do-grep' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(require 'helm)
|
|
|
|
|
(cl-letf*
|
|
|
|
|
(((symbol-function 'this-fn) (symbol-function 'helm-do-grep-1))
|
|
|
|
|
((symbol-function 'helm-do-grep-1)
|
|
|
|
|
(lambda (targets &optional recurse zgrep exts
|
|
|
|
|
default-input region-or-symbol-p)
|
|
|
|
|
(let* ((new-input (when region-or-symbol-p
|
|
|
|
|
(if (region-active-p)
|
|
|
|
|
(buffer-substring-no-properties
|
|
|
|
|
(region-beginning) (region-end))
|
|
|
|
|
(thing-at-point 'symbol t))))
|
|
|
|
|
(quoted-input (when new-input
|
|
|
|
|
(rxt-quote-pcre new-input))))
|
|
|
|
|
(this-fn targets recurse zgrep exts
|
|
|
|
|
default-input quoted-input))))
|
|
|
|
|
(preselection (or (dired-get-filename nil t)
|
|
|
|
|
(buffer-file-name (current-buffer))))
|
|
|
|
|
(targets (if targs
|
|
|
|
|
targs
|
|
|
|
|
(helm-read-file-name
|
|
|
|
|
"Search in file(s): "
|
|
|
|
|
:marked-candidates t
|
2018-07-11 07:20:35 +00:00
|
|
|
|
:preselect (when preselection
|
|
|
|
|
(if helm-ff-transformer-show-only-basename
|
|
|
|
|
(helm-basename preselection)
|
|
|
|
|
preselection))))))
|
2018-05-21 05:17:14 +00:00
|
|
|
|
(helm-do-grep-1 targets nil nil nil nil use-region-or-symbol-p)))
|
2016-05-16 01:58:41 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-file-do-grep ()
|
|
|
|
|
"Search in current file with `grep' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol
|
|
|
|
|
(list (buffer-file-name (current-buffer))) nil))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-file-do-grep-region-or-symbol ()
|
|
|
|
|
"Search in current file with `grep' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol
|
|
|
|
|
(list (buffer-file-name (current-buffer))) t))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-grep ()
|
|
|
|
|
"Search in files with `grep'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol nil nil))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-files-do-grep-region-or-symbol ()
|
|
|
|
|
"Search in files with `grep' using a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol nil t))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-grep ()
|
|
|
|
|
"Search in opened buffers with `grep'."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((buffers (cl-loop for buffer in (buffer-list)
|
|
|
|
|
when (buffer-file-name buffer)
|
|
|
|
|
collect (buffer-file-name buffer))))
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol buffers nil)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-do-grep-region-or-symbol ()
|
|
|
|
|
"Search in opened buffers with `grep' with a default input."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((buffers (cl-loop for buffer in (buffer-list)
|
|
|
|
|
when (buffer-file-name buffer)
|
|
|
|
|
collect (buffer-file-name buffer))))
|
|
|
|
|
(spacemacs//helm-do-grep-region-or-symbol buffers t)))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/resume-last-search-buffer ()
|
|
|
|
|
"open last helm-ag or hgrep buffer."
|
|
|
|
|
(interactive)
|
|
|
|
|
(cond ((get-buffer "*helm ag results*")
|
|
|
|
|
(switch-to-buffer-other-window "*helm ag results*"))
|
|
|
|
|
((get-buffer "*helm-ag*")
|
|
|
|
|
(helm-resume "*helm-ag*"))
|
|
|
|
|
((get-buffer "*hgrep*")
|
|
|
|
|
(switch-to-buffer-other-window "*hgrep*"))
|
|
|
|
|
(t
|
|
|
|
|
(message "No previous search buffer found"))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-find-files (arg)
|
|
|
|
|
"Custom spacemacs implementation for calling helm-find-files-1.
|
|
|
|
|
Removes the automatic guessing of the initial value based on thing at point. "
|
|
|
|
|
(interactive "P")
|
2018-09-06 07:57:27 +00:00
|
|
|
|
;; fixes #10882 and #11270
|
|
|
|
|
(require 'helm-files)
|
2016-05-16 01:58:41 +00:00
|
|
|
|
(let* ((hist (and arg helm-ff-history (helm-find-files-history)))
|
|
|
|
|
(default-input hist)
|
|
|
|
|
(input (cond ((and (eq major-mode 'dired-mode) default-input)
|
|
|
|
|
(file-name-directory default-input))
|
|
|
|
|
((and (not (string= default-input ""))
|
|
|
|
|
default-input))
|
|
|
|
|
(t (expand-file-name (helm-current-directory))))))
|
|
|
|
|
(set-text-properties 0 (length input) nil input)
|
|
|
|
|
(helm-find-files-1 input)))
|
|
|
|
|
|
2018-01-10 04:18:58 +00:00
|
|
|
|
;; Key bindings
|
2016-05-16 01:58:41 +00:00
|
|
|
|
|
|
|
|
|
(defmacro spacemacs||set-helm-key (keys func)
|
|
|
|
|
"Define a key bindings for FUNC using KEYS.
|
|
|
|
|
Ensure that helm is required before calling FUNC."
|
2018-06-14 06:03:48 +00:00
|
|
|
|
(let ((func-name (intern (format "lazy-helm/%s" (symbol-name func)))))
|
2016-05-16 01:58:41 +00:00
|
|
|
|
`(progn
|
|
|
|
|
(defun ,func-name ()
|
|
|
|
|
,(format "Wrapper to ensure that `helm' is loaded before calling %s."
|
|
|
|
|
(symbol-name func))
|
|
|
|
|
(interactive)
|
|
|
|
|
(require 'helm)
|
|
|
|
|
(call-interactively ',func))
|
|
|
|
|
(spacemacs/set-leader-keys ,keys ',func-name))))
|
|
|
|
|
|
2018-01-10 04:18:58 +00:00
|
|
|
|
;; Find files tweaks
|
|
|
|
|
|
2016-05-16 02:24:27 +00:00
|
|
|
|
(defun spacemacs//helm-find-files-edit (candidate)
|
2016-05-16 01:58:41 +00:00
|
|
|
|
"Opens a dired buffer and immediately switches to editable mode."
|
|
|
|
|
(dired (file-name-directory candidate))
|
|
|
|
|
(dired-goto-file candidate)
|
|
|
|
|
(dired-toggle-read-only))
|
|
|
|
|
|
2016-05-16 02:24:27 +00:00
|
|
|
|
(defun spacemacs/helm-find-files-edit ()
|
2016-05-16 01:58:41 +00:00
|
|
|
|
"Exits helm, opens a dired buffer and immediately switches to editable mode."
|
|
|
|
|
(interactive)
|
2016-05-16 02:24:27 +00:00
|
|
|
|
(helm-exit-and-execute-action 'spacemacs//helm-find-files-edit))
|
2016-06-08 09:32:10 +00:00
|
|
|
|
|
2016-08-26 00:42:01 +00:00
|
|
|
|
(defun spacemacs/helm-jump-in-buffer ()
|
|
|
|
|
"Jump in buffer using `imenu' facilities and helm."
|
|
|
|
|
(interactive)
|
|
|
|
|
(call-interactively
|
|
|
|
|
(cond
|
|
|
|
|
((eq major-mode 'org-mode) 'helm-org-in-buffer-headings)
|
|
|
|
|
(t 'helm-semantic-or-imenu))))
|
|
|
|
|
|
2017-12-31 00:36:20 +00:00
|
|
|
|
(defun spacemacs//helm-open-buffers-in-windows (buffers)
|
|
|
|
|
"This function allows a different default action, on marking multiple
|
|
|
|
|
candidate buffers/files for helm. By default, helm either opens all
|
|
|
|
|
files/buffers in the same window, or creates splits. This function instead
|
|
|
|
|
opens the buffers (or files) across different already-open windows. The first
|
|
|
|
|
selected buffer is opened in the current window, the next is opened in the
|
|
|
|
|
window with higher number, etc. This will make a loop around, so with 4
|
|
|
|
|
windows, and window 2 active, opening 4 buffers will open them in windows
|
|
|
|
|
2 3 4 1. If more buffers are opened than windows available, the remainder are
|
|
|
|
|
not set to any window (but in the case of files, they are still opened
|
|
|
|
|
to buffers)."
|
2018-01-10 04:18:58 +00:00
|
|
|
|
(let ((num-buffers (length buffers))
|
2017-12-31 00:36:20 +00:00
|
|
|
|
(num-windows (length (winum--window-list)))
|
2018-11-09 19:57:14 +00:00
|
|
|
|
(cur-win (or (winum-get-number) (winum-get-number (other-window 1))))
|
2017-12-31 00:36:20 +00:00
|
|
|
|
(num-buffers-placed 0))
|
|
|
|
|
(cl-loop for buffer in buffers do
|
2019-05-25 08:46:17 +00:00
|
|
|
|
(when (>= num-buffers-placed num-windows) (cl-return))
|
2017-12-31 00:36:20 +00:00
|
|
|
|
(set-window-buffer (winum-get-window-by-number cur-win) buffer)
|
|
|
|
|
(setq cur-win (+ 1 (mod cur-win num-windows)))
|
2020-06-24 11:24:14 +00:00
|
|
|
|
(cl-incf num-buffers-placed))))
|
2017-12-31 00:36:20 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-find-buffers-windows ()
|
|
|
|
|
(interactive)
|
|
|
|
|
(helm-exit-and-execute-action
|
|
|
|
|
(lambda (candidate)
|
|
|
|
|
(spacemacs//helm-open-buffers-in-windows (helm-marked-candidates)))))
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-find-files-windows ()
|
|
|
|
|
(interactive)
|
|
|
|
|
(helm-exit-and-execute-action
|
|
|
|
|
(lambda (candidate)
|
|
|
|
|
(let* ((files (helm-marked-candidates))
|
|
|
|
|
(buffers (mapcar 'find-file-noselect files)))
|
|
|
|
|
(spacemacs//helm-open-buffers-in-windows buffers)))))
|
|
|
|
|
|
2016-06-08 09:32:10 +00:00
|
|
|
|
|
|
|
|
|
;; Generalized next-error interface
|
|
|
|
|
|
|
|
|
|
(defun spacemacs//gne-init-helm-ag (&rest args)
|
|
|
|
|
(with-current-buffer "*helm ag results*"
|
|
|
|
|
(setq spacemacs--gne-min-line 5
|
|
|
|
|
spacemacs--gne-max-line (save-excursion
|
2020-05-11 10:36:56 +00:00
|
|
|
|
(goto-char (point-max))
|
|
|
|
|
(previous-line)
|
|
|
|
|
(line-number-at-pos))
|
2016-06-08 09:32:10 +00:00
|
|
|
|
spacemacs--gne-line-func
|
|
|
|
|
(lambda (c)
|
|
|
|
|
(helm-ag--find-file-action
|
|
|
|
|
c 'find-file helm-ag--search-this-file-p))
|
2016-10-09 16:57:46 +00:00
|
|
|
|
next-error-function 'spacemacs/gne-next)))
|
2016-06-08 09:32:10 +00:00
|
|
|
|
|
|
|
|
|
(defun spacemacs//gne-init-helm-grep (&rest args)
|
|
|
|
|
(with-current-buffer "*hgrep*"
|
|
|
|
|
(setq spacemacs--gne-min-line 5
|
|
|
|
|
spacemacs--gne-max-line
|
|
|
|
|
(save-excursion
|
|
|
|
|
(goto-char (point-max))
|
|
|
|
|
(previous-line)
|
|
|
|
|
(line-number-at-pos))
|
|
|
|
|
spacemacs--gne-line-func 'helm-grep-action
|
2016-10-09 16:57:46 +00:00
|
|
|
|
next-error-function 'spacemacs/gne-next)))
|
2017-02-02 05:08:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;; theme
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-themes ()
|
|
|
|
|
"Remove limit on number of candidates on `helm-themes'"
|
|
|
|
|
(interactive)
|
|
|
|
|
(let (helm-candidate-number-limit)
|
|
|
|
|
(helm-themes)))
|
2018-11-06 12:10:42 +00:00
|
|
|
|
|
|
|
|
|
;; Buffers ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-buffers-list-unfiltered ()
|
|
|
|
|
"Helm buffers without filtering."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((helm-boring-buffer-regexp-list nil))
|
|
|
|
|
(call-interactively #'helm-buffers-list)))
|
2020-05-11 10:36:56 +00:00
|
|
|
|
|
|
|
|
|
;; Command search ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
(defun spacemacs/helm-M-x-fuzzy-matching ()
|
|
|
|
|
"Helm M-x with fuzzy matching enabled"
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((completion-styles completion-styles))
|
|
|
|
|
(add-to-list 'completion-styles `,(if (version< emacs-version "27") 'helm-flex 'flex) t)
|
2020-07-12 08:18:25 +00:00
|
|
|
|
(call-interactively 'helm-M-x)))
|