From: Andreas Gerler Date: Thu, 16 Nov 2017 15:35:11 +0000 (+0100) Subject: remove old helm-versions and old helm-swoop-version X-Git-Url: http://git.bundesbrandschatzamt.de/?a=commitdiff_plain;h=5c7c6fcf7e4ef43824a9074229162d99a9c497d1;p=emacsconfig.git remove old helm-versions and old helm-swoop-version Signed-off-by: Andreas Gerler --- diff --git a/elpa/helm-20160105.2046/emacs-helm.sh b/elpa/helm-20160105.2046/emacs-helm.sh deleted file mode 100755 index a5938134..00000000 --- a/elpa/helm-20160105.2046/emacs-helm.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bash - - -## Copyright (C) 2012 Thierry Volpiatto -## -## 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 . - -## Commentary: - -# Preconfigured Emacs with a basic helm configuration. -# Useful to start quickly an emacs -Q with helm. -# Run it from this directory or symlink it somewhere in your PATH. - -# If TEMP env var exists use it otherwise declare it. -[ -z $TEMP ] && declare TEMP="/tmp" - -CONF_FILE="$TEMP/helm-cfg.el" -EMACS=emacs - -case $1 in - -P) - shift 1 - declare EMACS=$1 - shift 1 - ;; - -h) - echo "Usage: ${0##*/} [-P} Emacs path [-h} help [--] EMACS ARGS" - exit 2 - ;; -esac - -cd $(dirname "$0") - -# Check if autoload file exists. -# It is maybe in a different directory if -# emacs-helm.sh is a symlink. -LS=$(ls -l $0 | awk '{print $11}') -if [ ! -z $LS ]; then - AUTO_FILE="$(dirname $LS)/helm-autoloads.el" -else - AUTO_FILE="helm-autoloads.el" -fi -if [ ! -e "$AUTO_FILE" ]; then - echo No autoloads found, please run make first to generate autoload file - exit 2 -fi - - -cat > $CONF_FILE <\`helm-find-files'\n\ -;; - \`occur'(M-s o) =>\`helm-occur'\n\ -;; - \`list-buffers'(C-x C-b) =>\`helm-buffers-list'\n\ -;; - \`completion-at-point'(M-tab) =>\`helm-lisp-completion-at-point'[1]\n\ -;; - \`dabbrev-expand'(M-/) =>\`helm-dabbrev'\n\n\ -;; Some others native emacs commands are \"helmized\" by \`helm-mode'.\n\ -;; [1] Coming with emacs-24.4 \`completion-at-point' is \"helmized\" by \`helm-mode'\n\ -;; which provide helm completion in many other places like \`shell-mode'.\n\ -;; You will find embeded help for most helm commands with \`C-c ?'.\n\ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")) - -(setq package-load-list '((helm-core t) (helm t) (async t))) -(package-initialize) -(add-to-list 'load-path (file-name-directory (file-truename "$0"))) -(setq default-frame-alist '((vertical-scroll-bars . nil) - (tool-bar-lines . 0) - (menu-bar-lines . 0) - (fullscreen . nil))) -(blink-cursor-mode -1) -(require 'helm-config) -(helm-mode 1) -(define-key global-map [remap find-file] 'helm-find-files) -(define-key global-map [remap occur] 'helm-occur) -(define-key global-map [remap list-buffers] 'helm-buffers-list) -(define-key global-map [remap dabbrev-expand] 'helm-dabbrev) -(global-set-key (kbd "M-x") 'helm-M-x) -(unless (boundp 'completion-in-region-function) - (define-key lisp-interaction-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point) - (define-key emacs-lisp-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point)) -(add-hook 'kill-emacs-hook #'(lambda () (and (file-exists-p "$CONF_FILE") (delete-file "$CONF_FILE")))) -EOF - -$EMACS -Q -l $CONF_FILE $@ - diff --git a/elpa/helm-20160105.2046/helm-adaptive.el b/elpa/helm-20160105.2046/helm-adaptive.el deleted file mode 100644 index 09cce1e7..00000000 --- a/elpa/helm-20160105.2046/helm-adaptive.el +++ /dev/null @@ -1,244 +0,0 @@ -;;; helm-adaptive.el --- Adaptive Sorting of Candidates. -*- lexical-binding: t -*- - -;; Original Author: Tamas Patrovics - -;; Copyright (C) 2007 Tamas Patrovics -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) - - -(defgroup helm-adapt nil - "Adaptative sorting of candidates for Helm." - :group 'helm) - -(defcustom helm-adaptive-history-file - "~/.emacs.d/helm-adaptive-history" - "Path of file where history information is stored." - :type 'string - :group 'helm-adapt) - -(defcustom helm-adaptive-history-length 50 - "Maximum number of candidates stored for a source." - :type 'number - :group 'helm-adapt) - - -;; Internal -(defvar helm-adaptive-done nil - "nil if history information is not yet stored for the current -selection.") - -(defvar helm-adaptive-history nil - "Contains the stored history information. -Format: ((SOURCE-NAME (SELECTED-CANDIDATE (PATTERN . NUMBER-OF-USE) ...) ...) ...)") - -(defun helm-adaptive-done-reset () - (setq helm-adaptive-done nil)) - -;;;###autoload -(define-minor-mode helm-adaptive-mode - "Toggle adaptive sorting in all sources." - :group 'helm-adapt - :require 'helm-adaptive - :global t - (if helm-adaptive-mode - (progn - (unless helm-adaptive-history - (helm-adaptive-maybe-load-history)) - (add-hook 'kill-emacs-hook 'helm-adaptive-save-history) - ;; Should run at beginning of `helm-initial-setup'. - (add-hook 'helm-before-initialize-hook 'helm-adaptive-done-reset) - ;; Should run at beginning of `helm-exit-minibuffer'. - (add-hook 'helm-before-action-hook 'helm-adaptive-store-selection) - ;; Should run at beginning of `helm-select-action'. - (add-hook 'helm-select-action-hook 'helm-adaptive-store-selection)) - (helm-adaptive-save-history) - (setq helm-adaptive-history nil) - (remove-hook 'kill-emacs-hook 'helm-adaptive-save-history) - (remove-hook 'helm-before-initialize-hook 'helm-adaptive-done-reset) - (remove-hook 'helm-before-action-hook 'helm-adaptive-store-selection) - (remove-hook 'helm-select-action-hook 'helm-adaptive-store-selection))) - -(defun helm-adapt-use-adaptive-p (&optional source-name) - "Return current source only if it use adaptive history, nil otherwise." - (when helm-adaptive-mode - (let* ((source (or source-name (helm-get-current-source))) - (adapt-source (or (assoc-default 'filtered-candidate-transformer - (assoc (assoc-default 'type source) - helm-type-attributes)) - (assoc-default 'candidate-transformer - (assoc (assoc-default 'type source) - helm-type-attributes)) - (assoc-default 'filtered-candidate-transformer source) - (assoc-default 'candidate-transformer source)))) - (if (listp adapt-source) - (and (member 'helm-adaptive-sort adapt-source) source) - (and (eq adapt-source 'helm-adaptive-sort) source))))) - -(defun helm-adaptive-store-selection () - "Store history information for the selected candidate." - (unless helm-adaptive-done - (setq helm-adaptive-done t) - (let ((source (helm-adapt-use-adaptive-p))) - (when source - (let* ((source-name (or (assoc-default 'type source) - (assoc-default 'name source))) - (source-info (or (assoc source-name helm-adaptive-history) - (progn - (push (list source-name) helm-adaptive-history) - (car helm-adaptive-history)))) - (selection (helm-get-selection)) - (selection-info (progn - (setcdr source-info - (cons - (let ((found (assoc selection (cdr source-info)))) - (if (not found) - ;; new entry - (list selection) - ;; move entry to the beginning of the - ;; list, so that it doesn't get - ;; trimmed when the history is - ;; truncated - (setcdr source-info - (delete found (cdr source-info))) - found)) - (cdr source-info))) - (cadr source-info))) - (pattern-info (progn - (setcdr selection-info - (cons - (let ((found (assoc helm-pattern (cdr selection-info)))) - (if (not found) - ;; new entry - (cons helm-pattern 0) - - ;; move entry to the beginning of the - ;; list, so if two patterns used the - ;; same number of times then the one - ;; used last appears first in the list - (setcdr selection-info - (delete found (cdr selection-info))) - found)) - (cdr selection-info))) - (cadr selection-info)))) - - ;; increase usage count - (setcdr pattern-info (1+ (cdr pattern-info))) - - ;; truncate history if needed - (if (> (length (cdr selection-info)) helm-adaptive-history-length) - (setcdr selection-info - (cl-subseq (cdr selection-info) 0 helm-adaptive-history-length)))))))) - -(defun helm-adaptive-maybe-load-history () - "Load `helm-adaptive-history-file' which contain `helm-adaptive-history'. -Returns nil if `helm-adaptive-history-file' doesn't exist." - (when (file-readable-p helm-adaptive-history-file) - (load-file helm-adaptive-history-file))) - -(defun helm-adaptive-save-history (&optional arg) - "Save history information to file given by `helm-adaptive-history-file'." - (interactive "p") - (with-temp-buffer - (insert - ";; -*- mode: emacs-lisp -*-\n" - ";; History entries used for helm adaptive display.\n") - (prin1 `(setq helm-adaptive-history ',helm-adaptive-history) - (current-buffer)) - (insert ?\n) - (write-region (point-min) (point-max) helm-adaptive-history-file nil - (unless arg 'quiet)))) - -(defun helm-adaptive-sort (candidates source) - "Sort the CANDIDATES for SOURCE by usage frequency. -This is a filtered candidate transformer you can use with the -`filtered-candidate-transformer' attribute." - (let* ((source-name (or (assoc-default 'type source) - (assoc-default 'name source))) - (source-info (assoc source-name helm-adaptive-history))) - (if source-info - (let ((usage - ;; ... assemble a list containing the (CANIDATE . USAGE-COUNT) - ;; pairs - (mapcar (lambda (candidate-info) - (let ((count 0)) - (cl-dolist (pattern-info (cdr candidate-info)) - (if (not (equal (car pattern-info) - helm-pattern)) - (cl-incf count (cdr pattern-info)) - - ;; if current pattern is equal to the previously - ;; used one then this candidate has priority - ;; (that's why its count is boosted by 10000) and - ;; it only has to compete with other candidates - ;; which were also selected with the same pattern - (setq count (+ 10000 (cdr pattern-info))) - (cl-return))) - (cons (car candidate-info) count))) - (cdr source-info)))) - (if (and usage (consp usage)) - ;; sort the list in descending order, so candidates with highest - ;; priorty come first - (progn - (setq usage (sort usage (lambda (first second) - (> (cdr first) (cdr second))))) - - ;; put those candidates first which have the highest usage count - (cl-loop for (info . _freq) in usage - for member = (cl-member info candidates - :test 'helm-adaptive-compare) - when member collect (car member) into sorted - and do - (setq candidates (cl-remove info candidates - :test 'helm-adaptive-compare)) - finally return (append sorted candidates))) - (message "Your `%s' is maybe corrupted or too old, \ -you should reinitialize it with `helm-reset-adaptive-history'" - helm-adaptive-history-file) - (sit-for 1) - candidates)) - ;; if there is no information stored for this source then do nothing - candidates))) - -;;;###autoload -(defun helm-reset-adaptive-history () - "Delete all `helm-adaptive-history' and his file. -Useful when you have a old or corrupted `helm-adaptive-history-file'." - (interactive) - (when (y-or-n-p "Really delete all your `helm-adaptive-history'? ") - (setq helm-adaptive-history nil) - (delete-file helm-adaptive-history-file))) - -(defun helm-adaptive-compare (x y) - "Compare candidates X and Y taking into account that the -candidate can be in (DISPLAY . REAL) format." - (equal (if (listp x) (cdr x) x) - (if (listp y) (cdr y) y))) - - -(provide 'helm-adaptive) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-adaptive.el ends here diff --git a/elpa/helm-20160105.2046/helm-apt.el b/elpa/helm-20160105.2046/helm-apt.el deleted file mode 100644 index 897af9d6..00000000 --- a/elpa/helm-20160105.2046/helm-apt.el +++ /dev/null @@ -1,296 +0,0 @@ -;;; helm-apt.el --- Helm interface for Debian/Ubuntu packages (apt-*) -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) -(require 'helm-external) -(require 'helm-help) - -(declare-function term-line-mode "term") -(declare-function term-char-mode "term") -(declare-function term-send-input "term") -(declare-function term-send-eof "term") - - -(defgroup helm-apt nil - "Apt related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-apt-cache-show-function 'helm-apt-cache-show-1 - "Function of one argument used to show apt package. -Default is `helm-apt-cache-show-1' but you can use `apt-utils-show-package-1' -from `apt-utils.el' to have something more enhanced. -If nil default `helm-apt-cache-show-1' will be used." - :type 'function - :group 'helm-apt) - -(defcustom helm-apt-actions - '(("Show package description" . helm-apt-cache-show) - ("Install package(s)" . helm-apt-install) - ("Reinstall package(s)" . helm-apt-reinstall) - ("Remove package(s)" . helm-apt-uninstall) - ("Purge package(s)" . helm-apt-purge)) - "Actions for helm apt." - :group 'helm-apt - :type '(alist :key-type string :value-type function)) - -(defface helm-apt-installed - '((t (:foreground "green"))) - "Face used for apt installed candidates." - :group 'helm-apt) - -(defface helm-apt-deinstalled - '((t (:foreground "DimGray"))) - "Face used for apt deinstalled candidates." - :group 'helm-apt) - - -(defvar helm-apt-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-I") 'helm-apt-show-only-installed) - (define-key map (kbd "M-U") 'helm-apt-show-only-not-installed) - (define-key map (kbd "M-D") 'helm-apt-show-only-deinstalled) - (define-key map (kbd "M-A") 'helm-apt-show-all) - map)) - - -(defvar helm-source-apt - (helm-build-in-buffer-source "APT" - :init #'helm-apt-init - :candidate-transformer #'helm-apt-candidate-transformer - :display-to-real #'helm-apt-display-to-real - :update #'helm-apt-refresh - :keymap helm-apt-map - :help-message 'helm-apt-help-message - :action 'helm-apt-actions - :persistent-action #'helm-apt-persistent-action - :persistent-help "Show package description")) - -;;; Internals vars -(defvar helm-apt-search-command "apt-cache search '%s'") -(defvar helm-apt-show-command "apt-cache show '%s'") -(defvar helm-apt-installed-packages nil) -(defvar helm-apt-all-packages nil) -(defvar helm-apt-input-history nil) -(defvar helm-apt-show-only 'all) -(defvar helm-apt-term-buffer nil) -(defvar helm-apt-default-archs nil) - -(defun helm-apt-refresh () - "Refresh installed candidates list." - (setq helm-apt-installed-packages nil) - (setq helm-apt-all-packages nil)) - -(defun helm-apt-persistent-action (candidate) - "Persistent action for APT source." - (helm-apt-cache-show candidate)) - -(defun helm-apt--installed-package-name (name) - (cl-loop for arch in helm-apt-default-archs - thereis (or (assoc-default - name helm-apt-installed-packages) - (assoc-default - (format "%s:%s" name arch) - helm-apt-installed-packages)))) - -(defun helm-apt-candidate-transformer (candidates) - "Show installed CANDIDATES and the ones to deinstall in a different color." - (cl-loop for cand in candidates - for name = (helm-apt-display-to-real cand) - for deinstall = (string= - (helm-apt--installed-package-name name) - "deinstall") - for install = (string= - (helm-apt--installed-package-name name) - "install") - for show = (cond ((and deinstall - (memq helm-apt-show-only '(all deinstalled))) - (propertize cand 'face 'helm-apt-deinstalled)) - ((and install - (memq helm-apt-show-only '(all installed))) - (propertize cand 'face 'helm-apt-installed)) - ((and (eq helm-apt-show-only 'noinstalled) - (not install)) cand) - ((eq helm-apt-show-only 'all) cand)) - when show collect show)) - -(defun helm-apt-show-only-installed () - (interactive) - (when helm-alive-p - (setq helm-apt-show-only 'installed) - (helm-update))) - -(defun helm-apt-show-only-not-installed () - (interactive) - (when helm-alive-p - (setq helm-apt-show-only 'noinstalled) - (helm-update))) - -(defun helm-apt-show-only-deinstalled () - (interactive) - (when helm-alive-p - (setq helm-apt-show-only 'deinstalled) - (helm-update))) - -(defun helm-apt-show-all () - (interactive) - (when helm-alive-p - (setq helm-apt-show-only 'all) - (helm-update))) - -(defun helm-apt-init () - "Initialize list of debian packages." - (let ((query "")) - (unless (and helm-apt-installed-packages - helm-apt-all-packages) - (message "Loading package list...") - (setq helm-apt-installed-packages - (with-temp-buffer - (call-process-shell-command "dpkg --get-selections" - nil (current-buffer)) - (cl-loop for i in (split-string (buffer-string) "\n" t) - for p = (split-string i) - collect (cons (car p) (cadr p))))) - (helm-init-candidates-in-buffer - 'global - (setq helm-apt-all-packages - (with-temp-buffer - (call-process-shell-command - (format helm-apt-search-command query) - nil (current-buffer)) - (buffer-string)))) - (message "Loading package list done") - (sit-for 0.5)))) - -(defun helm-apt-display-to-real (line) - "Return only name of a debian package. -LINE is displayed like: -package name - description." - (car (split-string line " - "))) - -(defvar helm-apt-show-current-package nil) -(define-derived-mode helm-apt-show-mode - special-mode "helm-apt-show" - "Mode to display infos on apt packages.") - -(defun helm-apt-cache-show (package) - "Show information on apt package PACKAGE." - (if (and (functionp helm-apt-cache-show-function) - (not (eq helm-apt-cache-show-function - 'helm-apt-cache-show))) - ;; A function, call it. - (funcall helm-apt-cache-show-function package) - ;; nil or whatever use default. - (helm-apt-cache-show-1 package))) - -(defun helm-apt-cache-show-1 (package) - (let* ((command (format helm-apt-show-command package)) - (buf (get-buffer-create "*helm apt show*"))) - (switch-to-buffer buf) - (unless (string= package helm-apt-show-current-package) - (let ((inhibit-read-only t)) - (erase-buffer) - (save-excursion - (call-process-shell-command - command nil (current-buffer) t)))) - (helm-apt-show-mode) - (set (make-local-variable 'helm-apt-show-current-package) - package))) - -(defun helm-apt-install (_package) - "Run 'apt-get install' shell command on PACKAGE." - (helm-apt-generic-action :action 'install)) - -(defun helm-apt-reinstall (_package) - "Run 'apt-get install --reinstall' shell command on PACKAGE." - (helm-apt-generic-action :action 'reinstall)) - -(defun helm-apt-uninstall (_package) - "Run 'apt-get remove' shell command on PACKAGE." - (helm-apt-generic-action :action 'uninstall)) - -(defun helm-apt-purge (_package) - "Run 'apt-get purge' shell command on PACKAGE." - (helm-apt-generic-action :action 'purge)) - -(cl-defun helm-apt-generic-action (&key action) - "Run 'apt-get ACTION'. -Support install, remove and purge actions." - (if (and helm-apt-term-buffer - (buffer-live-p (get-buffer helm-apt-term-buffer))) - (switch-to-buffer helm-apt-term-buffer) - (ansi-term (getenv "SHELL") "term apt") - (setq helm-apt-term-buffer (buffer-name))) - (term-line-mode) - (let ((command (cl-case action - (install "sudo apt-get install ") - (reinstall "sudo apt-get install --reinstall ") - (uninstall "sudo apt-get remove ") - (purge "sudo apt-get purge ") - (t (error "Unknown action")))) - (beg (point)) - end - (cand-list (mapconcat (lambda (x) (format "'%s'" x)) - (helm-marked-candidates) " "))) - (goto-char (point-max)) - (insert (concat command cand-list)) - (setq end (point)) - (if (y-or-n-p (format "%s package(s)" (symbol-name action))) - (progn - (setq helm-external-commands-list nil) - (setq helm-apt-installed-packages nil) - (term-char-mode) (term-send-input)) - (delete-region beg end)))) - -;;;###autoload -(defun helm-apt (arg) - "Preconfigured `helm' : frontend of APT package manager. -With a prefix arg reload cache." - (interactive "P") - (setq helm-apt-show-only 'all) - (unless helm-apt-default-archs - (setq helm-apt-default-archs - (append (split-string - (shell-command-to-string - "dpkg --print-architecture") - "\n" t) - (split-string - (shell-command-to-string - "dpkg --print-foreign-architectures") - "\n" t)))) - (let ((query (read-string "Search Package: " nil 'helm-apt-input-history))) - (when arg (helm-apt-refresh)) - (helm :sources 'helm-source-apt - :prompt "Search Package: " - :input query - :buffer "*helm apt*" - :history 'helm-apt-input-history))) - - -(provide 'helm-apt) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-apt.el ends here diff --git a/elpa/helm-20160105.2046/helm-autoloads.el b/elpa/helm-20160105.2046/helm-autoloads.el deleted file mode 100644 index 05e546f4..00000000 --- a/elpa/helm-20160105.2046/helm-autoloads.el +++ /dev/null @@ -1,930 +0,0 @@ -;;; helm-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) - -;;;### (autoloads nil "helm-adaptive" "helm-adaptive.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-adaptive.el - -(defvar helm-adaptive-mode nil "\ -Non-nil if Helm-Adaptive mode is enabled. -See the command `helm-adaptive-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-adaptive-mode'.") - -(custom-autoload 'helm-adaptive-mode "helm-adaptive" nil) - -(autoload 'helm-adaptive-mode "helm-adaptive" "\ -Toggle adaptive sorting in all sources. - -\(fn &optional ARG)" t nil) - -(autoload 'helm-reset-adaptive-history "helm-adaptive" "\ -Delete all `helm-adaptive-history' and his file. -Useful when you have a old or corrupted `helm-adaptive-history-file'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-apt" "helm-apt.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-apt.el - -(autoload 'helm-apt "helm-apt" "\ -Preconfigured `helm' : frontend of APT package manager. -With a prefix arg reload cache. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-bookmark" "helm-bookmark.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-bookmark.el - -(autoload 'helm-bookmarks "helm-bookmark" "\ -Preconfigured `helm' for bookmarks. - -\(fn)" t nil) - -(autoload 'helm-filtered-bookmarks "helm-bookmark" "\ -Preconfigured helm for bookmarks (filtered by category). -Optional source `helm-source-bookmark-addressbook' is loaded -only if external library addressbook-bookmark.el is available. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-buffers" "helm-buffers.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-buffers.el - -(autoload 'helm-buffers-list "helm-buffers" "\ -Preconfigured `helm' to list buffers. - -\(fn)" t nil) - -(autoload 'helm-mini "helm-buffers" "\ -Preconfigured `helm' lightweight version (buffer -> recentf). - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-color" "helm-color.el" (22156 56359 0 -;;;;;; 0)) -;;; Generated autoloads from helm-color.el - -(autoload 'helm-colors "helm-color" "\ -Preconfigured `helm' for color. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-command" "helm-command.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-command.el - -(autoload 'helm-M-x "helm-command" "\ -Preconfigured `helm' for Emacs commands. -It is `helm' replacement of regular `M-x' `execute-extended-command'. - -Unlike regular `M-x' emacs vanilla `execute-extended-command' command, -the prefix args if needed, are passed AFTER starting `helm-M-x'. - -You can get help on each command by persistent action. - -\(fn ARG &optional COMMAND-NAME)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-config" "helm-config.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-config.el - -(autoload 'helm-configuration "helm-config" "\ -Customize `helm'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-dabbrev" "helm-dabbrev.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-dabbrev.el - -(autoload 'helm-dabbrev "helm-dabbrev" "\ -Preconfigured helm for dynamic abbreviations. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-elisp" "helm-elisp.el" (22156 56359 0 -;;;;;; 0)) -;;; Generated autoloads from helm-elisp.el - -(autoload 'helm-lisp-completion-at-point "helm-elisp" "\ -Preconfigured helm for lisp symbol completion at point. - -\(fn)" t nil) - -(autoload 'helm-complete-file-name-at-point "helm-elisp" "\ -Preconfigured helm to complete file name at point. - -\(fn &optional FORCE)" t nil) - -(autoload 'helm-lisp-indent "helm-elisp" "\ - - -\(fn)" t nil) - -(autoload 'helm-lisp-completion-or-file-name-at-point "helm-elisp" "\ -Preconfigured helm to complete lisp symbol or filename at point. -Filename completion happen if string start after or between a double quote. - -\(fn)" t nil) - -(autoload 'helm-apropos "helm-elisp" "\ -Preconfigured helm to describe commands, functions, variables and faces. - -\(fn)" t nil) - -(autoload 'helm-manage-advice "helm-elisp" "\ -Preconfigured `helm' to disable/enable function advices. - -\(fn)" t nil) - -(autoload 'helm-locate-library "helm-elisp" "\ -Preconfigured helm to locate elisp libraries. - -\(fn)" t nil) - -(autoload 'helm-timers "helm-elisp" "\ -Preconfigured `helm' for timers. - -\(fn)" t nil) - -(autoload 'helm-complex-command-history "helm-elisp" "\ -Preconfigured helm for complex command history. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-elisp-package" "helm-elisp-package.el" -;;;;;; (22156 56359 0 0)) -;;; Generated autoloads from helm-elisp-package.el - -(autoload 'helm-list-elisp-packages "helm-elisp-package" "\ -Preconfigured helm for listing and handling emacs packages. - -\(fn ARG)" t nil) - -(autoload 'helm-list-elisp-packages-no-fetch "helm-elisp-package" "\ -Preconfigured helm for emacs packages. -Same as `helm-list-elisp-packages' but don't fetch packages on remote. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-elscreen" "helm-elscreen.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-elscreen.el - -(autoload 'helm-elscreen "helm-elscreen" "\ -Preconfigured helm to list elscreen. - -\(fn)" t nil) - -(autoload 'helm-elscreen-history "helm-elscreen" "\ -Preconfigured helm to list elscreen in history order. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-eshell" "helm-eshell.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-eshell.el - -(autoload 'helm-esh-pcomplete "helm-eshell" "\ -Preconfigured helm to provide helm completion in eshell. - -\(fn)" t nil) - -(autoload 'helm-eshell-history "helm-eshell" "\ -Preconfigured helm for eshell history. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-eval" "helm-eval.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-eval.el - -(autoload 'helm-eval-expression "helm-eval" "\ -Preconfigured helm for `helm-source-evaluation-result'. - -\(fn ARG)" t nil) - -(autoload 'helm-eval-expression-with-eldoc "helm-eval" "\ -Preconfigured helm for `helm-source-evaluation-result' with `eldoc' support. - -\(fn)" t nil) - -(autoload 'helm-calcul-expression "helm-eval" "\ -Preconfigured helm for `helm-source-calculation-result'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-external" "helm-external.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-external.el - -(autoload 'helm-run-external-command "helm-external" "\ -Preconfigured `helm' to run External PROGRAM asyncronously from Emacs. -If program is already running exit with error. -You can set your own list of commands with -`helm-external-commands-list'. - -\(fn PROGRAM)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-files" "helm-files.el" (22156 56359 0 -;;;;;; 0)) -;;; Generated autoloads from helm-files.el - -(autoload 'helm-browse-project "helm-files" "\ -Preconfigured helm to browse projects. -Browse files and see status of project with its vcs. -Only HG and GIT are supported for now. -Fall back to `helm-browse-project-find-files' -if current directory is not under control of one of those vcs. -With a prefix ARG browse files recursively, with two prefix ARG -rebuild the cache. -If the current directory is found in the cache, start -`helm-browse-project-find-files' even with no prefix ARG. -NOTE: The prefix ARG have no effect on the VCS controlled directories. - -Needed dependencies for VCS: - -and - -and -. - -\(fn ARG)" t nil) - -(autoload 'helm-find "helm-files" "\ -Preconfigured `helm' for the find shell command. - -\(fn ARG)" t nil) - -(autoload 'helm-find-files "helm-files" "\ -Preconfigured `helm' for helm implementation of `find-file'. -Called with a prefix arg show history if some. -Don't call it from programs, use `helm-find-files-1' instead. -This is the starting point for nearly all actions you can do on files. - -\(fn ARG)" t nil) - -(autoload 'helm-for-files "helm-files" "\ -Preconfigured `helm' for opening files. -Run all sources defined in `helm-for-files-preferred-list'. - -\(fn)" t nil) - -(autoload 'helm-multi-files "helm-files" "\ -Preconfigured helm similar to `helm-for-files' but that don't run locate. -Allow toggling from locate to others sources. -This allow seeing first if what you search is in other sources before launching -locate. - -\(fn)" t nil) - -(autoload 'helm-recentf "helm-files" "\ -Preconfigured `helm' for `recentf'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-font" "helm-font.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-font.el - -(autoload 'helm-select-xfont "helm-font" "\ -Preconfigured `helm' to select Xfont. - -\(fn)" t nil) - -(autoload 'helm-ucs "helm-font" "\ -Preconfigured helm for `ucs-names' math symbols. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-grep" "helm-grep.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-grep.el - -(autoload 'helm-goto-precedent-file "helm-grep" "\ -Go to precedent file in helm grep/etags buffers. - -\(fn)" t nil) - -(autoload 'helm-goto-next-file "helm-grep" "\ -Go to precedent file in helm grep/etags buffers. - -\(fn)" t nil) - -(autoload 'helm-grep-mode "helm-grep" "\ -Major mode to provide actions in helm grep saved buffer. - -Special commands: -\\{helm-grep-mode-map} - -\(fn)" t nil) - -(autoload 'helm-do-grep-ag "helm-grep" "\ -Preconfigured helm for grepping with AG in `default-directory'. - -\(fn)" t nil) - -(autoload 'helm-grep-do-git-grep "helm-grep" "\ -Preconfigured helm for git-grepping `default-directory'. -With a prefix arg ARG git-grep the whole repository. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-help" "helm-help.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-help.el - -(autoload 'helm-documentation "helm-help" "\ -Preconfigured helm for helm documentation. -With a prefix arg refresh the documentation. - -Find here the documentation of all sources actually documented. - -\(fn ARG)" t nil) - -(defvar helm-comp-read-mode-line "\\C/\\[helm-cr-empty-string]:Empty \\\\[helm-help]:Help \\[helm-select-action]:Act \\[helm-maybe-exit-minibuffer]/f1/f2/f-n:NthAct \\[helm-toggle-suspend-update]:Tog.suspend") - -(defvar helm-read-file-name-mode-line-string "\\\\[helm-help]:Help C/\\[helm-cr-empty-string]:Empty \\\\[helm-select-action]:Act \\[helm-maybe-exit-minibuffer]/f1/f2/f-n:NthAct \\[helm-toggle-suspend-update]:Tog.suspend" "\ -String displayed in mode-line in `helm-source-find-files'.") - -(defvar helm-top-mode-line "\\\\[helm-help]:Help \\\\[helm-select-action]:Act \\[helm-maybe-exit-minibuffer]/f1/f2/f-n:NthAct \\[helm-toggle-suspend-update]:Tog.suspend") - -(autoload 'helm-describe-helm-attribute "helm-help" "\ -Display the full documentation of HELM-ATTRIBUTE. -HELM-ATTRIBUTE should be a symbol. - -\(fn HELM-ATTRIBUTE)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-id-utils" "helm-id-utils.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-id-utils.el - -(autoload 'helm-gid "helm-id-utils" "\ -Preconfigured helm for `gid' command line of `ID-Utils'. -Need A database created with the command `mkid' -above `default-directory'. -Need id-utils as dependency which provide `mkid', `gid' etc... -See . - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-imenu" "helm-imenu.el" (22156 56359 0 -;;;;;; 0)) -;;; Generated autoloads from helm-imenu.el - -(autoload 'helm-imenu "helm-imenu" "\ -Preconfigured `helm' for `imenu'. - -\(fn)" t nil) - -(autoload 'helm-imenu-in-all-buffers "helm-imenu" "\ -Preconfigured helm for fetching imenu entries of all buffers. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-info" "helm-info.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-info.el - -(autoload 'helm-info-at-point "helm-info" "\ -Preconfigured `helm' for searching info at point. -With a prefix-arg insert symbol at point. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-locate" "helm-locate.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-locate.el - -(autoload 'helm-projects-find-files "helm-locate" "\ -Find files with locate in `helm-locate-project-list'. -With a prefix arg refresh the database in each project. - -\(fn UPDATE)" t nil) - -(autoload 'helm-locate-read-file-name "helm-locate" "\ - - -\(fn PROMPT)" nil nil) - -(autoload 'helm-locate "helm-locate" "\ -Preconfigured `helm' for Locate. -Note: you can add locate options after entering pattern. -See 'man locate' for valid options and also `helm-locate-command'. - -You can specify a local database with prefix argument ARG. -With two prefix arg, refresh the current local db or create it -if it doesn't exists. - -To create a user specific db, use -\"updatedb -l 0 -o db_path -U directory\". -Where db_path is a filename matched by -`helm-locate-db-file-regexp'. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-man" "helm-man.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-man.el - -(autoload 'helm-man-woman "helm-man" "\ -Preconfigured `helm' for Man and Woman pages. -With a prefix arg reinitialize the cache. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-misc" "helm-misc.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-misc.el - -(autoload 'helm-browse-menubar "helm-misc" "\ -Preconfigured helm to the menubar using lacarte.el. - -\(fn)" t nil) - -(autoload 'helm-world-time "helm-misc" "\ -Preconfigured `helm' to show world time. -Default action change TZ environment variable locally to emacs. - -\(fn)" t nil) - -(autoload 'helm-insert-latex-math "helm-misc" "\ -Preconfigured helm for latex math symbols completion. - -\(fn)" t nil) - -(autoload 'helm-ratpoison-commands "helm-misc" "\ -Preconfigured `helm' to execute ratpoison commands. - -\(fn)" t nil) - -(autoload 'helm-stumpwm-commands "helm-misc" "\ -Preconfigured helm for stumpwm commands. - -\(fn)" t nil) - -(autoload 'helm-minibuffer-history "helm-misc" "\ -Preconfigured `helm' for `minibuffer-history'. - -\(fn)" t nil) - -(autoload 'helm-comint-input-ring "helm-misc" "\ -Preconfigured `helm' that provide completion of `comint' history. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-mode" "helm-mode.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-mode.el - -(autoload 'helm-comp-read "helm-mode" "\ -Read a string in the minibuffer, with helm completion. - -It is helm `completing-read' equivalent. - -- PROMPT is the prompt name to use. - -- COLLECTION can be a list, vector, obarray or hash-table. - It can be also a function that receives three arguments: - the values string, predicate and t. See `all-completions' for more details. - -Keys description: - -- TEST: A predicate called with one arg i.e candidate. - -- INITIAL-INPUT: Same as input arg in `helm'. - -- PRESELECT: See preselect arg of `helm'. - -- DEFAULT: This option is used only for compatibility with regular - Emacs `completing-read' (Same as DEFAULT arg of `completing-read'). - -- BUFFER: Name of helm-buffer. - -- MUST-MATCH: Candidate selected must be one of COLLECTION. - -- FUZZY: Enable fuzzy matching. - -- REVERSE-HISTORY: When non--nil display history source after current - source completion. - -- REQUIRES-PATTERN: Same as helm attribute, default is 0. - -- HISTORY: A list containing specific history, default is nil. - When it is non--nil, all elements of HISTORY are displayed in - a special source before COLLECTION. - -- INPUT-HISTORY: A symbol. the minibuffer input history will be - stored there, if nil or not provided, `minibuffer-history' - will be used instead. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- DEL-INPUT: Boolean, when non--nil (default) remove the partial - minibuffer input from HISTORY is present. - -- PERSISTENT-ACTION: A function called with one arg i.e candidate. - -- PERSISTENT-HELP: A string to document PERSISTENT-ACTION. - -- MODE-LINE: A string or list to display in mode line. - Default is `helm-comp-read-mode-line'. - -- KEYMAP: A keymap to use in this `helm-comp-read'. - (the keymap will be shared with history source) - -- NAME: The name related to this local source. - -- EXEC-WHEN-ONLY-ONE: Bound `helm-execute-action-at-once-if-one' - to non--nil. (possibles values are t or nil). - -- VOLATILE: Use volatile attribute (enabled by default). - -- SORT: A predicate to give to `sort' e.g `string-lessp' - Use this only on small data as it is ineficient. - If you want to sort faster add a sort function to - FC-TRANSFORMER. - Note that FUZZY when enabled is already providing a sort function. - -- FC-TRANSFORMER: A `filtered-candidate-transformer' function - or a list of functions. - -- HIST-FC-TRANSFORMER: A `filtered-candidate-transformer' - function for the history source. - -- MARKED-CANDIDATES: If non--nil return candidate or marked candidates as a list. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: (default is non--nil) See `helm-comp-read-get-candidates'. - -- CANDIDATES-IN-BUFFER: when non--nil use a source build with - `helm-source-in-buffer' which is much faster. - Argument VOLATILE have no effect when CANDIDATES-IN-BUFFER is non--nil. - -Any prefix args passed during `helm-comp-read' invocation will be recorded -in `helm-current-prefix-arg', otherwise if prefix args were given before -`helm-comp-read' invocation, the value of `current-prefix-arg' will be used. -That's mean you can pass prefix args before or after calling a command -that use `helm-comp-read' See `helm-M-x' for example. - -\(fn PROMPT COLLECTION &key TEST INITIAL-INPUT DEFAULT PRESELECT (buffer \"*Helm Completions*\") MUST-MATCH FUZZY REVERSE-HISTORY (requires-pattern 0) HISTORY INPUT-HISTORY (case-fold helm-comp-read-case-fold-search) (del-input t) (persistent-action nil) (persistent-help \"DoNothing\") (mode-line helm-comp-read-mode-line) HELP-MESSAGE (keymap helm-comp-read-map) (name \"Helm Completions\") CANDIDATES-IN-BUFFER EXEC-WHEN-ONLY-ONE QUIT-WHEN-NO-CAND (volatile t) SORT (fc-transformer (quote helm-cr-default-transformer)) HIST-FC-TRANSFORMER MARKED-CANDIDATES NOMARK (alistp t) (candidate-number-limit helm-candidate-number-limit))" nil nil) - -(autoload 'helm-read-file-name "helm-mode" "\ -Read a file name with helm completion. -It is helm `read-file-name' emulation. - -Argument PROMPT is the default prompt to use. - -Keys description: - -- NAME: Source name, default to \"Read File Name\". - -- INITIAL-INPUT: Where to start read file name, default to `default-directory'. - -- BUFFER: `helm-buffer' name default to \"*Helm Completions*\". - -- TEST: A predicate called with one arg 'candidate'. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- PRESELECT: helm preselection. - -- HISTORY: Display HISTORY in a special source. - -- MUST-MATCH: Can be 'confirm, nil, or t. - -- MARKED-CANDIDATES: When non--nil return a list of marked candidates. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: Don't use `all-completions' in history (take effect only on history). - -- PERSISTENT-ACTION: a persistent action function. - -- PERSISTENT-HELP: persistent help message. - -- MODE-LINE: A mode line message, default is `helm-read-file-name-mode-line-string'. - -\(fn PROMPT &key (name \"Read File Name\") (initial-input default-directory) (buffer \"*Helm file completions*\") TEST (case-fold helm-file-name-case-fold-search) PRESELECT HISTORY MUST-MATCH DEFAULT MARKED-CANDIDATES (candidate-number-limit helm-ff-candidate-number-limit) NOMARK (alistp t) (persistent-action (quote helm-find-files-persistent-action)) (persistent-help \"Hit1 Expand Candidate, Hit2 or (C-u) Find file\") (mode-line helm-read-file-name-mode-line-string))" nil nil) - -(defvar helm-mode nil "\ -Non-nil if Helm mode is enabled. -See the command `helm-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-mode'.") - -(custom-autoload 'helm-mode "helm-mode" nil) - -(autoload 'helm-mode "helm-mode" "\ -Toggle generic helm completion. - -All functions in Emacs that use `completing-read' -or `read-file-name' and friends will use helm interface -when this mode is turned on. -However you can modify this behavior for functions of your choice -with `helm-completing-read-handlers-alist'. - -Called with a positive arg, turn on unconditionally, with a -negative arg turn off. -You can turn it on with `helm-mode'. - -Some crap emacs functions may not be supported, -e.g `ffap-alternate-file' and maybe others -You can add such functions to `helm-completing-read-handlers-alist' -with a nil value. - -Note: This mode is incompatible with Emacs23. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-net" "helm-net.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-net.el - -(autoload 'helm-surfraw "helm-net" "\ -Preconfigured `helm' to search PATTERN with search ENGINE. - -\(fn PATTERN ENGINE)" t nil) - -(autoload 'helm-google-suggest "helm-net" "\ -Preconfigured `helm' for google search with google suggest. - -\(fn)" t nil) - -(autoload 'helm-wikipedia-suggest "helm-net" "\ -Preconfigured `helm' for Wikipedia lookup with Wikipedia suggest. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-org" "helm-org.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-org.el - -(autoload 'helm-org-agenda-files-headings "helm-org" "\ -Preconfigured helm for org files headings. - -\(fn)" t nil) - -(autoload 'helm-org-in-buffer-headings "helm-org" "\ -Preconfigured helm for org buffer headings. - -\(fn)" t nil) - -(autoload 'helm-org-parent-headings "helm-org" "\ -Preconfigured helm for org headings that are parents of the -current heading. - -\(fn)" t nil) - -(autoload 'helm-org-capture-templates "helm-org" "\ -Preconfigured helm for org templates. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-regexp" "helm-regexp.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-regexp.el - -(autoload 'helm-moccur-mode "helm-regexp" "\ -Major mode to provide actions in helm moccur saved buffer. - -Special commands: -\\{helm-moccur-mode-map} - -\(fn)" t nil) - -(autoload 'helm-regexp "helm-regexp" "\ -Preconfigured helm to build regexps. -`query-replace-regexp' can be run from there against found regexp. - -\(fn)" t nil) - -(autoload 'helm-occur "helm-regexp" "\ -Preconfigured helm for Occur. - -\(fn)" t nil) - -(autoload 'helm-occur-from-isearch "helm-regexp" "\ -Invoke `helm-occur' from isearch. - -\(fn)" t nil) - -(autoload 'helm-multi-occur-from-isearch "helm-regexp" "\ -Invoke `helm-multi-occur' from isearch. - -With a prefix arg, reverse the behavior of -`helm-moccur-always-search-in-current'. -The prefix arg can be set before calling -`helm-multi-occur-from-isearch' or during the buffer selection. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-ring" "helm-ring.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-ring.el - -(defvar helm-push-mark-mode nil "\ -Non-nil if Helm-Push-Mark mode is enabled. -See the command `helm-push-mark-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-push-mark-mode'.") - -(custom-autoload 'helm-push-mark-mode "helm-ring" nil) - -(autoload 'helm-push-mark-mode "helm-ring" "\ -Provide an improved version of `push-mark'. -Modify the behavior of `push-mark' to update -the `global-mark-ring' after each new visit. - -\(fn &optional ARG)" t nil) - -(autoload 'helm-mark-ring "helm-ring" "\ -Preconfigured `helm' for `helm-source-mark-ring'. - -\(fn)" t nil) - -(autoload 'helm-global-mark-ring "helm-ring" "\ -Preconfigured `helm' for `helm-source-global-mark-ring'. - -\(fn)" t nil) - -(autoload 'helm-all-mark-rings "helm-ring" "\ -Preconfigured `helm' for `helm-source-global-mark-ring' and `helm-source-mark-ring'. - -\(fn)" t nil) - -(autoload 'helm-register "helm-ring" "\ -Preconfigured `helm' for Emacs registers. - -\(fn)" t nil) - -(autoload 'helm-show-kill-ring "helm-ring" "\ -Preconfigured `helm' for `kill-ring'. -It is drop-in replacement of `yank-pop'. - -First call open the kill-ring browser, next calls move to next line. - -\(fn)" t nil) - -(autoload 'helm-execute-kmacro "helm-ring" "\ -Preconfigured helm for keyboard macros. -Define your macros with `f3' and `f4'. -See (info \"(emacs) Keyboard Macros\") for detailed infos. -This command is useful when used with persistent action. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-semantic" "helm-semantic.el" (22156 56359 -;;;;;; 0 0)) -;;; Generated autoloads from helm-semantic.el - -(autoload 'helm-semantic "helm-semantic" "\ -Preconfigured `helm' for `semantic'. -If ARG is supplied, pre-select symbol at point instead of current - -\(fn ARG)" t nil) - -(autoload 'helm-semantic-or-imenu "helm-semantic" "\ -Preconfigured helm for `semantic' or `imenu'. -If ARG is supplied, pre-select symbol at point instead of current -semantic tag in scope. - -If `semantic-mode' is active in the current buffer, then use -semantic for generating tags, otherwise fall back to `imenu'. -Fill in the symbol at point by default. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-sys" "helm-sys.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-sys.el - -(autoload 'helm-top "helm-sys" "\ -Preconfigured `helm' for top command. - -\(fn)" t nil) - -(autoload 'helm-list-emacs-process "helm-sys" "\ -Preconfigured `helm' for emacs process. - -\(fn)" t nil) - -(autoload 'helm-xrandr-set "helm-sys" "\ -Preconfigured helm for xrandr. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-tags" "helm-tags.el" (22156 56359 0 0)) -;;; Generated autoloads from helm-tags.el - -(autoload 'helm-etags-select "helm-tags" "\ -Preconfigured helm for etags. -If called with a prefix argument REINIT -or if any of the tag files have been modified, reinitialize cache. - -This function aggregates three sources of tag files: - - 1) An automatically located file in the parent directories, - by `helm-etags-get-tag-file'. - 2) `tags-file-name', which is commonly set by `find-tag' command. - 3) `tags-table-list' which is commonly set by `visit-tags-table' command. - -\(fn REINIT)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-utils" "helm-utils.el" (22156 56359 0 -;;;;;; 0)) -;;; Generated autoloads from helm-utils.el - -(autoload 'helm-show-all-in-this-source-only "helm-utils" "\ -Show only current source of this helm session with all its candidates. -With a numeric prefix arg show only the ARG number of candidates. - -\(fn ARG)" t nil) - -(autoload 'helm-display-all-sources "helm-utils" "\ -Display all sources previously hidden by `helm-set-source-filter'. - -\(fn)" t nil) - -(autoload 'helm-quit-and-find-file "helm-utils" "\ -Drop into `helm-find-files' from `helm'. -If current selection is a buffer or a file, `helm-find-files' -from its directory. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil nil ("helm-easymenu.el" "helm-multi-match.el" -;;;;;; "helm-pkg.el" "helm-plugin.el" "helm-types.el") (22156 56359 -;;;;;; 459434 0)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; helm-autoloads.el ends here diff --git a/elpa/helm-20160105.2046/helm-bookmark.el b/elpa/helm-20160105.2046/helm-bookmark.el deleted file mode 100644 index 8ca6fdcc..00000000 --- a/elpa/helm-20160105.2046/helm-bookmark.el +++ /dev/null @@ -1,759 +0,0 @@ -;;; helm-bookmark.el --- Helm for Emacs regular Bookmarks. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'bookmark) -(require 'helm) -(require 'helm-help) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-info) -(require 'helm-adaptive) -(require 'helm-net) - -(declare-function addressbook-bookmark-edit "ext:addressbook-bookmark.el" (bookmark)) -(declare-function message-buffers "message.el") -(declare-function addressbook-set-mail-buffer-1 "ext:addressbook-bookmark.el" - (&optional bookmark-name append cc)) - - -(defgroup helm-bookmark nil - "Predefined configurations for `helm.el'." - :group 'helm) - -(defcustom helm-bookmark-show-location nil - "Show location of bookmark on display." - :group 'helm-bookmark - :type 'boolean) - -(defcustom helm-bookmark-default-filtered-sources - (append '(helm-source-bookmark-files&dirs - helm-source-bookmark-helm-find-files - helm-source-bookmark-info - helm-source-bookmark-gnus - helm-source-bookmark-man - helm-source-bookmark-images - helm-source-bookmark-w3m) - (and (locate-library "addressbook-bookmark") - (list 'helm-source-bookmark-addressbook)) - (list 'helm-source-bookmark-uncategorized - 'helm-source-bookmark-set)) - "List of sources to use in `helm-filtered-bookmarks'." - :group 'helm-bookmark - :type '(repeat (choice symbol))) - -(defcustom helm-bookmark-addressbook-actions - '(("Show Contact(s)" - . (lambda (candidate) - (let* ((contacts (helm-marked-candidates)) - (current-prefix-arg helm-current-prefix-arg)) - (bookmark-jump - (helm-bookmark-get-bookmark-from-name (car contacts))) - (helm-aif (cdr contacts) - (let ((current-prefix-arg '(4))) - (cl-loop for bmk in it do - (bookmark-jump - (helm-bookmark-get-bookmark-from-name bmk)))))))) - ("Mail To" . helm-bookmark-addressbook-send-mail-1) - ("Mail Cc" . (lambda (_candidate) - (helm-bookmark-addressbook-send-mail-1 nil 'cc))) - ("Mail Bcc" . (lambda (_candidate) - (helm-bookmark-addressbook-send-mail-1 nil 'bcc))) - ("Edit Bookmark" - . (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (addressbook-bookmark-edit - (assoc bmk bookmark-alist))))) - ("Delete bookmark(s)" . helm-delete-marked-bookmarks) - ("Insert Email at point" - . (lambda (candidate) - (let* ((bmk (helm-bookmark-get-bookmark-from-name - candidate)) - (mlist (split-string - (assoc-default - 'email (assoc bmk bookmark-alist)) - ", "))) - (insert - (if (> (length mlist) 1) - (helm-comp-read - "Insert Mail Address: " mlist :must-match t) - (car mlist)))))) - ("Show annotation" - . (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (bookmark-show-annotation bmk)))) - ("Edit annotation" - . (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (bookmark-edit-annotation bmk)))) - ("Show Google map" - . (lambda (candidate) - (let* ((bmk (helm-bookmark-get-bookmark-from-name - candidate)) - (full-bmk (assoc bmk bookmark-alist))) - (addressbook-google-map full-bmk))))) - "Actions for addressbook bookmarks." - :group 'helm-bookmark - :type '(alist :key-type string :value-type function)) - - -(defface helm-bookmark-info - '((t (:foreground "green"))) - "Face used for W3m Emacs bookmarks (not w3m bookmarks)." - :group 'helm-bookmark) - -(defface helm-bookmark-w3m - '((t (:foreground "yellow"))) - "Face used for W3m Emacs bookmarks (not w3m bookmarks)." - :group 'helm-bookmark) - -(defface helm-bookmark-gnus - '((t (:foreground "magenta"))) - "Face used for Gnus bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-man - '((t (:foreground "Orange4"))) - "Face used for Woman/man bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-file - '((t (:foreground "Deepskyblue2"))) - "Face used for file bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-directory - '((t (:inherit helm-ff-directory))) - "Face used for file bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-addressbook - '((t (:foreground "tomato"))) - "Face used for addressbook bookmarks." - :group 'helm-bookmark) - - -(defvar helm-bookmark-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-c o") 'helm-bookmark-run-jump-other-window) - (define-key map (kbd "C-d") 'helm-bookmark-run-delete) - (define-key map (kbd "C-]") 'helm-bookmark-toggle-filename) - (define-key map (kbd "M-e") 'helm-bookmark-run-edit) - map) - "Generic Keymap for emacs bookmark sources.") - -(defclass helm-source-basic-bookmarks (helm-source-in-buffer helm-type-bookmark) - ((init :initform (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global - (bookmark-all-names)))) - (filtered-candidate-transformer :initform 'helm-bookmark-transformer) - (search :initform 'helm-bookmark-search-fn))) - -(defvar helm-source-bookmarks - (helm-make-source "Bookmarks" 'helm-source-basic-bookmarks) - "See (info \"(emacs)Bookmarks\").") - -(defun helm-bookmark-transformer (candidates _source) - (cl-loop for i in candidates - for loc = (bookmark-location i) - for len = (string-width i) - for trunc = (if (> len bookmark-bmenu-file-column) - (helm-substring i bookmark-bmenu-file-column) - i) - for sep = (make-string (- (+ bookmark-bmenu-file-column 2) - (length trunc)) - ? ) - if helm-bookmark-show-location - collect (cons (concat trunc sep (if (listp loc) (car loc) loc)) i) - else collect i)) - -(defun helm-bookmark-toggle-filename-1 (_candidate) - (let* ((real (helm-get-selection helm-buffer)) - (trunc (if (> (string-width real) bookmark-bmenu-file-column) - (helm-substring real bookmark-bmenu-file-column) - real)) - (loc (bookmark-location real))) - (setq helm-bookmark-show-location (not helm-bookmark-show-location)) - (helm-force-update (if helm-bookmark-show-location - (concat (regexp-quote trunc) - " +" - (regexp-quote - (if (listp loc) (car loc) loc))) - real)))) - -(defun helm-bookmark-toggle-filename () - "Toggle bookmark location visibility." - (interactive) - (with-helm-alive-p - (helm-attrset 'toggle-filename - '(helm-bookmark-toggle-filename-1 . never-split)) - (helm-execute-persistent-action 'toggle-filename))) - -(defun helm-bookmark-jump (candidate) - "Jump to bookmark from keyboard." - (let ((current-prefix-arg helm-current-prefix-arg) - non-essential) - (bookmark-jump candidate))) - -(defun helm-bookmark-jump-other-window (candidate) - (let (non-essential) - (bookmark-jump-other-window candidate))) - - -;;; bookmark-set -;; -(defvar helm-source-bookmark-set - (helm-build-dummy-source "Set Bookmark" - :filtered-candidate-transformer - (lambda (_candidates _source) - (list (or (and (not (string= helm-pattern "")) - helm-pattern) - "Enter a bookmark name to record"))) - :action '(("Set bookmark" . (lambda (candidate) - (if (string= helm-pattern "") - (message "No bookmark name given for record") - (bookmark-set candidate)))))) - "See (info \"(emacs)Bookmarks\").") - - -;;; Search and match-part fns. -;; -(defun helm-bookmark-search-fn (pattern) - "Search function for bookmark sources using `helm-source-in-buffer'." - (if helm-bookmark-show-location - (helm-aif (next-single-property-change (point) 'location) - (goto-char it)) - (re-search-forward pattern nil t))) - -(defun helm-bookmark-match-part-fn (candidate) - "Match part function for bookmark sources using `helm-source-in-buffer'." - (helm-aif (and helm-bookmark-show-location - (bookmark-location candidate)) - ;; Match against bookmark-name and location. - (concat candidate " " it) - ;; Match against bookmark-name. - candidate)) - - -;;; Predicates -;; -(defconst helm-bookmark--non-file-filename " - no file -" - "Name to use for `filename' entry, for non-file bookmarks.") - -(defun helm-bookmark-gnus-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Gnus bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-gnus) - (eq (bookmark-get-handler bookmark) 'gnus-summary-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-gnus))) - -(defun helm-bookmark-w3m-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a W3m bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-w3m) - (eq (bookmark-get-handler bookmark) 'bookmark-w3m-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-w3m))) - -(defun helm-bookmark-woman-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Woman bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-woman) - (eq (bookmark-get-handler bookmark) 'woman-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-woman))) - -(defun helm-bookmark-man-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Man bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-man) - (eq (bookmark-get-handler bookmark) 'Man-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-man))) - -(defun helm-bookmark-woman-man-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Man or Woman bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (helm-bookmark-man-bookmark-p bookmark) - (helm-bookmark-woman-bookmark-p bookmark))) - -(defun helm-bookmark-info-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is an Info bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (eq (bookmark-get-handler bookmark) 'Info-bookmark-jump)) - -(defun helm-bookmark-image-bookmark-p (bookmark) - "Return non-nil if BOOKMARK bookmarks an image file." - (if (stringp bookmark) - (assoc 'image-type (assoc bookmark bookmark-alist)) - (assoc 'image-type bookmark))) - -(defun helm-bookmark-file-p (bookmark) - "Return non-nil if BOOKMARK bookmarks a file or directory. -BOOKMARK is a bookmark name or a bookmark record. -This excludes bookmarks of a more specific kind (Info, Gnus, and W3m)." - (let* ((filename (bookmark-get-filename bookmark)) - (isnonfile (equal filename helm-bookmark--non-file-filename))) - (and filename (not isnonfile) (not (bookmark-get-handler bookmark))))) - -(defun helm-bookmark-helm-find-files-p (bookmark) - "Return non-nil if BOOKMARK bookmarks a `helm-find-files' session. -BOOKMARK is a bookmark name or a bookmark record." - (eq (bookmark-get-handler bookmark) 'helm-ff-bookmark-jump)) - -(defun helm-bookmark-addressbook-p (bookmark) - "Return non--nil if BOOKMARK is a contact recorded with addressbook-bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (if (listp bookmark) - (string= (assoc-default 'type bookmark) "addressbook") - (string= (assoc-default - 'type (assoc bookmark bookmark-alist)) "addressbook"))) - -(defun helm-bookmark-uncategorized-bookmark-p (bookmark) - "Return non--nil if BOOKMARK match no known category." - (cl-loop for pred in '(helm-bookmark-addressbook-p - helm-bookmark-gnus-bookmark-p - helm-bookmark-w3m-bookmark-p - helm-bookmark-woman-man-bookmark-p - helm-bookmark-info-bookmark-p - helm-bookmark-image-bookmark-p - helm-bookmark-file-p - helm-bookmark-helm-find-files-p - helm-bookmark-addressbook-p) - never (funcall pred bookmark))) - -(defun helm-bookmark-filter-setup-alist (fn) - "Return a filtered `bookmark-alist' sorted alphabetically." - (cl-loop for b in bookmark-alist - for name = (car b) - when (funcall fn b) collect - (propertize name 'location (bookmark-location name)))) - -;;; Bookmark handlers -;; -(defvar w3m-async-exec) -(defun helm-bookmark-jump-w3m (bookmark) - "Jump to W3m bookmark BOOKMARK, setting a new tab. -If `browse-url-browser-function' is set to something else -than `w3m-browse-url' use it." - (require 'helm-net) - (let ((file (or (bookmark-prop-get bookmark 'filename) - (bookmark-prop-get bookmark 'url))) - (buf (generate-new-buffer-name "*w3m*")) - (w3m-async-exec nil) - (really-use-w3m (equal browse-url-browser-function 'w3m-browse-url))) - (helm-browse-url file really-use-w3m) - (when really-use-w3m - (bookmark-default-handler - `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark)))))) - -;; All bookmarks recorded with the handler provided with w3m -;; (`bookmark-w3m-bookmark-jump') will use our handler which open -;; the bookmark in a new tab or in an external browser depending -;; on `browse-url-browser-function'. -(defalias 'bookmark-w3m-bookmark-jump 'helm-bookmark-jump-w3m) - -;; Provide compatibility with old handlers provided in external -;; packages bookmark-extensions.el and bookmark+. -(defalias 'bmkext-jump-woman 'woman-bookmark-jump) -(defalias 'bmkext-jump-man 'Man-bookmark-jump) -(defalias 'bmkext-jump-w3m 'helm-bookmark-jump-w3m) -(defalias 'bmkext-jump-gnus 'gnus-summary-bookmark-jump) -(defalias 'bookmarkp-jump-gnus 'gnus-summary-bookmark-jump) -(defalias 'bookmarkp-jump-w3m 'helm-bookmark-jump-w3m) -(defalias 'bookmarkp-jump-woman 'woman-bookmark-jump) -(defalias 'bookmarkp-jump-man 'Man-bookmark-jump) - - -;;;; Filtered bookmark sources -;; -;; -(defclass helm-source-filtered-bookmarks (helm-source-in-buffer helm-type-bookmark) - ((search :initform #'helm-bookmark-search-fn) - (match-part :initform #'helm-bookmark-match-part-fn) - (filtered-candidate-transformer - :initform '(helm-adaptive-sort - helm-highlight-bookmark)))) - -;;; W3m bookmarks. -;; -(defun helm-bookmark-w3m-setup-alist () - "Specialized filter function for bookmarks w3m." - (helm-bookmark-filter-setup-alist 'helm-bookmark-w3m-bookmark-p)) - -(defvar helm-source-bookmark-w3m - (helm-make-source "Bookmark W3m" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-w3m-setup-alist))))) - -;;; Images -;; -(defun helm-bookmark-images-setup-alist () - "Specialized filter function for images bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-image-bookmark-p)) - -(defvar helm-source-bookmark-images - (helm-make-source "Bookmark Images" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-images-setup-alist))))) - -;;; Woman Man -;; -(defun helm-bookmark-man-setup-alist () - "Specialized filter function for bookmarks w3m." - (helm-bookmark-filter-setup-alist 'helm-bookmark-woman-man-bookmark-p)) - -(defvar helm-source-bookmark-man - (helm-make-source "Bookmark Woman&Man" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-man-setup-alist))))) - -;;; Gnus -;; -(defun helm-bookmark-gnus-setup-alist () - "Specialized filter function for bookmarks gnus." - (helm-bookmark-filter-setup-alist 'helm-bookmark-gnus-bookmark-p)) - -(defvar helm-source-bookmark-gnus - (helm-make-source "Bookmark Gnus" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-gnus-setup-alist))))) - -;;; Info -;; -(defun helm-bookmark-info-setup-alist () - "Specialized filter function for bookmarks info." - (helm-bookmark-filter-setup-alist 'helm-bookmark-info-bookmark-p)) - -(defvar helm-source-bookmark-info - (helm-make-source "Bookmark Info" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-info-setup-alist))))) - -;;; Files and directories -;; -(defun helm-bookmark-local-files-setup-alist () - "Specialized filter function for bookmarks locals files." - (helm-bookmark-filter-setup-alist 'helm-bookmark-file-p)) - -(defvar helm-source-bookmark-files&dirs - (helm-make-source "Bookmark Files&Directories" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-local-files-setup-alist))))) - -;;; Helm find files sessions. -;; -(defun helm-bookmark-helm-find-files-setup-alist () - "Specialized filter function for `helm-find-files' bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-helm-find-files-p)) - -(defvar helm-source-bookmark-helm-find-files - (helm-make-source "Bookmark helm-find-files sessions" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-helm-find-files-setup-alist))) - :persistent-action (lambda (_candidate) (ignore)) - :persistent-help "Do nothing")) - -;;; Uncategorized bookmarks -;; -(defun helm-bookmark-uncategorized-setup-alist () - "Specialized filter function for uncategorized bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-uncategorized-bookmark-p)) - -(defvar helm-source-bookmark-uncategorized - (helm-make-source "Bookmark uncategorized" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-uncategorized-setup-alist))))) - -;;; Addressbook. -;; -;; -(defclass helm-bookmark-addressbook-class (helm-source-in-buffer) - ((init :initform (lambda () - (require 'addressbook-bookmark nil t) - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global - (helm-bookmark-addressbook-setup-alist)))) - (search :initform #'helm-bookmark-search-fn) - (match-part :initform #'helm-bookmark-match-part-fn) - (persistent-action :initform - (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (bookmark--jump-via bmk 'switch-to-buffer)))) - (persistent-help :initform "Show contact - Prefix with C-u to append") - (filtered-candidate-transformer :initform - '(helm-adaptive-sort - helm-highlight-bookmark)) - (action :initform 'helm-bookmark-addressbook-actions))) - -(defun helm-bookmark-addressbook-send-mail-1 (_candidate &optional cc) - (let* ((contacts (helm-marked-candidates)) - (bookmark (helm-bookmark-get-bookmark-from-name - (car contacts))) - (append (message-buffers))) - (addressbook-set-mail-buffer-1 bookmark append) - (helm-aif (cdr contacts) - (progn - (when cc (addressbook-set-mail-buffer-1 (car it) nil cc)) - (cl-loop for bmk in (cdr it) do - (addressbook-set-mail-buffer-1 - (helm-bookmark-get-bookmark-from-name bmk) 'append cc)))))) - -(defun helm-bookmark-addressbook-setup-alist () - "Specialized filter function for addressbook bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-addressbook-p)) - -(defvar helm-source-bookmark-addressbook - (helm-make-source "Bookmark Addressbook" 'helm-bookmark-addressbook-class)) - -;;; Transformer -;; - -(defun helm-highlight-bookmark (bookmarks _source) - "Used as `filtered-candidate-transformer' to colorize bookmarks. -Work both with standard Emacs bookmarks and bookmark-extensions.el." - (let ((non-essential t)) - (cl-loop for i in bookmarks - for isfile = (bookmark-get-filename i) - for hff = (helm-bookmark-helm-find-files-p i) - for handlerp = (and (fboundp 'bookmark-get-handler) - (bookmark-get-handler i)) - for isw3m = (and (fboundp 'helm-bookmark-w3m-bookmark-p) - (helm-bookmark-w3m-bookmark-p i)) - for isgnus = (and (fboundp 'helm-bookmark-gnus-bookmark-p) - (helm-bookmark-gnus-bookmark-p i)) - for isman = (and (fboundp 'helm-bookmark-man-bookmark-p) ; Man - (helm-bookmark-man-bookmark-p i)) - for iswoman = (and (fboundp 'helm-bookmark-woman-bookmark-p) ; Woman - (helm-bookmark-woman-bookmark-p i)) - for isannotation = (bookmark-get-annotation i) - for isabook = (string= (bookmark-prop-get i 'type) - "addressbook") - for isinfo = (eq handlerp 'Info-bookmark-jump) - for loc = (bookmark-location i) - for len = (string-width i) - for trunc = (if (and helm-bookmark-show-location - (> len bookmark-bmenu-file-column)) - (helm-substring - i bookmark-bmenu-file-column) - i) - ;; Add a * if bookmark have annotation - if (and isannotation (not (string-equal isannotation ""))) - do (setq trunc (concat "*" (if helm-bookmark-show-location trunc i))) - for sep = (and helm-bookmark-show-location - (make-string (- (+ bookmark-bmenu-file-column 2) - (string-width trunc)) - ? )) - for bmk = (cond ( ;; info buffers - isinfo - (propertize trunc 'face 'helm-bookmark-info - 'help-echo isfile)) - ( ;; w3m buffers - isw3m - (propertize trunc 'face 'helm-bookmark-w3m - 'help-echo isfile)) - ( ;; gnus buffers - isgnus - (propertize trunc 'face 'helm-bookmark-gnus - 'help-echo isfile)) - ( ;; Man Woman - (or iswoman isman) - (propertize trunc 'face 'helm-bookmark-man - 'help-echo isfile)) - ( ;; Addressbook - isabook - (propertize trunc 'face 'helm-bookmark-addressbook)) - ( ;; directories - (and isfile - (or hff - ;; This is needed because `non-essential' - ;; is not working on Emacs-24.2 and the behavior - ;; of tramp seems to have changed since previous - ;; versions (Need to reenter password even if a - ;; first connection have been established, - ;; probably when host is named differently - ;; i.e machine/localhost) - (and (not (file-remote-p isfile)) - (file-directory-p isfile)))) - (propertize trunc 'face 'helm-bookmark-directory - 'help-echo isfile)) - ( ;; regular files - t - (propertize trunc 'face 'helm-bookmark-file - 'help-echo isfile))) - collect (if helm-bookmark-show-location - (cons (concat bmk sep (if (listp loc) (car loc) loc)) - i) - (cons bmk i))))) - - -;;; Edit/rename/save bookmarks. -;; -;; -(defun helm-bookmark-edit-bookmark (bookmark-name) - "Edit bookmark's name and file name, and maybe save them. -BOOKMARK-NAME is the current (old) name of the bookmark to be renamed." - (let ((bmk (helm-bookmark-get-bookmark-from-name bookmark-name)) - (handler (bookmark-prop-get bookmark-name 'handler))) - (if (eq handler 'addressbook-bookmark-jump) - (addressbook-bookmark-edit - (assoc bmk bookmark-alist)) - (helm-bookmark-edit-bookmark-1 bookmark-name handler)))) - -(defun helm-bookmark-edit-bookmark-1 (bookmark-name handler) - (let* ((helm--reading-passwd-or-string t) - (bookmark-fname (bookmark-get-filename bookmark-name)) - (bookmark-loc (bookmark-prop-get bookmark-name 'location)) - (new-name (read-from-minibuffer "Name: " bookmark-name)) - (new-loc (read-from-minibuffer "FileName or Location: " - (or bookmark-fname - (if (consp bookmark-loc) - (car bookmark-loc) - bookmark-loc)))) - (docid (and (eq handler 'mu4e-bookmark-jump) - (read-number "Docid: " (cdr bookmark-loc))))) - (when docid - (setq new-loc (cons new-loc docid))) - (when (and (not (equal new-name "")) (not (equal new-loc "")) - (y-or-n-p "Save changes? ")) - (if bookmark-fname - (progn - (helm-bookmark-rename bookmark-name new-name 'batch) - (bookmark-set-filename new-name new-loc)) - (bookmark-prop-set - (bookmark-get-bookmark bookmark-name) 'location new-loc) - (helm-bookmark-rename bookmark-name new-name 'batch)) - (helm-bookmark-maybe-save-bookmark) - (list new-name new-loc)))) - -(defun helm-bookmark-maybe-save-bookmark () - "Increment save counter and maybe save `bookmark-alist'." - (setq bookmark-alist-modification-count (1+ bookmark-alist-modification-count)) - (when (bookmark-time-to-save-p) (bookmark-save))) - -(defun helm-bookmark-rename (old &optional new batch) - "Change bookmark's name from OLD to NEW. -Interactively: - If called from the keyboard, then prompt for OLD. - If called from the menubar, select OLD from a menu. -If NEW is nil, then prompt for its string value. - -If BATCH is non-nil, then do not rebuild the menu list. - -While the user enters the new name, repeated `C-w' inserts consecutive -words from the buffer into the new bookmark name." - (interactive (list (bookmark-completing-read "Old bookmark name"))) - (bookmark-maybe-historicize-string old) - (bookmark-maybe-load-default-file) - (save-excursion (skip-chars-forward " ") (setq bookmark-yank-point (point))) - (setq bookmark-current-buffer (current-buffer)) - (let ((newname (or new (read-from-minibuffer - "New name: " nil - (let ((now-map (copy-keymap minibuffer-local-map))) - (define-key now-map "\C-w" 'bookmark-yank-word) - now-map) - nil 'bookmark-history)))) - (bookmark-set-name old newname) - (setq bookmark-current-bookmark newname) - (unless batch (bookmark-bmenu-surreptitiously-rebuild-list)) - (helm-bookmark-maybe-save-bookmark) newname)) - -(defun helm-bookmark-run-edit () - "Run `helm-bookmark-edit-bookmark' from keyboard." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-bookmark-edit-bookmark))) - - -(defun helm-bookmark-run-jump-other-window () - "Jump to bookmark from keyboard." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'bookmark-jump-other-window))) - -(defun helm-bookmark-run-delete () - "Delete bookmark from keyboard." - (interactive) - (with-helm-alive-p - (when (y-or-n-p "Delete bookmark(s)?") - (helm-exit-and-execute-action 'helm-delete-marked-bookmarks)))) - -(defun helm-bookmark-get-bookmark-from-name (bmk) - "Return bookmark name even if it is a bookmark with annotation. -e.g prepended with *." - (let ((bookmark (replace-regexp-in-string "\\`\\*" "" bmk))) - (if (assoc bookmark bookmark-alist) bookmark bmk))) - -(defun helm-delete-marked-bookmarks (_ignore) - "Delete this bookmark or all marked bookmarks." - (cl-dolist (i (helm-marked-candidates)) - (bookmark-delete (helm-bookmark-get-bookmark-from-name i) - 'batch))) - - -;;;###autoload -(defun helm-bookmarks () - "Preconfigured `helm' for bookmarks." - (interactive) - (helm :sources '(helm-source-bookmarks - helm-source-bookmark-set) - :buffer "*helm bookmarks*" - :default (buffer-name helm-current-buffer))) - -;;;###autoload -(defun helm-filtered-bookmarks () - "Preconfigured helm for bookmarks (filtered by category). -Optional source `helm-source-bookmark-addressbook' is loaded -only if external library addressbook-bookmark.el is available." - (interactive) - (helm :sources helm-bookmark-default-filtered-sources - :prompt "Search Bookmark: " - :buffer "*helm filtered bookmarks*" - :default (list (thing-at-point 'symbol) - (buffer-name helm-current-buffer)))) - -(provide 'helm-bookmark) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-bookmark.el ends here diff --git a/elpa/helm-20160105.2046/helm-buffers.el b/elpa/helm-20160105.2046/helm-buffers.el deleted file mode 100644 index f1c1009d..00000000 --- a/elpa/helm-20160105.2046/helm-buffers.el +++ /dev/null @@ -1,876 +0,0 @@ -;;; helm-buffers.el --- helm support for buffers. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-elscreen) -(require 'helm-grep) -(require 'helm-plugin) -(require 'helm-regexp) -(require 'helm-help) - -(declare-function ido-make-buffer-list "ido" (default)) -(declare-function ido-add-virtual-buffers-to-list "ido") -(declare-function helm-comp-read "helm-mode") - - -(defgroup helm-buffers nil - "Buffers related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-boring-buffer-regexp-list - '("\\` " "\\*helm" "\\*helm-mode" "\\*Echo Area" "\\*Minibuf") - "The regexp list that match boring buffers. -Buffer candidates matching these regular expression will be -filtered from the list of candidates if the -`helm-skip-boring-buffers' candidate transformer is used." - :type '(repeat (choice regexp)) - :group 'helm-buffers) - -(defcustom helm-white-buffer-regexp-list nil - "The regexp list of not boring buffers. -These buffers will be displayed even if they match one of -`helm-boring-buffer-regexp-list'." - :type '(repeat (choice regexp)) - :group 'helm-buffers) - -(defcustom helm-buffers-favorite-modes '(lisp-interaction-mode - emacs-lisp-mode - text-mode - org-mode) - "List of preferred mode to open new buffers with." - :type '(repeat (choice function)) - :group 'helm-buffers) - -(defcustom helm-buffer-max-length 20 - "Max length of buffer names before truncate. -When disabled (nil) use the longest buffer-name length found." - :group 'helm-buffers - :type '(choice (const :tag "Disabled" nil) - (integer :tag "Length before truncate"))) - -(defcustom helm-buffer-details-flag t - "Always show details in buffer list when non--nil." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-buffers-fuzzy-matching nil - "Fuzzy matching buffer names when non--nil. -Only buffer names are fuzzy matched when this is enabled, -`major-mode' matching is not affected by this." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-buffer-skip-remote-checking nil - "Ignore checking for `file-exists-p' on remote files." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-buffers-truncate-lines t - "Truncate lines in `helm-buffers-list' when non--nil." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-mini-default-sources '(helm-source-buffers-list - helm-source-recentf - helm-source-buffer-not-found) - "Default sources list used in `helm-mini'." - :group 'helm-buffers - :type '(repeat (choice symbol))) - -(defcustom helm-buffers-end-truncated-string "..." - "The string to display at end of truncated buffer names." - :type 'string - :group 'helm-buffers) - - -;;; Faces -;; -;; -(defgroup helm-buffers-faces nil - "Customize the appearance of helm-buffers." - :prefix "helm-" - :group 'helm-buffers - :group 'helm-faces) - -(defface helm-buffer-saved-out - '((t (:foreground "red" :background "black"))) - "Face used for buffer files modified outside of emacs." - :group 'helm-buffers-faces) - -(defface helm-buffer-not-saved - '((t (:foreground "Indianred2"))) - "Face used for buffer files not already saved on disk." - :group 'helm-buffers-faces) - -(defface helm-buffer-size - '((((background dark)) :foreground "RosyBrown") - (((background light)) :foreground "SlateGray")) - "Face used for buffer size." - :group 'helm-buffers-faces) - -(defface helm-buffer-process - '((t (:foreground "Sienna3"))) - "Face used for process status in buffer." - :group 'helm-buffers-faces) - -(defface helm-buffer-directory - '((t (:foreground "DarkRed" :background "LightGray"))) - "Face used for directories in `helm-buffers-list'." - :group 'helm-buffers-faces) - -(defface helm-buffer-file - '((t :inherit font-lock-builtin-face)) - "Face for buffer file names in `helm-buffers-list'." - :group 'helm-buffers-faces) - - -;;; Buffers keymap -;; -(defvar helm-buffer-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - ;; No need to have separate command for grep and zgrep - ;; as we don't use recursivity for buffers. - ;; So use zgrep for both as it is capable to handle non--compressed files. - (define-key map (kbd "M-g s") 'helm-buffer-run-zgrep) - (define-key map (kbd "C-s") 'helm-buffers-run-multi-occur) - (define-key map (kbd "C-c o") 'helm-buffer-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-buffer-switch-other-frame) - (define-key map (kbd "C-c =") 'helm-buffer-run-ediff) - (define-key map (kbd "M-=") 'helm-buffer-run-ediff-merge) - (define-key map (kbd "C-=") 'helm-buffer-diff-persistent) - (define-key map (kbd "M-U") 'helm-buffer-revert-persistent) - (define-key map (kbd "C-c d") 'helm-buffer-run-kill-persistent) - (define-key map (kbd "M-D") 'helm-buffer-run-kill-buffers) - (define-key map (kbd "C-x C-s") 'helm-buffer-save-persistent) - (define-key map (kbd "C-M-%") 'helm-buffer-run-query-replace-regexp) - (define-key map (kbd "M-%") 'helm-buffer-run-query-replace) - (define-key map (kbd "M-m") 'helm-toggle-all-marks) - (define-key map (kbd "M-a") 'helm-mark-all) - (define-key map (kbd "C-]") 'helm-toggle-buffers-details) - (define-key map (kbd "C-c a") 'helm-buffers-toggle-show-hidden-buffers) - (define-key map (kbd "") 'helm-buffers-mark-similar-buffers) - map) - "Keymap for buffer sources in helm.") - -(defvar helm-buffers-ido-virtual-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-c o") 'helm-ff-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-ff-run-switch-other-frame) - (define-key map (kbd "M-g s") 'helm-ff-run-grep) - (define-key map (kbd "M-g z") 'helm-ff-run-zgrep) - (define-key map (kbd "M-D") 'helm-ff-run-delete-file) - (define-key map (kbd "C-c C-x") 'helm-ff-run-open-file-externally) - map)) - - -(defvar helm-buffers-list-cache nil) -(defvar helm-buffer-max-len-mode nil) - -(defun helm-buffers-list--init () - ;; Issue #51 Create the list before `helm-buffer' creation. - (setq helm-buffers-list-cache (funcall (helm-attr 'buffer-list))) - (let ((result (cl-loop for b in helm-buffers-list-cache - maximize (length b) into len-buf - maximize (length (with-current-buffer b - (format-mode-line mode-name))) - into len-mode - finally return (cons len-buf len-mode)))) - (unless (default-value 'helm-buffer-max-length) - (helm-set-local-variable 'helm-buffer-max-length (car result))) - (unless (default-value 'helm-buffer-max-len-mode) - (helm-set-local-variable 'helm-buffer-max-len-mode (cdr result))))) - -(defclass helm-source-buffers (helm-source-sync helm-type-buffer) - ((buffer-list - :initarg :buffer-list - :initform #'helm-buffer-list - :custom function - :documentation - " A function with no arguments to create buffer list.") - (init :initform 'helm-buffers-list--init) - (candidates :initform helm-buffers-list-cache) - (matchplugin :initform nil) - (match :initform 'helm-buffers-match-function) - (persistent-action :initform 'helm-buffers-list-persistent-action) - (resume :initform (lambda () - (run-with-idle-timer - 0.1 nil (lambda () - (with-helm-buffer - (helm-force-update)))))) - (keymap :initform helm-buffer-map) - (migemo :initform 'nomultimatch) - (volatile :initform t) - (help-message :initform 'helm-buffer-help-message) - (persistent-help - :initform - "Show this buffer / C-u \\[helm-execute-persistent-action]: Kill this buffer"))) - -(defvar helm-source-buffers-list nil) - -(defvar helm-source-buffer-not-found - (helm-build-dummy-source - "Create buffer" - :action (helm-make-actions - "Create buffer (C-u choose mode)" - (lambda (candidate) - (let ((mjm (or (and helm-current-prefix-arg - (intern-soft (helm-comp-read - "Major-mode: " - helm-buffers-favorite-modes))) - (cl-loop for (r . m) in auto-mode-alist - when (string-match r candidate) - return m))) - (buffer (get-buffer-create candidate))) - (if mjm - (with-current-buffer buffer (funcall mjm)) - (set-buffer-major-mode buffer)) - (switch-to-buffer buffer)))))) - -(defvar ido-temp-list) -(defvar ido-ignored-list) -(defvar ido-process-ignore-lists) -(defvar ido-use-virtual-buffers) -(defvar ido-virtual-buffers) - -(defvar helm-source-ido-virtual-buffers - (helm-build-sync-source "Ido virtual buffers" - :candidates (lambda () - (let (ido-temp-list - ido-ignored-list - (ido-process-ignore-lists t)) - (when ido-use-virtual-buffers - (ido-add-virtual-buffers-to-list) - ido-virtual-buffers))) - :fuzzy-match helm-buffers-fuzzy-matching - :keymap helm-buffers-ido-virtual-map - :help-message 'helm-buffers-ido-virtual-help-message - :action '(("Find file" . helm-find-many-files) - ("Find file other window" . find-file-other-window) - ("Find file other frame" . find-file-other-frame) - ("Find file as root" . helm-find-file-as-root) - ("Grep File(s) `C-u recurse'" . helm-find-files-grep) - ("Zgrep File(s) `C-u Recurse'" . helm-ff-zgrep) - ("View file" . view-file) - ("Delete file(s)" . helm-delete-marked-files) - ("Open file externally (C-u to choose)" - . helm-open-file-externally)))) - - -(defvar ido-use-virtual-buffers) -(defvar ido-ignore-buffers) -(defun helm-buffer-list () - "Return the current list of buffers. -Currently visible buffers are put at the end of the list. -See `ido-make-buffer-list' for more infos." - (require 'ido) - (let ((ido-process-ignore-lists t) - ido-ignored-list - ido-ignore-buffers - ido-use-virtual-buffers) - (ido-make-buffer-list nil))) - -(defun helm-buffer-size (buffer) - "Return size of BUFFER." - (with-current-buffer buffer - (save-restriction - (widen) - (helm-file-human-size - (- (position-bytes (point-max)) - (position-bytes (point-min))))))) - -(defun helm-buffer--show-details (buf-name prefix help-echo - size mode dir face1 face2 - proc details type) - (append - (list - (concat prefix - (propertize buf-name 'face face1 - 'help-echo help-echo - 'type type))) - (and details - (list size mode - (propertize - (if proc - (format "(%s %s in `%s')" - (process-name proc) - (process-status proc) dir) - (format "(in `%s')" dir)) - 'face face2))))) - -(defun helm-buffer--details (buffer &optional details) - (let* ((mode (with-current-buffer buffer (format-mode-line mode-name))) - (buf (get-buffer buffer)) - (size (propertize (helm-buffer-size buf) - 'face 'helm-buffer-size)) - (proc (get-buffer-process buf)) - (dir (with-current-buffer buffer (abbreviate-file-name default-directory))) - (file-name (helm-aif (buffer-file-name buf) (abbreviate-file-name it))) - (name (buffer-name buf)) - (name-prefix (when (file-remote-p dir) - (propertize "@ " 'face 'helm-ff-prefix)))) - ;; No fancy things on remote buffers. - (if (and name-prefix helm-buffer-skip-remote-checking) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-file 'helm-buffer-process nil details 'filebuf) - (cond - ( ;; A dired buffer. - (rassoc buf dired-buffers) - (helm-buffer--show-details - name name-prefix dir size mode dir - 'helm-buffer-directory 'helm-buffer-process nil details 'dired)) - ;; A buffer file modified somewhere outside of emacs.=>red - ((and file-name - (file-exists-p file-name) - (not (verify-visited-file-modtime buf))) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-saved-out 'helm-buffer-process nil details 'modout)) - ;; A new buffer file not already saved on disk (or a deleted file) .=>indianred2 - ((and file-name (not (file-exists-p file-name))) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-not-saved 'helm-buffer-process nil details 'notsaved)) - ;; A buffer file modified and not saved on disk.=>orange - ((and file-name (buffer-modified-p buf)) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-ff-symlink 'helm-buffer-process nil details 'mod)) - ;; A buffer file not modified and saved on disk.=>green - (file-name - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-file 'helm-buffer-process nil details 'filebuf)) - ;; Any non--file buffer.=>grey italic - (t - (helm-buffer--show-details - name (and proc name-prefix) dir size mode dir - 'italic 'helm-buffer-process proc details 'nofile)))))) - -(defun helm-highlight-buffers (buffers _source) - "Transformer function to highlight BUFFERS list. -Should be called after others transformers i.e (boring buffers)." - (cl-loop for i in buffers - for (name size mode meta) = (if helm-buffer-details-flag - (helm-buffer--details i 'details) - (helm-buffer--details i)) - for truncbuf = (if (> (string-width name) helm-buffer-max-length) - (helm-substring-by-width - name helm-buffer-max-length - helm-buffers-end-truncated-string) - (concat name - (make-string - (- (+ helm-buffer-max-length - (length helm-buffers-end-truncated-string)) - (string-width name)) ? ))) - for len = (length mode) - when (> len helm-buffer-max-len-mode) - do (setq helm-buffer-max-len-mode len) - for fmode = (concat (make-string - (- (max helm-buffer-max-len-mode len) len) ? ) - mode) - ;; The max length of a number should be 1023.9X where X is the - ;; units, this is 7 characters. - for formatted-size = (and size (format "%7s" size)) - collect (cons (if helm-buffer-details-flag - (concat truncbuf "\t" formatted-size - " " fmode " " meta) - name) - (get-buffer i)))) - -(defun helm-buffer--get-preselection (buffer) - (let ((bufname (buffer-name buffer))) - (concat "^" - (if (and (null helm-buffer-details-flag) - (numberp helm-buffer-max-length) - (> (string-width bufname) - helm-buffer-max-length)) - (regexp-quote - (helm-substring-by-width - bufname helm-buffer-max-length - helm-buffers-end-truncated-string)) - (concat (regexp-quote bufname) - (if helm-buffer-details-flag - "$" "[[:blank:]]+")))))) - -(defun helm-toggle-buffers-details () - (interactive) - (let ((preselect (helm-buffer--get-preselection - (helm-get-selection)))) - (when helm-alive-p - (setq helm-buffer-details-flag (not helm-buffer-details-flag)) - (helm-force-update preselect)))) - -(defun helm-buffers-sort-transformer (candidates _source) - (if (string= helm-pattern "") - candidates - (sort candidates - (lambda (s1 s2) - (< (string-width s1) (string-width s2)))))) - -(defun helm-buffers-mark-similar-buffers-1 () - (with-helm-window - (let ((type (get-text-property - 0 'type (helm-get-selection nil 'withprop)))) - (save-excursion - (goto-char (helm-get-previous-header-pos)) - (helm-next-line) - (let* ((next-head (helm-get-next-header-pos)) - (end (and next-head - (save-excursion - (goto-char next-head) - (forward-line -1) - (point)))) - (maxpoint (or end (point-max)))) - (while (< (point) maxpoint) - (helm-mark-current-line) - (let ((cand (helm-get-selection nil 'withprop))) - (when (and (not (helm-this-visible-mark)) - (eq (get-text-property 0 'type cand) type)) - (helm-make-visible-mark))) - (forward-line 1) (end-of-line)))) - (helm-mark-current-line) - (helm-display-mode-line (helm-get-current-source) t) - (message "%s candidates marked" (length helm-marked-candidates))))) - -(defun helm-buffers-mark-similar-buffers () - "Mark All buffers that have same property `type' than current. -i.e same color." - (interactive) - (let ((marked (helm-marked-candidates))) - (if (and (>= (length marked) 1) - (with-helm-window helm-visible-mark-overlays)) - (helm-unmark-all) - (helm-buffers-mark-similar-buffers-1)))) - - -;;; match functions -;; -(defun helm-buffer--match-mjm (pattern mjm) - (when (string-match "\\`\\*" pattern) - (cl-loop with patterns = (split-string (substring pattern 1) ",") - for pat in patterns - if (string-match "\\`!" pat) - collect (string-match (substring pat 1) mjm) into neg - else collect (string-match pat mjm) into pos - finally return - (let ((neg-test (cl-loop for i in neg thereis (numberp i))) - (pos-test (cl-loop for i in pos thereis (numberp i)))) - (or - (and neg (not pos) (not neg-test)) - (and pos pos-test) - (and neg neg-test (not neg-test))))))) - -(defun helm-buffer--match-pattern (pattern candidate) - (let ((bfn (if (and helm-buffers-fuzzy-matching - (not helm-migemo-mode) - (not (string-match "\\`\\^" pattern))) - #'helm--mapconcat-pattern - #'identity)) - (mfn (if helm-migemo-mode - #'helm-mm-migemo-string-match #'string-match))) - (if (string-match "\\`!" pattern) - (not (funcall mfn (funcall bfn (substring pattern 1)) - candidate)) - (funcall mfn (funcall bfn pattern) candidate)))) - -(defun helm-buffers--match-from-mjm (candidate) - (let* ((cand (replace-regexp-in-string "^\\s-\\{1\\}" "" candidate)) - (buf (get-buffer cand)) - (regexp (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - when (string-match "\\`\\*" p) - return p))) - (if regexp - (when buf - (with-current-buffer buf - (let ((mjm (format-mode-line mode-name))) - (helm-buffer--match-mjm regexp mjm)))) - t))) - -(defun helm-buffers--match-from-pat (candidate) - (let ((regexp-list (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - unless (string-match - "\\`\\(\\*\\)\\|\\(/\\)\\|\\(@\\)" p) - collect p))) - (if regexp-list - (cl-loop for re in regexp-list - always (helm-buffer--match-pattern re candidate)) - t))) - -(defun helm-buffers--match-from-inside (candidate) - (let* ((cand (replace-regexp-in-string "^\\s-\\{1\\}" "" candidate)) - (buf (get-buffer cand)) - (regexp (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - when (string-match "\\`@\\(.*\\)" p) - return (match-string 1 p)))) - (if (and buf regexp) - (with-current-buffer buf - (save-excursion - (goto-char (point-min)) - (if helm-migemo-mode - (helm-mm-migemo-forward regexp nil t) - (re-search-forward regexp nil t)))) - t))) - -(defun helm-buffers--match-from-directory (candidate) - (let* ((cand (replace-regexp-in-string "^\\s-\\{1\\}" "" candidate)) - (buf (get-buffer cand)) - (buf-fname (buffer-file-name buf)) - (regexps (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - when (string-match "\\`/" p) - collect p))) - (if regexps - (cl-loop for re in regexps - thereis - (and buf-fname - (string-match - (substring re 1) (helm-basedir buf-fname)))) - t))) - -(defun helm-buffers-match-function (candidate) - "Default function to match buffers." - (and (helm-buffers--match-from-pat candidate) - (helm-buffers--match-from-mjm candidate) - (helm-buffers--match-from-inside candidate) - (helm-buffers--match-from-directory candidate))) - - -(defun helm-buffer-query-replace-1 (&optional regexp-flag buffers) - "Query replace in marked buffers. -If REGEXP-FLAG is given use `query-replace-regexp'." - (let ((prompt (if regexp-flag "Query replace regexp" "Query replace")) - (bufs (or buffers (helm-marked-candidates))) - (helm--reading-passwd-or-string t)) - (cl-loop with args = (query-replace-read-args prompt regexp-flag t) - for buf in bufs - do - (save-window-excursion - (switch-to-buffer buf) - (save-excursion - (let ((case-fold-search t)) - (goto-char (point-min)) - (apply #'perform-replace - (list (nth 0 args) (nth 1 args) - t regexp-flag (nth 2 args) nil - multi-query-replace-map)))))))) - -(defun helm-buffer-query-replace-regexp (_candidate) - (helm-buffer-query-replace-1 'regexp)) - -(defun helm-buffer-query-replace (_candidate) - (helm-buffer-query-replace-1)) - -(defun helm-buffer-toggle-diff (candidate) - "Toggle diff buffer CANDIDATE with it's file." - (let (helm-persistent-action-use-special-display) - (helm-aif (get-buffer-window "*Diff*") - (progn (kill-buffer "*Diff*") - (set-window-buffer it helm-current-buffer)) - (diff-buffer-with-file (get-buffer candidate))))) - -(defun helm-buffer-diff-persistent () - "Toggle diff buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'diff-action 'helm-buffer-toggle-diff) - (helm-execute-persistent-action 'diff-action))) - -(defun helm-revert-buffer (candidate) - (with-current-buffer candidate - (helm-aif (buffer-file-name) - (and (file-exists-p it) (revert-buffer t t))))) - -(defun helm-revert-marked-buffers (_ignore) - (mapc 'helm-revert-buffer (helm-marked-candidates))) - -(defun helm-buffer-revert-and-update (_candidate) - (let ((marked (helm-marked-candidates)) - (preselect (helm-buffers--quote-truncated-buffer - (helm-get-selection)))) - (cl-loop for buf in marked do (helm-revert-buffer buf)) - (when (> (length marked) 1) (helm-unmark-all)) - (helm-force-update preselect))) - -(defun helm-buffer-revert-persistent () - "Revert buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'revert-action '(helm-buffer-revert-and-update . never-split)) - (helm-execute-persistent-action 'revert-action))) - -(defun helm-buffer-save-and-update (_candidate) - (let ((marked (helm-marked-candidates)) - (preselect (helm-get-selection nil t)) - (enable-recursive-minibuffers t)) - (cl-loop for buf in marked do - (with-current-buffer (get-buffer buf) - (when (buffer-file-name) (save-buffer)))) - (when (> (length marked) 1) (helm-unmark-all)) - (helm-force-update (regexp-quote preselect)))) - -(defun helm-buffer-save-persistent () - "Save buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'save-action '(helm-buffer-save-and-update . never-split)) - (helm-execute-persistent-action 'save-action))) - -(defun helm-buffer-run-kill-persistent () - "Kill buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'kill-action '(helm-buffers-persistent-kill . never-split)) - (helm-execute-persistent-action 'kill-action))) - -(defun helm-kill-marked-buffers (_ignore) - (let* ((bufs (helm-marked-candidates)) - (killed-bufs (cl-count-if 'kill-buffer bufs))) - (with-helm-buffer - (setq helm-marked-candidates nil - helm-visible-mark-overlays nil)) - (message "Killed %s buffer(s)" killed-bufs))) - -(defun helm-buffer-run-kill-buffers () - "Run kill buffer action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-kill-marked-buffers))) - -(defun helm-buffer-run-grep () - "Run Grep action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-buffers))) - -(defun helm-buffer-run-zgrep () - "Run Grep action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-zgrep-buffers))) - -(defun helm-buffer-run-query-replace-regexp () - "Run Query replace regexp action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-buffer-query-replace-regexp))) - -(defun helm-buffer-run-query-replace () - "Run Query replace action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-buffer-query-replace))) - -(defun helm-buffer-switch-other-window () - "Run switch to other window action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-switch-to-buffers-other-window))) - -(defun helm-buffer-switch-other-frame () - "Run switch to other frame action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'switch-to-buffer-other-frame))) - -(defun helm-buffer-switch-to-elscreen () - "Run switch to elscreen action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-buffer-on-elscreen))) - -(defun helm-buffer-run-ediff () - "Run ediff action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ediff-marked-buffers))) - -(defun helm-buffer-run-ediff-merge () - "Run ediff action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ediff-marked-buffers-merge))) - -(defun helm-buffers-persistent-kill-1 (buffer) - "Persistent action to kill buffer." - (if (eql (get-buffer buffer) (get-buffer helm-current-buffer)) - (progn - (message "Can't kill `helm-current-buffer' without quitting session") - (sit-for 1)) - (with-current-buffer (get-buffer buffer) - (kill-buffer buffer)) - (helm-delete-current-selection) - (with-helm-temp-hook 'helm-after-persistent-action-hook - (helm-force-update (regexp-quote (helm-get-selection nil t)))))) - -(defun helm-buffers--quote-truncated-buffer (buffer) - (let ((bufname (and (bufferp buffer) - (buffer-name buffer)))) - (when bufname - (regexp-quote - (if helm-buffer-max-length - (helm-substring-by-width - bufname helm-buffer-max-length - "") - bufname))))) - -(defun helm-buffers-persistent-kill (_buffer) - (let ((marked (helm-marked-candidates))) - (unwind-protect - (cl-loop for b in marked - do (progn (helm-preselect - (format "^%s" - (helm-buffers--quote-truncated-buffer b))) - (when (y-or-n-p (format "kill buffer (%s)? " b)) - (helm-buffers-persistent-kill-1 b)) - (message nil))) - (with-helm-buffer - (setq helm-marked-candidates nil - helm-visible-mark-overlays nil)) - (helm-force-update (helm-buffers--quote-truncated-buffer - (helm-get-selection)))))) - -(defun helm-buffers-list-persistent-action (candidate) - (let ((current (window-buffer helm-persistent-action-display-window))) - (if (or (eql current (get-buffer helm-current-buffer)) - (not (eql current (get-buffer candidate)))) - (switch-to-buffer candidate) - (switch-to-buffer helm-current-buffer)))) - -(defun helm-ediff-marked-buffers (_candidate &optional merge) - "Ediff 2 marked buffers or CANDIDATE and `helm-current-buffer'. -With optional arg MERGE call `ediff-merge-buffers'." - (let ((lg-lst (length (helm-marked-candidates))) - buf1 buf2) - (cl-case lg-lst - (0 - (error "Error:You have to mark at least 1 buffer")) - (1 - (setq buf1 helm-current-buffer - buf2 (cl-first (helm-marked-candidates)))) - (2 - (setq buf1 (cl-first (helm-marked-candidates)) - buf2 (cl-second (helm-marked-candidates)))) - (t - (error "Error:To much buffers marked!"))) - (if merge - (ediff-merge-buffers buf1 buf2) - (ediff-buffers buf1 buf2)))) - -(defun helm-ediff-marked-buffers-merge (candidate) - "Ediff merge `helm-current-buffer' with CANDIDATE. -See `helm-ediff-marked-buffers'." - (helm-ediff-marked-buffers candidate t)) - -(defun helm-multi-occur-as-action (_candidate) - "Multi occur action for `helm-source-buffers-list'. -Can be used by any source that list buffers." - (let ((helm-moccur-always-search-in-current - (if helm-current-prefix-arg - (not helm-moccur-always-search-in-current) - helm-moccur-always-search-in-current)) - (buffers (helm-marked-candidates)) - (input (cl-loop for i in (split-string helm-pattern " " t) - thereis (and (string-match "\\`@\\(.*\\)" i) - (match-string 1 i))))) - (helm-multi-occur-1 buffers input))) - -(defun helm-buffers-run-multi-occur () - "Run `helm-multi-occur-as-action' by key." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-multi-occur-as-action))) - -(defun helm-buffers-toggle-show-hidden-buffers () - (interactive) - (with-helm-alive-p - (let ((filter-attrs (helm-attr 'filtered-candidate-transformer - helm-source-buffers-list))) - (if (memq 'helm-shadow-boring-buffers filter-attrs) - (helm-attrset 'filtered-candidate-transformer - (cons 'helm-skip-boring-buffers - (remove 'helm-shadow-boring-buffers - filter-attrs)) - helm-source-buffers-list t) - (helm-attrset 'filtered-candidate-transformer - (cons 'helm-shadow-boring-buffers - (remove 'helm-skip-boring-buffers - filter-attrs)) - helm-source-buffers-list t)) - (helm-force-update)))) - - -;;; Candidate Transformers -;; -;; -(defun helm-skip-boring-buffers (buffers _source) - (helm-skip-entries buffers - helm-boring-buffer-regexp-list - helm-white-buffer-regexp-list)) - -(defun helm-shadow-boring-buffers (buffers _source) - "Buffers matching `helm-boring-buffer-regexp' will be -displayed with the `file-name-shadow' face if available." - (helm-shadow-entries buffers helm-boring-buffer-regexp-list)) - - -;;;###autoload -(defun helm-buffers-list () - "Preconfigured `helm' to list buffers." - (interactive) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (helm :sources '(helm-source-buffers-list - helm-source-ido-virtual-buffers - helm-source-buffer-not-found) - :buffer "*helm buffers*" - :keymap helm-buffer-map - :truncate-lines helm-buffers-truncate-lines)) - -;;;###autoload -(defun helm-mini () - "Preconfigured `helm' lightweight version \(buffer -> recentf\)." - (interactive) - (require 'helm-files) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (helm :sources helm-mini-default-sources - :buffer "*helm mini*" - :ff-transformer-show-only-basename nil - :truncate-lines helm-buffers-truncate-lines)) - -(provide 'helm-buffers) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-buffers.el ends here diff --git a/elpa/helm-20160105.2046/helm-color.el b/elpa/helm-20160105.2046/helm-color.el deleted file mode 100644 index d87a55ce..00000000 --- a/elpa/helm-20160105.2046/helm-color.el +++ /dev/null @@ -1,160 +0,0 @@ -;;; helm-color.el --- colors and faces -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) - -;;; Customize Face -;; -;; -(defun helm-custom-faces-init () - "Initialize buffer for `helm-source-customize-face'." - (unless (helm-candidate-buffer) - (save-selected-window - (list-faces-display) - (message nil)) - (helm-init-candidates-in-buffer - 'global - (with-current-buffer (get-buffer "*Faces*") - (buffer-substring - (next-single-char-property-change (point-min) 'face) - (point-max)))) - (kill-buffer "*Faces*"))) - -(defvar helm-source-customize-face - (helm-build-in-buffer-source "Customize Face" - :init 'helm-custom-faces-init - :get-line 'buffer-substring - :action '(("Customize" - . (lambda (line) - (customize-face (intern (car (split-string line)))))) - ("Copy name" - . (lambda (line) - (kill-new (car (split-string line " " t))))))) - "See (info \"(emacs)Faces\")") - -;;; Colors browser -;; -;; -(defun helm-colors-init () - (unless (helm-candidate-buffer) - (save-selected-window - (list-colors-display) - (message nil)) - (helm-init-candidates-in-buffer - 'global - (with-current-buffer (get-buffer "*Colors*") - (buffer-string))) - (kill-buffer "*Colors*"))) - -(defun helm-color-insert-name (candidate) - (with-helm-current-buffer - (insert (helm-colors-get-name candidate)))) - -(defun helm-color-kill-name (candidate) - (kill-new (helm-colors-get-name candidate))) - -(defun helm-color-insert-rgb (candidate) - (with-helm-current-buffer - (insert (helm-colors-get-rgb candidate)))) - -(defun helm-color-kill-rgb (candidate) - (kill-new (helm-colors-get-rgb candidate))) - -(defun helm-color-run-insert-name () - "Insert name of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-insert-name))) - -(defun helm-color-run-kill-name () - "Kill name of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-kill-name))) - -(defun helm-color-run-insert-rgb () - "Insert RGB of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-insert-rgb))) - -(defun helm-color-run-kill-rgb () - "Kill RGB of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-kill-rgb))) - -(defvar helm-color-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-c n") 'helm-color-run-insert-name) - (define-key map (kbd "C-c N") 'helm-color-run-kill-name) - (define-key map (kbd "C-c r") 'helm-color-run-insert-rgb) - (define-key map (kbd "C-c R") 'helm-color-run-kill-rgb) - map)) - -(defvar helm-source-colors - (helm-build-in-buffer-source "Colors" - :init 'helm-colors-init - :get-line 'buffer-substring - :keymap helm-color-map - :persistent-help "Kill entry in RGB format." - :persistent-action 'helm-color-kill-rgb - :help-message 'helm-colors-help-message - :action - '(("Copy Name (C-c N)" . helm-color-kill-name) - ("Copy RGB (C-c R)" . helm-color-kill-rgb) - ("Insert Name (C-c n)" . helm-color-insert-name) - ("Insert RGB (C-c r)" . helm-color-insert-rgb)))) - -(defun helm-colors-get-name (candidate) - "Get color name." - (replace-regexp-in-string - " " "" - (with-temp-buffer - (insert (capitalize candidate)) - (goto-char (point-min)) - (search-forward-regexp "\\s-\\{2,\\}") - (delete-region (point) (point-max)) - (buffer-string)))) - -(defun helm-colors-get-rgb (candidate) - "Get color RGB." - (replace-regexp-in-string - " " "" - (with-temp-buffer - (insert (capitalize candidate)) - (goto-char (point-max)) - (search-backward-regexp "\\s-\\{2,\\}") - (delete-region (point) (point-min)) - (buffer-string)))) - -;;;###autoload -(defun helm-colors () - "Preconfigured `helm' for color." - (interactive) - (helm :sources '(helm-source-colors helm-source-customize-face) - :buffer "*helm colors*")) - -(provide 'helm-color) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-color.el ends here diff --git a/elpa/helm-20160105.2046/helm-command.el b/elpa/helm-20160105.2046/helm-command.el deleted file mode 100644 index 8dacc4ae..00000000 --- a/elpa/helm-20160105.2046/helm-command.el +++ /dev/null @@ -1,255 +0,0 @@ -;;; helm-command.el --- Helm execute-exended-command. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-mode) -(require 'helm-elisp) - - -(defgroup helm-command nil - "Emacs command related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-M-x-requires-pattern 0 - "Value of requires-pattern for `helm-M-x'. -Show all candidates on startup when 0 (default)." - :group 'helm-command - :type 'boolean) - -(defcustom helm-M-x-always-save-history nil - "`helm-M-x' Save command in `extended-command-history' even when it fail." - :group 'helm-command - :type 'boolean) - -(defcustom helm-M-x-reverse-history nil - "The history source of `helm-M-x' appear in second position when non--nil." - :group 'helm-command - :type 'boolean) - -(defcustom helm-M-x-fuzzy-match nil - "Enable fuzzy matching in `helm-M-x' when non--nil.") - - -;;; Faces -;; -;; -(defgroup helm-command-faces nil - "Customize the appearance of helm-command." - :prefix "helm-" - :group 'helm-command - :group 'helm-faces) - -(defface helm-M-x-key '((t (:foreground "orange" :underline t))) - "Face used in helm-M-x to show keybinding." - :group 'helm-command-faces) - - -(defvar helm-M-x-input-history nil) - - -(cl-defun helm-M-x-get-major-mode-command-alist (mode-map) - "Return alist of MODE-MAP." - (when mode-map - (cl-loop for key being the key-seqs of mode-map using (key-bindings com) - for str-key = (key-description key) - for ismenu = (string-match "" str-key) - unless ismenu collect (cons str-key com)))) - -(defun helm-get-mode-map-from-mode (mode) - "Guess the mode-map name according to MODE. -Some modes don't use conventional mode-map name -so we need to guess mode-map name. e.g python-mode ==> py-mode-map. -Return nil if no mode-map found." - (cl-loop ;; Start with a conventional mode-map name. - with mode-map = (intern-soft (format "%s-map" mode)) - with mode-string = (symbol-name mode) - with mode-name = (replace-regexp-in-string "-mode" "" mode-string) - while (not mode-map) - for count downfrom (length mode-name) - ;; Return when no result after parsing entire string. - when (eq count 0) return nil - for sub-name = (substring mode-name 0 count) - do (setq mode-map (intern-soft (format "%s-map" (concat sub-name "-mode")))) - finally return mode-map)) - -(defun helm-M-x-current-mode-map-alist () - "Return mode-map alist of current `major-mode'." - (let ((map-sym (helm-get-mode-map-from-mode major-mode))) - (when (and map-sym (boundp map-sym)) - (helm-M-x-get-major-mode-command-alist (symbol-value map-sym))))) - - -(defun helm-M-x-transformer-1 (candidates &optional sort) - "Transformer function to show bindings in emacs commands. -Show global bindings and local bindings according to current `major-mode'. -If SORT is non nil sort list with `helm-generic-sort-fn'. -Note that SORT should not be used when fuzzy matching because -fuzzy matching is running its own sort function with a different algorithm." - (with-helm-current-buffer - (cl-loop with local-map = (helm-M-x-current-mode-map-alist) - for cand in candidates - for local-key = (car (rassq cand local-map)) - for key = (substitute-command-keys (format "\\[%s]" cand)) - collect - (cons (cond ((and (string-match "^M-x" key) local-key) - (format "%s (%s)" - cand (propertize - local-key - 'face 'helm-M-x-key))) - ((string-match "^M-x" key) cand) - (t (format "%s (%s)" - cand (propertize - key - 'face 'helm-M-x-key)))) - cand) - into ls - finally return - (if sort (sort ls #'helm-generic-sort-fn) ls)))) - -(defun helm-M-x-transformer (candidates _source) - "Transformer function for `helm-M-x' candidates." - (helm-M-x-transformer-1 candidates (null helm--in-fuzzy))) - -(defun helm-M-x-transformer-hist (candidates _source) - "Transformer function for `helm-M-x' candidates." - (helm-M-x-transformer-1 candidates)) - -(defun helm-M-x--notify-prefix-arg () - ;; Notify a prefix-arg set AFTER calling M-x. - (when prefix-arg - (with-helm-window - (helm-display-mode-line (helm-get-current-source) 'force)))) - -(defun helm-cmd--get-current-function-name () - (save-excursion - (beginning-of-defun) - (cadr (split-string (buffer-substring-no-properties - (point-at-bol) (point-at-eol)))))) - -(defun helm-cmd--get-preconfigured-commands (&optional dir) - (let* ((helm-dir (or dir (helm-basedir (locate-library "helm")))) - (helm-autoload-file (expand-file-name "helm-autoloads.el" helm-dir)) - results) - (when (file-exists-p helm-autoload-file) - (with-temp-buffer - (insert-file-contents helm-autoload-file) - (while (re-search-forward "Preconfigured" nil t) - (push (substring (helm-cmd--get-current-function-name) 1) results)))) - results)) - -(defun helm-M-x-read-extended-command (&optional collection history) - "Read command name to invoke in `helm-M-x'. -Helm completion is not provided when executing or defining -kbd macros. -Optional arg COLLECTION is to allow using another COLLECTION -than the default which is OBARRAY." - (if (or defining-kbd-macro executing-kbd-macro) - (if helm-mode - (unwind-protect - (progn - (helm-mode -1) - (read-extended-command)) - (helm-mode 1)) - (read-extended-command)) - (let* ((orig-fuzzy-sort-fn helm-fuzzy-sort-fn) - (helm-fuzzy-sort-fn (lambda (candidates source) - (funcall orig-fuzzy-sort-fn - candidates source 'real))) - (helm--mode-line-display-prefarg t) - (tm (run-at-time 1 0.1 'helm-M-x--notify-prefix-arg)) - (helm-move-selection-after-hook - (cons (lambda () (setq current-prefix-arg nil)) - helm-move-selection-after-hook))) - (setq extended-command-history - (cl-loop for c in extended-command-history - when (and c (commandp (intern c))) - do (set-text-properties 0 (length c) nil c) - and collect c)) - (unwind-protect - (let ((msg "Error: Specifying a prefix arg before calling `helm-M-x'")) - (when current-prefix-arg - (ding) - (message "%s" msg) - (while (not (sit-for 1)) - (discard-input)) - (user-error msg)) - (setq current-prefix-arg nil) - (helm-comp-read - "M-x " (or collection obarray) - :test 'commandp - :requires-pattern helm-M-x-requires-pattern - :name "Emacs Commands" - :buffer "*helm M-x*" - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe this command" - :history (or history extended-command-history) - :reverse-history helm-M-x-reverse-history - :input-history 'helm-M-x-input-history - :del-input nil - :help-message 'helm-M-x-help-message - :must-match t - :fuzzy helm-M-x-fuzzy-match - :nomark t - :candidates-in-buffer t - :fc-transformer 'helm-M-x-transformer - :hist-fc-transformer 'helm-M-x-transformer-hist)) - (cancel-timer tm) - (setq helm--mode-line-display-prefarg nil))))) - -;;;###autoload -(defun helm-M-x (arg &optional command-name) - "Preconfigured `helm' for Emacs commands. -It is `helm' replacement of regular `M-x' `execute-extended-command'. - -Unlike regular `M-x' emacs vanilla `execute-extended-command' command, -the prefix args if needed, are passed AFTER starting `helm-M-x'. - -You can get help on each command by persistent action." - (interactive (list current-prefix-arg (helm-M-x-read-extended-command))) - (let ((sym-com (and (stringp command-name) (intern-soft command-name)))) - ;; Avoid having `this-command' set to *exit-minibuffer. - (setq this-command sym-com - ;; Handle C-x z (repeat) Issue #322 - real-this-command sym-com) - ;; If helm-M-x is called with regular emacs completion (kmacro) - ;; use the value of arg otherwise use helm-current-prefix-arg. - (let ((prefix-arg (or helm-current-prefix-arg arg))) - ;; This ugly construct is to save history even on error. - (unless helm-M-x-always-save-history - (command-execute sym-com 'record)) - (setq extended-command-history - (cons command-name - (delete command-name extended-command-history))) - (when helm-M-x-always-save-history - (command-execute sym-com 'record))))) - - -(provide 'helm-command) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-command.el ends here diff --git a/elpa/helm-20160105.2046/helm-config.el b/elpa/helm-20160105.2046/helm-config.el deleted file mode 100644 index c1b978ff..00000000 --- a/elpa/helm-20160105.2046/helm-config.el +++ /dev/null @@ -1,170 +0,0 @@ -;;; helm-config.el --- Applications library for `helm.el' -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - - -;;; Require -;; -;; -(declare-function async-bytecomp-package-mode "ext:async-bytecomp.el") -(when (require 'async-bytecomp nil t) - (and (fboundp 'async-bytecomp-package-mode) - (async-bytecomp-package-mode 1))) - - -(defgroup helm-config nil - "Various configurations for Helm." - :group 'helm) - -(defcustom helm-command-prefix-key "C-x c" - "The key `helm-command-prefix' is bound to in the global map." - :type '(choice (string :tag "Key") (const :tag "no binding")) - :group 'helm-config - :set - (lambda (var key) - (when (and (boundp var) (symbol-value var)) - (define-key (current-global-map) - (read-kbd-macro (symbol-value var)) nil)) - (when key - (define-key (current-global-map) - (read-kbd-macro key) 'helm-command-prefix)) - (set var key))) - -(defcustom helm-minibuffer-history-key "C-r" - "The key `helm-minibuffer-history' is bound to in minibuffer local maps." - :type '(choice (string :tag "Key") (const :tag "no binding")) - :group 'helm-config - :set - (lambda (var key) - (cl-dolist (map '(minibuffer-local-completion-map - minibuffer-local-filename-completion-map - minibuffer-local-filename-must-match-map ; Emacs 23.1.+ - minibuffer-local-isearch-map - minibuffer-local-map - minibuffer-local-must-match-filename-map ; Older Emacsen - minibuffer-local-must-match-map - minibuffer-local-ns-map)) - (when (and (boundp map) (keymapp (symbol-value map))) - (when (and (boundp var) (symbol-value var)) - (define-key (symbol-value map) - (read-kbd-macro (symbol-value var)) nil)) - (when key - (define-key (symbol-value map) - (read-kbd-macro key) 'helm-minibuffer-history)))) - (set var key))) - -;;; Command Keymap -;; -;; -(defvar helm-command-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "a") 'helm-apropos) - (define-key map (kbd "e") 'helm-etags-select) - (define-key map (kbd "l") 'helm-locate) - (define-key map (kbd "s") 'helm-surfraw) - (define-key map (kbd "r") 'helm-regexp) - (define-key map (kbd "m") 'helm-man-woman) - (define-key map (kbd "t") 'helm-top) - (define-key map (kbd "/") 'helm-find) - (define-key map (kbd "i") 'helm-semantic-or-imenu) - (define-key map (kbd "I") 'helm-imenu-in-all-buffers) - (define-key map (kbd "") 'helm-lisp-completion-at-point) - (define-key map (kbd "p") 'helm-list-emacs-process) - (define-key map (kbd "C-x r b") 'helm-filtered-bookmarks) - (define-key map (kbd "M-y") 'helm-show-kill-ring) - (define-key map (kbd "C-c ") 'helm-all-mark-rings) - (define-key map (kbd "C-x C-f") 'helm-find-files) - (define-key map (kbd "f") 'helm-multi-files) - (define-key map (kbd "C-:") 'helm-eval-expression-with-eldoc) - (define-key map (kbd "C-,") 'helm-calcul-expression) - (define-key map (kbd "M-x") 'helm-M-x) - (define-key map (kbd "M-s o") 'helm-occur) - (define-key map (kbd "M-g s") 'helm-do-grep) - (define-key map (kbd "M-g a") 'helm-do-grep-ag) - (define-key map (kbd "c") 'helm-colors) - (define-key map (kbd "F") 'helm-select-xfont) - (define-key map (kbd "8") 'helm-ucs) - (define-key map (kbd "C-c f") 'helm-recentf) - (define-key map (kbd "C-c g") 'helm-google-suggest) - (define-key map (kbd "h i") 'helm-info-at-point) - (define-key map (kbd "h r") 'helm-info-emacs) - (define-key map (kbd "h g") 'helm-info-gnus) - (define-key map (kbd "h h") 'helm-documentation) - (define-key map (kbd "C-x C-b") 'helm-buffers-list) - (define-key map (kbd "C-x r i") 'helm-register) - (define-key map (kbd "C-c C-x") 'helm-run-external-command) - (define-key map (kbd "b") 'helm-resume) - (define-key map (kbd "C-c g") 'helm-gid) - (define-key map (kbd "@") 'helm-list-elisp-packages) - map)) - -;; Don't override the keymap we just defined with an empty -;; keymap. This also protect bindings changed by the user. -(defvar helm-command-prefix) -(define-prefix-command 'helm-command-prefix) -(fset 'helm-command-prefix helm-command-map) -(setq helm-command-prefix helm-command-map) - - -;;; Menu - -(require 'helm-easymenu) - - -;;;###autoload -(defun helm-configuration () - "Customize `helm'." - (interactive) - (customize-group "helm")) - - -;;; Fontlock -(cl-dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) - (font-lock-add-keywords - mode - '(("(\\<\\(with-helm-after-update-hook\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-temp-hook\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-window\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-quittable\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-current-buffer\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-buffer\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-show-completion\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-default-directory\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-display-same-window\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-restore-variables\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(define-helm-type-attribute\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(helm-multi-key-defun\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(helm-while-no-input\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(helm-aif\\)\\>" 1 font-lock-keyword-face)))) - - -;;; Load the autoload file -;; It should have been generated either by -;; package.el or the make file. - -(load "helm-autoloads" nil t) - -(provide 'helm-config) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-config.el ends here diff --git a/elpa/helm-20160105.2046/helm-dabbrev.el b/elpa/helm-20160105.2046/helm-dabbrev.el deleted file mode 100644 index 7e768d93..00000000 --- a/elpa/helm-20160105.2046/helm-dabbrev.el +++ /dev/null @@ -1,356 +0,0 @@ -;;; helm-dabbrev.el --- Helm implementation of dabbrev. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'helm) -(require 'helm-help) -(require 'helm-elisp) ; For show-completion. - -(defgroup helm-dabbrev nil - "Dabbrev related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-dabbrev-always-search-all t - "Always search in all buffers when non--nil. -Note that even if nil, a search in all buffers -will occur if the length of candidates is <= than -`helm-dabbrev-max-length-result'." - :group 'helm-dabbrev - :type 'boolean) - -(defcustom helm-dabbrev-max-length-result 20 - "Max length of candidates before searching in all buffers. -If number of candidates found in current-buffer is <= to this, -search in all buffers. -Have no effect when `helm-dabbrev-always-search-all' is non--nil." - :group 'helm-dabbrev - :type 'integer) - -(defcustom helm-dabbrev-ignored-buffers-regexps - '("\\*helm" "\\*Messages" "\\*Echo Area" "\\*Buffer List") - "List of regexps matching names of buffers that helm-dabbrev should not check." - :group 'helm-dabbrev - :type '(repeat regexp)) - -(defcustom helm-dabbrev-related-buffer-fn #'helm-dabbrev--same-major-mode-p - "A function that decide if a buffer to search in is related to `current-buffer'. -This is actually determined by comparing `major-mode' of the buffer to search -and the `current-buffer'. -The function take one arg, the buffer which is current, look at -`helm-dabbrev--same-major-mode-p' for example. - -When nil all buffers are considered related to `current-buffer'." - :group 'helm-dabbrev - :type 'function) - -(defcustom helm-dabbrev-major-mode-assoc - '((emacs-lisp-mode . lisp-interaction-mode)) - "Major mode association alist. -This allow helm-dabbrev searching in buffers with the associated `major-mode'. -e.g \(emacs-lisp-mode . lisp-interaction-mode\) -will allow searching in the lisp-interaction-mode buffer when `current-buffer' -is an `emacs-lisp-mode' buffer and vice versa i.e -no need to provide \(lisp-interaction-mode . emacs-lisp-mode\) association. - -When nil check is the searched buffer have same `major-mode' -than the `current-buffer'. -This have no effect when `helm-dabbrev-related-buffer-fn' is nil or of course -bound to a function that doesn't handle this var." - :type '(alist :key-type symbol :value-type symbol) - :group 'helm-dabbrev) - -(defcustom helm-dabbrev-lineno-around 30 - "Search first in this number of lines before an after point." - :group 'helm-dabbrev - :type 'integer) - -(defcustom helm-dabbrev-cycle-threshold nil - "Number of time helm-dabbrev cycle before displaying helm completion. -When nil or 0 disable cycling." - :group 'helm-dabbrev - :type '(choice (const :tag "Cycling disabled" nil) integer)) - -(defcustom helm-dabbrev-case-fold-search 'smart - "Set `case-fold-search' in `helm-dabbrev'. -Same as `helm-case-fold-search' but for `helm-dabbrev'. -Note that this is not affecting searching in helm buffer, -but the initial search for all candidates in buffer(s)." - :group 'helm-dabbrev - :type '(choice (const :tag "Ignore case" t) - (const :tag "Respect case" nil) - (other :tag "Smart" 'smart))) - - -(defvar helm-dabbrev-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-/") 'helm-next-line) - (define-key map (kbd "M-:") 'helm-previous-line) - map)) - -;; Internal -(defvar helm-dabbrev--exclude-current-buffer-flag nil) -(defvar helm-dabbrev--cache nil) -(defvar helm-dabbrev--data nil) -(defvar helm-dabbrev--regexp "\\s-\\|\t\\|[(\[\{\"'`=<$;.]\\|\\s\\\\|^") -(cl-defstruct helm-dabbrev-info dabbrev limits iterator) - - -(defun helm-dabbrev--buffer-list () - (cl-loop with lst = (buffer-list) - for buf in (if helm-dabbrev--exclude-current-buffer-flag - (cdr lst) lst) - unless (cl-loop for r in helm-dabbrev-ignored-buffers-regexps - thereis (string-match r (buffer-name buf))) - collect buf)) - -(defun helm-dabbrev--same-major-mode-p (start-buffer) - ;; START-BUFFER is the current-buffer where we start searching. - ;; Determine the major-mode of START-BUFFER as `cur-maj-mode'. - ;; Each time the loop go in another buffer we try to find if its - ;; `major-mode' is: - ;; - same as the `cur-maj-mode' - ;; - derived from `cur-maj-mode' - ;; - have an assoc entry (major-mode . cur-maj-mode) - ;; - have an rassoc entry (cur-maj-mode . major-mode) - ;; - check if one of these entries inherit from another one in - ;; `helm-dabbrev-major-mode-assoc'. - (let* ((cur-maj-mode (with-current-buffer start-buffer major-mode)) - (c-assoc-mode (assq cur-maj-mode helm-dabbrev-major-mode-assoc)) - (c-rassoc-mode (rassq cur-maj-mode helm-dabbrev-major-mode-assoc)) - (o-assoc-mode (assq major-mode helm-dabbrev-major-mode-assoc)) - (o-rassoc-mode (rassq major-mode helm-dabbrev-major-mode-assoc)) - (cdr-c-assoc-mode (cdr c-assoc-mode)) - (cdr-o-assoc-mode (cdr o-assoc-mode))) - (or (eq major-mode cur-maj-mode) - (derived-mode-p cur-maj-mode) - (or (eq cdr-c-assoc-mode major-mode) - (eq (car c-rassoc-mode) major-mode) - (eq (cdr (assq cdr-c-assoc-mode helm-dabbrev-major-mode-assoc)) - major-mode) - (eq (car (rassq cdr-c-assoc-mode helm-dabbrev-major-mode-assoc)) - major-mode)) - (or (eq cdr-o-assoc-mode cur-maj-mode) - (eq (car o-rassoc-mode) cur-maj-mode) - (eq (cdr (assq cdr-o-assoc-mode helm-dabbrev-major-mode-assoc)) - cur-maj-mode) - (eq (car (rassq cdr-o-assoc-mode helm-dabbrev-major-mode-assoc)) - cur-maj-mode))))) - -(defun helm-dabbrev--collect (str limit ignore-case all) - (let* ((case-fold-search ignore-case) - (buffer1 (current-buffer)) ; start buffer. - (minibuf (minibufferp buffer1)) - result pos-before pos-after - (search-and-store - (lambda (pattern direction) - (while (cl-case direction - (1 (search-forward pattern nil t)) - (-1 (search-backward pattern nil t)) - (2 (let ((pos - (save-excursion - (forward-line - helm-dabbrev-lineno-around) - (point)))) - (setq pos-after pos) - (search-forward pattern pos t))) - (-2 (let ((pos - (save-excursion - (forward-line - (- helm-dabbrev-lineno-around)) - (point)))) - (setq pos-before pos) - (search-backward pattern pos t)))) - (let* ((replace-regexp (concat "\\(" helm-dabbrev--regexp "\\)\\'")) - (match-1 (helm-aif (thing-at-point 'symbol) - ;; `thing-at-point' returns - ;; the quote outside of e-lisp mode, - ;; e.g in message mode, - ;; `foo' => foo' - ;; but in e-lisp like modes: - ;; `foo' => foo - ;; so remove it [1]. - (replace-regexp-in-string - replace-regexp - "" (substring-no-properties it)))) - (match-2 (helm-aif (thing-at-point 'filename) - ;; Same as in [1]. - (replace-regexp-in-string - replace-regexp - "" (substring-no-properties it)))) - (lst (if (string= match-1 match-2) - (list match-1) - (list match-1 match-2)))) - (cl-loop for match in lst - unless (or (string= str match) - (member match result)) - do (push match result))))))) - (cl-loop for buf in (if all (helm-dabbrev--buffer-list) - (list (current-buffer))) - - do (with-current-buffer buf - (when (or minibuf ; check against all buffers when in minibuffer. - (if helm-dabbrev-related-buffer-fn - (funcall helm-dabbrev-related-buffer-fn buffer1) - t)) - (save-excursion - ;; Start searching before thing before point. - (goto-char (- (point) (length str))) - ;; Search the last 30 lines before point. - (funcall search-and-store str -2)) ; store pos [1] - (save-excursion - ;; Search the next 30 lines after point. - (funcall search-and-store str 2)) ; store pos [2] - (save-excursion - ;; Search all before point. - (goto-char pos-before) ; start from [1] - (funcall search-and-store str -1)) - (save-excursion - ;; Search all after point. - (goto-char pos-after) ; start from [2] - (funcall search-and-store str 1)))) - when (> (length result) limit) return (nreverse result) - finally return (nreverse result)))) - -(defun helm-dabbrev--get-candidates (abbrev) - (cl-assert abbrev nil "[No Match]") - (with-current-buffer (current-buffer) - (let* ((dabbrev-get (lambda (str all-bufs) - (helm-dabbrev--collect - str helm-candidate-number-limit - (cl-case helm-dabbrev-case-fold-search - (smart (helm-set-case-fold-search-1 abbrev)) - (t helm-dabbrev-case-fold-search)) - all-bufs))) - (lst (funcall dabbrev-get abbrev helm-dabbrev-always-search-all))) - (if (and (not helm-dabbrev-always-search-all) - (<= (length lst) helm-dabbrev-max-length-result)) - ;; Search all but don't recompute current-buffer. - (let ((helm-dabbrev--exclude-current-buffer-flag t)) - (append lst (funcall dabbrev-get abbrev 'all-bufs))) - lst)))) - -(defun helm-dabbrev-default-action (candidate) - (with-helm-current-buffer - (let* ((limits (helm-bounds-of-thing-before-point - helm-dabbrev--regexp)) - (beg (car limits)) - (end (point))) - (run-with-timer - 0.01 nil - 'helm-insert-completion-at-point - beg end candidate)))) - -;;;###autoload -(defun helm-dabbrev () - "Preconfigured helm for dynamic abbreviations." - (interactive) - (let ((dabbrev (helm-thing-before-point nil helm-dabbrev--regexp)) - (limits (helm-bounds-of-thing-before-point helm-dabbrev--regexp)) - (enable-recursive-minibuffers t) - (cycling-disabled-p (or (null helm-dabbrev-cycle-threshold) - (zerop helm-dabbrev-cycle-threshold))) - (helm-execute-action-at-once-if-one t) - (helm-quit-if-no-candidate - (lambda () - (message "[Helm-dabbrev: No expansion found]")))) - (cl-assert (and (stringp dabbrev) (not (string= dabbrev ""))) - nil "[Helm-dabbrev: Nothing found before point]") - (when (and - ;; have been called at least once. - (helm-dabbrev-info-p helm-dabbrev--data) - ;; But user have moved with some other command - ;; in the meaning time. - (not (eq last-command 'helm-dabbrev))) - (setq helm-dabbrev--data nil)) - (when cycling-disabled-p - (setq helm-dabbrev--cache (helm-dabbrev--get-candidates dabbrev))) - (unless (or cycling-disabled-p - (helm-dabbrev-info-p helm-dabbrev--data)) - (setq helm-dabbrev--cache (helm-dabbrev--get-candidates dabbrev)) - (setq helm-dabbrev--data - (make-helm-dabbrev-info - :dabbrev dabbrev - :limits limits - :iterator - (helm-iter-list - (cl-loop for i in helm-dabbrev--cache when - (and i (string-match - (concat "^" (regexp-quote dabbrev)) i)) - collect i into selection - when (and selection - (= (length selection) - helm-dabbrev-cycle-threshold)) - ;; When selection len reach - ;; `helm-dabbrev-cycle-threshold' - ;; return selection. - return selection - ;; selection len never reach - ;; `helm-dabbrev-cycle-threshold' - ;; return selection. - finally return selection))))) - (let ((iter (and (helm-dabbrev-info-p helm-dabbrev--data) - (helm-dabbrev-info-iterator helm-dabbrev--data))) - deactivate-mark) - ;; Cycle until iterator is consumed. - (helm-aif (and iter (helm-iter-next iter)) - (progn - (helm-insert-completion-at-point - (car (helm-dabbrev-info-limits helm-dabbrev--data)) - (cdr limits) it) - ;; Move already tried candidates to end of list. - (setq helm-dabbrev--cache (append (remove it helm-dabbrev--cache) - (list it)))) - ;; If the length of candidates is only one when computed - ;; that's mean the unique matched item have already been - ;; inserted by the iterator, so no need to reinsert the old dabbrev, - ;; just let helm exiting with "No expansion found". - (let ((old-dabbrev (if (helm-dabbrev-info-p helm-dabbrev--data) - (helm-dabbrev-info-dabbrev helm-dabbrev--data) - dabbrev))) - (unless (cdr (all-completions old-dabbrev helm-dabbrev--cache)) - (setq cycling-disabled-p t)) - ;; Iterator is now empty, reset dabbrev to initial value - ;; and start helm completion. - (unless cycling-disabled-p - (setq dabbrev old-dabbrev - limits (helm-dabbrev-info-limits helm-dabbrev--data)) - (setq helm-dabbrev--data nil) - (delete-region (car limits) (point)) - (insert dabbrev)) - (with-helm-show-completion (car limits) (cdr limits) - (helm :sources (helm-build-in-buffer-source "Dabbrev Expand" - :data helm-dabbrev--cache - :persistent-action 'ignore - :persistent-help "DoNothing" - :keymap helm-dabbrev-map - :action 'helm-dabbrev-default-action) - :buffer "*helm dabbrev*" - :input (concat "^" dabbrev " ") - :resume 'noresume - :allow-nest t))))))) - -(provide 'helm-dabbrev) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-dabbrev.el ends here diff --git a/elpa/helm-20160105.2046/helm-easymenu.el b/elpa/helm-20160105.2046/helm-easymenu.el deleted file mode 100644 index 1cbca12e..00000000 --- a/elpa/helm-20160105.2046/helm-easymenu.el +++ /dev/null @@ -1,91 +0,0 @@ -;;; helm-easymenu.el --- Helm easymenu definitions. -*- lexical-binding: t -*- - -;; Copyright (C) 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'easymenu) - -(easy-menu-add-item - nil '("Tools") - '("Helm" - ["Find any Files/Buffers" helm-multi-files t] - ["Helm Everywhere (Toggle)" helm-mode t] - ["Helm resume" helm-resume t] - "----" - ("Files" - ["Find files" helm-find-files t] - ["Recent Files" helm-recentf t] - ["Locate" helm-locate t] - ["Search Files with find" helm-find t] - ["Bookmarks" helm-filtered-bookmarks t]) - ("Buffers" - ["Find buffers" helm-buffers-list t]) - ("Commands" - ["Emacs Commands" helm-M-x t] - ["Externals Commands" helm-run-external-command t]) - ("Help" - ["Helm Apropos" helm-apropos t]) - ("Info" - ["Info at point" helm-info-at-point t] - ["Emacs Manual index" helm-info-emacs t] - ["Gnus Manual index" helm-info-gnus t] - ["Helm documentation" helm-documentation t]) - ("Org" - ["Org headlines in org agenda files" helm-org-agenda-files-headings t] - ["Org headlines in buffer" helm-org-in-buffer-headings t]) - ("Elpa" - ["Elisp packages" helm-list-elisp-packages t] - ["Elisp packages no fetch" helm-list-elisp-packages-no-fetch t]) - ("Tools" - ["Occur" helm-occur t] - ["Grep" helm-do-grep t] - ["Grep current directory with AG" helm-do-grep-ag t] - ["Gid" helm-gid t] - ["Etags" helm-etags-select t] - ["Lisp complete at point" helm-lisp-completion-at-point t] - ["Browse Kill ring" helm-show-kill-ring t] - ["Browse register" helm-register t] - ["Mark Ring" helm-all-mark-rings t] - ["Regexp handler" helm-regexp t] - ["Colors & Faces" helm-colors t] - ["Show xfonts" helm-select-xfont t] - ["Ucs Symbols" helm-ucs t] - ["Imenu" helm-imenu t] - ["Imenu all" helm-imenu-in-all-buffers t] - ["Semantic or Imenu" helm-semantic-or-imenu t] - ["Google Suggest" helm-google-suggest t] - ["Eval expression" helm-eval-expression-with-eldoc t] - ["Calcul expression" helm-calcul-expression t] - ["Man pages" helm-man-woman t] - ["Top externals process" helm-top t] - ["Emacs internals process" helm-list-emacs-process t]) - "----" - ["Preferred Options" helm-configuration t]) - "Spell Checking") - -(easy-menu-add-item nil '("Tools") '("----") "Spell Checking") - - -(provide 'helm-easymenu) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-easymenu.el ends here diff --git a/elpa/helm-20160105.2046/helm-elisp-package.el b/elpa/helm-20160105.2046/helm-elisp-package.el deleted file mode 100644 index 55d6b323..00000000 --- a/elpa/helm-20160105.2046/helm-elisp-package.el +++ /dev/null @@ -1,380 +0,0 @@ -;;; helm-elisp-package.el --- helm interface for package.el -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'package) - -(defgroup helm-el-package nil - "helm elisp packages." - :group 'helm) - -(defcustom helm-el-package-initial-filter 'all - "Show only installed, upgraded or all packages at startup." - :group 'helm-el-package - :type '(radio :tag "Initial filter for elisp packages" - (const :tag "Show all packages" all) - (const :tag "Show installed packages" installed) - (const :tag "Show not installed packages" uninstalled) - (const :tag "Show upgradable packages" upgrade))) - -;; internals vars -(defvar helm-el-package--show-only 'all) -(defvar helm-el-package--initialized-p nil) -(defvar helm-el-package--tabulated-list nil) -(defvar helm-el-package--upgrades nil) -(defvar helm-el-package--removable-packages nil) - -(defun helm-el-package--init () - (when (null package-alist) - (setq helm-el-package--show-only 'all)) - (when (fboundp 'package--removable-packages) - (setq helm-el-package--removable-packages - (package--removable-packages))) - (save-selected-window - (list-packages helm-el-package--initialized-p) - (setq helm-el-package--initialized-p t) - (message nil)) - (helm-init-candidates-in-buffer - 'global - (with-current-buffer (get-buffer "*Packages*") - (setq helm-el-package--tabulated-list tabulated-list-entries) - (buffer-string))) - (setq helm-el-package--upgrades (helm-el-package-menu--find-upgrades)) - (if helm-force-updating-p - (if helm-el-package--upgrades - (message "%d package(s) can be upgraded, Refreshing packages list done" - (length helm-el-package--upgrades)) - (message "Refreshing packages list done, no upgrades available")) - (setq helm-el-package--show-only (if helm-el-package--upgrades - 'upgrade - helm-el-package-initial-filter))) - (kill-buffer "*Packages*")) - -(defun helm-el-package-describe (candidate) - (let ((id (get-text-property 0 'tabulated-list-id candidate))) - (describe-package (if (fboundp 'package-desc-name) - (package-desc-name id) - (car id))))) - -(defun helm-el-package-visit-homepage (candidate) - (let* ((id (get-text-property 0 'tabulated-list-id candidate)) - (pkg (if (fboundp 'package-desc-name) (package-desc-name id) - (car id))) - (desc (cadr (assoc pkg package-archive-contents))) - (extras (package-desc-extras desc)) - (url (and (listp extras) (cdr-safe (assoc :url extras))))) - (if (stringp url) - (browse-url url) - (message "Package %s has no homepage" - (propertize (symbol-name pkg) - 'face 'font-lock-keyword-face))))) - -(defun helm-el-run-visit-homepage () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-visit-homepage))) - -(defun helm-el-package-install-1 (pkg-list) - (cl-loop with mkd = pkg-list - for p in mkd - for id = (get-text-property 0 'tabulated-list-id p) - do (package-install - (if (fboundp 'package-desc-name) - (package-desc-name id) - (car id))) - collect (if (fboundp 'package-desc-full-name) - id - (car id)) - into installed-list - finally do (progn - (when (boundp 'package-selected-packages) - (customize-save-variable - 'package-selected-packages - (append (mapcar 'package-desc-name installed-list) - package-selected-packages))) - (if (fboundp 'package-desc-full-name) - (message (format "%d packages installed:\n(%s)" - (length installed-list) - (mapconcat #'package-desc-full-name - installed-list ", "))) - (message (format "%d packages installed:\n(%s)" - (length installed-list) - (mapconcat 'symbol-name installed-list ", "))))))) - -(defun helm-el-package-install (_candidate) - (helm-el-package-install-1 (helm-marked-candidates))) - -(defun helm-el-run-package-install () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-install))) - -(defun helm-el-package-uninstall-1 (pkg-list) - (cl-loop with mkd = pkg-list - for p in mkd - for id = (get-text-property 0 'tabulated-list-id p) - do - (condition-case-unless-debug err - (with-no-warnings - (if (fboundp 'package-desc-full-name) - ;; emacs 24.4 - (package-delete id) - ;; emacs 24.3 - (package-delete (symbol-name (car id)) - (package-version-join (cdr id))))) - (error (message (cadr err)))) - unless (assoc (elt id 1) package-alist) - collect (if (fboundp 'package-desc-full-name) - id - (cons (symbol-name (car id)) - (package-version-join (cdr id)))) - into delete-list - finally do (if delete-list - (if (fboundp 'package-desc-full-name) - ;; emacs 24.4 - (message (format "%d packages deleted:\n(%s)" - (length delete-list) - (mapconcat #'package-desc-full-name - delete-list ", "))) - ;; emacs 24.3 - (message (format "%d packages deleted:\n(%s)" - (length delete-list) - (mapconcat (lambda (x) - (concat (car x) "-" (cdr x))) - delete-list ", "))) - ;; emacs 24.3 doesn't update - ;; its `package-alist' after deleting. - (cl-loop for p in package-alist - when (assq (symbol-name (car p)) delete-list) - do (setq package-alist (delete p package-alist)))) - "No package deleted"))) - -(defun helm-el-package-uninstall (_candidate) - (helm-el-package-uninstall-1 (helm-marked-candidates))) - -(defun helm-el-run-package-uninstall () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-uninstall))) - -(defun helm-el-package-menu--find-upgrades () - (cl-loop for entry in helm-el-package--tabulated-list - for pkg-desc = (car entry) - for status = (package-desc-status pkg-desc) - when (member status '("installed" "unsigned" "dependency")) - collect pkg-desc - into installed - when (member status '("available" "new")) - collect (cons (package-desc-name pkg-desc) pkg-desc) - into available - finally return - (cl-loop for pkg in installed - for avail-pkg = (assq (package-desc-name pkg) available) - when (and avail-pkg - (version-list-< (package-desc-version pkg) - (package-desc-version - (cdr avail-pkg)))) - collect avail-pkg))) - -(defun helm-el-package-upgrade-1 (pkg-list) - (cl-loop for p in pkg-list - for pkg-desc = (car p) - for upgrade = (cdr (assq (package-desc-name pkg-desc) - helm-el-package--upgrades)) - do - (cond ((null upgrade) - (ignore)) - ((equal pkg-desc upgrade) - ;;Install. - (package-install pkg-desc)) - (t - ;; Delete. - (if (boundp 'package-selected-packages) - (with-no-warnings - (package-delete pkg-desc t t)) - (package-delete pkg-desc)))))) - -(defun helm-el-package-upgrade (_candidate) - (helm-el-package-upgrade-1 - (cl-loop with pkgs = (helm-marked-candidates) - for p in helm-el-package--tabulated-list - for pkg = (car p) - if (member (symbol-name (package-desc-name pkg)) pkgs) - collect p))) - -(defun helm-el-run-package-upgrade () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-upgrade))) - -(defun helm-el-package-upgrade-all () - (if helm-el-package--upgrades - (with-helm-display-marked-candidates - helm-marked-buffer-name (mapcar (lambda (x) (symbol-name (car x))) - helm-el-package--upgrades) - (when (y-or-n-p "Upgrade all packages? ") - (helm-el-package-upgrade-1 helm-el-package--tabulated-list))) - (message "No packages to upgrade actually!"))) - -(defun helm-el-package-upgrade-all-action (_candidate) - (helm-el-package-upgrade-all)) - -(defun helm-el-run-package-upgrade-all () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-upgrade-all-action))) - -(defun helm-el-package--transformer (candidates _source) - (cl-loop for c in candidates - for id = (get-text-property 0 'tabulated-list-id c) - for name = (if (fboundp 'package-desc-name) - (package-desc-name id) - (car id)) - for installed-p = (assq name package-alist) - for upgrade-p = (assq name helm-el-package--upgrades) - for user-installed-p = (and (boundp 'package-selected-packages) - (memq name package-selected-packages)) - do (when user-installed-p (put-text-property 0 2 'display "S " c)) - do (when (memq name helm-el-package--removable-packages) - (put-text-property 0 2 'display "U " c) - (put-text-property - 2 (+ (length (symbol-name name)) 2) - 'face 'font-lock-variable-name-face c)) - for cand = (cons c (car (split-string c))) - when (or (and upgrade-p - (eq helm-el-package--show-only 'upgrade)) - (and installed-p - (eq helm-el-package--show-only 'installed)) - (and (not installed-p) - (eq helm-el-package--show-only 'uninstalled)) - (eq helm-el-package--show-only 'all)) - collect cand)) - -(defun helm-el-package-show-upgrade () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'upgrade) - (helm-update))) - -(defun helm-el-package-show-installed () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'installed) - (helm-update))) - -(defun helm-el-package-show-all () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'all) - (helm-update))) - -(defun helm-el-package-show-uninstalled () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'uninstalled) - (helm-update))) - -(defvar helm-el-package-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-I") 'helm-el-package-show-installed) - (define-key map (kbd "M-O") 'helm-el-package-show-uninstalled) - (define-key map (kbd "M-U") 'helm-el-package-show-upgrade) - (define-key map (kbd "M-A") 'helm-el-package-show-all) - (define-key map (kbd "C-c i") 'helm-el-run-package-install) - (define-key map (kbd "C-c r") 'helm-el-run-package-reinstall) - (define-key map (kbd "C-c d") 'helm-el-run-package-uninstall) - (define-key map (kbd "C-c u") 'helm-el-run-package-upgrade) - (define-key map (kbd "C-c U") 'helm-el-run-package-upgrade-all) - (define-key map (kbd "C-c @") 'helm-el-run-visit-homepage) - map)) - -(defvar helm-source-list-el-package nil) -(defclass helm-list-el-package-source (helm-source-in-buffer) - ((init :initform 'helm-el-package--init) - (get-line :initform 'buffer-substring) - (filtered-candidate-transformer :initform 'helm-el-package--transformer) - (action-transformer - :initform - (lambda (actions candidate) - (let ((pkg-desc (get-text-property - 0 'tabulated-list-id candidate)) - (acts (if helm-el-package--upgrades - (append actions '(("Upgrade all packages" - . helm-el-package-upgrade-all-action))) - actions))) - (cond ((and (package-installed-p (package-desc-name pkg-desc)) - (cdr (assq (package-desc-name pkg-desc) - helm-el-package--upgrades))) - (append '(("Upgrade package(s)" . helm-el-package-upgrade) - ("Uninstall package(s)" . helm-el-package-uninstall)) acts)) - ((cdr (assq (package-desc-name pkg-desc) - helm-el-package--upgrades)) - (append '(("Upgrade package(s)" . helm-el-package-upgrade)) acts)) - ((package-installed-p (package-desc-name pkg-desc)) - (append acts '(("Reinstall package(s)" . helm-el-package-reinstall) - ("Uninstall package(s)" . helm-el-package-uninstall)))) - (t (append acts '(("Install packages(s)" . helm-el-package-install)))))))) - (help-message :initform 'helm-el-package-help-message) - (keymap :initform helm-el-package-map) - (update :initform 'helm-el-package--update) - (candidate-number-limit :initform 9999) - (action :initform '(("Describe package" . helm-el-package-describe) - ("Visit homepage" . helm-el-package-visit-homepage))))) - -(defun helm-el-package--update () - (setq helm-el-package--initialized-p nil)) - -(defun helm-el-package-reinstall (_pkg) - (cl-loop for p in (helm-marked-candidates) - for pkg-desc = (get-text-property 0 'tabulated-list-id p) - for name = (package-desc-name pkg-desc) - do (if (fboundp 'package-reinstall) - (package-reinstall name) - (package-delete pkg-desc) - (package-install name)))) - -(defun helm-el-run-package-reinstall () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-reinstall))) - -;;;###autoload -(defun helm-list-elisp-packages (arg) - "Preconfigured helm for listing and handling emacs packages." - (interactive "P") - (when arg (setq helm-el-package--initialized-p nil)) - (unless helm-source-list-el-package - (setq helm-source-list-el-package - (helm-make-source "list packages" 'helm-list-el-package-source))) - (helm :sources 'helm-source-list-el-package - :buffer "*helm list packages*")) - -;;;###autoload -(defun helm-list-elisp-packages-no-fetch () - "Preconfigured helm for emacs packages. -Same as `helm-list-elisp-packages' but don't fetch packages on remote." - (interactive) - (let ((helm-el-package--initialized-p t)) - (helm-list-elisp-packages nil))) - -(provide 'helm-elisp-package) - -;;; helm-elisp-package.el ends here diff --git a/elpa/helm-20160105.2046/helm-elisp.el b/elpa/helm-20160105.2046/helm-elisp.el deleted file mode 100644 index b2f40b43..00000000 --- a/elpa/helm-20160105.2046/helm-elisp.el +++ /dev/null @@ -1,903 +0,0 @@ -;;; helm-elisp.el --- Elisp symbols completion for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-info) -(require 'helm-eval) -(require 'helm-files) -(require 'advice) - -(declare-function 'helm-describe-function "helm-lib") -(declare-function 'helm-describe-variable "helm-lib") -(declare-function 'helm-describe-face "helm-lib") - - -;;; Customizable values - -(defgroup helm-elisp nil - "Elisp related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-turn-on-show-completion t - "Display candidate in buffer while moving selection when non--nil." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-show-completion-use-special-display t - "A special display will be used in Lisp completion if non--nil. -All functions that are wrapped in macro `with-helm-show-completion' -will be affected." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-show-completion-min-window-height 7 - "Minimum completion window height used in show completion. -This is used in macro `with-helm-show-completion'." - :group 'helm-elisp - :type 'integer) - -(defcustom helm-lisp-quoted-function-list - '(funcall apply mapc cl-mapc mapcar cl-mapcar - callf callf2 cl-callf cl-callf2 fset - fboundp fmakunbound symbol-function) - "List of function where quoted function completion happen. -e.g give only function names after \(funcall '." - :group 'helm-elisp - :type '(repeat (choice symbol))) - -(defcustom helm-lisp-unquoted-function-list - '(function defadvice) - "List of function where unquoted function completion happen. -e.g give only function names after \(function ." - :group 'helm-elisp - :type '(repeat (choice symbol))) - -(defcustom helm-apropos-fuzzy-match nil - "Enable fuzzy matching for `helm-apropos' when non-nil." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-lisp-fuzzy-completion nil - "Enable fuzzy matching in emacs-lisp completion when non-nil. -NOTE: This enable fuzzy matching in helm native implementation of -elisp completion, but not on helmized elisp completion, i.e -fuzzy completion is not available in `completion-at-point'." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-apropos-function-list '(helm-def-source--emacs-commands - helm-def-source--emacs-functions - helm-def-source--eieio-classes - helm-def-source--eieio-generic - helm-def-source--emacs-variables - helm-def-source--emacs-faces - helm-def-source--helm-attributes) - "A list of functions that build helm sources to use in `helm-apropos'." - :group 'helm-elisp - :type '(repeat (choice symbol))) - - -;;; Faces -;; -;; -(defgroup helm-elisp-faces nil - "Customize the appearance of helm-elisp." - :prefix "helm-" - :group 'helm-elisp - :group 'helm-faces) - -(defface helm-lisp-show-completion - '((t (:background "DarkSlateGray"))) - "Face used for showing candidates in `helm-lisp-completion'." - :group 'helm-elisp-faces) - -(defface helm-lisp-completion-info - '((t (:foreground "red"))) - "Face used for showing info in `helm-lisp-completion'." - :group 'helm-elisp-faces) - -(defcustom helm-elisp-help-function - 'helm-elisp-show-help - "Function for displaying help for Lisp symbols." - :group 'helm-elisp - :type '(choice (function :tag "Open help for the symbol." - helm-elisp-show-help) - (function :tag "Show one liner in modeline." - helm-elisp-show-doc-modeline))) - - -;;; Show completion. -;; -;; Provide show completion with macro `with-helm-show-completion'. - -(defvar helm-show-completion-overlay nil) - -;; Called each time cursor move in helm-buffer. -(defun helm-show-completion () - (with-helm-current-buffer - (overlay-put helm-show-completion-overlay - 'display (substring-no-properties - (helm-get-selection))))) - -(defun helm-show-completion-init-overlay (beg end) - (when (and helm-turn-on-show-completion beg end) - (setq helm-show-completion-overlay (make-overlay beg end)) - (overlay-put helm-show-completion-overlay - 'face 'helm-lisp-show-completion))) - -(defun helm-show-completion-display-function (buffer &rest _args) - "A special resized helm window is used depending on position in BUFFER." - (with-selected-window (selected-window) - (if (window-dedicated-p) - (helm-default-display-buffer buffer) - (let* ((screen-size (+ (count-screen-lines (window-start) (point) t) - 1 ; mode-line - (if header-line-format 1 0))) ; header-line - (def-size (- (window-height) - helm-show-completion-min-window-height)) - (upper-height (max window-min-height (min screen-size def-size))) - split-window-keep-point) - (recenter -1) - (set-window-buffer (if (active-minibuffer-window) - (minibuffer-selected-window) - (split-window nil upper-height - helm-split-window-default-side)) - buffer))))) - -(defmacro with-helm-show-completion (beg end &rest body) - "Show helm candidate in an overlay at point. -BEG and END are the beginning and end position of the current completion -in `helm-current-buffer'. -BODY is an helm call where we want to enable show completion. -If `helm-turn-on-show-completion' is nil just do nothing." - (declare (indent 2) (debug t)) - `(let ((helm-move-selection-after-hook - (and helm-turn-on-show-completion - (append (list 'helm-show-completion) - helm-move-selection-after-hook)))) - (with-helm-temp-hook 'helm-after-initialize-hook - (with-helm-buffer - (set (make-local-variable 'helm-display-function) - (if helm-show-completion-use-special-display - 'helm-show-completion-display-function - 'helm-default-display-buffer)))) - (unwind-protect - (progn - (helm-show-completion-init-overlay ,beg ,end) - ,@body) - (when (and helm-turn-on-show-completion - helm-show-completion-overlay - (overlayp helm-show-completion-overlay)) - (delete-overlay helm-show-completion-overlay))))) - - -;;; Lisp symbol completion. -;; -;; -(defun helm-lisp-completion--predicate-at-point (beg) - ;; Return a predicate for `all-completions'. - (let ((fn-sym-p (lambda () - (or - (and (eq (char-before) ?\ ) - (save-excursion - (skip-syntax-backward " " (point-at-bol)) - (memq (symbol-at-point) - helm-lisp-unquoted-function-list))) - (and (eq (char-before) ?\') - (save-excursion - (forward-char -1) - (eq (char-before) ?\#))))))) - (save-excursion - (goto-char beg) - (if (or - ;; Complete on all symbols in non--lisp modes (logs mail etc..) - (not (memq major-mode '(emacs-lisp-mode - lisp-interaction-mode - inferior-emacs-lisp-mode))) - (not (or (funcall fn-sym-p) - (and (eq (char-before) ?\') - (save-excursion - (forward-char (if (funcall fn-sym-p) -2 -1)) - (skip-syntax-backward " " (point-at-bol)) - (memq (symbol-at-point) - helm-lisp-quoted-function-list))) - (eq (char-before) ?\())) ; no paren before str. - ;; Looks like we are in a let statement. - (condition-case nil - (progn (up-list -2) (forward-char 1) - (eq (char-after) ?\()) - (error nil))) - (lambda (sym) - (or (boundp sym) (fboundp sym) (symbol-plist sym))) - #'fboundp)))) - -(defun helm-thing-before-point (&optional limits regexp) - "Return symbol name before point. -If REGEXP is specified return what REGEXP find before point. -By default match the beginning of symbol before point. -With LIMITS arg specified return the beginning and end position -of symbol before point." - (save-excursion - (let (beg - (end (point)) - (boundary (field-beginning nil nil (point-at-bol)))) - (if (re-search-backward (or regexp "\\_<") boundary t) - (setq beg (match-end 0)) - (setq beg boundary)) - (unless (= beg end) - (if limits - (cons beg end) - (buffer-substring-no-properties beg end)))))) - -(defun helm-bounds-of-thing-before-point (&optional regexp) - "Get the beginning and end position of `helm-thing-before-point'. -Return a cons \(beg . end\)." - (helm-thing-before-point 'limits regexp)) - -(defun helm-insert-completion-at-point (beg end str) - ;; When there is no space after point - ;; we are completing inside a symbol or - ;; after a partial symbol with the next arg aside - ;; without space, in this case mark the region. - ;; deleting it would remove the - ;; next arg which is unwanted. - (delete-region beg end) - (insert str) - (let ((pos (cdr (or (bounds-of-thing-at-point 'symbol) - ;; needed for helm-dabbrev. - (bounds-of-thing-at-point 'filename))))) - (when (and pos (< (point) pos)) - (push-mark pos t t)))) - -(defvar helm-lisp-completion--cache nil) -(defvar helm-lgst-len nil) -;;;###autoload -(defun helm-lisp-completion-at-point () - "Preconfigured helm for lisp symbol completion at point." - (interactive) - (setq helm-lgst-len 0) - (let* ((target (helm-thing-before-point)) - (beg (car (helm-bounds-of-thing-before-point))) - (end (point)) - (pred (and beg (helm-lisp-completion--predicate-at-point beg))) - (loc-vars (and (fboundp 'elisp--local-variables) - (ignore-errors - (mapcar #'symbol-name (elisp--local-variables))))) - (glob-syms (and target pred (all-completions target obarray pred))) - (candidates (append loc-vars glob-syms)) - (helm-quit-if-no-candidate t) - (helm-execute-action-at-once-if-one t) - (enable-recursive-minibuffers t)) - (setq helm-lisp-completion--cache (cl-loop for sym in candidates - for len = (length sym) - when (> len helm-lgst-len) - do (setq helm-lgst-len len) - collect sym)) - (if candidates - (with-helm-show-completion beg end - ;; Overlay is initialized now in helm-current-buffer. - (helm - :sources (helm-build-in-buffer-source "Lisp completion" - :data helm-lisp-completion--cache - :persistent-action 'helm-lisp-completion-persistent-action - :nomark t - :fuzzy-match helm-lisp-fuzzy-completion - :persistent-help (helm-lisp-completion-persistent-help) - :filtered-candidate-transformer - 'helm-lisp-completion-transformer - :action `(lambda (candidate) - (with-helm-current-buffer - (run-with-timer - 0.01 nil - 'helm-insert-completion-at-point - ,beg ,end candidate)))) - :input (if helm-lisp-fuzzy-completion - target (concat target " ")) - :resume 'noresume - :buffer "*helm lisp completion*" - :allow-nest t)) - (message "[No Match]")))) - -(defun helm-lisp-completion-persistent-action (candidate &optional name) - "Show documentation for the function. -Documentation is shown briefly in mode-line or completely -in other window according to the value of `helm-elisp-help-function'." - (funcall helm-elisp-help-function candidate name)) - -(defun helm-lisp-completion-persistent-help () - "Return persistent-help according to the value of `helm-elisp-help-function'" - (cl-ecase helm-elisp-help-function - (helm-elisp-show-doc-modeline "Show brief doc in mode-line") - (helm-elisp-show-help "Toggle show help for the symbol"))) - -(defun helm-elisp--show-help-1 (candidate &optional name) - (let ((sym (intern-soft candidate))) - (cl-typecase sym - ((and fboundp boundp) - (if (member name '("describe-function" "describe-variable")) - (funcall (intern (format "helm-%s" name)) sym) - ;; When there is no way to know what to describe - ;; prefer describe-function. - (helm-describe-function sym))) - (fboundp (helm-describe-function sym)) - (bound (helm-describe-variable sym)) - (face (helm-describe-face sym))))) - -(defun helm-elisp-show-help (candidate &optional name) - "Show full help for the function CANDIDATE. -Arg NAME specify the name of the top level function -calling helm generic completion (e.g \"describe-function\")." - (helm-elisp--persistent-help - candidate 'helm-elisp--show-help-1 name)) - -(defun helm-elisp-show-doc-modeline (candidate &optional name) - "Show brief documentation for the function in modeline." - (let ((cursor-in-echo-area t) - mode-line-in-non-selected-windows) - (helm-show-info-in-mode-line - (propertize - (helm-get-first-line-documentation - (intern candidate) name) - 'face 'helm-lisp-completion-info)))) - -(defun helm-lisp-completion-transformer (candidates _source) - "Helm candidates transformer for lisp completion." - (cl-loop for c in candidates - for sym = (intern c) - for annot = (cl-typecase sym - (command " (Com)") - (class " (Class)") - (generic " (Gen)") - (fbound " (Fun)") - (bound " (Var)") - (face " (Face)")) - for spaces = (make-string (- helm-lgst-len (length c)) ? ) - collect (cons (concat c spaces annot) c) into lst - finally return (sort lst #'helm-generic-sort-fn))) - -(defun helm-get-first-line-documentation (sym &optional name) - "Return first line documentation of symbol SYM. -If SYM is not documented, return \"Not documented\"." - (let ((doc (cl-typecase sym - ((and fboundp boundp) - (cond ((string= name "describe-function") - (documentation sym t)) - ((string= name "describe-variable") - (documentation-property sym 'variable-documentation t)) - (t (documentation sym t)))) - (fbound (documentation sym t)) - (bound (documentation-property sym 'variable-documentation t)) - (face (face-documentation sym))))) - (if (and doc (not (string= doc "")) - ;; `documentation' return "\n\n(args...)" - ;; for CL-style functions. - (not (string-match-p "^\n\n" doc))) - (car (split-string doc "\n")) - "Not documented"))) - -;;; File completion. -;; -;; Complete file name at point. - -;;;###autoload -(defun helm-complete-file-name-at-point (&optional force) - "Preconfigured helm to complete file name at point." - (interactive) - (require 'helm-mode) - (let* ((tap (thing-at-point 'filename)) - beg - (init (and tap - (or force - (save-excursion - (end-of-line) - (search-backward tap (point-at-bol) t) - (setq beg (point)) - (looking-back "[^'`( ]" (1- (point))))) - (expand-file-name - (substring-no-properties tap)))) - (end (point)) - (helm-quit-if-no-candidate t) - (helm-execute-action-at-once-if-one t) - completion) - (with-helm-show-completion beg end - (setq completion (helm-read-file-name "FileName: " - :initial-input init))) - (when (and completion (not (string= completion ""))) - (delete-region beg end) (insert (if (string-match "^~" tap) - (abbreviate-file-name completion) - completion))))) - -;;;###autoload -(defun helm-lisp-indent () - ;; It is meant to use with `helm-define-multi-key' which - ;; does not support args for functions yet, so use `current-prefix-arg' - ;; for now instead of (interactive "P"). - (interactive) - (let ((tab-always-indent (or (eq tab-always-indent 'complete) - tab-always-indent))) - (indent-for-tab-command current-prefix-arg))) - -;;;###autoload -(defun helm-lisp-completion-or-file-name-at-point () - "Preconfigured helm to complete lisp symbol or filename at point. -Filename completion happen if string start after or between a double quote." - (interactive) - (let* ((tap (thing-at-point 'filename))) - (if (and tap (save-excursion - (end-of-line) - (search-backward tap (point-at-bol) t) - (looking-back "[^'`( ]" (1- (point))))) - (helm-complete-file-name-at-point) - (helm-lisp-completion-at-point)))) - - -;;; Apropos -;; -;; -(defun helm-apropos-init (test default) - "Init candidates buffer for `helm-apropos' sources." - (require 'helm-help) - (helm-init-candidates-in-buffer 'global - (let ((default-symbol (and (stringp default) - (intern-soft default))) - (symbols (all-completions "" obarray test))) - (if (and default-symbol (funcall test default-symbol)) - (cons default-symbol symbols) - symbols)))) - -(defun helm-apropos-init-faces (default) - "Init candidates buffer for faces for `helm-apropos'." - (require 'helm-help) - (with-current-buffer (helm-candidate-buffer 'global) - (goto-char (point-min)) - (let ((default-symbol (and (stringp default) - (intern-soft default))) - (faces (face-list))) - (when (and default-symbol (facep default-symbol)) - (insert (concat default "\n"))) - (insert - (mapconcat #'prin1-to-string - (if default - (cl-remove-if (lambda (sym) (string= sym default)) faces) - faces) - "\n"))))) - -(defun helm-apropos-default-sort-fn (candidates _source) - (if (string= helm-pattern "") - candidates - (sort candidates #'helm-generic-sort-fn))) - -(defun helm-def-source--emacs-variables (&optional default) - (helm-build-in-buffer-source "Variables" - :init `(lambda () - (helm-apropos-init - (lambda (x) (and (boundp x) (not (keywordp x)))) ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-variable)) - :persistent-help "Describe variable" - :action '(("Describe variable" . helm-describe-variable) - ("Find variable" . helm-find-variable) - ("Info lookup" . helm-info-lookup-symbol) - ("Set variable" . helm-set-variable)) - :action-transformer - (lambda (actions candidate) - (let ((sym (helm-symbolify candidate))) - (if (custom-variable-p sym) - (append - actions - (let ((standard-value (eval (car (get sym 'standard-value))))) - (unless (equal standard-value (symbol-value sym)) - `(("Reset Variable to default value" . - ,(lambda (candidate) - (let ((sym (helm-symbolify candidate))) - (set sym standard-value))))))) - '(("Customize variable" . - (lambda (candidate) - (customize-option (helm-symbolify candidate)))))) - actions))))) - -(defun helm-def-source--emacs-faces (&optional default) - "Create `helm' source for faces to be displayed with -`helm-apropos'." - (helm-build-in-buffer-source "Faces" - :init (lambda () (helm-apropos-init-faces default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer - (append (and (null helm-apropos-fuzzy-match) - '(helm-apropos-default-sort-fn)) - (list - (lambda (candidates _source) - (cl-loop for c in candidates - collect (propertize c 'face (intern c)))))) - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-face)) - :persistent-help "Describe face" - :nomark t - :action '(("Describe face" . helm-describe-face) - ("Find face" . helm-find-face-definition) - ("Customize face" . (lambda (candidate) - (customize-face (helm-symbolify candidate))))))) - -(defun helm-def-source--helm-attributes (&optional _default) - (let ((def-act (lambda (candidate) - (let (special-display-buffer-names - special-display-regexps - helm-persistent-action-use-special-display) - (with-output-to-temp-buffer "*Help*" - (princ (get (intern candidate) 'helm-attrdoc))))))) - (helm-build-sync-source "Helm attributes" - :candidates (lambda () - (mapcar 'symbol-name helm-attributes)) - :fuzzy-match helm-apropos-fuzzy-match - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate def-act)) - :persistent-help "Describe helm attribute" - :action def-act))) - -(defun helm-def-source--emacs-commands (&optional default) - (helm-build-in-buffer-source "Commands" - :init `(lambda () - (helm-apropos-init 'commandp ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe command" - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-def-source--emacs-functions (&optional default) - (helm-build-in-buffer-source "Functions" - :init `(lambda () - (helm-apropos-init (lambda (x) - (and (fboundp x) - (not (commandp x)) - (not (generic-p x)) - (not (class-p x)))) - ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe function" - :nomark t - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-def-source--eieio-classes (&optional default) - (helm-build-in-buffer-source "Classes" - :init `(lambda () - (helm-apropos-init (lambda (x) - (class-p x)) - ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe class" - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-def-source--eieio-generic (&optional default) - (helm-build-in-buffer-source "Generic functions" - :init `(lambda () - (helm-apropos-init (lambda (x) - (generic-p x)) - ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe generic function" - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-info-lookup-symbol-1 (c) - (let ((helm-execute-action-at-once-if-one t) - (helm-quit-if-no-candidate - `(lambda () - (message "`%s' Not Documented as a symbol" ,c)))) - (helm :sources '(helm-source-info-elisp - helm-source-info-cl - helm-source-info-eieio) - :resume 'noresume - :buffer "*helm lookup*" - :input c))) - -(defun helm-info-lookup-symbol (candidate) - (run-with-timer 0.01 nil #'helm-info-lookup-symbol-1 candidate)) - -(defun helm-elisp--persistent-help (candidate fun &optional name) - (let ((hbuf (get-buffer (help-buffer)))) - (if (and (helm-attr 'help-running-p) - (string= candidate (helm-attr 'help-current-symbol)) - (null helm-persistent-action-use-special-display)) - (progn - ;; When started from a help buffer, - ;; Don't kill this buffer as it is helm-current-buffer. - (unless (equal hbuf helm-current-buffer) - (kill-buffer hbuf) - (set-window-buffer (get-buffer-window hbuf) - helm-current-buffer)) - (helm-attrset 'help-running-p nil)) - (if name (funcall fun candidate name) (funcall fun candidate)) - (helm-attrset 'help-running-p t)) - (helm-attrset 'help-current-symbol candidate))) - -;;;###autoload -(defun helm-apropos () - "Preconfigured helm to describe commands, functions, variables and faces." - (interactive) - (let ((default (thing-at-point 'symbol))) - (helm :sources - (mapcar (lambda (func) - (funcall func default)) - helm-apropos-function-list) - :buffer "*helm apropos*" - :preselect (and default (concat "\\_<" (regexp-quote default) "\\_>"))))) - - -;;; Advices -;; -;; -(defvar helm-source-advice - '((name . "Function Advice") - (candidates . helm-advice-candidates) - (action ("Toggle Enable/Disable" . helm-advice-toggle)) - (persistent-action . helm-advice-persistent-action) - (nomark) - (multiline) - (persistent-help . "Describe function / C-u C-j: Toggle advice"))) - -(defun helm-advice-candidates () - (cl-loop for (fname) in ad-advised-functions - for function = (intern fname) - append - (cl-loop for class in ad-advice-classes append - (cl-loop for advice in (ad-get-advice-info-field function class) - for enabled = (ad-advice-enabled advice) - collect - (cons (format - "%s %s %s" - (if enabled "Enabled " "Disabled") - (propertize fname 'face 'font-lock-function-name-face) - (ad-make-single-advice-docstring advice class nil)) - (list function class advice)))))) - -(defun helm-advice-persistent-action (func-class-advice) - (if current-prefix-arg - (helm-advice-toggle func-class-advice) - (describe-function (car func-class-advice)))) - -(defun helm-advice-toggle (func-class-advice) - (cl-destructuring-bind (function _class advice) func-class-advice - (cond ((ad-advice-enabled advice) - (ad-advice-set-enabled advice nil) - (message "Disabled")) - (t - (ad-advice-set-enabled advice t) - (message "Enabled"))) - (ad-activate function) - (and helm-in-persistent-action - (helm-advice-update-current-display-string)))) - -(defun helm-advice-update-current-display-string () - (helm-edit-current-selection - (let ((newword (cond ((looking-at "Disabled") "Enabled") - ((looking-at "Enabled") "Disabled")))) - (when newword - (delete-region (point) (progn (forward-word 1) (point))) - (insert newword))))) - -;;;###autoload -(defun helm-manage-advice () - "Preconfigured `helm' to disable/enable function advices." - (interactive) - (helm-other-buffer 'helm-source-advice "*helm advice*")) - - -;;; Locate elisp library -;; -;; -(defun helm-locate-library-scan-list () - (cl-loop for dir in load-path - when (file-directory-p dir) - append (directory-files dir t (concat (regexp-opt (get-load-suffixes)) - "\\'")) - into lst - finally return (helm-fast-remove-dups lst :test 'equal))) - -;;;###autoload -(defun helm-locate-library () - "Preconfigured helm to locate elisp libraries." - (interactive) - (helm :sources (helm-build-in-buffer-source "Elisp libraries (Scan)" - :data (lambda () (helm-locate-library-scan-list)) - :fuzzy-match t - :keymap helm-generic-files-map - :match-part (lambda (candidate) - (if helm-ff-transformer-show-only-basename - (helm-basename candidate) candidate)) - :filter-one-by-one (lambda (c) - (if helm-ff-transformer-show-only-basename - (cons (helm-basename c) c) c)) - :action (helm-actions-from-type-file)) - :buffer "*helm locate library*")) - -(defun helm-set-variable (var) - "Set value to VAR interactively." - (let* ((sym (helm-symbolify var)) - (val (default-value sym))) - (set-default sym (eval-minibuffer (format "Set `%s': " var) - (if (or (stringp val) (memq val '(nil t))) - (prin1-to-string val) - (format "'%s" (prin1-to-string val))))))) - - -;;; Elisp Timers. -;; -;; -(defclass helm-absolute-time-timers-class (helm-source-sync helm-type-timers) - ((candidates :initform timer-list) - (allow-dups :initform t) - (candidate-transformer - :initform - (lambda (candidates) - (cl-loop for timer in candidates - collect (cons (helm-elisp--format-timer timer) timer)))))) - -(defvar helm-source-absolute-time-timers - (helm-make-source "Absolute Time Timers" 'helm-absolute-time-timers-class)) - -(defclass helm-idle-time-timers-class (helm-source-sync helm-type-timers) - ((candidates :initform timer-idle-list) - (allow-dups :initform t) - (candidate-transformer - :initform - (lambda (candidates) - (cl-loop for timer in candidates - collect (cons (helm-elisp--format-timer timer) timer)))))) - -(defvar helm-source-idle-time-timers - (helm-make-source "Idle Time Timers" 'helm-idle-time-timers-class)) - -(defun helm-elisp--format-timer (timer) - (format "%s repeat=%s %s(%s)" - (let ((time (timer--time timer))) - (if (timer--idle-delay timer) - (format-time-string "idle-for=%5s" time) - (format-time-string "%m/%d %T" time))) - (or (timer--repeat-delay timer) "nil") - (mapconcat 'identity (split-string - (prin1-to-string (timer--function timer)) - "\n") " ") - (mapconcat 'prin1-to-string (timer--args timer) " "))) - -;;;###autoload -(defun helm-timers () - "Preconfigured `helm' for timers." - (interactive) - (helm :sources '(helm-source-absolute-time-timers - helm-source-idle-time-timers) - :buffer "*helm timers*")) - - -;;; Complex command history -;; -;; -(defun helm-btf--usable-p () - "Return t if current version of `backtrace-frame' accept 2 arguments." - (condition-case nil - (progn (backtrace-frame 1 'condition-case) t) - (wrong-number-of-arguments nil))) - -(if (helm-btf--usable-p) ; Check if BTF accept more than one arg. - ;; Emacs 24.4. - (dont-compile - (defvar helm-sexp--last-sexp nil) - ;; This wont work compiled. - (defun helm-sexp-eval-1 () - (interactive) - (unwind-protect - (progn - ;; Trick called-interactively-p into thinking that `cand' is - ;; an interactive call, See `repeat-complex-command'. - (add-hook 'called-interactively-p-functions - #'helm-complex-command-history--called-interactively-skip) - (eval (read helm-sexp--last-sexp))) - (remove-hook 'called-interactively-p-functions - #'helm-complex-command-history--called-interactively-skip))) - - (defun helm-complex-command-history--called-interactively-skip (i _frame1 frame2) - (and (eq 'eval (cadr frame2)) - (eq 'helm-sexp-eval-1 - (cadr (backtrace-frame (+ i 2) #'called-interactively-p))) - 1)) - - (defun helm-sexp-eval (_candidate) - (call-interactively #'helm-sexp-eval-1))) - ;; Emacs 24.3 - (defun helm-sexp-eval (cand) - (let ((sexp (read cand))) - (condition-case err - (if (> (length (remove nil sexp)) 1) - (eval sexp) - (apply 'call-interactively sexp)) - (error (message "Evaluating gave an error: %S" err) - nil))))) - -(defvar helm-source-complex-command-history - (helm-build-sync-source "Complex Command History" - :candidates (lambda () - ;; Use cdr to avoid adding - ;; `helm-complex-command-history' here. - (cl-loop for i in command-history - unless (equal i '(helm-complex-command-history)) - collect (prin1-to-string i))) - :action (helm-make-actions - "Eval" (lambda (candidate) - (and (boundp 'helm-sexp--last-sexp) - (setq helm-sexp--last-sexp candidate)) - (run-with-timer 0.1 nil #'helm-sexp-eval candidate)) - "Edit and eval" (lambda (candidate) - (edit-and-eval-command "Eval: " (read candidate)))) - :persistent-action #'helm-sexp-eval)) - -;;;###autoload -(defun helm-complex-command-history () - "Preconfigured helm for complex command history." - (interactive) - (helm :sources 'helm-source-complex-command-history - :buffer "*helm complex commands*")) - -(provide 'helm-elisp) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-elisp.el ends here diff --git a/elpa/helm-20160105.2046/helm-elscreen.el b/elpa/helm-20160105.2046/helm-elscreen.el deleted file mode 100644 index ea16b0df..00000000 --- a/elpa/helm-20160105.2046/helm-elscreen.el +++ /dev/null @@ -1,102 +0,0 @@ -;;; helm-elscreen.el -- Elscreen support -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) - -(declare-function elscreen-find-screen-by-buffer "ext:elscreen.el" (buffer &optional create)) -(declare-function elscreen-find-file "ext:elscreen.el" (filename)) -(declare-function elscreen-goto "ext:elscreen.el" (screen)) -(declare-function elscreen-get-conf-list "ext:elscreen.el" (type)) - -(defun helm-find-buffer-on-elscreen (candidate) - "Open buffer in new screen, if marked buffers open all in elscreens." - (helm-require-or-error 'elscreen 'helm-find-buffer-on-elscreen) - (helm-aif (helm-marked-candidates) - (cl-dolist (i it) - (let ((target-screen (elscreen-find-screen-by-buffer - (get-buffer i) 'create))) - (elscreen-goto target-screen))) - (let ((target-screen (elscreen-find-screen-by-buffer - (get-buffer candidate) 'create))) - (elscreen-goto target-screen)))) - -(defun helm-elscreen-find-file (file) - (helm-require-or-error 'elscreen 'helm-elscreen-find-file) - (elscreen-find-file file)) - -(defclass helm-source-elscreen (helm-source-sync) - ((candidates - :initform - (lambda () - (when (cdr (elscreen-get-screen-to-name-alist)) - (cl-sort (cl-loop for (screen . name) in (elscreen-get-screen-to-name-alist) - collect (cons (format "[%d] %s" screen name) screen)) - #'< :key #'cdr)))) - (action :initform - '(("Change Screen" . - (lambda (candidate) - (elscreen-goto candidate))) - ("Kill Screen(s)" . - (lambda (_) - (cl-dolist (i (helm-marked-candidates)) - (elscreen-goto i) - (elscreen-kill)))) - ("Only Screen" . - (lambda (candidate) - (elscreen-goto candidate) - (elscreen-kill-others))))) - (migemo :initform t))) - -(defclass helm-source-elscreen-history (helm-source-elscreen) - ((candidates - :initform - (lambda () - (let ((sname (elscreen-get-screen-to-name-alist))) - (when (cdr sname) - (cl-loop for screen in (cdr (elscreen-get-conf-list 'screen-history)) - collect (cons (format "[%d] %s" screen (cdr (assq screen sname))) - screen)))))))) - -(defvar helm-source-elscreen-list - (helm-make-source "ElScreen" 'helm-source-elscreen)) - -(defvar helm-source-elscreen-history-list - (helm-make-source "ElScreen History" 'helm-source-elscreen-history)) - -;;;###autoload -(defun helm-elscreen () - "Preconfigured helm to list elscreen." - (interactive) - (helm-other-buffer 'helm-source-elscreen-list "*Helm ElScreen*")) - -;;;###autoload -(defun helm-elscreen-history () - "Preconfigured helm to list elscreen in history order." - (interactive) - (helm-other-buffer 'helm-source-elscreen-history-list "*Helm ElScreen*")) - -(provide 'helm-elscreen) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-elscreen.el ends here diff --git a/elpa/helm-20160105.2046/helm-eshell.el b/elpa/helm-20160105.2046/helm-eshell.el deleted file mode 100644 index aa613294..00000000 --- a/elpa/helm-20160105.2046/helm-eshell.el +++ /dev/null @@ -1,268 +0,0 @@ -;;; helm-eshell.el --- pcomplete and eshell completion for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Commentary: -;; -;; Enable like this in .emacs: -;; (add-hook 'eshell-mode-hook -;; (lambda () -;; (eshell-cmpl-initialize) -;; (define-key eshell-mode-map [remap pcomplete] 'helm-esh-pcomplete) -;; (define-key eshell-mode-map (kbd "M-p") 'helm-eshell-history))) - - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-lib) -(require 'helm-help) -(require 'helm-elisp) - -(declare-function eshell-read-aliases-list "em-alias") -(declare-function eshell-send-input "esh-mode" (&optional use-region queue-p no-newline)) -(declare-function eshell-bol "esh-mode") -(declare-function eshell-parse-arguments "esh-arg" (beg end)) -(declare-function eshell-backward-argument "esh-mode" (&optional arg)) -(declare-function helm-quote-whitespace "helm-lib") - - -(defgroup helm-eshell nil - "Helm eshell completion and history." - :group 'helm) - -(defcustom helm-eshell-hist-ignoredups nil - "Same as `eshell-hist-ignoredups' which see but for helm." - :group 'helm-eshell - :type 'boolean) - - -(defvar helm-eshell-history-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-p") 'helm-next-line) - map) - "Keymap for `helm-eshell-history'.") - -(defvar helm-esh-completion-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "TAB") 'helm-next-line) - map) - "Keymap for `helm-esh-pcomplete'.") - - -(defclass helm-esh-source (helm-source-sync) - ((init :initform (lambda () - (setq pcomplete-current-completions nil - pcomplete-last-completion-raw nil) - ;; Eshell-command add this hook in all minibuffers - ;; Remove it for the helm one. (Fixed in Emacs24) - (remove-hook 'minibuffer-setup-hook 'eshell-mode))) - (candidates :initform 'helm-esh-get-candidates) - (nomark :initform t) - (persistent-action :initform 'ignore) - (filtered-candidate-transformer - :initform - (lambda (candidates _sources) - (cl-loop - for i in candidates - collect - (cond ((string-match "\\`~/?" helm-ec-target) - (abbreviate-file-name i)) - ((string-match "\\`/" helm-ec-target) i) - (t - (file-relative-name i))) - into lst - finally return (sort lst 'helm-generic-sort-fn)))) - (action :initform 'helm-ec-insert)) - "Helm class to define source for Eshell completion.") - -;; Internal. -(defvar helm-ec-target "") -(defun helm-ec-insert (candidate) - "Replace text at point with CANDIDATE. -The function that call this should set `helm-ec-target' to thing at point." - (let ((pt (point))) - (when (and helm-ec-target - (search-backward helm-ec-target nil t) - (string= (buffer-substring (point) pt) helm-ec-target)) - (delete-region (point) pt))) - (when (string-match "\\`\\*" helm-ec-target) (insert "*")) - (cond ((string-match "\\`~/?" helm-ec-target) - (insert (helm-quote-whitespace (abbreviate-file-name candidate)))) - ((string-match "\\`/" helm-ec-target) - (insert (helm-quote-whitespace candidate))) - (t - (insert (concat (and (string-match "\\`[.]/" helm-ec-target) "./") - (helm-quote-whitespace - (file-relative-name candidate))))))) - -(defun helm-esh-get-candidates () - "Get candidates for eshell completion using `pcomplete'." - (catch 'pcompleted - (with-helm-current-buffer - (let* ((pcomplete-stub) - pcomplete-seen pcomplete-norm-func - pcomplete-args pcomplete-last pcomplete-index - (pcomplete-autolist pcomplete-autolist) - (pcomplete-suffix-list pcomplete-suffix-list) - (table (pcomplete-completions)) - (entry (or (try-completion helm-pattern - (pcomplete-entries)) - helm-pattern))) - (cl-loop ;; expand entry too to be able to compare it with file-cand. - with exp-entry = (and (stringp entry) - (not (string= entry "")) - (file-name-as-directory - (expand-file-name entry default-directory))) - for i in (all-completions pcomplete-stub table) - ;; Transform the related names to abs names. - for file-cand = (and exp-entry - (if (file-remote-p i) i - (expand-file-name - i (file-name-directory entry)))) - ;; Compare them to avoid dups. - for file-entry-p = (and (stringp exp-entry) - (stringp file-cand) - ;; Fix :/tmp/foo/ $ cd foo - (not (file-directory-p file-cand)) - (file-equal-p exp-entry file-cand)) - if (and file-cand (or (file-remote-p file-cand) - (file-exists-p file-cand)) - (not file-entry-p)) - collect file-cand into ls - else - ;; Avoid adding entry here. - unless file-entry-p collect i into ls - finally return - (if (and exp-entry - (file-directory-p exp-entry) - ;; If the car of completion list is - ;; an executable, probably we are in - ;; command completion, so don't add a - ;; possible file related entry here. - (and ls (not (executable-find (car ls)))) - ;; Don't add entry if already in prompt. - (not (file-equal-p exp-entry pcomplete-stub))) - (append (list exp-entry) - ;; Entry should not be here now but double check. - (remove entry ls)) - ls)))))) - -;;; Eshell history. -;; -;; -(defclass helm-eshell-history-source (helm-source-in-buffer) - ((init :initform - (lambda () - (let ((eshell-hist-ignoredups helm-eshell-hist-ignoredups)) - (eshell-write-history eshell-history-file-name t) - (with-current-buffer (helm-candidate-buffer 'global) - (insert-file-contents eshell-history-file-name))) - ;; Same comment as in `helm-source-esh' - (remove-hook 'minibuffer-setup-hook 'eshell-mode))) - (nomark :initform t) - (keymap :initform helm-eshell-history-map) - (filtered-candidate-transformer :initform (lambda (candidates sources) - (reverse candidates))) - (candidate-number-limit :initform 9999) - (action :initform (lambda (candidate) - (eshell-kill-input) - (insert candidate)))) - "Helm class to define source for Eshell history.") - - -;;;###autoload -(defun helm-esh-pcomplete () - "Preconfigured helm to provide helm completion in eshell." - (interactive) - (let* ((helm-quit-if-no-candidate t) - (helm-execute-action-at-once-if-one t) - (end (point-marker)) - (beg (save-excursion (eshell-bol) (point))) - (args (catch 'eshell-incomplete - (eshell-parse-arguments beg end))) - (target - (or (and (looking-back " " (1- (point))) " ") - (buffer-substring-no-properties - (save-excursion - (eshell-backward-argument 1) (point)) - end))) - (first (car args)) ; Maybe lisp delimiter "(". - last ; Will be the last but parsed by pcomplete. - del-space) - (setq helm-ec-target (or target " ") - end (point) - ;; Reset beg for `with-helm-show-completion'. - beg (or (and target (not (string= target " ")) - (- end (length target))) - ;; Nothing at point. - (progn (insert " ") (setq del-space t) (point)))) - (cond ((eq first ?\() - (helm-lisp-completion-or-file-name-at-point)) - ;; In eshell `pcomplete-parse-arguments' is called - ;; with `pcomplete-parse-arguments-function' - ;; locally bound to `eshell-complete-parse-arguments' - ;; which is calling `lisp-complete-symbol', - ;; calling it before would popup the - ;; *completions* buffer. - (t (setq last (replace-regexp-in-string - "\\`\\*" "" - (car (last (ignore-errors - (pcomplete-parse-arguments)))))) - (with-helm-show-completion beg end - (or (helm :sources (helm-make-source "Eshell completions" 'helm-esh-source) - :buffer "*helm pcomplete*" - :keymap helm-esh-completion-map - :resume 'noresume - :input (and (stringp last) - (helm-ff-set-pattern last))) - (and del-space (looking-back "\\s-" (1- (point))) - (delete-char -1)))))))) - -;;;###autoload -(defun helm-eshell-history () - "Preconfigured helm for eshell history." - (interactive) - (let* ((end (point)) - (beg (save-excursion (eshell-bol) (point))) - (input (buffer-substring beg end)) - flag-empty) - (when (eq beg end) - (insert " ") - (setq flag-empty t) - (setq end (point))) - (unwind-protect - (with-helm-show-completion beg end - (helm :sources (helm-make-source "Eshell history" - 'helm-eshell-history-source) - :buffer "*helm eshell history*" - :resume 'noresume - :input input)) - (when (and flag-empty - (looking-back " " (1- (point)))) - (delete-char -1))))) - -(provide 'helm-eshell) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-eshell ends here diff --git a/elpa/helm-20160105.2046/helm-eval.el b/elpa/helm-20160105.2046/helm-eval.el deleted file mode 100644 index 6f30435a..00000000 --- a/elpa/helm-20160105.2046/helm-eval.el +++ /dev/null @@ -1,204 +0,0 @@ -;;; helm-eval.el --- eval expressions from helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'eldoc) -(require 'edebug) - - -(defgroup helm-eval nil - "Eval related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-eldoc-in-minibuffer-show-fn - 'helm-show-info-in-mode-line - "A function to display eldoc info. -Should take one arg: the string to display." - :group 'helm-eval - :type 'symbol) - -(defcustom helm-show-info-in-mode-line-delay 12 - "Eldoc will show info in mode-line during this delay if user is idle." - :type 'integer - :group 'helm-eval) - - -;;; Eldoc compatibility between emacs-24 and emacs-25 -;; -(if (require 'elisp-mode nil t) ; emacs-25 - ;; Maybe the eldoc functions have been - ;; already aliased by eldoc-eval. - (cl-loop for (f . a) in '((eldoc-current-symbol . - elisp--current-symbol) - (eldoc-fnsym-in-current-sexp . - elisp--fnsym-in-current-sexp) - (eldoc-get-fnsym-args-string . - elisp-get-fnsym-args-string) - (eldoc-get-var-docstring . - elisp-get-var-docstring)) - unless (fboundp f) - do (defalias f a)) - ;; Emacs-24. - (declare-function eldoc-current-symbol "eldoc") - (declare-function eldoc-get-fnsym-args-string "eldoc" (sym &optional index)) - (declare-function eldoc-get-var-docstring "eldoc" (sym)) - (declare-function eldoc-fnsym-in-current-sexp "eldoc")) - -;;; Evaluation Result -;; -;; -;; Internal -(defvar helm-eldoc-active-minibuffers-list nil) - -(defvar helm-eval-expression-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-eval-new-line-and-indent) - (define-key map (kbd "") 'lisp-indent-line) - (define-key map (kbd "") 'helm-lisp-completion-at-point) - (define-key map (kbd "C-p") 'previous-line) - (define-key map (kbd "C-n") 'next-line) - (define-key map (kbd "") 'previous-line) - (define-key map (kbd "") 'next-line) - (define-key map (kbd "") 'forward-char) - (define-key map (kbd "") 'backward-char) - map)) - -(defun helm-build-evaluation-result-source () - (helm-build-dummy-source "Evaluation Result" - :multiline t - :mode-line "C-RET: nl-and-indent, M-tab: reindent, C-tab:complete, C-p/n: next/prec-line." - :filtered-candidate-transformer (lambda (_candidates _source) - (list - (condition-case nil - (with-helm-current-buffer - (pp-to-string - (if edebug-active - (edebug-eval-expression - (read helm-pattern)) - (eval (read helm-pattern))))) - (error "Error")))) - :nohighlight t - :action '(("Copy result to kill-ring" . (lambda (candidate) - (kill-new - (replace-regexp-in-string - "\n" "" candidate)) - (message "Result copied to kill-ring"))) - ("copy sexp to kill-ring" . (lambda (_candidate) - (kill-new helm-input) - (message "Sexp copied to kill-ring")))))) - -(defun helm-eval-new-line-and-indent () - (interactive) - (newline) (lisp-indent-line)) - -(defun helm-eldoc-store-minibuffer () - "Store minibuffer buffer name in `helm-eldoc-active-minibuffers-list'." - (with-selected-window (minibuffer-window) - (push (current-buffer) helm-eldoc-active-minibuffers-list))) - -(defun helm-eldoc-show-in-eval () - "Return eldoc in mode-line for current minibuffer input." - (let ((buf (window-buffer (active-minibuffer-window)))) - (condition-case err - (when (member buf helm-eldoc-active-minibuffers-list) - (with-current-buffer buf - (let* ((sym (save-excursion - (unless (looking-back ")\\|\"" (1- (point))) - (forward-char -1)) - (eldoc-current-symbol))) - (info-fn (eldoc-fnsym-in-current-sexp)) - (doc (or (eldoc-get-var-docstring sym) - (eldoc-get-fnsym-args-string - (car info-fn) (cadr info-fn))))) - (when doc (funcall helm-eldoc-in-minibuffer-show-fn doc))))) - (error (message "Eldoc in minibuffer error: %S" err) nil)))) - -(defun helm-show-info-in-mode-line (str) - "Display string STR in mode-line." - (save-selected-window - (with-current-buffer helm-buffer - (let ((mode-line-format (concat " " str))) - (force-mode-line-update) - (sit-for helm-show-info-in-mode-line-delay)) - (force-mode-line-update)))) - -;;; Calculation Result -;; -;; -(defvar helm-source-calculation-result - (helm-build-dummy-source "Calculation Result" - :filtered-candidate-transformer (lambda (_candidates _source) - (list - (condition-case nil - (calc-eval helm-pattern) - (error "error")))) - :nohighlight t - :action '(("Copy result to kill-ring" . (lambda (candidate) - (kill-new candidate) - (message "Result \"%s\" copied to kill-ring" - candidate))) - ("Copy operation to kill-ring" . (lambda (_candidate) - (kill-new helm-input) - (message "Calculation copied to kill-ring")))))) - -;;;###autoload -(defun helm-eval-expression (arg) - "Preconfigured helm for `helm-source-evaluation-result'." - (interactive "P") - (helm :sources (helm-build-evaluation-result-source) - :input (when arg (thing-at-point 'sexp)) - :buffer "*helm eval*" - :echo-input-in-header-line nil - :history 'read-expression-history - :keymap helm-eval-expression-map)) - -(defvar eldoc-idle-delay) -;;;###autoload -(defun helm-eval-expression-with-eldoc () - "Preconfigured helm for `helm-source-evaluation-result' with `eldoc' support. " - (interactive) - (let ((timer (run-with-idle-timer - eldoc-idle-delay 'repeat - 'helm-eldoc-show-in-eval))) - (unwind-protect - (minibuffer-with-setup-hook - 'helm-eldoc-store-minibuffer - (call-interactively 'helm-eval-expression)) - (and timer (cancel-timer timer)) - (setq helm-eldoc-active-minibuffers-list - (cdr helm-eldoc-active-minibuffers-list))))) - -;;;###autoload -(defun helm-calcul-expression () - "Preconfigured helm for `helm-source-calculation-result'." - (interactive) - (helm :sources 'helm-source-calculation-result - :buffer "*helm calcul*")) - -(provide 'helm-eval) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-eval.el ends here diff --git a/elpa/helm-20160105.2046/helm-external.el b/elpa/helm-20160105.2046/helm-external.el deleted file mode 100644 index 693e1c45..00000000 --- a/elpa/helm-20160105.2046/helm-external.el +++ /dev/null @@ -1,217 +0,0 @@ -;;; helm-external.el --- Run Externals commands within Emacs with helm completion. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-net) - - -(defgroup helm-external nil - "External related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-raise-command nil - "A shell command to jump to a window running specific program. -Need external program wmctrl. -This will be use with `format', so use something like \"wmctrl -xa %s\"." - :type 'string - :group 'helm-external) - -(defcustom helm-external-programs-associations nil - "Alist to store externals programs associated with file extension. -This variable overhide setting in .mailcap file. -e.g : '\(\(\"jpg\" . \"gqview\"\) (\"pdf\" . \"xpdf\"\)\) " - :type '(alist :key-type string :value-type string) - :group 'helm-external) - -(defcustom helm-default-external-file-browser "nautilus" - "Default external file browser for your system. -Directories will be opened externally with it when -opening file externally in `helm-find-files'. -Set to nil if you do not have external file browser -or do not want to use it. -Windows users should set that to \"explorer.exe\"." - :group 'helm-external - :type 'string) - - -;;; Internals -(defvar helm-external-command-history nil) -(defvar helm-external-commands-list nil - "A list of all external commands the user can execute. -If this variable is not set by the user, it will be calculated -automatically.") - -(defun helm-external-commands-list-1 (&optional sort) - "Returns a list of all external commands the user can execute. -If `helm-external-commands-list' is non-nil it will -return its contents. Else it calculates all external commands -and sets `helm-external-commands-list'." - (helm-aif helm-external-commands-list - it - (setq helm-external-commands-list - (cl-loop - for dir in (split-string (getenv "PATH") path-separator) - when (and (file-exists-p dir) (file-accessible-directory-p dir)) - for lsdir = (cl-loop for i in (directory-files dir t) - for bn = (file-name-nondirectory i) - when (and (not (member bn completions)) - (not (file-directory-p i)) - (file-executable-p i)) - collect bn) - append lsdir into completions - finally return - (if sort (sort completions 'string-lessp) completions))))) - -(defun helm-run-or-raise (exe &optional file) - "Generic command that run asynchronously EXE. -If EXE is already running just jump to his window if `helm-raise-command' -is non--nil. -When FILE argument is provided run EXE with FILE. -In this case EXE must be provided as \"EXE %s\"." - (let* ((real-com (car (split-string (replace-regexp-in-string - "%s" "" exe)))) - (proc (if file (concat real-com " " file) real-com)) - process-connection-type) - (if (get-process proc) - (if helm-raise-command - (shell-command (format helm-raise-command real-com)) - (error "Error: %s is already running" real-com)) - (when (cl-loop for i in helm-external-commands-list thereis (string= real-com i)) - (message "Starting %s..." real-com) - (if file - (start-process-shell-command - proc nil (format exe (shell-quote-argument - (if (eq system-type 'windows-nt) - (helm-w32-prepare-filename file) - file)))) - (start-process-shell-command proc nil real-com)) - (set-process-sentinel - (get-process proc) - (lambda (process event) - (when (and (string= event "finished\n") - helm-raise-command - (not (helm-get-pid-from-process-name real-com))) - (shell-command (format helm-raise-command "emacs"))) - (message "%s process...Finished." process)))) - (setq helm-external-commands-list - (cons real-com - (delete real-com helm-external-commands-list)))))) - -(defun helm-get-mailcap-for-file (filename) - "Get the command to use for FILENAME from mailcap files. -The command is like and is meant to use with `format'." - (mailcap-parse-mailcaps) - (let* ((ext (file-name-extension filename)) - (mime (when ext (mailcap-extension-to-mime ext))) - (result (when mime (mailcap-mime-info mime)))) - ;; If elisp file have no associations in .mailcap - ;; `mailcap-maybe-eval' is returned, in this case just return nil. - (when (stringp result) result))) - -(defun helm-get-default-program-for-file (filename) - "Try to find a default program to open FILENAME. -Try first in `helm-external-programs-associations' and then in mailcap file -if nothing found return nil." - (let* ((ext (file-name-extension filename)) - (def-prog (assoc-default ext helm-external-programs-associations))) - (cond ((and def-prog (not (string= def-prog ""))) - (concat def-prog " %s")) - ((and helm-default-external-file-browser - (file-directory-p filename)) - (concat helm-default-external-file-browser " %s")) - (t (helm-get-mailcap-for-file filename))))) - -(defun helm-open-file-externally (file) - "Open FILE with an external program. -Try to guess which program to use with `helm-get-default-program-for-file'. -If not found or a prefix arg is given query the user which tool to use." - (let* ((fname (expand-file-name file)) - (collection (helm-external-commands-list-1 'sort)) - (def-prog (helm-get-default-program-for-file fname)) - (real-prog-name (if (or helm-current-prefix-arg (not def-prog)) - ;; Prefix arg or no default program. - (prog1 - (helm-comp-read - "Program: " collection - :must-match t - :name "Open file Externally" - :del-input nil - :history helm-external-command-history) - ;; Always prompt to set this program as default. - (setq def-prog nil)) - ;; No prefix arg or default program exists. - (replace-regexp-in-string " %s\\| '%s'" "" def-prog))) - (program (concat real-prog-name " %s"))) - (unless (or def-prog ; Association exists, no need to record it. - ;; Don't try to record non--filenames associations (e.g urls). - (not (file-exists-p fname))) - (when - (y-or-n-p - (format - "Do you want to make `%s' the default program for this kind of files? " - real-prog-name)) - (helm-aif (assoc (file-name-extension fname) - helm-external-programs-associations) - (setq helm-external-programs-associations - (delete it helm-external-programs-associations))) - (push (cons (file-name-extension fname) - (helm-read-string - "Program (Add args maybe and confirm): " real-prog-name)) - helm-external-programs-associations) - (customize-save-variable 'helm-external-programs-associations - helm-external-programs-associations))) - (helm-run-or-raise program file) - (setq helm-external-command-history - (cons real-prog-name - (delete real-prog-name - (cl-loop for i in helm-external-command-history - when (executable-find i) collect i)))))) - -;;;###autoload -(defun helm-run-external-command (program) - "Preconfigured `helm' to run External PROGRAM asyncronously from Emacs. -If program is already running exit with error. -You can set your own list of commands with -`helm-external-commands-list'." - (interactive (list - (helm-comp-read - "RunProgram: " - (helm-external-commands-list-1 'sort) - :must-match t - :del-input nil - :name "External Commands" - :history helm-external-command-history))) - (helm-run-or-raise program) - (setq helm-external-command-history - (cons program (delete program - (cl-loop for i in helm-external-command-history - when (executable-find i) collect i))))) - - -(provide 'helm-external) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-external ends here diff --git a/elpa/helm-20160105.2046/helm-files.el b/elpa/helm-20160105.2046/helm-files.el deleted file mode 100644 index 48f38117..00000000 --- a/elpa/helm-20160105.2046/helm-files.el +++ /dev/null @@ -1,3449 +0,0 @@ -;;; helm-files.el --- helm file browser and related. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-external) -(require 'helm-grep) -(require 'helm-help) -(require 'helm-locate) -(require 'helm-bookmark) -(require 'helm-tags) -(require 'helm-buffers) -(require 'thingatpt) -(require 'ffap) -(require 'dired-aux) -(require 'dired-x) -(require 'tramp) -(require 'image-dired) - -(declare-function find-library-name "find-func.el" (library)) -(declare-function w32-shell-execute "ext:w32fns.c" (operation document &optional parameters show-flag)) -(declare-function gnus-dired-attach "ext:gnus-dired.el" (files-to-attach)) -(declare-function image-dired-display-image "image-dired.el" (file &optional original-size)) -(declare-function image-dired-update-property "image-dired.el" (prop value)) -(declare-function eshell-read-aliases-list "em-alias") -(declare-function eshell-send-input "esh-mode" (&optional use-region queue-p no-newline)) -(declare-function eshell-kill-input "esh-mode") -(declare-function eshell-bol "esh-mode") -(declare-function eshell-quote-argument "esh-arg.el") -(declare-function helm-ls-git-ls "ext:helm-ls-git") -(declare-function helm-hg-find-files-in-project "ext:helm-ls-hg") -(declare-function helm-gid "helm-id-utils.el") -(declare-function helm-ls-svn-ls "ext:helm-ls-svn") - -(defvar recentf-list) -(defvar helm-mm-matching-method) - - -(defgroup helm-files nil - "Files applications and libraries for Helm." - :group 'helm) - -(defcustom helm-boring-file-regexp-list - (mapcar (lambda (f) - (concat - (rx-to-string - (replace-regexp-in-string - "/$" "" f) t) "$")) - completion-ignored-extensions) - "The regexp list matching boring files." - :group 'helm-files - :type '(repeat (choice regexp))) - -(defcustom helm-for-files-preferred-list - '(helm-source-buffers-list - helm-source-recentf - helm-source-bookmarks - helm-source-file-cache - helm-source-files-in-current-dir - helm-source-locate) - "Your preferred sources to find files." - :type '(repeat (choice symbol)) - :group 'helm-files) - -(defcustom helm-tramp-verbose 0 - "Just like `tramp-verbose' but specific to helm. -When set to 0 don't show tramp messages in helm. -If you want to have the default tramp messages set it to 3." - :type 'integer - :group 'helm-files) - -(defcustom helm-ff-auto-update-initial-value nil - "Auto update when only one candidate directory is matched. -Default value when starting `helm-find-files' is nil because -it prevent using to delete char backward and by the way -confuse beginners. -For a better experience with `helm-find-files' set this to non--nil -and use C- to toggle it." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-lynx-style-map t - "Use arrow keys to navigate with `helm-find-files'. -You will have to restart Emacs or reeval `helm-find-files-map' -and `helm-read-file-map' for this take effect." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-history-max-length 100 - "Number of elements shown in `helm-find-files' history." - :group 'helm-files - :type 'integer) - -(defcustom helm-ff-fuzzy-matching t - "Enable fuzzy matching for `helm-find-files' when non--nil. -See `helm-ff--transform-pattern-for-completion' for more info." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-tramp-not-fancy t - "No colors when listing remote files when set to non--nil. -This make listing much faster, specially on slow machines." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-exif-data-program "exiftran" - "Program used to extract exif data of an image file." - :group 'helm-files - :type 'string) - -(defcustom helm-ff-exif-data-program-args "-d" - "Arguments used for `helm-ff-exif-data-program'." - :group 'helm-files - :type 'string) - -(defcustom helm-ff-newfile-prompt-p t - "Whether Prompt or not when creating new file. -This set `ffap-newfile-prompt'." - :type 'boolean - :group 'helm-files) - -(defcustom helm-ff-avfs-directory "~/.avfs" - "The default avfs directory, usually '~/.avfs'. -When this is set you will be able to expand archive filenames with `C-j' -inside an avfs directory mounted with mountavfs. -See ." - :type 'string - :group 'helm-files) - -(defcustom helm-ff-file-compressed-list '("gz" "bz2" "zip" "7z") - "Minimal list of compressed files extension." - :type '(repeat (choice string)) - :group 'helm-files) - -(defcustom helm-ff-printer-list nil - "A list of available printers on your system. -When non--nil let you choose a printer to print file. -Otherwise when nil the variable `printer-name' will be used. -On Unix based systems (lpstat command needed) you don't need to set this, -`helm-ff-find-printers' will find a list of available printers for you." - :type '(repeat (choice string)) - :group 'helm-files) - -(defcustom helm-ff-transformer-show-only-basename t - "Show only basename of candidates in `helm-find-files'. -This can be toggled at anytime from `helm-find-files' with \ -\\\\[helm-ff-run-toggle-basename]." - :type 'boolean - :group 'helm-files) - -(defcustom helm-ff-signal-error-on-dot-files t - "Signal error when file is `.' or `..' on file deletion when non--nil. -Default is non--nil. -WARNING: Setting this to nil is unsafe and can cause deletion of a whole tree." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-search-library-in-sexp nil - "Search for library in `require' and `declare-function' sexp." - :group 'helm-files - :type 'boolean) - -(defcustom helm-tooltip-hide-delay 25 - "Hide tooltips automatically after this many seconds." - :group 'helm-files - :type 'integer) - -(defcustom helm-ff-file-name-history-use-recentf nil - "Use `recentf-list' instead of `file-name-history' in `helm-find-files'." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-skip-boring-files nil - "Non--nil to skip files matching regexps in `helm-boring-file-regexp-list'. -This take effect in `helm-find-files' and file completion used by `helm-mode' -i.e `helm-read-file-name'." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-candidate-number-limit 5000 - "The `helm-candidate-number-limit' for `helm-find-files', `read-file-name' and friends." - :group 'helm-files - :type 'integer) - -(defcustom helm-findutils-skip-boring-files t - "Ignore files matching regexps in `completion-ignored-extensions'." - :group 'helm-files - :type 'boolean) - -(defcustom helm-findutils-search-full-path nil - "Search in full path with shell command find when non--nil. -I.e use the -path/ipath arguments of find instead of -name/iname." - :group 'helm-files - :type 'boolean) - -(defcustom helm-files-save-history-extra-sources - '("Find" "Locate" "Recentf" - "Files from Current Directory" "File Cache") - "Extras source that save candidate to `file-name-history'." - :group 'helm-files - :type '(repeat (choice string))) - -(defcustom helm-find-files-before-init-hook nil - "Hook that run before initialization of `helm-find-files'." - :group 'helm-files - :type 'hook) - -(defcustom helm-find-files-after-init-hook nil - "Hook that run after initialization of `helm-find-files'." - :group 'helm-files - :type 'hook) - -(defcustom helm-multi-files-toggle-locate-binding "C-c p" - "Default binding to switch back and forth locate in `helm-multi-files'." - :group 'helm-files - :type 'string) - -(defcustom helm-find-files-bookmark-prefix "Helm-find-files: " - "bookmark name prefix of `helm-find-files' sessions." - :group 'helm-files - :type 'string) - -(defcustom helm-ff-guess-ffap-filenames nil - "Use ffap to guess local filenames at point in `helm-find-files'. -This doesn't disable url or mail at point, see -`helm-ff-guess-ffap-urls' for this." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-guess-ffap-urls t - "Use ffap to guess local urls at point in `helm-find-files'. -This doesn't disable guessing filenames at point, -see `helm-ff-guess-ffap-filenames' for this." - :group 'helm-files - :type 'boolean) - -;;; Faces -;; -;; -(defgroup helm-files-faces nil - "Customize the appearance of helm-files." - :prefix "helm-" - :group 'helm-files - :group 'helm-faces) - -(defface helm-ff-prefix - '((t (:background "yellow" :foreground "black"))) - "Face used to prefix new file or url paths in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-executable - '((t (:foreground "green"))) - "Face used for executable files in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-directory - '((t (:foreground "DarkRed" :background "LightGray"))) - "Face used for directories in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-dotted-directory - '((t (:foreground "black" :background "DimGray"))) - "Face used for dotted directories in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-dotted-symlink-directory - '((t (:foreground "DarkOrange" :background "DimGray"))) - "Face used for dotted symlinked directories in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-symlink - '((t (:foreground "DarkOrange"))) - "Face used for symlinks in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-invalid-symlink - '((t (:foreground "black" :background "red"))) - "Face used for invalid symlinks in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-file - '((t (:inherit font-lock-builtin-face))) - "Face used for file names in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-history-deleted - '((t (:inherit helm-ff-invalid-symlink))) - "Face used for deleted files in `file-name-history'." - :group 'helm-files-faces) - -(defface helm-history-remote - '((t (:foreground "Indianred1"))) - "Face used for remote files in `file-name-history'." - :group 'helm-files-faces) - - -;;; Helm-find-files - The helm file browser. -;; -;; Keymaps -(defvar helm-find-files-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-]") 'helm-ff-run-toggle-basename) - (define-key map (kbd "C-x C-f") 'helm-ff-run-locate) - (define-key map (kbd "C-x C-d") 'helm-ff-run-browse-project) - (define-key map (kbd "C-x r m") 'helm-ff-bookmark-set) - (define-key map (kbd "C-x r b") 'helm-find-files-toggle-to-bookmark) - (define-key map (kbd "C-s") 'helm-ff-run-grep) - (define-key map (kbd "M-g s") 'helm-ff-run-grep) - (define-key map (kbd "M-g p") 'helm-ff-run-pdfgrep) - (define-key map (kbd "M-g z") 'helm-ff-run-zgrep) - (define-key map (kbd "M-g a") 'helm-ff-run-grep-ag) - (define-key map (kbd "M-g g") 'helm-ff-run-git-grep) - (define-key map (kbd "C-c g") 'helm-ff-run-gid) - (define-key map (kbd "M-.") 'helm-ff-run-etags) - (define-key map (kbd "M-R") 'helm-ff-run-rename-file) - (define-key map (kbd "M-C") 'helm-ff-run-copy-file) - (define-key map (kbd "M-B") 'helm-ff-run-byte-compile-file) - (define-key map (kbd "M-L") 'helm-ff-run-load-file) - (define-key map (kbd "M-S") 'helm-ff-run-symlink-file) - (define-key map (kbd "M-H") 'helm-ff-run-hardlink-file) - (define-key map (kbd "M-D") 'helm-ff-run-delete-file) - (define-key map (kbd "M-K") 'helm-ff-run-kill-buffer-persistent) - (define-key map (kbd "C-c d") 'helm-ff-persistent-delete) - (define-key map (kbd "M-e") 'helm-ff-run-switch-to-eshell) - (define-key map (kbd "C-c i") 'helm-ff-run-complete-fn-at-point) - (define-key map (kbd "C-c o") 'helm-ff-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-ff-run-switch-other-frame) - (define-key map (kbd "C-c C-x") 'helm-ff-run-open-file-externally) - (define-key map (kbd "C-c X") 'helm-ff-run-open-file-with-default-tool) - (define-key map (kbd "M-!") 'helm-ff-run-eshell-command-on-file) - (define-key map (kbd "M-%") 'helm-ff-run-query-replace-on-marked) - (define-key map (kbd "C-c =") 'helm-ff-run-ediff-file) - (define-key map (kbd "M-=") 'helm-ff-run-ediff-merge-file) - (define-key map (kbd "M-p") 'helm-ff-run-switch-to-history) - (define-key map (kbd "C-c h") 'helm-ff-file-name-history) - (define-key map (kbd "M-i") 'helm-ff-properties-persistent) - (define-key map (kbd "C-}") 'helm-narrow-window) - (define-key map (kbd "C-{") 'helm-enlarge-window) - (define-key map (kbd "C-") 'helm-ff-run-toggle-auto-update) - (define-key map (kbd "C-c ") 'helm-ff-run-toggle-auto-update) - (define-key map (kbd "C-c C-a") 'helm-ff-run-gnus-attach-files) - (define-key map (kbd "C-c p") 'helm-ff-run-print-file) - (define-key map (kbd "C-c /") 'helm-ff-run-find-sh-command) - ;; Next 2 have no effect if candidate is not an image file. - (define-key map (kbd "M-l") 'helm-ff-rotate-left-persistent) - (define-key map (kbd "M-r") 'helm-ff-rotate-right-persistent) - (define-key map (kbd "C-l") 'helm-find-files-up-one-level) - (define-key map (kbd "C-r") 'helm-find-files-down-last-level) - (define-key map (kbd "C-c r") 'helm-ff-run-find-file-as-root) - (define-key map (kbd "C-x C-v") 'helm-ff-run-find-alternate-file) - (define-key map (kbd "C-c @") 'helm-ff-run-insert-org-link) - (helm-define-key-with-subkeys map (kbd "DEL") ?\d 'helm-ff-delete-char-backward - nil nil 'helm-ff-delete-char-backward--exit-fn) - (when helm-ff-lynx-style-map - (define-key map (kbd "") 'helm-find-files-up-one-level) - (define-key map (kbd "") 'helm-execute-persistent-action)) - (delq nil map)) - "Keymap for `helm-find-files'.") - -(defvar helm-read-file-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-cr-empty-string) - (define-key map (kbd "") 'helm-cr-empty-string) - (define-key map (kbd "C-]") 'helm-ff-run-toggle-basename) - (define-key map (kbd "C-.") 'helm-find-files-up-one-level) - (define-key map (kbd "C-l") 'helm-find-files-up-one-level) - (define-key map (kbd "C-r") 'helm-find-files-down-last-level) - (define-key map (kbd "C-c h") 'helm-ff-file-name-history) - (define-key map (kbd "C-") 'helm-ff-run-toggle-auto-update) - (define-key map (kbd "C-c ") 'helm-ff-run-toggle-auto-update) - (helm-define-key-with-subkeys map (kbd "DEL") ?\d 'helm-ff-delete-char-backward - nil nil 'helm-ff-delete-char-backward--exit-fn) - (when helm-ff-lynx-style-map - (define-key map (kbd "") 'helm-find-files-up-one-level) - (define-key map (kbd "") 'helm-execute-persistent-action) - (define-key map (kbd "") 'helm-previous-source) - (define-key map (kbd "") 'helm-next-source)) - (delq nil map)) - "Keymap for `helm-read-file-name'.") - - -;; Internal. -(defvar helm-find-files-doc-header " (\\\\[helm-find-files-up-one-level]: Go up one level)" - "*The doc that is inserted in the Name header of a find-files or dired source.") -(defvar helm-ff-auto-update-flag nil - "Internal, flag to turn on/off auto-update in `helm-find-files'. -Don't set it directly, use instead `helm-ff-auto-update-initial-value'.") -(defvar helm-ff-last-expanded nil - "Store last expanded directory or file.") -(defvar helm-ff-default-directory nil) -(defvar helm-ff-history nil) -(defvar helm-ff-cand-to-mark nil) -(defvar helm-ff-url-regexp - "\\`\\(news\\(post\\)?:\\|nntp:\\|mailto:\\|file:\\|\\(ftp\\|https?\\|telnet\\|gopher\\|www\\|wais\\):/?/?\\).*" - "Same as `ffap-url-regexp' but match earlier possible url.") -(defvar helm-tramp-file-name-regexp "\\`/\\([^[/:]+\\|[^/]+]\\):") -(defvar helm-marked-buffer-name "*helm marked*") -(defvar helm-ff--auto-update-state nil) -(defvar helm-ff--deleting-char-backward nil) -(defvar helm-multi-files--toggle-locate nil) -(defvar helm-ff--move-to-first-real-candidate t) -(defvar helm-find-files--toggle-bookmark nil) - - -;;; Helm-find-files -;; -;; -(defcustom helm-find-files-actions - (helm-make-actions - "Find File" 'helm-find-file-or-marked - "Find file in Dired" 'helm-point-file-in-dired - (lambda () (and (locate-library "elscreen") "Find file in Elscreen")) - 'helm-elscreen-find-file - "View file" 'view-file - "Checksum File" 'helm-ff-checksum - "Query replace fnames on marked" 'helm-ff-query-replace-on-marked - "Query replace contents on marked" 'helm-ff-query-replace - "Query replace regexp contents on marked" 'helm-ff-query-replace-regexp - "Serial rename files" 'helm-ff-serial-rename - "Serial rename by symlinking files" 'helm-ff-serial-rename-by-symlink - "Serial rename by copying files" 'helm-ff-serial-rename-by-copying - "Open file with default tool" 'helm-open-file-with-default-tool - "Find file in hex dump" 'hexl-find-file - "Browse project" 'helm-ff-browse-project - "Complete at point `C-c i'" 'helm-insert-file-name-completion-at-point - "Insert as org link `C-c @'" 'helm-files-insert-as-org-link - "Find shell command `C-c /'" 'helm-ff-find-sh-command - "Add marked files to file-cache" 'helm-ff-cache-add-file - "Open file externally `C-c C-x, C-u to choose'" 'helm-open-file-externally - "Grep File(s) `C-s, C-u Recurse'" 'helm-find-files-grep - "Grep current directory with AG" 'helm-find-files-ag - "Git grep" 'helm-ff-git-grep - "Zgrep File(s) `M-g z, C-u Recurse'" 'helm-ff-zgrep - "Gid" 'helm-ff-gid - "Switch to Eshell `M-e'" 'helm-ff-switch-to-eshell - "Etags `M-., C-u reload tag file'" 'helm-ff-etags-select - "Eshell command on file(s) `M-!, C-u take all marked as arguments.'" - 'helm-find-files-eshell-command-on-file - "Find file as root `C-c r'" 'helm-find-file-as-root - "Find alternate file" 'find-alternate-file - "Ediff File `C-='" 'helm-find-files-ediff-files - "Ediff Merge File `C-c ='" 'helm-find-files-ediff-merge-files - "Delete File(s) `M-D'" 'helm-delete-marked-files - "Copy file(s) `M-C, C-u to follow'" 'helm-find-files-copy - "Rename file(s) `M-R, C-u to follow'" 'helm-find-files-rename - "Symlink files(s) `M-S, C-u to follow'" 'helm-find-files-symlink - "Relsymlink file(s) `C-u to follow'" 'helm-find-files-relsymlink - "Hardlink file(s) `M-H, C-u to follow'" 'helm-find-files-hardlink - "Find file other window `C-c o'" 'helm-find-files-other-window - "Switch to history `M-p'" 'helm-find-files-switch-to-hist - "Find file other frame `C-c C-o'" 'find-file-other-frame - "Print File `C-c p, C-u to refresh'" 'helm-ff-print - "Locate `C-x C-f, C-u to specify locate db'" 'helm-ff-locate) - "Actions for `helm-find-files'." - :group 'helm-files - :type '(alist :key-type string :value-type function)) - -(defvar helm-source-find-files nil - "The main source to browse files. -Should not be used among other sources.") - -(defclass helm-source-ffiles (helm-source-sync) - ((header-name - :initform (lambda (name) - (concat name (substitute-command-keys - helm-find-files-doc-header)))) - (init - :initform (lambda () - (setq helm-ff-auto-update-flag - helm-ff-auto-update-initial-value) - (setq helm-ff--auto-update-state - helm-ff-auto-update-flag) - (helm-set-local-variable 'bookmark-make-record-function - #'helm-ff-make-bookmark-record))) - (candidates :initform 'helm-find-files-get-candidates) - (filtered-candidate-transformer :initform 'helm-ff-sort-candidates) - (filter-one-by-one :initform 'helm-ff-filter-candidate-one-by-one) - (persistent-action :initform 'helm-find-files-persistent-action) - (persistent-help :initform "Hit1 Expand Candidate, Hit2 or (C-u) Find file") - (help-message :initform 'helm-ff-help-message) - (volatile :initform t) - (migemo :initform t) - (nohighlight :initform t) - (keymap :initform helm-find-files-map) - (candidate-number-limit :initform 'helm-ff-candidate-number-limit) - (action-transformer - :initform 'helm-find-files-action-transformer) - (action :initform 'helm-find-files-actions) - (before-init-hook :initform 'helm-find-files-before-init-hook) - (after-init-hook :initform 'helm-find-files-after-init-hook))) - -;; Bookmark handlers. -;; -(defun helm-ff-make-bookmark-record () - "The `bookmark-make-record-function' for `helm-find-files'." - (with-helm-buffer - `((filename . ,helm-ff-default-directory) - (presel . ,(helm-get-selection)) - (handler . helm-ff-bookmark-jump)))) - -(defun helm-ff-bookmark-jump (bookmark) - "bookmark handler for `helm-find-files'." - (let ((fname (bookmark-prop-get bookmark 'filename)) - (presel (bookmark-prop-get bookmark 'presel))) - (helm-find-files-1 fname (if helm-ff-transformer-show-only-basename - (helm-basename presel) - presel)))) - -(defun helm-ff-bookmark-set () - "Record `helm-find-files' session in bookmarks." - (interactive) - (with-helm-buffer - (bookmark-set - (concat helm-find-files-bookmark-prefix - (abbreviate-file-name helm-ff-default-directory)))) - (message "Helm find files session bookmarked! ")) - -(defun helm-dwim-target-directory () - "Return value of `default-directory' of buffer in other window. -If there is only one window return the value ot `default-directory' -for current buffer." - (with-helm-current-buffer - (let ((num-windows (length (remove (get-buffer-window helm-marked-buffer-name) - (window-list))))) - (expand-file-name - (if (> num-windows 1) - (save-selected-window - (other-window 1) - default-directory) - ;; Using the car of *ff-history allow - ;; allow staying in the directory visited instead of current. - (or (car-safe helm-ff-history) default-directory)))))) - -(defun helm-find-files-do-action (action) - "Generic function for creating actions from `helm-source-find-files'. -ACTION must be an action supported by `helm-dired-action'." - (let* ((ifiles (mapcar 'expand-file-name ; Allow modify '/foo/.' -> '/foo' - (helm-marked-candidates :with-wildcard t))) - (cand (helm-get-selection)) ; Target - (prompt (format "%s %s file(s) to: " - (capitalize (symbol-name action)) - (length ifiles))) - helm-ff--move-to-first-real-candidate - (helm-always-two-windows t) - (helm-reuse-last-window-split-state t) - (helm-split-window-default-side - (eq helm-split-window-default-side 'same)) - helm-split-window-in-side-p - (parg helm-current-prefix-arg) - helm-display-source-at-screen-top ; prevent setting window-start. - helm-ff-auto-update-initial-value - (dest (with-helm-display-marked-candidates - helm-marked-buffer-name - (mapcar (lambda (f) - (if (file-directory-p f) - (concat (helm-basename f) "/") - (helm-basename f))) - ifiles) - (with-helm-current-buffer - (helm-read-file-name - prompt - :preselect (unless (cdr ifiles) - (if helm-ff-transformer-show-only-basename - (helm-basename cand) cand)) - :initial-input (helm-dwim-target-directory) - :history (helm-find-files-history :comp-read nil)))))) - (helm-dired-action - dest :files ifiles :action action :follow parg))) - -(defun helm-find-files-copy (_candidate) - "Copy files from `helm-find-files'." - (helm-find-files-do-action 'copy)) - -(defun helm-find-files-rename (_candidate) - "Rename files from `helm-find-files'." - (helm-find-files-do-action 'rename)) - -(defun helm-find-files-symlink (_candidate) - "Symlink files from `helm-find-files'." - (helm-find-files-do-action 'symlink)) - -(defun helm-find-files-relsymlink (_candidate) - "Relsymlink files from `helm-find-files'." - (helm-find-files-do-action 'relsymlink)) - -(defun helm-find-files-hardlink (_candidate) - "Hardlink files from `helm-find-files'." - (helm-find-files-do-action 'hardlink)) - -(defun helm-find-files-other-window (_candidate) - "Keep current-buffer and open files in separate windows." - (let* ((files (helm-marked-candidates)) - (buffers (mapcar 'find-file-noselect files))) - (switch-to-buffer-other-window (car buffers)) - (helm-aif (cdr buffers) - (save-selected-window - (cl-loop for buffer in it - do (progn - (select-window (split-window)) - (switch-to-buffer buffer))))))) - -(defun helm-find-files-byte-compile (_candidate) - "Byte compile elisp files from `helm-find-files'." - (let ((files (helm-marked-candidates :with-wildcard t)) - (parg helm-current-prefix-arg)) - (cl-loop for fname in files - do (byte-compile-file fname parg)))) - -(defun helm-find-files-load-files (_candidate) - "Load elisp files from `helm-find-files'." - (let ((files (helm-marked-candidates :with-wildcard t))) - (cl-loop for fname in files - do (load fname)))) - -(defun helm-find-files-ediff-files-1 (candidate &optional merge) - "Generic function to ediff/merge files in `helm-find-files'." - (let* ((bname (helm-basename candidate)) - (marked (helm-marked-candidates :with-wildcard t)) - (prompt (if merge "Ediff Merge `%s' With File: " - "Ediff `%s' With File: ")) - (fun (if merge 'ediff-merge-files 'ediff-files)) - (input (helm-dwim-target-directory)) - (presel (if helm-ff-transformer-show-only-basename - (helm-basename candidate) - (expand-file-name - (helm-basename candidate) - input)))) - (if (= (length marked) 2) - (funcall fun (car marked) (cadr marked)) - (funcall fun candidate (helm-read-file-name - (format prompt bname) - :initial-input input - :preselect presel))))) - -(defun helm-find-files-ediff-files (candidate) - (helm-find-files-ediff-files-1 candidate)) - -(defun helm-find-files-ediff-merge-files (candidate) - (helm-find-files-ediff-files-1 candidate 'merge)) - -(defun helm-find-files-grep (_candidate) - "Default action to grep files from `helm-find-files'." - (helm-do-grep-1 (helm-marked-candidates :with-wildcard t) - helm-current-prefix-arg)) - -(defun helm-ff-git-grep (_candidate) - "Default action to git-grep `helm-ff-default-directory'." - (helm-grep-git-1 helm-ff-default-directory helm-current-prefix-arg)) - -(defun helm-find-files-ag (_candidate) - (helm-grep-ag-1 helm-ff-default-directory)) - -(defun helm-ff-zgrep (_candidate) - "Default action to zgrep files from `helm-find-files'." - (helm-ff-zgrep-1 (helm-marked-candidates :with-wildcard t) helm-current-prefix-arg)) - -(defun helm-ff-pdfgrep (_candidate) - "Default action to pdfgrep files from `helm-find-files'." - (let ((cands (cl-loop for file in (helm-marked-candidates :with-wildcard t) - if (or (string= (file-name-extension file) "pdf") - (string= (file-name-extension file) "PDF")) - collect file)) - (helm-pdfgrep-default-function 'helm-pdfgrep-init)) - (when cands - (helm-do-pdfgrep-1 cands)))) - -(defun helm-ff-etags-select (candidate) - "Default action to jump to etags from `helm-find-files'." - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (let* ((source-name (assoc-default 'name (helm-get-current-source))) - (default-directory (if (string= source-name "Find Files") - helm-ff-default-directory - (file-name-directory candidate)))) - (helm-etags-select helm-current-prefix-arg))) - -(defun helm-find-files-switch-to-hist (_candidate) - "Switch to helm-find-files history." - (helm-find-files t)) - -(defvar eshell-command-aliases-list nil) -(defvar helm-eshell-command-on-file-input-history nil) -(defun helm-find-files-eshell-command-on-file-1 (&optional map) - "Run `eshell-command' on CANDIDATE or marked candidates. -This is done possibly with an eshell alias, if no alias found, you can type in -an eshell command. - -Basename of CANDIDATE can be a wild-card. -e.g you can do \"eshell-command command *.el\" -Where \"*.el\" is the CANDIDATE. - -It is possible to do eshell-command command -like this: \"command %s some more args\". - -If MAP is given run `eshell-command' on all marked files at once, -Otherwise, run `eshell-command' on each marked files. -In other terms, with a prefix arg do on the three marked files -\"foo\" \"bar\" \"baz\": - -\"eshell-command command foo bar baz\" - -otherwise do - -\"eshell-command command foo\" -\"eshell-command command bar\" -\"eshell-command command baz\" - -Note: -If `eshell' or `eshell-command' have not been run once, -or if you have no eshell aliases `eshell-command-aliases-list' -will not be loaded first time you use this." - (when (or eshell-command-aliases-list - (y-or-n-p "Eshell is not loaded, run eshell-command without alias anyway? ")) - (and eshell-command-aliases-list (eshell-read-aliases-list)) - (let* ((cand-list (helm-marked-candidates)) - (default-directory (or helm-ff-default-directory - ;; If candidate is an url *-ff-default-directory is nil - ;; so keep value of default-directory. - default-directory)) - (command (helm-comp-read - "Command: " - (cl-loop for (a . c) in eshell-command-aliases-list - when (string-match "\\(\\$1\\|\\$\\*\\)$" (car c)) - collect (propertize a 'help-echo (car c)) into ls - finally return (sort ls 'string<)) - :buffer "*helm eshell on file*" - :name "Eshell command" - :mode-line - '("Eshell alias" - "C-h m: Help, \\[universal-argument]: Insert output at point") - :help-message 'helm-esh-help-message - :input-history - 'helm-eshell-command-on-file-input-history)) - (alias-value (car (assoc-default command eshell-command-aliases-list))) - cmd-line) - (if (or (equal helm-current-prefix-arg '(16)) - (equal map '(16))) - ;; Two time C-u from `helm-comp-read' mean print to current-buffer. - ;; i.e `eshell-command' will use this value. - (setq current-prefix-arg '(16)) - ;; Else reset the value of `current-prefix-arg' - ;; to avoid printing in current-buffer. - (setq current-prefix-arg nil)) - (if (and (or - ;; One prefix-arg have been passed before `helm-comp-read'. - ;; If map have been set with C-u C-u (value == '(16)) - ;; ignore it. - (and map (equal map '(4))) - ;; One C-u from `helm-comp-read'. - (equal helm-current-prefix-arg '(4)) - ;; An alias that finish with $* - (and alias-value - ;; If command is an alias be sure it accept - ;; more than one arg i.e $*. - (string-match "\\$\\*$" alias-value))) - (cdr cand-list)) - - ;; Run eshell-command with ALL marked files as arguments. - ;; This wont work on remote files, because tramp handlers depends - ;; on `default-directory' (limitation). - (let ((mapfiles (mapconcat 'eshell-quote-argument cand-list " "))) - (if (string-match "'%s'\\|\"%s\"\\|%s" command) - (setq cmd-line (format command mapfiles)) ; See [1] - (setq cmd-line (format "%s %s" command mapfiles))) - (helm-log "%S" cmd-line) - (eshell-command cmd-line)) - - ;; Run eshell-command on EACH marked files. - ;; To work with tramp handler we have to call - ;; COMMAND on basename of each file, using - ;; its basedir as `default-directory'. - (cl-loop for f in cand-list - for dir = (and (not (string-match ffap-url-regexp f)) - (helm-basedir f)) - for file = (eshell-quote-argument - (format "%s" (if (and dir (file-remote-p dir)) - (helm-basename f) f))) - for com = (if (string-match "'%s'\\|\"%s\"\\|%s" command) - ;; [1] This allow to enter other args AFTER filename - ;; i.e - (format command file) - (format "%s %s" command file)) - do (let ((default-directory (or dir default-directory))) - (eshell-command com))))))) - -(defun helm-find-files-eshell-command-on-file (_candidate) - "Run `eshell-command' on CANDIDATE or marked candidates. -See `helm-find-files-eshell-command-on-file-1' for more info." - (helm-find-files-eshell-command-on-file-1 helm-current-prefix-arg)) - -(defun helm-ff-switch-to-eshell (_candidate) - "Switch to eshell and cd to `helm-ff-default-directory'." - (let ((cd-eshell (lambda () - (eshell-kill-input) - (goto-char (point-max)) - (insert - (format "cd '%s'" helm-ff-default-directory)) - (eshell-send-input)))) - (if (get-buffer "*eshell*") - (switch-to-buffer "*eshell*") - (call-interactively 'eshell)) - (unless (get-buffer-process (current-buffer)) - (funcall cd-eshell)))) - -(defun helm-ff-serial-rename-action (method) - "Rename all marked files in `helm-ff-default-directory' with METHOD. -See `helm-ff-serial-rename-1'." - (let* ((helm--reading-passwd-or-string t) - (cands (helm-marked-candidates :with-wildcard t)) - (def-name (car cands)) - (name (helm-read-string "NewName: " - (replace-regexp-in-string - "[0-9]+$" "" - (helm-basename - def-name - (file-name-extension def-name))))) - (start (read-number "StartAtNumber: ")) - (extension (helm-read-string "Extension: " - (file-name-extension (car cands)))) - (dir (expand-file-name - (helm-read-file-name - "Serial Rename to directory: " - :initial-input - (expand-file-name helm-ff-default-directory) - :test 'file-directory-p - :must-match t))) - done) - (with-helm-display-marked-candidates - helm-marked-buffer-name (mapcar 'helm-basename cands) - (if (y-or-n-p - (format "Rename %s file(s) to <%s> like this ?\n%s " - (length cands) dir (format "%s <-> %s%s.%s" - (helm-basename (car cands)) - name start extension))) - (progn - (helm-ff-serial-rename-1 - dir cands name start extension :method method) - (setq done t) - (message nil)))) - (if done - (with-helm-current-buffer (helm-find-files-1 dir)) - (message "Operation aborted")))) - -(defun helm-ff-member-directory-p (file directory) - (let ((dir-file (expand-file-name - (file-name-as-directory (file-name-directory file)))) - (cur-dir (expand-file-name (file-name-as-directory directory)))) - (string= dir-file cur-dir))) - -(cl-defun helm-ff-serial-rename-1 - (directory collection new-name start-at-num extension &key (method 'rename)) - "rename files in COLLECTION to DIRECTORY with the prefix name NEW-NAME. -Rename start at number START-AT-NUM - ex: prefixname-01.jpg. -EXTENSION is the file extension to use, in empty prompt, -reuse the original extension of file. -METHOD can be one of rename, copy or symlink. -Files will be renamed if they are files of current directory, otherwise they -will be treated with METHOD. -Default METHOD is rename." - ;; Maybe remove directories selected by error in collection. - (setq collection (cl-remove-if 'file-directory-p collection)) - (let* ((tmp-dir (file-name-as-directory - (concat (file-name-as-directory directory) - (symbol-name (cl-gensym "tmp"))))) - (fn (cl-case method - (copy 'copy-file) - (symlink 'make-symbolic-link) - (rename 'rename-file) - (t (error "Error: Unknown method %s" method))))) - (make-directory tmp-dir) - (unwind-protect - (progn - ;; Rename all files to tmp-dir with new-name. - ;; If files are not from start directory, use method - ;; to move files to tmp-dir. - (cl-loop for i in collection - for count from start-at-num - for fnum = (if (< count 10) "0%s" "%s") - for nname = (concat tmp-dir new-name (format fnum count) - (if (not (string= extension "")) - (format ".%s" (replace-regexp-in-string - "[.]" "" extension)) - (file-name-extension i 'dot))) - do (if (helm-ff-member-directory-p i directory) - (rename-file i nname) - (funcall fn i nname))) - ;; Now move all from tmp-dir to destination. - (cl-loop with dirlist = (directory-files - tmp-dir t directory-files-no-dot-files-regexp) - for f in dirlist do - (if (file-symlink-p f) - (make-symbolic-link (file-truename f) - (concat (file-name-as-directory directory) - (helm-basename f))) - (rename-file f directory)))) - (delete-directory tmp-dir t)))) - -(defun helm-ff-serial-rename (_candidate) - "Serial rename all marked files to `helm-ff-default-directory'. -Rename only file of current directory, and symlink files coming from -other directories. -See `helm-ff-serial-rename-1'." - (helm-ff-serial-rename-action 'rename)) - -(defun helm-ff-serial-rename-by-symlink (_candidate) - "Serial rename all marked files to `helm-ff-default-directory'. -Rename only file of current directory, and symlink files coming from -other directories. -See `helm-ff-serial-rename-1'." - (helm-ff-serial-rename-action 'symlink)) - -(defun helm-ff-serial-rename-by-copying (_candidate) - "Serial rename all marked files to `helm-ff-default-directory'. -Rename only file of current directory, and copy files coming from -other directories. -See `helm-ff-serial-rename-1'." - (helm-ff-serial-rename-action 'copy)) - -(defun helm-ff-query-replace-on-marked-1 (candidates) - "Query replace on filenames of CANDIDATES. -This doesn't replace inside the files, only modify filenames." - (with-helm-display-marked-candidates - helm-marked-buffer-name - (mapcar 'helm-basename candidates) - (let* ((regexp (read-string "Replace regexp on filename(s): ")) - (str (read-string (format "Replace regexp `%s' with: " regexp)))) - (cl-loop with query = "y" - with count = 0 - for old in candidates - for new = (concat (helm-basedir old) - (replace-regexp-in-string - regexp str - (helm-basename old))) - ;; If `regexp' is not matched in `old' - ;; `replace-regexp-in-string' will - ;; return `old' unmodified. - unless (string= old new) - do (progn - (unless (string= query "!") - (while (not (member - (setq query - (string - (read-key - (propertize - (format - "Replace `%s' by `%s' [!,y,n,q]" - old new) - 'face 'minibuffer-prompt)))) - '("y" "!" "n" "q"))) - (message "Please answer by y,n,! or q") (sit-for 1))) - (when (string= query "q") - (cl-return (message "Operation aborted"))) - (unless (string= query "n") - (rename-file old new) - (cl-incf count))) - finally (message "%d Files renamed" count)))) - ;; This fix the emacs bug where "Emacs-Lisp:" is sent - ;; in minibuffer (not the echo area). - (sit-for 0.1) - (with-current-buffer (window-buffer (minibuffer-window)) - (delete-minibuffer-contents))) - -;; The action. -(defun helm-ff-query-replace-on-marked (_candidate) - (let ((marked (helm-marked-candidates))) - (helm-ff-query-replace-on-marked-1 marked))) - -;; The command for `helm-find-files-map'. -(defun helm-ff-run-query-replace-on-marked () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-query-replace-on-marked))) - -(defun helm-ff-query-replace (_candidate) - (let ((bufs (cl-loop for f in (helm-marked-candidates) - collect (buffer-name (find-file-noselect f))))) - (helm-buffer-query-replace-1 nil bufs))) - -(defun helm-ff-query-replace-regexp (_candidate) - (let ((bufs (cl-loop for f in (helm-marked-candidates) - collect (buffer-name (find-file-noselect f))))) - (helm-buffer-query-replace-1 'regexp bufs))) - -(defun helm-ff-run-query-replace () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-query-replace))) - -(defun helm-ff-run-query-replace-regexp () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-query-replace-regexp))) - -(defun helm-ff-toggle-auto-update (_candidate) - (setq helm-ff-auto-update-flag (not helm-ff-auto-update-flag)) - (setq helm-ff--auto-update-state helm-ff-auto-update-flag) - (message "[Auto expansion %s]" - (if helm-ff-auto-update-flag "enabled" "disabled"))) - -(defun helm-ff-run-toggle-auto-update () - (interactive) - (with-helm-alive-p - (helm-attrset 'toggle-auto-update '(helm-ff-toggle-auto-update . never-split)) - (helm-execute-persistent-action 'toggle-auto-update))) - -(defun helm-ff-delete-char-backward () - "Disable helm find files auto update and delete char backward." - (interactive) - (setq helm-ff-auto-update-flag nil) - (setq helm-ff--deleting-char-backward t) - (call-interactively - (lookup-key (current-global-map) - (read-kbd-macro "DEL")))) - -(defun helm-ff-delete-char-backward--exit-fn () - (setq helm-ff-auto-update-flag helm-ff--auto-update-state) - (setq helm-ff--deleting-char-backward nil)) - -(defun helm-ff-run-switch-to-history () - "Run Switch to history action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (when (helm-file-completion-source-p) - (helm-exit-and-execute-action 'helm-find-files-switch-to-hist)))) - -(defun helm-ff-run-grep () - "Run Grep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-grep))) - -(defun helm-ff-run-git-grep () - "Run git-grep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-git-grep))) - -(defun helm-ff-run-grep-ag () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-ag))) - -(defun helm-ff-run-pdfgrep () - "Run Pdfgrep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-pdfgrep))) - -(defun helm-ff-run-zgrep () - "Run Grep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-zgrep))) - -(defun helm-ff-run-copy-file () - "Run Copy file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-copy))) - -(defun helm-ff-run-rename-file () - "Run Rename file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-rename))) - -(defun helm-ff-run-byte-compile-file () - "Run Byte compile file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-byte-compile))) - -(defun helm-ff-run-load-file () - "Run Load file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-load-files))) - -(defun helm-ff-run-eshell-command-on-file () - "Run eshell command on file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - 'helm-find-files-eshell-command-on-file))) - -(defun helm-ff-run-ediff-file () - "Run Ediff file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-ediff-files))) - -(defun helm-ff-run-ediff-merge-file () - "Run Ediff merge file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - 'helm-find-files-ediff-merge-files))) - -(defun helm-ff-run-symlink-file () - "Run Symlink file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-symlink))) - -(defun helm-ff-run-hardlink-file () - "Run Hardlink file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-hardlink))) - -(defun helm-ff-run-delete-file () - "Run Delete file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-delete-marked-files))) - -(defun helm-ff-run-complete-fn-at-point () - "Run complete file name action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - 'helm-insert-file-name-completion-at-point))) - -(defun helm-ff-run-switch-to-eshell () - "Run switch to eshell action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-switch-to-eshell))) - -(defun helm-ff-run-switch-other-window () - "Run switch to other window action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-other-window))) - -(defun helm-ff-run-switch-other-frame () - "Run switch to other frame action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'find-file-other-frame))) - -(defun helm-ff-run-open-file-externally () - "Run open file externally command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-open-file-externally))) - -(defun helm-ff-run-open-file-with-default-tool () - "Run open file externally command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-open-file-with-default-tool))) - -(defun helm-ff-locate (candidate) - "Locate action function for `helm-find-files'." - (helm-locate-set-command) - (let ((input (concat (helm-basename - (expand-file-name - candidate - helm-ff-default-directory)) - ;; The locate '-b' option doesn't exists - ;; in everything (es). - (unless (and (eq system-type 'windows-nt) - (string-match "^es" helm-locate-command)) - " -b")))) - (helm-locate-1 helm-current-prefix-arg nil 'from-ff input))) - -(defun helm-ff-run-locate () - "Run locate action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-locate))) - -(defun helm-files-insert-as-org-link (candidate) - (insert (format "[[%s][]]" candidate)) - (goto-char (- (point) 2))) - -(defun helm-ff-run-insert-org-link () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-files-insert-as-org-link))) - -(defun helm-ff-run-find-file-as-root () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-file-as-root))) - -(defun helm-ff-run-find-alternate-file () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'find-alternate-file))) - -(defun helm-ff-run-gnus-attach-files () - "Run gnus attach files command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-gnus-attach-files))) - -(defun helm-ff-run-etags () - "Run Etags command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-etags-select))) - -(defvar lpr-printer-switch) -(defun helm-ff-print (_candidate) - "Print marked files. - -You may to set in order -variables `lpr-command',`lpr-switches' and/or `printer-name', -but with no settings helm should detect your printer(s) and -print with the default `lpr' settings. - -NOTE: DO NOT set the \"-P\" flag in `lpr-switches', if you really -have to modify this, do it in `lpr-printer-switch'. - -Same as `dired-do-print' but for helm." - (require 'lpr) - (when (or helm-current-prefix-arg - (not helm-ff-printer-list)) - (setq helm-ff-printer-list - (helm-ff-find-printers))) - (let* ((file-list (helm-marked-candidates :with-wildcard t)) - (len (length file-list)) - (printer-name (if helm-ff-printer-list - (helm-comp-read - "Printer: " helm-ff-printer-list) - printer-name)) - (lpr-switches - (if (and (stringp printer-name) - (string< "" printer-name)) - (cons (concat lpr-printer-switch printer-name) - lpr-switches) - lpr-switches)) - (command (helm-read-string - (format "Print *%s File(s):\n%s with: " - len - (mapconcat - (lambda (f) (format "- %s\n" f)) - file-list "")) - (when (and lpr-command lpr-switches) - (mapconcat 'identity - (cons lpr-command - (if (stringp lpr-switches) - (list lpr-switches) - lpr-switches)) - " ")))) - (file-args (mapconcat (lambda (x) - (format "'%s'" x)) - file-list " ")) - (cmd-line (concat command " " file-args))) - (if command - (start-process-shell-command "helm-print" nil cmd-line) - (error "Error: Please verify your printer settings in Emacs.")))) - -(defun helm-ff-run-print-file () - "Run Print file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-print))) - -(defun helm-ff-checksum (file) - "Calculate the checksum of FILE. -The checksum is copied to kill-ring." - (let ((algo (intern (helm-comp-read - "Algorithm: " - '(md5 sha1 sha224 sha256 sha384 sha512))))) - (kill-new (with-temp-buffer - (insert-file-contents-literally file) - (secure-hash algo (current-buffer)))) - (message "Checksum copied to kill-ring."))) - -(defun helm-ff-toggle-basename (_candidate) - (with-helm-buffer - (setq helm-ff-transformer-show-only-basename - (not helm-ff-transformer-show-only-basename)) - (let* ((cand (helm-get-selection nil t)) - (target (if helm-ff-transformer-show-only-basename - (helm-basename cand) cand))) - (helm-force-update (regexp-quote target))))) - -(defun helm-ff-run-toggle-basename () - (interactive) - (with-helm-alive-p - (unless (helm-empty-source-p) - (helm-ff-toggle-basename nil)))) - -(cl-defun helm-reduce-file-name (fname level &key unix-close expand) - "Reduce FNAME by LEVEL from end or beginning depending LEVEL value. -If LEVEL is positive reduce from end else from beginning. -If UNIX-CLOSE is non--nil close filename with /. -If EXPAND is non--nil expand-file-name." - (let* ((exp-fname (expand-file-name fname)) - (fname-list (split-string (if (or (string= fname "~/") expand) - exp-fname fname) "/" t)) - (len (length fname-list)) - (pop-list (if (< level 0) - (cl-subseq fname-list (* level -1)) - (cl-subseq fname-list 0 (- len level)))) - (result (mapconcat 'identity pop-list "/")) - (empty (string= result ""))) - (when unix-close (setq result (concat result "/"))) - (if (string-match "^~" result) - (if (string= result "~/") "~/" result) - (if (< level 0) - (if empty "../" (concat "../" result)) - (cond ((eq system-type 'windows-nt) - (if empty (expand-file-name "/") ; Expand to "/" or "c:/". - result)) - (empty "/") - (t - (concat "/" result))))))) - -(defvar helm-find-files--level-tree nil) -(defvar helm-find-files--level-tree-iterator nil) -(defun helm-find-files-up-one-level (arg) - "Go up one level like unix command `cd ..'. -If prefix numeric arg is given go ARG level up." - (interactive "p") - (with-helm-alive-p - (when (and (helm-file-completion-source-p) - (not (helm-ff-invalid-tramp-name-p))) - (with-helm-window - (when helm-follow-mode - (helm-follow-mode -1) (message nil))) - ;; When going up one level we want to be at the line - ;; corresponding to actual directory, so store this info - ;; in `helm-ff-last-expanded'. - (let ((cur-cand (helm-get-selection)) - (new-pattern (helm-reduce-file-name - helm-pattern arg :unix-close t :expand t))) - (cond ((file-directory-p helm-pattern) - (setq helm-ff-last-expanded helm-ff-default-directory)) - ((file-exists-p helm-pattern) - (setq helm-ff-last-expanded helm-pattern)) - ((and cur-cand (file-exists-p cur-cand)) - (setq helm-ff-last-expanded cur-cand))) - (unless helm-find-files--level-tree - (setq helm-find-files--level-tree - (cons helm-ff-default-directory - helm-find-files--level-tree))) - (setq helm-find-files--level-tree-iterator nil) - (push new-pattern helm-find-files--level-tree) - (helm-set-pattern new-pattern helm-suspend-update-flag) - (with-helm-after-update-hook (helm-ff-retrieve-last-expanded)))))) - -(defun helm-find-files-down-last-level () - "Retrieve previous paths reached by `C-l' in helm-find-files." - (interactive) - (with-helm-alive-p - (when (and (helm-file-completion-source-p) - (not (helm-ff-invalid-tramp-name-p))) - (unless helm-find-files--level-tree-iterator - (setq helm-find-files--level-tree-iterator - (helm-iter-list (cdr helm-find-files--level-tree)))) - (setq helm-find-files--level-tree nil) - (helm-aif (helm-iter-next helm-find-files--level-tree-iterator) - (helm-set-pattern it) - (setq helm-find-files--level-tree-iterator nil))))) - -(defun helm-find-files--reset-level-tree () - (setq helm-find-files--level-tree-iterator nil - helm-find-files--level-tree nil)) - -(add-hook 'helm-cleanup-hook 'helm-find-files--reset-level-tree) -(add-hook 'post-self-insert-hook 'helm-find-files--reset-level-tree) -(add-hook 'helm-after-persistent-action-hook 'helm-find-files--reset-level-tree) - -(defun helm-ff-retrieve-last-expanded () - "Move overlay to last visited directory `helm-ff-last-expanded'. -This happen after using `helm-find-files-up-one-level', -or hitting C-j on \"..\"." - (when helm-ff-last-expanded - (let ((presel (if helm-ff-transformer-show-only-basename - (helm-basename - (directory-file-name helm-ff-last-expanded)) - (directory-file-name helm-ff-last-expanded)))) - (with-helm-window - (when (re-search-forward (concat "^" (regexp-quote presel) "$") nil t) - (forward-line 0) - (helm-mark-current-line))) - (setq helm-ff-last-expanded nil)))) - -(defun helm-ff-move-to-first-real-candidate () - "When candidate is an incomplete file name move to first real candidate." - (helm-aif (and (helm-file-completion-source-p) - (not (helm-empty-source-p)) - (not (string-match - "\\`[Dd]ired-" - (assoc-default 'name (helm-get-current-source)))) - helm-ff--move-to-first-real-candidate - (helm-get-selection)) - (unless (or (not (stringp it)) - (and (string-match helm-tramp-file-name-regexp it) - (not (file-remote-p it nil t))) - (file-exists-p it)) - (helm-next-line)))) -(add-hook 'helm-after-update-hook 'helm-ff-move-to-first-real-candidate) - -;;; Auto-update - helm-find-files auto expansion of directories. -;; -;; -(defun helm-ff-update-when-only-one-matched () - "Expand to directory when sole completion. -When only one candidate is remaining and it is a directory, -expand to this directory. -This happen only when `helm-ff-auto-update-flag' is non--nil -or when `helm-pattern' is equal to \"~/\"." - (when (and (helm-file-completion-source-p) - (not (helm-ff-invalid-tramp-name-p))) - (with-helm-window - (let* ((history-p (string= (assoc-default - 'name (helm-get-current-source)) - "Read File Name History")) - (pat (if (string-match helm-tramp-file-name-regexp - helm-pattern) - (helm-create-tramp-name helm-pattern) - helm-pattern)) - (completed-p (string= (file-name-as-directory - (expand-file-name - (substitute-in-file-name pat))) - helm-ff-default-directory)) - (candnum (helm-get-candidate-number)) - (lt2-p (and (<= candnum 2) - (>= (string-width (helm-basename helm-pattern)) 2))) - (cur-cand (prog2 - (unless (or completed-p - (file-exists-p pat) - history-p (null lt2-p)) - ;; Only one non--existing candidate - ;; and one directory candidate, move to it, - ;; but not when renaming, copying etc..., - ;; so for this use - ;; `helm-ff-move-to-first-real-candidate' - ;; instead of `helm-next-line' (Issue #910). - (helm-ff-move-to-first-real-candidate)) - (helm-get-selection)))) - (when (and (or (and helm-ff-auto-update-flag - (null helm-ff--deleting-char-backward) - (not (get-buffer-window helm-action-buffer 'visible)) - ;; Issue #295 - ;; File predicates are returning t - ;; with paths like //home/foo. - ;; So check it is not the case by regexp - ;; to allow user to do C-a / to start e.g - ;; entering a tramp method e.g /sudo::. - (not (string-match "\\`//" helm-pattern)) - (not (eq last-command 'helm-yank-text-at-point))) - ;; Fix issue #542. - (string= helm-pattern "~/") - ;; Only one remaining directory, expand it. - (and (= candnum 1) - helm-ff--auto-update-state - (file-accessible-directory-p pat) - (null helm-ff--deleting-char-backward))) - (or - ;; Only one candidate remaining - ;; and at least 2 char in basename. - lt2-p - ;; Already completed. - completed-p) - (not history-p) ; Don't try to auto complete in history. - (stringp cur-cand) - (file-accessible-directory-p cur-cand)) - (if (and (not (helm-dir-is-dot cur-cand)) ; [1] - ;; Maybe we are here because completed-p is true - ;; but check this again to be sure. (Windows fix) - (<= candnum 2)) ; [2] - ;; If after going to next line the candidate - ;; is not one of "." or ".." [1] - ;; and only one candidate is remaining [2], - ;; assume candidate is a new directory to expand, and do it. - (helm-set-pattern (file-name-as-directory cur-cand)) - ;; The candidate is one of "." or ".." - ;; that mean we have entered the last letter of the directory name - ;; in prompt, so expansion is already done, just add the "/" at end - ;; of name unless helm-pattern ends with "." - ;; (i.e we are writing something starting with ".") - (unless (string-match "\\`.*[.]\\{1\\}\\'" helm-pattern) - (helm-set-pattern - ;; Need to expand-file-name to avoid e.g /ssh:host:./ in prompt. - (expand-file-name (file-name-as-directory helm-pattern))))) - (helm-check-minibuffer-input)))))) - -(defun helm-ff-auto-expand-to-home-or-root () - "Allow expanding to home/user directory or root or text yanked after pattern." - (when (and (helm-file-completion-source-p) - (string-match - "/?\\$.*/\\|/\\./\\|/\\.\\./\\|/~.*/\\|//\\|\\(/[[:alpha:]]:/\\|\\s\\+\\)" - helm-pattern) - (with-current-buffer (window-buffer (minibuffer-window)) (eolp)) - (not (string-match helm-ff-url-regexp helm-pattern))) - (let* ((match (match-string 0 helm-pattern)) - (input (cond ((string= match "/./") - (expand-file-name default-directory)) - ((string= helm-pattern "/../") "/") - ((string-match-p "\\`/\\$" match) - (let ((sub (substitute-in-file-name match))) - (if (file-directory-p sub) - sub (replace-regexp-in-string "/\\'" "" sub)))) - (t (expand-file-name - (helm-substitute-in-filename helm-pattern) - ;; [Windows] On UNC paths "/" expand to current machine, - ;; so use the root of current Drive. (i.e "C:/") - (and (memq system-type '(windows-nt ms-dos)) - (getenv "SystemDrive")) ; nil on Unix. - ))))) - (if (file-directory-p input) - (setq helm-ff-default-directory - (setq input (file-name-as-directory input))) - (setq helm-ff-default-directory (file-name-as-directory - (file-name-directory input)))) - (with-helm-window - (helm-set-pattern input) - (helm-check-minibuffer-input))))) - -(defun helm-substitute-in-filename (fname) - "Substitute all parts of FNAME from start up to \"~/\" or \"/\". -On windows system substitute from start up to \"/[[:lower:]]:/\". -This function is needed for `helm-ff-auto-expand-to-home-or-root' -and should be used carefully elsewhere, or not at all, using -`substitute-in-file-name' instead." - (if (and ffap-url-regexp - (string-match-p ffap-url-regexp fname)) - fname - (with-temp-buffer - (insert fname) - (goto-char (point-min)) - (skip-chars-forward "/") ;; Avoid infloop in UNC paths Issue #424 - (if (re-search-forward "~.*/?\\|//\\|/[[:alpha:]]:/" nil t) - (let ((match (match-string 0))) - (goto-char (if (or (string= match "//") - (string-match-p "/[[:alpha:]]:/" match)) - (1+ (match-beginning 0)) - (match-beginning 0))) - (buffer-substring-no-properties (point) (point-at-eol))) - fname)))) - -(add-hook 'helm-after-update-hook 'helm-ff-update-when-only-one-matched) -(add-hook 'helm-after-update-hook 'helm-ff-auto-expand-to-home-or-root) - -(defun helm-point-file-in-dired (file) - "Put point on filename FILE in dired buffer." - (unless (and ffap-url-regexp - (string-match-p ffap-url-regexp file)) - (let ((target (expand-file-name (helm-substitute-in-filename file)))) - (dired (file-name-directory target)) - (dired-goto-file target)))) - -(defun helm-create-tramp-name (fname) - "Build filename for `helm-pattern' like /su:: or /sudo::." - (apply #'tramp-make-tramp-file-name - (cl-loop with v = (tramp-dissect-file-name fname) - for i across v collect i))) - -(cl-defun helm-ff-tramp-hostnames (&optional (pattern helm-pattern)) - "Get a list of hosts for tramp method found in `helm-pattern'. -Argument PATTERN default to `helm-pattern', it is here only for debugging -purpose." - (when (string-match helm-tramp-file-name-regexp pattern) - (let ((method (match-string 1 pattern)) - (tn (match-string 0 pattern)) - (all-methods (mapcar 'car tramp-methods))) - (helm-fast-remove-dups - (cl-loop for (f . h) in (tramp-get-completion-function method) - append (cl-loop for e in (funcall f (car h)) - for host = (and (consp e) (cadr e)) - when (and host (not (member host all-methods))) - collect (concat tn host))) - :test 'equal)))) - -(defun helm-ff-before-action-hook-fn () - "Exit helm when user try to execute action on an invalid tramp fname." - (let ((cand (helm-get-selection))) - (when (and (helm-file-completion-source-p) - (stringp cand) - (helm-ff-invalid-tramp-name-p cand) ; Check candidate. - (helm-ff-invalid-tramp-name-p)) ; check helm-pattern. - (error "Error: Unknown file or directory `%s'" cand)))) -(add-hook 'helm-before-action-hook 'helm-ff-before-action-hook-fn) - -(cl-defun helm-ff-invalid-tramp-name-p (&optional (pattern helm-pattern)) - "Return non--nil when PATTERN is an invalid tramp filename." - (string= (helm-ff-set-pattern pattern) - "Invalid tramp file name")) - -(defun helm-ff-set-pattern (pattern) - "Handle tramp filenames in `helm-pattern'." - (let ((methods (mapcar 'car tramp-methods)) - (reg "\\`/\\([^[/:]+\\|[^/]+]\\):.*:") - cur-method tramp-name) - ;; In some rare cases tramp can return a nil input, - ;; so be sure pattern is a string for safety (Issue #476). - (unless pattern (setq pattern "")) - (cond ((string-match helm-ff-url-regexp pattern) pattern) - ((string-match "\\`\\$" pattern) - (substitute-in-file-name pattern)) - ((string= pattern "") "") - ((string-match "\\`[.]\\{1,2\\}/\\'" pattern) - (expand-file-name pattern)) - ((string-match ".*\\(~?/?[.]\\{1\\}/\\)\\'" pattern) - (expand-file-name default-directory)) - ((string-match ".*\\(~//\\|//\\)\\'" pattern) - (expand-file-name "/")) ; Expand to "/" or "c:/" - ((string-match "\\`\\(~/\\|.*/~/\\)\\'" pattern) - (expand-file-name "~/")) - ;; Match "/method:maybe_hostname:~" - ((and (string-match (concat reg "~") pattern) - (setq cur-method (match-string 1 pattern)) - (member cur-method methods)) - (setq tramp-name (expand-file-name - (helm-create-tramp-name - (match-string 0 pattern)))) - (replace-match tramp-name nil t pattern)) - ;; Match "/method:maybe_hostname:" - ((and (string-match reg pattern) - (setq cur-method (match-string 1 pattern)) - (member cur-method methods)) - (setq tramp-name (helm-create-tramp-name - (match-string 0 pattern))) - (replace-match tramp-name nil t pattern)) - ;; Match "/hostname:" - ((and (string-match helm-tramp-file-name-regexp pattern) - (setq cur-method (match-string 1 pattern)) - (and cur-method (not (member cur-method methods)))) - (setq tramp-name (helm-create-tramp-name - (match-string 0 pattern))) - (replace-match tramp-name nil t pattern)) - ;; Match "/method:" in this case don't try to connect. - ((and (not (string-match reg pattern)) - (string-match helm-tramp-file-name-regexp pattern) - (member (match-string 1 pattern) methods)) - "Invalid tramp file name") ; Write in helm-buffer. - ;; Return PATTERN unchanged. - (t pattern)))) - -(defun helm-find-files-get-candidates (&optional require-match) - "Create candidate list for `helm-source-find-files'." - (let* ((path (helm-ff-set-pattern helm-pattern)) - (dir-p (file-accessible-directory-p path)) - basedir - invalid-basedir - non-essential - (tramp-verbose helm-tramp-verbose)) ; No tramp message when 0. - (set-text-properties 0 (length path) nil path) - ;; Issue #118 allow creation of newdir+newfile. - (unless (or - ;; A tramp file name not completed. - (string= path "Invalid tramp file name") - ;; An empty pattern - (string= path "") - ;; Check if base directory of PATH is valid. - (helm-aif (file-name-directory path) - ;; If PATH is a valid directory IT=PATH, - ;; else IT=basedir of PATH. - (file-directory-p it))) - ;; BASEDIR is invalid, that's mean user is starting - ;; to write a non--existing path in minibuffer - ;; probably to create a 'new_dir' or a 'new_dir+new_file'. - (setq invalid-basedir t)) - ;; Don't set now `helm-pattern' if `path' == "Invalid tramp file name" - ;; like that the actual value (e.g /ssh:) is passed to - ;; `helm-ff-tramp-hostnames'. - (unless (or (string= path "Invalid tramp file name") - invalid-basedir) ; Leave helm-pattern unchanged. - (setq helm-ff-auto-update-flag ; [1] - ;; Unless auto update is disabled at startup or - ;; interactively, start auto updating only at third char. - (unless (or (null helm-ff-auto-update-initial-value) - (null helm-ff--auto-update-state) - ;; But don't enable auto update when - ;; deleting backward. - helm-ff--deleting-char-backward - (and dir-p (not (string-match-p "/\\'" path)))) - (or (>= (length (helm-basename path)) 3) dir-p))) - (setq helm-pattern (helm-ff--transform-pattern-for-completion path)) - ;; This have to be set after [1] to allow deleting char backward. - (setq basedir (expand-file-name - (if (and dir-p helm-ff-auto-update-flag) - ;; Add the final "/" to path - ;; when `helm-ff-auto-update-flag' is enabled. - (file-name-as-directory path) - (if (string= path "") "/" - (file-name-directory path))))) - (setq helm-ff-default-directory - (if (string= helm-pattern "") - (expand-file-name "/") ; Expand to "/" or "c:/" - ;; If path is an url *default-directory have to be nil. - (unless (or (string-match helm-ff-url-regexp path) - (and ffap-url-regexp - (string-match ffap-url-regexp path))) - basedir)))) - (cond ((string= path "Invalid tramp file name") - (or (helm-ff-tramp-hostnames) ; Hostnames completion. - (prog2 - ;; `helm-pattern' have not been modified yet. - ;; Set it here to the value of `path' that should be now - ;; "Invalid tramp file name" and set the candidates list - ;; to ("Invalid tramp file name") to make `helm-pattern' - ;; match single candidate "Invalid tramp file name". - (setq helm-pattern path) - ;; "Invalid tramp file name" is now printed - ;; in `helm-buffer'. - (list path)))) - ((or (and (file-regular-p path) - (eq last-repeatable-command 'helm-execute-persistent-action)) - ;; `ffap-url-regexp' don't match until url is complete. - (string-match helm-ff-url-regexp path) - invalid-basedir - (and (not (file-exists-p path)) (string-match "/$" path)) - (and ffap-url-regexp (string-match ffap-url-regexp path))) - (list path)) - ((string= path "") (helm-ff-directory-files "/" t)) - ;; Check here if directory is accessible (not working on Windows). - ((and (file-directory-p path) (not (file-readable-p path))) - (list (format "file-error: Opening directory permission denied `%s'" path))) - ;; A fast expansion of PATH is made only if `helm-ff-auto-update-flag' - ;; is enabled. - ((and dir-p helm-ff-auto-update-flag) - (helm-ff-directory-files path t)) - (t (append (unless (or require-match - ;; When `helm-ff-auto-update-flag' has been - ;; disabled, whe don't want PATH to be added on top - ;; if it is a directory. - dir-p) - (list path)) - (helm-ff-directory-files basedir t)))))) - -(defun helm-ff-directory-files (directory &optional full) - "List contents of DIRECTORY. -Argument FULL mean absolute path. -It is same as `directory-files' but always returns the -dotted filename '.' and '..' even on root directories in Windows -systems." - (setq directory (file-name-as-directory - (expand-file-name directory))) - (let* (file-error - (ls (condition-case err - (directory-files - directory full directory-files-no-dot-files-regexp) - ;; Handle file-error from here for Windows - ;; because predicates like `file-readable-p' and friends - ;; seem broken on emacs for Windows systems (always returns t). - ;; This should never be called on GNU/Linux/Unix - ;; as the error is properly intercepted in - ;; `helm-find-files-get-candidates' by `file-readable-p'. - (file-error - (prog1 - (list (format "%s:%s" - (car err) - (mapconcat 'identity (cdr err) " "))) - (setq file-error t))))) - (dot (concat directory ".")) - (dot2 (concat directory ".."))) - (append (and (not file-error) (list dot dot2)) ls))) - -(defun helm-ff-handle-backslash (fname) - ;; Allow creation of filenames containing a backslash. - (cl-loop with bad = '((92 . "")) - for i across fname - for isbad = (assq i bad) - if isbad concat (cdr isbad) - else concat (string i))) - -(defun helm-ff-fuzzy-matching-p () - (and helm-ff-fuzzy-matching - (not (memq helm-mm-matching-method '(multi1 multi3p))))) - -(defun helm-ff--transform-pattern-for-completion (pattern) - "Maybe return PATTERN with it's basename modified as a regexp. -This happen only when `helm-ff-fuzzy-matching' is enabled. -This provide a similar behavior as `ido-enable-flex-matching'. -See also `helm--mapconcat-pattern'. -If PATTERN is an url returns it unmodified. -When PATTERN contain a space fallback to multi-match. -If basename contain one or more space fallback to multi-match. -If PATTERN is a valid directory name,return PATTERN unchanged." - ;; handle bad filenames containing a backslash. - (setq pattern (helm-ff-handle-backslash pattern)) - (let ((bn (helm-basename pattern)) - (bd (or (helm-basedir pattern) "")) - (dir-p (file-directory-p pattern)) - (tramp-p (cl-loop for (m . f) in tramp-methods - thereis (string-match m pattern)))) - ;; Always regexp-quote base directory name to handle - ;; crap dirnames such e.g bookmark+ - (cond - ((or (and dir-p tramp-p (string-match ":\\'" pattern)) - (string= pattern "") - (and dir-p (<= (length bn) 2)) - ;; Fix Issue #541 when BD have a subdir similar - ;; to BN, don't switch to match plugin - ;; which will match both. - (and dir-p (string-match (regexp-quote bn) bd))) - ;; Use full PATTERN on e.g "/ssh:host:". - (regexp-quote pattern)) - ;; Prefixing BN with a space call multi-match completion. - ;; This allow showing all files/dirs matching BN (Issue #518). - ;; FIXME: some multi-match methods may not work here. - (dir-p (concat (regexp-quote bd) " " (regexp-quote bn))) - ((or (not (helm-ff-fuzzy-matching-p)) - (string-match "\\s-" bn)) ; Fall back to multi-match. - (concat (regexp-quote bd) bn)) - ((or (string-match "[*][.]?.*" bn) ; Allow entering wilcard. - (string-match "/$" pattern) ; Allow mkdir. - (string-match helm-ff-url-regexp pattern) - (and (string= helm-ff-default-directory "/") tramp-p)) - ;; Don't treat wildcards ("*") as regexp char. - ;; (e.g ./foo/*.el => ./foo/[*].el) - (concat (regexp-quote bd) - (replace-regexp-in-string "[*]" "[*]" bn))) - (t (concat (regexp-quote bd) - (if (>= (length bn) 2) ; wait 2nd char before concating. - (helm--mapconcat-pattern bn) - (concat ".*" (regexp-quote bn)))))))) - -(defun helm-dir-is-dot (dir) - (string-match "\\(?:/\\|\\`\\)\\.\\{1,2\\}\\'" dir)) - -(defun helm-ff-save-history () - "Store the last value of `helm-ff-default-directory' in `helm-ff-history'. -Note that only existing directories are saved here." - (when (and helm-ff-default-directory - (helm-file-completion-source-p) - (file-directory-p helm-ff-default-directory)) - (set-text-properties 0 (length helm-ff-default-directory) - nil helm-ff-default-directory) - (push helm-ff-default-directory helm-ff-history))) -(add-hook 'helm-cleanup-hook 'helm-ff-save-history) - -(defun helm-files-save-file-name-history (&optional force) - "Save selected file to `file-name-history'." - (let ((src-name (assoc-default 'name (helm-get-current-source)))) - (when (or force (helm-file-completion-source-p) - (member src-name helm-files-save-history-extra-sources)) - (let ((mkd (helm-marked-candidates)) - (history-delete-duplicates t)) - (cl-loop for sel in mkd - when (and sel - (stringp sel) - (file-exists-p sel) - (not (file-directory-p sel))) - do - ;; we use `abbreviate-file-name' here because - ;; other parts of Emacs seems to, - ;; and we don't want to introduce duplicates. - (add-to-history 'file-name-history - (abbreviate-file-name sel))))))) -(add-hook 'helm-exit-minibuffer-hook 'helm-files-save-file-name-history) - -(defun helm-ff-valid-symlink-p (file) - (helm-aif (condition-case-unless-debug nil - ;; `file-truename' send error - ;; on cyclic symlinks (Issue #692). - (file-truename file) - (error nil)) - (file-exists-p it))) - -(defun helm-get-default-mode-for-file (filename) - "Return the default mode to open FILENAME." - (let ((mode (cl-loop for (r . m) in auto-mode-alist - thereis (and (string-match r filename) m)))) - (or (and (symbolp mode) mode) "Fundamental"))) - -(defun helm-ff-properties (candidate) - "Show file properties of CANDIDATE in a tooltip or message." - (let* ((all (helm-file-attributes candidate)) - (dired-line (helm-file-attributes - candidate :dired t :human-size t)) - (type (cl-getf all :type)) - (mode-type (cl-getf all :mode-type)) - (owner (cl-getf all :uid)) - (owner-right (cl-getf all :user t)) - (group (cl-getf all :gid)) - (group-right (cl-getf all :group)) - (other-right (cl-getf all :other)) - (size (helm-file-human-size (cl-getf all :size))) - (modif (cl-getf all :modif-time)) - (access (cl-getf all :access-time)) - (ext (helm-get-default-program-for-file candidate)) - (tooltip-hide-delay (or helm-tooltip-hide-delay tooltip-hide-delay))) - (if (and (window-system) tooltip-mode) - (tooltip-show - (concat - (helm-basename candidate) "\n" - dired-line "\n" - (format "Mode: %s\n" (helm-get-default-mode-for-file candidate)) - (format "Ext prog: %s\n" (or (and ext (replace-regexp-in-string - " %s" "" ext)) - "Not defined")) - (format "Type: %s: %s\n" type mode-type) - (when (string= type "symlink") - (format "True name: '%s'\n" - (cond ((string-match "^\.#" (helm-basename candidate)) - "Autosave symlink") - ((helm-ff-valid-symlink-p candidate) - (file-truename candidate)) - (t "Invalid Symlink")))) - (format "Owner: %s: %s\n" owner owner-right) - (format "Group: %s: %s\n" group group-right) - (format "Others: %s\n" other-right) - (format "Size: %s\n" size) - (format "Modified: %s\n" modif) - (format "Accessed: %s\n" access))) - (message dired-line) (sit-for 5)))) - -(defun helm-ff-properties-persistent () - "Show properties without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'properties-action '(helm-ff-properties . never-split)) - (helm-execute-persistent-action 'properties-action))) - -(defun helm-ff-persistent-delete () - "Delete current candidate without quitting." - (interactive) - (with-helm-alive-p - (helm-attrset 'quick-delete '(helm-ff-quick-delete . never-split)) - (helm-execute-persistent-action 'quick-delete))) - -(defun helm-ff-dot-file-p (file) - "Check if FILE is `.' or `..'." - (member (helm-basename file) '("." ".."))) - -(defun helm-ff-quick-delete (_candidate) - "Delete file CANDIDATE without quitting." - (let ((marked (helm-marked-candidates))) - (unwind-protect - (save-selected-window - (cl-loop for c in marked do - (progn (helm-preselect - (if (and helm-ff-transformer-show-only-basename - (not (helm-ff-dot-file-p c))) - (helm-basename c) c)) - (when (y-or-n-p - (format "Really Delete file `%s'? " c)) - (helm-delete-file - c helm-ff-signal-error-on-dot-files 'synchro) - (helm-delete-current-selection) - (message nil))))) - (with-helm-buffer - (setq helm-marked-candidates nil - helm-visible-mark-overlays nil)) - (helm-force-update - (let ((presel (helm-get-selection))) - (regexp-quote (if (and helm-ff-transformer-show-only-basename - (not (helm-ff-dot-file-p presel))) - (helm-basename presel) presel))))))) - -(defun helm-ff-kill-buffer-fname (candidate) - (let* ((buf (get-file-buffer candidate)) - (buf-name (buffer-name buf))) - (cond ((and buf (eq buf (get-buffer helm-current-buffer))) - (user-error - "Can't kill `helm-current-buffer' without quitting session")) - (buf (kill-buffer buf) (message "Buffer `%s' killed" buf-name)) - (t (message "No buffer to kill"))))) - -(defun helm-ff-kill-or-find-buffer-fname (candidate) - "Find file CANDIDATE or kill it's buffer if it is visible. -Never kill `helm-current-buffer'. -Never kill buffer modified. -This is called normally on third hit of \ -\\\\[helm-execute-persistent-action] -in `helm-find-files-persistent-action'." - (let* ((buf (get-file-buffer candidate)) - (buf-name (buffer-name buf)) - (win (get-buffer-window buf)) - (helm--reading-passwd-or-string t)) - (cond ((and buf win (eq buf (get-buffer helm-current-buffer))) - (user-error - "Can't kill `helm-current-buffer' without quitting session")) - ((and buf win (buffer-modified-p buf)) - (message "Can't kill modified buffer, please save it before")) - ((and buf win) - (kill-buffer buf) - (set-window-buffer win helm-current-buffer) - (message "Buffer `%s' killed" buf-name)) - (t (find-file candidate))))) - -(defun helm-ff-run-kill-buffer-persistent () - "Execute `helm-ff-kill-buffer-fname' without quitting." - (interactive) - (with-helm-alive-p - (helm-attrset 'kill-buffer-fname 'helm-ff-kill-buffer-fname) - (helm-execute-persistent-action 'kill-buffer-fname))) - -(defun helm-ff-prefix-filename (fname &optional file-or-symlinkp new-file) - "Return filename FNAME maybe prefixed with [?] or [@]. -If FILE-OR-SYMLINKP is non--nil this mean we assume FNAME is an -existing filename or valid symlink and there is no need to test it. -NEW-FILE when non--nil mean FNAME is a non existing file and -return FNAME prefixed with [?]." - (let* ((prefix-new (propertize - " " 'display - (propertize "[?]" 'face 'helm-ff-prefix))) - (prefix-url (propertize - " " 'display - (propertize "[@]" 'face 'helm-ff-prefix)))) - (cond (file-or-symlinkp fname) - ((or (string-match helm-ff-url-regexp fname) - (and ffap-url-regexp (string-match ffap-url-regexp fname))) - (concat prefix-url " " fname)) - (new-file (concat prefix-new " " fname))))) - -(defun helm-ff-score-candidate-for-pattern (str pattern) - (if (member str '("." "..")) - 200 - (helm-score-candidate-for-pattern str pattern))) - -(defun helm-ff-sort-candidates (candidates _source) - "Sort function for `helm-source-find-files'. -Return candidates prefixed with basename of `helm-input' first." - (if (or (and (file-directory-p helm-input) - (string-match "/\\'" helm-input)) - (string-match "\\`\\$" helm-input) - (null candidates)) - candidates - (let* ((c1 (car candidates)) - (cand1real (if (consp c1) (cdr c1) c1)) - (cand1 (unless (file-exists-p cand1real) c1)) - (rest-cand (if cand1 (cdr candidates) candidates)) - (memo-src (make-hash-table :test 'equal)) - (all (sort rest-cand - (lambda (s1 s2) - (let* ((score (lambda (str) - (helm-ff-score-candidate-for-pattern - str (helm-basename helm-input)))) - (bn1 (helm-basename (if (consp s1) (cdr s1) s1))) - (bn2 (helm-basename (if (consp s2) (cdr s2) s2))) - (sc1 (or (gethash bn1 memo-src) - (puthash bn1 (funcall score bn1) memo-src))) - (sc2 (or (gethash bn2 memo-src) - (puthash bn2 (funcall score bn2) memo-src)))) - (cond ((= sc1 sc2) - (< (string-width bn1) - (string-width bn2))) - ((> sc1 sc2)))))))) - (if cand1 (cons cand1 all) all)))) - -(defun helm-ff-filter-candidate-one-by-one (file) - "`filter-one-by-one' Transformer function for `helm-source-find-files'." - ;; Handle boring files - (unless (and helm-ff-skip-boring-files - (cl-loop for r in helm-boring-file-regexp-list - ;; Prevent user doing silly thing like - ;; adding the dotted files to boring regexps (#924). - thereis (and (not (string-match "\\.$" file)) - (string-match r file)))) - ;; Handle tramp files. - (if (and (string-match helm-tramp-file-name-regexp helm-pattern) - helm-ff-tramp-not-fancy) - (if helm-ff-transformer-show-only-basename - (if (helm-dir-is-dot file) - file - (cons (or (helm-ff-get-host-from-tramp-invalid-fname file) - (helm-basename file)) - file)) - file) - ;; Now highlight. - (let* ((disp (if (and helm-ff-transformer-show-only-basename - (not (helm-dir-is-dot file)) - (not (and ffap-url-regexp - (string-match ffap-url-regexp file))) - (not (string-match helm-ff-url-regexp file))) - (or (helm-ff-get-host-from-tramp-invalid-fname file) - (helm-basename file)) file)) - (attr (file-attributes file)) - (type (car attr))) - - (cond ((string-match "file-error" file) file) - ( ;; A not already saved file. - (and (stringp type) - (not (helm-ff-valid-symlink-p file)) - (not (string-match "^\.#" (helm-basename file)))) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-invalid-symlink) t) - file)) - ;; A dotted directory symlinked. - ((and (helm-ff-dot-file-p file) (stringp type)) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-dotted-symlink-directory) t) - file)) - ;; A dotted directory. - ((helm-ff-dot-file-p file) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-dotted-directory) t) - file)) - ;; A symlink. - ((stringp type) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-symlink) t) - file)) - ;; A directory. - ((eq t type) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-directory) t) - file)) - ;; An executable file. - ((and attr (string-match "x" (nth 8 attr))) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-executable) t) - file)) - ;; A file. - ((and attr (null type)) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-file) t) - file)) - ;; A non--existing file. - (t - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-file) nil 'new-file) - file))))))) - -(defun helm-find-files-action-transformer (actions candidate) - "Action transformer for `helm-source-find-files'." - (let ((str-at-point (with-helm-current-buffer - (buffer-substring-no-properties - (point-at-bol) (point-at-eol))))) - (cond ((with-helm-current-buffer - (eq major-mode 'message-mode)) - (append actions - '(("Gnus attach file(s)" . helm-ff-gnus-attach-files)))) - ((save-match-data - (and ffap-url-regexp - (not (string-match-p ffap-url-regexp str-at-point)) - (string-match ":\\([0-9]+:?\\)" str-at-point) - )) - (append '(("Find file to line number" . helm-ff-goto-linum)) - actions)) - ((string-match (image-file-name-regexp) candidate) - (append actions - '(("Rotate image right `M-r'" . helm-ff-rotate-image-right) - ("Rotate image left `M-l'" . helm-ff-rotate-image-left)))) - ((string-match "\.el$" (helm-aif (helm-marked-candidates) - (car it) candidate)) - (append actions - '(("Byte compile lisp file(s) `M-B, C-u to load'" - . helm-find-files-byte-compile) - ("Load File(s) `M-L'" . helm-find-files-load-files)))) - ((and (string-match "\.html?$" candidate) - (file-exists-p candidate)) - (append actions - '(("Browse url file" . browse-url-of-file)))) - ((or (string= (file-name-extension candidate) "pdf") - (string= (file-name-extension candidate) "PDF")) - (append actions - '(("Pdfgrep File(s)" . helm-ff-pdfgrep)))) - (t actions)))) - -(defun helm-ff-goto-linum (candidate) - "Find file CANDIDATE and maybe jump to line number found in fname at point. -line number should be added at end of fname preceded with \":\". -e.g \"foo:12\"." - (let ((linum (with-helm-current-buffer - (let ((str (buffer-substring-no-properties - (point-at-bol) (point-at-eol)))) - (when (string-match ":\\([0-9]+:?\\)" str) - (match-string 1 str)))))) - (find-file candidate) - (and linum (not (string= linum "")) - (helm-goto-line (string-to-number linum) t)))) - -(defun helm-ff-gnus-attach-files (_candidate) - "Run `gnus-dired-attach' on `helm-marked-candidates' or CANDIDATE." - (require 'gnus-dired) - (let ((flist (helm-marked-candidates :with-wildcard t))) - (gnus-dired-attach flist))) - -(defvar image-dired-display-image-buffer) -(defun helm-ff-rotate-current-image-1 (file &optional num-arg) - "Rotate current image at NUM-ARG degrees. -This is a destructive operation on FILE made by external tool mogrify." - (setq file (file-truename file)) ; For symlinked images. - ;; When FILE is not an image-file, do nothing. - (when (string-match (image-file-name-regexp) file) - (if (executable-find "mogrify") - (progn - (shell-command (format "mogrify -rotate %s %s" - (or num-arg 90) - (shell-quote-argument file))) - (when (buffer-live-p image-dired-display-image-buffer) - (kill-buffer image-dired-display-image-buffer)) - (image-dired-display-image file) - (message nil) - (display-buffer (get-buffer image-dired-display-image-buffer))) - (error "mogrify not found")))) - -(defun helm-ff-rotate-image-left (candidate) - "Rotate image file CANDIDATE left. -This affect directly file CANDIDATE." - (helm-ff-rotate-current-image-1 candidate -90)) - -(defun helm-ff-rotate-image-right (candidate) - "Rotate image file CANDIDATE right. -This affect directly file CANDIDATE." - (helm-ff-rotate-current-image-1 candidate)) - -(defun helm-ff-rotate-left-persistent () - "Rotate image left without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'image-action1 'helm-ff-rotate-image-left) - (helm-execute-persistent-action 'image-action1))) - -(defun helm-ff-rotate-right-persistent () - "Rotate image right without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'image-action2 'helm-ff-rotate-image-right) - (helm-execute-persistent-action 'image-action2))) - -(defun helm-ff-exif-data (candidate) - "Extract exif data from file CANDIDATE using `helm-ff-exif-data-program'." - (if (and helm-ff-exif-data-program - (executable-find helm-ff-exif-data-program)) - (shell-command-to-string (format "%s %s %s" - helm-ff-exif-data-program - helm-ff-exif-data-program-args - candidate)) - (format "No program %s found to extract exif" - helm-ff-exif-data-program))) - -(defun helm-find-files-persistent-action (candidate) - "Open subtree CANDIDATE without quitting helm. -If CANDIDATE is not a directory expand CANDIDATE filename. -If CANDIDATE is alone, open file CANDIDATE filename. -That's mean: -First hit on C-j expand CANDIDATE second hit open file. -If a prefix arg is given or `helm-follow-mode' is on open file." - (let* ((follow (or (buffer-local-value - 'helm-follow-mode - (get-buffer-create helm-buffer)) - helm--temp-follow-flag)) - (new-pattern (helm-get-selection)) - (num-lines-buf (with-current-buffer helm-buffer - (count-lines (point-min) (point-max)))) - (insert-in-minibuffer (lambda (fname) - (with-selected-window (minibuffer-window) - (unless follow - (delete-minibuffer-contents) - (set-text-properties 0 (length fname) - nil fname) - (insert fname)))))) - (cond ((and (helm-ff-invalid-tramp-name-p) - (string-match helm-tramp-file-name-regexp candidate)) - ;; First hit insert hostname and - ;; second hit insert ":" and expand. - (if (string= candidate helm-pattern) - (funcall insert-in-minibuffer (concat candidate ":")) - (funcall insert-in-minibuffer candidate))) - (;; A symlink directory, expand it but not to its truename - ;; unless a prefix arg is given. - (and (file-directory-p candidate) (file-symlink-p candidate)) - (funcall insert-in-minibuffer - (file-name-as-directory - (if current-prefix-arg - (file-truename (expand-file-name candidate)) - (expand-file-name candidate))))) - ;; A directory, open it. - ((file-directory-p candidate) - (when (string= (helm-basename candidate) "..") - (setq helm-ff-last-expanded helm-ff-default-directory)) - (funcall insert-in-minibuffer (file-name-as-directory - (expand-file-name candidate)))) - ;; A symlink file, expand to it's true name. (first hit) - ((and (file-symlink-p candidate) (not current-prefix-arg) (not follow)) - (funcall insert-in-minibuffer (file-truename candidate))) - ;; A regular file, expand it, (first hit) - ((and (>= num-lines-buf 3) (not current-prefix-arg) (not follow)) - (setq helm-pattern "") ; Force update. - (funcall insert-in-minibuffer new-pattern)) - ;; An image file and it is the second hit on C-j, - ;; show the file in `image-dired'. - ((string-match (image-file-name-regexp) candidate) - (when (buffer-live-p (get-buffer image-dired-display-image-buffer)) - (kill-buffer image-dired-display-image-buffer)) - ;; Fix emacs bug never fixed upstream. - (unless (file-directory-p image-dired-dir) - (make-directory image-dired-dir)) - (image-dired-display-image candidate) - (message nil) - (switch-to-buffer image-dired-display-image-buffer) - (with-current-buffer image-dired-display-image-buffer - (let ((exif-data (helm-ff-exif-data candidate))) - (setq default-directory helm-ff-default-directory) - (image-dired-update-property 'help-echo exif-data)))) - ;; Allow browsing archive on avfs fs. - ;; Assume volume is already mounted with mountavfs. - ((and helm-ff-avfs-directory - (string-match - (regexp-quote (expand-file-name helm-ff-avfs-directory)) - (file-name-directory candidate)) - (helm-ff-file-compressed-p candidate)) - (funcall insert-in-minibuffer (concat candidate "#"))) - ;; On second hit we open file. - ;; On Third hit we kill it's buffer maybe. - (t - (helm-ff-kill-or-find-buffer-fname candidate))))) - -(defun helm-ff-file-compressed-p (candidate) - "Whether CANDIDATE is a compressed file or not." - (member (file-name-extension candidate) - helm-ff-file-compressed-list)) - -(defun helm-insert-file-name-completion-at-point (candidate) - "Insert file name completion at point." - (with-helm-current-buffer - (if buffer-read-only - (error "Error: Buffer `%s' is read-only" (buffer-name)) - (let* ((end (point)) - (tap (thing-at-point 'filename)) - (guess (and (stringp tap) (substring-no-properties tap))) - (beg (- (point) (length guess))) - (full-path-p (and (stringp guess) - (or (string-match-p - (concat "^" (getenv "HOME")) - guess) - (string-match-p - "\\`\\(/\\|[[:lower:][:upper:]]:/\\)" - guess))))) - (set-text-properties 0 (length candidate) nil candidate) - (if (and guess (not (string= guess "")) - (or (string-match "^\\(~/\\|/\\|[[:lower:][:upper:]]:/\\)" - guess) - (file-exists-p candidate))) - (progn - (delete-region beg end) - (insert (cond (full-path-p - (expand-file-name candidate)) - ((string= (match-string 1 guess) "~/") - (abbreviate-file-name candidate)) - (t (file-relative-name candidate))))) - (insert (cond ((equal helm-current-prefix-arg '(4)) - (abbreviate-file-name candidate)) - ((equal helm-current-prefix-arg '(16)) - (file-relative-name candidate)) - (t candidate)))))))) - -(cl-defun helm-find-files-history (&key (comp-read t)) - "The `helm-find-files' history. -Show the first `helm-ff-history-max-length' elements of -`helm-ff-history' in an `helm-comp-read'." - (let ((history (when helm-ff-history - (helm-fast-remove-dups helm-ff-history - :test 'equal)))) - (when history - (setq helm-ff-history - (if (>= (length history) helm-ff-history-max-length) - (cl-subseq history 0 helm-ff-history-max-length) - history)) - (if comp-read - (helm-comp-read - "Switch to Directory: " - helm-ff-history - :name "Helm Find Files History" - :must-match t) - helm-ff-history)))) - -(defun helm-find-files-1 (fname &optional preselect) - "Find FNAME with `helm' completion. -Like `find-file' but with `helm' support. -Use it for non--interactive calls of `helm-find-files'." - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (setq helm-find-files--toggle-bookmark nil) - (let* ( ;; Be sure we don't erase the precedent minibuffer if some. - (helm-ff-auto-update-initial-value - (and helm-ff-auto-update-initial-value - (not (minibuffer-window-active-p (minibuffer-window))))) - (tap (thing-at-point 'filename)) - (def (and tap (or (file-remote-p tap) - (expand-file-name tap))))) - (unless helm-source-find-files - (setq helm-source-find-files (helm-make-source - "Find Files" 'helm-source-ffiles))) - (unwind-protect - (helm :sources 'helm-source-find-files - :input fname - :case-fold-search helm-file-name-case-fold-search - :preselect preselect - :ff-transformer-show-only-basename - helm-ff-transformer-show-only-basename - :default def - :prompt "Find Files or Url: " - :buffer "*Helm Find Files*") - (setq helm-ff-default-directory nil)))) - -(defun helm-find-files-toggle-to-bookmark () - "Toggle helm-bookmark for `helm-find-files' and `helm-find-files.'" - (interactive) - (with-helm-buffer - (if (setq helm-find-files--toggle-bookmark - (not helm-find-files--toggle-bookmark)) - (progn - (helm-set-pattern "" t) - (helm-set-sources '(helm-source-bookmark-helm-find-files))) - ;; Switch back to helm-find-files. - (helm-set-pattern "./" t) ; Back to initial directory of hff session. - (helm-set-sources '(helm-source-find-files)) - (helm--maybe-update-keymap)))) - -(defun helm-find-files-initial-input (&optional input) - "Return INPUT if present, otherwise try to guess it." - (let ((ffap-machine-p-known 'reject) - (ffap-alist (and helm-ff-guess-ffap-filenames ffap-alist)) - (ffap-url-regexp (and helm-ff-guess-ffap-urls ffap-url-regexp))) - (unless (eq major-mode 'image-mode) - (or (and input (or (and (file-remote-p input) input) - (expand-file-name input))) - (helm-find-files-input - (ffap-guesser) - (thing-at-point 'filename)))))) - -(defun helm-find-files-input (file-at-pt thing-at-pt) - "Try to guess a default input for `helm-find-files'." - (let* ((non-essential t) - (remp (or (and file-at-pt (file-remote-p file-at-pt)) - (and thing-at-pt (file-remote-p thing-at-pt)))) - (def-dir (helm-current-directory)) - (urlp (and file-at-pt ffap-url-regexp - (string-match ffap-url-regexp file-at-pt))) - (lib (when helm-ff-search-library-in-sexp - (helm-find-library-at-point))) - (hlink (helm-ff-find-url-at-point)) - (file-p (and file-at-pt - (not (string= file-at-pt "")) - (not remp) - (file-exists-p file-at-pt) - thing-at-pt - (not (string= thing-at-pt "")) - (file-exists-p - (file-name-directory - (expand-file-name thing-at-pt def-dir)))))) - (cond (lib) ; e.g we are inside a require sexp. - (hlink) ; String at point is an hyperlink. - (file-p ; a regular file - (helm-aif (ffap-file-at-point) (expand-file-name it))) - (urlp file-at-pt) ; possibly an url or email. - ((and file-at-pt - (not remp) - (file-exists-p file-at-pt)) - file-at-pt)))) - -(defun helm-ff-find-url-at-point () - "Try to find link to an url in text-property at point." - (let* ((he (get-text-property (point) 'help-echo)) - (ov (overlays-at (point))) - (ov-he (and ov (overlay-get - (car (overlays-at (point))) 'help-echo))) - (w3m-l (get-text-property (point) 'w3m-href-anchor)) - (nt-prop (get-text-property (point) 'nt-link))) - ;; Org link. - (when (and (stringp he) (string-match "^LINK: " he)) - (setq he (replace-match "" t t he))) - (cl-loop for i in (list he ov-he w3m-l nt-prop) - thereis (and (stringp i) ffap-url-regexp (string-match ffap-url-regexp i) i)))) - -(defun helm-find-library-at-point () - "Try to find library path at point. -Find inside `require' and `declare-function' sexp." - (require 'find-func) - (let* ((beg-sexp (save-excursion (search-backward "(" (point-at-bol) t))) - (end-sexp (save-excursion (search-forward ")" (point-at-eol) t))) - (sexp (and beg-sexp end-sexp - (buffer-substring-no-properties - (1+ beg-sexp) (1- end-sexp))))) - (ignore-errors - (cond ((and sexp (string-match "require \'.+[^)]" sexp)) - (find-library-name - (replace-regexp-in-string - "'\\|\)\\|\(" "" - ;; If require use third arg, ignore it, - ;; always use library path found in `load-path'. - (cl-second (split-string (match-string 0 sexp)))))) - ((and sexp (string-match-p "^declare-function" sexp)) - (find-library-name - (replace-regexp-in-string - "\"\\|ext:" "" - (cl-third (split-string sexp))))) - (t nil))))) - - -;;; Handle copy, rename, symlink, relsymlink and hardlink from helm. -;; -;; -(defun helm-ff--valid-default-directory () - (with-helm-current-buffer - (cl-loop for b in (buffer-list) - for cd = (with-current-buffer b default-directory) - when (eq (car (file-attributes cd)) t) - return cd))) - -(defvar dired-async-mode) -(cl-defun helm-dired-action (candidate - &key action follow (files (dired-get-marked-files))) - "Execute ACTION on FILES to CANDIDATE. -Where ACTION is a symbol that can be one of: -'copy, 'rename, 'symlink,'relsymlink, 'hardlink. -Argument FOLLOW when non--nil specify to follow FILES to destination for the actions -copy and rename." - (when (get-buffer dired-log-buffer) (kill-buffer dired-log-buffer)) - ;; When default-directory in current-buffer is an invalid directory, - ;; (e.g buffer-file directory have been renamed somewhere else) - ;; be sure to use a valid value to give to dired-create-file. - ;; i.e start-process is creating a process buffer based on default-directory. - (let ((default-directory (helm-ff--valid-default-directory)) - (fn (cl-case action - (copy 'dired-copy-file) - (rename 'dired-rename-file) - (symlink 'make-symbolic-link) - (relsymlink 'dired-make-relative-symlink) - (hardlink 'dired-hardlink))) - (marker (cl-case action - ((copy rename) dired-keep-marker-copy) - (symlink dired-keep-marker-symlink) - (relsymlink dired-keep-marker-relsymlink) - (hardlink dired-keep-marker-hardlink))) - (dirflag (and (= (length files) 1) - (file-directory-p (car files)) - (not (file-directory-p candidate)))) - (dired-async-state (if (and (boundp 'dired-async-mode) - dired-async-mode) - 1 -1))) - (and follow (fboundp 'dired-async-mode) (dired-async-mode -1)) - (unwind-protect - (dired-create-files - fn (symbol-name action) files - ;; CANDIDATE is the destination. - (if (file-directory-p candidate) - ;; When CANDIDATE is a directory, build file-name in this directory. - ;; Else we use CANDIDATE. - (lambda (from) - (expand-file-name (file-name-nondirectory from) candidate)) - (lambda (_from) candidate)) - marker) - (and (fboundp 'dired-async-mode) - (dired-async-mode dired-async-state))) - (push (file-name-as-directory - (if (file-directory-p candidate) - (expand-file-name candidate) - (file-name-directory candidate))) - helm-ff-history) - ;; If follow is non--nil we should not be in async mode. - (when (and follow - (not (memq action '(symlink relsymlink hardlink))) - (not (get-buffer dired-log-buffer))) - (let ((target (directory-file-name candidate))) - (unwind-protect - (progn - (setq helm-ff-cand-to-mark - (helm-get-dest-fnames-from-list files candidate dirflag)) - (with-helm-after-update-hook (helm-ff-maybe-mark-candidates)) - (if (and dirflag (eq action 'rename)) - (helm-find-files-1 (file-name-directory target) - (if helm-ff-transformer-show-only-basename - (helm-basename target) target)) - (helm-find-files-1 (file-name-as-directory - (expand-file-name candidate))))) - (setq helm-ff-cand-to-mark nil)))))) - -(defun helm-get-dest-fnames-from-list (flist dest-cand rename-dir-flag) - "Transform filenames of FLIST to abs of DEST-CAND. -If RENAME-DIR-FLAG is non--nil collect the `directory-file-name' of transformed -members of FLIST." - ;; At this point files have been renamed/copied at destination. - ;; That's mean DEST-CAND exists. - (cl-loop - with dest = (expand-file-name dest-cand) - for src in flist - for basename-src = (helm-basename src) - for fname = (cond (rename-dir-flag (directory-file-name dest)) - ((file-directory-p dest) - (concat (file-name-as-directory dest) basename-src)) - (t dest)) - when (file-exists-p fname) - collect fname into tmp-list - finally return (sort tmp-list 'string<))) - -(defun helm-ff-maybe-mark-candidates () - "Mark all candidates of list `helm-ff-cand-to-mark'. -This is used when copying/renaming/symlinking etc... and -following files to destination." - (when (and (string= (assoc-default 'name (helm-get-current-source)) - (assoc-default 'name helm-source-find-files)) - helm-ff-cand-to-mark) - (with-helm-window - (while helm-ff-cand-to-mark - (if (string= (car helm-ff-cand-to-mark) (helm-get-selection)) - (progn - (helm-make-visible-mark) - (helm-next-line) - (setq helm-ff-cand-to-mark (cdr helm-ff-cand-to-mark))) - (helm-next-line))) - (unless (helm-this-visible-mark) - (helm-prev-visible-mark))))) - - -;;; Routines for files -;; -;; -(defun helm-file-buffers (filename) - "Returns a list of buffer names corresponding to FILENAME." - (cl-loop with name = (expand-file-name filename) - for buf in (buffer-list) - for bfn = (buffer-file-name buf) - when (and bfn (string= name bfn)) - collect (buffer-name buf))) - -(defun helm-delete-file (file &optional error-if-dot-file-p synchro) - "Delete the given file after querying the user. -Ask to kill buffers associated with that file, too." - (when (and error-if-dot-file-p - (helm-ff-dot-file-p file)) - (error "Error: Cannot operate on `.' or `..'")) - (let ((buffers (helm-file-buffers file)) - (helm--reading-passwd-or-string t)) - (if (or (< emacs-major-version 24) synchro) - ;; `dired-delete-file' in Emacs versions < 24 - ;; doesn't support delete-by-moving-to-trash - ;; so use `delete-directory' and `delete-file' - ;; that handle it. - (cond ((and (not (file-symlink-p file)) - (file-directory-p file) - (directory-files file t dired-re-no-dot)) - (when (y-or-n-p (format "Recursive delete of `%s'? " file)) - (delete-directory file 'recursive))) - ((and (not (file-symlink-p file)) - (file-directory-p file)) - (delete-directory file)) - (t (delete-file file))) - (dired-delete-file - file dired-recursive-deletes delete-by-moving-to-trash)) - (when buffers - (cl-dolist (buf buffers) - (when (y-or-n-p (format "Kill buffer %s, too? " buf)) - (kill-buffer buf)))))) - -(defun helm-delete-marked-files (_ignore) - (let* ((files (helm-marked-candidates :with-wildcard t)) - (len (length files))) - (with-helm-display-marked-candidates - helm-marked-buffer-name - (mapcar (lambda (f) - (if (file-directory-p f) - (concat (helm-basename f) "/") - (helm-basename f))) - files) - (if (not (y-or-n-p (format "Delete *%s File(s)" len))) - (message "(No deletions performed)") - (cl-dolist (i files) - (set-text-properties 0 (length i) nil i) - (helm-delete-file i helm-ff-signal-error-on-dot-files)) - (message "%s File(s) deleted" len))))) - -(defun helm-find-file-or-marked (candidate) - "Open file CANDIDATE or open helm marked files in separate windows. -Called with a prefix arg open files in background without selecting them." - (let ((marked (helm-marked-candidates :with-wildcard t)) - (url-p (and ffap-url-regexp ; we should have only one candidate. - (string-match ffap-url-regexp candidate))) - (ffap-newfile-prompt helm-ff-newfile-prompt-p) - (find-file-wildcards nil) - (make-dir-fn - (lambda (dir &optional helm-ff) - (when (or (not confirm-nonexistent-file-or-buffer) - (y-or-n-p (format "Create directory `%s'? " dir))) - (let ((dirfname (directory-file-name dir))) - (if (file-exists-p dirfname) - (error - "Mkdir: Unable to create directory `%s': file exists." - (helm-basename dirfname)) - (make-directory dir 'parent))) - (when helm-ff - ;; Allow having this new dir in history - ;; to be able to retrieve it immediately - ;; if we want to e.g copy a file from somewhere in it. - (setq helm-ff-default-directory - (file-name-as-directory dir)) - (push helm-ff-default-directory helm-ff-history)) - (or (and helm-ff (helm-find-files-1 dir)) t)))) - (helm--reading-passwd-or-string t)) - (if (cdr marked) - (if helm-current-prefix-arg - (dired-simultaneous-find-file marked nil) - (mapc 'find-file-noselect (cdr marked)) - (find-file (car marked))) - (if (and (not (file-exists-p candidate)) - (not url-p) - (string-match "/$" candidate)) - ;; A a non--existing filename ending with / - ;; Create a directory and jump to it. - (funcall make-dir-fn candidate 'helm-ff) - ;; A non--existing filename NOT ending with / or - ;; an existing filename, create or jump to it. - ;; If the basedir of candidate doesn't exists, - ;; ask for creating it. - (let ((dir (and (not url-p) (helm-basedir candidate)))) - (find-file-at-point - (cond ((and dir (file-directory-p dir)) - (substitute-in-file-name candidate)) - (url-p candidate) - ((funcall make-dir-fn dir) candidate)))))))) - -(defun helm-shadow-boring-files (files) - "Files matching `helm-boring-file-regexp' will be -displayed with the `file-name-shadow' face if available." - (helm-shadow-entries files helm-boring-file-regexp-list)) - -(defun helm-skip-boring-files (files) - "Files matching `helm-boring-file-regexp' will be skipped." - (helm-skip-entries files helm-boring-file-regexp-list)) - -(defun helm-skip-current-file (files) - "Current file will be skipped." - (remove (buffer-file-name helm-current-buffer) files)) - -(defun helm-w32-pathname-transformer (args) - "Change undesirable features of windows pathnames to ones more acceptable to -other candidate transformers." - (if (eq system-type 'windows-nt) - (helm-transform-mapcar - (lambda (x) - (replace-regexp-in-string - "/cygdrive/\\(.\\)" "\\1:" - (replace-regexp-in-string "\\\\" "/" x))) - args) - args)) - -(defun helm-transform-file-load-el (actions candidate) - "Add action to load the file CANDIDATE if it is an emacs lisp -file. Else return ACTIONS unmodified." - (if (member (file-name-extension candidate) '("el" "elc")) - (append actions '(("Load Emacs Lisp File" . load-file))) - actions)) - -(defun helm-transform-file-browse-url (actions candidate) - "Add an action to browse the file CANDIDATE if it is a html file or URL. -Else return ACTIONS unmodified." - (let ((browse-action '("Browse with Browser" . browse-url))) - (cond ((string-match "^http\\|^ftp" candidate) - (cons browse-action actions)) - ((string-match "\\.html?$" candidate) - (append actions (list browse-action))) - (t actions)))) - -(defun helm-multi-files-toggle-to-locate () - (interactive) - (with-helm-buffer - (if (setq helm-multi-files--toggle-locate - (not helm-multi-files--toggle-locate)) - (progn - (helm-set-sources (unless (memq 'helm-source-locate - helm-sources) - (cons 'helm-source-locate helm-sources))) - (helm-set-source-filter '(helm-source-locate))) - (helm-kill-async-processes) - (helm-set-sources (remove 'helm-source-locate - helm-for-files-preferred-list)) - (helm-set-source-filter nil)))) - - -;;; List of files gleaned from every dired buffer -;; -;; -(defun helm-files-in-all-dired-candidates () - (save-excursion - (cl-loop for (f . b) in dired-buffers - when (buffer-live-p b) - append (let ((dir (with-current-buffer b dired-directory))) - (if (listp dir) (cdr dir) - (directory-files f t dired-re-no-dot)))))) - -;; (dired '("~/" "~/.emacs.d/.emacs-custom.el" "~/.emacs.d/.emacs.bmk")) - -(defclass helm-files-dired-source (helm-source-sync helm-type-file) - ((candidates :initform #'helm-files-in-all-dired-candidates))) - -(defvar helm-source-files-in-all-dired - (helm-make-source "Files in all dired buffer." 'helm-files-dired-source)) - - -;;; File Cache -;; -;; -(defvar file-cache-alist) - -(defclass helm-file-cache (helm-source-in-buffer helm-type-file) - ((init :initform (lambda () (require 'filecache))) - (keymap :initform helm-generic-files-map) - (help-message :initform helm-generic-file-help-message))) - -(defun helm-file-cache-get-candidates () - (cl-loop for item in file-cache-alist append - (cl-destructuring-bind (base &rest dirs) item - (cl-loop for dir in dirs collect - (concat dir base))))) - -(defvar helm-source-file-cache nil) - -(defcustom helm-file-cache-fuzzy-match nil - "Enable fuzzy matching in `helm-source-file-cache' when non--nil." - :group 'helm-files - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-file-cache - (helm-make-source "File Cache" 'helm-file-cache - :fuzzy-match helm-file-cache-fuzzy-match - :data 'helm-file-cache-get-candidates)))) - -(cl-defun helm-file-cache-add-directory-recursively - (dir &optional match (ignore-dirs t)) - (require 'filecache) - (cl-loop for f in (helm-walk-directory - dir - :path 'full - :directories nil - :match match - :skip-subdirs ignore-dirs) - do (file-cache-add-file f))) - -(defun helm-ff-cache-add-file (_candidate) - (require 'filecache) - (let ((mkd (helm-marked-candidates :with-wildcard t))) - (mapc 'file-cache-add-file mkd))) - -(defun helm-ff-file-cache-remove-file-1 (file) - "Remove FILE from `file-cache-alist'." - (let ((entry (assoc (helm-basename file) file-cache-alist)) - (dir (helm-basedir file)) - new-entry) - (setq new-entry (remove dir entry)) - (when (= (length entry) 1) - (setq new-entry nil)) - (setq file-cache-alist - (cons new-entry (remove entry file-cache-alist))))) - -(defun helm-ff-file-cache-remove-file (_file) - "Remove marked files from `file-cache-alist.'" - (let ((mkd (helm-marked-candidates))) - (mapc 'helm-ff-file-cache-remove-file-1 mkd))) - -(defun helm-transform-file-cache (actions _candidate) - (let ((source (helm-get-current-source))) - (if (string= (assoc-default 'name source) "File Cache") - (append actions - '(("Remove marked files from file-cache" - . helm-ff-file-cache-remove-file))) - actions))) - - -;;; File name history -;; -;; -(defvar helm-source-file-name-history - (helm-build-sync-source "File Name History" - :candidates 'file-name-history - :persistent-action #'ignore - :filtered-candidate-transformer #'helm-file-name-history-transformer - :action 'helm-type-file-actions)) - -(defvar helm-source--ff-file-name-history nil - "[Internal] This source is build to be used with `helm-find-files'. -Don't use it in your own code unless you know what you are doing.") - -(defun helm-file-name-history-transformer (candidates _source) - (cl-loop for c in candidates collect - (cond ((file-remote-p c) - (cons (propertize c 'face 'helm-history-remote) c)) - ((file-exists-p c) - (cons (propertize c 'face 'helm-ff-file) c)) - (t (cons (propertize c 'face 'helm-history-deleted) c))))) - -(defun helm-ff-file-name-history () - "Switch to `file-name-history' without quitting `helm-find-files'." - (interactive) - (unless helm-source--ff-file-name-history - (setq helm-source--ff-file-name-history - (helm-build-sync-source "File name history" - :init (lambda () - (with-helm-alive-p - (when helm-ff-file-name-history-use-recentf - (require 'recentf) - (or recentf-mode (recentf-mode 1))))) - :candidates (lambda () - (if helm-ff-file-name-history-use-recentf - recentf-list - file-name-history)) - :fuzzy-match t - :persistent-action 'ignore - :migemo t - :filtered-candidate-transformer 'helm-file-name-history-transformer - :action (helm-make-actions - "Find file" (lambda (candidate) - (helm-set-pattern - (expand-file-name candidate)) - (with-helm-after-update-hook (helm-exit-minibuffer))) - "Find file in helm" (lambda (candidate) - (helm-set-pattern - (expand-file-name candidate))))))) - (with-helm-alive-p - (helm :sources 'helm-source--ff-file-name-history - :buffer "*helm-file-name-history*" - :allow-nest t - :resume 'noresume))) - -;;; Recentf files -;; -;; -(defvar helm-recentf--basename-flag nil) - -(defun helm-recentf-pattern-transformer (pattern) - (let ((pattern-no-flag (replace-regexp-in-string " -b" "" pattern))) - (cond ((and (string-match " " pattern-no-flag) - (string-match " -b\\'" pattern)) - (setq helm-recentf--basename-flag t) - pattern-no-flag) - ((string-match "\\([^ ]*\\) -b\\'" pattern) - (prog1 (match-string 1 pattern) - (setq helm-recentf--basename-flag t))) - (t (setq helm-recentf--basename-flag nil) - pattern)))) - -(defclass helm-recentf-source (helm-source-sync helm-type-file) - ((init :initform (lambda () - (require 'recentf) - (recentf-mode 1))) - (candidates :initform (lambda () recentf-list)) - (pattern-transformer :initform 'helm-recentf-pattern-transformer) - (match-part :initform (lambda (candidate) - (if (or helm-ff-transformer-show-only-basename - helm-recentf--basename-flag) - (helm-basename candidate) candidate))) - (migemo :initform t) - (keymap :initform helm-generic-files-map) - (help-message :initform helm-generic-file-help-message))) - -(defmethod helm--setup-source :after ((source helm-recentf-source)) - (set-slot-value - source 'action - (append (symbol-value (helm-actions-from-type-file)) - '(("Delete file(s) from recentf" . - (lambda (_candidate) - (cl-loop for file in (helm-marked-candidates) - do (setq recentf-list (delq file recentf-list))))))))) - -(defvar helm-source-recentf nil - "See (info \"(emacs)File Conveniences\"). -Set `recentf-max-saved-items' to a bigger value if default is too small.") - -(defcustom helm-recentf-fuzzy-match nil - "Enable fuzzy matching in `helm-source-recentf' when non--nil." - :group 'helm-files - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-recentf - (helm-make-source "Recentf" 'helm-recentf-source - :fuzzy-match helm-recentf-fuzzy-match)))) - -;;; Browse project -;; Need dependencies: -;; -;; -;; Only hg and git are supported for now. -(defvar helm--browse-project-cache (make-hash-table :test 'equal)) - -(defun helm-browse-project-get-buffers (root-directory) - (cl-loop for b in (helm-buffer-list) - ;; FIXME: Why default-directory is root-directory - ;; for current-buffer when coming from helm-quit-and-find-file. - for cd = (with-current-buffer b default-directory) - for bn = (buffer-file-name (get-buffer b)) - if (or (and bn (file-in-directory-p bn root-directory)) - (and (null bn) - (file-in-directory-p cd root-directory))) - collect b)) - -(defun helm-browse-project-build-buffers-source (directory) - (helm-make-source "Buffers in project" 'helm-source-buffers - :header-name (lambda (name) - (format - "%s (%s)" - name (abbreviate-file-name directory))) - :buffer-list (lambda () (helm-browse-project-get-buffers directory)))) - -(defun helm-browse-project-find-files (directory &optional refresh) - (when refresh (remhash directory helm--browse-project-cache)) - (unless (gethash directory helm--browse-project-cache) - (puthash directory (helm-walk-directory - directory - :directories nil :path 'full :skip-subdirs t) - helm--browse-project-cache)) - (helm :sources `(,(helm-browse-project-build-buffers-source directory) - ,(helm-build-in-buffer-source "Browse project" - :data (gethash directory helm--browse-project-cache) - :header-name (lambda (name) - (format - "%s (%s)" - name (abbreviate-file-name directory))) - :match-part (lambda (c) - (if helm-ff-transformer-show-only-basename - (helm-basename c) c)) - :filter-one-by-one - (lambda (c) - (if helm-ff-transformer-show-only-basename - (cons (propertize (helm-basename c) - 'face 'helm-ff-file) - c) - (propertize c 'face 'helm-ff-file))) - :keymap helm-generic-files-map - :action 'helm-type-file-actions)) - :buffer "*helm browse project*")) - -;;;###autoload -(defun helm-browse-project (arg) - "Preconfigured helm to browse projects. -Browse files and see status of project with its vcs. -Only HG and GIT are supported for now. -Fall back to `helm-browse-project-find-files' -if current directory is not under control of one of those vcs. -With a prefix ARG browse files recursively, with two prefix ARG -rebuild the cache. -If the current directory is found in the cache, start -`helm-browse-project-find-files' even with no prefix ARG. -NOTE: The prefix ARG have no effect on the VCS controlled directories. - -Needed dependencies for VCS: - -and - -and -." - (interactive "P") - (cond ((and (require 'helm-ls-git nil t) - (fboundp 'helm-ls-git-root-dir) - (helm-ls-git-root-dir)) - (helm-ls-git-ls)) - ((and (require 'helm-ls-hg nil t) - (fboundp 'helm-hg-root) - (helm-hg-root)) - (helm-hg-find-files-in-project)) - ((and (require 'helm-ls-svn nil t) - (fboundp 'helm-ls-svn-root-dir) - (helm-ls-svn-root-dir)) - (helm-ls-svn-ls)) - (t (let ((cur-dir (helm-browse-project-get--root-dir - (helm-current-directory)))) - (if (or arg (gethash cur-dir helm--browse-project-cache)) - (helm-browse-project-find-files cur-dir (equal arg '(16))) - (helm :sources (helm-browse-project-build-buffers-source cur-dir) - :buffer "*helm browse project*")))))) - -(defun helm-browse-project-get--root-dir (directory) - (cl-loop with dname = (file-name-as-directory directory) - while (and dname (not (gethash dname helm--browse-project-cache))) - if (file-remote-p dname) - do (setq dname nil) else - do (setq dname (helm-basedir (substring dname 0 (1- (length dname))))) - finally return (or dname (file-name-as-directory directory)))) - -(defun helm-ff-browse-project (_candidate) - "Browse project in current directory. -See `helm-browse-project'." - (with-helm-default-directory helm-ff-default-directory - (helm-browse-project helm-current-prefix-arg))) - -(defun helm-ff-run-browse-project () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-browse-project))) - -(defun helm-ff-gid (_candidate) - (with-helm-default-directory helm-ff-default-directory - (helm-gid))) - -(defun helm-ff-run-gid () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-gid))) - -;;; session.el files -;; -;; session (http://emacs-session.sourceforge.net/) is an alternative to -;; recentf that saves recent file history and much more. -(defvar session-file-alist) -(defvar helm-source-session - (helm-build-sync-source "Session" - :candidates (lambda () - (cl-delete-if-not (lambda (f) - (or (string-match helm-tramp-file-name-regexp f) - (file-exists-p f))) - (mapcar 'car session-file-alist))) - :keymap helm-generic-files-map - :help-message helm-generic-file-help-message - :action 'helm-type-file-actions) - "File list from emacs-session.") - - -;;; Files in current dir -;; -;; -(defun helm-highlight-files (files) - "A basic transformer for helm files sources. -Colorize only symlinks, directories and files." - (cl-loop for i in files - for disp = (if (and helm-ff-transformer-show-only-basename - (not (helm-dir-is-dot i)) - (not (and ffap-url-regexp - (string-match ffap-url-regexp i))) - (not (string-match helm-ff-url-regexp i))) - (helm-basename i) i) - for type = (and (null helm-ff-tramp-not-fancy) - (car (file-attributes i))) - collect - (cond ((and helm-ff-tramp-not-fancy - (string-match helm-tramp-file-name-regexp i)) - (cons disp i)) - ((stringp type) - (cons (propertize disp - 'face 'helm-ff-symlink - 'help-echo (expand-file-name i)) - i)) - ((eq type t) - (cons (propertize disp - 'face 'helm-ff-directory - 'help-echo (expand-file-name i)) - i)) - (t (cons (propertize disp - 'face 'helm-ff-file - 'help-echo (expand-file-name i)) - i))))) - -(defclass helm-files-in-current-dir-source (helm-source-sync helm-type-file) - ((candidates :initform (lambda () - (with-helm-current-buffer - (let ((dir (helm-current-directory))) - (when (file-accessible-directory-p dir) - (directory-files dir t)))))) - (pattern-transformer :initform 'helm-recentf-pattern-transformer) - (match-part :initform (lambda (candidate) - (if (or helm-ff-transformer-show-only-basename - helm-recentf--basename-flag) - (helm-basename candidate) candidate))) - (fuzzy-match :initform t) - (migemo :initform t) - (keymap :initform helm-generic-files-map) - (help-message :initform helm-generic-file-help-message))) - -(defvar helm-source-files-in-current-dir - (helm-make-source "Files from Current Directory" - helm-files-in-current-dir-source)) - - -;;; External searching file tools. -;; -;; Tracker desktop search -(defvar helm-source-tracker-cand-incomplete nil "Contains incomplete candidate") -(defun helm-source-tracker-transformer (candidates _source) - (helm-log "received: %S" candidates) - (cl-loop for cand in candidates - for path = (when (stringp helm-source-tracker-cand-incomplete) - (caar (helm-highlight-files - (list helm-source-tracker-cand-incomplete)))) - for built = (if (not (stringp cand)) cand - (let ((snippet cand)) - (unless (or (null path) - (string= "" path) - (not (string-match-p - "\\`[[:space:]]*\\.\\.\\." - snippet))) - (let ((complete-candidate - (cons (concat path "\n" snippet) path))) - (setq helm-source-tracker-cand-incomplete nil) - (helm-log "built: %S" complete-candidate) - complete-candidate)))) - when (and (stringp cand) - (string-match "\\`[[:space:]]*file://" cand)) - do (setq helm-source-tracker-cand-incomplete ; save path - (replace-match "" t t cand)) end - collect built)) - -(defvar helm-source-tracker-search - (helm-build-async-source "Tracker Search" - :candidates-process - (lambda () - (start-process "tracker-search-process" nil - "tracker-search" - "--disable-color" - "--limit=512" - helm-pattern)) - :filtered-candidate-transformer #'helm-source-tracker-transformer - ;;(multiline) ; https://github.com/emacs-helm/helm/issues/529 - :keymap helm-generic-files-map - :action 'helm-type-file-actions - :action-transformer '(helm-transform-file-load-el - helm-transform-file-browse-url) - :requires-pattern 3) - "Source for retrieving files matching the current input pattern -with the tracker desktop search.") - -;; Spotlight (MacOS X desktop search) -(defclass helm-mac-spotlight-source (helm-source-async helm-type-file) - ((candidates-process :initform - (lambda () - (start-process - "mdfind-process" nil "mdfind" helm-pattern))) - (requires-pattern :initform 3))) - -(defvar helm-source-mac-spotlight - (helm-make-source "mdfind" helm-mac-spotlight-source) - "Source for retrieving files via Spotlight's command line -utility mdfind.") - - -;;; Findutils -;; -;; -(defvar helm-source-findutils - (helm-build-async-source "Find" - :header-name (lambda (name) - (concat name " in [" (helm-default-directory) "]")) - :candidates-process 'helm-find-shell-command-fn - :filtered-candidate-transformer 'helm-findutils-transformer - :action-transformer 'helm-transform-file-load-el - :persistent-action 'helm-ff-kill-or-find-buffer-fname - :action 'helm-type-file-actions - :keymap helm-generic-files-map - :candidate-number-limit 9999 - :requires-pattern 3)) - -(defun helm-findutils-transformer (candidates _source) - (let (non-essential - (default-directory (helm-default-directory))) - (cl-loop for i in candidates - for abs = (expand-file-name - (helm-aif (file-remote-p default-directory) - (concat it i) i)) - for type = (car (file-attributes abs)) - for disp = (if (and helm-ff-transformer-show-only-basename - (not (string-match "[.]\\{1,2\\}$" i))) - (helm-basename abs) abs) - collect (cond ((eq t type) - (cons (propertize disp 'face 'helm-ff-directory) - abs)) - ((stringp type) - (cons (propertize disp 'face 'helm-ff-symlink) - abs)) - (t (cons (propertize disp 'face 'helm-ff-file) - abs)))))) - -(defun helm-find--build-cmd-line () - (require 'find-cmd) - (let* ((default-directory (or (file-remote-p default-directory 'localname) - default-directory)) - (patterns+options (split-string helm-pattern "\\(\\`\\| +\\)\\* +")) - (fold-case (helm-set-case-fold-search (car patterns+options))) - (patterns (split-string (car patterns+options))) - (additional-options (and (cdr patterns+options) - (list (concat (cadr patterns+options) " ")))) - (ignored-dirs ()) - (ignored-files (when helm-findutils-skip-boring-files - (cl-loop for f in completion-ignored-extensions - if (string-match "/$" f) - do (push (replace-match "" nil t f) - ignored-dirs) - else collect (concat "*" f)))) - (path-or-name (if helm-findutils-search-full-path - '(ipath path) '(iname name))) - (name-or-iname (if fold-case - (car path-or-name) (cadr path-or-name)))) - (find-cmd (and ignored-dirs - `(prune (name ,@ignored-dirs))) - (and ignored-files - `(not (name ,@ignored-files))) - `(and ,@(mapcar - (lambda (pattern) - `(,name-or-iname ,(concat "*" pattern "*"))) - patterns) - ,@additional-options)))) - -(defun helm-find-shell-command-fn () - "Asynchronously fetch candidates for `helm-find'. -Additional find options can be specified after a \"*\" -separator." - (let* (process-connection-type - non-essential - (cmd (helm-find--build-cmd-line)) - (proc (start-file-process-shell-command "hfind" helm-buffer cmd))) - (helm-log "Find command:\n%s" cmd) - (prog1 proc - (set-process-sentinel - proc - (lambda (process event) - (helm-process-deferred-sentinel-hook - process event (helm-default-directory)) - (if (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Find process finished - (%s results)]" - (max (1- (count-lines - (point-min) (point-max))) - 0)) - 'face 'helm-locate-finish)))) - (force-mode-line-update)) - (helm-log "Error: Find %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defun helm-find-1 (dir) - (let ((default-directory (file-name-as-directory dir))) - (helm :sources 'helm-source-findutils - :buffer "*helm find*" - :ff-transformer-show-only-basename nil - :case-fold-search helm-file-name-case-fold-search))) - -;; helm-find-files integration. -(defun helm-ff-find-sh-command (_candidate) - "Run `helm-find' from `helm-find-files'." - (helm-find-1 helm-ff-default-directory)) - -(defun helm-ff-run-find-sh-command () - "Run find shell command action with key from `helm-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-find-sh-command))) - - -;;; Preconfigured commands -;; -;; -;;;###autoload -(defun helm-find (arg) - "Preconfigured `helm' for the find shell command." - (interactive "P") - (let ((directory - (if arg - (file-name-as-directory - (read-directory-name "DefaultDirectory: ")) - default-directory))) - (helm-find-1 directory))) - -(defvar org-directory) -;;;###autoload -(defun helm-find-files (arg) - "Preconfigured `helm' for helm implementation of `find-file'. -Called with a prefix arg show history if some. -Don't call it from programs, use `helm-find-files-1' instead. -This is the starting point for nearly all actions you can do on files." - (interactive "P") - (let* ((hist (and arg helm-ff-history (helm-find-files-history))) - (default-input (or hist (helm-find-files-initial-input))) - (input (cond ((and (eq major-mode 'org-agenda-mode) - org-directory - (not default-input)) - (expand-file-name org-directory)) - ((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))))) - (input-as-presel (null (nth 0 (file-attributes input)))) - (presel (helm-aif (or hist - (and input-as-presel input) - (buffer-file-name (current-buffer)) - (and (eq major-mode 'dired-mode) - default-input)) - (if helm-ff-transformer-show-only-basename - (helm-basename it) it)))) - (set-text-properties 0 (length input) nil input) - (helm-find-files-1 input (and presel (concat "^" (regexp-quote presel)))))) - -;;;###autoload -(defun helm-for-files () - "Preconfigured `helm' for opening files. -Run all sources defined in `helm-for-files-preferred-list'." - (interactive) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (helm :sources helm-for-files-preferred-list - :ff-transformer-show-only-basename nil - :buffer "*helm for files*")) - -;;;###autoload -(defun helm-multi-files () - "Preconfigured helm similar to `helm-for-files' but that don't run locate. -Allow toggling from locate to others sources. -This allow seeing first if what you search is in other sources before launching -locate." - (interactive) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (setq helm-multi-files--toggle-locate nil) - (let ((sources (remove 'helm-source-locate helm-for-files-preferred-list)) - (old-key (lookup-key - helm-map - (read-kbd-macro helm-multi-files-toggle-locate-binding)))) - (with-helm-temp-hook 'helm-after-initialize-hook - (define-key helm-map (kbd helm-multi-files-toggle-locate-binding) - 'helm-multi-files-toggle-to-locate)) - (unwind-protect - (helm :sources sources - :ff-transformer-show-only-basename nil - :buffer "*helm multi files*") - (define-key helm-map (kbd helm-multi-files-toggle-locate-binding) - old-key)))) - -;;;###autoload -(defun helm-recentf () - "Preconfigured `helm' for `recentf'." - (interactive) - (helm :sources 'helm-source-recentf - :ff-transformer-show-only-basename nil - :buffer "*helm recentf*")) - -(provide 'helm-files) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-files.el ends here diff --git a/elpa/helm-20160105.2046/helm-font.el b/elpa/helm-20160105.2046/helm-font.el deleted file mode 100644 index 732f6ff5..00000000 --- a/elpa/helm-20160105.2046/helm-font.el +++ /dev/null @@ -1,179 +0,0 @@ -;;; helm-font --- Font and ucs selection for Helm -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) - -(defvar helm-ucs-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-ucs-persistent-delete) - (define-key map (kbd "") 'helm-ucs-persistent-backward) - (define-key map (kbd "") 'helm-ucs-persistent-forward) - (define-key map (kbd "") 'helm-ucs-persistent-insert) - map) - "Keymap for `helm-ucs'.") - - -;;; Xfont selection -;; -;; -(defvar helm-xfonts-cache nil) -(defvar helm-previous-font nil) -(defvar helm-source-xfonts - (helm-build-sync-source "X Fonts" - :init (lambda () - (unless helm-xfonts-cache - (setq helm-xfonts-cache - (x-list-fonts "*"))) - ;; Save current font so it can be restored in cleanup - (setq helm-previous-font (cdr (assoc 'font (frame-parameters))))) - :candidates 'helm-xfonts-cache - :action '(("Copy font to kill ring" . (lambda (elm) - (kill-new elm))) - ("Set font" . (lambda (elm) - (kill-new elm) - (set-frame-font elm 'keep-size) - (message "Font copied to kill ring")))) - :cleanup (lambda () - ;; Restore previous font - (set-frame-font helm-previous-font 'keep-size)) - :persistent-action (lambda (new-font) - (set-frame-font new-font 'keep-size) - (kill-new new-font)) - :persistent-help "Preview font and copy to kill-ring")) - -;;; 𝕌𝕔𝕤 𝕊𝕪𝕞𝕓𝕠𝕝 𝕔𝕠𝕞𝕡𝕝𝕖𝕥𝕚𝕠𝕟 -;; -;; -(defvar helm-ucs--max-len 0) -(defvar helm-ucs--names nil) -(defun helm-calculate-ucs-max-len () - "Calculate the length of longest `ucs-names' candidate." - (cl-loop with count = 0 - for (n . v) in (ucs-names) - for len = (length n) - if (> len count) - do (setq count len) - finally return count)) - -(defun helm-ucs-init () - "Initialize an helm buffer with ucs symbols. -Only math* symbols are collected." - (unless (> helm-ucs--max-len 0) - (setq helm-ucs--max-len - (helm-calculate-ucs-max-len))) - (or helm-ucs--names - (setq helm-ucs--names - (cl-loop for (n . v) in (ucs-names) - for len = (length n) - for diff = (+ (- helm-ucs--max-len len) 2) - unless (string= "" n) - collect (format "%s:%s%c #x%x" - n (make-string diff ? ) v v))))) - -(defun helm-ucs-forward-char (_candidate) - (with-helm-current-buffer - (forward-char 1))) - -(defun helm-ucs-backward-char (_candidate) - (with-helm-current-buffer - (forward-char -1))) - -(defun helm-ucs-delete-backward (_candidate) - (with-helm-current-buffer - (delete-char -1))) - -(defun helm-ucs-insert (candidate n) - (with-helm-current-buffer - (string-match "^\\([^:]+\\): +\\(.\\) \\(#x[a-f0-9]+\\)$" candidate) - (insert (match-string n candidate)))) - -(defun helm-ucs-insert-name (candidate) - (helm-ucs-insert candidate 1)) - -(defun helm-ucs-insert-char (candidate) - (helm-ucs-insert candidate 2)) - -(defun helm-ucs-insert-code (candidate) - (helm-ucs-insert candidate 3)) - -(defun helm-ucs-persistent-insert () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-insert 'helm-ucs-insert-char) - (helm-execute-persistent-action 'action-insert))) - -(defun helm-ucs-persistent-forward () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-forward 'helm-ucs-forward-char) - (helm-execute-persistent-action 'action-forward))) - -(defun helm-ucs-persistent-backward () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-back 'helm-ucs-backward-char) - (helm-execute-persistent-action 'action-back))) - -(defun helm-ucs-persistent-delete () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-delete 'helm-ucs-delete-backward) - (helm-execute-persistent-action 'action-delete))) - -(defvar helm-source-ucs - (helm-build-in-buffer-source "Ucs names" - :data #'helm-ucs-init - :help-message 'helm-ucs-help-message - :match-part (lambda (candidate) (car (split-string candidate ":"))) - :filtered-candidate-transformer - (lambda (candidates _source) (sort candidates #'helm-generic-sort-fn)) - :action '(("Insert character" . helm-ucs-insert-char) - ("Insert character name" . helm-ucs-insert-name) - ("Insert character code in hex" . helm-ucs-insert-code) - ("Forward char" . helm-ucs-forward-char) - ("Backward char" . helm-ucs-backward-char) - ("Delete char backward" . helm-ucs-delete-backward))) - "Source for collecting `ucs-names' math symbols.") - -;;;###autoload -(defun helm-select-xfont () - "Preconfigured `helm' to select Xfont." - (interactive) - (helm :sources 'helm-source-xfonts - :buffer "*helm select xfont*")) - -;;;###autoload -(defun helm-ucs () - "Preconfigured helm for `ucs-names' math symbols." - (interactive) - (helm :sources 'helm-source-ucs - :keymap helm-ucs-map)) - -(provide 'helm-font) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-font.el ends here diff --git a/elpa/helm-20160105.2046/helm-grep.el b/elpa/helm-20160105.2046/helm-grep.el deleted file mode 100644 index a2134bd9..00000000 --- a/elpa/helm-20160105.2046/helm-grep.el +++ /dev/null @@ -1,1326 +0,0 @@ -;;; helm-grep.el --- Helm Incremental Grep. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-regexp) - -;;; load wgrep proxy if it's available -(require 'wgrep-helm nil t) - -(declare-function helm-buffer-list "helm-buffers") -(declare-function helm-elscreen-find-file "helm-elscreen" (file)) -(declare-function View-quit "view") -(declare-function doc-view-goto-page "doc-view" (page)) -(declare-function helm-mm-split-pattern "helm-multi-match") -(declare-function helm--ansi-color-apply "helm-lib") -(defvar helm--ansi-color-regexp) - - -(defgroup helm-grep nil - "Grep related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-grep-default-command - "grep --color=always -a -d skip %e -n%cH -e %p %f" - "Default grep format command for `helm-do-grep-1'. -Where: -'%e' format spec is for --exclude or --include grep options or - ack-grep --type option. (Not mandatory) - -'%c' format spec is for case-fold-search, - whether to use the -i option of grep. (Not mandatory) - When you specify this spec, helm grep will use smartcase - that is when a upcase character is found in pattern case will - be respected and no '-i' option will be used, otherwise, when - no upcase character is found in pattern always use '-i'. - If you don't want this behavior, don't use this spec and - specify or not the '-i' option. - Note that with ack-grep this is not needed, just specify - the '--smart-case' option. - -'%p' format spec is for pattern. (Mandatory) - -'%f' format spec is for filenames. (Mandatory) - -If your grep version doesn't support the --exclude/include args -don't specify the '%e' format spec. - -Helm also support ack-grep and git-grep , -here a default command example for ack-grep: - -\(setq helm-grep-default-command \"ack-grep -Hn --smart-case --no-group %e %p %f\" - helm-grep-default-recurse-command \"ack-grep -H --smart-case --no-group %e %p %f\") - -You can ommit the %e spec if you don't want to be prompted for types. - -NOTE: Helm for ack-grep support ANSI sequences, so you can remove -the \"--no-color\" option safely (recommended). - -Same for grep you can use safely the option \"--color=always\" (default). -You can customize the color of matches using GREP_COLORS env var. -e.g: \(setenv \"GREP_COLORS\" \"ms=30;43:mc=30;43:sl=01;37:cx=:fn=35:ln=32:bn=32:se=36\") - -To enable ANSI color in git-grep just add \"--color=always\". -To customize the ANSI color in git-grep, GREP_COLORS have no effect, -you will have to setup this in your .gitconfig: - - [color \"grep\"] - match = black yellow - -where \"black\" is the foreground and \"yellow\" the background. -See the git documentation for more infos. - -`helm-grep-default-command' and `helm-grep-default-recurse-command'are -independents, so you can enable `helm-grep-default-command' with ack-grep -and `helm-grep-default-recurse-command' with grep if you want to be faster -on recursive grep. - -NOTE: Remote grepping is not available with ack-grep, - and badly supported with grep because tramp handle badly - repeated remote processes in a short delay (< to 5s)." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-default-recurse-command - "grep --color=always -a -d recurse %e -n%cH -e %p %f" - "Default recursive grep format command for `helm-do-grep-1'. -See `helm-grep-default-command' for format specs and infos about ack-grep." - :group 'helm-grep - :type 'string) - -(defcustom helm-default-zgrep-command - "zgrep --color=always -a -n%cH -e %p %f" - "Default command for Zgrep. -See `helm-grep-default-command' for infos on format specs. -Option --color=always is supported and can be used safely -to replace the helm internal match highlighting, -see `helm-grep-default-command' for more infos." - :group 'helm-grep - :type 'string) - -(defcustom helm-pdfgrep-default-command - "pdfgrep --color always -niH %s %s" - "Default command for pdfgrep. -Option \"--color always\" is supported starting helm version 1.7.8, -when used matchs will be highlighted according to GREP_COLORS env var." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-use-ioccur-style-keys t - "Use Arrow keys to jump to occurences." - :group 'helm-grep - :type 'boolean) - -(defcustom helm-pdfgrep-default-read-command nil - "Default command to read pdf files from pdfgrep. -Where '%f' format spec is filename and '%p' is page number. -e.g In Ubuntu you can set it to: - - \"evince --page-label=%p '%f'\" - -If set to nil `doc-view-mode' will be used instead of an external command." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-max-length-history 100 - "Max number of elements to save in `helm-grep-history'." - :group 'helm-grep - :type 'integer) - -(defcustom helm-zgrep-file-extension-regexp - ".*\\(\\.gz\\|\\.bz\\|\\.xz\\|\\.lzma\\)$" - "Default file extensions zgrep will search in." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-preferred-ext nil - "This file extension will be preselected for grep." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-save-buffer-name-no-confirm nil - "when *hgrep* already exists,auto append suffix." - :group 'helm-grep - :type 'boolean) - -(defcustom helm-grep-ignored-files - (cons ".#*" (delq nil (mapcar (lambda (s) - (unless (string-match-p "/\\'" s) - (concat "*" s))) - completion-ignored-extensions))) - "List of file names which `helm-grep' shall exclude." - :group 'helm-grep - :type '(repeat string)) - -(defcustom helm-grep-ignored-directories - helm-walk-ignore-directories - "List of names of sub-directories which `helm-grep' shall not recurse into." - :group 'helm-grep - :type '(repeat string)) - -(defcustom helm-grep-truncate-lines t - "When nil the grep line that appears will not be truncated." - :group 'helm-grep - :type 'boolean) - -(defcustom helm-grep-file-path-style 'basename - "File path display style when grep results are displayed. -Possible value are: - basename: displays only the filename, none of the directory path - absolute: displays absolute path - relative: displays relative path from root grep directory." - :group 'helm-grep - :type '(choice (const :tag "Basename" basename) - (const :tag "Absolute" absolute) - (const :tag "Relative" relative))) - - -;;; Faces -;; -;; -(defgroup helm-grep-faces nil - "Customize the appearance of helm-grep." - :prefix "helm-" - :group 'helm-grep - :group 'helm-faces) - -(defface helm-grep-match - '((((background light)) :foreground "#b00000") - (((background dark)) :foreground "gold1")) - "Face used to highlight grep matches." - :group 'helm-grep-faces) - -(defface helm-grep-file - '((t (:foreground "BlueViolet" - :underline t))) - "Face used to highlight grep results filenames." - :group 'helm-grep-faces) - -(defface helm-grep-lineno - '((t (:foreground "Darkorange1"))) - "Face used to highlight grep number lines." - :group 'helm-grep-faces) - -(defface helm-grep-finish - '((t (:foreground "Green"))) - "Face used in mode line when grep is finish." - :group 'helm-grep-faces) - -(defface helm-grep-cmd-line - '((t (:inherit diff-added))) - "Face used to highlight grep command line when no results." - :group 'helm-grep-faces) - - -;;; Keymaps -;; -;; -(defvar helm-grep-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-c o") 'helm-grep-run-other-window-action) - (define-key map (kbd "C-c C-o") 'helm-grep-run-other-frame-action) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-x C-s") 'helm-grep-run-save-buffer) - (when helm-grep-use-ioccur-style-keys - (define-key map (kbd "") 'helm-execute-persistent-action) - (define-key map (kbd "") 'helm-grep-run-default-action)) - (delq nil map)) - "Keymap used in Grep sources.") - -(defvar helm-pdfgrep-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - map) - "Keymap used in pdfgrep.") - -(defvar helm-grep-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") 'helm-grep-mode-jump) - (define-key map (kbd "C-o") 'helm-grep-mode-jump-other-window) - (define-key map (kbd "") 'helm-grep-mode-jump-other-window-forward) - (define-key map (kbd "") 'helm-grep-mode-jump-other-window-backward) - (define-key map (kbd "") 'helm-gm-next-file) - (define-key map (kbd "") 'helm-gm-precedent-file) - (define-key map (kbd "M-n") 'helm-grep-mode-jump-other-window-forward) - (define-key map (kbd "M-p") 'helm-grep-mode-jump-other-window-backward) - (define-key map (kbd "M-N") 'helm-gm-next-file) - (define-key map (kbd "M-P") 'helm-gm-precedent-file) - map)) - - -;;; Internals vars -;; -;; -(defvar helm-rzgrep-cache (make-hash-table :test 'equal)) -(defvar helm-grep-default-function 'helm-grep-init) -(defvar helm-zgrep-recurse-flag nil) -(defvar helm-grep-history nil) -(defvar helm-grep-last-targets nil) -(defvar helm-grep-include-files nil) -(defvar helm-grep-in-recurse nil) -(defvar helm-grep-use-zgrep nil) -(defvar helm-grep-default-directory-fn nil - "A function that should return a directory to expand candidate to. -It is intended to use as a let-bound variable, DON'T set this globaly.") -(defvar helm-pdfgrep-targets nil) -(defvar helm-grep-last-cmd-line nil) -(defvar helm-grep-split-line-regexp "^\\([[:lower:][:upper:]]?:?.*?\\):\\([0-9]+\\):\\(.*\\)") - - -;;; Init -;; -;; -(defun helm-grep-prepare-candidates (candidates in-directory) - "Prepare filenames and directories CANDIDATES for grep command line." - ;; If one or more candidate is a directory, search in all files - ;; of this candidate (e.g /home/user/directory/*). - ;; If r option is enabled search also in subdidrectories. - ;; We need here to expand wildcards to support crap windows filenames - ;; as grep doesn't accept quoted wildcards (e.g "dir/*.el"). - (if helm-zgrep-recurse-flag - (mapconcat 'shell-quote-argument candidates " ") - ;; When candidate is a directory, search in all its files. - ;; NOTE that `file-expand-wildcards' will return also - ;; directories, they will be ignored by grep but not - ;; by ack-grep that will grep all files of this directory - ;; without recursing in their subdirs though, see that as a one - ;; level recursion with ack-grep. - ;; So I leave it as it is, considering it is a feature. [1] - (cl-loop for i in candidates append - (cond ((string-match "^git" helm-grep-default-command) - (list i)) - ;; Candidate is a directory and we use recursion or ack. - ((and (file-directory-p i) - (or helm-grep-in-recurse - ;; ack-grep accept directory [1]. - (helm-grep-use-ack-p))) - (list (expand-file-name i))) - ;; Grep doesn't support directory only when not in recurse. - ((file-directory-p i) - (file-expand-wildcards - (concat (file-name-as-directory (expand-file-name i)) "*") t)) - ;; Candidate is a file or wildcard and we use recursion, use the - ;; current directory instead of candidate. - ((and (or (file-exists-p i) (string-match "[*]" i)) - helm-grep-in-recurse) - (list (expand-file-name - (directory-file-name ; Needed for windoze. - (file-name-directory (directory-file-name i)))))) - ;; Else should be one or more file/directory - ;; possibly marked. - ;; When real is a normal filename without wildcard - ;; file-expand-wildcards returns a list of one file. - ;; wildcards should have been already handled by - ;; helm-read-file-name or helm-find-files but do it from - ;; here too in case we are called from elsewhere. - (t (file-expand-wildcards i t))) into all-files ; [1] - finally return - (let ((files (if (file-remote-p in-directory) - ;; Grep don't understand tramp filenames - ;; use the local name. - (mapcar (lambda (x) - (file-remote-p x 'localname)) - all-files) - all-files))) - (if (string-match "^git" helm-grep-default-command) - (mapconcat 'identity files " ") - (mapconcat 'shell-quote-argument files " ")))))) - -(defun helm-grep-command (&optional recursive) - (let* ((com (if recursive - helm-grep-default-recurse-command - helm-grep-default-command)) - (exe (and com (car (split-string com " "))))) - (if (and exe (string= exe "git")) "git-grep" exe))) - -(cl-defun helm-grep-use-ack-p (&key where) - (let* ((rec-com (helm-grep-command t)) - (norm-com (helm-grep-command)) - (norm-com-ack-p (string-match "\\`ack" norm-com)) - (rec-com-ack-p (and rec-com (string-match "\\`ack" rec-com)))) - (cl-case where - (default (and norm-com norm-com-ack-p)) - (recursive (and rec-com rec-com-ack-p)) - (strict (and norm-com rec-com rec-com-ack-p norm-com-ack-p)) - (t (and (not (and norm-com (string= norm-com "git-grep"))) - (or (and norm-com norm-com-ack-p) - (and rec-com rec-com-ack-p))))))) - -(defun helm-grep--prepare-cmd-line (only-files &optional include zgrep) - (let* ((default-directory (or (helm-default-directory) - (expand-file-name helm-ff-default-directory))) - (fnargs (helm-grep-prepare-candidates - only-files default-directory)) - (ignored-files (unless (helm-grep-use-ack-p) - (mapconcat - (lambda (x) - (concat "--exclude=" - (shell-quote-argument x))) - helm-grep-ignored-files " "))) - (ignored-dirs (unless (helm-grep-use-ack-p) - (mapconcat - ;; Need grep version >=2.5.4 - ;; of Gnuwin32 on windoze. - (lambda (x) - (concat "--exclude-dir=" - (shell-quote-argument x))) - helm-grep-ignored-directories " "))) - (exclude (unless (helm-grep-use-ack-p) - (if helm-grep-in-recurse - (concat (or include ignored-files) - " " ignored-dirs) - ignored-files))) - (types (and (helm-grep-use-ack-p) - ;; When %e format spec is not specified - ;; in `helm-grep-default-command' - ;; we need to pass an empty string - ;; to types to avoid error. - (or include ""))) - (smartcase (if (helm-grep-use-ack-p) "" - (unless (let ((case-fold-search nil)) - (string-match-p - "[[:upper:]]" helm-pattern)) "i")))) - (format-spec - helm-grep-default-command - (delq nil - (list (unless zgrep - (if types - (cons ?e types) - (cons ?e exclude))) - (cons ?c (or smartcase "")) - (cons ?p (shell-quote-argument helm-pattern)) - (cons ?f fnargs)))))) - -(defun helm-grep-init (cmd-line) - "Start an asynchronous grep process with CMD-LINE using ZGREP if non--nil." - (let* ((default-directory (or helm-ff-default-directory - (helm-default-directory))) - (zgrep (string-match "\\`zgrep" cmd-line)) - ;; Use pipe only with grep, zgrep or git-grep. - (process-connection-type (and (not zgrep) (helm-grep-use-ack-p))) - (tramp-verbose helm-tramp-verbose) - non-essential) - ;; Start grep process. - (helm-log "Starting Grep process in directory `%s'" default-directory) - (helm-log "Command line used was:\n\n%s" - (concat ">>> " (propertize cmd-line 'face 'helm-grep-cmd-line) "\n\n")) - (prog1 ; This function should return the process first. - (start-file-process-shell-command - "grep" helm-buffer cmd-line) - ;; Init sentinel. - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (process event) - (let* ((err (process-exit-status process)) - (noresult (= err 1))) - (unless err - (helm-process-deferred-sentinel-hook - process event (helm-default-directory))) - (cond ((and noresult - ;; [FIXME] This is a workaround for zgrep - ;; that exit with code 1 - ;; after a certain amount of results. - (not (with-helm-buffer helm-grep-use-zgrep))) - (with-helm-buffer - (insert (concat "* Exit with code 1, no result found," - " Command line was:\n\n " - (propertize helm-grep-last-cmd-line - 'face 'helm-grep-cmd-line))) - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format - "[%s process finished - (no results)] " - (if helm-grep-use-zgrep - "Zgrep" - (capitalize - (if helm-grep-in-recurse - (helm-grep-command t) - (helm-grep-command))))) - 'face 'helm-grep-finish)))))) - ((string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format - "[%s process finished - (%s results)] " - (if helm-grep-use-zgrep - "Zgrep" - (capitalize - (if helm-grep-in-recurse - (helm-grep-command t) - (helm-grep-command)))) - (max (1- (count-lines - (point-min) - (point-max))) - 0)) - 'face 'helm-grep-finish)))) - (force-mode-line-update))) - ;; Catch error output in log. - (t (helm-log - "Error: %s %s" - (if helm-grep-use-zgrep "Zgrep" "Grep") - (replace-regexp-in-string "\n" "" event)))))))))) - -(defun helm-grep-collect-candidates () - (let ((cmd-line (helm-grep--prepare-cmd-line - helm-grep-last-targets - helm-grep-include-files - helm-grep-use-zgrep))) - (set (make-local-variable 'helm-grep-last-cmd-line) cmd-line) - (funcall helm-grep-default-function cmd-line))) - - -;;; Actions -;; -;; -(defun helm-grep-action (candidate &optional where mark) - "Define a default action for `helm-do-grep' on CANDIDATE. -WHERE can be one of other-window, elscreen, other-frame." - (let* ((split (helm-grep-split-line candidate)) - (lineno (string-to-number (nth 1 split))) - (loc-fname (or (with-current-buffer - (if (eq major-mode 'helm-grep-mode) - (current-buffer) - helm-buffer) - (get-text-property (point-at-bol) 'help-echo)) - (car split))) - (tramp-method (file-remote-p (or helm-ff-default-directory - default-directory) 'method)) - (tramp-host (file-remote-p (or helm-ff-default-directory - default-directory) 'host)) - (tramp-prefix (concat "/" tramp-method ":" tramp-host ":")) - (fname (if tramp-host - (concat tramp-prefix loc-fname) loc-fname))) - (cl-case where - (other-window (find-file-other-window fname)) - (elscreen (helm-elscreen-find-file fname)) - (other-frame (find-file-other-frame fname)) - (grep (helm-grep-save-results-1)) - (pdf (if helm-pdfgrep-default-read-command - (helm-pdfgrep-action-1 split lineno (car split)) - (find-file (car split)) (doc-view-goto-page lineno))) - (t (find-file fname))) - (unless (or (eq where 'grep) (eq where 'pdf)) - (helm-goto-line lineno)) - (when mark - (set-marker (mark-marker) (point)) - (push-mark (point) 'nomsg)) - ;; Save history - (unless (or helm-in-persistent-action - (eq major-mode 'helm-grep-mode) - (string= helm-pattern "")) - (setq helm-grep-history - (cons helm-pattern - (delete helm-pattern helm-grep-history))) - (when (> (length helm-grep-history) - helm-grep-max-length-history) - (setq helm-grep-history - (delete (car (last helm-grep-history)) - helm-grep-history)))))) - -(defun helm-grep-persistent-action (candidate) - "Persistent action for `helm-do-grep'. -With a prefix arg record CANDIDATE in `mark-ring'." - (if current-prefix-arg - (helm-grep-action candidate nil 'mark) - (helm-grep-action candidate)) - (helm-highlight-current-line)) - -(defun helm-grep-other-window (candidate) - "Jump to result in other window from helm grep." - (helm-grep-action candidate 'other-window)) - -(defun helm-grep-other-frame (candidate) - "Jump to result in other frame from helm grep." - (helm-grep-action candidate 'other-frame)) - -(defun helm-grep-jump-elscreen (candidate) - "Jump to result in elscreen from helm grep." - (helm-grep-action candidate 'elscreen)) - -(defun helm-goto-next-or-prec-file (n) - "Go to next or precedent candidate file in helm grep/etags buffers. -If N is positive go forward otherwise go backward." - (let* ((allow-mode (or (eq major-mode 'helm-grep-mode) - (eq major-mode 'helm-moccur-mode))) - (sel (if allow-mode - (buffer-substring (point-at-bol) (point-at-eol)) - (helm-get-selection nil t))) - (current-line-list (helm-grep-split-line sel)) - (current-fname (nth 0 current-line-list)) - (bob-or-eof (if (eq n 1) 'eobp 'bobp)) - (mark-maybe (lambda () - (if allow-mode - (ignore) - (helm-mark-current-line))))) - (catch 'break - (while (not (funcall bob-or-eof)) - (forward-line n) ; Go forward or backward depending of n value. - ;; Exit when current-fname is not matched or in `helm-grep-mode' - ;; the line is not a grep line i.e 'fname:num:tag'. - (setq sel (buffer-substring (point-at-bol) (point-at-eol))) - (unless (or (string= current-fname - (car (helm-grep-split-line sel))) - (and (eq major-mode 'helm-grep-mode) - (not (get-text-property (point-at-bol) 'help-echo)))) - (funcall mark-maybe) - (throw 'break nil)))) - (cond ((and (> n 0) (eobp)) - (re-search-backward ".") - (forward-line 0) - (funcall mark-maybe)) - ((and (< n 0) (bobp)) - (helm-aif (next-single-property-change (point-at-bol) 'help-echo) - (goto-char it) - (forward-line 1)) - (funcall mark-maybe))) - (helm-log-run-hook 'helm-move-selection-after-hook))) - -;;;###autoload -(defun helm-goto-precedent-file () - "Go to precedent file in helm grep/etags buffers." - (interactive) - (with-helm-alive-p - (with-helm-window - (helm-goto-next-or-prec-file -1)))) - -;;;###autoload -(defun helm-goto-next-file () - "Go to precedent file in helm grep/etags buffers." - (interactive) - (with-helm-window - (helm-goto-next-or-prec-file 1))) - -(defun helm-grep-run-default-action () - "Run grep default action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-action))) - -(defun helm-grep-run-other-window-action () - "Run grep goto other window action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-other-window))) - -(defun helm-grep-run-other-frame-action () - "Run grep goto other frame action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-other-frame))) - -(defun helm-grep-run-save-buffer () - "Run grep save results action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-save-results))) - - -;;; helm-grep-mode -;; -;; -(defun helm-grep-save-results (candidate) - (helm-grep-action candidate 'grep)) - -(defun helm-grep-save-results-1 () - "Save helm grep result in a `helm-grep-mode' buffer." - (let ((buf "*hgrep*") - new-buf) - (when (get-buffer buf) - (if helm-grep-save-buffer-name-no-confirm - (setq new-buf (format "*hgrep|%s|-%s" helm-pattern - (format-time-string "%H-%M-%S*"))) - (setq new-buf (helm-read-string "GrepBufferName: " buf)) - (cl-loop for b in (helm-buffer-list) - when (and (string= new-buf b) - (not (y-or-n-p - (format "Buffer `%s' already exists overwrite? " - new-buf)))) - do (setq new-buf (helm-read-string "GrepBufferName: " "*hgrep ")))) - (setq buf new-buf)) - (with-current-buffer (get-buffer-create buf) - (setq buffer-read-only t) - (let ((inhibit-read-only t)) - (erase-buffer) - (insert "-*- mode: helm-grep -*-\n\n" - (format "Grep Results for `%s':\n\n" helm-pattern)) - (save-excursion - (insert (with-current-buffer helm-buffer - (goto-char (point-min)) (forward-line 1) - (buffer-substring (point) (point-max)))))) - (helm-grep-mode) (pop-to-buffer buf)) - (message "Helm Grep Results saved in `%s' buffer" buf))) - -;;;###autoload -(define-derived-mode helm-grep-mode - special-mode "helm-grep" - "Major mode to provide actions in helm grep saved buffer. - -Special commands: -\\{helm-grep-mode-map}" - (set (make-local-variable 'helm-grep-last-cmd-line) - (with-helm-buffer helm-grep-last-cmd-line)) - (set (make-local-variable 'revert-buffer-function) - #'helm-grep-mode--revert-buffer-function)) - -(defun helm-grep-mode--revert-buffer-function (&optional _ignore-auto _noconfirm) - (goto-char (point-min)) - (re-search-forward "^Grep Results for" nil t) - (forward-line 0) - (when (re-search-forward "^$" nil t) - (forward-line 1)) - (let ((inhibit-read-only t)) - (delete-region (point) (point-max))) - (message "Reverting buffer...") - (set-process-sentinel - (start-file-process-shell-command - "hgrep" (generate-new-buffer "*hgrep revert*") helm-grep-last-cmd-line) - (lambda (process event) - (when (string= event "finished\n") - (with-current-buffer (current-buffer) - (let ((inhibit-read-only t)) - (save-excursion - (cl-loop for line in (with-current-buffer (process-buffer process) - (prog1 (split-string (buffer-string) "\n") - (kill-buffer))) - when (string-match helm-grep-split-line-regexp line) - do (insert (propertize - (car (helm-grep-filter-one-by-one line)) - ;; needed for wgrep. - 'helm-realvalue line) - "\n")))) - (message "Reverting buffer done")))))) - -(defun helm-gm-next-file () - (interactive) - (helm-goto-next-or-prec-file 1)) - -(defun helm-gm-precedent-file () - (interactive) - (helm-goto-next-or-prec-file -1)) - -(defun helm-grep-mode-jump () - (interactive) - (helm-grep-action - (buffer-substring (point-at-bol) (point-at-eol)))) - -(defun helm-grep-mode-jump-other-window-1 (arg) - (let ((candidate (buffer-substring (point-at-bol) (point-at-eol)))) - (condition-case nil - (progn - (save-selected-window - (helm-grep-action candidate 'other-window) - (recenter)) - (forward-line arg)) - (error nil)))) - -(defun helm-grep-mode-jump-other-window-forward () - (interactive) - (helm-grep-mode-jump-other-window-1 1)) - -(defun helm-grep-mode-jump-other-window-backward () - (interactive) - (helm-grep-mode-jump-other-window-1 -1)) - -(defun helm-grep-mode-jump-other-window () - (interactive) - (let ((candidate (buffer-substring (point-at-bol) (point-at-eol)))) - (condition-case nil - (helm-grep-action candidate 'other-window) - (error nil)))) - - -;;; ack-grep types -;; -;; -(defun helm-grep-hack-types () - "Return a list of known ack-grep types." - (with-temp-buffer - ;; "--help-types" works with both 1.96 and 2.1+, while - ;; "--help types" works only with 1.96 Issue #422. - ;; `helm-grep-command' should return the ack executable - ;; when this function is used in the right context - ;; i.e After checking is we are using ack-grep with - ;; `helm-grep-use-ack-p'. - (call-process (helm-grep-command t) nil t nil "--help-types") - (goto-char (point-min)) - (cl-loop while (re-search-forward - "^ *--\\(\\[no\\]\\)\\([^. ]+\\) *\\(.*\\)" nil t) - collect (cons (concat (match-string 2) - " [" (match-string 3) "]") - (match-string 2)) - collect (cons (concat "no" (match-string 2) - " [" (match-string 3) "]") - (concat "no" (match-string 2)))))) - -(defun helm-grep-ack-types-transformer (candidates _source) - (cl-loop for i in candidates - if (stringp i) - collect (rassoc i helm-grep-ack-types-cache) - else - collect i)) - -(defvar helm-grep-ack-types-cache nil) -(defun helm-grep-read-ack-type () - "Select types for the '--type' argument of ack-grep." - (require 'helm-mode) - (require 'helm-adaptive) - (setq helm-grep-ack-types-cache (helm-grep-hack-types)) - (let ((types (helm-comp-read - "Types: " helm-grep-ack-types-cache - :name "*Ack-grep types*" - :marked-candidates t - :must-match t - :fc-transformer '(helm-adaptive-sort - helm-grep-ack-types-transformer) - :buffer "*helm ack-types*"))) - (mapconcat (lambda (type) (concat "--type=" type)) types " "))) - - -;;; grep extensions -;; -;; -(defun helm-grep-guess-extensions (files) - "Try to guess file extensions in FILES list when using grep recurse. -These extensions will be added to command line with --include arg of grep." - (cl-loop with ext-list = (list helm-grep-preferred-ext "*") - with lst = (if (file-directory-p (car files)) - (directory-files - (car files) nil - directory-files-no-dot-files-regexp) - files) - for i in lst - for ext = (file-name-extension i 'dot) - for glob = (and ext (not (string= ext "")) - (concat "*" ext)) - unless (or (not glob) - (and glob-list (member glob glob-list)) - (and glob-list (member glob ext-list)) - (and glob-list (member glob helm-grep-ignored-files))) - collect glob into glob-list - finally return (delq nil (append ext-list glob-list)))) - -(defun helm-grep-get-file-extensions (files) - "Try to return a list of file extensions to pass to '--include' arg of grep." - (let* ((all-exts (helm-grep-guess-extensions - (mapcar 'expand-file-name files))) - (extensions (helm-comp-read "Search Only in: " all-exts - :marked-candidates t - :fc-transformer 'helm-adaptive-sort - :buffer "*helm grep exts*" - :name "*helm grep extensions*"))) - (when (listp extensions) ; Otherwise it is empty string returned by C-RET. - ;; If extensions is a list of one string containing spaces, - ;; assume user entered more than one glob separated by space(s) and - ;; split this string to pass it later to mapconcat. - ;; e.g '("*.el *.py") - (cl-loop for i in extensions - append (split-string-and-unquote i " "))))) - - -;;; Set up source -;; -;; -(defvar helm-source-grep nil) -(defun helm-do-grep-1 (targets &optional recurse zgrep exts default-input input) - "Launch grep on a list of TARGETS files. -When RECURSE is given use -r option of grep and prompt user -to set the --include args of grep. -You can give more than one arg separated by space at prompt. -e.g *.el *.py *.tex. -From lisp use the EXTS argument as a list of extensions as above. -If you are using ack-grep, you will be prompted for --type -instead and EXTS will be ignored. -If prompt is empty `helm-grep-ignored-files' are added to --exclude. -Argument DEFAULT-INPUT is use as `default' arg of `helm' and INPUT -is used as `input' arg of `helm', See `helm' docstring. -ZGREP when non--nil use zgrep instead, without prompting for a choice -in recurse, and ignoring EXTS, search being made on -`helm-zgrep-file-extension-regexp'." - (when (and (helm-grep-use-ack-p) - helm-ff-default-directory - (file-remote-p helm-ff-default-directory)) - (error "Error: Remote operation not supported with ack-grep.")) - (let* (non-essential - (exts (and recurse - ;; [FIXME] I could handle this from helm-walk-directory. - (not zgrep) ; zgrep doesn't handle -r opt. - (not (helm-grep-use-ack-p :where 'recursive)) - (or exts (helm-grep-get-file-extensions targets)))) - (include-files (and exts - (mapconcat (lambda (x) - (concat "--include=" - (shell-quote-argument x))) - (if (> (length exts) 1) - (remove "*" exts) - exts) " "))) - (types (and (not include-files) - (not zgrep) - recurse - (helm-grep-use-ack-p :where 'recursive) - ;; When %e format spec is not specified - ;; ignore types and do not prompt for choice. - (string-match "%e" helm-grep-default-command) - (helm-grep-read-ack-type))) - (follow (and helm-follow-mode-persistent - (assoc-default 'follow helm-source-grep)))) - ;; When called as action from an other source e.g *-find-files - ;; we have to kill action buffer. - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - ;; If `helm-find-files' haven't already started, - ;; give a default value to `helm-ff-default-directory'. - (unless helm-ff-default-directory - (setq helm-ff-default-directory default-directory)) - ;; We need to store these vars locally - ;; to pass infos later to `helm-resume'. - (helm-set-local-variable 'helm-zgrep-recurse-flag (and recurse zgrep) - 'helm-grep-last-targets targets - 'helm-grep-include-files (or include-files types) - 'helm-grep-in-recurse recurse - 'helm-grep-use-zgrep zgrep - 'helm-grep-default-command - (cond (zgrep helm-default-zgrep-command) - (recurse helm-grep-default-recurse-command) - ;; When resuming the local value of - ;; `helm-grep-default-command' is used, only git-grep - ;; should need this. - (t helm-grep-default-command))) - ;; Setup the source. - (setq helm-source-grep - (helm-build-async-source - (if zgrep "Zgrep" (capitalize (if recurse - (helm-grep-command t) - (helm-grep-command)))) - :candidates-process 'helm-grep-collect-candidates - :filter-one-by-one 'helm-grep-filter-one-by-one - :keymap helm-grep-map - :nohighlight t - :nomark t - :candidate-number-limit 9999 - :help-message 'helm-grep-help-message - :history 'helm-grep-history - :action (helm-make-actions - "Find File" 'helm-grep-action - "Find file other frame" 'helm-grep-other-frame - (lambda () (and (locate-library "elscreen") - "Find file in Elscreen")) - 'helm-grep-jump-elscreen - "Save results in grep buffer" 'helm-grep-save-results - "Find file other window" 'helm-grep-other-window) - :persistent-action 'helm-grep-persistent-action - :persistent-help "Jump to line (`C-u' Record in mark ring)" - :requires-pattern 2 - :follow follow)) - (helm - :sources 'helm-source-grep - :buffer (format "*helm %s*" (if zgrep "zgrep" (helm-grep-command recurse))) - :default default-input - :input input - :keymap helm-grep-map - :history 'helm-grep-history - :truncate-lines helm-grep-truncate-lines))) - - - -;;; zgrep -;; -;; -(defun helm-ff-zgrep-1 (flist recursive) - (unwind-protect - (let* ((def-dir (or helm-ff-default-directory - default-directory)) - (only (if recursive - (or (gethash def-dir helm-rzgrep-cache) - (puthash - def-dir - (helm-walk-directory - def-dir - :directories nil - :path 'full - :match helm-zgrep-file-extension-regexp) - helm-rzgrep-cache)) - flist))) - (helm-do-grep-1 only recursive 'zgrep)) - (setq helm-zgrep-recurse-flag nil))) - - -;;; transformers -;; -;; -(defun helm-grep-split-line (line) - "Split a grep output line." - ;; The output of grep may send a truncated line in this chunk, - ;; so don't split until grep line is valid, that is - ;; once the second part of the line comes with next chunk - ;; send by process. - (when (string-match helm-grep-split-line-regexp line) - ;; Don't use split-string because buffer/file name or string - ;; may contain a ":". - (cl-loop for n from 1 to 3 collect (match-string n line)))) - -(defun helm-grep--filter-candidate-1 (candidate &optional dir) - (let* ((root (or dir (and helm-grep-default-directory-fn - (funcall helm-grep-default-directory-fn)))) - (ansi-p (string-match-p helm--ansi-color-regexp candidate)) - (line (if ansi-p (helm--ansi-color-apply candidate) candidate)) - (split (helm-grep-split-line line)) - (fname (if (and root split) - (expand-file-name (car split) root) - (car-safe split))) - (lineno (nth 1 split)) - (str (nth 2 split)) - (display-fname (cl-ecase helm-grep-file-path-style - (basename (and fname (file-name-nondirectory fname))) - (absolute fname) - (relative (and fname root - (file-relative-name fname root)))))) - (if (and display-fname lineno str) - (cons (concat (propertize display-fname - 'face 'helm-grep-file - 'help-echo fname) - ":" - (propertize lineno 'face 'helm-grep-lineno) - ":" - (if ansi-p str (helm-grep-highlight-match str))) - line) - ""))) - -(defun helm-grep-filter-one-by-one (candidate) - "`filter-one-by-one' transformer function for `helm-do-grep'." - (let ((helm-grep-default-directory-fn - (or helm-grep-default-directory-fn - (lambda () (or helm-ff-default-directory - (helm-default-directory) - default-directory))))) - (if (consp candidate) - ;; Already computed do nothing (default as input). - candidate - (and (stringp candidate) - (helm-grep--filter-candidate-1 candidate))))) - -(defun helm-grep-highlight-match (str &optional multi-match) - "Highlight in string STR all occurences matching `helm-pattern'." - (let (beg end) - (condition-case-unless-debug nil - (with-temp-buffer - (insert (propertize str 'read-only nil)) ; Fix (#1176) - (goto-char (point-min)) - (cl-loop for reg in - (if multi-match - ;; (m)occur. - (cl-loop for r in (helm-mm-split-pattern - helm-pattern) - unless (string-match "\\`!" r) - collect - (helm-aif (and helm-migemo-mode - (assoc r helm-mm--previous-migemo-info)) - (cdr it) r)) - ;; async sources (grep, gid etc...) - (list helm-input)) - do - (while (and (re-search-forward reg nil t) - (> (- (setq end (match-end 0)) - (setq beg (match-beginning 0))) 0)) - (add-text-properties beg end '(face helm-grep-match))) - do (goto-char (point-min))) - (buffer-string)) - (error nil)))) - - -;;; Grep from buffer list -;; -;; -(defun helm-grep-buffers-1 (candidate &optional zgrep) - "Run grep on all file--buffers or CANDIDATE if it is a file--buffer. -If one of selected buffers is not a file--buffer, -it is ignored and grep will run on all others file--buffers. -If only one candidate is selected and it is not a file--buffer, -switch to this buffer and run `helm-occur'. -If a prefix arg is given run grep on all buffers ignoring non--file-buffers." - (let* ((prefarg (or current-prefix-arg helm-current-prefix-arg)) - (helm-ff-default-directory - (if (and helm-ff-default-directory - (file-remote-p helm-ff-default-directory)) - default-directory - helm-ff-default-directory)) - (cands (if prefarg - (buffer-list) - (helm-marked-candidates))) - (win-conf (current-window-configuration)) - ;; Non--fname and remote buffers are ignored. - (bufs (cl-loop for buf in cands - for fname = (buffer-file-name (get-buffer buf)) - when (and fname (not (file-remote-p fname))) - collect (expand-file-name fname)))) - (if bufs - (if zgrep - (helm-do-grep-1 bufs nil 'zgrep) - (helm-do-grep-1 bufs)) - ;; bufs is empty, thats mean we have only CANDIDATE - ;; and it is not a buffer-filename, fallback to occur. - (switch-to-buffer candidate) - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (helm-occur) - (when (eq helm-exit-status 1) - (set-window-configuration win-conf))))) - -(defun helm-grep-buffers (candidate) - "Action to grep buffers." - (helm-grep-buffers-1 candidate)) - -(defun helm-zgrep-buffers (candidate) - "Action to zgrep buffers." - (helm-grep-buffers-1 candidate 'zgrep)) - - -;;; Helm interface for pdfgrep -;; pdfgrep program -;; and a pdf-reader (e.g xpdf) are needed. -;; -(defvar helm-pdfgrep-default-function 'helm-pdfgrep-init) -(defun helm-pdfgrep-init (only-files) - "Start an asynchronous pdfgrep process in ONLY-FILES list." - (let* ((default-directory (or helm-ff-default-directory - default-directory)) - (fnargs (helm-grep-prepare-candidates - (if (file-remote-p default-directory) - (mapcar (lambda (x) - (file-remote-p x 'localname)) - only-files) - only-files) - default-directory)) - (cmd-line (format helm-pdfgrep-default-command - helm-pattern - fnargs)) - process-connection-type) - ;; Start pdf grep process. - (helm-log "Starting Pdf Grep process in directory `%s'" default-directory) - (helm-log "Command line used was:\n\n%s" - (concat ">>> " (propertize cmd-line 'face 'helm-grep-cmd-line) "\n\n")) - (prog1 - (start-file-process-shell-command - "pdfgrep" helm-buffer cmd-line) - (message nil) - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (_process event) - (if (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Pdfgrep Process Finish - %s result(s)] " - (max (1- (count-lines - (point-min) (point-max))) 0)) - 'face 'helm-grep-finish)))) - (force-mode-line-update)) - (helm-log "Error: Pdf grep %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defun helm-do-pdfgrep-1 (only) - "Launch pdfgrep with a list of ONLY files." - (unless (executable-find "pdfgrep") - (error "Error: No such program `pdfgrep'.")) - (let* (helm-grep-in-recurse) ; recursion is never used in pdfgrep. - ;; When called as action from an other source e.g *-find-files - ;; we have to kill action buffer. - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (setq helm-pdfgrep-targets only) - (helm - :sources (helm-build-async-source "PdfGrep" - :init (lambda () - ;; If `helm-find-files' haven't already started, - ;; give a default value to `helm-ff-default-directory'. - (setq helm-ff-default-directory (or helm-ff-default-directory - default-directory))) - :candidates-process (lambda () - (funcall helm-pdfgrep-default-function helm-pdfgrep-targets)) - :nohighlight t - :nomark t - :filter-one-by-one #'helm-grep-filter-one-by-one - :candidate-number-limit 9999 - :history 'helm-grep-history - :keymap helm-pdfgrep-map - :help-message 'helm-pdfgrep-help-message - :action #'helm-pdfgrep-action - :persistent-help "Jump to PDF Page" - :requires-pattern 2) - :buffer "*helm pdfgrep*" - :history 'helm-grep-history))) - -(defun helm-pdfgrep-action (candidate) - (helm-grep-action candidate 'pdf)) - -(defun helm-pdfgrep-action-1 (_split pageno fname) - (save-selected-window - (start-file-process-shell-command - "pdf-reader" nil - (format-spec helm-pdfgrep-default-read-command - (list (cons ?f fname) (cons ?p pageno)))))) - -;;; AG - AT -;; -;; https://github.com/ggreer/the_silver_searcher -;; https://github.com/monochromegane/the_platinum_searcher - -(defcustom helm-grep-ag-command - "ag --line-numbers -S --hidden --color --nogroup %s %s" - "The default command for AG or PT. -Takes two format specs, the first for pattern and the second for directory. - -You must use an output format that fit with helm grep, that is: - - \"filename:line-number:string\" - -The option \"--nogroup\" allow this. -The option \"--line-numbers\" is also mandatory except with PT (not supported). - -You can use safely \"--color\" (default)." - :group 'helm-grep - :type 'string) - -(defun helm-grep--ag-command () - (car (split-string helm-grep-ag-command))) - -(defun helm-grep-ag-init (directory) - (let ((cmd-line (format helm-grep-ag-command - (shell-quote-argument helm-pattern) - (shell-quote-argument directory)))) - (set (make-local-variable 'helm-grep-last-cmd-line) cmd-line) - (prog1 - (start-process-shell-command - "ag" helm-buffer cmd-line) - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (_process event) - (when (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format - "[%s process finished - (%s results)] " - (upcase (helm-grep--ag-command)) - (max (1- (count-lines - (point-min) - (point-max))) - 0)) - 'face 'helm-grep-finish)))) - (force-mode-line-update)))))))) - -(defvar helm-source-grep-ag nil) -(defun helm-grep-ag-1 (directory) - (setq helm-source-grep-ag - (helm-build-async-source (upcase (helm-grep--ag-command)) - :header-name (lambda (name) - (format "%s [%s]" - name (abbreviate-file-name directory))) - :candidates-process - (lambda () (helm-grep-ag-init directory)) - :nohighlight t - :keymap helm-grep-map - :help-message 'helm-grep-help-message - :filter-one-by-one 'helm-grep-filter-one-by-one - :persistent-action 'helm-grep-persistent-action - :candidate-number-limit 99999 - :requires-pattern 2 - :nomark t - :action (helm-make-actions - "Find File" 'helm-grep-action - "Find file other frame" 'helm-grep-other-frame - (lambda () (and (locate-library "elscreen") - "Find file in Elscreen")) - 'helm-grep-jump-elscreen - "Save results in grep buffer" 'helm-grep-save-results - "Find file other window" 'helm-grep-other-window))) - (helm :sources 'helm-source-grep-ag - :keymap helm-grep-map - :truncate-lines helm-grep-truncate-lines - :buffer (format "*helm %s*" (helm-grep--ag-command)))) - -;;; Git grep -;; -;; -(defcustom helm-grep-git-grep-command - "git grep -n%cH --color=always --exclude-standard --no-index --full-name -e %p -- %f" - "The git grep default command line. -The option \"--color=always\" can be used safely. -The color of matched items can be customized in your .gitconfig -See `helm-grep-default-command' for more infos. - -The \"--exclude-standard\" and \"--no-index\" switches allow -skipping unwanted files specified in ~/.gitignore_global -and searching files not already staged. -You have also to enable this in global \".gitconfig\" with - \"git config --global core.excludesfile ~/.gitignore_global\"." - :group 'helm-grep - :type 'string) - -(defun helm-grep-git-1 (directory &optional all) - (require 'vc) - (let* ((helm-grep-default-command helm-grep-git-grep-command) - helm-grep-default-recurse-command - ;; Expand filename of each candidate with the git root dir. - ;; The filename will be in the help-echo prop. - (helm-grep-default-directory-fn (lambda () - (vc-find-root directory ".git"))) - (helm-ff-default-directory (funcall helm-grep-default-directory-fn))) - (cl-assert helm-ff-default-directory nil "Not inside a Git repository") - (helm-do-grep-1 (if all '("") `(,(expand-file-name directory)))))) - - -;;;###autoload -(defun helm-do-grep-ag () - "Preconfigured helm for grepping with AG in `default-directory'." - (interactive) - (helm-grep-ag-1 default-directory)) - -;;;###autoload -(defun helm-grep-do-git-grep (arg) - "Preconfigured helm for git-grepping `default-directory'. -With a prefix arg ARG git-grep the whole repository." - (interactive "P") - (helm-grep-git-1 default-directory arg)) - - -(provide 'helm-grep) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-grep.el ends here diff --git a/elpa/helm-20160105.2046/helm-help.el b/elpa/helm-20160105.2046/helm-help.el deleted file mode 100644 index edecf3a6..00000000 --- a/elpa/helm-20160105.2046/helm-help.el +++ /dev/null @@ -1,1433 +0,0 @@ -;;; helm-help.el --- Help messages for Helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'helm) - -(defvar helm-org-headings--nofilename) -(declare-function helm-source-org-headings-for-files "helm-org.el") - - -(defgroup helm-help nil - "Embedded help for `helm'." - :group 'helm) - -(defface helm-helper - '((t :inherit helm-header)) - "Face for helm help string in minibuffer." - :group 'helm-help) - -(defcustom helm-documentation-file "~/.emacs.d/helm-doc.org" - "The file where you want to save helm documentation." - :group 'helm-help - :type 'string) - -(defvar helm-help--string-list '(helm-help-message - helm-buffer-help-message - helm-ff-help-message - helm-read-file-name-help-message - helm-generic-file-help-message - helm-grep-help-message - helm-pdfgrep-help-message - helm-etags-help-message - helm-ucs-help-message - helm-bookmark-help-message - helm-esh-help-message - helm-buffers-ido-virtual-help-message - helm-moccur-help-message - helm-top-help-message - helm-apt-help-message - helm-el-package-help-message - helm-M-x-help-message - helm-imenu-help-message - helm-colors-help-message - helm-semantic-help-message - helm-kmacro-help-message)) - - -;;;###autoload -(defun helm-documentation (arg) - "Preconfigured helm for helm documentation. -With a prefix arg refresh the documentation. - -Find here the documentation of all sources actually documented." - (interactive "P") - (require 'helm-org) - (when arg (delete-file helm-documentation-file) - (helm-aif (get-file-buffer helm-documentation-file) - (kill-buffer it))) - (unless (file-exists-p helm-documentation-file) - (with-temp-file helm-documentation-file - (erase-buffer) - (cl-loop for elm in helm-help--string-list - for str = (symbol-value elm) - do (insert (substitute-command-keys - (if (functionp str) (funcall str) str)) - "\n\n")))) - (let ((helm-org-headings--nofilename t)) - (helm :sources (helm-source-org-headings-for-files - (list helm-documentation-file)) - :candidate-number-limit 99999 - :buffer "*helm documentation*"))) - -;;; Local help messages. - -;;; `helm-buffer-list' help -;; -;; -(defvar helm-buffer-help-message - "* Helm Buffer - -** Tips - -*** Completion - -**** Major-mode - -You can enter a partial name of major-mode (e.g. lisp, sh) to narrow down buffers. -To specify the major-mode, prefix it with \"*\" e.g. \"*lisp\". -If you want to match all buffers but the ones with a specific major-mode (negation), -prefix the major-mode with \"!\" e.g. \"*!lisp\". -If you want to specify more than one major-mode, separate them with \",\", -e.g. \"*!lisp,!sh,!fun\" will list all buffers but the ones in lisp-mode, sh-mode and -fundamental-mode. - -Enter then a space and a pattern to narrow down to buffers matching this pattern. - -**** Search inside buffers - -If you enter a space and a pattern prefixed by \"@\" helm will search for text matching -this pattern INSIDE the buffer (i.e not in the name of buffer). -NOTE that if you enter your pattern prefixed with \"@\" but escaped, helm will search a buffer -matching \"@pattern\" but will not search inside. - -**** Search by directory name - -If you prefix the beginning of pattern with \"/\" the match will occur on directory name -of buffer, it is interesting to narrow down to one directory for example, subsequent string -entered after a space will match on buffer-name only. -Note that negation is not supported for matching on buffer-file-name. -You can specify more than one directory starting from helm v1.6.8 - -**** Fuzzy matching - -Note that if `helm-buffers-fuzzy-matching' is non--nil you will have -fuzzy matching on buffer names (not on directory name matching and major-mode though). -A pattern starting with \"^\" will disable fuzzy matching and will match by exact regexp. - -**** Examples - -if I enter in pattern prompt: - - \"*lisp ^helm @moc\" - -helm will narrow down the list by selecting only buffers that are in lisp mode, start by helm -and match \"moc\" in their contents. - -if I enter in pattern prompt: - - \"*lisp ^helm moc\" - -Notice there is no \"@\" this time -helm will look for lisp mode buffers starting by \"helm\" and have \"moc\" in their name. - -if I enter in pattern prompt: - - \"*!lisp !helm\" - -helm will narrow down to buffers that are not in \"lisp\" mode and that do not match \"helm\" - -if I enter in pattern prompt: - - /helm/ w3 - -helm will narrow down to buffers that are in any \"helm\" subdirectory and matching w3. - -*** Creating buffers - -When creating a new buffer use \\[universal-argument] to choose a mode for your buffer in a list. -This list is customizable, see `helm-buffers-favorite-modes'. - -*** Killing buffers - -You have a command to kill buffer(s) and quit emacs and a command to kill buffers one by one -\(no marked\) without quitting helm. - -You can run this persistent kill buffer command either with the regular -`helm-execute-persistent-action' called with a prefix arg (C-u C-j) or with its specific command -`helm-buffer-run-kill-persistent' see binding below. - -*** Meaning of colors and prefixes for buffers - -Remote buffers are prefixed with '@'. -Red => Buffer have its file modified on disk by an external process. -Indianred2 => Buffer exists but its file have been deleted. -Orange => Buffer is modified and its file not saved to disk. -Italic => A non--file buffer. - -** Commands -\\ -\\[helm-buffer-run-zgrep]\t\tGrep Buffer(s) works as zgrep too (C-u grep all buffers but non--file buffers). -\\[helm-buffers-run-multi-occur]\t\tMulti Occur buffer or marked buffers. (C-u toggle force searching current-buffer). -\\[helm-buffer-switch-other-window]\t\tSwitch other window. -\\[helm-buffer-switch-other-frame]\t\tSwitch other frame. -\\[helm-buffer-run-query-replace-regexp]\t\tQuery replace regexp in marked buffers. -\\[helm-buffer-run-query-replace]\t\tQuery replace in marked buffers. -\\[helm-buffer-run-ediff]\t\tEdiff current buffer with candidate. If two marked buffers ediff those buffers. -\\[helm-buffer-run-ediff-merge]\t\tEdiff merge current buffer with candidate. If two marked buffers ediff merge those buffers. -\\[helm-buffer-diff-persistent]\t\tToggle Diff buffer with saved file without quitting. -\\[helm-buffer-revert-persistent]\t\tRevert buffer without quitting. -\\[helm-buffer-save-persistent]\t\tSave buffer without quitting. -\\[helm-buffer-run-kill-buffers]\t\tDelete marked buffers and quit. -\\[helm-buffer-run-kill-persistent]\t\tDelete buffer without quitting helm. -\\[helm-toggle-all-marks]\t\tToggle all marks. -\\[helm-mark-all]\t\tMark all. -\\[helm-toggle-buffers-details]\t\tToggle details. -\\[helm-buffers-toggle-show-hidden-buffers]\t\tShow hidden buffers. -\\[helm-buffers-mark-similar-buffers]\t\tMark all buffers with same type (color) than current.") - -;;; Find files help (`helm-find-files') -;; -;; -(defvar helm-ff-help-message - "* Helm Find Files - -** Tips - -*** Navigation summary - -For a better experience you can enable auto completion by setting -`helm-ff-auto-update-initial-value' to non-nil in your init file. -It is not enabled by default to not confuse new users. - -**** Use `C-j' (persistent action) on a directory to go down one level - -On a symlinked directory a prefix arg will allow expanding to its true name. - -**** Use `C-l' on a directory to go up one level - -**** Use `C-r' to walk back the resulting tree of all the `C-l' you did - -Note: The tree is reinitialized each time you enter a new tree with `C-j' -or by entering some pattern in prompt. - -*** Find file at point - -Helm is using `ffap' partially or completely to find file at point -depending on value of `helm-ff-guess-ffap-filenames'. -You can use full `ffap' by setting this to non-nil (annoying). -Default value is nil which make `ffap' working partially. - -**** Find file at number line - -With something like this at point: - - ~/elisp/helm/helm.el:1234 - -Helm will find this file at line number 1234. - -**** Find url at point - -When an url is found at point, helm expand to that url only. -Pressing RET jump to that url using `browse-url-browser-function'. - -**** Find mail at point - -When a mail address is found at point helm expand to this email address -prefixed by \"mailto:\". Pressing RET open a message buffer with this mail -address. - -*** Quick pattern expansion - -**** Enter `~/' at end of pattern to quickly reach home directory - -**** Enter `/' at end of pattern to quickly reach root of your file system - -**** Enter `./' at end of pattern to quickly reach `default-directory' (initial start of session) - -If you are already in `default-directory' this will move cursor on top. - -**** Enter `../' at end of pattern will reach upper directory, moving cursor on top - -NOTE: This is different to using `C-l' in that `C-l' don't move cursor on top but stay on previous -subdir name. - -**** Enter any environment var (e.g. `$HOME') at end of pattern, it will be expanded - -**** You can yank any valid filename after pattern, it will be expanded - -*** Helm find files is fuzzy matching (start on third char entered) - -e.g. \"fob\" or \"fbr\" will complete \"foobar\" -but \"fb\" will wait for a third char for completing. - -*** Use `C-u C-j' to watch an image or `C-' - -*** `C-j' on a filename will expand in helm-buffer to this filename - -Second hit on `C-j' will display buffer filename. -Third hit on `C-j' will kill buffer filename. -NOTE: `C-u C-j' will display buffer directly. - -*** To browse images directories turn on `helm-follow-mode' and navigate with arrow keys - -You can also use `helm-follow-action-forward' and `helm-follow-action-backward' -\(`C-'). - -*** You can turn off/on (toggle) autoupdate completion at any moment with `C-DEL' - -It is useful when auto completion is enabled and when trying to create a new file -or directory you want to prevent helm trying to complete what you are writing. -NOTE: On a terminal C- may not work, use in this case C-c . - -*** You can create a new directory and a new file at the same time - -Just write the path in prompt and press `'. -e.g. You can create \"~/new/newnew/newnewnew/my_newfile.txt\". - -*** To create a new directory, add a \"/\" at end of new name and press - -*** To create a new file just write the filename not ending with \"/\" - -*** Recursive search from helm find files - -**** You can use helm browse project (see binding below) - -- With no prefix arg - If your current directory is under version control - with one of git or hg and you have installed helm-ls-git and/or helm-ls-hg - https://github.com/emacs-helm/helm-ls-git.git - https://github.com/emacs-helm/helm-ls-hg - you will see all your files under version control, otherwise - you will be back to helm-find-files. -- With one prefix arg - You will see all the files under this directory - and other subdirectories (recursion) and this list of files will be cached. -- With two prefix args - same but the cache will be refreshed. - -**** You can start a recursive search with Locate of Find (See commands below) - -With Locate you can use a local db with a prefix arg. If the localdb doesn't already -exists, you will be prompted for its creation, if it exists and you want to refresh it, -give two prefix args. - -*** Insert filename at point or complete filename at point - -On insertion (no completion, i.e nothing at point): - -- `C-c i' => insert absolute file name. -- `C-u C-c i' => insert abbreviate file name. -- `C-u C-u C-c i' => insert relative file name. - -On completion: - -- target starts by ~/ => insert abbreviate file name. -- target starts by / or [a-z]:/ => insert full path. -- otherwise => insert relative file name. - -*** Using wildcard to select multiple files - -Use of wilcard is supported to give a set of files to an action: - -e.g. You can copy all the files with \".el\" extension by using \"*.el\" -and then run your copy action. - -You can do the same but with \"**.el\" (note the two stars), -this will select recursively all \".el\" files under current directory. - -NOTE: When using an action that involve an external backend (e.g. grep), using \"**\" -is not advised (even if it works fine) because it will be slower to select all your files, -you have better time letting the backend doing it, it will be faster. -However, if you know you have not many files it is reasonable to use this, -also using not recursive wilcard (e.g. \"*.el\") is perfectly fine for this. - -This feature (\"**\") is activated by default with the option `helm-file-globstar'. -The directory selection with \"**foo/\" like bash shopt globstar option is not supported yet. - -*** Copying renaming asynchronously - -If you use async library (if you have installed helm from MELPA you do) you can enable -async for copying/renaming etc... your files by enabling `dired-async-mode'. - -Note that even when async is enabled, running a copy/rename action with a prefix arg -will execute action synchronously, it will follow also the first file of the marked files -in its destination directory. - -*** Bookmark your `helm-find-files' session - -You can bookmark your `helm-find-files' session with `C-x r m'. -You can retrieve later these bookmarks easily by using M-x helm-filtered-bookmarks -or from the current `helm-find-files' session just hitting `C-x r b'. - -*** Run Gid from `helm-find-files' - -You can navigate to a project containing an ID file created with the `mkid' -command from id-utils, and run the `gid' command which will use the symbol at point -in `helm-current-buffer' as default. - -** Commands -\\ -\\[helm-ff-run-locate]\t\tRun Locate (C-u to specify locate db, M-n insert basename of candidate) -\\[helm-ff-run-browse-project]\t\tBrowse project (`C-u' recurse, `C-u C-u' recurse and refresh db) -\\[helm-ff-run-find-sh-command]\t\tRun Find shell command from this directory. -\\[helm-ff-run-grep]\t\tRun Grep (C-u Recursive). -\\[helm-ff-run-pdfgrep]\t\tRun Pdfgrep on marked files. -\\[helm-ff-run-zgrep]\t\tRun zgrep (C-u Recursive). -\\[helm-ff-run-grep-ag]\t\tRun AG grep on current directory. -\\[helm-ff-run-git-grep]\t\tRun git-grep on current directory. -\\[helm-ff-run-gid]\t\tRun gid (id-utils). -\\[helm-ff-run-etags]\t\tRun Etags (C-u use thing-at-point `C-u C-u' reload cache) -\\[helm-ff-run-rename-file]\t\tRename File (C-u Follow). -\\[helm-ff-run-query-replace-on-marked]\t\tQuery replace on marked files. -\\[helm-ff-run-copy-file]\t\tCopy File (C-u Follow). -\\[helm-ff-run-byte-compile-file]\t\tByte Compile File (C-u Load). -\\[helm-ff-run-load-file]\t\tLoad File. -\\[helm-ff-run-symlink-file]\t\tSymlink File. -\\[helm-ff-run-hardlink-file]\t\tHardlink file. -\\[helm-ff-run-delete-file]\t\tDelete File. -\\[helm-ff-run-kill-buffer-persistent]\t\tKill buffer candidate without quitting. -\\[helm-ff-persistent-delete]\t\tDelete file without quitting. -\\[helm-ff-run-switch-to-eshell]\t\tSwitch to Eshell. -\\[helm-ff-run-eshell-command-on-file]\t\tEshell command on file (C-u Apply on marked files, otherwise treat them sequentially). -\\[helm-ff-run-ediff-file]\t\tEdiff file. -\\[helm-ff-run-ediff-merge-file]\t\tEdiff merge file. -\\[helm-ff-run-complete-fn-at-point]\t\tComplete file name at point. -\\[helm-ff-run-switch-other-window]\t\tSwitch other window. -\\[helm-ff-run-switch-other-frame]\t\tSwitch other frame. -\\[helm-ff-run-open-file-externally]\t\tOpen file with external program (C-u to choose). -\\[helm-ff-run-open-file-with-default-tool]\t\tOpen file externally with default tool. -\\[helm-ff-rotate-left-persistent]\t\tRotate Image Left. -\\[helm-ff-rotate-right-persistent]\t\tRotate Image Right. -\\[helm-find-files-up-one-level]\t\tGo down precedent directory. -\\[helm-ff-run-switch-to-history]\t\tSwitch to last visited directories history. -\\[helm-ff-file-name-history]\t\tSwitch to file name history. -\\[helm-ff-properties-persistent]\t\tShow file properties in a tooltip. -\\[helm-mark-all]\t\tMark all visibles candidates. -\\[helm-ff-run-toggle-auto-update]\t\tToggle auto expansion of directories. -\\[helm-unmark-all]\t\tUnmark all candidates, visibles and invisibles. -\\[helm-ff-run-gnus-attach-files]\t\tGnus attach files to message buffer. -\\[helm-ff-run-print-file]\t\tPrint file, (C-u to refresh printers list). -\\[helm-enlarge-window]\t\tEnlarge helm window. -\\[helm-narrow-window]\t\tNarrow helm window. -\\[helm-ff-run-toggle-basename]\t\tToggle basename/fullpath. -\\[helm-ff-run-find-file-as-root]\t\tFind file as root. -\\[helm-ff-run-find-alternate-file]\t\tFind alternate file. -\\[helm-ff-run-insert-org-link]\t\tInsert org link.") - -;;; Help for `helm-read-file-name' -;; -;; -(defvar helm-read-file-name-help-message - "* Helm read file name - -** Tips - -If you are here, you are probably using a vanilla command like `find-file' -helmized by `helm-mode', this is cool, but it is even better for your file -navigation to use `helm-find-files' which is fully featured. - -*** Navigation - -**** Enter `~/' at end of pattern to quickly reach home directory - -**** Enter `/' at end of pattern to quickly reach root of your file system - -**** Enter `./' at end of pattern to quickly reach `default-directory' (initial start of session) - -If you are in `default-directory' move cursor on top. - -**** Enter `../' at end of pattern will reach upper directory, moving cursor on top - -NOTE: This different to using `C-l' in that `C-l' don't move cursor on top but stay on previous -subdir name. - -**** You can complete with partial basename (start on third char entered) - -E.g. \"fob\" or \"fbr\" will complete \"foobar\" -but \"fb\" will wait for a third char for completing. - -*** Persistent actions - -By default `helm-read-file-name' use the persistent actions of `helm-find-files' - -**** Use `C-u C-j' to watch an image - -**** `C-j' on a filename will expand in helm-buffer to this filename - -Second hit on `C-j' will display buffer filename. -Third hit on `C-j' will kill buffer filename. -NOTE: `C-u C-j' will display buffer directly. - -**** To browse images directories turn on `helm-follow-mode' and navigate with arrow keys - -*** Delete characters backward - -When you want to delete backward characters, e.g. to create a new file or directory, -autoupdate may keep updating to an existent directory preventing you from doing so. -In this case, type C- and then . -This should not be needed when copying/renaming files because autoupdate is disabled -by default in that case. -NOTE: On a terminal C- may not work, use in this case C-c . - -*** Create new directory and files - -**** Create a new directory and a new file at the same time - -You can create a new directory and a new file at the same time, -just write the path in prompt and press . -E.g. You can create \"~/new/newnew/newnewnew/my_newfile.txt\". - -**** To create a new directory, add a \"/\" at end of new name and press - -**** To create a new file just write the filename not ending with \"/\" - -_NOTE_: File and directory creation work only in some commands (e.g `find-file') -and will not work in other commands where it is not intended to return a file or a directory -\(e.g `list-directory'). - -** Commands -\\ -\\[helm-find-files-up-one-level]\t\tGo down precedent directory. -\\[helm-ff-run-toggle-auto-update]\t\tToggle auto expansion of directories. -\\[helm-ff-run-toggle-basename]\t\tToggle basename. -\\[helm-ff-file-name-history]\t\tFile name history. -C/\\[helm-cr-empty-string]\t\tMaybe return empty string (unless `must-match'). -\\[helm-next-source]\t\tGoto next source. -\\[helm-previous-source]\t\tGoto previous source.") - -;;; Generic file help - Used by locate. -;; -;; -(defvar helm-generic-file-help-message - "* Helm Generic files - -** Tips - -*** Locate - -You can add after writing search pattern any of the locate command line options. -e.g. -b, -e, -n ...etc. -See Man locate for more infos. - -Some other sources (at the moment recentf and file in current directory sources) -support the -b flag for compatibility with locate when they are used with it. - -*** Browse project - -When your directory is not under version control, -don't forget to refresh your cache when files have been added/removed in your directory. - -*** Find command - -Recursively search files using \"find\" shell command. - -Candidates are all filenames that match all given globbing patterns. -This respects the options `helm-case-fold-search' and -`helm-findutils-search-full-path'. - -You can pass arbitrary options directly to find after a \"*\" separator. -For example, this would find all files matching \"book\" that are larger -than 1 megabyte: - - book * -size +1M - -** Commands -\\ -\\[helm-ff-run-toggle-basename]\t\tToggle basename. -\\[helm-ff-run-grep]\t\tRun grep (C-u recurse). -\\[helm-ff-run-zgrep]\t\tRun zgrep. -\\[helm-ff-run-gid]\t\tRun gid (id-utils). -\\[helm-ff-run-pdfgrep]\t\tRun Pdfgrep on marked files. -\\[helm-ff-run-copy-file]\t\tCopy file(s) -\\[helm-ff-run-rename-file]\t\tRename file(s). -\\[helm-ff-run-symlink-file]\t\tSymlink file(s). -\\[helm-ff-run-hardlink-file]\t\tHardlink file(s). -\\[helm-ff-run-delete-file]\t\tDelete file(s). -\\[helm-ff-run-byte-compile-file]\t\tByte compile file(s) (C-u load) (elisp). -\\[helm-ff-run-load-file]\t\tLoad file(s) (elisp). -\\[helm-ff-run-ediff-file]\t\tEdiff file. -\\[helm-ff-run-ediff-merge-file]\t\tEdiff merge file. -\\[helm-ff-run-switch-other-window]\t\tSwitch other window. -\\[helm-ff-properties-persistent]\t\tShow file properties. -\\[helm-ff-run-etags]\t\tRun etags (C-u use tap, C-u C-u reload DB). -\\[helm-yank-text-at-point]\t\tYank text at point. -\\[helm-ff-run-open-file-externally]\t\tOpen file with external program (C-u to choose). -\\[helm-ff-run-open-file-with-default-tool]\t\tOpen file externally with default tool. -\\[helm-ff-run-insert-org-link]\t\tInsert org link.") - -;;; Grep help -;; -;; -(defvar helm-grep-help-message - "* Helm Grep - -** Tips - -*** You can start grep with a prefix arg to recurse in subdirectories - -*** You can use wild card when selecting files (e.g. *.el) - -*** You can grep in many differents directories by marking files or wild cards - -*** You can save your results in a `helm-grep-mode' buffer, see commands below - -Once in this buffer you can use emacs-wgrep to edit your changes. - -*** Important - -Grepping on remote file will work only with grep, not ack-grep, but it is -anyway bad supported as tramp doesn't support multiple process running in a -short delay (less than 5s actually) among other things, -so I strongly advice hitting `C-!' (i.e suspend process) -before entering anything in pattern, and hit again `C-!' when -your regexp is ready to send to remote process, even if helm is handling -this by delaying each process at 5s. -Or even better don't use tramp at all and mount your remote file system on SSHFS. - -* Helm Gid - -** Tips - -Helm gid read the database created with the `mkid' command from id-utils. -The name of the database file can be customized with `helm-gid-db-file-name', it -is usually \"ID\". -Helm Gid use the symbol at point as default-input. -You have access to this command also from `helm-find-files' which allow you to -navigate to another directory to consult its database. - -* Helm AG - -** Tips - -Helm AG is different from grep or ack-grep in that it works on a directory and not -a list of files. -You can ignore files and directories by using a \".agignore\" file, local to directory -or global when placed in home directory (See AG man page for more infos). -This file supports same entries as what you will find in `helm-grep-ignored-files' and -`helm-grep-ignored-directories'. -As always you can access helm AG from `helm-find-files'. - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext File. -\\[helm-goto-precedent-file]\t\tPrecedent File. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer. -\\[helm-grep-run-other-window-action]\t\tJump other window. -\\[helm-grep-run-other-frame-action]\t\tJump other frame. -\\[helm-grep-run-default-action]\t\tRun default action (Same as RET). -\\[helm-grep-run-save-buffer]\t\tSave to a `helm-grep-mode' enabled buffer.") - -;;; Pdf grep help -;; -;; -(defvar helm-pdfgrep-help-message - "* Helm PdfGrep Map - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext File. -\\[helm-goto-precedent-file]\t\tPrecedent File. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer.") - -;;; Etags help -;; -;; -(defvar helm-etags-help-message - "* Helm Etags Map - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext File. -\\[helm-goto-precedent-file]\t\tPrecedent File. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer.") - -;;; Ucs help -;; -;; -(defvar helm-ucs-help-message - "* Helm Ucs - -** Tips - -Use commands below to insert unicode characters -in current-buffer without quitting helm. - -** Commands -\\ -\\[helm-ucs-persistent-insert]\t\tInsert char. -\\[helm-ucs-persistent-forward]\t\tForward char. -\\[helm-ucs-persistent-backward]\t\tBackward char. -\\[helm-ucs-persistent-delete]\t\tDelete char backward.") - -;;; Bookmark help -;; -;; -(defvar helm-bookmark-help-message - "* Helm bookmark name - -** Commands -\\ -\\[helm-bookmark-run-jump-other-window]\t\tJump other window. -\\[helm-bookmark-run-delete]\t\tDelete bookmark. -\\[helm-bookmark-run-edit]\t\tEdit bookmark. -\\[helm-bookmark-toggle-filename]\t\tToggle bookmark location visibility.") - -;;; Eshell command on file help -;; -;; -(defvar helm-esh-help-message - "* Helm eshell on file - -** Tips - -*** Passing extra args after filename - -Normally your command or alias will be called with file as argument. E.g., - - 'candidate_file' - -But you can also pass an argument or more after 'candidate_file' like this: - - %s [extra_args] - -'candidate_file' will be added at '%s' and your command will look at this: - - 'candidate_file' [extra_args] - -*** Specify many files as args (marked files) - -E.g. file1 file2 ... - -Call `helm-find-files-eshell-command-on-file' with one prefix-arg -Otherwise you can pass one prefix-arg from the command selection buffer. -NOTE: This is not working on remote files. - -With two prefix-arg before starting or from the command selection buffer -the output is printed to your `current-buffer'. - -Note that with no prefix-arg or a prefix-arg value of '(16) (C-u C-u) -the command is called once for each file like this: - - file1 file2 etc... - -** Commands -\\") - -;;; Ido virtual buffer help -;; -;; -(defvar helm-buffers-ido-virtual-help-message - "* Helm ido virtual buffers - -** Commands -\\ -\\[helm-ff-run-switch-other-window]\t\tSwitch other window. -\\[helm-ff-run-switch-other-frame]\t\tSwitch other frame. -\\[helm-ff-run-grep]\t\tGrep file. -\\[helm-ff-run-zgrep]\t\tZgrep file. -\\[helm-ff-run-delete-file]\t\tDelete file. -\\[helm-ff-run-open-file-externally]\t\tOpen file externally.") - -;;; Moccur help -;; -;; -(defvar helm-moccur-help-message - "* Helm Moccur - -** Tips - -*** Matching - -Multiple regexp matching is allowed, just enter a space to separate your regexps. - -Matching empty lines is supported with the regexp \"^$\", you will get the results -with only the buffer-name and the line number, you can of course save and edit these -results (i.e add text to the empty line) . - -*** Automatically matching symbol at point - -You can match automatically the symbol at point, but keeping -the minibuffer empty ready to write into. -This is disabled by default, to enable this you have to add `helm-source-occur' -and `helm-source-moccur' to `helm-sources-using-default-as-input'. - -*** Jump to the corresponding line in the searched buffer - -You can do this with `C-j' (persistent-action), to do it repetitively -you can use `C-' and `C-' or enable `helm-follow-mode' with `C-c C-f'. - -*** Saving results - -Same as with helm-grep, you can save the results with `C-x C-s'. -Of course if you don't save your results, you can get back your session -with `helm-resume'. - -*** Refreshing the resumed session. - -When the buffer(s) where you ran helm-(m)occur have been modified, you will be -warned of this with the buffer flashing to red, you can refresh the buffer by running -`C-c C-u'. -This can be done automatically by customizing `helm-moccur-auto-update-on-resume'. - -*** Refreshing a saved buffer - -Type `g' to update your buffer. - -*** Edit a saved buffer - -First, install wgrep https://github.com/mhayashi1120/Emacs-wgrep -and then: - -1) C-c C-p to edit the buffer(s). -2) C-x C-s to save your changes. - -Tip: Use the excellent iedit https://github.com/tsdh/iedit -to modify occurences in your buffer. - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext Buffer. -\\[helm-goto-precedent-file]\t\tPrecedent Buffer. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer. -\\[helm-moccur-run-goto-line-ow]\t\tGoto line in other window. -\\[helm-moccur-run-goto-line-of]\t\tGoto line in new frame.") - -;;; Helm Top -;; -;; -(defvar helm-top-help-message - "* Helm Top - -** Tips - -** Commands -\\ -\\[helm-top-run-sort-by-com]\t\tSort by commands. -\\[helm-top-run-sort-by-cpu]\t\tSort by cpu usage. -\\[helm-top-run-sort-by-user]\t\tSort alphabetically by user. -\\[helm-top-run-sort-by-mem]\t\tSort by memory.") - -;;; Helm Apt -;; -;; -(defvar helm-apt-help-message - "* Helm Apt - -** Tips - -** Commands -\\ -\\[helm-apt-show-all]\t\tShow all packages. -\\[helm-apt-show-only-installed]\t\tShow installed packages only. -\\[helm-apt-show-only-not-installed]\t\tShow not installed packages only. -\\[helm-apt-show-only-deinstalled]\t\tShow deinstalled (not purged yet) packages only.>") - -;;; Helm elisp package -;; -;; -(defvar helm-el-package-help-message - "* Helm elisp package - -** Tips - -*** Compile all your packages asynchronously - -When using async (if you have installed from MELPA you do), only helm, helm-core, -and magit are compiled asynchronously, if you want all your packages compiled async, -add to your init file: - - (setq async-bytecomp-allowed-packages '(all)) - -*** Upgrade elisp packages - -On initial start (when emacs is fetching packages on remote), if helm find -package to upgrade it will start in the upgradables packages view showing the packages -availables to upgrade. -On further starts, you will have to refresh the list with `C-c C-u', if helm find upgrades -you will have a message telling you some packages are available for upgrade, you can switch to -upgrade view (see below) to see what packages are available for upgrade or just hit `C-c U'. -to upgrade all. - -To see upgradables packages hit . - -Then you can install all upgradables packages with the upgrade all action (`C-c C-u'), -or upgrade only the specific packages by marking them (the new ones) and running -the upgrade action (visible only when there is upgradables packages). -Of course you can upgrade a single package by just running the upgrade action -without marking it (`C-c u' or RET) . - -\*WARNING* You are strongly advised to RESTART emacs after UPGRADING packages. - -*** Meaning of flags prefixing packages (Emacs-25) - -- The flag \"S\" that prefix package names mean that this package is one of `package-selected-packages'. -This feature is only available with emacs-25. - -- The flag \"U\" that prefix package names mean that this package is no more needed. -This feature is only available with emacs-25. - -** Commands -\\ -\\[helm-el-package-show-all]\t\tShow all packages. -\\[helm-el-package-show-installed]\t\tShow installed packages only. -\\[helm-el-package-show-uninstalled]\t\tShow not installed packages only. -\\[helm-el-package-show-upgrade]\t\tShow upgradable packages only. -\\[helm-el-run-package-install]\t\tInstall package(s). -\\[helm-el-run-package-reinstall]\t\tReinstall package(s). -\\[helm-el-run-package-uninstall]\t\tUninstall package(s). -\\[helm-el-run-package-upgrade]\t\tUpgrade package(s). -\\[helm-el-run-package-upgrade-all]\t\tUpgrade all packages upgradables. -\\[helm-el-run-visit-homepage]\t\tVisit package homepage.") - -;;; Helm M-x -;; -;; -(defvar helm-M-x-help-message - "* Helm M-x - -** Tips - -*** You can get help on any command with persistent action (C-j) - -*** Prefix Args - -All the prefix args passed BEFORE running `helm-M-x' are ignored, -you should get an error message if you do so. -When you want to pass prefix args, pass them AFTER starting `helm-M-x', -you will see a prefix arg counter appearing in mode-line notifying you -the number of prefix args entered.") - -;;; helm-imenu -;; -;; -(defvar helm-imenu-help-message - "* Helm imenu - -** Tips - -** Commands -\\ -\\[helm-imenu-next-section]\t\tGo to next section. -\\[helm-imenu-previous-section]\t\tGo to previous section.") - -;;; helm-colors -;; -;; -(defvar helm-colors-help-message - "* Helm colors - -** Commands -\\ -\\[helm-color-run-insert-name]\t\tInsert the entry'name. -\\[helm-color-run-kill-name]\t\tKill the entry's name. -\\[helm-color-run-insert-rgb]\t\tInsert entry in RGB format. -\\[helm-color-run-kill-rgb]\t\tKill entry in RGB format.") - -;;; helm semantic -;; -;; -(defvar helm-semantic-help-message - "* Helm semantic - -** Tips - -** Commands -\\") - -;;; helm kmacro -;; -;; -(defvar helm-kmacro-help-message - "* Helm kmacro - -** Tips - -- Start recording some keys with `f3' -- Record new kmacro with `f4' -- Start `helm-execute-kmacro' to list all your macros. - -Use persistent action to run your kmacro as many time as needed, -you can change of kmacro with `helm-next-line' `helm-previous-line'. - -NOTE: You can't record keys running helm commands except `helm-M-x' unless -you don't choose from there a command using helm completion. - -** Commands -\\") - - -;;; Mode line strings -;; -;; -;;;###autoload -(defvar helm-comp-read-mode-line "\ -\\\ -C/\\[helm-cr-empty-string]:Empty \ -\\\ -\\[helm-help]:Help \ -\\[helm-select-action]:Act \ -\\[helm-maybe-exit-minibuffer]/\ -f1/f2/f-n:NthAct \ -\\[helm-toggle-suspend-update]:Tog.suspend") - -;;;###autoload -(defvar helm-read-file-name-mode-line-string "\ -\\\ -\\[helm-help]:Help \ -C/\\[helm-cr-empty-string]:Empty \ -\\\ -\\[helm-select-action]:Act \ -\\[helm-maybe-exit-minibuffer]/\ -f1/f2/f-n:NthAct \ -\\[helm-toggle-suspend-update]:Tog.suspend" - "String displayed in mode-line in `helm-source-find-files'.") - -;;;###autoload -(defvar helm-top-mode-line "\ -\\\ -\\[helm-help]:Help \ -\\\ -\\[helm-select-action]:Act \ -\\[helm-maybe-exit-minibuffer]/\ -f1/f2/f-n:NthAct \ -\\[helm-toggle-suspend-update]:Tog.suspend") - - -;;; Attribute Documentation -;; -;; -;;;###autoload -(defun helm-describe-helm-attribute (helm-attribute) - "Display the full documentation of HELM-ATTRIBUTE. -HELM-ATTRIBUTE should be a symbol." - (interactive (list (intern - (completing-read - "Describe helm attribute: " - (mapcar 'symbol-name helm-attributes) - nil t)))) - (with-output-to-temp-buffer "*Help*" - (princ (get helm-attribute 'helm-attrdoc)))) - -(helm-document-attribute 'name "mandatory" - " The name of the source. It is also the heading which appears - above the list of matches from the source. Must be unique.") - -(helm-document-attribute 'header-name "optional" - " A function returning the display string of the header. Its - argument is the name of the source. This attribute is useful to - add an additional information with the source name.") - -(helm-document-attribute 'candidates "mandatory if candidates-in-buffer attribute is not provided" - " Specifies how to retrieve candidates from the source. It can - either be a variable name, a function called with no parameters - or the actual list of candidates. - - The list must be a list whose members are strings, symbols - or (DISPLAY . REAL) pairs. - - In case of (DISPLAY . REAL) pairs, the DISPLAY string is shown - in the Helm buffer, but the REAL one is used as action - argument when the candidate is selected. This allows a more - readable presentation for candidates which would otherwise be, - for example, too long or have a common part shared with other - candidates which can be safely replaced with an abbreviated - string for display purposes. - - Note that if the (DISPLAY . REAL) form is used then pattern - matching is done on the displayed string, not on the real - value. - - If the candidates have to be retrieved asynchronously (for - example, by an external command which takes a while to run) - then the function should start the external command - asynchronously and return the associated process object. - Helm will take care of managing the process (receiving the - output from it, killing it if necessary, etc.). The process - should return candidates matching the current pattern (see - variable `helm-pattern'.) - You should use instead `candidates-process' attribute for - async processes, a warning will popup when using async process - in a `candidates' attribute. - - Note that currently results from asynchronous sources appear - last in the helm buffer regardless of their position in - `helm-sources'.") - -(helm-document-attribute 'candidates-process - "Same as `candidates' attributes but for process function." - " You should use this attribute when using a function involving - an async process instead of `candidates'.") - -(helm-document-attribute 'action "mandatory if type attribute is not provided" - " It is a list of (DISPLAY . FUNCTION) pairs or FUNCTION. - FUNCTION is called with one parameter: the selected candidate. - - An action other than the default can be chosen from this list - of actions for the currently selected candidate (by default - with TAB). The DISPLAY string is shown in the completions - buffer and the FUNCTION is invoked when an action is - selected. The first action of the list is the default.") - -(helm-document-attribute 'coerce "optional" - " It's a function called with one argument: the selected - candidate. - - This function is intended for type convertion. In normal case, - the selected candidate (string) is passed to action - function. If coerce function is specified, it is called just - before action function. - - Example: converting string to symbol - (coerce . intern)") - -(helm-document-attribute 'type "optional if action attribute is provided" - " Indicates the type of the items the source returns. - - Merge attributes not specified in the source itself from - `helm-type-attributes'. - - This attribute is implemented by plug-in.") - -(helm-document-attribute 'init "optional" - " Function called with no parameters when helm is started. It - is useful for collecting current state information which can be - used to create the list of candidates later. - - For example, if a source needs to work with the current - directory then it can store its value here, because later - helm does its job in the minibuffer and in the - `helm-buffer' and the current directory can be different - there.") - -(helm-document-attribute 'match "optional" - " List of functions called with one parameter: a candidate. The - function should return non-nil if the candidate matches the - current pattern (see variable `helm-pattern'). - - This attribute allows the source to override the default - pattern matching based on `string-match'. It can be used, for - example, to implement a source for file names and do the - pattern matching on the basename of files, since it's more - likely one is typing part of the basename when searching for a - file, instead of some string anywhere else in its path. - - If the list contains more than one function then the list of - matching candidates from the source is constructed by appending - the results after invoking the first function on all the - potential candidates, then the next function, and so on. The - matching candidates supplied by the first function appear first - in the list of results and then results from the other - functions, respectively. - - This attribute has no effect for asynchronous sources (see - attribute `candidates'), since they perform pattern matching - themselves.") - -(helm-document-attribute 'candidate-transformer "optional" - " It's a function or a list of functions called with one argument - when the completion list from the source is built. The argument - is the list of candidates retrieved from the source. The - function should return a transformed list of candidates which - will be used for the actual completion. If it is a list of - functions, it calls each function sequentially. - - This can be used to transform or remove items from the list of - candidates. - - Note that `candidates' is run already, so the given transformer - function should also be able to handle candidates with (DISPLAY - . REAL) format.") - -(helm-document-attribute 'filtered-candidate-transformer "optional" - " It has the same format as `candidate-transformer', except the - function is called with two parameters: the candidate list and - the source. - - This transformer is run on the candidate list which is already - filtered by the current pattern. While `candidate-transformer' - is run only once, it is run every time the input pattern is - changed. - - It can be used to transform the candidate list dynamically, for - example, based on the current pattern. - - In some cases it may also be more efficent to perform candidate - transformation here, instead of with `candidate-transformer' - even if this transformation is done every time the pattern is - changed. For example, if a candidate set is very large then - `candidate-transformer' transforms every candidate while only - some of them will actually be dislpayed due to the limit - imposed by `helm-candidate-number-limit'. - - Note that `candidates' and `candidate-transformer' is run - already, so the given transformer function should also be able - to handle candidates with (DISPLAY . REAL) format. - - This option has no effect for asynchronous sources. (Not yet, - at least.") - -(helm-document-attribute 'action-transformer "optional" - " It's a function or a list of functions called with two - arguments when the action list from the source is - assembled. The first argument is the list of actions, the - second is the current selection. If it is a list of functions, - it calls each function sequentially. - - The function should return a transformed action list. - - This can be used to customize the list of actions based on the - currently selected candidate.") - -(helm-document-attribute 'pattern-transformer "optional" - " It's a function or a list of functions called with one argument - before computing matches. Its argument is `helm-pattern'. - Functions should return transformed `helm-pattern'. - - It is useful to change interpretation of `helm-pattern'.") - -(helm-document-attribute 'delayed "optional" - " Candidates from the source are shown only if the user stops - typing and is idle for `helm-idle-delay' seconds. - If a value is given to delayed attr, this value is used instead only - if it is > to `helm-idle-delay'.") - -(helm-document-attribute 'volatile "optional" - " Indicates the source assembles the candidate list dynamically, - so it shouldn't be cached within a single Helm - invocation. It is only applicable to synchronous sources, - because asynchronous sources are not cached.") - -(helm-document-attribute 'requires-pattern "optional" - " If present matches from the source are shown only if the - pattern is not empty. Optionally, it can have an integer - parameter specifying the required length of input which is - useful in case of sources with lots of candidates.") - -(helm-document-attribute 'persistent-action "optional" - " Can be a either a Function called with one parameter (the - selected candidate) or a cons cell where first element is this - same function and second element a symbol (e.g. never-split) - that inform `helm-execute-persistent-action'to not split his - window to execute this persistent action.") - -(helm-document-attribute 'candidates-in-buffer "optional" - " Shortcut attribute for making and narrowing candidates using - buffers. This newly-introduced attribute prevents us from - forgetting to add volatile and match attributes. - - See docstring of `helm-candidates-in-buffer'. - - (candidates-in-buffer) is equivalent of three attributes: - (candidates . helm-candidates-in-buffer) - (volatile) - (match identity) - - (candidates-in-buffer . candidates-function) is equivalent of: - (candidates . candidates-function) - (volatile) - (match identity) - - This attribute is implemented by plug-in.") - -(helm-document-attribute 'search "optional" - " List of functions like `re-search-forward' or `search-forward'. - Buffer search function used by `helm-candidates-in-buffer'. - By default, `helm-candidates-in-buffer' uses - `re-search-forward'. This attribute is meant to be used with - (candidates . helm-candidates-in-buffer) or - (candidates-in-buffer) in short.") - -(helm-document-attribute 'get-line "optional" - " A function like `buffer-substring-no-properties' or `buffer-substring'. - This function converts point of line-beginning and point of line-end, - which represents a candidate computed by `helm-candidates-in-buffer'. - By default, `helm-candidates-in-buffer' uses - `buffer-substring-no-properties'.") - -(helm-document-attribute 'display-to-real "optional" - " Function called with one parameter; the selected candidate. - - The function transforms the selected candidate, and the result - is passed to the action function. The display-to-real - attribute provides another way to pass other string than one - shown in Helm buffer. - - Traditionally, it is possible to make candidates, - candidate-transformer or filtered-candidate-transformer - function return a list with (DISPLAY . REAL) pairs. But if REAL - can be generated from DISPLAY, display-to-real is more - convenient and faster.") - -(helm-document-attribute 'real-to-display "optional" - " Function called with one parameter; the selected candidate. - - The inverse of display-to-real attribute. - - The function transforms the selected candidate, which is passed - to the action function, for display. The real-to-display - attribute provides the other way to pass other string than one - shown in Helm buffer. - - Traditionally, it is possible to make candidates, - candidate-transformer or filtered-candidate-transformer - function return a list with (DISPLAY . REAL) pairs. But if - DISPLAY can be generated from REAL, real-to-display is more - convenient. - - Note that DISPLAY parts returned from candidates / - candidate-transformer are IGNORED as the name `display-to-real' - says.") - -(helm-document-attribute 'cleanup "optional" - " Function called with no parameters when *helm* buffer is - closed. It is useful for killing unneeded candidates buffer. - - Note that the function is executed BEFORE performing action.") - -(helm-document-attribute 'candidate-number-limit "optional" - " Override `helm-candidate-number-limit' only for this source.") - -(helm-document-attribute 'accept-empty "optional" - " Pass empty string \"\" to action function.") - -(helm-document-attribute 'dummy "optional" - " Set `helm-pattern' to candidate. If this attribute is - specified, The candidates attribute is ignored. - - This attribute is implemented by plug-in.") - -(helm-document-attribute 'multiline "optional" - " Enable to selection multiline candidates.") - -(helm-document-attribute 'update "optional" - (substitute-command-keys - " Function called with no parameters at before \"init\" function when \ -\\\\[helm-force-update] is pressed.")) - -(helm-document-attribute 'mode-line "optional" - " Source local `helm-mode-line-string' (included in - `mode-line-format'). It accepts also variable/function name.") - -(helm-document-attribute 'header-line "optional" - " Source local `header-line-format'. - It accepts also variable/function name. ") - -(helm-document-attribute - 'resume "optional" - " Function called with no parameters at end of initialization - when `helm-resume' is started. - If this function try to do something against `helm-buffer', \(e.g. updating, - searching etc...\) probably you should run it in a timer to ensure - `helm-buffer' is ready.") - -(helm-document-attribute 'keymap "optional" - " Specific keymap for this source. - It is useful to have a keymap per source when using more than - one source. Otherwise, a keymap can be set per command with - `helm' argument KEYMAP. NOTE: when a source have `helm-map' as - keymap attr, the global value of `helm-map' will override the - actual local one.") - -(helm-document-attribute 'help-message "optional" - " Help message for this source. - If not present, `helm-help-message' value will be used.") - -(helm-document-attribute 'match-part "optional" - " Allow matching candidate in the line with `candidates-in-buffer'. - In candidates-in-buffer sources, match is done with - `re-search-forward' which allow matching only a regexp on the - `helm-buffer'; when this search is done, match-part allow - matching only a specific part of the current line e.g. with a - line like this: - - filename:candidate-containing-the-word-filename - - What you want is to ignore \"filename\" part and match only - \"candidate-containing-the-word-filename\" - - So give a function matching only the part of candidate after \":\" - - If source contain match-part attribute, match is computed only - on part of candidate returned by the call of function provided - by this attribute. The function should have one arg, candidate, - and return only a specific part of candidate. - - NOTE: This have effect only on sources using - `candidates-in-buffer'.") - -(helm-document-attribute 'match-strict "optional" - " When specifying a match function within a source and - helm-multi-match is enabled, the result of all matching - functions will be concatened, which in some cases is not what - is wanted. When using `match-strict' only this or these - functions will be used. You can specify those functions as a - list of functions or a single symbol function. For anonymous - function don't add the dot, e.g: - - \(match-strict (lambda () (foo))).") - -(helm-document-attribute 'nohighlight "optional" - " Disable highlight match in this source.") - -(helm-document-attribute 'no-matchplugin "optional" - " Disable matchplugin for this source.") - -(helm-document-attribute 'history "optional" - " Allow passing history variable to helm from source. - It should be a quoted symbol evaluated from source, i.e: - (history . ,'history-var)") - -(helm-document-attribute 'follow "optional" - " Enable `helm-follow-mode' for this source only. - You must give it a value of 1 or -1, though giving a -1 value - is surely not what you want, e.g: (follow . 1) - - See `helm-follow-mode' for more infos") - -(helm-document-attribute 'follow-delay "optional" - " `helm-follow-mode' will execute persistent-action after this delay. - Otherwise value of `helm-follow-input-idle-delay' is used if non--nil, - If none of these are found fallback to `helm-input-idle-delay'.") - -(helm-document-attribute 'allow-dups "optional" - " Allow helm collecting duplicates candidates.") - -(helm-document-attribute 'filter-one-by-one "optional" - " A transformer function that treat candidates one by one. - It is called with one arg the candidate. - It is faster than `filtered-candidate-transformer' or `candidates-transformer', - but should be used only in sources that recompute constantly their candidates, - e.g. `helm-source-find-files'. - Filtering happen early and candidates are treated - one by one instead of re-looping on the whole list. - If used with `filtered-candidate-transformer' or `candidates-transformer' - these functions should treat the candidates transformed by the `filter-one-by-one' - function in consequence.") - -(helm-document-attribute 'nomark "optional" - " Don't allow marking candidates when this attribute is present.") - -(provide 'helm-help) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-help.el ends here diff --git a/elpa/helm-20160105.2046/helm-id-utils.el b/elpa/helm-20160105.2046/helm-id-utils.el deleted file mode 100644 index 15f6bc42..00000000 --- a/elpa/helm-20160105.2046/helm-id-utils.el +++ /dev/null @@ -1,126 +0,0 @@ -;;; helm-id-utils.el --- Helm interface for id-utils. -*- lexical-binding: t -*- - -;; Copyright (C) 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'helm-grep) -(require 'helm-help) - -(defgroup helm-id-utils nil - "ID-Utils related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-gid-program "gid" - "Name of gid command (usually `gid'). -For Mac OS X users, if you install GNU coreutils, the name `gid' -might be occupied by `id' from GNU coreutils, and you should set -it to correct name (or absolute path), for example, if using -MacPorts to install id-utils, it should be `gid32'." - :group 'helm-id-utils - :type 'file) - -(defcustom helm-gid-db-file-name "ID" - "Name of a database file created by `mkid' command from `ID-utils'." - :group 'helm-id-utils - :type 'string) - -(defun helm-gid-candidates-process () - (let ((proc (start-process - "gid" nil helm-gid-program - "-r" helm-pattern))) - (set (make-local-variable 'helm-grep-last-cmd-line) - (format "%s -r %s" helm-gid-program helm-pattern)) - (prog1 proc - (set-process-sentinel - proc (lambda (_process event) - (when (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Helm Gid process finished - (%s results)]" - (max (1- (count-lines - (point-min) (point-max))) - 0)) - 'face 'helm-locate-finish)))) - (force-mode-line-update)) - (helm-log "Error: Gid %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defun helm-gid-filtered-candidate-transformer (candidates _source) - ;; "gid -r" may add dups in some rare cases. - (cl-loop for c in (helm-fast-remove-dups candidates :test 'equal) - collect (helm-grep--filter-candidate-1 c))) - -(defclass helm-gid-source (helm-source-async) - ((header-name - :initform - (lambda (name) - (concat name " [" (helm-attr 'db-dir) "]"))) - (db-dir :initarg :db-dir - :initform nil - :custom string - :documentation " Location of ID file.") - (candidates-process :initform #'helm-gid-candidates-process) - (filtered-candidate-transformer - :initform #'helm-gid-filtered-candidate-transformer) - (candidate-number-limit :initform 99999) - (action :initform (helm-make-actions - "Find File" 'helm-grep-action - "Find file other frame" 'helm-grep-other-frame - (lambda () (and (locate-library "elscreen") - "Find file in Elscreen")) - 'helm-grep-jump-elscreen - "Save results in grep buffer" 'helm-grep-save-results - "Find file other window" 'helm-grep-other-window)) - (persistent-action :initform 'helm-grep-persistent-action) - (history :initform 'helm-grep-history) - (nohighlight :initform t) - (help-message :initform 'helm-grep-help-message) - (requires-pattern :initform 2))) - -;;;###autoload -(defun helm-gid () - "Preconfigured helm for `gid' command line of `ID-Utils'. -Need A database created with the command `mkid' -above `default-directory'. -Need id-utils as dependency which provide `mkid', `gid' etc... -See ." - (interactive) - (let* ((db (locate-dominating-file - default-directory - helm-gid-db-file-name)) - (helm-grep-default-directory-fn - (lambda () default-directory)) - (helm--maybe-use-default-as-input t)) - (cl-assert db nil "No DataBase found, create one with `mkid'") - (helm :sources (helm-make-source "Gid" 'helm-gid-source - :db-dir db) - :buffer "*helm gid*" - :keymap helm-grep-map - :truncate-lines helm-grep-truncate-lines))) - -(provide 'helm-id-utils) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-id-utils ends here diff --git a/elpa/helm-20160105.2046/helm-imenu.el b/elpa/helm-20160105.2046/helm-imenu.el deleted file mode 100644 index ba4848a4..00000000 --- a/elpa/helm-20160105.2046/helm-imenu.el +++ /dev/null @@ -1,276 +0,0 @@ -;;; helm-imenu.el --- Helm interface for Imenu -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'imenu) -(require 'helm-utils) -(require 'helm-help) - - -(defgroup helm-imenu nil - "Imenu related libraries and applications for helm." - :group 'helm) - -(defcustom helm-imenu-delimiter " / " - "Delimit types of candidates and his value in `helm-buffer'." - :group 'helm-imenu - :type 'string) - -(defcustom helm-imenu-execute-action-at-once-if-one - #'helm-imenu--execute-action-at-once-p - "Goto the candidate when only one is remaining." - :group 'helm-imenu - :type 'function) - -(defcustom helm-imenu-lynx-style-map t - "Use Arrow keys to jump to occurences." - :group 'helm-imenu - :type 'boolean) - - -;;; keymap -(defvar helm-imenu-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-imenu-next-section) - (define-key map (kbd "M-") 'helm-imenu-previous-section) - (when helm-imenu-lynx-style-map - (define-key map (kbd "") 'helm-maybe-exit-minibuffer) - (define-key map (kbd "") 'helm-execute-persistent-action)) - (delq nil map))) - -(defun helm-imenu-next-or-previous-section (n) - (with-helm-buffer - (let* ((fn (lambda () - (car (split-string (helm-get-selection nil t) - helm-imenu-delimiter)))) - (curtype (funcall fn)) - (move-fn (if (> n 0) #'helm-next-line #'helm-previous-line)) - (stop-fn (if (> n 0) - #'helm-end-of-source-p - #'helm-beginning-of-source-p))) - (catch 'break - (while (not (funcall stop-fn)) - (funcall move-fn) - (unless (string= curtype (funcall fn)) - (throw 'break nil))))))) - -(defun helm-imenu-next-section () - (interactive) - (helm-imenu-next-or-previous-section 1)) - -(defun helm-imenu-previous-section () - (interactive) - (helm-imenu-next-or-previous-section -1)) - - -;;; Internals -(defvar helm-cached-imenu-alist nil) -(make-variable-buffer-local 'helm-cached-imenu-alist) - -(defvar helm-cached-imenu-candidates nil) -(make-variable-buffer-local 'helm-cached-imenu-candidates) - -(defvar helm-cached-imenu-tick nil) -(make-variable-buffer-local 'helm-cached-imenu-tick) - - -(defvar helm-source-imenu nil "See (info \"(emacs)Imenu\")") -(defvar helm-source-imenu-all nil) - -(defclass helm-imenu-source (helm-source-sync) - ((candidates :initform 'helm-imenu-candidates) - (candidate-transformer :initform 'helm-imenu-transformer) - (persistent-action :initform 'helm-imenu-persistent-action) - (persistent-help :initform "Show this entry") - (keymap :initform helm-imenu-map) - (help-message :initform 'helm-imenu-help-message) - (action :initform 'helm-imenu-action))) - -(defcustom helm-imenu-fuzzy-match nil - "Enable fuzzy matching in `helm-source-imenu'." - :group 'helm-imenu - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-imenu - (helm-make-source "Imenu" 'helm-imenu-source - :fuzzy-match helm-imenu-fuzzy-match)))) - -(defun helm-imenu--maybe-switch-to-buffer (candidate) - (helm-aif (marker-buffer (cdr candidate)) - (switch-to-buffer it))) - -(defun helm-imenu--execute-action-at-once-p () - (let ((cur (helm-get-selection)) - (mb (with-helm-current-buffer - (save-excursion - (goto-char (point-at-bol)) - (point-marker))))) - (if (equal (cdr cur) mb) - (prog1 nil - (helm-set-pattern "") - (helm-force-update)) - t))) - -(defun helm-imenu-action (candidate) - "Default action for `helm-source-imenu'." - (helm-log-run-hook 'helm-goto-line-before-hook) - (helm-imenu--maybe-switch-to-buffer candidate) - (imenu candidate) - ;; If semantic is supported in this buffer - ;; imenu used `semantic-imenu-goto-function' - ;; and position have been highlighted, - ;; no need to highlight again. - (unless (eq imenu-default-goto-function - 'semantic-imenu-goto-function) - (helm-highlight-current-line nil nil nil nil 'pulse))) - -(defun helm-imenu-persistent-action (candidate) - "Default persistent action for `helm-source-imenu'." - (helm-imenu--maybe-switch-to-buffer candidate) - (imenu candidate) - (helm-highlight-current-line)) - -(defun helm-imenu-candidates (&optional buffer) - (with-current-buffer (or buffer helm-current-buffer) - (let ((tick (buffer-modified-tick))) - (if (eq helm-cached-imenu-tick tick) - helm-cached-imenu-candidates - (setq imenu--index-alist nil) - (prog1 (setq helm-cached-imenu-candidates - (let ((index (imenu--make-index-alist t))) - (helm-imenu--candidates-1 - (delete (assoc "*Rescan*" index) index)))) - (setq helm-cached-imenu-tick tick)))))) - -(defun helm-imenu-candidates-in-all-buffers () - (let* ((lst (buffer-list)) - (progress-reporter (make-progress-reporter - "Imenu indexing buffers..." 1 (length lst)))) - (prog1 - (cl-loop for b in lst - for count from 1 - for mm = (with-current-buffer b major-mode) - for cmm = (with-helm-current-buffer major-mode) - when (or (with-helm-current-buffer - (derived-mode-p mm)) - (with-current-buffer b - (derived-mode-p cmm))) - do (progress-reporter-update progress-reporter count) - and - append (with-current-buffer b - (helm-imenu-candidates b))) - (progress-reporter-done progress-reporter)))) - -(defun helm-imenu--candidates-1 (alist) - (cl-loop for elm in alist - nconc (if (imenu--subalist-p elm) - (helm-imenu--candidates-1 - (cl-loop for (e . v) in (cdr elm) collect - (cons (propertize - e 'helm-imenu-type (car elm)) - ;; If value is an integer, convert it - ;; to a marker, otherwise it is a cons cell - ;; and it will be converted on next recursions. - ;; (Issue #1060) [1]. - (if (integerp v) (copy-marker v) v)))) - (and (cdr elm) ; bug in imenu, should not be needed. - (setcdr elm (copy-marker (cdr elm))) ; Same as [1]. - (list elm))))) - -(defun helm-imenu--get-prop (item) - ;; property value of ITEM can have itself - ;; a property value which have itself a property value - ;; ...and so on; Return a list of all these - ;; properties values starting at ITEM. - (let* ((prop (get-text-property 0 'helm-imenu-type item)) - (lst (list prop item))) - (when prop - (while prop - (setq prop (get-text-property 0 'helm-imenu-type prop)) - (and prop (push prop lst))) - lst))) - -(defun helm-imenu-transformer (candidates) - (cl-loop for (k . v) in candidates - for types = (or (helm-imenu--get-prop k) - (list "Function" k)) - for bufname = (buffer-name (marker-buffer v)) - for disp1 = (mapconcat - (lambda (x) - (propertize - x 'face (cond ((string= x "Variables") - 'font-lock-variable-name-face) - ((string= x "Function") - 'font-lock-function-name-face) - ((string= x "Types") - 'font-lock-type-face)))) - types helm-imenu-delimiter) - for disp = (propertize disp1 'help-echo bufname) - collect - (cons disp (cons k v)))) - -;;;###autoload -(defun helm-imenu () - "Preconfigured `helm' for `imenu'." - (interactive) - (unless helm-source-imenu - (setq helm-source-imenu - (helm-make-source "Imenu" 'helm-imenu-source - :fuzzy-match helm-imenu-fuzzy-match))) - (let ((imenu-auto-rescan t) - (str (thing-at-point 'symbol)) - (helm-execute-action-at-once-if-one - helm-imenu-execute-action-at-once-if-one)) - (helm :sources 'helm-source-imenu - :default (list (concat "\\_<" str "\\_>") str) - :preselect str - :buffer "*helm imenu*"))) - -;;;###autoload -(defun helm-imenu-in-all-buffers () - "Preconfigured helm for fetching imenu entries of all buffers." - (interactive) - (unless helm-source-imenu-all - (setq helm-source-imenu-all - (helm-make-source "Imenu in all buffers" 'helm-imenu-source - :candidates 'helm-imenu-candidates-in-all-buffers - :fuzzy-match helm-imenu-fuzzy-match))) - (let ((imenu-auto-rescan t) - (str (thing-at-point 'symbol)) - (helm-execute-action-at-once-if-one - helm-imenu-execute-action-at-once-if-one)) - (helm :sources 'helm-source-imenu-all - :default (list (concat "\\_<" str "\\_>") str) - :preselect (unless (memq 'helm-source-imenu-all - helm-sources-using-default-as-input) - str) - :buffer "*helm imenu all*"))) - -(provide 'helm-imenu) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-imenu.el ends here diff --git a/elpa/helm-20160105.2046/helm-info.el b/elpa/helm-20160105.2046/helm-info.el deleted file mode 100644 index e38e64d3..00000000 --- a/elpa/helm-20160105.2046/helm-info.el +++ /dev/null @@ -1,183 +0,0 @@ -;;; helm-info.el --- Browse info index with helm -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-plugin) - -(declare-function Info-index-nodes "info" (&optional file)) -(declare-function Info-goto-node "info" (&optional fork)) -(declare-function Info-find-node "info.el" (filename nodename &optional no-going-back)) -(defvar Info-history) - - -(defgroup helm-info nil - "Info related Applications and libraries for Helm." - :group 'helm) - -;;; Build info-index sources with `helm-info-source' class. -;; -;; -(cl-defun helm-info-init (&optional (file (helm-attr 'info-file))) - ;; Allow reinit candidate buffer when using edebug. - (helm-aif (and debug-on-error - (helm-candidate-buffer)) - (kill-buffer it)) - (unless (helm-candidate-buffer) - (save-window-excursion - (info file) - (let ((tobuf (helm-candidate-buffer 'global)) - (infobuf (current-buffer)) - Info-history - start end) - (cl-dolist (node (Info-index-nodes)) - (Info-goto-node node) - (goto-char (point-min)) - (while (search-forward "\n* " nil t) - (unless (search-forward "Menu:\n" (1+ (point-at-eol)) t) - (setq start (point-at-bol) - end (point-at-eol)) - (with-current-buffer tobuf - (insert-buffer-substring infobuf start end) - (insert "\n"))))))))) - -(defun helm-info-goto (node-line) - (Info-goto-node (car node-line)) - (helm-goto-line (cdr node-line))) - -(defun helm-info-display-to-real (line) - (and (string-match - ;; This regexp is stolen from Info-apropos-matches - "\\* +\\([^\n]*.+[^\n]*\\):[ \t]+\\([^\n]*\\)\\.\\(?:[ \t\n]*(line +\\([0-9]+\\))\\)?" line) - (cons (format "(%s)%s" (helm-attr 'info-file) (match-string 2 line)) - (string-to-number (or (match-string 3 line) "1"))))) - -(defclass helm-info-source (helm-source-in-buffer) - ((info-file :initarg :info-file - :initform nil - :custom 'string) - (init :initform #'helm-info-init) - (display-to-real :initform #'helm-info-display-to-real) - (get-line :initform #'buffer-substring) - (action :initform '(("Goto node" . helm-info-goto))))) - -(defmacro helm-build-info-source (fname &rest args) - `(helm-make-source (concat "Info Index: " ,fname) 'helm-info-source - :info-file ,fname ,@args)) - -(defun helm-build-info-index-command (name doc source buffer) - "Define an helm command NAME with documentation DOC. -Arg SOURCE will be an existing helm source named -`helm-source-info-' and BUFFER a string buffer name." - (defalias (intern (concat "helm-info-" name)) - (lambda () - (interactive) - (helm :sources source - :buffer buffer - :candidate-number-limit 1000)) - doc)) - -(defun helm-define-info-index-sources (var-value &optional commands) - "Define helm sources named helm-source-info-. -Sources are generated for all entries of `helm-default-info-index-list'. -If COMMANDS arg is non--nil build also commands named `helm-info'. -Where NAME is one of `helm-default-info-index-list'." - (cl-loop for str in var-value - for sym = (intern (concat "helm-source-info-" str)) - do (set sym (helm-build-info-source str)) - when commands - do (helm-build-info-index-command - str (format "Predefined helm for %s info." str) - sym (format "*helm info %s*" str)))) - -(defun helm-info-index-set (var value) - (set var value) - (helm-define-info-index-sources value t)) - -(defcustom helm-default-info-index-list - '("elisp" "cl" "org" "gnus" "tramp" "ratpoison" - "zsh" "bash" "coreutils" "fileutils" - "find" "sh-utils" "textutils" "libc" - "make" "automake" "autoconf" "eintr" - "emacs" "elib" "eieio" "gauche-refe" "guile" - "guile-tut" "goops" "screen" "latex" "gawk" - "sed" "m4" "wget" "binutils" "as" "bfd" "gprof" - "ld" "diff" "flex" "grep" "gzip" "libtool" - "texinfo" "info" "gdb" "stabs" "cvsbook" "cvs" - "bison" "id-utils" "global") - "Info Manual entries to use for building helm info index commands." - :group 'helm-info - :type '(repeat (choice string)) - :set 'helm-info-index-set) - -(defcustom helm-info-default-sources - '(helm-source-info-elisp - helm-source-info-cl - helm-source-info-eieio - helm-source-info-pages) - "The default sources to use in `helm-info-at-point'." - :group 'helm-info - :type '(repeat (choice symbol))) - - -;;; Info pages -(defvar helm-info--pages-cache nil - "Cache for all info pages on system.") - -(defun helm-info-pages-init () - "Collect candidates for initial Info node Top." - (if helm-info--pages-cache - helm-info--pages-cache - (let ((info-topic-regexp "\\* +\\([^:]+: ([^)]+)[^.]*\\)\\.") - topics) - (require 'info) - (with-temp-buffer - (Info-find-node "dir" "top") - (goto-char (point-min)) - (while (re-search-forward info-topic-regexp nil t) - (push (match-string-no-properties 1) topics)) - (kill-buffer)) - (setq helm-info--pages-cache topics)))) - -(defvar helm-source-info-pages - (helm-build-sync-source "Info Pages" - :init #'helm-info-pages-init - :candidates (lambda () helm-info--pages-cache) - :action '(("Show with Info" .(lambda (node-str) - (info (replace-regexp-in-string - "^[^:]+: " "" node-str))))) - :requires-pattern 2)) - -;;;###autoload -(defun helm-info-at-point () - "Preconfigured `helm' for searching info at point. -With a prefix-arg insert symbol at point." - (interactive) - (helm :sources helm-info-default-sources - :buffer "*helm info*")) - -(provide 'helm-info) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-info.el ends here diff --git a/elpa/helm-20160105.2046/helm-locate.el b/elpa/helm-20160105.2046/helm-locate.el deleted file mode 100644 index 8d672c9e..00000000 --- a/elpa/helm-20160105.2046/helm-locate.el +++ /dev/null @@ -1,403 +0,0 @@ -;;; helm-locate.el --- helm interface for locate. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;; NOTE for WINDOZE users: -;; You have to install Everything with his command line interface here: -;; http://www.voidtools.com/download.php - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-types) -(require 'helm-help) - - -(defgroup helm-locate nil - "Locate related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-locate-db-file-regexp "m?locate\.db$" - "Default regexp to match locate database. -If nil Search in all files." - :type 'string - :group 'helm-locate) - -(defcustom helm-ff-locate-db-filename "locate.db" - "The basename of the locatedb file you use locally in your directories. -When this is set and `helm' find such a file in the directory from -where you launch locate, it will use this file and will not prompt you -for a db file. -Note that this happen only when locate is launched with a prefix arg." - :group 'helm-locate - :type 'string) - -(defcustom helm-locate-command nil - "A list of arguments for locate program. -Normally you should not have to modify this yourself. - -If nil it will be calculated when `helm-locate' startup -with these default values for different systems: - -Gnu/linux: \"locate %s -e -r %s\" -berkeley-unix: \"locate %s %s\" -windows-nt: \"es %s %s\" -Others: \"locate %s %s\" - -This string will be passed to format so it should end with `%s'. -The first format spec is used for the \"-i\" value of locate/es, -So don't set it directly but use `helm-locate-case-fold-search' -for this. -The \"-r\" option must be the last option, however if not specified you will -be able to specify it during helm invocation by prefixing the pattern -you enter with \"-r\"." - :type 'string - :group 'helm-locate) - -(defcustom helm-locate-create-db-command - "updatedb -l 0 -o %s -U %s" - "Command used to create a locale locate db file." - :type 'string - :group 'helm-locate) - -(defcustom helm-locate-case-fold-search helm-case-fold-search - "It have the same meaning as `helm-case-fold-search'. -The -i option of locate will be used depending of value of -`helm-pattern' when this is set to 'smart. -When nil \"-i\" will not be used at all. -and when non--nil it will always be used. -NOTE: the -i option of the \"es\" command used on windows does -the opposite of \"locate\" command." - :group 'helm-locate - :type 'symbol) - -(defcustom helm-locate-fuzzy-match nil - "Enable fuzzy matching in `helm-locate'." - :group 'helm-locate - :type 'boolean) - -(defcustom helm-locate-project-list nil - "A list of directories, your projects. -When set, allow browsing recursively files in all -directories of this list with `helm-projects-find-files'." - :group 'helm-locate - :type '(repeat string)) - - -(defvar helm-generic-files-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-]") 'helm-ff-run-toggle-basename) - (define-key map (kbd "C-s") 'helm-ff-run-grep) - (define-key map (kbd "M-g s") 'helm-ff-run-grep) - (define-key map (kbd "M-g z") 'helm-ff-run-zgrep) - (define-key map (kbd "M-g p") 'helm-ff-run-pdfgrep) - (define-key map (kbd "C-c g") 'helm-ff-run-gid) - (define-key map (kbd "M-R") 'helm-ff-run-rename-file) - (define-key map (kbd "M-C") 'helm-ff-run-copy-file) - (define-key map (kbd "M-B") 'helm-ff-run-byte-compile-file) - (define-key map (kbd "M-L") 'helm-ff-run-load-file) - (define-key map (kbd "M-S") 'helm-ff-run-symlink-file) - (define-key map (kbd "M-H") 'helm-ff-run-hardlink-file) - (define-key map (kbd "M-D") 'helm-ff-run-delete-file) - (define-key map (kbd "C-=") 'helm-ff-run-ediff-file) - (define-key map (kbd "C-c =") 'helm-ff-run-ediff-merge-file) - (define-key map (kbd "C-c o") 'helm-ff-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-ff-run-switch-other-frame) - (define-key map (kbd "M-i") 'helm-ff-properties-persistent) - (define-key map (kbd "C-c C-x") 'helm-ff-run-open-file-externally) - (define-key map (kbd "C-c X") 'helm-ff-run-open-file-with-default-tool) - (define-key map (kbd "M-.") 'helm-ff-run-etags) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-c @") 'helm-ff-run-insert-org-link) - map) - "Generic Keymap for files.") - - -(defface helm-locate-finish - '((t (:foreground "Green"))) - "Face used in mode line when locate process is finish." - :group 'helm-locate) - - -(defun helm-ff-find-locatedb (&optional from-ff) - "Try to find if a local locatedb file is available. -The search is done in `helm-ff-default-directory' or -fall back to `default-directory' if FROM-FF is nil." - (when helm-ff-locate-db-filename - (cond ((and helm-ff-default-directory - from-ff - (file-exists-p (expand-file-name - helm-ff-locate-db-filename - helm-ff-default-directory)) - (expand-file-name - helm-ff-locate-db-filename - helm-ff-default-directory))) - ((and (not from-ff) - (file-exists-p (expand-file-name - helm-ff-locate-db-filename - default-directory)) - (expand-file-name - helm-ff-locate-db-filename - default-directory)))))) - - -(defun helm-locate-create-db-default-function (db-name directory) - "Default function used to create a locale locate db file. -Argument DB-NAME name of the db file. -Argument DIRECTORY root of file system subtree to scan." - (format helm-locate-create-db-command db-name directory)) - -(defvar helm-locate-create-db-function - #'helm-locate-create-db-default-function - "Function used to create a locale locate db file. -It should receive the same arguments as -`helm-locate-create-db-default-function'.") - -(defun helm-locate-1 (&optional localdb init from-ff default) - "Generic function to run Locate. -Prefix arg LOCALDB when (4) search and use a local locate db file when it -exists or create it, when (16) force update of existing db file -even if exists. -It have no effect when locate command is 'es'. -INIT is a string to use as initial input in prompt. -See `helm-locate-with-db' and `helm-locate'." - (require 'helm-mode) - (helm-locate-set-command) - (let ((pfn (lambda (candidate) - (if (file-directory-p candidate) - (message "Error: The locate Db should be a file") - (if (= (shell-command - (funcall helm-locate-create-db-function - candidate - helm-ff-default-directory)) - 0) - (message "New locatedb file `%s' created" candidate) - (error "Failed to create locatedb file `%s'" candidate))))) - (locdb (and localdb - (not (string-match "^es" helm-locate-command)) - (or (and (equal '(4) localdb) - (helm-ff-find-locatedb from-ff)) - (helm-read-file-name - "Create Locate Db file: " - :initial-input (expand-file-name "locate.db" - (or helm-ff-default-directory - default-directory)) - :preselect helm-locate-db-file-regexp - :test (lambda (x) - (if helm-locate-db-file-regexp - ;; Select only locate db files and directories - ;; to allow navigation. - (or (string-match - helm-locate-db-file-regexp x) - (file-directory-p x)) - x))))))) - (when (and locdb (or (equal localdb '(16)) - (not (file-exists-p locdb)))) - (funcall pfn locdb)) - (helm-locate-with-db (and localdb locdb) init default))) - -(defun helm-locate-set-command () - "Setup `helm-locate-command' if not already defined." - (unless helm-locate-command - (setq helm-locate-command - (cl-case system-type - (gnu/linux "locate %s -e -r %s") - (berkeley-unix "locate %s %s") - (windows-nt "es %s %s") - (t "locate %s %s"))))) - -(defvar helm-file-name-history nil) -(defun helm-locate-with-db (&optional db initial-input default) - "Run locate -d DB. -If DB is not given or nil use locate without -d option. -Argument DB can be given as a string or list of db files. -Argument INITIAL-INPUT is a string to use as initial-input. -See also `helm-locate'." - (require 'helm-files) - (when (and db (stringp db)) (setq db (list db))) - (helm-locate-set-command) - (let ((helm-locate-command - (if db - (replace-regexp-in-string - "locate" - (format "locate -d %s" - (mapconcat 'identity - ;; Remove eventually - ;; marked directories by error. - (cl-loop for i in db - unless (file-directory-p i) - collect i) ":")) - helm-locate-command) - helm-locate-command))) - (setq helm-file-name-history (mapcar 'helm-basename file-name-history)) - (helm :sources 'helm-source-locate - :buffer "*helm locate*" - :ff-transformer-show-only-basename nil - :input initial-input - :default default - :history 'helm-file-name-history))) - -(defun helm-locate-init () - "Initialize async locate process for `helm-source-locate'." - (let* ((locate-is-es (string-match "\\`es" helm-locate-command)) - (real-locate (string-match "\\`locate" helm-locate-command)) - (case-sensitive-flag (if locate-is-es "-i" "")) - (ignore-case-flag (if (or locate-is-es - (not real-locate)) "" "-i")) - (args (split-string helm-pattern " ")) - (cmd (format helm-locate-command - (cl-case helm-locate-case-fold-search - (smart (let ((case-fold-search nil)) - (if (string-match "[[:upper:]]" helm-pattern) - case-sensitive-flag - ignore-case-flag))) - (t (if helm-locate-case-fold-search - ignore-case-flag - case-sensitive-flag))) - (concat - ;; The pattern itself. - (shell-quote-argument (car args)) " " - ;; Possible locate args added - ;; after pattern, don't quote them. - (mapconcat 'identity (cdr args) " "))))) - (helm-log "Starting helm-locate process") - (helm-log "Command line used was:\n\n%s" - (concat ">>> " (propertize cmd 'face 'font-lock-comment-face) "\n\n")) - (prog1 - (start-process-shell-command - "locate-process" helm-buffer - cmd) - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (_process event) - (if (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Locate process finished - (%s results)]" - (max (1- (count-lines - (point-min) (point-max))) - 0)) - 'face 'helm-locate-finish)))) - (force-mode-line-update)) - (helm-log "Error: Locate %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defclass helm-locate-source (helm-source-async helm-type-file) - ((init :initform 'helm-locate-set-command) - (candidates-process :initform 'helm-locate-init) - (requires-pattern :initform 3) - (history :initform 'helm-file-name-history) - (keymap :initform helm-generic-files-map) - (persistent-action :initform 'helm-ff-kill-or-find-buffer-fname) - (help-message :initform 'helm-generic-file-help-message) - (candidate-number-limit :initform 9999))) - -(defvar helm-source-locate - (helm-make-source "Locate" 'helm-locate-source - :pattern-transformer 'helm-locate-pattern-transformer)) - -(defun helm-locate-pattern-transformer (pattern) - (if helm-locate-fuzzy-match - (cond ((string-match - " " (replace-regexp-in-string " -b" "" pattern)) pattern) - ((string-match "\\([^ ]*\\) -b" pattern) - (concat (helm--mapconcat-pattern - (match-string 1 pattern)) " -b")) - (t (helm--mapconcat-pattern pattern))) - pattern)) - -(defun helm-locate-find-dbs-in-projects (&optional update) - (let* ((pfn (lambda (candidate directory) - (unless (= (shell-command - (funcall helm-locate-create-db-function - candidate - directory)) - 0) - (error "Failed to create locatedb file `%s'" candidate))))) - (cl-loop for p in helm-locate-project-list - for db = (expand-file-name - helm-ff-locate-db-filename - (file-name-as-directory p)) - if (and (null update) (file-exists-p db)) - collect db - else do (funcall pfn db p) - and collect db))) - -;;;###autoload -(defun helm-projects-find-files (update) - "Find files with locate in `helm-locate-project-list'. -With a prefix arg refresh the database in each project." - (interactive "P") - (helm-locate-set-command) - (cl-assert (and (string-match-p "\\`locate" helm-locate-command) - (executable-find "updatedb")) - nil "Unsupported locate version") - (let ((dbs (helm-locate-find-dbs-in-projects update))) - (if dbs - (helm-locate-with-db dbs) - (user-error "No projects found, please setup `helm-locate-project-list'")))) - -;;;###autoload -(defun helm-locate-read-file-name (prompt) - (let* ((src `((name . "Locate read fname") - (init . helm-locate-set-command) - (candidates-process . helm-locate-init) - (action . identity) - (requires-pattern . 3) - (history . ,'helm-file-name-history) - (candidate-transformer . (helm-skip-boring-files - helm-highlight-files)) - (candidate-number-limit . 9999) - (no-matchplugin)))) - (or (helm :sources src - :ff-transformer-show-only-basename nil - :prompt prompt - :buffer "*helm locate read fname*" - :resume 'noresume) - (keyboard-quit)))) - -;;;###autoload -(defun helm-locate (arg) - "Preconfigured `helm' for Locate. -Note: you can add locate options after entering pattern. -See 'man locate' for valid options and also `helm-locate-command'. - -You can specify a local database with prefix argument ARG. -With two prefix arg, refresh the current local db or create it -if it doesn't exists. - -To create a user specific db, use -\"updatedb -l 0 -o db_path -U directory\". -Where db_path is a filename matched by -`helm-locate-db-file-regexp'." - (interactive "P") - (setq helm-ff-default-directory default-directory) - (helm-locate-1 arg nil nil (thing-at-point 'filename))) - -(provide 'helm-locate) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-locate.el ends here diff --git a/elpa/helm-20160105.2046/helm-man.el b/elpa/helm-20160105.2046/helm-man.el deleted file mode 100644 index 8ba57953..00000000 --- a/elpa/helm-20160105.2046/helm-man.el +++ /dev/null @@ -1,115 +0,0 @@ -;;; helm-man.el --- Man and woman UI -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) - -(defvar woman-topic-all-completions) -(defvar woman-manpath) -(defvar woman-path) -(defvar woman-expanded-directory-path) -(declare-function woman-file-name "woman.el" (topic &optional re-cache)) -(declare-function woman-file-name-all-completions "woman.el" (topic)) -(declare-function Man-getpage-in-background "man.el" (topic)) -(declare-function woman-expand-directory-path "woman.el" (path-dirs path-regexps)) -(declare-function woman-topic-all-completions "woman.el" (path)) -(declare-function helm-generic-sort-fn "helm-utils.el" (S1 S2)) - -(defgroup helm-man nil - "Man and Woman applications for helm." - :group 'helm) - -(defcustom helm-man-or-woman-function 'Man-getpage-in-background - "Default command to display a man page." - :group 'helm-man - :type '(radio :tag "Preferred command to display a man page" - (const :tag "Man" Man-getpage-in-background) - (const :tag "Woman" woman))) - -(defcustom helm-man-format-switches "-l %s" - "Arguments to pass to the `manual-entry' function. -Arguments are passed to `manual-entry' with `format.' -Default use \"-l\" which may not be supported on old man versions, -in this case use \"%s\" as value to pass only the filename as argument. -See Issue #1035" - :group 'helm-man - :type 'string) - -;; Internal -(defvar helm-man--pages nil - "All man pages on system. -Will be calculated the first time you invoke helm with this -source.") - -(defun helm-man-default-action (candidate) - "Default action for jumping to a woman or man page from helm." - (let ((wfiles (mapcar - 'car (woman-file-name-all-completions candidate)))) - (condition-case nil - (if (> (length wfiles) 1) - (let ((file (helm-comp-read - "ManFile: " wfiles :must-match t))) - (if (eq helm-man-or-woman-function 'Man-getpage-in-background) - (manual-entry (format helm-man-format-switches file)) - (woman-find-file file))) - (funcall helm-man-or-woman-function candidate)) - ;; If woman is unable to format correctly - ;; use man instead. - (error (kill-buffer) ; Kill woman buffer. - (Man-getpage-in-background candidate))))) - -(defun helm-man--init () - (require 'woman) - (require 'helm-utils) - (unless helm-man--pages - (setq woman-expanded-directory-path - (woman-expand-directory-path woman-manpath woman-path)) - (setq woman-topic-all-completions - (woman-topic-all-completions woman-expanded-directory-path)) - (setq helm-man--pages (mapcar 'car woman-topic-all-completions))) - (helm-init-candidates-in-buffer 'global helm-man--pages)) - -(defvar helm-source-man-pages - (helm-build-in-buffer-source "Manual Pages" - :init #'helm-man--init - :persistent-action #'ignore - :filtered-candidate-transformer - (lambda (candidates _source) - (sort candidates #'helm-generic-sort-fn)) - :action '(("Display Man page" . helm-man-default-action)))) - -;;;###autoload -(defun helm-man-woman (arg) - "Preconfigured `helm' for Man and Woman pages. -With a prefix arg reinitialize the cache." - (interactive "P") - (when arg (setq helm-man--pages nil)) - (helm :sources 'helm-source-man-pages - :buffer "*Helm man woman*")) - -(provide 'helm-man) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-man.el ends here diff --git a/elpa/helm-20160105.2046/helm-misc.el b/elpa/helm-20160105.2046/helm-misc.el deleted file mode 100644 index b297a62e..00000000 --- a/elpa/helm-20160105.2046/helm-misc.el +++ /dev/null @@ -1,334 +0,0 @@ -;;; helm-misc.el --- Various functions for helm -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-types) - -(declare-function display-time-world-display "time.el") -(defvar display-time-world-list) - - -(defgroup helm-misc nil - "Various Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-time-zone-home-location "Paris" - "The time zone of your home" - :group 'helm-misc - :type 'string) - -(defcustom helm-timezone-actions - '(("Set timezone env (TZ)" . (lambda (candidate) - (setenv "TZ" candidate)))) - "Actions for helm-timezone." - :group 'helm-misc - :type '(alist :key-type string :value-type function)) - -(defcustom helm-mini-default-sources '(helm-source-buffers-list - helm-source-recentf - helm-source-buffer-not-found) - "Default sources list used in `helm-mini'." - :group 'helm-misc - :type '(repeat (choice symbol))) - -(defface helm-time-zone-current - '((t (:foreground "green"))) - "Face used to colorize current time in `helm-world-time'." - :group 'helm-misc) - -(defface helm-time-zone-home - '((t (:foreground "red"))) - "Face used to colorize home time in `helm-world-time'." - :group 'helm-misc) - - - -;;; Latex completion -(defvar LaTeX-math-menu) -(defun helm-latex-math-candidates () - "Collect candidates for latex math completion." - (cl-loop for i in (cddr LaTeX-math-menu) - for elm = (cl-loop for s in i when (vectorp s) - collect (cons (aref s 0) (aref s 1))) - append elm)) - -(defvar helm-source-latex-math - '((name . "Latex Math Menu") - (init . (lambda () - (with-helm-current-buffer - (LaTeX-math-mode 1)))) - (candidate-number-limit . 9999) - (candidates . helm-latex-math-candidates) - (action . (lambda (candidate) - (call-interactively candidate))))) - - -;;; Jabber Contacts (jabber.el) -(defun helm-jabber-online-contacts () - "List online Jabber contacts." - (with-no-warnings - (cl-loop for item in (jabber-concat-rosters) - when (get item 'connected) - collect - (if (get item 'name) - (cons (get item 'name) item) - (cons (symbol-name item) item))))) - -(defvar helm-source-jabber-contacts - '((name . "Jabber Contacts") - (init . (lambda () (require 'jabber))) - (candidates . (lambda () (mapcar 'car (helm-jabber-online-contacts)))) - (action . (lambda (x) - (jabber-chat-with - (jabber-read-account) - (symbol-name - (cdr (assoc x (helm-jabber-online-contacts))))))))) - -;;; World time -;; -(defun helm-time-zone-transformer (candidates _source) - (cl-loop for i in candidates - for (z . p) in display-time-world-list - collect - (cons - (cond ((string-match (format-time-string "%H:%M" (current-time)) i) - (propertize i 'face 'helm-time-zone-current)) - ((string-match helm-time-zone-home-location i) - (propertize i 'face 'helm-time-zone-home)) - (t i)) - z))) - -(defvar helm-source-time-world - (helm-build-in-buffer-source "Time World List" - :data (lambda () - (with-temp-buffer - (display-time-world-display display-time-world-list) - (buffer-string))) - :action 'helm-timezone-actions - :filtered-candidate-transformer 'helm-time-zone-transformer)) - -;;; LaCarte -;; -;; -(declare-function lacarte-get-overall-menu-item-alist "ext:lacarte.el" (&optional MAPS)) - -(defun helm-lacarte-candidate-transformer (cands) - (mapcar (lambda (cand) - (let* ((item (car cand)) - (match (string-match "[^>] \\((.*)\\)$" item))) - (when match - (put-text-property (match-beginning 1) (match-end 1) - 'face 'helm-M-x-key item)) - cand)) - cands)) - -(defclass helm-lacarte (helm-source-sync helm-type-command) - ((init :initform (lambda () (require 'lacarte))) - (candidates :initform 'helm-lacarte-get-candidates) - (candidate-transformer :initform 'helm-lacarte-candidate-transformer) - (candidate-number-limit :initform 9999))) - -(defun helm-lacarte-get-candidates (&optional maps) - "Extract candidates for menubar using lacarte.el. -See http://www.emacswiki.org/cgi-bin/wiki/download/lacarte.el. -Optional argument MAPS is a list specifying which keymaps to use: it -can contain the symbols `local', `global', and `minor', mean the -current local map, current global map, and all current minor maps." - (with-helm-current-buffer - ;; FIXME: do we still need to remove possible '(nil) candidates. - (lacarte-get-overall-menu-item-alist maps))) - -;;;###autoload -(defun helm-browse-menubar () - "Preconfigured helm to the menubar using lacarte.el." - (interactive) - (require 'lacarte) - (helm :sources (mapcar - (lambda (spec) (helm-make-source (car spec) 'helm-lacarte - :candidates (lambda () (helm-lacarte-get-candidates (cdr spec))))) - '(("Major Mode" . (local)) - ("Minor Modes" . (minor)) - ("Global Map" . (global)))) - :buffer "*helm lacarte*")) - -(defun helm-call-interactively (cmd-or-name) - "Execute CMD-OR-NAME as Emacs command. -It is added to `extended-command-history'. -`helm-current-prefix-arg' is used as the command's prefix argument." - (setq extended-command-history - (cons (helm-stringify cmd-or-name) - (delete (helm-stringify cmd-or-name) extended-command-history))) - (let ((current-prefix-arg helm-current-prefix-arg) - (cmd (helm-symbolify cmd-or-name))) - (if (stringp (symbol-function cmd)) - (execute-kbd-macro (symbol-function cmd)) - (setq this-command cmd) - (call-interactively cmd)))) - -;;; Minibuffer History -;; -;; -(defvar helm-source-minibuffer-history - (helm-build-sync-source "Minibuffer History" - :header-name (lambda (name) - (format "%s (%s)" name minibuffer-history-variable)) - :candidates - (lambda () - (let ((history (cl-loop for i in - (symbol-value minibuffer-history-variable) - unless (string= "" i) collect i))) - (if (consp (car history)) - (mapcar 'prin1-to-string history) - history))) - :migemo t - :multiline t - :action (lambda (candidate) - (delete-minibuffer-contents) - (insert candidate)))) - -;;; Shell history -;; -;; -(defun helm-comint-input-ring-action (candidate) - "Default action for comint history." - (with-helm-current-buffer - (delete-region (comint-line-beginning-position) (point-max)) - (insert candidate))) - -(defvar helm-source-comint-input-ring - '((name . "Comint history") - (candidates . (lambda () - (with-helm-current-buffer - (ring-elements comint-input-ring)))) - (action . helm-comint-input-ring-action)) - "Source that provide helm completion against `comint-input-ring'.") - - -;;; Helm ratpoison UI -;; -;; -(defvar helm-source-ratpoison-commands - '((name . "Ratpoison Commands") - (init . helm-ratpoison-commands-init) - (candidates-in-buffer) - (action ("Execute the command" . helm-ratpoison-commands-execute)) - (display-to-real . helm-ratpoison-commands-display-to-real) - (candidate-number-limit))) - -(defun helm-ratpoison-commands-init () - (unless (helm-candidate-buffer) - (with-current-buffer (helm-candidate-buffer 'global) - ;; with ratpoison prefix key - (save-excursion - (call-process "ratpoison" nil (current-buffer) nil "-c" "help")) - (while (re-search-forward "^\\([^ ]+\\) \\(.+\\)$" nil t) - (replace-match " \\1: \\2")) - (goto-char (point-max)) - ;; direct binding - (save-excursion - (call-process "ratpoison" nil (current-buffer) nil "-c" "help top")) - (while (re-search-forward "^\\([^ ]+\\) \\(.+\\)$" nil t) - (replace-match "\\1: \\2"))))) - -(defun helm-ratpoison-commands-display-to-real (display) - (and (string-match ": " display) - (substring display (match-end 0)))) - -(defun helm-ratpoison-commands-execute (candidate) - (call-process "ratpoison" nil nil nil "-ic" candidate)) - -;;; Helm stumpwm UI -;; -;; -(defvar helm-source-stumpwm-commands - '((name . "Stumpwm Commands") - (init . helm-stumpwm-commands-init) - (candidates-in-buffer) - (action ("Execute the command" . helm-stumpwm-commands-execute)) - (candidate-number-limit))) - -(defun helm-stumpwm-commands-init () - (with-current-buffer (helm-candidate-buffer 'global) - (save-excursion - (call-process "stumpish" nil (current-buffer) nil "commands")) - (while (re-search-forward "[ ]*\\([^ ]+\\)[ ]*\n?" nil t) - (replace-match "\n\\1\n")) - (delete-blank-lines) - (sort-lines nil (point-min) (point-max)) - (goto-char (point-max)))) - -(defun helm-stumpwm-commands-execute (candidate) - (call-process "stumpish" nil nil nil candidate)) - -;;;###autoload -(defun helm-world-time () - "Preconfigured `helm' to show world time. -Default action change TZ environment variable locally to emacs." - (interactive) - (helm-other-buffer 'helm-source-time-world "*helm world time*")) - -;;;###autoload -(defun helm-insert-latex-math () - "Preconfigured helm for latex math symbols completion." - (interactive) - (helm-other-buffer 'helm-source-latex-math "*helm latex*")) - -;;;###autoload -(defun helm-ratpoison-commands () - "Preconfigured `helm' to execute ratpoison commands." - (interactive) - (helm-other-buffer 'helm-source-ratpoison-commands - "*helm ratpoison commands*")) - -;;;###autoload -(defun helm-stumpwm-commands() - "Preconfigured helm for stumpwm commands." - (interactive) - (helm-other-buffer 'helm-source-stumpwm-commands - "*helm stumpwm commands*")) - -;;;###autoload -(defun helm-minibuffer-history () - "Preconfigured `helm' for `minibuffer-history'." - (interactive) - (let ((enable-recursive-minibuffers t)) - (helm :sources 'helm-source-minibuffer-history - :buffer "*helm minibuffer-history*"))) - -;;;###autoload -(defun helm-comint-input-ring () - "Preconfigured `helm' that provide completion of `comint' history." - (interactive) - (when (derived-mode-p 'comint-mode) - (helm :sources 'helm-source-comint-input-ring - :input (buffer-substring-no-properties (comint-line-beginning-position) - (point-at-eol)) - :buffer "*helm comint history*"))) - - -(provide 'helm-misc) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-misc.el ends here diff --git a/elpa/helm-20160105.2046/helm-mode.el b/elpa/helm-20160105.2046/helm-mode.el deleted file mode 100644 index d934bbe0..00000000 --- a/elpa/helm-20160105.2046/helm-mode.el +++ /dev/null @@ -1,1193 +0,0 @@ -;;; helm-mode.el --- Enable helm completion everywhere. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-files) - - -(defgroup helm-mode nil - "Enable helm completion." - :group 'helm) - -(defcustom helm-completing-read-handlers-alist - '((describe-function . helm-completing-read-symbols) - (describe-variable . helm-completing-read-symbols) - (describe-symbol . helm-completing-read-symbols) - (debug-on-entry . helm-completing-read-symbols) - (find-function . helm-completing-read-symbols) - (disassemble . helm-completing-read-symbols) - (trace-function . helm-completing-read-symbols) - (trace-function-foreground . helm-completing-read-symbols) - (trace-function-background . helm-completing-read-symbols) - (find-tag . helm-completing-read-with-cands-in-buffer) - (ffap-alternate-file . nil) - (tmm-menubar . nil)) - "Alist of handlers to replace `completing-read', `read-file-name' in `helm-mode'. -Each entry is a cons cell like \(emacs_command . completing-read_handler\) -where key and value are symbols. - -Each key is an Emacs command that use originaly `completing-read'. - -Each value maybe an helm function that take same arguments as -`completing-read' plus NAME and BUFFER, where NAME is the name of the new -helm source and BUFFER the name of the buffer we will use. -This function prefix name must start by \"helm\". - -See `helm-completing-read-symbols' for example. - -Note that this function will be reused for ALL the `completing-read' -of this command, so it should handle all cases, e.g -If first `completing-read' complete against symbols and -second `completing-read' should handle only buffer, -your specialized function should handle the both. - -If the value of an entry is nil completion will fall back to -emacs vanilla behavior. -e.g If you want to disable helm completion for `describe-function': -\(describe-function . nil\). - -Ido is also supported, you can use `ido-completing-read' and -`ido-read-file-name' as value of an entry or just 'ido. -e.g ido completion for `find-file': -\(find-file . ido\) -same as -\(find-file . ido-read-file-name\) -Note that you don't need to enable `ido-mode' for this to work." - :group 'helm-mode - :type '(alist :key-type symbol :value-type symbol)) - -(defcustom helm-comp-read-case-fold-search helm-case-fold-search - "Default Local setting of `helm-case-fold-search' for `helm-comp-read'. -See `helm-case-fold-search' for more info." - :group 'helm-mode - :type 'symbol) - -(defcustom helm-mode-handle-completion-in-region t - "Whether to replace or not `completion-in-region-function'. -This enable support for `completing-read-multiple' and `completion-at-point' -when non--nil." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-reverse-history t - "Display history source after current source in `helm-mode' handled commands." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-no-completion-in-region-in-modes nil - "A list of modes that do not want helm for `completion-in-region'." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-completion-in-region-fuzzy-match nil - "Whether `helm-completion-in-region' use fuzzy matching or not. -Affect among others `completion-at-point', `completing-read-multiple'." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-fuzzy-match nil - "Enable fuzzy matching in `helm-mode' globally. -Note that this will slow down completion and modify sorting -which is unwanted in many places. -This affect only the functions with completing-read helmized by helm-mode. -To fuzzy match `completion-at-point' and friends see -`helm-completion-in-region-fuzzy-match'." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-minibuffer-setup-hook-black-list '(minibuffer-completion-help) - "Incompatible `minibuffer-setup-hook' functions go here. -A list of symbols. -Helm-mode is rejecting all lambda's, byte-code fns -and all functions belonging in this list from `minibuffer-setup-hook'." - :group 'helm-mode - :type '(repeat (choice symbol))) - - -(defvar helm-comp-read-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-cr-empty-string) - (define-key map (kbd "") 'helm-cr-empty-string) - map) - "Keymap for `helm-comp-read'.") - -(defvar helm-comp-read-must-match-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") - 'helm-confirm-and-exit-minibuffer) - map) - "Keymap use as must-match-map in `helm-comp-read' and `helm-read-file-name'.") - - -;;; Internal -;; -;; -;; Flag to know if `helm-pattern' have been added -;; to candidate list in `helm-comp-read'. -(defvar helm-cr-unknown-pattern-flag nil) - - -;;; Helm `completing-read' replacement -;; -;; -(defun helm-cr-empty-string () - "Return empty string." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (_candidate) - (identity ""))))) - -(defun helm-mode--keyboard-quit () - ;; Use this instead of `keyboard-quit' - ;; to avoid deactivating mark in current-buffer. - (let ((debug-on-quit nil)) - (signal 'quit nil))) - -(defun helm-comp-read-get-candidates (collection &optional test sort-fn alistp) - "Convert COLLECTION to list removing elements that don't match TEST. -See `helm-comp-read' about supported COLLECTION arguments. - -SORT-FN is a predicate to sort COLLECTION. - -ALISTP when non--nil will not use `all-completions' to collect -candidates because it doesn't handle alists correctly for helm. -i.e In `all-completions' the car of each pair is used as value. -In helm we want to use the cdr instead like \(display . real\), -so we return the alist as it is with no transformation by all-completions. - -e.g - -\(setq A '((a . 1) (b . 2) (c . 3))) -==>((a . 1) (b . 2) (c . 3)) -\(helm-comp-read \"test: \" A :alistp nil - :exec-when-only-one t - :initial-input \"a\") -==>\"a\" Which is not what we expect. - -\(helm-comp-read \"test: \" A :alistp t - :exec-when-only-one t - :initial-input \"1\") -==>\"1\" - -See docstring of `all-completions' for more info. - -If COLLECTION is an `obarray', a TEST should be needed. See `obarray'." - ;; Ensure COLLECTION is computed from `helm-current-buffer' - ;; because some functions used as COLLECTION work - ;; only in the context of current-buffer (Issue #1030) . - (with-helm-current-buffer - (let ((cands - (cond ((vectorp collection) - (all-completions "" collection test)) - ((and (symbolp collection) (boundp collection) - ;; Issue #324 history is let-bounded and given - ;; quoted as hist argument of completing-read. - ;; See example in `rcirc-browse-url'. - (symbolp (symbol-value collection))) - nil) - ;; When collection is a symbol, most of the time - ;; it should be a symbol used as a minibuffer-history. - ;; The value of this symbol in this case return a list - ;; of string which maybe are converted later as symbol - ;; in special cases. - ;; we treat here commandp as a special case as it return t - ;; also with a string unless its last arg is provided. - ;; Also, the history collections generally collect their - ;; elements as string, so intern them to call predicate. - ((and (symbolp collection) (boundp collection) test) - (let ((predicate `(lambda (elm) - (condition-case err - (if (eq (quote ,test) 'commandp) - (funcall (quote ,test) (intern elm)) - (funcall (quote ,test) elm)) - (wrong-type-argument - (funcall (quote ,test) (intern elm))))))) - (all-completions "" (symbol-value collection) predicate))) - ((and (symbolp collection) (boundp collection)) - (all-completions "" (symbol-value collection))) - ;; Normally file completion should not be handled here, - ;; but special cases like `find-file-at-point' do it. - ;; Handle here specially such cases. - ((and (functionp collection) minibuffer-completing-file-name) - (cl-loop for f in (funcall collection helm-pattern test t) - unless (member f '("./" "../")) - if (string-match ffap-url-regexp helm-pattern) - collect f - else - collect (concat (file-name-as-directory - (helm-basedir helm-pattern)) f))) - ((functionp collection) - (funcall collection "" test t)) - ((and alistp test) - (cl-loop for i in collection when (funcall test i) collect i)) - (alistp collection) - (t (all-completions "" collection test))))) - (if sort-fn (sort cands sort-fn) cands)))) - -(defun helm-cr-default-transformer (candidates _source) - "Default filter candidate function for `helm-comp-read'." - (cl-loop for c in candidates - for cand = (if (stringp c) (replace-regexp-in-string "\\s\\" "" c) c) - for pat = (replace-regexp-in-string "\\s\\" "" helm-pattern) - if (and (equal cand pat) helm-cr-unknown-pattern-flag) - collect - (cons (concat (propertize - " " 'display - (propertize "[?]" 'face 'helm-ff-prefix)) - c) - c) - into lst - else collect (if (and (stringp c) - (string-match "\n" c)) - (cons (replace-regexp-in-string "\n" "->" c) c) - c) - into lst - finally return (helm-fast-remove-dups lst :test 'equal))) - -(defun helm-comp-read--move-to-first-real-candidate () - (helm-aif (helm-get-selection nil 'withprop) - (when (string= (get-text-property 0 'display it) "[?]") - (helm-next-line)))) - -;;;###autoload -(cl-defun helm-comp-read (prompt collection - &key - test - initial-input - default - preselect - (buffer "*Helm Completions*") - must-match - fuzzy - reverse-history - (requires-pattern 0) - history - input-history - (case-fold helm-comp-read-case-fold-search) - (del-input t) - (persistent-action nil) - (persistent-help "DoNothing") - (mode-line helm-comp-read-mode-line) - help-message - (keymap helm-comp-read-map) - (name "Helm Completions") - candidates-in-buffer - exec-when-only-one - quit-when-no-cand - (volatile t) - sort - (fc-transformer 'helm-cr-default-transformer) - hist-fc-transformer - marked-candidates - nomark - (alistp t) - (candidate-number-limit helm-candidate-number-limit)) - "Read a string in the minibuffer, with helm completion. - -It is helm `completing-read' equivalent. - -- PROMPT is the prompt name to use. - -- COLLECTION can be a list, vector, obarray or hash-table. - It can be also a function that receives three arguments: - the values string, predicate and t. See `all-completions' for more details. - -Keys description: - -- TEST: A predicate called with one arg i.e candidate. - -- INITIAL-INPUT: Same as input arg in `helm'. - -- PRESELECT: See preselect arg of `helm'. - -- DEFAULT: This option is used only for compatibility with regular - Emacs `completing-read' (Same as DEFAULT arg of `completing-read'). - -- BUFFER: Name of helm-buffer. - -- MUST-MATCH: Candidate selected must be one of COLLECTION. - -- FUZZY: Enable fuzzy matching. - -- REVERSE-HISTORY: When non--nil display history source after current - source completion. - -- REQUIRES-PATTERN: Same as helm attribute, default is 0. - -- HISTORY: A list containing specific history, default is nil. - When it is non--nil, all elements of HISTORY are displayed in - a special source before COLLECTION. - -- INPUT-HISTORY: A symbol. the minibuffer input history will be - stored there, if nil or not provided, `minibuffer-history' - will be used instead. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- DEL-INPUT: Boolean, when non--nil (default) remove the partial - minibuffer input from HISTORY is present. - -- PERSISTENT-ACTION: A function called with one arg i.e candidate. - -- PERSISTENT-HELP: A string to document PERSISTENT-ACTION. - -- MODE-LINE: A string or list to display in mode line. - Default is `helm-comp-read-mode-line'. - -- KEYMAP: A keymap to use in this `helm-comp-read'. - (the keymap will be shared with history source) - -- NAME: The name related to this local source. - -- EXEC-WHEN-ONLY-ONE: Bound `helm-execute-action-at-once-if-one' - to non--nil. (possibles values are t or nil). - -- VOLATILE: Use volatile attribute \(enabled by default\). - -- SORT: A predicate to give to `sort' e.g `string-lessp' - Use this only on small data as it is ineficient. - If you want to sort faster add a sort function to - FC-TRANSFORMER. - Note that FUZZY when enabled is already providing a sort function. - -- FC-TRANSFORMER: A `filtered-candidate-transformer' function - or a list of functions. - -- HIST-FC-TRANSFORMER: A `filtered-candidate-transformer' - function for the history source. - -- MARKED-CANDIDATES: If non--nil return candidate or marked candidates as a list. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: \(default is non--nil\) See `helm-comp-read-get-candidates'. - -- CANDIDATES-IN-BUFFER: when non--nil use a source build with - `helm-source-in-buffer' which is much faster. - Argument VOLATILE have no effect when CANDIDATES-IN-BUFFER is non--nil. - -Any prefix args passed during `helm-comp-read' invocation will be recorded -in `helm-current-prefix-arg', otherwise if prefix args were given before -`helm-comp-read' invocation, the value of `current-prefix-arg' will be used. -That's mean you can pass prefix args before or after calling a command -that use `helm-comp-read' See `helm-M-x' for example." - - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (let ((action-fn `(("Sole action (Identity)" - . (lambda (candidate) - (if ,marked-candidates - (helm-marked-candidates) - (identity candidate))))))) - ;; Assume completion have been already required, - ;; so always use 'confirm. - (when (eq must-match 'confirm-after-completion) - (setq must-match 'confirm)) - (let* ((minibuffer-completion-confirm must-match) - (must-match-map (when must-match helm-comp-read-must-match-map)) - (loc-map (if must-match-map - (make-composed-keymap - must-match-map (or keymap helm-map)) - (or keymap helm-map))) - (minibuffer-completion-predicate test) - (minibuffer-completion-table collection) - (helm-read-file-name-mode-line-string - (replace-regexp-in-string "helm-maybe-exit-minibuffer" - "helm-confirm-and-exit-minibuffer" - helm-read-file-name-mode-line-string)) - (get-candidates (lambda () - (let ((cands (helm-comp-read-get-candidates - collection test sort alistp))) - (setq helm-cr-unknown-pattern-flag nil) - (unless (or (eq must-match t) - (string= helm-pattern "") - (assoc helm-pattern cands) - (assoc (intern helm-pattern) cands) - (member helm-pattern cands) - (member (downcase helm-pattern) cands) - (member (upcase helm-pattern) cands)) - (setq cands (append (list - ;; Unquote helm-pattern - ;; when it is added - ;; as candidate. - (replace-regexp-in-string - "\\s\\" "" helm-pattern)) - cands)) - (setq helm-cr-unknown-pattern-flag t)) - ;; When DEFAULT is initially a list, candidates - ;; come already computed with DEFAULT list appended, - ;; and DEFAULT is set to the car of this list. - (if (and default (not (string= default ""))) - (delq nil (cons default (delete default cands))) - cands)))) - (history-get-candidates (lambda () - (let ((all (helm-comp-read-get-candidates - history test nil alistp))) - (when all - (delete - "" - (helm-fast-remove-dups - (if (and default (not (string= default ""))) - (delq nil (cons default - (delete default all))) - all) - :test 'equal)))))) - (src-hist (helm-build-sync-source (format "%s History" name) - :candidates history-get-candidates - :fuzzy-match fuzzy - :filtered-candidate-transformer - (append '((lambda (candidates sources) - (cl-loop for i in candidates - ;; Input is added to history in completing-read's - ;; and may be regexp-quoted, so unquote it. - for cand = (replace-regexp-in-string "\\s\\" "" i) - collect cand))) - (and hist-fc-transformer (helm-mklist hist-fc-transformer))) - :persistent-action persistent-action - :persistent-help persistent-help - :mode-line mode-line - :help-message help-message - :action action-fn)) - (src (helm-build-sync-source name - :candidates get-candidates - :filtered-candidate-transformer fc-transformer - :requires-pattern requires-pattern - :persistent-action persistent-action - :persistent-help persistent-help - :fuzzy-match fuzzy - :mode-line mode-line - :help-message help-message - :action action-fn)) - (src-1 (helm-build-in-buffer-source name - :data get-candidates - :filtered-candidate-transformer fc-transformer - :requires-pattern requires-pattern - :persistent-action persistent-action - :fuzzy-match fuzzy - :persistent-help persistent-help - :mode-line mode-line - :help-message help-message - :action action-fn)) - (src-list (list src-hist - (if candidates-in-buffer - src-1 - (if volatile - (append src '((volatile))) - src)))) - (helm-execute-action-at-once-if-one exec-when-only-one) - (helm-quit-if-no-candidate quit-when-no-cand) - result) - (when nomark - (setq src-list (cl-loop for src in src-list - collect (cons '(nomark) src)))) - (when reverse-history (setq src-list (nreverse src-list))) - (add-hook 'helm-after-update-hook 'helm-comp-read--move-to-first-real-candidate) - (unwind-protect - (setq result (helm - :sources src-list - :input initial-input - :default default - :preselect preselect - :prompt prompt - :resume 'noresume - :candidate-number-limit candidate-number-limit - :case-fold-search case-fold - :keymap loc-map - :history (and (symbolp input-history) input-history) - :buffer buffer)) - (remove-hook 'helm-after-update-hook 'helm-comp-read--move-to-first-real-candidate)) - ;; Avoid adding an incomplete input to history. - (when (and result history del-input) - (cond ((and (symbolp history) ; History is a symbol. - (not (symbolp (symbol-value history)))) ; Fix Issue #324. - ;; Be sure history is not a symbol with a nil value. - (helm-aif (symbol-value history) (setcar it result))) - ((consp history) ; A list with a non--nil value. - (setcar history result)) - (t ; Possibly a symbol with a nil value. - (set history (list result))))) - (or - result - (when (and (eq helm-exit-status 0) - (eq must-match 'confirm)) - ;; Return empty string only if it is the DEFAULT - ;; value and helm-pattern is empty. - ;; otherwise return helm-pattern - (if (and (string= helm-pattern "") default) - default (identity helm-pattern))) - (unless (or (eq helm-exit-status 1) - must-match) ; FIXME this should not be needed now. - default) - (helm-mode--keyboard-quit))))) - -;; Generic completing-read -;; -;; Support also function as collection. -;; e.g M-x man is supported. -;; Support hash-table and vectors as collection. -;; NOTE: -;; Some crap emacs functions may not be supported -;; like ffap-alternate-file (bad use of completing-read) -;; and maybe others. -;; Provide a mode `helm-mode' which turn on -;; helm in all `completing-read' and `read-file-name' in Emacs. -;; -(defvar helm-completion-mode-string " Helm") - -(defvar helm-completion-mode-quit-message - "Helm completion disabled") - -(defvar helm-completion-mode-start-message - "Helm completion enabled") - -;;; Specialized handlers -;; -;; -(defun helm-completing-read-symbols - (prompt _collection test _require-match init - hist default _inherit-input-method name buffer) - "Specialized function for fast symbols completion in `helm-mode'." - (require 'helm-elisp) - (or - (helm - :sources (helm-build-in-buffer-source name - :init (lambda () - (helm-apropos-init (lambda (x) - (and (funcall test x) - (not (keywordp x)))) - (or (car-safe default) default))) - :filtered-candidate-transformer 'helm-apropos-default-sort-fn - :fuzzy-match helm-mode-fuzzy-match - :persistent-action - (lambda (candidate) - (helm-lisp-completion-persistent-action - candidate name)) - :persistent-help (helm-lisp-completion-persistent-help)) - :prompt prompt - :buffer buffer - :input init - :history hist - :resume 'noresume - :default (or default "")) - (helm-mode--keyboard-quit))) - - -;;; Generic completing read -;; -;; -(defun helm-completing-read-default-1 - (prompt collection test require-match - init hist default _inherit-input-method - name buffer &optional cands-in-buffer exec-when-only-one) - "Call `helm-comp-read' with same args as `completing-read'. -Extra optional arg CANDS-IN-BUFFER mean use `candidates-in-buffer' -method which is faster. -It should be used when candidate list don't need to rebuild dynamically." - (let ((history (or (car-safe hist) hist)) - (alistp cands-in-buffer)) - (when (and default (listp default)) - ;; When DEFAULT is a list move the list on head of COLLECTION - ;; and set it to its car. #bugfix `grep-read-files'. - (setq collection - ;; COLLECTION is maybe a function or a table. - (append default - (helm-comp-read-get-candidates - collection test nil (listp collection)))) - ;; Ensure `all-completions' will not be used - ;; a second time to recompute COLLECTION [1]. - (setq alistp t) - (setq default (car default))) - (helm-comp-read - prompt collection - :test test - :history history - :reverse-history helm-mode-reverse-history - :input-history history - :must-match require-match - :alistp alistp ; Ensure `all-completions' is used when non-nil [1]. - :name name - :requires-pattern (if (and (string= default "") - (or (eq require-match 'confirm) - (eq require-match - 'confirm-after-completion))) - 1 0) - :candidates-in-buffer cands-in-buffer - :exec-when-only-one exec-when-only-one - :fuzzy helm-mode-fuzzy-match - :buffer buffer - ;; If DEF is not provided, fallback to empty string - ;; to avoid `thing-at-point' to be appended on top of list - :default (or default "") - ;; Fail with special characters (e.g in gnus "nnimap+gmail:") - ;; if regexp-quote is not used. - ;; when init is added to history, it will be unquoted by - ;; helm-comp-read. - :initial-input (helm-aif (pcase init - ((pred (stringp)) init) - ;; INIT is a cons cell. - (`(,l . ,_ll) l)) - (if minibuffer-completing-file-name it - (regexp-quote it)))))) - -(defun helm-completing-read-with-cands-in-buffer - (prompt collection test require-match - init hist default inherit-input-method - name buffer) - "Same as `helm-completing-read-default-1' but use candidates-in-buffer." - ;; Some commands like find-tag may use `read-file-name' from inside - ;; the calculation of collection. in this case it clash with - ;; candidates-in-buffer that reuse precedent data (files) which is wrong. - ;; So (re)calculate collection outside of main helm-session. - (let ((cands (all-completions "" collection))) - (helm-completing-read-default-1 prompt cands test require-match - init hist default inherit-input-method - name buffer t))) - -(cl-defun helm--completing-read-default - (prompt collection &optional - predicate require-match - initial-input hist def - inherit-input-method) - "An helm replacement of `completing-read'. -This function should be used only as a `completing-read-function'. - -Don't use it directly, use instead `helm-comp-read' in your programs. - -See documentation of `completing-read' and `all-completions' for details." - (let* ((current-command (or (helm-this-command) this-command)) - (str-command (helm-symbol-name current-command)) - (buf-name (format "*helm-mode-%s*" str-command)) - (entry (assq current-command - helm-completing-read-handlers-alist)) - (def-com (cdr-safe entry)) - (str-defcom (and def-com (helm-symbol-name def-com))) - (def-args (list prompt collection predicate require-match - initial-input hist def inherit-input-method)) - ;; Append the two extra args needed to set the buffer and source name - ;; in helm specialized functions. - (any-args (append def-args (list str-command buf-name))) - helm-completion-mode-start-message ; Be quiet - helm-completion-mode-quit-message - ;; Be sure this pesty *completion* buffer doesn't popup. - ;; Note: `minibuffer-with-setup-hook' may setup a lambda - ;; calling `minibuffer-completion-help' or other minibuffer - ;; functions we DONT WANT here, in these cases removing the hook - ;; (a symbol) have no effect. Issue #448. - ;; Because `minibuffer-completion-table' and - ;; `minibuffer-completion-predicate' are not bound - ;; anymore here, these functions should have no effect now, - ;; except in some rare cases like in `woman-file-name', - ;; so remove all incompatible functions - ;; from `minibuffer-setup-hook' (Issue #1205, #1240). - ;; otherwise helm have not the time to close its initial session. - (minibuffer-setup-hook - (cl-loop for h in minibuffer-setup-hook - unless (or (consp h) ; a lambda. - (byte-code-function-p h) - (memq h helm-mode-minibuffer-setup-hook-black-list)) - collect h)) - ;; Disable hack that could be used before `completing-read'. - ;; i.e (push ?\t unread-command-events). - unread-command-events) - (when (eq def-com 'ido) (setq def-com 'ido-completing-read)) - (unless (or (not entry) def-com) - ;; An entry in *read-handlers-alist exists but have - ;; a nil value, so we exit from here, disable `helm-mode' - ;; and run the command again with it original behavior. - ;; `helm-mode' will be restored on exit. - (cl-return-from helm--completing-read-default - (unwind-protect - (progn - (helm-mode -1) - (apply completing-read-function def-args)) - (helm-mode 1)))) - ;; If we use now `completing-read' we MUST turn off `helm-mode' - ;; to avoid infinite recursion and CRASH. It will be reenabled on exit. - (when (or (eq def-com 'completing-read) - ;; All specialized functions are prefixed by "helm" - (and (stringp str-defcom) - (not (string-match "^helm" str-defcom)))) - (helm-mode -1)) - (unwind-protect - (cond (;; An helm specialized function exists, run it. - (and def-com helm-mode) - (apply def-com any-args)) - (;; Try to handle `ido-completing-read' everywhere. - (and def-com (eq def-com 'ido-completing-read)) - (setcar (memq collection def-args) - (all-completions "" collection predicate)) - (apply def-com def-args)) - (;; User set explicitely `completing-read' or something similar - ;; in *read-handlers-alist, use this with exactly the same - ;; args as in `completing-read'. - ;; If we are here `helm-mode' is now disabled. - def-com - (apply def-com def-args)) - (t ; Fall back to classic `helm-comp-read'. - (helm-completing-read-default-1 - prompt collection predicate require-match - initial-input hist def inherit-input-method - str-command buf-name))) - (helm-mode 1) - ;; When exiting minibuffer, `this-command' is set to - ;; `helm-exit-minibuffer', which is unwanted when starting - ;; on another `completing-read', so restore `this-command' to - ;; initial value when exiting. - (setq this-command current-command)))) - -;;; Generic read-file-name -;; -;; -;;;###autoload -(cl-defun helm-read-file-name - (prompt - &key - (name "Read File Name") - (initial-input default-directory) - (buffer "*Helm file completions*") - test - (case-fold helm-file-name-case-fold-search) - preselect - history - must-match - default - marked-candidates - (candidate-number-limit helm-ff-candidate-number-limit) - nomark - (alistp t) - (persistent-action 'helm-find-files-persistent-action) - (persistent-help "Hit1 Expand Candidate, Hit2 or (C-u) Find file") - (mode-line helm-read-file-name-mode-line-string)) - "Read a file name with helm completion. -It is helm `read-file-name' emulation. - -Argument PROMPT is the default prompt to use. - -Keys description: - -- NAME: Source name, default to \"Read File Name\". - -- INITIAL-INPUT: Where to start read file name, default to `default-directory'. - -- BUFFER: `helm-buffer' name default to \"*Helm Completions*\". - -- TEST: A predicate called with one arg 'candidate'. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- PRESELECT: helm preselection. - -- HISTORY: Display HISTORY in a special source. - -- MUST-MATCH: Can be 'confirm, nil, or t. - -- MARKED-CANDIDATES: When non--nil return a list of marked candidates. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: Don't use `all-completions' in history (take effect only on history). - -- PERSISTENT-ACTION: a persistent action function. - -- PERSISTENT-HELP: persistent help message. - -- MODE-LINE: A mode line message, default is `helm-read-file-name-mode-line-string'." - - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - ;; Assume completion have been already required, - ;; so always use 'confirm. - (when (eq must-match 'confirm-after-completion) - (setq must-match 'confirm)) - (let* ((action-fn `(("Sole action (Identity)" - . (lambda (candidate) - (if ,marked-candidates - (helm-marked-candidates :with-wildcard t) - (identity candidate)))))) - ;; Be sure we don't erase the underlying minibuffer if some. - (helm-ff-auto-update-initial-value - (and helm-ff-auto-update-initial-value - (not (minibuffer-window-active-p (minibuffer-window))))) - helm-full-frame - (hist (and history (helm-comp-read-get-candidates - history nil nil alistp))) - (minibuffer-completion-confirm must-match) - (must-match-map (when must-match helm-comp-read-must-match-map)) - (cmap (if must-match-map - (make-composed-keymap - must-match-map helm-read-file-map) - helm-read-file-map)) - (minibuffer-completion-predicate test) - (minibuffer-completing-file-name t) - (helm-read-file-name-mode-line-string - (replace-regexp-in-string "helm-maybe-exit-minibuffer" - "helm-confirm-and-exit-minibuffer" - helm-read-file-name-mode-line-string)) - (src-list - (list - ;; History source. - (helm-build-sync-source (format "%s History" name) - :header-name (lambda (name) - (concat name (substitute-command-keys - helm-find-files-doc-header))) - :mode-line mode-line - :candidates hist - :nohighlight t - :persistent-action persistent-action - :persistent-help persistent-help - :nomark nomark - :action action-fn) - ;; Other source. - (helm-build-sync-source name - :header-name (lambda (name) - (concat name (substitute-command-keys - helm-find-files-doc-header))) - :init (lambda () - (setq helm-ff-auto-update-flag - helm-ff-auto-update-initial-value) - (setq helm-ff--auto-update-state - helm-ff-auto-update-flag)) - :mode-line mode-line - :help-message 'helm-read-file-name-help-message - :nohighlight t - :candidates - (lambda () - (append (and (not (file-exists-p helm-pattern)) - (list helm-pattern)) - (if test - (cl-loop with hn = (helm-ff-tramp-hostnames) - for i in (helm-find-files-get-candidates - must-match) - when (or (member i hn) ; A tramp host - (funcall test i)) ; Test ok - collect i) - (helm-find-files-get-candidates must-match)))) - :filtered-candidate-transformer 'helm-ff-sort-candidates - :filter-one-by-one 'helm-ff-filter-candidate-one-by-one - :persistent-action persistent-action - :persistent-help persistent-help - :volatile t - :nomark nomark - :action action-fn))) - ;; Helm result. - (result (helm - :sources src-list - :input (expand-file-name initial-input) - :prompt prompt - :keymap cmap - :candidate-number-limit candidate-number-limit - :resume 'noresume - :case-fold-search case-fold - :default default - :buffer buffer - :preselect preselect))) - (or - (cond ((and result (stringp result) - (string= result "") "")) - ((and result - (stringp result) - (file-equal-p result initial-input) - default) - (if (listp default) (car default) default)) - ((and result (stringp result)) - (expand-file-name result)) - ((and result (listp result)) - (mapcar #'expand-file-name result)) - (t result)) - (when (and (not (string= helm-pattern "")) - (eq helm-exit-status 0) - (eq must-match 'confirm)) - (identity helm-pattern)) - (helm-mode--keyboard-quit)))) - -(defun helm-mode--default-filename (fname dir initial) - (unless dir (setq dir default-directory)) - (unless (file-name-absolute-p dir) - (setq dir (expand-file-name dir))) - (unless (or fname (consp fname)) - (setq fname (expand-file-name - (or initial buffer-file-name dir) - dir))) - (if (and fname (consp fname)) - (setq fname (cl-loop for f in fname - collect (expand-file-name f dir))) - (if (file-name-absolute-p fname) - fname (expand-file-name fname dir)))) - -(cl-defun helm--generic-read-file-name - (prompt &optional dir default-filename mustmatch initial predicate) - "Generic helm replacement of `read-file-name'. -Don't use it directly, use instead `helm-read-file-name' in your programs." - (let* ((init (or initial dir default-directory)) - (current-command (or (helm-this-command) this-command)) - (str-command (helm-symbol-name current-command)) - (helm--file-completion-sources - (cons str-command - (remove str-command helm--file-completion-sources))) - (buf-name (format "*helm-mode-%s*" str-command)) - (entry (assq current-command - helm-completing-read-handlers-alist)) - (def-com (cdr-safe entry)) - (str-defcom (and def-com (helm-symbol-name def-com))) - (def-args (list prompt dir default-filename mustmatch initial predicate)) - ;; Append the two extra args needed to set the buffer and source name - ;; in helm specialized functions. - (any-args (append def-args (list str-command buf-name))) - (ido-state ido-mode) - helm-completion-mode-start-message ; Be quiet - helm-completion-mode-quit-message ; Same here - fname) - (setq default-filename (helm-mode--default-filename - default-filename dir initial)) - ;; Some functions that normally call `completing-read' can switch - ;; brutally to `read-file-name' (e.g find-tag), in this case - ;; the helm specialized function will fail because it is build - ;; for `completing-read', so set it to 'incompatible to be sure - ;; we switch to `helm-read-file-name' and don't try to call it - ;; with wrong number of args. - (when (eq def-com 'ido) - (setq def-com 'ido-read-file-name) (ido-mode 1)) - (when (and def-com (> (length (help-function-arglist def-com)) 8)) - (setq def-com 'incompatible)) - (unless (or (not entry) def-com) - (cl-return-from helm--generic-read-file-name - (unwind-protect - (progn - (helm-mode -1) - (apply read-file-name-function def-args)) - (helm-mode 1)))) - ;; If we use now `read-file-name' we MUST turn off `helm-mode' - ;; to avoid infinite recursion and CRASH. It will be reenabled on exit. - (when (or (eq def-com 'read-file-name) - (eq def-com 'ido-read-file-name) - (and (stringp str-defcom) - (not (string-match "^helm" str-defcom)))) - (helm-mode -1)) - (unwind-protect - (setq fname - (cond (;; A specialized function exists, run it - ;; with the two extra args specific to helm.. - (and def-com helm-mode - (not (eq def-com 'ido-read-file-name)) - (not (eq def-com 'incompatible))) - (apply def-com any-args)) - (;; Def-com value is `ido-read-file-name' - ;; run it with default args. - (and def-com (eq def-com 'ido-read-file-name)) - (ido-mode 1) - (apply def-com def-args)) - (;; Def-com value is `read-file-name' - ;; run it with default args. - (eq def-com 'read-file-name) - (apply def-com def-args)) - (t ; Fall back to classic `helm-read-file-name'. - (helm-read-file-name - prompt - :name str-command - :buffer buf-name - :default default-filename - :initial-input (expand-file-name init dir) - :alistp nil - :must-match mustmatch - :test predicate)))) - (helm-mode 1) - (ido-mode (if ido-state 1 -1)) - ;; Same comment as in `helm--completing-read-default'. - (setq this-command current-command)) - (if (eq predicate 'file-directory-p) ; Using `read-directory-name'. - (file-name-as-directory fname) fname))) - -(defun helm-mode--advice-lisp--local-variables (old--fn &rest args) - (ignore-errors - (apply old--fn args))) - -(defun helm--completion-in-region (start end collection &optional predicate) - "Helm replacement of `completion--in-region'. -Can be used as value for `completion-in-region-function'." - (cl-declare (special require-match prompt)) - (if (memq major-mode helm-mode-no-completion-in-region-in-modes) - (funcall helm--old-completion-in-region-function - start end collection predicate) - (advice-add - 'lisp--local-variables - :around #'helm-mode--advice-lisp--local-variables) - (unwind-protect - (let* ((enable-recursive-minibuffers t) - (input (buffer-substring-no-properties start end)) - (current-command (or (helm-this-command) this-command)) - (str-command (helm-symbol-name current-command)) - (buf-name (format "*helm-mode-%s*" str-command)) - (require-match (or (and (boundp 'require-match) require-match) - minibuffer-completion-confirm - ;; If prompt have not been propagated here, that's - ;; probably mean we have no prompt and we are in - ;; completion-at-point or friend, so use a non--nil - ;; value for require-match. - (not (boundp 'prompt)))) - ;; `completion-extra-properties' is let-bounded in `completion-at-point'. - ;; `afun' is a closure to call against each string in `data'. - ;; it provide the annotation info for each string. - ;; e.g "foo" => "foo " where foo is a function. - ;; See Issue #407. - (afun (plist-get completion-extra-properties :annotation-function)) - (data (all-completions input collection predicate)) - (init-space-suffix (unless (or helm-completion-in-region-fuzzy-match - (string-suffix-p " " input)) - " ")) - ;; Assume that when `afun' and `predicate' are null - ;; we are in filename completion. - (file-comp-p (or (helm-mode--in-file-completion-p) - (and (null afun) (null predicate)))) - ;; Completion-at-point and friends have no prompt. - (result (if (stringp data) - data - (helm-comp-read - (or (and (boundp 'prompt) prompt) "Pattern: ") - (if file-comp-p - (cl-loop for f in data unless - (string-match "\\`\\.\\{1,2\\}/\\'" f) - collect f) - (if afun - (mapcar (lambda (s) - (let ((ann (funcall afun s))) - (if ann - (cons - (concat - s - (propertize - " " 'display - (propertize - ann - 'face 'completions-annotations))) - s) - s))) - data) - data)) - :name str-command - :fuzzy helm-completion-in-region-fuzzy-match - :nomark t - :initial-input - (cond ((and file-comp-p - (not (string-match "/\\'" input))) - (concat (helm-basename input) - (unless (string= input "") - init-space-suffix))) - ((string-match "/\\'" input) nil) - ((or (null require-match) - (stringp require-match)) - input) - (t (concat input init-space-suffix))) - :buffer buf-name - :fc-transformer (append (list 'helm-cr-default-transformer) - (list (lambda (candidates _source) - (sort candidates 'helm-generic-sort-fn)))) - :exec-when-only-one t - :quit-when-no-cand - (lambda () - ;; Delay message to overwrite "Quit". - (run-with-timer - 0.01 nil - (lambda () - (message "[No matches]"))) - t) ; exit minibuffer immediately. - :must-match require-match)))) - (when result - (delete-region (if (and file-comp-p - (save-excursion - (re-search-backward "~?/" start t))) - (match-end 0) start) - end) - (insert result))) - (advice-remove 'lisp--local-variables - #'helm-mode--advice-lisp--local-variables)))) - -(defun helm-mode--in-file-completion-p () - (with-helm-current-buffer - (run-hook-with-args-until-success 'file-name-at-point-functions))) - -(when (boundp 'completion-in-region-function) - (defconst helm--old-completion-in-region-function completion-in-region-function)) - -;;;###autoload -(define-minor-mode helm-mode - "Toggle generic helm completion. - -All functions in Emacs that use `completing-read' -or `read-file-name' and friends will use helm interface -when this mode is turned on. -However you can modify this behavior for functions of your choice -with `helm-completing-read-handlers-alist'. - -Called with a positive arg, turn on unconditionally, with a -negative arg turn off. -You can turn it on with `helm-mode'. - -Some crap emacs functions may not be supported, -e.g `ffap-alternate-file' and maybe others -You can add such functions to `helm-completing-read-handlers-alist' -with a nil value. - -Note: This mode is incompatible with Emacs23." - :group 'helm-mode - :global t - :lighter helm-completion-mode-string - (cl-assert (boundp 'completing-read-function) nil - "`helm-mode' not available, upgrade to Emacs-24") - (if helm-mode - (if (fboundp 'add-function) - (progn - (add-function :override completing-read-function - #'helm--completing-read-default) - (add-function :override read-file-name-function - #'helm--generic-read-file-name) - (when helm-mode-handle-completion-in-region - (add-function :override completion-in-region-function - #'helm--completion-in-region))) - (setq completing-read-function 'helm--completing-read-default - read-file-name-function 'helm--generic-read-file-name) - (when (and (boundp 'completion-in-region-function) - helm-mode-handle-completion-in-region) - (setq completion-in-region-function #'helm--completion-in-region)) - (message helm-completion-mode-start-message)) - (if (fboundp 'remove-function) - (progn - (remove-function completing-read-function #'helm--completing-read-default) - (remove-function read-file-name-function #'helm--generic-read-file-name) - (remove-function completion-in-region-function #'helm--completion-in-region)) - (setq completing-read-function (and (fboundp 'completing-read-default) - 'completing-read-default) - read-file-name-function (and (fboundp 'read-file-name-default) - 'read-file-name-default)) - (when (and (boundp 'completion-in-region-function) - (boundp 'helm--old-completion-in-region-function)) - (setq completion-in-region-function helm--old-completion-in-region-function)) - (message helm-completion-mode-quit-message)))) - -(provide 'helm-mode) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-mode.el ends here diff --git a/elpa/helm-20160105.2046/helm-multi-match.el b/elpa/helm-20160105.2046/helm-multi-match.el deleted file mode 100644 index 3e740da2..00000000 --- a/elpa/helm-20160105.2046/helm-multi-match.el +++ /dev/null @@ -1,373 +0,0 @@ -;;; helm-multi-match.el --- Multiple regexp matching methods for helm -*- lexical-binding: t -*- - -;; Original Author: rubikitch - -;; Copyright (C) 2008 ~ 2011 rubikitch -;; Copyright (C) 2011 ~ 2015 Thierry Volpiatto - -;; Author: Thierry Volpiatto -;; URL: http://github.com/emacs-helm/helm - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm-lib) - - -(defgroup helm-multi-match nil - "Helm multi match." - :group 'helm) - -(defcustom helm-mm-matching-method 'multi3 - "Matching method for helm match plugin. -You can set here different methods to match candidates in helm. -Here are the possible value of this symbol and their meaning: -- multi1: Respect order, prefix of pattern must match. -- multi2: Same but with partial match. -- multi3: The best, multiple regexp match, allow negation. -- multi3p: Same but prefix must match. - -Default is multi3, you should keep this for a better experience. - -Note that multi1 and multi3p are incompatible with fuzzy matching -in file completion and by the way fuzzy matching will be disabled there -when these options are used." - :type '(radio :tag "Matching methods for helm" - (const :tag "Multiple regexp 1 ordered with prefix match" multi1) - (const :tag "Multiple regexp 2 ordered with partial match" multi2) - (const :tag "Multiple regexp 3 matching no order, partial, best." multi3) - (const :tag "Multiple regexp 3p matching with prefix match" multi3p)) - :group 'helm-multi-match) - - -;; Internal -(defconst helm-mm-default-match-functions - '(helm-mm-exact-match helm-mm-match)) -(defconst helm-mm-default-search-functions - '(helm-mm-exact-search helm-mm-search)) - - -;;; Build regexps -;; -;; -(defvar helm-mm-space-regexp "[\\ ] " - "Regexp to represent space itself in multiple regexp match.") - -(defun helm-mm-split-pattern (pattern) - "Split PATTERN if it contain spaces and return resulting list. -If spaces in PATTERN are escaped, don't split at this place. -i.e \"foo bar\"=> (\"foo\" \"bar\") -but \"foo\ bar\"=> (\"foobar\")." - (if (string= pattern "") - '("") - (cl-loop for s in (split-string - (replace-regexp-in-string helm-mm-space-regexp - "\000\000" pattern) - " " t) - collect (replace-regexp-in-string "\000\000" " " s)))) - -(defun helm-mm-1-make-regexp (pattern) - "Replace spaces in PATTERN with \"\.*\"." - (mapconcat 'identity (helm-mm-split-pattern pattern) ".*")) - - -;;; Exact match. -;; -;; -;; Internal. -(defvar helm-mm-exact-pattern-str nil) -(defvar helm-mm-exact-pattern-real nil) - -(defun helm-mm-exact-get-pattern (pattern) - (unless (equal pattern helm-mm-exact-pattern-str) - (setq helm-mm-exact-pattern-str pattern - helm-mm-exact-pattern-real (concat "\n" pattern "\n"))) - helm-mm-exact-pattern-real) - - -(cl-defun helm-mm-exact-match (str &optional (pattern helm-pattern)) - (if case-fold-search - (progn - (setq str (downcase str) - pattern (downcase pattern)) - (string= str pattern)) - (string= str pattern))) - -(defun helm-mm-exact-search (pattern &rest _ignore) - (and (search-forward (helm-mm-exact-get-pattern pattern) nil t) - (forward-line -1))) - - -;;; Prefix match -;; -;; -;; Internal -(defvar helm-mm-prefix-pattern-str nil) -(defvar helm-mm-prefix-pattern-real nil) - -(defun helm-mm-prefix-get-pattern (pattern) - (unless (equal pattern helm-mm-prefix-pattern-str) - (setq helm-mm-prefix-pattern-str pattern - helm-mm-prefix-pattern-real (concat "\n" pattern))) - helm-mm-prefix-pattern-real) - -(defun helm-mm-prefix-match (str &optional pattern) - ;; In filename completion basename and basedir may be - ;; quoted, unquote them for string comparison (Issue #1283). - (setq pattern (replace-regexp-in-string - "\\\\" "" (or pattern helm-pattern))) - (let ((len (length pattern))) - (and (<= len (length str)) - (string= (substring str 0 len) pattern )))) - -(defun helm-mm-prefix-search (pattern &rest _ignore) - (search-forward (helm-mm-prefix-get-pattern pattern) nil t)) - - -;;; Multiple regexp patterns 1 (order is preserved / prefix). -;; -;; -;; Internal -(defvar helm-mm-1-pattern-str nil) -(defvar helm-mm-1-pattern-real nil) - -(defun helm-mm-1-get-pattern (pattern) - (unless (equal pattern helm-mm-1-pattern-str) - (setq helm-mm-1-pattern-str pattern - helm-mm-1-pattern-real - (concat "^" (helm-mm-1-make-regexp pattern)))) - helm-mm-1-pattern-real) - -(cl-defun helm-mm-1-match (str &optional (pattern helm-pattern)) - (string-match (helm-mm-1-get-pattern pattern) str)) - -(defun helm-mm-1-search (pattern &rest _ignore) - (re-search-forward (helm-mm-1-get-pattern pattern) nil t)) - - -;;; Multiple regexp patterns 2 (order is preserved / partial). -;; -;; -;; Internal -(defvar helm-mm-2-pattern-str nil) -(defvar helm-mm-2-pattern-real nil) - -(defun helm-mm-2-get-pattern (pattern) - (unless (equal pattern helm-mm-2-pattern-str) - (setq helm-mm-2-pattern-str pattern - helm-mm-2-pattern-real - (concat "^.*" (helm-mm-1-make-regexp pattern)))) - helm-mm-2-pattern-real) - -(cl-defun helm-mm-2-match (str &optional (pattern helm-pattern)) - (string-match (helm-mm-2-get-pattern pattern) str)) - -(defun helm-mm-2-search (pattern &rest _ignore) - (re-search-forward (helm-mm-2-get-pattern pattern) nil t)) - - -;;; Multiple regexp patterns 3 (permutation). -;; -;; -;; Internal -(defvar helm-mm-3-pattern-str nil) -(defvar helm-mm-3-pattern-list nil) - -(defun helm-mm-3-get-patterns (pattern) - "Return `helm-mm-3-pattern-list', a list of predicate/regexp cons cells. -e.g ((identity . \"foo\") (identity . \"bar\")). -This is done only if `helm-mm-3-pattern-str' is same as PATTERN." - (unless (equal pattern helm-mm-3-pattern-str) - (setq helm-mm-3-pattern-str pattern - helm-mm-3-pattern-list - (helm-mm-3-get-patterns-internal pattern))) - helm-mm-3-pattern-list) - -(defun helm-mm-3-get-patterns-internal (pattern) - "Return a list of predicate/regexp cons cells. -e.g ((identity . \"foo\") (identity . \"bar\"))." - (unless (string= pattern "") - (cl-loop for pat in (helm-mm-split-pattern pattern) - collect (if (string= "!" (substring pat 0 1)) - (cons 'not (substring pat 1)) - (cons 'identity pat))))) - -(cl-defun helm-mm-3-match (str &optional (pattern helm-pattern)) - "Check if PATTERN match STR. -When PATTERN contain a space, it is splitted and matching is done -with the several resulting regexps against STR. -e.g \"bar foo\" will match \"foobar\" and \"barfoo\". -Argument PATTERN, a string, is transformed in a list of -cons cell with `helm-mm-3-get-patterns' if it contain a space. -e.g \"foo bar\"=>((identity . \"foo\") (identity . \"bar\")). -Then each predicate of cons cell(s) is called with regexp of same -cons cell against STR (a candidate). -i.e (identity (string-match \"foo\" \"foo bar\")) => t." - (let ((pat (helm-mm-3-get-patterns pattern))) - (cl-loop for (predicate . regexp) in pat - always (funcall predicate - (condition-case _err - ;; FIXME: Probably do nothing when - ;; using fuzzy leaving the job - ;; to the fuzzy fn. - (string-match regexp str) - (invalid-regexp nil)))))) - -(defun helm-mm-3-search-base (pattern searchfn1 searchfn2) - "Try to find PATTERN in `helm-buffer' with SEARCHFN1 and SEARCHFN2. -This is the search function for `candidates-in-buffer' enabled sources. -Use the same method as `helm-mm-3-match' except it search in buffer -instead of matching on a string. -i.e (identity (re-search-forward \"foo\" (point-at-eol) t)) => t." - (cl-loop with pat = (if (stringp pattern) - (helm-mm-3-get-patterns pattern) - pattern) - when (eq (caar pat) 'not) return - ;; Pass the job to `helm-search-match-part'. - (prog1 (list (point-at-bol) (point-at-eol)) - (forward-line 1)) - while (condition-case _err - (funcall searchfn1 (or (cdar pat) "") nil t) - (invalid-regexp nil)) - for bol = (point-at-bol) - for eol = (point-at-eol) - if (cl-loop for (pred . str) in (cdr pat) always - (progn (goto-char bol) - (funcall pred (condition-case _err - (funcall searchfn2 str eol t) - (invalid-regexp nil))))) - do (goto-char eol) and return t - else do (goto-char eol) - finally return nil)) - -(defun helm-mm-3-search (pattern &rest _ignore) - (when (stringp pattern) - (setq pattern (helm-mm-3-get-patterns pattern))) - (helm-mm-3-search-base - pattern 're-search-forward 're-search-forward)) - -;;; mp-3 with migemo -;; -;; -(defvar helm-mm--previous-migemo-info nil - "[Internal] Cache previous migemo query.") -(make-local-variable 'helm-mm--previous-migemo-info) - -(declare-function migemo-get-pattern "ext:migemo.el") -(declare-function migemo-search-pattern-get "ext:migemo.el") - -(define-minor-mode helm-migemo-mode - "Enable migemo in helm. -It will be available in the sources handling it, -i.e the sources which have the slot :migemo with non--nil value." - :lighter " Hmio" - :group 'helm - :global t - (cl-assert (featurep 'migemo) - nil "No feature called migemo found, install migemo.el.")) - -(defun helm-mm-migemo-get-pattern (pattern) - (let ((regex (migemo-get-pattern pattern))) - (if (ignore-errors (string-match regex "") t) - (concat regex "\\|" pattern) pattern))) - -(defun helm-mm-migemo-search-pattern-get (pattern) - (let ((regex (migemo-search-pattern-get pattern))) - (if (ignore-errors (string-match regex "") t) - (concat regex "\\|" pattern) pattern))) - -(defun helm-mm-migemo-string-match (pattern str) - "Migemo version of `string-match'." - (unless (assoc pattern helm-mm--previous-migemo-info) - (with-helm-buffer - (setq helm-mm--previous-migemo-info - (push (cons pattern (helm-mm-migemo-get-pattern pattern)) - helm-mm--previous-migemo-info)))) - (string-match (assoc-default pattern helm-mm--previous-migemo-info) str)) - -(cl-defun helm-mm-3-migemo-match (str &optional (pattern helm-pattern)) - (and helm-migemo-mode - (cl-loop for (pred . re) in (helm-mm-3-get-patterns pattern) - always (funcall pred (helm-mm-migemo-string-match re str))))) - -(defun helm-mm-migemo-forward (word &optional bound noerror count) - (with-helm-buffer - (unless (assoc word helm-mm--previous-migemo-info) - (setq helm-mm--previous-migemo-info - (push (cons word (if (delq 'ascii (find-charset-string word)) - word - (helm-mm-migemo-search-pattern-get word))) - helm-mm--previous-migemo-info)))) - (re-search-forward - (assoc-default word helm-mm--previous-migemo-info) bound noerror count)) - -(defun helm-mm-3-migemo-search (pattern &rest _ignore) - (and helm-migemo-mode - (helm-mm-3-search-base - pattern 'helm-mm-migemo-forward 'helm-mm-migemo-forward))) - - -;;; mp-3p- (multiple regexp pattern 3 with prefix search) -;; -;; -(defun helm-mm-3p-match (str &optional pattern) - "Check if PATTERN match STR. -Same as `helm-mm-3-match' but more strict, matching against prefix also. -e.g \"bar foo\" will match \"barfoo\" but not \"foobar\" contrarily to -`helm-mm-3-match'." - (let* ((pat (helm-mm-3-get-patterns (or pattern helm-pattern))) - (first (car pat))) - (and (funcall (car first) (helm-mm-prefix-match str (cdr first))) - (cl-loop for (predicate . regexp) in (cdr pat) - always (funcall predicate (string-match regexp str)))))) - -(defun helm-mm-3p-search (pattern &rest _ignore) - (when (stringp pattern) - (setq pattern (helm-mm-3-get-patterns pattern))) - (helm-mm-3-search-base - pattern 'helm-mm-prefix-search 're-search-forward)) - - -;;; Generic multi-match/search functions -;; -;; -(cl-defun helm-mm-match (str &optional (pattern helm-pattern)) - (let ((fun (cl-ecase helm-mm-matching-method - (multi1 #'helm-mm-1-match) - (multi2 #'helm-mm-2-match) - (multi3 #'helm-mm-3-match) - (multi3p #'helm-mm-3p-match)))) - (funcall fun str pattern))) - -(defun helm-mm-search (pattern &rest _ignore) - (let ((fun (cl-ecase helm-mm-matching-method - (multi1 #'helm-mm-1-search) - (multi2 #'helm-mm-2-search) - (multi3 #'helm-mm-3-search) - (multi3p #'helm-mm-3p-search)))) - (funcall fun pattern))) - - -(provide 'helm-multi-match) - - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-multi-match.el ends here diff --git a/elpa/helm-20160105.2046/helm-net.el b/elpa/helm-20160105.2046/helm-net.el deleted file mode 100644 index cdcc53e1..00000000 --- a/elpa/helm-20160105.2046/helm-net.el +++ /dev/null @@ -1,526 +0,0 @@ -;;; helm-net.el --- helm browse url and search web. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'url) -(require 'xml) -(require 'browse-url) - - -(defgroup helm-net nil - "Net related applications and libraries for Helm." - :group 'helm) - -(defcustom helm-google-suggest-default-browser-function nil - "The browse url function you prefer to use with google suggest. -When nil, use the first browser function available -See `helm-browse-url-default-browser-alist'." - :group 'helm-net - :type 'symbol) - -(defcustom helm-home-url "http://www.google.fr" - "Default url to use as home url." - :group 'helm-net - :type 'string) - -(defcustom helm-surfraw-default-browser-function nil - "The browse url function you prefer to use with surfraw. -When nil, fallback to `browse-url-browser-function'." - :group 'helm-net - :type 'symbol) - -(defcustom helm-google-suggest-url - "http://google.com/complete/search?output=toolbar&q=" - "URL used for looking up Google suggestions." - :type 'string - :group 'helm-net) - -(defcustom helm-google-suggest-search-url - "http://www.google.com/search?ie=utf-8&oe=utf-8&q=%s" - "URL used for Google searching." - :type 'string - :group 'helm-net) - -(defcustom helm-net-prefer-curl nil - "When non--nil use CURL external program to fetch data. -Otherwise `url-retrieve-synchronously' is used." - :type 'boolean - :group 'helm-net) - -(defvaralias 'helm-google-suggest-use-curl-p 'helm-net-prefer-curl) -(make-obsolete-variable 'helm-google-suggest-use-curl-p 'helm-net-prefer-curl "1.7.7") - -(defcustom helm-surfraw-duckduckgo-url - "https://duckduckgo.com/lite/?q=%s&kp=1" - "The duckduckgo url. -This is a format string, don't forget the `%s'. -If you have personal settings saved on duckduckgo you should have -a personal url, see your settings on duckduckgo." - :type 'string - :group 'helm-net) - -(defcustom helm-wikipedia-suggest-url - "https://en.wikipedia.org/w/api.php?action=opensearch&search=" - "Url used for looking up Wikipedia suggestions." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-wikipedia-url - "https://en.wikipedia.org/wiki/Special:Search?search=%s" - "The Wikipedia search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-wikipedia-summary-url - "http://en.wikipedia.org/w/api.php?action=parse&format=json&prop=text§ion=0&page=" - "URL for getting the summary of a Wikipedia topic." - :type 'string - :group 'helm-net) - -(defcustom helm-wikipedia-follow-delay 2 - "Delay before wikipedia summary popup." - :type 'number - :group 'helm-net) - -(defcustom helm-search-suggest-action-youtube-url - "http://www.youtube.com/results?aq=f&search_query=%s" - "The Youtube search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-imdb-url - "http://www.imdb.com/find?s=all&q=%s" - "The IMDb search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-google-maps-url - "http://maps.google.com/maps?f=q&source=s_q&q=%s" - "The Google Maps search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-google-news-url - "http://www.google.com/search?safe=off&prmd=nvlifd&source=lnms&tbs=nws:1&q=%s" - "The Google News search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-google-suggest-actions - '(("Google Search" . helm-google-suggest-action) - ("Wikipedia" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-wikipedia-url - candidate))) - ("Youtube" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-youtube-url - candidate))) - ("IMDb" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-imdb-url - candidate))) - ("Google Maps" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-google-maps-url - candidate))) - ("Google News" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-google-news-url - candidate)))) - "List of actions for google suggest sources." - :group 'helm-net - :type '(alist :key-type string :value-type function)) - -(defcustom helm-browse-url-firefox-new-window "-new-tab" - "Allow choosing to browse url in new window or new tab. -Can be \"-new-tab\" (default) or \"-new-window\"." - :group 'helm-net - :type '(radio - (const :tag "New tab" "-new-tab") - (const :tag "New window" "-new-window"))) - - -;;; Additional actions for search suggestions -;; -;; -;; Internal - -(defun helm-search-suggest-perform-additional-action (url query) - "Perform the search via URL using QUERY as input." - (browse-url (format url (url-hexify-string query)))) - -(defun helm-net--url-retrieve-sync (request parser) - (if helm-net-prefer-curl - (with-temp-buffer - (call-process "curl" nil t nil request) - (funcall parser)) - (with-current-buffer (url-retrieve-synchronously request) - (funcall parser)))) - - -;;; Google Suggestions -;; -;; -(defun helm-google-suggest-parser () - (cl-loop - with result-alist = (xml-get-children - (car (xml-parse-region - (point-min) (point-max))) - 'CompleteSuggestion) - for i in result-alist collect - (cdr (cl-caadr (assoc 'suggestion i))))) - -(defun helm-google-suggest-fetch (input) - "Fetch suggestions for INPUT from XML buffer." - (let ((request (concat helm-google-suggest-url - (url-hexify-string input)))) - (helm-net--url-retrieve-sync - request #'helm-google-suggest-parser))) - -(defun helm-google-suggest-set-candidates (&optional request-prefix) - "Set candidates with result and number of google results found." - (let ((suggestions (helm-google-suggest-fetch - (or (and request-prefix - (concat request-prefix - " " helm-pattern)) - helm-pattern)))) - (if (member helm-pattern suggestions) - suggestions - ;; if there is no suggestion exactly matching the input then - ;; prepend a Search on Google item to the list - (append - suggestions - (list (cons (format "Search for '%s' on Google" helm-input) - helm-input)))))) - -(defun helm-ggs-set-number-result (num) - (if num - (progn - (and (numberp num) (setq num (number-to-string num))) - (cl-loop for i in (reverse (split-string num "" t)) - for count from 1 - append (list i) into C - when (= count 3) - append (list ",") into C - and do (setq count 0) - finally return - (replace-regexp-in-string - "^," "" (mapconcat 'identity (reverse C) "")))) - "?")) - -(defun helm-google-suggest-action (candidate) - "Default action to jump to a google suggested candidate." - (let ((arg (format helm-google-suggest-search-url - (url-hexify-string candidate)))) - (helm-aif helm-google-suggest-default-browser-function - (funcall it arg) - (helm-browse-url arg)))) - -(defvar helm-google-suggest-default-function - 'helm-google-suggest-set-candidates - "Default function to use in helm google suggest.") - -(defvar helm-source-google-suggest - (helm-build-sync-source "Google Suggest" - :candidates (lambda () - (funcall helm-google-suggest-default-function)) - :action 'helm-google-suggest-actions - :volatile t - :keymap helm-map - :requires-pattern 3)) - -(defun helm-google-suggest-emacs-lisp () - "Try to emacs lisp complete with google suggestions." - (helm-google-suggest-set-candidates "emacs lisp")) - -;;; Wikipedia suggestions -;; -;; -(declare-function json-read-from-string "json" (string)) -(defun helm-wikipedia-suggest-fetch () - "Fetch Wikipedia suggestions and return them as a list." - (require 'json) - (let ((request (concat helm-wikipedia-suggest-url - (url-hexify-string helm-pattern)))) - (helm-net--url-retrieve-sync - request #'helm-wikipedia--parse-buffer))) - -(defun helm-wikipedia--parse-buffer () - (goto-char (point-min)) - (when (re-search-forward "^\\[.+\\[\\(.*\\)\\]\\]" nil t) - (cl-loop for i across (aref (json-read-from-string (match-string 0)) 1) - collect i into result - finally return (or result - (append - result - (list (cons (format "Search for '%s' on wikipedia" - helm-pattern) - helm-pattern))))))) - -(defvar helm-wikipedia--summary-cache (make-hash-table :test 'equal)) -(defun helm-wikipedia-persistent-action (candidate) - (unless (string= (format "Search for '%s' on wikipedia" - helm-pattern) - (helm-get-selection nil t)) - (message "Fetching summary from Wikipedia...") - (let ((buf (get-buffer-create "*helm wikipedia summary*")) - result mess) - (while (progn - (setq result (or (gethash candidate helm-wikipedia--summary-cache) - (puthash candidate - (prog1 - (helm-wikipedia-fetch-summary candidate) - (setq mess "Done")) - helm-wikipedia--summary-cache))) - (when (and result - (listp result)) - (setq candidate (cdr result)) - (message "Redirected to %s" candidate) - t))) - (if (not result) - (message "Error when getting summary.") - (with-current-buffer buf - (erase-buffer) - (setq cursor-type nil) - (insert result) - (fill-region (point-min) (point-max)) - (goto-char (point-min))) - (display-buffer buf) - (message mess))))) - -(defun helm-wikipedia-fetch-summary (input) - (let* ((request (concat helm-wikipedia-summary-url - (url-hexify-string input)))) - (helm-net--url-retrieve-sync - request #'helm-wikipedia--parse-summary))) - -(defun helm-wikipedia--parse-summary () - (goto-char (point-min)) - (when (search-forward "{" nil t) - (let ((result (cdr (assoc '* - (assoc 'text - (assoc 'parse - (json-read-from-string - (buffer-substring-no-properties - (1- (point)) (point-max))))))))) - (when result - (if (string-match "]+>\\([^<]+\\)" result) - (cons 'redirect (match-string 1 result)) - - ;; find the beginning of the summary text in the result - - ;; check if there is a table before the summary and skip that - (when (or (string-match "\\(\n\\)?\n

" result) - ;; otherwise just find the first paragraph - (string-match "

" result)) - ;; remove cruft and do a simple formatting - (replace-regexp-in-string - "Cite error: .*" "" - (replace-regexp-in-string - " " "" - (replace-regexp-in-string - "\\[[^\]]+\\]" "" - (replace-regexp-in-string - "<[^>]*>" "" - (replace-regexp-in-string - "

\n

" "\n\n" - (substring result (match-end 0))))))))))))) - - -(defvar helm-source-wikipedia-suggest - (helm-build-sync-source "Wikipedia Suggest" - :candidates #'helm-wikipedia-suggest-fetch - :action '(("Wikipedia" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-wikipedia-url - candidate)))) - :persistent-action #'helm-wikipedia-persistent-action - :volatile t - :keymap helm-map - :follow 1 - :follow-delay helm-wikipedia-follow-delay - :requires-pattern 3)) - - -;;; Web browser functions. -;; -;; -;; If default setting of `w3m-command' is not -;; what you want and you modify it, you will have to reeval -;; also `helm-browse-url-default-browser-alist'. - -(defvar helm-browse-url-chromium-program "chromium-browser") -(defvar helm-browse-url-uzbl-program "uzbl-browser") -(defvar helm-browse-url-conkeror-program "conkeror") -(defvar helm-browse-url-default-browser-alist - `((,(or (and (boundp 'w3m-command) w3m-command) - "/usr/bin/w3m") . w3m-browse-url) - (,browse-url-firefox-program . browse-url-firefox) - (,helm-browse-url-chromium-program . helm-browse-url-chromium) - (,helm-browse-url-conkeror-program . helm-browse-url-conkeror) - (,helm-browse-url-uzbl-program . helm-browse-url-uzbl) - (,browse-url-kde-program . browse-url-kde) - (,browse-url-gnome-moz-program . browse-url-gnome-moz) - (,browse-url-mozilla-program . browse-url-mozilla) - (,browse-url-galeon-program . browse-url-galeon) - (,browse-url-netscape-program . browse-url-netscape) - (,browse-url-mosaic-program . browse-url-mosaic) - (,browse-url-xterm-program . browse-url-text-xterm) - ("emacs" . eww-browse-url)) - "*Alist of \(executable . function\) to try to find a suitable url browser.") - -(cl-defun helm-generic-browser (url cmd-name &rest args) - "Browse URL with NAME browser." - (let ((proc (concat cmd-name " " url))) - (message "Starting %s..." cmd-name) - (apply 'start-process proc nil cmd-name - (append args (list url))) - (set-process-sentinel - (get-process proc) - (lambda (process event) - (when (string= event "finished\n") - (message "%s process %s" process event)))))) - -(defun helm-browse-url-firefox (url &optional _ignore) - "Same as `browse-url-firefox' but detach from emacs. -So when you quit emacs you can keep your firefox open -and not be prompted to kill firefox process. - -NOTE: Probably not supported on some systems (e.g Windows)." - (interactive (list (read-string "URL: " (browse-url-url-at-point)) - nil)) - (let ((process-environment (browse-url-process-environment))) - (call-process-shell-command - (format "(%s %s %s &)" - browse-url-firefox-program - helm-browse-url-firefox-new-window - url)))) - -(defun helm-browse-url-chromium (url &optional _ignore) - "Browse URL with google chrome browser." - (interactive "sURL: ") - (helm-generic-browser - url helm-browse-url-chromium-program)) - -(defun helm-browse-url-uzbl (url &optional _ignore) - "Browse URL with uzbl browser." - (interactive "sURL: ") - (helm-generic-browser url helm-browse-url-uzbl-program "-u")) - -(defun helm-browse-url-conkeror (url &optional _ignore) - "Browse URL with conkeror browser." - (interactive "sURL: ") - (helm-generic-browser url helm-browse-url-conkeror-program)) - -(defun helm-browse-url-default-browser (url &rest args) - "Find the first available browser and ask it to load URL." - (let ((default-browser-fn - (cl-loop for (exe . fn) in helm-browse-url-default-browser-alist - thereis (and exe (executable-find exe) (fboundp fn) fn)))) - (if default-browser-fn - (apply default-browser-fn url args) - (error "No usable browser found")))) - -(defun helm-browse-url (url &rest args) - "Default command to browse URL." - (if browse-url-browser-function - (browse-url url args) - (helm-browse-url-default-browser url args))) - - -;;; Surfraw -;; -;; Need external program surfraw. -;; - -;; Internal -(defvar helm-surfraw-engines-history nil) -(defvar helm-surfraw-input-history nil) -(defvar helm-surfraw--elvi-cache nil) - -(defun helm-build-elvi-list () - "Return list of all engines and descriptions handled by surfraw." - (or helm-surfraw--elvi-cache - (setq helm-surfraw--elvi-cache - (cdr (with-temp-buffer - (call-process "surfraw" nil t nil "-elvi") - (split-string (buffer-string) "\n")))))) - -;;;###autoload -(defun helm-surfraw (pattern engine) - "Preconfigured `helm' to search PATTERN with search ENGINE." - (interactive (list (read-string "SearchFor: " - nil 'helm-surfraw-input-history - (thing-at-point 'symbol)) - (helm-comp-read - "Engine: " - (helm-build-elvi-list) - :must-match t - :name "Surfraw Search Engines" - :del-input nil - :history helm-surfraw-engines-history))) - (let* ((engine-nodesc (car (split-string engine))) - (url (if (string= engine-nodesc "duckduckgo") - ;; "sr duckduckgo -p foo" is broken, workaround. - (format helm-surfraw-duckduckgo-url - (url-hexify-string pattern)) - (with-temp-buffer - (apply 'call-process "surfraw" nil t nil - (append (list engine-nodesc "-p") (split-string pattern))) - (replace-regexp-in-string - "\n" "" (buffer-string))))) - (browse-url-browser-function (or helm-surfraw-default-browser-function - browse-url-browser-function))) - (if (string= engine-nodesc "W") - (helm-browse-url helm-home-url) - (helm-browse-url url) - (setq helm-surfraw-engines-history - (cons engine (delete engine helm-surfraw-engines-history)))))) - -;;;###autoload -(defun helm-google-suggest () - "Preconfigured `helm' for google search with google suggest." - (interactive) - (helm-other-buffer 'helm-source-google-suggest "*helm google*")) - -;;;###autoload -(defun helm-wikipedia-suggest () - "Preconfigured `helm' for Wikipedia lookup with Wikipedia suggest." - (interactive) - (helm :sources 'helm-source-wikipedia-suggest - :buffer "*helm wikipedia*")) - - -(provide 'helm-net) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-net.el ends here diff --git a/elpa/helm-20160105.2046/helm-org.el b/elpa/helm-20160105.2046/helm-org.el deleted file mode 100644 index 422c273b..00000000 --- a/elpa/helm-20160105.2046/helm-org.el +++ /dev/null @@ -1,221 +0,0 @@ -;;; helm-org.el --- Helm for org headlines and keywords completion -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) -(require 'org) - -(declare-function org-agenda-switch-to "org-agenda.el") - -(defgroup helm-org nil - "Org related functions for helm." - :group 'helm) - -(defcustom helm-org-headings-fontify nil - "Fontify org buffers before parsing them. -This reflect fontification in helm-buffer when non--nil. -NOTE: This will be slow on large org buffers." - :group 'helm-org - :type 'boolean) - -(defcustom helm-org-format-outline-path nil - "Show all org level as path." - :group 'helm-org - :type 'boolean) - -(defcustom helm-org-show-filename nil - "Show org filenames in `helm-org-agenda-files-headings' when non--nil. -Note this have no effect in `helm-org-in-buffer-headings'." - :group 'helm-org - :type 'boolean) - -(defcustom helm-org-headings-min-depth 1 - "Minimum depth of org headings to start with." - :group 'helm-org - :type 'integer) - -(defcustom helm-org-headings-max-depth 8 - "Go down to this maximum depth of org headings." - :group 'helm-org - :type 'integer) - -;;; Org capture templates -;; -;; -(defvar org-capture-templates) -(defun helm-source-org-capture-templates () - (helm-build-sync-source "Org Capture Templates:" - :candidates (cl-loop for template in org-capture-templates - collect (cons (nth 1 template) (nth 0 template))) - :action '(("Do capture" . (lambda (template-shortcut) - (org-capture nil template-shortcut)))))) - -;;; Org headings -;; -;; -(defun helm-org-goto-marker (marker) - (switch-to-buffer (marker-buffer marker)) - (goto-char (marker-position marker)) - (org-show-context) - (re-search-backward "^\\*+ " nil t) - (org-show-entry)) - -(defun helm-source-org-headings-for-files (filenames &optional parents) - (helm-build-sync-source "Org Headings" - :candidates filenames ; Start with only filenames. - :match (lambda (candidate) - (string-match - helm-pattern - (helm-aif (get-text-property 0 'helm-real-display candidate) - it - candidate))) - :candidate-transformer - ;; Now that the helm-window is available proceed to truncation - ;; and other transformations. - (lambda (candidates) - (let ((cands (helm-org-get-candidates candidates parents))) - (if parents (nreverse cands) cands))) - :action '(("Go to line" . helm-org-goto-marker) - ("Refile to this heading" . helm-org-heading-refile) - ("Insert link to this heading" - . helm-org-insert-link-to-heading-at-marker)))) - -(defun helm-org-get-candidates (filenames &optional parents) - (helm-flatten-list - (mapcar (lambda (filename) - (helm-org--get-candidates-in-file - filename - helm-org-headings-fontify - (or parents (null helm-org-show-filename)) - parents)) - filenames) - t)) - -(defun helm-org--get-candidates-in-file (filename &optional fontify nofname parents) - (with-current-buffer (pcase filename - ((pred bufferp) filename) - ((pred stringp) (find-file-noselect filename))) - (and fontify (jit-lock-fontify-now)) - (let ((match-fn (if fontify - #'match-string - #'match-string-no-properties)) - (search-fn (lambda () - (when (or (null parents) - (org-up-heading-safe)) - (re-search-forward - org-complex-heading-regexp nil t))))) - (save-excursion - (save-restriction - (widen) - (unless parents (goto-char (point-min))) - (cl-loop with width = (window-width (helm-window)) - while (funcall search-fn) - for all = (funcall match-fn 0) - for truncated-all = (if (and all (> (length all) width)) - (substring all 0 width) all) - for level = (length (match-string-no-properties 1)) - for heading = (funcall match-fn 4) - for file = (unless nofname - (concat (helm-basename filename) ":")) - if (and (>= level helm-org-headings-min-depth) - (<= level helm-org-headings-max-depth)) - collect (cons (propertize - (if helm-org-format-outline-path - (org-format-outline-path - (append (apply #'org-get-outline-path - (unless parents - (list t level heading))) - (list heading)) - width file) - (if file - (concat file truncated-all) - truncated-all)) - 'helm-real-display heading) - (point-marker)))))))) - -(defun helm-org-insert-link-to-heading-at-marker (marker) - (with-current-buffer (marker-buffer marker) - (let ((heading-name (save-excursion (goto-char (marker-position marker)) - (nth 4 (org-heading-components)))) - (file-name (buffer-file-name))) - (with-helm-current-buffer - (org-insert-link - file-name (concat "file:" file-name "::*" heading-name)))))) - -(defun helm-org-heading-refile (marker) - (save-selected-window - (when (eq major-mode 'org-agenda-mode) - (org-agenda-switch-to)) - (org-cut-subtree) - (let ((target-level (with-current-buffer (marker-buffer marker) - (goto-char (marker-position marker)) - (org-current-level)))) - (helm-org-goto-marker marker) - (org-end-of-subtree t t) - (org-paste-subtree (+ target-level 1))))) - -;;;###autoload -(defun helm-org-agenda-files-headings () - "Preconfigured helm for org files headings." - (interactive) - (helm :sources (helm-source-org-headings-for-files (org-agenda-files)) - :candidate-number-limit 99999 - :buffer "*helm org headings*")) - -;;;###autoload -(defun helm-org-in-buffer-headings () - "Preconfigured helm for org buffer headings." - (interactive) - (let ((helm-org-show-filename nil)) - (helm :sources (helm-source-org-headings-for-files - (list (current-buffer))) - :candidate-number-limit 99999 - :buffer "*helm org inbuffer*"))) - -;;;###autoload -(defun helm-org-parent-headings () - "Preconfigured helm for org headings that are parents of the -current heading." - (interactive) - ;; Use a large max-depth to ensure all parents are displayed. - (let ((helm-org-headings-min-depth 1) - (helm-org-headings-max-depth 50)) - (helm :sources (helm-source-org-headings-for-files - (list (current-buffer)) t) - :candidate-number-limit 99999 - :buffer "*helm org parent headings*"))) - -;;;###autoload -(defun helm-org-capture-templates () - "Preconfigured helm for org templates." - (interactive) - (helm :sources (helm-source-org-capture-templates) - :candidate-number-limit 99999 - :buffer "*helm org capture templates*")) - - -(provide 'helm-org) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-org.el ends here diff --git a/elpa/helm-20160105.2046/helm-pkg.el b/elpa/helm-20160105.2046/helm-pkg.el deleted file mode 100644 index b758deae..00000000 --- a/elpa/helm-20160105.2046/helm-pkg.el +++ /dev/null @@ -1,9 +0,0 @@ -(define-package "helm" "20160105.2046" "Helm is an Emacs incremental and narrowing framework" - '((emacs "24") - (cl-lib "0.5") - (async "1.6") - (helm-core "1.9.1")) - :url "https://emacs-helm.github.io/helm/") -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/elpa/helm-20160105.2046/helm-plugin.el b/elpa/helm-20160105.2046/helm-plugin.el deleted file mode 100644 index 976a7349..00000000 --- a/elpa/helm-20160105.2046/helm-plugin.el +++ /dev/null @@ -1,137 +0,0 @@ -;;; helm-plugin.el --- Helm plugins -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) - - -;;; Plug-in: `info-index' -;; -;; -(defun helm-make-info-source (source file) - `(,@source - (name . ,(concat "Info Index: " file)) - (info-file . ,file) - (init . helm-info-init) - (display-to-real . helm-info-display-to-real) - (get-line . buffer-substring) - (candidates-in-buffer) - (action ("Goto node" . helm-info-goto)))) - -(defun helm-compile-source--info-index (source) - (helm-aif (helm-interpret-value (assoc-default 'info-index source)) - (helm-make-info-source source it) - source)) - -(add-to-list 'helm-compile-source-functions 'helm-compile-source--info-index) - -(helm-document-attribute 'info-index "info-index plugin" - " Create a source of info index very easily. - - Example: - - (defvar helm-source-info-wget '((info-index . \"wget\"))") - - -;;; Plug-in: `candidates-file' -;; -;; List all lines in a file. -(defun helm-compile-source--candidates-file (source) - (if (assoc-default 'candidates-file source) - `((init helm-p-candidates-file-init - ,@(let ((orig-init (assoc-default 'init source))) - (cond ((null orig-init) nil) - ((functionp orig-init) (list orig-init)) - (t orig-init)))) - (candidates-in-buffer) - ,@source) - source)) -(add-to-list 'helm-compile-source-functions 'helm-compile-source--candidates-file) - -(defun helm-p-candidates-file-init () - (cl-destructuring-bind (file &optional updating) - (helm-mklist (helm-attr 'candidates-file)) - (setq file (helm-interpret-value file)) - (with-current-buffer (helm-candidate-buffer 'global) - (insert-file-contents file) - (when updating - (buffer-disable-undo) - (font-lock-mode -1) - (auto-revert-mode 1))))) - -(helm-document-attribute 'candidates-file "candidates-file plugin" - " Use a file as the candidates buffer. - - 1st argument is a filename, string or function name or variable - name. If optional 2nd argument is non-nil, the file is opened with - `auto-revert-mode' enabled. - - Example: - - \(defvar helm-source-test-file - '((name . \"test1\") - (candidates-file \"~/.emacs.el\" t))) - - Will list all lines in .emacs.el.") - - -;;; Plug-in: `persistent-help' -;; -;; Add help about persistent action in `helm-buffer' header. -(defun helm-compile-source--persistent-help (source) - (if (assoc 'header-line source) - source - (append source '((header-line . helm-persistent-help-string))))) -(add-to-list 'helm-compile-source-functions 'helm-compile-source--persistent-help) - -(defun helm-persistent-help-string () - (substitute-command-keys - (concat "\\\\[helm-execute-persistent-action]: " - (or (helm-interpret-value (helm-attr 'persistent-help)) - (helm-aif (or (assoc-default - 'persistent-action - (helm-get-current-source)) - (assoc-default - 'action (helm-get-current-source))) - (cond ((symbolp it) - (symbol-name it)) - ((listp it) - (or (ignore-errors (caar it)) "")))) - "") - " (keeping session)"))) - - -;;; Document new attributes -;; -;; -(helm-document-attribute 'persistent-help "persistent-help plug-in" - " A string to explain persistent-action of this source. It also - accepts a function or a variable name.") - - -(provide 'helm-plugin) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-plugin ends here diff --git a/elpa/helm-20160105.2046/helm-regexp.el b/elpa/helm-20160105.2046/helm-regexp.el deleted file mode 100644 index e8a7f2d9..00000000 --- a/elpa/helm-20160105.2046/helm-regexp.el +++ /dev/null @@ -1,639 +0,0 @@ -;;; helm-regexp.el --- In buffer regexp searching and replacement for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-utils) -(require 'helm-plugin) - -(declare-function helm-mm-split-pattern "helm-multi-match") - - -(defgroup helm-regexp nil - "Regexp related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-moccur-always-search-in-current nil - "Helm multi occur always search in current buffer when non--nil." - :group 'helm-regexp - :type 'boolean) - -(defcustom helm-moccur-use-ioccur-style-keys t - "Similar to `helm-grep-use-ioccur-style-keys' but for multi occur." - :group 'helm-regexp - :type 'boolean) - -(defcustom helm-moccur-auto-update-on-resume nil - "Allow auto updating helm-(m)occur buffer when outdated. -noask => Always update without asking -nil => Don't update but signal buffer needs update -never => Never update and do not signal buffer needs update -Any other non--nil value update after confirmation." - :group 'helm-regexp - :type '(radio :tag "Allow auto updating helm-(m)occur buffer when outdated." - (const :tag "Always update without asking" noask) - (const :tag "Never update and do not signal buffer needs update" never) - (const :tag "Don't update but signal buffer needs update" nil) - (const :tag "Update after confirmation" t))) - -(defcustom helm-source-multi-occur-actions - '(("Go to Line" . helm-moccur-goto-line) - ("Goto line other window" . helm-moccur-goto-line-ow) - ("Goto line new frame" . helm-moccur-goto-line-of)) - "Actions for helm-occur and helm-moccur." - :group 'helm-regexp - :type '(alist :key-type string :value-type function)) - -(defcustom helm-moccur-truncate-lines t - "When nil the (m)occur line that appears will not be truncated." - :group 'helm-regexp - :type 'boolean) - - -(defface helm-moccur-buffer - '((t (:foreground "DarkTurquoise" :underline t))) - "Face used to highlight moccur buffer names." - :group 'helm-regexp) - -(defface helm-resume-need-update - '((t (:background "red"))) - "Face used to flash moccur buffer when it needs update." - :group 'helm-regexp) - - -(defvar helm-moccur-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-c o") 'helm-moccur-run-goto-line-ow) - (define-key map (kbd "C-c C-o") 'helm-moccur-run-goto-line-of) - (define-key map (kbd "C-x C-s") 'helm-moccur-run-save-buffer) - (when helm-moccur-use-ioccur-style-keys - (define-key map (kbd "") 'helm-execute-persistent-action) - (define-key map (kbd "") 'helm-moccur-run-default-action)) - (delq nil map)) - "Keymap used in Moccur source.") - - -;; History vars -(defvar helm-build-regexp-history nil) -(defvar helm-occur-history nil) - -(defun helm-query-replace-regexp (_candidate) - "Query replace regexp from `helm-regexp'. -With a prefix arg replace only matches surrounded by word boundaries, -i.e Don't replace inside a word, regexp is surrounded with \\bregexp\\b." - (let ((regexp helm-input)) - (apply 'query-replace-regexp - (helm-query-replace-args regexp)))) - -(defun helm-kill-regexp-as-sexp (_candidate) - "Kill regexp in a format usable in lisp code." - (helm-regexp-kill-new - (prin1-to-string helm-input))) - -(defun helm-kill-regexp (_candidate) - "Kill regexp as it is in `helm-pattern'." - (helm-regexp-kill-new helm-input)) - -(defun helm-query-replace-args (regexp) - "create arguments of `query-replace-regexp' action in `helm-regexp'." - (let ((region-only (helm-region-active-p))) - (list - regexp - (query-replace-read-to regexp - (format "Query replace %sregexp %s" - (if helm-current-prefix-arg "word " "") - (if region-only "in region " "")) - t) - helm-current-prefix-arg - (when region-only (region-beginning)) - (when region-only (region-end))))) - -(defvar helm-source-regexp - (helm-build-in-buffer-source "Regexp Builder" - :init (lambda () - (helm-init-candidates-in-buffer - 'global (with-temp-buffer - (insert-buffer-substring helm-current-buffer) - (buffer-string)))) - :get-line #'helm-regexp-get-line - :persistent-action #'helm-regexp-persistent-action - :persistent-help "Show this line" - :multiline t - :matchplugin nil - :requires-pattern 2 - :mode-line "Press TAB to select action." - :action '(("Kill Regexp as sexp" . helm-kill-regexp-as-sexp) - ("Query Replace Regexp (C-u Not inside word.)" - . helm-query-replace-regexp) - ("Kill Regexp" . helm-kill-regexp)))) - -(defun helm-regexp-get-line (s e) - (let ((matches (match-data)) - (line (buffer-substring s e))) - (propertize - (cl-loop with ln = (format "%5d: %s" (1- (line-number-at-pos s)) line) - for i from 0 to (1- (/ (length matches) 2)) - concat (format "\n %s'%s'" (format "Group %d: " i) - (match-string i)) - into ln1 - finally return (concat ln ln1)) - 'helm-realvalue s))) - -(defun helm-regexp-persistent-action (pt) - (helm-goto-char pt) - (helm-highlight-current-line)) - -(defun helm-regexp-kill-new (input) - (kill-new input) - (message "Killed: %s" input)) - - -;;; Occur -;; -;; -(defvar helm-source-occur nil) -(defun helm-occur-init-source () - (unless helm-source-occur - (setq helm-source-occur - (helm-make-source "Occur" 'helm-source-multi-occur)))) - - -;;; Multi occur -;; -;; - -;; Internal -(defvar helm-multi-occur-buffer-list nil) -(defvar helm-multi-occur-buffer-tick nil) -(defun helm-moccur-init () - "Create the initial helm multi occur buffer." - (helm-init-candidates-in-buffer - 'global - (cl-loop with buffers = (helm-attr 'moccur-buffers) - for buf in buffers - for bufstr = (with-current-buffer buf (buffer-string)) - do (add-text-properties - 0 (length bufstr) - `(buffer-name ,(buffer-name (get-buffer buf))) - bufstr) - concat bufstr))) - -(defun helm-moccur--next-or-previous-char () - (save-excursion - (or (re-search-forward "^." nil t) - (re-search-backward "^." nil t)))) - -(defun helm-moccur-get-line (beg end) - "Format line for `helm-source-moccur'." - (prog1 - (format "%s:%d:%s" - (get-text-property (if (= beg end) - (helm-moccur--next-or-previous-char) - beg) - 'buffer-name) - (save-restriction - (narrow-to-region (or (previous-single-property-change - (point) 'buffer-name) 1) - (or (next-single-property-change - (if (= beg end) - (helm-moccur--next-or-previous-char) - (point)) - 'buffer-name) - (point-max))) - (line-number-at-pos beg)) - ;; When matching empty line, use empty string - ;; to allow saving and modifying with wgrep. - (if (= beg end) "" (buffer-substring beg end))) - ;; When matching empty line, forward char ("\n") - ;; to not be blocked forever here. - (when (= beg end) (forward-char 1)))) - -(cl-defun helm-moccur-action (candidate - &optional (method (quote buffer)) mark) - "Jump to CANDIDATE with METHOD. -arg METHOD can be one of buffer, buffer-other-window, buffer-other-frame." - (require 'helm-grep) - (let* ((split (helm-grep-split-line candidate)) - (buf (car split)) - (lineno (string-to-number (nth 1 split))) - (split-pat (helm-mm-split-pattern helm-input))) - (cl-case method - (buffer (switch-to-buffer buf)) - (buffer-other-window (switch-to-buffer-other-window buf)) - (buffer-other-frame (switch-to-buffer-other-frame buf))) - (helm-goto-line lineno) - ;; Move point to the nearest matching regexp from bol. - (cl-loop for reg in split-pat - when (save-excursion - (condition-case _err - (if helm-migemo-mode - (helm-mm-migemo-forward reg (point-at-eol) t) - (re-search-forward reg (point-at-eol) t)) - (invalid-regexp nil))) - collect (match-beginning 0) into pos-ls - finally (when pos-ls (goto-char (apply #'min pos-ls)))) - (when mark - (set-marker (mark-marker) (point)) - (push-mark (point) 'nomsg)))) - -(defun helm-moccur-persistent-action (candidate) - (helm-moccur-goto-line candidate) - (helm-highlight-current-line)) - -(defun helm-moccur-goto-line (candidate) - "From multi occur, switch to buffer and go to nth 1 CANDIDATE line." - (helm-moccur-action - candidate 'buffer (or current-prefix-arg ; persistent. - helm-current-prefix-arg))) ; exit. - -(defun helm-moccur-goto-line-ow (candidate) - "Go to CANDIDATE line in other window. -Same as `helm-moccur-goto-line' but go in other window." - (helm-moccur-action - candidate 'buffer-other-window - (or current-prefix-arg ; persistent. - helm-current-prefix-arg))) ; exit. - -(defun helm-moccur-goto-line-of (candidate) - "Go to CANDIDATE line in new frame. -Same as `helm-moccur-goto-line' but go in new frame." - (helm-moccur-action - candidate 'buffer-other-frame - (or current-prefix-arg ; persistent. - helm-current-prefix-arg))) ; exit. - -(defun helm-moccur-run-goto-line-ow () - "Run goto line other window action from `helm-source-moccur'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-goto-line-ow))) - -(defun helm-moccur-run-goto-line-of () - "Run goto line new frame action from `helm-source-moccur'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-goto-line-of))) - -(defun helm-moccur-run-default-action () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-goto-line))) - -(defvar helm-source-moccur nil) -(defclass helm-source-multi-occur (helm-source-in-buffer) - ((init :initform (lambda () - (require 'helm-grep) - (helm-moccur-init))) - (filter-one-by-one :initform 'helm-moccur-filter-one-by-one) - (get-line :initform helm-moccur-get-line) - (nohighlight :initform t) - (nomark :initform t) - (migemo :initform t) - (action :initform 'helm-source-multi-occur-actions) - (persistent-action :initform 'helm-moccur-persistent-action) - (persistent-help :initform "Go to line") - (resume :initform 'helm-moccur-resume-fn) - (candidate-number-limit :initform 9999) - (help-message :initform 'helm-moccur-help-message) - (keymap :initform helm-moccur-map) - (history :initform 'helm-occur-history) - (requires-pattern :initform 2))) - -(defun helm-moccur-resume-fn () - (with-helm-buffer - (let (new-tick-ls buffer-is-modified) - (set (make-local-variable 'helm-multi-occur-buffer-list) - (cl-loop for b in helm-multi-occur-buffer-list - when (buffer-live-p (get-buffer b)) - collect b)) - (setq buffer-is-modified (/= (length helm-multi-occur-buffer-list) - (length (helm-attr 'moccur-buffers)))) - (helm-attrset 'moccur-buffers helm-multi-occur-buffer-list) - (setq new-tick-ls (cl-loop for b in helm-multi-occur-buffer-list - collect (buffer-chars-modified-tick (get-buffer b)))) - (when buffer-is-modified - (setq helm-multi-occur-buffer-tick new-tick-ls)) - (cl-assert (> (length helm-multi-occur-buffer-list) 0) nil - "helm-resume error: helm-(m)occur buffer list is empty") - (unless (eq helm-moccur-auto-update-on-resume 'never) - (when (or buffer-is-modified - (cl-loop for b in helm-multi-occur-buffer-list - for new-tick = (buffer-chars-modified-tick (get-buffer b)) - for tick in helm-multi-occur-buffer-tick - thereis (/= tick new-tick))) - (helm-aif helm-moccur-auto-update-on-resume - (when (or (eq it 'noask) - (y-or-n-p "Helm (m)occur Buffer outdated, update? ")) - (run-with-idle-timer 0.1 nil (lambda () - (with-helm-buffer - (helm-force-update) - (message "Helm (m)occur Buffer have been udated") - (sit-for 1) (message nil)))) - (unless buffer-is-modified (setq helm-multi-occur-buffer-tick new-tick-ls))) - (run-with-idle-timer 0.1 nil (lambda () - (with-helm-buffer - (let ((ov (make-overlay (save-excursion - (goto-char (point-min)) - (forward-line 1) - (point)) - (point-max)))) - (overlay-put ov 'face 'helm-resume-need-update) - (sit-for 0.3) (delete-overlay ov) - (message "[Helm occur Buffer outdated (C-c C-u to update)]"))))) - (unless buffer-is-modified - (with-helm-after-update-hook - (setq helm-multi-occur-buffer-tick new-tick-ls) - (message "Helm (m)occur Buffer have been udated"))))))))) - -(defun helm-moccur-filter-one-by-one (candidate) - "`filter-one-by-one' function for `helm-source-moccur'." - (require 'helm-grep) - (let* ((split (helm-grep-split-line candidate)) - (buf (car split)) - (lineno (nth 1 split)) - (str (nth 2 split))) - (cons (concat (propertize - buf - 'face 'helm-moccur-buffer - 'help-echo (buffer-file-name - (get-buffer buf)) - 'buffer-name buf) - ":" - (propertize lineno 'face 'helm-grep-lineno) - ":" - (helm-grep-highlight-match str t)) - candidate))) - -(defun helm-multi-occur-1 (buffers &optional input) - "Main function to call `helm-source-moccur' with BUFFERS list." - (let ((bufs (if helm-moccur-always-search-in-current - (cons - ;; will become helm-current-buffer later. - (buffer-name (current-buffer)) - (remove helm-current-buffer buffers)) - buffers))) - (unless helm-source-moccur - (setq helm-source-moccur - (helm-make-source "Moccur" 'helm-source-multi-occur))) - (helm-attrset 'moccur-buffers bufs helm-source-moccur) - (helm-set-local-variable 'helm-multi-occur-buffer-list bufs) - (helm-set-local-variable - 'helm-multi-occur-buffer-tick - (cl-loop for b in bufs - collect (buffer-chars-modified-tick (get-buffer b))))) - (helm :sources 'helm-source-moccur - :buffer "*helm multi occur*" - :history 'helm-occur-history - :keymap helm-moccur-map - :input input - :truncate-lines helm-moccur-truncate-lines)) - -(defun helm-moccur-run-save-buffer () - "Run moccur save results action from `helm-moccur'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-save-results))) - - -;;; helm-moccur-mode -;; -;; -(defvar helm-moccur-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") 'helm-moccur-mode-goto-line) - (define-key map (kbd "C-o") 'helm-moccur-mode-goto-line-ow) - (define-key map (kbd "") 'helm-moccur-mode-goto-line-ow-forward) - (define-key map (kbd "") 'helm-moccur-mode-goto-line-ow-backward) - (define-key map (kbd "") 'helm-gm-next-file) - (define-key map (kbd "") 'helm-gm-precedent-file) - (define-key map (kbd "M-n") 'helm-moccur-mode-goto-line-ow-forward) - (define-key map (kbd "M-p") 'helm-moccur-mode-goto-line-ow-backward) - (define-key map (kbd "M-N") 'helm-gm-next-file) - (define-key map (kbd "M-P") 'helm-gm-precedent-file) - map)) - -(defun helm-moccur-mode-goto-line () - (interactive) - (helm-aif (get-text-property (point) 'helm-realvalue) - (helm-moccur-goto-line it))) - -(defun helm-moccur-mode-goto-line-ow () - (interactive) - (helm-aif (get-text-property (point) 'helm-realvalue) - (helm-moccur-goto-line-ow it))) - -(defun helm-moccur-mode-goto-line-ow-forward-1 (arg) - (condition-case nil - (progn - (save-selected-window - (helm-moccur-mode-goto-line-ow) - (recenter)) - (forward-line arg)) - (error nil))) - -(defun helm-moccur-mode-goto-line-ow-forward () - (interactive) - (helm-moccur-mode-goto-line-ow-forward-1 1)) - -(defun helm-moccur-mode-goto-line-ow-backward () - (interactive) - (helm-moccur-mode-goto-line-ow-forward-1 -1)) - -(defun helm-moccur-save-results (_candidate) - "Save helm moccur results in a `helm-moccur-mode' buffer." - (let ((buf "*hmoccur*") - new-buf) - (when (get-buffer buf) - (setq new-buf (helm-read-string "OccurBufferName: " buf)) - (cl-loop for b in (helm-buffer-list) - when (and (string= new-buf b) - (not (y-or-n-p - (format "Buffer `%s' already exists overwrite? " - new-buf)))) - do (setq new-buf (helm-read-string "OccurBufferName: " "*hmoccur "))) - (setq buf new-buf)) - (with-current-buffer (get-buffer-create buf) - (setq buffer-read-only t) - (let ((inhibit-read-only t)) - (erase-buffer) - (insert "-*- mode: helm-moccur -*-\n\n" - (format "Moccur Results for `%s':\n\n" helm-input)) - (save-excursion - (insert (with-current-buffer helm-buffer - (goto-char (point-min)) (forward-line 1) - (buffer-substring (point) (point-max)))))) - (helm-moccur-mode) (pop-to-buffer buf)) - (message "Helm Moccur Results saved in `%s' buffer" buf))) - -;;;###autoload -(define-derived-mode helm-moccur-mode - special-mode "helm-moccur" - "Major mode to provide actions in helm moccur saved buffer. - -Special commands: -\\{helm-moccur-mode-map}" - (set (make-local-variable 'helm-multi-occur-buffer-list) - (with-helm-buffer helm-multi-occur-buffer-list)) - (set (make-local-variable 'revert-buffer-function) - #'helm-moccur-mode--revert-buffer-function)) - -(defun helm-moccur-mode--revert-buffer-function (&optional _ignore-auto _noconfirm) - (goto-char (point-min)) - (let (pattern) - (when (re-search-forward "^Moccur Results for `\\(.*\\)'" nil t) - (setq pattern (match-string 1)) - (forward-line 0) - (when (re-search-forward "^$" nil t) - (forward-line 1)) - (let ((inhibit-read-only t) - (buffer (current-buffer)) - (buflst helm-multi-occur-buffer-list)) - (delete-region (point) (point-max)) - (message "Reverting buffer...") - (save-excursion - (with-temp-buffer - (insert - "\n" - (cl-loop for buf in buflst - for bufstr = (or (and (buffer-live-p (get-buffer buf)) - (with-current-buffer buf - (buffer-string))) - "") - unless (string= bufstr "") - do (add-text-properties - 0 (length bufstr) - `(buffer-name ,(buffer-name (get-buffer buf))) - bufstr) - concat bufstr) - "\n") - (goto-char (point-min)) - (cl-loop while (re-search-forward pattern nil t) - for line = (helm-moccur-get-line (point-at-bol) (point-at-eol)) - when line - do (with-current-buffer buffer - (insert - (propertize - (car (helm-moccur-filter-one-by-one line)) - 'helm-realvalue line) - "\n"))))) - (message "Reverting buffer done"))))) - - -;;; Predefined commands -;; -;; - -;;;###autoload -(defun helm-regexp () - "Preconfigured helm to build regexps. -`query-replace-regexp' can be run from there against found regexp." - (interactive) - (save-restriction - (when (and (helm-region-active-p) - ;; Don't narrow to region if buffer is already narrowed. - (not (helm-current-buffer-narrowed-p (current-buffer)))) - (narrow-to-region (region-beginning) (region-end))) - (helm :sources helm-source-regexp - :buffer "*helm regexp*" - :prompt "Regexp: " - :history 'helm-build-regexp-history))) - -;;;###autoload -(defun helm-occur () - "Preconfigured helm for Occur." - (interactive) - (helm-occur-init-source) - (let ((bufs (list (buffer-name (current-buffer))))) - (helm-attrset 'moccur-buffers bufs helm-source-occur) - (helm-set-local-variable 'helm-multi-occur-buffer-list bufs) - (helm-set-local-variable - 'helm-multi-occur-buffer-tick - (cl-loop for b in bufs - collect (buffer-chars-modified-tick (get-buffer b))))) - (helm :sources 'helm-source-occur - :buffer "*helm occur*" - :history 'helm-occur-history - :preselect (and (memq 'helm-source-occur helm-sources-using-default-as-input) - (format "%s:%d:" (regexp-quote (buffer-name)) - (line-number-at-pos (point)))) - :truncate-lines helm-moccur-truncate-lines)) - -;;;###autoload -(defun helm-occur-from-isearch () - "Invoke `helm-occur' from isearch." - (interactive) - (let ((input (if isearch-regexp - isearch-string - (regexp-quote isearch-string))) - (bufs (list (buffer-name (current-buffer))))) - (isearch-exit) - (helm-occur-init-source) - (helm-attrset 'moccur-buffers bufs helm-source-occur) - (helm-set-local-variable 'helm-multi-occur-buffer-list bufs) - (helm-set-local-variable - 'helm-multi-occur-buffer-tick - (cl-loop for b in bufs - collect (buffer-chars-modified-tick (get-buffer b)))) - (helm :sources 'helm-source-occur - :buffer "*helm occur*" - :history 'helm-occur-history - :input input - :truncate-lines helm-moccur-truncate-lines))) - -;;;###autoload -(defun helm-multi-occur-from-isearch (&optional _arg) - "Invoke `helm-multi-occur' from isearch. - -With a prefix arg, reverse the behavior of -`helm-moccur-always-search-in-current'. -The prefix arg can be set before calling -`helm-multi-occur-from-isearch' or during the buffer selection." - (interactive "p") - (let (buf-list - helm-moccur-always-search-in-current - (input (if isearch-regexp - isearch-string - (regexp-quote isearch-string)))) - (isearch-exit) - (setq buf-list (helm-comp-read "Buffers: " - (helm-buffer-list) - :name "Occur in buffer(s)" - :marked-candidates t)) - (setq helm-moccur-always-search-in-current - (if (or current-prefix-arg - helm-current-prefix-arg) - (not helm-moccur-always-search-in-current) - helm-moccur-always-search-in-current)) - (helm-multi-occur-1 buf-list input))) - - -(provide 'helm-regexp) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-regexp.el ends here diff --git a/elpa/helm-20160105.2046/helm-ring.el b/elpa/helm-20160105.2046/helm-ring.el deleted file mode 100644 index 04df6ae5..00000000 --- a/elpa/helm-20160105.2046/helm-ring.el +++ /dev/null @@ -1,470 +0,0 @@ -;;; helm-ring.el --- kill-ring, mark-ring, and register browsers for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) -(require 'helm-help) -(require 'helm-elisp) - -(declare-function undo-tree-restore-state-from-register "ext:undo-tree.el" (register)) - - -(defgroup helm-ring nil - "Ring related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-kill-ring-threshold 3 - "Minimum length of a candidate to be listed by `helm-source-kill-ring'." - :type 'integer - :group 'helm-ring) - -(defcustom helm-kill-ring-max-lines-number 5 - "Max number of lines displayed per candidate in kill-ring browser. -If nil or zero (disabled), don't truncate candidate, show all." - :type '(choice (const :tag "Disabled" nil) - (integer :tag "Max number of lines")) - :group 'helm-ring) - -(defcustom helm-register-max-offset 160 - "Max size of string register entries before truncating." - :group 'helm-ring - :type 'integer) - -(defcustom helm-kill-ring-actions - '(("Yank" . helm-kill-ring-action) - ("Delete" . (lambda (_candidate) - (cl-loop for cand in (helm-marked-candidates) - do (setq kill-ring - (delete cand kill-ring)))))) - "List of actions for kill ring source." - :group 'helm-ring - :type '(alist :key-type string :value-type function)) - - -;;; Kill ring -;; -;; -(defvar helm-kill-ring-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-y") 'helm-next-line) - (define-key map (kbd "M-u") 'helm-previous-line) - map) - "Keymap for `helm-show-kill-ring'.") - -(defvar helm-source-kill-ring - (helm-build-sync-source "Kill Ring" - :init (lambda () (helm-attrset 'last-command last-command)) - :candidates #'helm-kill-ring-candidates - :filtered-candidate-transformer #'helm-kill-ring-transformer - :action 'helm-kill-ring-actions - :persistent-action (lambda (_candidate) (ignore)) - :persistent-help "DoNothing" - :keymap helm-kill-ring-map - :migemo t - :multiline t) - "Source for browse and insert contents of kill-ring.") - -(defun helm-kill-ring-candidates () - (cl-loop for kill in (helm-fast-remove-dups kill-ring :test 'equal) - unless (or (< (length kill) helm-kill-ring-threshold) - (string-match "\\`[\n[:blank:]]+\\'" kill)) - collect kill)) - -(defun helm-kill-ring-transformer (candidates _source) - "Display only the `helm-kill-ring-max-lines-number' lines of candidate." - (cl-loop for i in candidates - when (get-text-property 0 'read-only i) - do (set-text-properties 0 (length i) '(read-only nil) i) - for nlines = (with-temp-buffer (insert i) (count-lines (point-min) (point-max))) - if (and helm-kill-ring-max-lines-number - (> nlines helm-kill-ring-max-lines-number)) - collect (cons - (with-temp-buffer - (insert i) - (goto-char (point-min)) - (concat - (buffer-substring - (point-min) - (save-excursion - (forward-line helm-kill-ring-max-lines-number) - (point))) - "[...]")) i) - else collect i)) - -(defun helm-kill-ring-action (str) - "Insert STR in `kill-ring' and set STR to the head. -If this action is executed just after `yank', -replace with STR as yanked string." - (with-helm-current-buffer - (setq kill-ring (delete str kill-ring)) - (if (not (eq (helm-attr 'last-command helm-source-kill-ring) 'yank)) - (insert-for-yank str) - ;; from `yank-pop' - (let ((inhibit-read-only t) - (before (< (point) (mark t)))) - (if before - (funcall (or yank-undo-function 'delete-region) (point) (mark t)) - (funcall (or yank-undo-function 'delete-region) (mark t) (point))) - (setq yank-undo-function nil) - (set-marker (mark-marker) (point) helm-current-buffer) - (insert-for-yank str) - ;; Set the window start back where it was in the yank command, - ;; if possible. - (set-window-start (selected-window) yank-window-start t) - (when before - ;; This is like exchange-point-and-mark, but doesn't activate the mark. - ;; It is cleaner to avoid activation, even though the command - ;; loop would deactivate the mark because we inserted text. - (goto-char (prog1 (mark t) - (set-marker (mark-marker) (point) helm-current-buffer)))))) - (kill-new str))) - - -;;;; -;; DO NOT use these sources with other sources use -;; the commands `helm-mark-ring', `helm-global-mark-ring' or -;; `helm-all-mark-rings' instead. - -(defun helm-mark-ring-line-string-at-pos (pos) - "Return line string at position POS." - (save-excursion - (goto-char pos) - (forward-line 0) - (let ((line (car (split-string (thing-at-point 'line) "[\n\r]")))) - (if (string= "" line) - "" - line)))) - -(defun helm-mark-ring-get-candidates () - (with-helm-current-buffer - (cl-loop with marks = (if (mark t) (cons (mark-marker) mark-ring) mark-ring) - for i in marks - with max-line-number = (line-number-at-pos (point-max)) - with width = (length (number-to-string max-line-number)) - for m = (format (concat "%" (number-to-string width) "d: %s") - (line-number-at-pos i) - (helm-mark-ring-line-string-at-pos i)) - unless (and recip (member m recip)) - collect m into recip - finally return recip))) - -(defvar helm-source-mark-ring - (helm-build-sync-source "mark-ring" - :candidates #'helm-mark-ring-get-candidates - :action '(("Goto line" - . (lambda (candidate) - (helm-goto-line (string-to-number candidate))))) - :persistent-action (lambda (candidate) - (helm-goto-line (string-to-number candidate)) - (helm-highlight-current-line)) - :persistent-help "Show this line")) - -;;; Global-mark-ring -(defvar helm-source-global-mark-ring - (helm-build-sync-source "global-mark-ring" - :candidates #'helm-global-mark-ring-get-candidates - :action '(("Goto line" - . (lambda (candidate) - (let ((items (split-string candidate ":"))) - (switch-to-buffer (cl-second items)) - (helm-goto-line (string-to-number (car items))))))) - :persistent-action (lambda (candidate) - (let ((items (split-string candidate ":"))) - (switch-to-buffer (cl-second items)) - (helm-goto-line (string-to-number (car items))) - (helm-highlight-current-line))) - :persistent-help "Show this line")) - -(defun helm-global-mark-ring-format-buffer (marker) - (with-current-buffer (marker-buffer marker) - (goto-char marker) - (forward-line 0) - (let ((line (pcase (thing-at-point 'line) - ((and line (pred stringp) - (guard (not (string-match-p "\\`\n?\\'" line)))) - (car (split-string line "[\n\r]"))) - (_ "")))) - (format "%7d:%s: %s" - (line-number-at-pos) (marker-buffer marker) line)))) - -(defun helm-global-mark-ring-get-candidates () - (let ((marks global-mark-ring)) - (when marks - (cl-loop for i in marks - for mb = (marker-buffer i) - for gm = (unless (or (string-match "^ " (format "%s" mb)) - (null mb)) - (helm-global-mark-ring-format-buffer i)) - when (and gm (not (member gm recip))) - collect gm into recip - finally return recip)))) - -(defun helm--push-mark (&optional location nomsg activate) - "[Internal] Don't use directly, use instead `helm-push-mark-mode'." - (unless (null (mark t)) - (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring)) - (when (> (length mark-ring) mark-ring-max) - (move-marker (car (nthcdr mark-ring-max mark-ring)) nil) - (setcdr (nthcdr (1- mark-ring-max) mark-ring) nil))) - (set-marker (mark-marker) (or location (point)) (current-buffer)) - ;; Now push the mark on the global mark ring. - (setq global-mark-ring (cons (copy-marker (mark-marker)) - ;; Avoid having multiple entries - ;; for same buffer in `global-mark-ring'. - (cl-loop with mb = (current-buffer) - for m in global-mark-ring - for nmb = (marker-buffer m) - unless (eq mb nmb) - collect m))) - (when (> (length global-mark-ring) global-mark-ring-max) - (move-marker (car (nthcdr global-mark-ring-max global-mark-ring)) nil) - (setcdr (nthcdr (1- global-mark-ring-max) global-mark-ring) nil)) - (or nomsg executing-kbd-macro (> (minibuffer-depth) 0) - (message "Mark set")) - (when (or activate (not transient-mark-mode)) - (set-mark (mark t))) - nil) - -(defadvice push-mark (around helm-push-mark-mode) - (helm--push-mark location nomsg activate)) - -;;;###autoload -(define-minor-mode helm-push-mark-mode - "Provide an improved version of `push-mark'. -Modify the behavior of `push-mark' to update -the `global-mark-ring' after each new visit." - :group 'helm-ring - :global t - (if helm-push-mark-mode - (if (fboundp 'advice-add) - (advice-add 'push-mark :override #'helm--push-mark) - (ad-activate 'push-mark)) - (if (fboundp 'advice-remove) - (advice-remove 'push-mark #'helm--push-mark) - (ad-deactivate 'push-mark)))) - -;;;; -;;; Insert from register -(defvar helm-source-register - (helm-build-sync-source "Registers" - :candidates #'helm-register-candidates - :action-transformer #'helm-register-action-transformer - :persistent-help "" - :multiline t - :action '(("Delete Register(s)" . - (lambda (_candidate) - (cl-loop for candidate in (helm-marked-candidates) - for register = (car candidate) - do (setq register-alist - (delq (assoc register register-alist) - register-alist))))))) - "See (info \"(emacs)Registers\")") - -(defun helm-register-candidates () - "Collecting register contents and appropriate commands." - (cl-loop for (char . val) in register-alist - for key = (single-key-description char) - for string-actions = - (cond - ((numberp val) - (list (int-to-string val) - 'insert-register - 'increment-register)) - ((markerp val) - (let ((buf (marker-buffer val))) - (if (null buf) - (list "a marker in no buffer") - (list (concat - "a buffer position:" - (buffer-name buf) - ", position " - (int-to-string (marker-position val))) - 'jump-to-register - 'insert-register)))) - ((and (consp val) (window-configuration-p (car val))) - (list "window configuration." - 'jump-to-register)) - ((and (vectorp val) - (fboundp 'undo-tree-register-data-p) - (undo-tree-register-data-p (elt val 1))) - (list - "Undo-tree entry." - 'undo-tree-restore-state-from-register)) - ((or (and (vectorp val) (eq 'registerv (aref val 0))) - (and (consp val) (frame-configuration-p (car val)))) - (list "frame configuration." - 'jump-to-register)) - ((and (consp val) (eq (car val) 'file)) - (list (concat "file:" - (prin1-to-string (cdr val)) - ".") - 'jump-to-register)) - ((and (consp val) (eq (car val) 'file-query)) - (list (concat "file:a file-query reference: file " - (car (cdr val)) - ", position " - (int-to-string (car (cdr (cdr val)))) - ".") - 'jump-to-register)) - ((consp val) - (let ((lines (format "%4d" (length val)))) - (list (format "%s: %s\n" lines - (truncate-string-to-width - (mapconcat 'identity (list (car val)) - "^J") (- (window-width) 15))) - 'insert-register))) - ((stringp val) - (list - ;; without properties - (concat (substring-no-properties - val 0 (min (length val) helm-register-max-offset)) - (if (> (length val) helm-register-max-offset) - "[...]" "")) - 'insert-register - 'append-to-register - 'prepend-to-register))) - unless (null string-actions) ; Fix Issue #1107. - collect (cons (format "Register %3s:\n %s" key (car string-actions)) - (cons char (cdr string-actions))))) - -(defun helm-register-action-transformer (actions register-and-functions) - "Decide actions by the contents of register." - (cl-loop with transformer-actions = nil - with func-actions = - '((insert-register - "Insert Register" . - (lambda (c) (insert-register (car c)))) - (jump-to-register - "Jump to Register" . - (lambda (c) (jump-to-register (car c)))) - (append-to-register - "Append Region to Register" . - (lambda (c) (append-to-register - (car c) (region-beginning) (region-end)))) - (prepend-to-register - "Prepend Region to Register" . - (lambda (c) (prepend-to-register - (car c) (region-beginning) (region-end)))) - (increment-register - "Increment Prefix Arg to Register" . - (lambda (c) (increment-register - helm-current-prefix-arg (car c)))) - (undo-tree-restore-state-from-register - "Restore Undo-tree register" - (lambda (c) (and (fboundp 'undo-tree-restore-state-from-register) - (undo-tree-restore-state-from-register (car c)))))) - for func in (cdr register-and-functions) - for cell = (assq func func-actions) - when cell - do (push (cdr cell) transformer-actions) - finally return (append (nreverse transformer-actions) actions))) - -;;;###autoload -(defun helm-mark-ring () - "Preconfigured `helm' for `helm-source-mark-ring'." - (interactive) - (helm :sources 'helm-source-mark-ring - :resume 'noresume - :buffer "*helm mark*")) - -;;;###autoload -(defun helm-global-mark-ring () - "Preconfigured `helm' for `helm-source-global-mark-ring'." - (interactive) - (helm :sources 'helm-source-global-mark-ring - :resume 'noresume - :buffer "*helm global mark*")) - -;;;###autoload -(defun helm-all-mark-rings () - "Preconfigured `helm' for `helm-source-global-mark-ring' and \ -`helm-source-mark-ring'." - (interactive) - (helm :sources '(helm-source-mark-ring - helm-source-global-mark-ring) - :resume 'noresume - :buffer "*helm mark ring*")) - -;;;###autoload -(defun helm-register () - "Preconfigured `helm' for Emacs registers." - (interactive) - (helm :sources 'helm-source-register - :resume 'noresume - :buffer "*helm register*")) - -;;;###autoload -(defun helm-show-kill-ring () - "Preconfigured `helm' for `kill-ring'. -It is drop-in replacement of `yank-pop'. - -First call open the kill-ring browser, next calls move to next line." - (interactive) - (let ((enable-recursive-minibuffers t)) - (helm :sources helm-source-kill-ring - :buffer "*helm kill ring*" - :resume 'noresume - :allow-nest t))) - -;;;###autoload -(defun helm-execute-kmacro () - "Preconfigured helm for keyboard macros. -Define your macros with `f3' and `f4'. -See (info \"(emacs) Keyboard Macros\") for detailed infos. -This command is useful when used with persistent action." - (interactive) - (helm :sources - (helm-build-sync-source "Kmacro" - :candidates (lambda () - (helm-fast-remove-dups - (cons (kmacro-ring-head) - kmacro-ring) - :test 'equal)) - :multiline t - :candidate-transformer - (lambda (candidates) - (cl-loop for c in candidates collect - (propertize (help-key-description (car c) nil) - 'helm-realvalue c))) - :persistent-help "Execute kmacro" - :help-message 'helm-kmacro-help-message - :action - (helm-make-actions - "Execute kmacro (`C-u ' to execute times)" - (lambda (candidate) - (interactive) - ;; Move candidate on top of list for next use. - (setq kmacro-ring (delete candidate kmacro-ring)) - (kmacro-push-ring) - (kmacro-split-ring-element candidate) - (kmacro-exec-ring-item - candidate helm-current-prefix-arg)))) - :buffer "*helm kmacro*")) - -(provide 'helm-ring) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-ring.el ends here diff --git a/elpa/helm-20160105.2046/helm-semantic.el b/elpa/helm-20160105.2046/helm-semantic.el deleted file mode 100644 index 13801826..00000000 --- a/elpa/helm-20160105.2046/helm-semantic.el +++ /dev/null @@ -1,223 +0,0 @@ -;;; helm-semantic.el --- Helm interface for Semantic -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Daniel Hackney -;; Author: Daniel Hackney - -;; 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 . - -;;; Commentary: - -;; Uses `candidates-in-buffer' for speed. - -;;; Code: - -(require 'cl-lib) -(require 'semantic) -(require 'helm-help) -(require 'helm-imenu) - -(declare-function pulse-momentary-highlight-one-line "pulse.el" (point &optional face)) - -(defgroup helm-semantic nil - "Semantic tags related libraries and applications for helm." - :group 'helm) - -(defcustom helm-semantic-lynx-style-map t - "Use Arrow keys to jump to occurences." - :group 'helm-semantic - :type 'boolean) - -(defcustom helm-semantic-display-style - '((python-mode . semantic-format-tag-summarize) - (c-mode . semantic-format-tag-concise-prototype-c-mode) - (emacs-lisp-mode . semantic-format-tag-abbreviate-emacs-lisp-mode)) - "Function to present a semantic tag according to `major-mode'. - -It is an alist where the `car' of each element is a `major-mode' and -the `cdr' a `semantic-format-tag-*' function. - -If no function is found for current `major-mode', fall back to -`semantic-format-tag-summarize' default function. - -You can have more or less informations depending of the `semantic-format-tag-*' -function you choose. - -All the supported functions are prefixed with \"semantic-format-tag-\", -you have completion on these functions with `C-M i' in the customize interface." - :group 'helm-semantic - :type '(alist :key-type symbol :value-type symbol)) - -;;; keymap -(defvar helm-semantic-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (when helm-semantic-lynx-style-map - (define-key map (kbd "") 'helm-maybe-exit-minibuffer) - (define-key map (kbd "") 'helm-execute-persistent-action)) - (delq nil map))) - -;; Internals vars -(defvar helm-semantic--tags-cache nil) - -(defun helm-semantic--fetch-candidates (tags depth &optional class) - "Write the contents of TAGS to the current buffer." - (let ((class class) cur-type - (stylefn (or (with-helm-current-buffer - (assoc-default major-mode helm-semantic-display-style)) - #'semantic-format-tag-summarize))) - (cl-dolist (tag tags) - (when (listp tag) - (cl-case (setq cur-type (semantic-tag-class tag)) - ((function variable type) - (let ((spaces (make-string (* depth 2) ?\s)) - (type-p (eq cur-type 'type))) - (unless (and (> depth 0) (not type-p)) - (setq class nil)) - (insert - (if (and class (not type-p)) - (format "%s%s(%s) " - spaces (if (< depth 2) "" "├►") class) - spaces) - ;; Save the tag for later - (propertize (funcall stylefn tag nil t) - 'semantic-tag tag) - "\n") - (and type-p (setq class (car tag))) - ;; Recurse to children - (unless (eq cur-type 'function) - (helm-semantic--fetch-candidates - (semantic-tag-components tag) (1+ depth) class)))) - - ;; Don't do anything with packages or includes for now - ((package include) - (insert - (propertize (funcall stylefn tag nil t) - 'semantic-tag tag) - "\n") - ) - ;; Catch-all - (t)))))) - -(defun helm-semantic-default-action (_candidate &optional persistent) - ;; By default, helm doesn't pass on the text properties of the selection. - ;; Fix this. - (helm-log-run-hook 'helm-goto-line-before-hook) - (with-current-buffer helm-buffer - (when (looking-at " ") - (goto-char (next-single-property-change - (point-at-bol) 'semantic-tag nil (point-at-eol)))) - (let ((tag (get-text-property (point) 'semantic-tag))) - (semantic-go-to-tag tag) - (unless persistent - (pulse-momentary-highlight-one-line (point)))))) - -(defun helm-semantic--maybe-set-needs-update () - (with-helm-current-buffer - (when (semantic-parse-tree-needs-update-p) - (semantic-parse-tree-set-needs-update)))) - -(defvar helm-source-semantic nil) - -(defclass helm-semantic-source (helm-source-in-buffer) - ((init :initform (lambda () - (helm-semantic--maybe-set-needs-update) - (setq helm-semantic--tags-cache (semantic-fetch-tags)) - (with-current-buffer (helm-candidate-buffer 'global) - (let ((major-mode (with-helm-current-buffer major-mode))) - (helm-semantic--fetch-candidates helm-semantic--tags-cache 0))))) - (get-line :initform 'buffer-substring) - (persistent-help :initform "Show this entry") - (keymap :initform 'helm-semantic-map) - (help-message :initform 'helm-semantic-help-message) - (persistent-action :initform (lambda (elm) - (helm-semantic-default-action elm t) - (helm-highlight-current-line))) - (action :initform 'helm-semantic-default-action))) - -(defcustom helm-semantic-fuzzy-match nil - "Enable fuzzy matching in `helm-source-semantic'." - :group 'helm-semantic - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-semantic - (helm-make-source "Semantic Tags" 'helm-semantic-source - :fuzzy-match helm-semantic-fuzzy-match)))) - -;;;###autoload -(defun helm-semantic (arg) - "Preconfigured `helm' for `semantic'. -If ARG is supplied, pre-select symbol at point instead of current" - (interactive "P") - (let ((tag (helm-aif (semantic-current-tag-parent) - (cons (format "\\_<%s\\_>" (car it)) - (format "\\_<%s\\_>" (car (semantic-current-tag)))) - (format "\\_<%s\\_>" (car (semantic-current-tag)))))) - (unless helm-source-semantic - (setq helm-source-semantic - (helm-make-source "Semantic Tags" 'helm-semantic-source - :fuzzy-match helm-semantic-fuzzy-match))) - (helm :sources 'helm-source-semantic - :candidate-number-limit 9999 - :preselect (if arg - (thing-at-point 'symbol) - tag) - :buffer "*helm semantic*"))) - -;;;###autoload -(defun helm-semantic-or-imenu (arg) - "Preconfigured helm for `semantic' or `imenu'. -If ARG is supplied, pre-select symbol at point instead of current -semantic tag in scope. - -If `semantic-mode' is active in the current buffer, then use -semantic for generating tags, otherwise fall back to `imenu'. -Fill in the symbol at point by default." - (interactive "P") - (unless helm-source-semantic - (setq helm-source-semantic - (helm-make-source "Semantic Tags" 'helm-semantic-source - :fuzzy-match helm-semantic-fuzzy-match))) - (unless helm-source-imenu - (setq helm-source-imenu - (helm-make-source "Imenu" 'helm-imenu-source - :fuzzy-match helm-imenu-fuzzy-match))) - (let* ((source (if (semantic-active-p) - 'helm-source-semantic - 'helm-source-imenu)) - (imenu-p (eq source 'helm-source-imenu)) - (imenu-auto-rescan imenu-p) - (helm-execute-action-at-once-if-one - (and imenu-p - helm-imenu-execute-action-at-once-if-one)) - (tag (helm-aif (semantic-current-tag-parent) - (cons (format "\\_<%s\\_>" (car it)) - (format "\\_<%s\\_>" (car (semantic-current-tag)))) - (format "\\_<%s\\_>" (car (semantic-current-tag)))))) - (helm :sources source - :candidate-number-limit 9999 - :preselect (if (or arg imenu-p) - (thing-at-point 'symbol) - tag) - :buffer "*helm semantic/imenu*"))) - -(provide 'helm-semantic) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-semantic.el ends here diff --git a/elpa/helm-20160105.2046/helm-sys.el b/elpa/helm-20160105.2046/helm-sys.el deleted file mode 100644 index 4c94ff21..00000000 --- a/elpa/helm-20160105.2046/helm-sys.el +++ /dev/null @@ -1,300 +0,0 @@ -;;; helm-sys.el --- System related functions for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-utils) - - -(defgroup helm-sys nil - "System related helm library." - :group 'helm) - -(defface helm-top-columns - '((t :inherit helm-header)) - "Face for helm help string in minibuffer." - :group 'helm-sys) - - -(defun helm-top-command-set-fn (var _value) - (set var - (cl-case system-type - (darwin "env COLUMNS=%s ps -axo pid,user,pri,nice,ucomm,tty,start,vsz,%%cpu,%%mem,etime,command") - (t "env COLUMNS=%s top -b -n 1")))) - -(defcustom helm-top-command "env COLUMNS=%s top -b -n 1" - "Top command used to display output of top. -To use top command, a version supporting batch mode (-b option) is needed. -On Mac OSX top command doesn't support this, so ps command -is used by default instead. -If you modify this the number and order of elements displayed -should be the same as top command to have the sort commands -working properly, that is 12 elements with the 2 first being -PID and USER and the last 4 being %CPU, %MEM, TIME and COMMAND. -A format string where %s will be replaced with `frame-width'." - :group 'helm-sys - :type 'string - :set 'helm-top-command-set-fn) - - -;;; Top (process) -;; -;; -(defvar helm-top-sort-fn nil) -(defvar helm-top-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-P") 'helm-top-run-sort-by-cpu) - (define-key map (kbd "M-C") 'helm-top-run-sort-by-com) - (define-key map (kbd "M-M") 'helm-top-run-sort-by-mem) - (define-key map (kbd "M-U") 'helm-top-run-sort-by-user) - map)) - -(defvar helm-source-top - (helm-build-in-buffer-source "Top" - :header-name (lambda (name) (concat name " (Press C-c C-u to refresh)")) - :init #'helm-top-init - :nomark t - :display-to-real #'helm-top-display-to-real - :persistent-action #'helm-top-sh-persistent-action - :persistent-help "SIGTERM" - :help-message 'helm-top-help-message - :follow 'never - :keymap helm-top-map - :filtered-candidate-transformer #'helm-top-sort-transformer - :action-transformer #'helm-top-action-transformer)) - -(defun helm-top-transformer (candidates _source) - "Transformer for `helm-top'. -Return empty string for non--valid candidates." - (cl-loop for disp in candidates collect - (cond ((string-match "^ *[0-9]+" disp) disp) - ((string-match "^ *PID" disp) - (cons (propertize disp 'face 'helm-top-columns) "")) - (t (cons disp ""))))) - -(defun helm-top-action-transformer (actions _candidate) - "Action transformer for `top'. -Show actions only on line starting by a PID." - (let ((disp (helm-get-selection nil t))) - (cond ((string-match "^ *[0-9]+" disp) - (list '("kill (SIGTERM)" . (lambda (pid) (helm-top-sh "TERM" pid))) - '("kill (SIGKILL)" . (lambda (pid) (helm-top-sh "KILL" pid))) - '("kill (SIGINT)" . (lambda (pid) (helm-top-sh "INT" pid))) - '("kill (Choose signal)" - . (lambda (pid) - (helm-top-sh - (helm-comp-read (format "Kill [%s] with signal: " pid) - '("ALRM" "HUP" "INT" "KILL" "PIPE" "POLL" - "PROF" "TERM" "USR1" "USR2" "VTALRM" - "STKFLT" "PWR" "WINCH" "CHLD" "URG" - "TSTP" "TTIN" "TTOU" "STOP" "CONT" - "ABRT" "FPE" "ILL" "QUIT" "SEGV" - "TRAP" "SYS" "EMT" "BUS" "XCPU" "XFSZ") - :must-match t) - pid))))) - (t actions)))) - -(defun helm-top-sh (sig pid) - "Run kill shell command with signal SIG on PID for `helm-top'." - (let ((cmd (format "kill -%s %s" sig pid))) - (message "Executed %s\n%s" cmd (shell-command-to-string cmd)))) - -(defun helm-top-sh-persistent-action (pid) - (delete-other-windows) - (helm-top-sh "TERM" pid) - (helm-force-update)) - -(defun helm-top-init () - "Insert output of top command in candidate buffer." - (unless helm-top-sort-fn (helm-top-set-mode-line "CPU")) - (with-current-buffer (helm-candidate-buffer 'global) - (call-process-shell-command - (format helm-top-command (frame-width)) - nil (current-buffer)))) - -(defun helm-top-display-to-real (line) - "Return pid only from LINE." - (car (split-string line))) - -;; Sort top command - -(defun helm-top-set-mode-line (str) - (if (string-match "Sort:\\[\\(.*\\)\\] " helm-top-mode-line) - (setq helm-top-mode-line (replace-match str nil nil helm-top-mode-line 1)) - (setq helm-top-mode-line (concat (format "Sort:[%s] " str) helm-top-mode-line)))) - -(defun helm-top-sort-transformer (candidates source) - (helm-top-transformer - (if helm-top-sort-fn - (cl-loop for c in candidates - if (string-match "^ *[0-9]+" c) - collect c into pid-cands - else collect c into header-cands - finally return (append - header-cands - (sort pid-cands helm-top-sort-fn))) - candidates) - source)) - -(defun helm-top-sort-by-com (s1 s2) - (let* ((split-1 (split-string s1)) - (split-2 (split-string s2)) - (com-1 (nth 11 split-1)) - (com-2 (nth 11 split-2))) - (string< com-1 com-2))) - -(defun helm-top-sort-by-mem (s1 s2) - (let* ((split-1 (split-string s1)) - (split-2 (split-string s2)) - (mem-1 (string-to-number (nth 9 split-1))) - (mem-2 (string-to-number (nth 9 split-2)))) - (> mem-1 mem-2))) - -(defun helm-top-sort-by-user (s1 s2) - (let* ((split-1 (split-string s1)) - (split-2 (split-string s2)) - (user-1 (nth 1 split-1)) - (user-2 (nth 1 split-2))) - (string< user-1 user-2))) - -(defun helm-top-run-sort-by-com () - (interactive) - (helm-top-set-mode-line "COM") - (setq helm-top-sort-fn 'helm-top-sort-by-com) - (helm-force-update)) - -(defun helm-top-run-sort-by-cpu () - (interactive) - (helm-top-set-mode-line "CPU") - (setq helm-top-sort-fn nil) - (helm-force-update)) - -(defun helm-top-run-sort-by-mem () - (interactive) - (helm-top-set-mode-line "MEM") - (setq helm-top-sort-fn 'helm-top-sort-by-mem) - (helm-force-update)) - -(defun helm-top-run-sort-by-user () - (interactive) - (helm-top-set-mode-line "USER") - (setq helm-top-sort-fn 'helm-top-sort-by-user) - (helm-force-update)) - - -;;; X RandR resolution change -;; -;; -;;; FIXME I do not care multi-display. - -(defun helm-xrandr-info () - "Return a pair with current X screen number and current X display name." - (with-temp-buffer - (call-process "xrandr" nil (current-buffer) nil - "--current") - (let (screen output) - (goto-char (point-min)) - (save-excursion - (when (re-search-forward "\\(^Screen \\)\\([0-9]\\):" nil t) - (setq screen (match-string 2)))) - (when (re-search-forward "^\\(.*\\) connected" nil t) - (setq output (match-string 1))) - (list screen output)))) - -(defun helm-xrandr-screen () - "Return current X screen number." - (car (helm-xrandr-info))) - -(defun helm-xrandr-output () - "Return current X display name." - (cadr (helm-xrandr-info))) - -(defvar helm-source-xrandr-change-resolution - '((name . "Change Resolution") - (candidates - . (lambda () - (with-temp-buffer - (call-process "xrandr" nil (current-buffer) nil - "--screen" (helm-xrandr-screen) "-q") - (goto-char 1) - (cl-loop with modes = nil - while (re-search-forward " \\([0-9]+x[0-9]+\\)" nil t) - for mode = (match-string 1) - unless (member mode modes) - collect mode into modes - finally return modes)))) - (action - ("Change Resolution" - . (lambda (mode) - (call-process "xrandr" nil nil nil - "--screen" (helm-xrandr-screen) - "--output" (helm-xrandr-output) - "--mode" mode)))))) - - -;;; Emacs process -;; -;; -(defvar helm-source-emacs-process - '((name . "Emacs Process") - (init . (lambda () (list-processes--refresh))) - (candidates . (lambda () (mapcar #'process-name (process-list)))) - (persistent-action . (lambda (elm) - (delete-process (get-process elm)) - (helm-delete-current-selection))) - (persistent-help . "Kill Process") - (action ("Kill Process" . (lambda (elm) - (delete-process (get-process elm))))))) - - -;;;###autoload -(defun helm-top () - "Preconfigured `helm' for top command." - (interactive) - (save-window-excursion - (unless helm-alive-p (delete-other-windows)) - (helm :sources 'helm-source-top - :buffer "*helm top*" :full-frame t - :candidate-number-limit 9999 - :preselect "^\\s-*[0-9]+"))) - -;;;###autoload -(defun helm-list-emacs-process () - "Preconfigured `helm' for emacs process." - (interactive) - (helm-other-buffer 'helm-source-emacs-process "*helm process*")) - -;;;###autoload -(defun helm-xrandr-set () - "Preconfigured helm for xrandr." - (interactive) - (helm :sources 'helm-source-xrandr-change-resolution - :buffer "*helm xrandr*")) - -(provide 'helm-sys) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-sys.el ends here diff --git a/elpa/helm-20160105.2046/helm-tags.el b/elpa/helm-20160105.2046/helm-tags.el deleted file mode 100644 index fb5c2adf..00000000 --- a/elpa/helm-20160105.2046/helm-tags.el +++ /dev/null @@ -1,344 +0,0 @@ -;;; helm-tags.el --- Helm for Etags. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-utils) -(require 'helm-grep) - - -(defgroup helm-tags nil - "Tags related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-etags-tag-file-name "TAGS" - "Etags tag file name." - :type 'string - :group 'helm-tags) - -(defcustom helm-etags-tag-file-search-limit 10 - "The limit level of directory to search tag file. -Don't search tag file deeply if outside this value." - :type 'number - :group 'helm-tags) - -(defcustom helm-etags-match-part-only 'tag - "Allow choosing the tag part of CANDIDATE in `helm-source-etags-select'. -A tag looks like this: - filename: \(defun foo -You can choose matching against only end part of tag (i.e \"foo\"), -against only the tag part (i.e \"(defun foo\"), -or against the whole candidate (i.e \"(filename: (defun foo\")." - :type '(choice - (const :tag "Match only tag" tag) - (const :tag "Match last part of tag" endtag) - (const :tag "Match all file+tag" all)) - :group 'helm-tags) - -(defcustom helm-etags-execute-action-at-once-if-one t - "Whether to jump straight to the selected tag if there's only -one match." - :type 'boolean - :group 'helm-tags) - - -(defgroup helm-tags-faces nil - "Customize the appearance of helm-tags faces." - :prefix "helm-" - :group 'helm-tags - :group 'helm-faces) - -(defface helm-etags-file - '((t (:foreground "Lightgoldenrod4" - :underline t))) - "Face used to highlight etags filenames." - :group 'helm-tags-faces) - - -;;; Etags -;; -;; -(defun helm-etags-run-switch-other-window () - "Run switch to other window action from `helm-source-etags-select'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (c) - (helm-etags-action-goto 'find-file-other-window c))))) - -(defun helm-etags-run-switch-other-frame () - "Run switch to other frame action from `helm-source-etags-select'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (c) - (helm-etags-action-goto 'find-file-other-frame c))))) - -(defvar helm-etags-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-c o") 'helm-etags-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-etags-run-switch-other-frame) - map) - "Keymap used in Etags.") - -(defvar helm-etags-mtime-alist nil - "Store the last modification time of etags files here.") -(defvar helm-etags-cache (make-hash-table :test 'equal) - "Cache content of etags files used here for faster access.") - -(defun helm-etags-get-tag-file (&optional directory) - "Return the path of etags file if found. -Lookes recursively in parents directorys for a -`helm-etags-tag-file-name' file." - ;; Get tag file from `default-directory' or upper directory. - (let ((current-dir (helm-etags-find-tag-file-directory - (or directory default-directory)))) - ;; Return nil if not find tag file. - (when current-dir - (expand-file-name helm-etags-tag-file-name current-dir)))) - -(defun helm-etags-all-tag-files () - "Return files from the following sources; - 1) An automatically located file in the parent directories, by `helm-etags-get-tag-file'. - 2) `tags-file-name', which is commonly set by `find-tag' command. - 3) `tags-table-list' which is commonly set by `visit-tags-table' command." - (helm-fast-remove-dups - (delq nil - (append (list (helm-etags-get-tag-file) - tags-file-name) - tags-table-list)) - :test 'equal)) - -(defun helm-etags-find-tag-file-directory (current-dir) - "Try to find the directory containing tag file. -If not found in CURRENT-DIR search in upper directory." - (let ((file-exists? (lambda (dir) - (let ((tag-path (expand-file-name - helm-etags-tag-file-name dir))) - (and (stringp tag-path) - (file-regular-p tag-path) - (file-readable-p tag-path)))))) - (cl-loop with count = 0 - until (funcall file-exists? current-dir) - ;; Return nil if outside the value of - ;; `helm-etags-tag-file-search-limit'. - if (= count helm-etags-tag-file-search-limit) - do (cl-return nil) - ;; Or search upper directories. - else - do (cl-incf count) - (setq current-dir (expand-file-name (concat current-dir "../"))) - finally return current-dir))) - -(defun helm-etags-get-header-name (_x) - "Create header name for this helm etags session." - (concat "Etags in " - (with-helm-current-buffer - (helm-etags-get-tag-file)))) - -(defun helm-etags-create-buffer (file) - "Create the `helm-buffer' based on contents of etags tag FILE." - (let* ((tag-fname file) - max - (split (with-current-buffer (find-file-noselect tag-fname) - (prog1 - (split-string (buffer-string) "\n" 'omit-nulls) - (setq max (line-number-at-pos (point-max))) - (kill-buffer)))) - (progress-reporter (make-progress-reporter "Loading tag file..." 0 max))) - (cl-loop - with fname - with cand - for i in split for count from 0 - for elm = (unless (string-match "^\x0c" i) ;; "^L" - (helm-aif (string-match "\177" i) ;; "^?" - (substring i 0 it) - i)) - for linum = (when (string-match "[0-9]+,?[0-9]*$" i) - (car (split-string (match-string 0 i) ","))) - do (cond ((and elm (string-match "^\\([^,]+\\),[0-9]+$" elm)) - (setq fname (propertize (match-string 1 elm) - 'face 'helm-etags-file))) - (elm (setq cand (format "%s:%s:%s" fname linum elm))) - (t (setq cand nil))) - when cand do (progn - (insert (propertize (concat cand "\n") 'linum linum)) - (progress-reporter-update progress-reporter count))))) - -(defun helm-etags-init () - "Feed `helm-buffer' using `helm-etags-cache' or tag file. -If no entry in cache, create one." - (let ((tagfiles (helm-etags-all-tag-files))) - (when tagfiles - (with-current-buffer (helm-candidate-buffer 'global) - (dolist (f tagfiles) - (helm-aif (gethash f helm-etags-cache) - ;; An entry is present in cache, insert it. - (insert it) - ;; No entry, create a new buffer using content of tag file (slower). - (helm-etags-create-buffer f) - ;; Store content of buffer in cache. - (puthash f (buffer-string) helm-etags-cache) - ;; Store or set the last modification of tag file. - (helm-aif (assoc f helm-etags-mtime-alist) - ;; If an entry exists modify it. - (setcdr it (helm-etags-mtime f)) - ;; No entry create a new one. - (add-to-list 'helm-etags-mtime-alist - (cons f (helm-etags-mtime f)))))))))) - -(defvar helm-source-etags-select nil - "Helm source for Etags.") - -(defun helm-etags-build-source () - (helm-build-in-buffer-source "Etags" - :header-name 'helm-etags-get-header-name - :init 'helm-etags-init - :get-line 'buffer-substring - :match-part (lambda (candidate) - ;; Match only the tag part of CANDIDATE - ;; and not the filename. - (cl-ecase helm-etags-match-part-only - (endtag (cadr (split-string - (cl-caddr (helm-grep-split-line candidate))))) - (tag (cl-caddr (helm-grep-split-line candidate))) - (all candidate))) - :fuzzy-match helm-etags-fuzzy-match - :help-message 'helm-etags-help-message - :keymap helm-etags-map - :action '(("Go to tag" . (lambda (c) - (helm-etags-action-goto 'find-file c))) - ("Go to tag in other window" . (lambda (c) - (helm-etags-action-goto - 'find-file-other-window - c))) - ("Go to tag in other frame" . (lambda (c) - (helm-etags-action-goto - 'find-file-other-frame - c)))) - :persistent-help "Go to line" - :persistent-action (lambda (candidate) - (helm-etags-action-goto 'find-file candidate) - (helm-highlight-current-line)))) - -(defcustom helm-etags-fuzzy-match nil - "Use fuzzy matching in `helm-etags-select'." - :group 'helm-tags - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-etags-select - (helm-etags-build-source)))) - -(defvar find-tag-marker-ring) - -(defun helm-etags-action-goto (switcher candidate) - "Helm default action to jump to an etags entry in other window." - (require 'etags) - (helm-log-run-hook 'helm-goto-line-before-hook) - (let* ((split (helm-grep-split-line candidate)) - (fname (cl-loop for tagf being the hash-keys of helm-etags-cache - for f = (expand-file-name - (car split) (file-name-directory tagf)) - when (file-exists-p f) - return f)) - (elm (cl-caddr split)) - (linum (string-to-number (cadr split)))) - (if (null fname) - (error "file %s not found" fname) - (ring-insert find-tag-marker-ring (point-marker)) - (funcall switcher fname) - (helm-goto-line linum t) - (when (search-forward elm nil t) - (goto-char (match-beginning 0)))))) - -(defun helm-etags-mtime (file) - "Last modification time of etags tag FILE." - (cadr (nth 5 (file-attributes file)))) - -(defun helm-etags-file-modified-p (file) - "Check if tag FILE have been modified in this session. -If FILE is nil return nil." - (let ((last-modif (and file - (assoc-default file helm-etags-mtime-alist)))) - (and last-modif - (/= last-modif (helm-etags-mtime file))))) - -;;;###autoload -(defun helm-etags-select (reinit) - "Preconfigured helm for etags. -If called with a prefix argument REINIT -or if any of the tag files have been modified, reinitialize cache. - -This function aggregates three sources of tag files: - - 1) An automatically located file in the parent directories, - by `helm-etags-get-tag-file'. - 2) `tags-file-name', which is commonly set by `find-tag' command. - 3) `tags-table-list' which is commonly set by `visit-tags-table' command." - (interactive "P") - (let ((tag-files (helm-etags-all-tag-files)) - (helm-execute-action-at-once-if-one - helm-etags-execute-action-at-once-if-one) - (str (if (region-active-p) - (buffer-substring-no-properties - (region-beginning) (region-end)) - ;; Use a raw syntax-table to determine tap. - ;; This may be wrong when calling etags - ;; with hff from a buffer that use - ;; a different syntax, but most of the time it - ;; should be better. - (with-syntax-table (standard-syntax-table) - (thing-at-point 'symbol))))) - (if (cl-notany 'file-exists-p tag-files) - (message "Error: No tag file found.\ -Create with etags shell command, or visit with `find-tag' or `visit-tags-table'.") - (cl-loop for k being the hash-keys of helm-etags-cache - unless (member k tag-files) - do (remhash k helm-etags-cache)) - (mapc (lambda (f) - (when (or (equal reinit '(4)) - (and helm-etags-mtime-alist - (helm-etags-file-modified-p f))) - (remhash f helm-etags-cache))) - tag-files) - (unless helm-source-etags-select - (setq helm-source-etags-select - (helm-etags-build-source))) - (helm :sources 'helm-source-etags-select - :keymap helm-etags-map - :default (if helm-etags-fuzzy-match - str - (list (concat "\\_<" str "\\_>") str)) - :buffer "*helm etags*")))) - -(provide 'helm-tags) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-tags.el ends here diff --git a/elpa/helm-20160105.2046/helm-types.el b/elpa/helm-20160105.2046/helm-types.el deleted file mode 100644 index d622d3fd..00000000 --- a/elpa/helm-20160105.2046/helm-types.el +++ /dev/null @@ -1,274 +0,0 @@ -;;; helm-types.el --- Helm types classes and methods. -*- lexical-binding: t -*- - -;; Copyright (C) 2015 Thierry Volpiatto - -;; Author: Thierry Volpiatto -;; URL: http://github.com/emacs-helm/helm - -;; 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 . - - -;;; Code: - -(require 'cl-lib) -(require 'eieio) - - -;; Files -(defclass helm-type-file (helm-source) () - "A class to define helm type file.") - -(defmethod helm-source-get-action-from-type ((object helm-type-file)) - (slot-value object 'action)) - -(defun helm-actions-from-type-file () - (let ((source (make-instance 'helm-type-file))) - (helm--setup-source source) - (helm-source-get-action-from-type source))) - -(defcustom helm-type-file-actions - (helm-make-actions - "Find file" 'helm-find-many-files - "Find file as root" 'helm-find-file-as-root - "Find file other window" 'helm-find-files-other-window - "Find file other frame" 'find-file-other-frame - "Open dired in file's directory" 'helm-open-dired - "Grep File(s) `C-u recurse'" 'helm-find-files-grep - "Zgrep File(s) `C-u Recurse'" 'helm-ff-zgrep - "Pdfgrep File(s)" 'helm-ff-pdfgrep - "Insert as org link" 'helm-files-insert-as-org-link - "Checksum File" 'helm-ff-checksum - "Ediff File" 'helm-find-files-ediff-files - "Ediff Merge File" 'helm-find-files-ediff-merge-files - "Etags `M-., C-u reload tag file'" 'helm-ff-etags-select - "View file" 'view-file - "Insert file" 'insert-file - "Add marked files to file-cache" 'helm-ff-cache-add-file - "Delete file(s)" 'helm-delete-marked-files - "Copy file(s) `M-C, C-u to follow'" 'helm-find-files-copy - "Rename file(s) `M-R, C-u to follow'" 'helm-find-files-rename - "Symlink files(s) `M-S, C-u to follow'" 'helm-find-files-symlink - "Relsymlink file(s) `C-u to follow'" 'helm-find-files-relsymlink - "Hardlink file(s) `M-H, C-u to follow'" 'helm-find-files-hardlink - "Open file externally (C-u to choose)" 'helm-open-file-externally - "Open file with default tool" 'helm-open-file-with-default-tool - "Find file in hex dump" 'hexl-find-file) - "Default actions for type files." - :group 'helm-files - :type '(alist :key-type string :value-type function)) - -(defmethod helm--setup-source :primary ((_source helm-type-file))) - -(defmethod helm--setup-source :before ((source helm-type-file)) - (set-slot-value source 'action 'helm-type-file-actions) - (set-slot-value source 'persistent-help "Show this file") - (set-slot-value source 'action-transformer '(helm-transform-file-load-el - helm-transform-file-browse-url - helm-transform-file-cache)) - (set-slot-value source 'candidate-transformer '(helm-skip-boring-files - helm-highlight-files - helm-w32-pathname-transformer))) - -;; Bookmarks -(defclass helm-type-bookmark (helm-source) () - "A class to define type bookmarks.") - -(defcustom helm-type-bookmark-actions - (helm-make-actions - "Jump to bookmark" 'helm-bookmark-jump - "Jump to BM other window" 'helm-bookmark-jump-other-window - "Bookmark edit annotation" 'bookmark-edit-annotation - "Bookmark show annotation" 'bookmark-show-annotation - "Delete bookmark(s)" 'helm-delete-marked-bookmarks - "Edit Bookmark" 'helm-bookmark-edit-bookmark - "Rename bookmark" 'helm-bookmark-rename - "Relocate bookmark" 'bookmark-relocate) - "Default actions for type bookmarks." - :group 'helm-bookmark - :type '(alist :key-type string - :value-type function)) - -(defmethod helm-source-get-action-from-type ((object helm-type-bookmark)) - (slot-value object 'action)) - -(defmethod helm--setup-source :primary ((_source helm-type-bookmark))) - -(defmethod helm--setup-source :before ((source helm-type-bookmark)) - (set-slot-value source 'action 'helm-type-bookmark-actions) - (set-slot-value source 'keymap helm-bookmark-map) - (set-slot-value source 'help-message 'helm-bookmark-help-message) - (set-slot-value source 'migemo t)) - - -;; Buffers -(defclass helm-type-buffer (helm-source) () - "A class to define type buffer.") - -(defcustom helm-type-buffer-actions - (helm-make-actions - "Switch to buffer(s)" 'helm-switch-to-buffers - (lambda () (and (locate-library "popwin") - "Switch to buffer in popup window")) - 'popwin:popup-buffer - "Switch to buffer(s) other window `C-c o'" - 'helm-switch-to-buffers-other-window - "Switch to buffer other frame `C-c C-o'" - 'switch-to-buffer-other-frame - (lambda () (and (locate-library "elscreen") - "Display buffer in Elscreen")) - 'helm-find-buffer-on-elscreen - "Query replace regexp `C-M-%'" - 'helm-buffer-query-replace-regexp - "Query replace `M-%'" 'helm-buffer-query-replace - "View buffer" 'view-buffer - "Display buffer" 'display-buffer - "Grep buffers `M-g s' (C-u grep all buffers)" - 'helm-zgrep-buffers - "Multi occur buffer(s) `C-s'" 'helm-multi-occur-as-action - "Revert buffer(s) `M-U'" 'helm-revert-marked-buffers - "Insert buffer" 'insert-buffer - "Kill buffer(s) `M-D'" 'helm-kill-marked-buffers - "Diff with file `C-='" 'diff-buffer-with-file - "Ediff Marked buffers `C-c ='" 'helm-ediff-marked-buffers - "Ediff Merge marked buffers `M-='" - (lambda (candidate) - (helm-ediff-marked-buffers candidate t))) - "Default actions for type buffers." - :group 'helm-buffers - :type '(alist :key-type string :value-type function)) - -(defmethod helm-source-get-action-from-type ((object helm-type-buffer)) - (slot-value object 'action)) - -(defmethod helm--setup-source :primary ((_source helm-type-buffer))) - -(defmethod helm--setup-source :before ((source helm-type-buffer)) - (set-slot-value source 'action 'helm-type-buffer-actions) - (set-slot-value source 'persistent-help "Show this buffer") - (set-slot-value - source 'filtered-candidate-transformer - '(helm-skip-boring-buffers - helm-buffers-sort-transformer - helm-highlight-buffers))) - -;; Functions -(defclass helm-type-function (helm-source) () - "A class to define helm type function.") - -(defcustom helm-type-function-actions - (helm-make-actions - "Describe command" 'describe-function - "Add command to kill ring" 'helm-kill-new - "Go to command's definition" 'find-function - "Debug on entry" 'debug-on-entry - "Cancel debug on entry" 'cancel-debug-on-entry - "Trace function" 'trace-function - "Trace function (background)" 'trace-function-background - "Untrace function" 'untrace-function) - "Default actions for type functions." - :group 'helm-elisp - :type '(alist :key-type string :value-type function)) - -(defmethod helm-source-get-action-from-type ((object helm-type-function)) - (slot-value object 'action)) - -(defun helm-actions-from-type-function () - (let ((source (make-instance 'helm-type-function))) - (helm--setup-source source) - (helm-source-get-action-from-type source))) - -(defmethod helm--setup-source :primary ((_source helm-type-function))) - -(defmethod helm--setup-source :before ((source helm-type-function)) - (set-slot-value source 'action 'helm-type-function-actions) - (set-slot-value source 'action-transformer - 'helm-transform-function-call-interactively) - (set-slot-value source 'candidate-transformer - 'helm-mark-interactive-functions) - (set-slot-value source 'coerce 'helm-symbolify)) - - -;; Commands -(defclass helm-type-command (helm-source) () - "A class to define helm type command.") - -(defun helm-actions-from-type-command () - (let ((source (make-instance 'helm-type-command))) - (helm--setup-source source) - (helm-source-get-action-from-type source))) - -(defcustom helm-type-command-actions - (append (helm-make-actions - "Call interactively" 'helm-call-interactively) - (helm-actions-from-type-function)) - "Default actions for type command." - :group 'helm-command - :type '(alist :key-type string :value-type function)) - -(defmethod helm--setup-source :primary ((_source helm-type-command))) - -(defmethod helm--setup-source :before ((source helm-type-command)) - (set-slot-value - source 'action 'helm-type-command-actions) - (set-slot-value source 'coerce 'helm-symbolify) - (set-slot-value source 'persistent-action 'describe-function)) - -;; Timers -(defclass helm-type-timers (helm-source) () - "A class to define helm type timers.") - -(defcustom helm-type-timers-actions - '(("Cancel Timer" . (lambda (_timer) - (let ((mkd (helm-marked-candidates))) - (cl-loop for timer in mkd - do (cancel-timer timer))))) - ("Describe Function" . (lambda (tm) - (describe-function (timer--function tm)))) - ("Find Function" . (lambda (tm) - (helm-aif (timer--function tm) - (if (byte-code-function-p it) - (message "Can't find anonymous function `%s'" it) - (find-function it)))))) - "Default actions for type timers." - :group 'helm-elisp - :type '(alist :key-type string :value-type function)) - -(defmethod helm--setup-source :primary ((_source helm-type-timers))) - -(defmethod helm--setup-source :before ((source helm-type-timers)) - (set-slot-value source 'action 'helm-type-timers-actions) - (set-slot-value source 'persistent-action - (lambda (tm) - (describe-function (timer--function tm)))) - (set-slot-value source 'persistent-help "Describe Function")) - -;; Builders. -(defun helm-build-type-file () - (helm-make-type 'helm-type-file)) - -(defun helm-build-type-function () - (helm-make-type 'helm-type-function)) - -(defun helm-build-type-command () - (helm-make-type 'helm-type-command)) - -(provide 'helm-types) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-types.el ends here diff --git a/elpa/helm-20160105.2046/helm-utils.el b/elpa/helm-20160105.2046/helm-utils.el deleted file mode 100644 index 3f28a791..00000000 --- a/elpa/helm-20160105.2046/helm-utils.el +++ /dev/null @@ -1,608 +0,0 @@ -;;; helm-utils.el --- Utilities Functions for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'compile) ; Fixme: Is this needed? -(require 'dired) - -(declare-function helm-find-files-1 "helm-files.el" (fname &optional preselect)) -(defvar winner-boring-buffers) - - -(defgroup helm-utils nil - "Utilities routines for Helm." - :group 'helm) - -(defcustom helm-su-or-sudo "sudo" - "What command to use for root access." - :type 'string - :group 'helm-utils) - -(defcustom helm-default-kbsize 1024.0 - "Default Kbsize to use for showing files size. -It is a float, usually 1024.0 but could be 1000.0 on some systems." - :group 'helm-utils - :type 'float) - -(defcustom helm-highlight-number-lines-around-point 15 - "Number of lines around point where matched items are highlighted." - :group 'helm-utils - :type 'integer) - -(defcustom helm-buffers-to-resize-on-pa nil - "A list of helm buffers where the helm-window should be reduced on persistent actions." - :group 'helm-utils - :type '(repeat (choice string))) - -(defcustom helm-resize-on-pa-text-height 12 - "The size of the helm-window when resizing on persistent action." - :group 'helm-utils - :type 'integer) - - -(defvar helm-goto-line-before-hook '(helm-save-current-pos-to-mark-ring) - "Run before jumping to line. -This hook run when jumping from `helm-goto-line', `helm-etags-default-action', -and `helm-imenu-default-action'. -This allow you to retrieve a previous position after using the different helm -tools for searching (etags, grep, gid, (m)occur etc...). -By default positions are added to `mark-ring' you can also add to register -by using instead (or adding) `helm-save-pos-to-register-before-jump'. -In this case last position is added to the register -`helm-save-pos-before-jump-register'.") - -(defvar helm-save-pos-before-jump-register ?_ - "The register where `helm-save-pos-to-register-before-jump' save position.") - - -;;; Faces. -;; -(defface helm-selection-line - '((t (:inherit highlight :distant-foreground "black"))) - "Face used in the `helm-current-buffer' when jumping to candidate." - :group 'helm-faces) - -(defface helm-match-item - '((t (:inherit isearch))) - "Face used to highlight item matched in a selected line." - :group 'helm-faces) - - -;; CUA workaround -(defadvice cua-delete-region (around helm-avoid-cua activate) - (ignore-errors ad-do-it)) - -(defadvice copy-region-as-kill (around helm-avoid-cua activate) - (if cua-mode - (ignore-errors ad-do-it) - ad-do-it)) - - -;;; Utils functions -;; -;; -(defun helm-switch-to-buffers (buffer-or-name &optional other-window) - "Switch to buffer BUFFER-OR-NAME. -If more than one buffer marked switch to these buffers in separate windows. -If OTHER-WINDOW is specified keep current-buffer and switch to others buffers -in separate windows." - (let* ((mkds (helm-marked-candidates)) - (size (/ (window-height) (length mkds)))) - (or (<= window-min-height size) - (error "Too many buffers to visit simultaneously.")) - (helm-aif (cdr mkds) - (progn - (if other-window - (switch-to-buffer-other-window (car mkds)) - (switch-to-buffer (car mkds))) - (save-selected-window - (cl-loop for b in it - do (progn - (select-window (split-window)) - (switch-to-buffer b))))) - (if other-window - (switch-to-buffer-other-window buffer-or-name) - (switch-to-buffer buffer-or-name))))) - -(defun helm-switch-to-buffers-other-window (buffer-or-name) - "switch to buffer BUFFER-OR-NAME in other window. -See `helm-switch-to-buffers' for switching to marked buffers." - (helm-switch-to-buffers buffer-or-name t)) - -(cl-defun helm-current-buffer-narrowed-p (&optional - (buffer helm-current-buffer)) - "Check if BUFFER is narrowed. -Default is `helm-current-buffer'." - (with-current-buffer buffer - (let ((beg (point-min)) - (end (point-max)) - (total (buffer-size))) - (or (/= beg 1) (/= end (1+ total)))))) - -(defun helm-goto-char (loc) - "Go to char, revealing if necessary." - (goto-char loc) - (when (or (eq major-mode 'org-mode) - (and (boundp 'outline-minor-mode) - outline-minor-mode)) - (require 'org) ; On some old Emacs versions org may not be loaded. - (org-reveal))) - -(defun helm-goto-line (lineno &optional noanim) - "Goto LINENO opening only outline headline if needed. -Animation is used unless NOANIM is non--nil." - (helm-log-run-hook 'helm-goto-line-before-hook) - (goto-char (point-min)) - (helm-goto-char (point-at-bol lineno)) - (unless noanim - (helm-highlight-current-line nil nil nil nil 'pulse))) - -(defun helm-save-pos-to-register-before-jump () - "Save current buffer position to `helm-save-pos-before-jump-register'. -To use this add it to `helm-goto-line-before-hook'." - (with-helm-current-buffer - (unless helm-in-persistent-action - (point-to-register helm-save-pos-before-jump-register)))) - -(defun helm-save-current-pos-to-mark-ring () - "Save current buffer position to mark ring. -To use this add it to `helm-goto-line-before-hook'." - (with-helm-current-buffer - (unless helm-in-persistent-action - (set-marker (mark-marker) (point)) - (push-mark (point) 'nomsg)))) - -;;;###autoload -(defun helm-show-all-in-this-source-only (arg) - "Show only current source of this helm session with all its candidates. -With a numeric prefix arg show only the ARG number of candidates." - (interactive "p") - (with-helm-window - (with-helm-default-directory (helm-default-directory) - (let ((helm-candidate-number-limit (and (> arg 1) arg))) - (helm-set-source-filter - (list (assoc-default 'name (helm-get-current-source)))))))) - -;;;###autoload -(defun helm-display-all-sources () - "Display all sources previously hidden by `helm-set-source-filter'." - (interactive) - (helm-set-source-filter nil)) - -(defun helm-displaying-source-names () - "Return the list of sources name for this helm session." - (with-current-buffer helm-buffer - (goto-char (point-min)) - (cl-loop with pos - while (setq pos (next-single-property-change (point) 'helm-header)) - do (goto-char pos) - collect (buffer-substring-no-properties (point-at-bol)(point-at-eol)) - do (forward-line 1)))) - -(defun helm-handle-winner-boring-buffers () - "Add `helm-buffer' to `winner-boring-buffers' when quitting/exiting helm. -Add this function to `helm-cleanup-hook' when you don't want to see helm buffers -after running winner-undo/redo." - (require 'winner) - (cl-pushnew helm-buffer winner-boring-buffers :test 'equal)) -(add-hook 'helm-cleanup-hook #'helm-handle-winner-boring-buffers) - -;;;###autoload -(defun helm-quit-and-find-file () - "Drop into `helm-find-files' from `helm'. -If current selection is a buffer or a file, `helm-find-files' -from its directory." - (interactive) - (require 'helm-grep) - (helm-run-after-exit - (lambda (f) - (if (file-exists-p f) - (helm-find-files-1 (file-name-directory f) - (concat - "^" - (regexp-quote - (if helm-ff-transformer-show-only-basename - (helm-basename f) f)))) - (helm-find-files-1 f))) - (let* ((sel (helm-get-selection)) - (grep-line (and (stringp sel) - (helm-grep-split-line sel))) - (bmk-name (and (stringp sel) - (not grep-line) - (replace-regexp-in-string "\\`\\*" "" sel))) - (bmk (and bmk-name (assoc bmk-name bookmark-alist))) - (buf (helm-aif (and (bufferp sel) (get-buffer sel)) - (buffer-name it))) - (default-preselection (or (buffer-file-name helm-current-buffer) - default-directory))) - (cond - ;; Buffer. - (buf (or (buffer-file-name sel) - (car (rassoc buf dired-buffers)) - (and (with-current-buffer buf - (eq major-mode 'org-agenda-mode)) - org-directory - (expand-file-name org-directory)) - (with-current-buffer buf default-directory))) - ;; Bookmark. - (bmk (helm-aif (bookmark-get-filename bmk) - (if (and ffap-url-regexp - (string-match ffap-url-regexp it)) - it (expand-file-name it)) - default-directory)) - ((or (file-remote-p sel) - (file-exists-p sel)) - (expand-file-name sel)) - ;; Grep. - ((and grep-line (file-exists-p (car grep-line))) - (expand-file-name (car grep-line))) - ;; Occur. - (grep-line - (with-current-buffer (get-buffer (car grep-line)) - (or (buffer-file-name) default-directory))) - ;; Url. - ((and ffap-url-regexp (string-match ffap-url-regexp sel)) sel) - ;; Default. - (t default-preselection))))) - -(defun helm-generic-sort-fn (s1 s2) - "Sort predicate function for helm candidates. -Args S1 and S2 can be single or \(display . real\) candidates, -that is sorting is done against real value of candidate." - (let* ((pattern (regexp-quote helm-pattern)) - (reg1 (concat "\\_<" pattern "\\_>")) - (reg2 (concat "\\_<" pattern)) - (reg3 helm-pattern) - (split (split-string pattern)) - (str1 (if (consp s1) (cdr s1) s1)) - (str2 (if (consp s2) (cdr s2) s2)) - (score (lambda (str r1 r2 r3 lst) - (+ (if (string-match (concat "\\`" pattern) str) 1 0) - (cond ((string-match r1 str) 5) - ((and (string-match " " pattern) - (string-match (concat "\\_<" (car lst)) str) - (cl-loop for r in (cdr lst) - always (string-match r str))) 4) - ((and (string-match " " pattern) - (cl-loop for r in lst always (string-match r str))) 3) - ((string-match r2 str) 2) - ((string-match r3 str) 1) - (t 0))))) - (sc1 (funcall score str1 reg1 reg2 reg3 split)) - (sc2 (funcall score str2 reg1 reg2 reg3 split))) - (cond ((or (zerop (string-width pattern)) - (and (zerop sc1) (zerop sc2))) - (string-lessp str1 str2)) - ((= sc1 sc2) - (< (length str1) (length str2))) - (t (> sc1 sc2))))) - -(defun helm-ff-get-host-from-tramp-invalid-fname (fname) - "Extract hostname from an incomplete tramp file name. -Return nil on valid file name remote or not." - (let* ((str (helm-basename fname)) - (split (split-string str ":")) - (meth (car (member (car split) (mapcar 'car tramp-methods))))) - (when (and meth (<= (length split) 2)) - (cadr split)))) - -(cl-defun helm-file-human-size (size &optional (kbsize helm-default-kbsize)) - "Return a string showing SIZE of a file in human readable form. -SIZE can be an integer or a float depending it's value. -`file-attributes' will take care of that to avoid overflow error. -KBSIZE if a floating point number, defaulting to `helm-default-kbsize'." - (let ((M (cons "M" (/ size (expt kbsize 2)))) - (G (cons "G" (/ size (expt kbsize 3)))) - (K (cons "K" (/ size kbsize))) - (B (cons "B" size))) - (cl-loop with result = B - for (a . b) in - (cl-loop for (x . y) in (list M G K B) - unless (< y 1) collect (cons x y)) - when (< b (cdr result)) do (setq result (cons a b)) - finally return (if (string= (car result) "B") - (format "%s" size) - (format "%.1f%s" (cdr result) (car result)))))) - -(cl-defun helm-file-attributes - (file &key type links uid gid access-time modif-time - status size mode gid-change inode device-num dired human-size - mode-type mode-owner mode-group mode-other (string t)) - "Return `file-attributes' elements of FILE separately according to key value. -Availables keys are: -- TYPE: Same as nth 0 `files-attributes' if STRING is nil - otherwise return either symlink, directory or file (default). -- LINKS: See nth 1 `files-attributes'. -- UID: See nth 2 `files-attributes'. -- GID: See nth 3 `files-attributes'. -- ACCESS-TIME: See nth 4 `files-attributes', however format time - when STRING is non--nil (the default). -- MODIF-TIME: See nth 5 `files-attributes', same as above. -- STATUS: See nth 6 `files-attributes', same as above. -- SIZE: See nth 7 `files-attributes'. -- MODE: See nth 8 `files-attributes'. -- GID-CHANGE: See nth 9 `files-attributes'. -- INODE: See nth 10 `files-attributes'. -- DEVICE-NUM: See nth 11 `files-attributes'. -- DIRED: A line similar to what 'ls -l' return. -- HUMAN-SIZE: The size in human form, see `helm-file-human-size'. -- MODE-TYPE, mode-owner,mode-group, mode-other: Split what - nth 7 `files-attributes' return in four categories. -- STRING: When non--nil (default) `helm-file-attributes' return - more friendly values. -If you want the same behavior as `files-attributes' , -\(but with return values in proplist\) use a nil value for STRING. -However when STRING is non--nil, time and type value are different from what -you have in `file-attributes'." - (let* ((all (cl-destructuring-bind - (type links uid gid access-time modif-time - status size mode gid-change inode device-num) - (file-attributes file string) - (list :type (if string - (cond ((stringp type) "symlink") ; fname - (type "directory") ; t - (t "file")) ; nil - type) - :links links - :uid uid - :gid gid - :access-time (if string - (format-time-string - "%Y-%m-%d %R" access-time) - access-time) - :modif-time (if string - (format-time-string - "%Y-%m-%d %R" modif-time) - modif-time) - :status (if string - (format-time-string - "%Y-%m-%d %R" status) - status) - :size size - :mode mode - :gid-change gid-change - :inode inode - :device-num device-num))) - (modes (helm-split-mode-file-attributes (cl-getf all :mode)))) - (cond (type (cl-getf all :type)) - (links (cl-getf all :links)) - (uid (cl-getf all :uid)) - (gid (cl-getf all :gid)) - (access-time (cl-getf all :access-time)) - (modif-time (cl-getf all :modif-time)) - (status (cl-getf all :status)) - (size (cl-getf all :size)) - (mode (cl-getf all :mode)) - (gid-change (cl-getf all :gid-change)) - (inode (cl-getf all :inode)) - (device-num (cl-getf all :device-num)) - (dired - (concat - (helm-split-mode-file-attributes (cl-getf all :mode) t) " " - (number-to-string (cl-getf all :links)) " " - (cl-getf all :uid) ":" - (cl-getf all :gid) " " - (if human-size - (helm-file-human-size (cl-getf all :size)) - (int-to-string (cl-getf all :size))) " " - (cl-getf all :modif-time))) - (human-size (helm-file-human-size (cl-getf all :size))) - (mode-type (cl-getf modes :mode-type)) - (mode-owner (cl-getf modes :user)) - (mode-group (cl-getf modes :group)) - (mode-other (cl-getf modes :other)) - (t (append all modes))))) - -(defun helm-split-mode-file-attributes (str &optional string) - "Split mode file attributes STR into a proplist. -If STRING is non--nil return instead a space separated string." - (cl-loop with type = (substring str 0 1) - with cdr = (substring str 1) - for i across cdr - for count from 1 - if (<= count 3) - concat (string i) into user - if (and (> count 3) (<= count 6)) - concat (string i) into group - if (and (> count 6) (<= count 9)) - concat (string i) into other - finally return - (if string - (mapconcat 'identity (list type user group other) " ") - (list :mode-type type :user user :group group :other other)))) - -(defmacro with-helm-display-marked-candidates (buffer-or-name candidates &rest body) - (declare (indent 0) (debug t)) - (helm-with-gensyms (buffer window) - `(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name)) - ,window) - (unwind-protect - (with-current-buffer ,buffer - (dired-format-columns-of-files ,candidates) - (select-window - (setq ,window (temp-buffer-window-show - ,buffer - '(display-buffer-below-selected - (window-height . fit-window-to-buffer))))) - (progn ,@body)) - (quit-window 'kill ,window))))) - -;;; Persistent Action Helpers -;; -;; -;; Internal -(defvar helm-match-line-overlay nil) -(defvar helm--match-item-overlays nil) - -(defun helm-highlight-current-line (&optional start end buf face pulse) - "Highlight and underline current position" - (let* ((start (or start (line-beginning-position))) - (end (or end (1+ (line-end-position)))) - (start-match (if (or (null helm-highlight-number-lines-around-point) - (zerop helm-highlight-number-lines-around-point)) - start - (save-excursion - (forward-line - (- helm-highlight-number-lines-around-point)) - (point-at-bol)))) - (end-match (if (or (null helm-highlight-number-lines-around-point) - (zerop helm-highlight-number-lines-around-point)) - end - (save-excursion - (forward-line - helm-highlight-number-lines-around-point) - (point-at-eol)))) - (args (list start end buf))) - (if (not helm-match-line-overlay) - (setq helm-match-line-overlay (apply 'make-overlay args)) - (apply 'move-overlay helm-match-line-overlay args)) - (overlay-put helm-match-line-overlay - 'face (or face 'helm-selection-line)) - (catch 'empty-line - (cl-loop with ov - for r in (helm-remove-if-match - "\\`!" (split-string helm-input)) - do (save-excursion - (goto-char start-match) - (while (condition-case _err - (if helm-migemo-mode - (helm-mm-migemo-forward r end-match t) - (re-search-forward r end-match t)) - (invalid-regexp nil)) - (let ((s (match-beginning 0)) - (e (match-end 0))) - (if (= s e) - (throw 'empty-line nil) - (push (setq ov (make-overlay s e)) - helm--match-item-overlays) - (overlay-put ov 'face 'helm-match-item) - (overlay-put ov 'priority 1))))))) - (recenter) - (when pulse - (sit-for 0.3) - (helm-match-line-cleanup)))) - -(defun helm-match-line-cleanup () - (when helm-match-line-overlay - (delete-overlay helm-match-line-overlay) - (setq helm-match-line-overlay nil)) - (when helm--match-item-overlays - (mapc 'delete-overlay helm--match-item-overlays))) - -(defun helm-match-line-update () - (when helm-match-line-overlay - (delete-overlay helm-match-line-overlay) - (helm-highlight-current-line))) - -(defun helm-persistent-autoresize-hook () - (when (and helm-buffers-to-resize-on-pa - (member helm-buffer helm-buffers-to-resize-on-pa) - (eq helm-split-window-state 'vertical)) - (set-window-text-height (helm-window) helm-resize-on-pa-text-height))) - -(add-hook 'helm-after-persistent-action-hook 'helm-persistent-autoresize-hook) -(add-hook 'helm-cleanup-hook 'helm-match-line-cleanup) -(add-hook 'helm-after-persistent-action-hook 'helm-match-line-update) - -(defun helm-open-file-with-default-tool (file) - "Open FILE with the default tool on this platform." - (let (process-connection-type) - (if (eq system-type 'windows-nt) - (helm-w32-shell-execute-open-file file) - (start-process "helm-open-file-with-default-tool" - nil - (cond ((eq system-type 'gnu/linux) - "xdg-open") - ((or (eq system-type 'darwin) ;; Mac OS X - (eq system-type 'macos)) ;; Mac OS 9 - "open")) - file)))) - -(defun helm-open-dired (file) - "Opens a dired buffer in FILE's directory. If FILE is a -directory, open this directory." - (if (file-directory-p file) - (dired file) - (dired (file-name-directory file)) - (dired-goto-file file))) - -(defun helm-require-or-error (feature function) - (or (require feature nil t) - (error "Need %s to use `%s'." feature function))) - -(defun helm-find-file-as-root (candidate) - (let* ((buf (helm-basename candidate)) - (host (file-remote-p candidate 'host)) - (remote-path (format "/%s:%s:%s" - helm-su-or-sudo - (or host "") - (expand-file-name - (if host - (file-remote-p candidate 'localname) - candidate)))) - non-essential) - (if (buffer-live-p (get-buffer buf)) - (progn - (set-buffer buf) - (find-alternate-file remote-path)) - (find-file remote-path)))) - -(defun helm-find-many-files (_ignore) - (let ((helm--reading-passwd-or-string t)) - (mapc 'find-file (helm-marked-candidates)))) - -(defun helm-read-repeat-string (prompt &optional count) - "Prompt as many time PROMPT is not empty. -If COUNT is non--nil add a number after each prompt." - (cl-loop with elm - while (not (string= elm "")) - for n from 1 - do (when count - (setq prompt (concat prompt (int-to-string n) ": "))) - collect (setq elm (helm-read-string prompt)) into lis - finally return (remove "" lis))) - -(defun helm-html-bookmarks-to-alist (file url-regexp bmk-regexp) - "Parse html bookmark FILE and return an alist with (title . url) as elements." - (let (bookmarks-alist url title) - (with-temp-buffer - (insert-file-contents file) - (goto-char (point-min)) - (while (re-search-forward "href=\\|^ *

$CONF_FILE <\`helm-find-files'\n\ -;; - \`occur'(M-s o) =>\`helm-occur'\n\ -;; - \`list-buffers'(C-x C-b) =>\`helm-buffers-list'\n\ -;; - \`completion-at-point'(M-tab) =>\`helm-lisp-completion-at-point'[1]\n\ -;; - \`dabbrev-expand'(M-/) =>\`helm-dabbrev'\n\n\ -;; - \`execute-extended-command'(M-x) =>\`helm-M-x'\n\n -;; Some others native emacs commands are \"helmized\" by \`helm-mode'.\n\ -;; [1] Coming with emacs-24.4 \`completion-at-point' is \"helmized\" by \`helm-mode'\n\ -;; which provide helm completion in many other places like \`shell-mode'.\n\ -;; You will find embeded help for most helm commands with \`C-h m'.\n\ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")) - -(setq package-user-dir (directory-file-name - (file-name-directory - (directory-file-name default-directory)))) -(unless (member "helm.el" (directory-files default-directory)) - (setq package-load-list '((helm-core t) (helm t) (async t) (popup t))) - (package-initialize)) -(add-to-list 'load-path (file-name-directory (file-truename "$0"))) -(setq default-frame-alist '((vertical-scroll-bars . nil) - (tool-bar-lines . 0) - (menu-bar-lines . 0) - (fullscreen . nil))) -(blink-cursor-mode -1) -(require 'helm-config) -(helm-mode 1) -(define-key global-map [remap find-file] 'helm-find-files) -(define-key global-map [remap occur] 'helm-occur) -(define-key global-map [remap list-buffers] 'helm-buffers-list) -(define-key global-map [remap dabbrev-expand] 'helm-dabbrev) -(global-set-key (kbd "M-x") 'helm-M-x) -(unless (boundp 'completion-in-region-function) - (define-key lisp-interaction-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point) - (define-key emacs-lisp-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point)) -(add-hook 'kill-emacs-hook #'(lambda () (and (file-exists-p "$CONF_FILE") (delete-file "$CONF_FILE")))) -EOF - -$EMACS -Q -l $CONF_FILE $@ - diff --git a/elpa/helm-20160217.958/helm-adaptive.el b/elpa/helm-20160217.958/helm-adaptive.el deleted file mode 100644 index 09cce1e7..00000000 --- a/elpa/helm-20160217.958/helm-adaptive.el +++ /dev/null @@ -1,244 +0,0 @@ -;;; helm-adaptive.el --- Adaptive Sorting of Candidates. -*- lexical-binding: t -*- - -;; Original Author: Tamas Patrovics - -;; Copyright (C) 2007 Tamas Patrovics -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) - - -(defgroup helm-adapt nil - "Adaptative sorting of candidates for Helm." - :group 'helm) - -(defcustom helm-adaptive-history-file - "~/.emacs.d/helm-adaptive-history" - "Path of file where history information is stored." - :type 'string - :group 'helm-adapt) - -(defcustom helm-adaptive-history-length 50 - "Maximum number of candidates stored for a source." - :type 'number - :group 'helm-adapt) - - -;; Internal -(defvar helm-adaptive-done nil - "nil if history information is not yet stored for the current -selection.") - -(defvar helm-adaptive-history nil - "Contains the stored history information. -Format: ((SOURCE-NAME (SELECTED-CANDIDATE (PATTERN . NUMBER-OF-USE) ...) ...) ...)") - -(defun helm-adaptive-done-reset () - (setq helm-adaptive-done nil)) - -;;;###autoload -(define-minor-mode helm-adaptive-mode - "Toggle adaptive sorting in all sources." - :group 'helm-adapt - :require 'helm-adaptive - :global t - (if helm-adaptive-mode - (progn - (unless helm-adaptive-history - (helm-adaptive-maybe-load-history)) - (add-hook 'kill-emacs-hook 'helm-adaptive-save-history) - ;; Should run at beginning of `helm-initial-setup'. - (add-hook 'helm-before-initialize-hook 'helm-adaptive-done-reset) - ;; Should run at beginning of `helm-exit-minibuffer'. - (add-hook 'helm-before-action-hook 'helm-adaptive-store-selection) - ;; Should run at beginning of `helm-select-action'. - (add-hook 'helm-select-action-hook 'helm-adaptive-store-selection)) - (helm-adaptive-save-history) - (setq helm-adaptive-history nil) - (remove-hook 'kill-emacs-hook 'helm-adaptive-save-history) - (remove-hook 'helm-before-initialize-hook 'helm-adaptive-done-reset) - (remove-hook 'helm-before-action-hook 'helm-adaptive-store-selection) - (remove-hook 'helm-select-action-hook 'helm-adaptive-store-selection))) - -(defun helm-adapt-use-adaptive-p (&optional source-name) - "Return current source only if it use adaptive history, nil otherwise." - (when helm-adaptive-mode - (let* ((source (or source-name (helm-get-current-source))) - (adapt-source (or (assoc-default 'filtered-candidate-transformer - (assoc (assoc-default 'type source) - helm-type-attributes)) - (assoc-default 'candidate-transformer - (assoc (assoc-default 'type source) - helm-type-attributes)) - (assoc-default 'filtered-candidate-transformer source) - (assoc-default 'candidate-transformer source)))) - (if (listp adapt-source) - (and (member 'helm-adaptive-sort adapt-source) source) - (and (eq adapt-source 'helm-adaptive-sort) source))))) - -(defun helm-adaptive-store-selection () - "Store history information for the selected candidate." - (unless helm-adaptive-done - (setq helm-adaptive-done t) - (let ((source (helm-adapt-use-adaptive-p))) - (when source - (let* ((source-name (or (assoc-default 'type source) - (assoc-default 'name source))) - (source-info (or (assoc source-name helm-adaptive-history) - (progn - (push (list source-name) helm-adaptive-history) - (car helm-adaptive-history)))) - (selection (helm-get-selection)) - (selection-info (progn - (setcdr source-info - (cons - (let ((found (assoc selection (cdr source-info)))) - (if (not found) - ;; new entry - (list selection) - ;; move entry to the beginning of the - ;; list, so that it doesn't get - ;; trimmed when the history is - ;; truncated - (setcdr source-info - (delete found (cdr source-info))) - found)) - (cdr source-info))) - (cadr source-info))) - (pattern-info (progn - (setcdr selection-info - (cons - (let ((found (assoc helm-pattern (cdr selection-info)))) - (if (not found) - ;; new entry - (cons helm-pattern 0) - - ;; move entry to the beginning of the - ;; list, so if two patterns used the - ;; same number of times then the one - ;; used last appears first in the list - (setcdr selection-info - (delete found (cdr selection-info))) - found)) - (cdr selection-info))) - (cadr selection-info)))) - - ;; increase usage count - (setcdr pattern-info (1+ (cdr pattern-info))) - - ;; truncate history if needed - (if (> (length (cdr selection-info)) helm-adaptive-history-length) - (setcdr selection-info - (cl-subseq (cdr selection-info) 0 helm-adaptive-history-length)))))))) - -(defun helm-adaptive-maybe-load-history () - "Load `helm-adaptive-history-file' which contain `helm-adaptive-history'. -Returns nil if `helm-adaptive-history-file' doesn't exist." - (when (file-readable-p helm-adaptive-history-file) - (load-file helm-adaptive-history-file))) - -(defun helm-adaptive-save-history (&optional arg) - "Save history information to file given by `helm-adaptive-history-file'." - (interactive "p") - (with-temp-buffer - (insert - ";; -*- mode: emacs-lisp -*-\n" - ";; History entries used for helm adaptive display.\n") - (prin1 `(setq helm-adaptive-history ',helm-adaptive-history) - (current-buffer)) - (insert ?\n) - (write-region (point-min) (point-max) helm-adaptive-history-file nil - (unless arg 'quiet)))) - -(defun helm-adaptive-sort (candidates source) - "Sort the CANDIDATES for SOURCE by usage frequency. -This is a filtered candidate transformer you can use with the -`filtered-candidate-transformer' attribute." - (let* ((source-name (or (assoc-default 'type source) - (assoc-default 'name source))) - (source-info (assoc source-name helm-adaptive-history))) - (if source-info - (let ((usage - ;; ... assemble a list containing the (CANIDATE . USAGE-COUNT) - ;; pairs - (mapcar (lambda (candidate-info) - (let ((count 0)) - (cl-dolist (pattern-info (cdr candidate-info)) - (if (not (equal (car pattern-info) - helm-pattern)) - (cl-incf count (cdr pattern-info)) - - ;; if current pattern is equal to the previously - ;; used one then this candidate has priority - ;; (that's why its count is boosted by 10000) and - ;; it only has to compete with other candidates - ;; which were also selected with the same pattern - (setq count (+ 10000 (cdr pattern-info))) - (cl-return))) - (cons (car candidate-info) count))) - (cdr source-info)))) - (if (and usage (consp usage)) - ;; sort the list in descending order, so candidates with highest - ;; priorty come first - (progn - (setq usage (sort usage (lambda (first second) - (> (cdr first) (cdr second))))) - - ;; put those candidates first which have the highest usage count - (cl-loop for (info . _freq) in usage - for member = (cl-member info candidates - :test 'helm-adaptive-compare) - when member collect (car member) into sorted - and do - (setq candidates (cl-remove info candidates - :test 'helm-adaptive-compare)) - finally return (append sorted candidates))) - (message "Your `%s' is maybe corrupted or too old, \ -you should reinitialize it with `helm-reset-adaptive-history'" - helm-adaptive-history-file) - (sit-for 1) - candidates)) - ;; if there is no information stored for this source then do nothing - candidates))) - -;;;###autoload -(defun helm-reset-adaptive-history () - "Delete all `helm-adaptive-history' and his file. -Useful when you have a old or corrupted `helm-adaptive-history-file'." - (interactive) - (when (y-or-n-p "Really delete all your `helm-adaptive-history'? ") - (setq helm-adaptive-history nil) - (delete-file helm-adaptive-history-file))) - -(defun helm-adaptive-compare (x y) - "Compare candidates X and Y taking into account that the -candidate can be in (DISPLAY . REAL) format." - (equal (if (listp x) (cdr x) x) - (if (listp y) (cdr y) y))) - - -(provide 'helm-adaptive) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-adaptive.el ends here diff --git a/elpa/helm-20160217.958/helm-apt.el b/elpa/helm-20160217.958/helm-apt.el deleted file mode 100644 index 53c84330..00000000 --- a/elpa/helm-20160217.958/helm-apt.el +++ /dev/null @@ -1,300 +0,0 @@ -;;; helm-apt.el --- Helm interface for Debian/Ubuntu packages (apt-*) -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) -(require 'helm-external) -(require 'helm-help) - -(declare-function term-line-mode "term") -(declare-function term-char-mode "term") -(declare-function term-send-input "term") -(declare-function term-send-eof "term") - - -(defgroup helm-apt nil - "Apt related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-apt-cache-show-function 'helm-apt-cache-show-1 - "Function of one argument used to show apt package. -Default is `helm-apt-cache-show-1' but you can use `apt-utils-show-package-1' -from `apt-utils.el' to have something more enhanced. -If nil default `helm-apt-cache-show-1' will be used." - :type 'function - :group 'helm-apt) - -(defcustom helm-apt-actions - '(("Show package description" . helm-apt-cache-show) - ("Install package(s)" . helm-apt-install) - ("Reinstall package(s)" . helm-apt-reinstall) - ("Remove package(s)" . helm-apt-uninstall) - ("Purge package(s)" . helm-apt-purge)) - "Actions for helm apt." - :group 'helm-apt - :type '(alist :key-type string :value-type function)) - -(defface helm-apt-installed - '((t (:foreground "green"))) - "Face used for apt installed candidates." - :group 'helm-apt) - -(defface helm-apt-deinstalled - '((t (:foreground "DimGray"))) - "Face used for apt deinstalled candidates." - :group 'helm-apt) - - -(defvar helm-apt-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-I") 'helm-apt-show-only-installed) - (define-key map (kbd "M-U") 'helm-apt-show-only-not-installed) - (define-key map (kbd "M-D") 'helm-apt-show-only-deinstalled) - (define-key map (kbd "M-A") 'helm-apt-show-all) - map)) - - -(defvar helm-source-apt - (helm-build-in-buffer-source "APT" - :init #'helm-apt-init - :candidate-transformer #'helm-apt-candidate-transformer - :display-to-real #'helm-apt-display-to-real - :update #'helm-apt-refresh - :keymap helm-apt-map - :help-message 'helm-apt-help-message - :action 'helm-apt-actions - :persistent-action #'helm-apt-persistent-action - :persistent-help "Show package description")) - -;;; Internals vars -(defvar helm-apt-search-command "apt-cache search '%s'") -(defvar helm-apt-show-command "apt-cache show '%s'") -(defvar helm-apt-installed-packages nil) -(defvar helm-apt-all-packages nil) -(defvar helm-apt-input-history nil) -(defvar helm-apt-show-only 'all) -(defvar helm-apt-term-buffer nil) -(defvar helm-apt-default-archs nil) - -(defun helm-apt-refresh () - "Refresh installed candidates list." - (setq helm-apt-installed-packages nil) - (setq helm-apt-all-packages nil)) - -(defun helm-apt-persistent-action (candidate) - "Persistent action for APT source." - (helm-apt-cache-show candidate)) - -(defun helm-apt--installed-package-name (name) - (cl-loop for arch in helm-apt-default-archs - thereis (or (assoc-default - name helm-apt-installed-packages) - (assoc-default - (format "%s:%s" name arch) - helm-apt-installed-packages)))) - -(defun helm-apt-candidate-transformer (candidates) - "Show installed CANDIDATES and the ones to deinstall in a different color." - (cl-loop for cand in candidates - for name = (helm-apt-display-to-real cand) - for deinstall = (string= - (helm-apt--installed-package-name name) - "deinstall") - for install = (string= - (helm-apt--installed-package-name name) - "install") - for show = (cond ((and deinstall - (memq helm-apt-show-only '(all deinstalled))) - (propertize cand 'face 'helm-apt-deinstalled)) - ((and install - (memq helm-apt-show-only '(all installed))) - (propertize cand 'face 'helm-apt-installed)) - ((and (eq helm-apt-show-only 'noinstalled) - (not install)) cand) - ((eq helm-apt-show-only 'all) cand)) - when show collect show)) - -(defun helm-apt-show-only-installed () - (interactive) - (with-helm-alive-p - (setq helm-apt-show-only 'installed) - (helm-update))) -(put 'helm-apt-show-only-installed 'helm-only t) - -(defun helm-apt-show-only-not-installed () - (interactive) - (with-helm-alive-p - (setq helm-apt-show-only 'noinstalled) - (helm-update))) -(put 'helm-apt-show-only-not-installed 'helm-only t) - -(defun helm-apt-show-only-deinstalled () - (interactive) - (with-helm-alive-p - (setq helm-apt-show-only 'deinstalled) - (helm-update))) -(put 'helm-apt-show-only-deinstalled 'helm-only t) - -(defun helm-apt-show-all () - (interactive) - (with-helm-alive-p - (setq helm-apt-show-only 'all) - (helm-update))) -(put 'helm-apt-show-all 'helm-only t) - -(defun helm-apt-init () - "Initialize list of debian packages." - (let ((query "")) - (unless (and helm-apt-installed-packages - helm-apt-all-packages) - (message "Loading package list...") - (setq helm-apt-installed-packages - (with-temp-buffer - (call-process-shell-command "dpkg --get-selections" - nil (current-buffer)) - (cl-loop for i in (split-string (buffer-string) "\n" t) - for p = (split-string i) - collect (cons (car p) (cadr p))))) - (helm-init-candidates-in-buffer - 'global - (setq helm-apt-all-packages - (with-temp-buffer - (call-process-shell-command - (format helm-apt-search-command query) - nil (current-buffer)) - (buffer-string)))) - (message "Loading package list done") - (sit-for 0.5)))) - -(defun helm-apt-display-to-real (line) - "Return only name of a debian package. -LINE is displayed like: -package name - description." - (car (split-string line " - "))) - -(defvar helm-apt-show-current-package nil) -(define-derived-mode helm-apt-show-mode - special-mode "helm-apt-show" - "Mode to display infos on apt packages.") - -(defun helm-apt-cache-show (package) - "Show information on apt package PACKAGE." - (if (and (functionp helm-apt-cache-show-function) - (not (eq helm-apt-cache-show-function - 'helm-apt-cache-show))) - ;; A function, call it. - (funcall helm-apt-cache-show-function package) - ;; nil or whatever use default. - (helm-apt-cache-show-1 package))) - -(defun helm-apt-cache-show-1 (package) - (let* ((command (format helm-apt-show-command package)) - (buf (get-buffer-create "*helm apt show*"))) - (switch-to-buffer buf) - (unless (string= package helm-apt-show-current-package) - (let ((inhibit-read-only t)) - (erase-buffer) - (save-excursion - (call-process-shell-command - command nil (current-buffer) t)))) - (helm-apt-show-mode) - (set (make-local-variable 'helm-apt-show-current-package) - package))) - -(defun helm-apt-install (_package) - "Run 'apt-get install' shell command on PACKAGE." - (helm-apt-generic-action :action 'install)) - -(defun helm-apt-reinstall (_package) - "Run 'apt-get install --reinstall' shell command on PACKAGE." - (helm-apt-generic-action :action 'reinstall)) - -(defun helm-apt-uninstall (_package) - "Run 'apt-get remove' shell command on PACKAGE." - (helm-apt-generic-action :action 'uninstall)) - -(defun helm-apt-purge (_package) - "Run 'apt-get purge' shell command on PACKAGE." - (helm-apt-generic-action :action 'purge)) - -(cl-defun helm-apt-generic-action (&key action) - "Run 'apt-get ACTION'. -Support install, remove and purge actions." - (if (and helm-apt-term-buffer - (buffer-live-p (get-buffer helm-apt-term-buffer))) - (switch-to-buffer helm-apt-term-buffer) - (ansi-term (getenv "SHELL") "term apt") - (setq helm-apt-term-buffer (buffer-name))) - (term-line-mode) - (let ((command (cl-case action - (install "sudo apt-get install ") - (reinstall "sudo apt-get install --reinstall ") - (uninstall "sudo apt-get remove ") - (purge "sudo apt-get purge ") - (t (error "Unknown action")))) - (beg (point)) - end - (cand-list (mapconcat (lambda (x) (format "'%s'" x)) - (helm-marked-candidates) " "))) - (goto-char (point-max)) - (insert (concat command cand-list)) - (setq end (point)) - (if (y-or-n-p (format "%s package(s)" (symbol-name action))) - (progn - (setq helm-external-commands-list nil) - (setq helm-apt-installed-packages nil) - (term-char-mode) (term-send-input)) - (delete-region beg end)))) - -;;;###autoload -(defun helm-apt (arg) - "Preconfigured `helm' : frontend of APT package manager. -With a prefix arg reload cache." - (interactive "P") - (setq helm-apt-show-only 'all) - (unless helm-apt-default-archs - (setq helm-apt-default-archs - (append (split-string - (shell-command-to-string - "dpkg --print-architecture") - "\n" t) - (split-string - (shell-command-to-string - "dpkg --print-foreign-architectures") - "\n" t)))) - (let ((query (read-string "Search Package: " nil 'helm-apt-input-history))) - (when arg (helm-apt-refresh)) - (helm :sources 'helm-source-apt - :prompt "Search Package: " - :input query - :buffer "*helm apt*" - :history 'helm-apt-input-history))) - - -(provide 'helm-apt) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-apt.el ends here diff --git a/elpa/helm-20160217.958/helm-autoloads.el b/elpa/helm-20160217.958/helm-autoloads.el deleted file mode 100644 index 3162d965..00000000 --- a/elpa/helm-20160217.958/helm-autoloads.el +++ /dev/null @@ -1,923 +0,0 @@ -;;; helm-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) - -;;;### (autoloads nil "helm-adaptive" "helm-adaptive.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-adaptive.el - -(defvar helm-adaptive-mode nil "\ -Non-nil if Helm-Adaptive mode is enabled. -See the command `helm-adaptive-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-adaptive-mode'.") - -(custom-autoload 'helm-adaptive-mode "helm-adaptive" nil) - -(autoload 'helm-adaptive-mode "helm-adaptive" "\ -Toggle adaptive sorting in all sources. - -\(fn &optional ARG)" t nil) - -(autoload 'helm-reset-adaptive-history "helm-adaptive" "\ -Delete all `helm-adaptive-history' and his file. -Useful when you have a old or corrupted `helm-adaptive-history-file'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-apt" "helm-apt.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-apt.el - -(autoload 'helm-apt "helm-apt" "\ -Preconfigured `helm' : frontend of APT package manager. -With a prefix arg reload cache. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-bookmark" "helm-bookmark.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-bookmark.el - -(autoload 'helm-bookmarks "helm-bookmark" "\ -Preconfigured `helm' for bookmarks. - -\(fn)" t nil) - -(autoload 'helm-filtered-bookmarks "helm-bookmark" "\ -Preconfigured helm for bookmarks (filtered by category). -Optional source `helm-source-bookmark-addressbook' is loaded -only if external library addressbook-bookmark.el is available. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-buffers" "helm-buffers.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-buffers.el - -(autoload 'helm-buffers-list "helm-buffers" "\ -Preconfigured `helm' to list buffers. - -\(fn)" t nil) - -(autoload 'helm-mini "helm-buffers" "\ -Preconfigured `helm' lightweight version (buffer -> recentf). - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-color" "helm-color.el" (22215 7711 0 -;;;;;; 0)) -;;; Generated autoloads from helm-color.el - -(autoload 'helm-colors "helm-color" "\ -Preconfigured `helm' for color. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-command" "helm-command.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-command.el - -(autoload 'helm-M-x "helm-command" "\ -Preconfigured `helm' for Emacs commands. -It is `helm' replacement of regular `M-x' `execute-extended-command'. - -Unlike regular `M-x' emacs vanilla `execute-extended-command' command, -the prefix args if needed, are passed AFTER starting `helm-M-x'. - -You can get help on each command by persistent action. - -\(fn ARG &optional COMMAND-NAME)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-config" "helm-config.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-config.el - -(autoload 'helm-configuration "helm-config" "\ -Customize `helm'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-dabbrev" "helm-dabbrev.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-dabbrev.el - -(autoload 'helm-dabbrev "helm-dabbrev" "\ -Preconfigured helm for dynamic abbreviations. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-elisp" "helm-elisp.el" (22215 7711 0 -;;;;;; 0)) -;;; Generated autoloads from helm-elisp.el - -(autoload 'helm-lisp-completion-at-point "helm-elisp" "\ -Preconfigured helm for lisp symbol completion at point. - -\(fn)" t nil) - -(autoload 'helm-complete-file-name-at-point "helm-elisp" "\ -Preconfigured helm to complete file name at point. - -\(fn &optional FORCE)" t nil) - -(autoload 'helm-lisp-indent "helm-elisp" "\ - - -\(fn)" t nil) - -(autoload 'helm-lisp-completion-or-file-name-at-point "helm-elisp" "\ -Preconfigured helm to complete lisp symbol or filename at point. -Filename completion happen if string start after or between a double quote. - -\(fn)" t nil) - -(autoload 'helm-apropos "helm-elisp" "\ -Preconfigured helm to describe commands, functions, variables and faces. - -\(fn)" t nil) - -(autoload 'helm-manage-advice "helm-elisp" "\ -Preconfigured `helm' to disable/enable function advices. - -\(fn)" t nil) - -(autoload 'helm-locate-library "helm-elisp" "\ -Preconfigured helm to locate elisp libraries. - -\(fn)" t nil) - -(autoload 'helm-timers "helm-elisp" "\ -Preconfigured `helm' for timers. - -\(fn)" t nil) - -(autoload 'helm-complex-command-history "helm-elisp" "\ -Preconfigured helm for complex command history. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-elisp-package" "helm-elisp-package.el" -;;;;;; (22215 7711 0 0)) -;;; Generated autoloads from helm-elisp-package.el - -(autoload 'helm-list-elisp-packages "helm-elisp-package" "\ -Preconfigured helm for listing and handling emacs packages. - -\(fn ARG)" t nil) - -(autoload 'helm-list-elisp-packages-no-fetch "helm-elisp-package" "\ -Preconfigured helm for emacs packages. -Same as `helm-list-elisp-packages' but don't fetch packages on remote. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-elscreen" "helm-elscreen.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-elscreen.el - -(autoload 'helm-elscreen "helm-elscreen" "\ -Preconfigured helm to list elscreen. - -\(fn)" t nil) - -(autoload 'helm-elscreen-history "helm-elscreen" "\ -Preconfigured helm to list elscreen in history order. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-eshell" "helm-eshell.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-eshell.el - -(autoload 'helm-esh-pcomplete "helm-eshell" "\ -Preconfigured helm to provide helm completion in eshell. - -\(fn)" t nil) - -(autoload 'helm-eshell-history "helm-eshell" "\ -Preconfigured helm for eshell history. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-eval" "helm-eval.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-eval.el - -(autoload 'helm-eval-expression "helm-eval" "\ -Preconfigured helm for `helm-source-evaluation-result'. - -\(fn ARG)" t nil) - -(autoload 'helm-eval-expression-with-eldoc "helm-eval" "\ -Preconfigured helm for `helm-source-evaluation-result' with `eldoc' support. - -\(fn)" t nil) - -(autoload 'helm-calcul-expression "helm-eval" "\ -Preconfigured helm for `helm-source-calculation-result'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-external" "helm-external.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-external.el - -(autoload 'helm-run-external-command "helm-external" "\ -Preconfigured `helm' to run External PROGRAM asyncronously from Emacs. -If program is already running exit with error. -You can set your own list of commands with -`helm-external-commands-list'. - -\(fn PROGRAM)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-files" "helm-files.el" (22215 7711 0 -;;;;;; 0)) -;;; Generated autoloads from helm-files.el - -(autoload 'helm-browse-project "helm-files" "\ -Preconfigured helm to browse projects. -Browse files and see status of project with its vcs. -Only HG and GIT are supported for now. -Fall back to `helm-browse-project-find-files' -if current directory is not under control of one of those vcs. -With a prefix ARG browse files recursively, with two prefix ARG -rebuild the cache. -If the current directory is found in the cache, start -`helm-browse-project-find-files' even with no prefix ARG. -NOTE: The prefix ARG have no effect on the VCS controlled directories. - -Needed dependencies for VCS: - -and - -and -. - -\(fn ARG)" t nil) - -(autoload 'helm-find "helm-files" "\ -Preconfigured `helm' for the find shell command. - -\(fn ARG)" t nil) - -(autoload 'helm-find-files "helm-files" "\ -Preconfigured `helm' for helm implementation of `find-file'. -Called with a prefix arg show history if some. -Don't call it from programs, use `helm-find-files-1' instead. -This is the starting point for nearly all actions you can do on files. - -\(fn ARG)" t nil) - -(autoload 'helm-for-files "helm-files" "\ -Preconfigured `helm' for opening files. -Run all sources defined in `helm-for-files-preferred-list'. - -\(fn)" t nil) - -(autoload 'helm-multi-files "helm-files" "\ -Preconfigured helm similar to `helm-for-files' but that don't run locate. -Allow toggling from locate to others sources. -This allow seeing first if what you search is in other sources before launching -locate. - -\(fn)" t nil) - -(autoload 'helm-recentf "helm-files" "\ -Preconfigured `helm' for `recentf'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-font" "helm-font.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-font.el - -(autoload 'helm-select-xfont "helm-font" "\ -Preconfigured `helm' to select Xfont. - -\(fn)" t nil) - -(autoload 'helm-ucs "helm-font" "\ -Preconfigured helm for `ucs-names' math symbols. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-grep" "helm-grep.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-grep.el - -(autoload 'helm-goto-precedent-file "helm-grep" "\ -Go to precedent file in helm grep/etags buffers. - -\(fn)" t nil) - -(autoload 'helm-goto-next-file "helm-grep" "\ -Go to precedent file in helm grep/etags buffers. - -\(fn)" t nil) - -(autoload 'helm-do-grep-ag "helm-grep" "\ -Preconfigured helm for grepping with AG in `default-directory'. - -\(fn)" t nil) - -(autoload 'helm-grep-do-git-grep "helm-grep" "\ -Preconfigured helm for git-grepping `default-directory'. -With a prefix arg ARG git-grep the whole repository. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-help" "helm-help.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-help.el - -(autoload 'helm-documentation "helm-help" "\ -Preconfigured helm for helm documentation. -With a prefix arg refresh the documentation. - -Find here the documentation of all sources actually documented. - -\(fn ARG)" t nil) - -(defvar helm-comp-read-mode-line "\\C/\\[helm-cr-empty-string]:Empty \\\\[helm-help]:Help \\[helm-select-action]:Act \\[helm-maybe-exit-minibuffer]/f1/f2/f-n:NthAct \\[helm-toggle-suspend-update]:Tog.suspend") - -(defvar helm-read-file-name-mode-line-string "\\\\[helm-help]:Help C/\\[helm-cr-empty-string]:Empty \\\\[helm-select-action]:Act \\[helm-maybe-exit-minibuffer]/f1/f2/f-n:NthAct \\[helm-toggle-suspend-update]:Tog.suspend" "\ -String displayed in mode-line in `helm-source-find-files'.") - -(defvar helm-top-mode-line "\\\\[helm-help]:Help \\\\[helm-select-action]:Act \\[helm-maybe-exit-minibuffer]/f1/f2/f-n:NthAct \\[helm-toggle-suspend-update]:Tog.suspend") - -(autoload 'helm-describe-helm-attribute "helm-help" "\ -Display the full documentation of HELM-ATTRIBUTE. -HELM-ATTRIBUTE should be a symbol. - -\(fn HELM-ATTRIBUTE)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-id-utils" "helm-id-utils.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-id-utils.el - -(autoload 'helm-gid "helm-id-utils" "\ -Preconfigured helm for `gid' command line of `ID-Utils'. -Need A database created with the command `mkid' -above `default-directory'. -Need id-utils as dependency which provide `mkid', `gid' etc... -See . - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-imenu" "helm-imenu.el" (22215 7711 0 -;;;;;; 0)) -;;; Generated autoloads from helm-imenu.el - -(autoload 'helm-imenu "helm-imenu" "\ -Preconfigured `helm' for `imenu'. - -\(fn)" t nil) - -(autoload 'helm-imenu-in-all-buffers "helm-imenu" "\ -Preconfigured helm for fetching imenu entries of all buffers. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-info" "helm-info.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-info.el - -(autoload 'helm-info "helm-info" "\ -Preconfigured `helm' for searching Info files' indices. - -\(fn)" t nil) - -(autoload 'helm-info-at-point "helm-info" "\ -Preconfigured `helm' for searching info at point. -With a prefix-arg insert symbol at point. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-locate" "helm-locate.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-locate.el - -(autoload 'helm-projects-find-files "helm-locate" "\ -Find files with locate in `helm-locate-project-list'. -With a prefix arg refresh the database in each project. - -\(fn UPDATE)" t nil) - -(autoload 'helm-locate-read-file-name "helm-locate" "\ - - -\(fn PROMPT)" nil nil) - -(autoload 'helm-locate "helm-locate" "\ -Preconfigured `helm' for Locate. -Note: you can add locate options after entering pattern. -See 'man locate' for valid options and also `helm-locate-command'. - -You can specify a local database with prefix argument ARG. -With two prefix arg, refresh the current local db or create it -if it doesn't exists. - -To create a user specific db, use -\"updatedb -l 0 -o db_path -U directory\". -Where db_path is a filename matched by -`helm-locate-db-file-regexp'. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-man" "helm-man.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-man.el - -(autoload 'helm-man-woman "helm-man" "\ -Preconfigured `helm' for Man and Woman pages. -With a prefix arg reinitialize the cache. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-misc" "helm-misc.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-misc.el - -(autoload 'helm-browse-menubar "helm-misc" "\ -Preconfigured helm to the menubar using lacarte.el. - -\(fn)" t nil) - -(autoload 'helm-world-time "helm-misc" "\ -Preconfigured `helm' to show world time. -Default action change TZ environment variable locally to emacs. - -\(fn)" t nil) - -(autoload 'helm-insert-latex-math "helm-misc" "\ -Preconfigured helm for latex math symbols completion. - -\(fn)" t nil) - -(autoload 'helm-ratpoison-commands "helm-misc" "\ -Preconfigured `helm' to execute ratpoison commands. - -\(fn)" t nil) - -(autoload 'helm-stumpwm-commands "helm-misc" "\ -Preconfigured helm for stumpwm commands. - -\(fn)" t nil) - -(autoload 'helm-minibuffer-history "helm-misc" "\ -Preconfigured `helm' for `minibuffer-history'. - -\(fn)" t nil) - -(autoload 'helm-comint-input-ring "helm-misc" "\ -Preconfigured `helm' that provide completion of `comint' history. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-mode" "helm-mode.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-mode.el - -(autoload 'helm-comp-read "helm-mode" "\ -Read a string in the minibuffer, with helm completion. - -It is helm `completing-read' equivalent. - -- PROMPT is the prompt name to use. - -- COLLECTION can be a list, vector, obarray or hash-table. - It can be also a function that receives three arguments: - the values string, predicate and t. See `all-completions' for more details. - -Keys description: - -- TEST: A predicate called with one arg i.e candidate. - -- INITIAL-INPUT: Same as input arg in `helm'. - -- PRESELECT: See preselect arg of `helm'. - -- DEFAULT: This option is used only for compatibility with regular - Emacs `completing-read' (Same as DEFAULT arg of `completing-read'). - -- BUFFER: Name of helm-buffer. - -- MUST-MATCH: Candidate selected must be one of COLLECTION. - -- FUZZY: Enable fuzzy matching. - -- REVERSE-HISTORY: When non--nil display history source after current - source completion. - -- REQUIRES-PATTERN: Same as helm attribute, default is 0. - -- HISTORY: A list containing specific history, default is nil. - When it is non--nil, all elements of HISTORY are displayed in - a special source before COLLECTION. - -- INPUT-HISTORY: A symbol. the minibuffer input history will be - stored there, if nil or not provided, `minibuffer-history' - will be used instead. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- DEL-INPUT: Boolean, when non--nil (default) remove the partial - minibuffer input from HISTORY is present. - -- PERSISTENT-ACTION: A function called with one arg i.e candidate. - -- PERSISTENT-HELP: A string to document PERSISTENT-ACTION. - -- MODE-LINE: A string or list to display in mode line. - Default is `helm-comp-read-mode-line'. - -- KEYMAP: A keymap to use in this `helm-comp-read'. - (the keymap will be shared with history source) - -- NAME: The name related to this local source. - -- EXEC-WHEN-ONLY-ONE: Bound `helm-execute-action-at-once-if-one' - to non--nil. (possibles values are t or nil). - -- VOLATILE: Use volatile attribute. - -- SORT: A predicate to give to `sort' e.g `string-lessp' - Use this only on small data as it is ineficient. - If you want to sort faster add a sort function to - FC-TRANSFORMER. - Note that FUZZY when enabled is already providing a sort function. - -- FC-TRANSFORMER: A `filtered-candidate-transformer' function - or a list of functions. - -- HIST-FC-TRANSFORMER: A `filtered-candidate-transformer' - function for the history source. - -- MARKED-CANDIDATES: If non--nil return candidate or marked candidates as a list. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: (default is non--nil) See `helm-comp-read-get-candidates'. - -- CANDIDATES-IN-BUFFER: when non--nil use a source build with - `helm-source-in-buffer' which is much faster. - Argument VOLATILE have no effect when CANDIDATES-IN-BUFFER is non--nil. - -Any prefix args passed during `helm-comp-read' invocation will be recorded -in `helm-current-prefix-arg', otherwise if prefix args were given before -`helm-comp-read' invocation, the value of `current-prefix-arg' will be used. -That's mean you can pass prefix args before or after calling a command -that use `helm-comp-read' See `helm-M-x' for example. - -\(fn PROMPT COLLECTION &key TEST INITIAL-INPUT DEFAULT PRESELECT (buffer \"*Helm Completions*\") MUST-MATCH FUZZY REVERSE-HISTORY (requires-pattern 0) HISTORY INPUT-HISTORY (case-fold helm-comp-read-case-fold-search) (del-input t) (persistent-action nil) (persistent-help \"DoNothing\") (mode-line helm-comp-read-mode-line) HELP-MESSAGE (keymap helm-comp-read-map) (name \"Helm Completions\") CANDIDATES-IN-BUFFER EXEC-WHEN-ONLY-ONE QUIT-WHEN-NO-CAND VOLATILE SORT (fc-transformer (quote helm-cr-default-transformer)) HIST-FC-TRANSFORMER MARKED-CANDIDATES NOMARK (alistp t) (candidate-number-limit helm-candidate-number-limit))" nil nil) - -(autoload 'helm-read-file-name "helm-mode" "\ -Read a file name with helm completion. -It is helm `read-file-name' emulation. - -Argument PROMPT is the default prompt to use. - -Keys description: - -- NAME: Source name, default to \"Read File Name\". - -- INITIAL-INPUT: Where to start read file name, default to `default-directory'. - -- BUFFER: `helm-buffer' name default to \"*Helm Completions*\". - -- TEST: A predicate called with one arg 'candidate'. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- PRESELECT: helm preselection. - -- HISTORY: Display HISTORY in a special source. - -- MUST-MATCH: Can be 'confirm, nil, or t. - -- MARKED-CANDIDATES: When non--nil return a list of marked candidates. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: Don't use `all-completions' in history (take effect only on history). - -- PERSISTENT-ACTION: a persistent action function. - -- PERSISTENT-HELP: persistent help message. - -- MODE-LINE: A mode line message, default is `helm-read-file-name-mode-line-string'. - -\(fn PROMPT &key (name \"Read File Name\") (initial-input default-directory) (buffer \"*Helm file completions*\") TEST (case-fold helm-file-name-case-fold-search) PRESELECT HISTORY MUST-MATCH DEFAULT MARKED-CANDIDATES (candidate-number-limit helm-ff-candidate-number-limit) NOMARK (alistp t) (persistent-action (quote helm-find-files-persistent-action)) (persistent-help \"Hit1 Expand Candidate, Hit2 or (C-u) Find file\") (mode-line helm-read-file-name-mode-line-string))" nil nil) - -(defvar helm-mode nil "\ -Non-nil if Helm mode is enabled. -See the command `helm-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-mode'.") - -(custom-autoload 'helm-mode "helm-mode" nil) - -(autoload 'helm-mode "helm-mode" "\ -Toggle generic helm completion. - -All functions in Emacs that use `completing-read' -or `read-file-name' and friends will use helm interface -when this mode is turned on. -However you can modify this behavior for functions of your choice -with `helm-completing-read-handlers-alist'. - -Called with a positive arg, turn on unconditionally, with a -negative arg turn off. -You can turn it on with `helm-mode'. - -Some crap emacs functions may not be supported, -e.g `ffap-alternate-file' and maybe others -You can add such functions to `helm-completing-read-handlers-alist' -with a nil value. - -Note: This mode is incompatible with Emacs23. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-net" "helm-net.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-net.el - -(autoload 'helm-surfraw "helm-net" "\ -Preconfigured `helm' to search PATTERN with search ENGINE. - -\(fn PATTERN ENGINE)" t nil) - -(autoload 'helm-google-suggest "helm-net" "\ -Preconfigured `helm' for google search with google suggest. - -\(fn)" t nil) - -(autoload 'helm-wikipedia-suggest "helm-net" "\ -Preconfigured `helm' for Wikipedia lookup with Wikipedia suggest. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-org" "helm-org.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-org.el - -(autoload 'helm-org-agenda-files-headings "helm-org" "\ -Preconfigured helm for org files headings. - -\(fn)" t nil) - -(autoload 'helm-org-in-buffer-headings "helm-org" "\ -Preconfigured helm for org buffer headings. - -\(fn)" t nil) - -(autoload 'helm-org-parent-headings "helm-org" "\ -Preconfigured helm for org headings that are parents of the -current heading. - -\(fn)" t nil) - -(autoload 'helm-org-capture-templates "helm-org" "\ -Preconfigured helm for org templates. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-regexp" "helm-regexp.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-regexp.el - -(autoload 'helm-moccur-mode "helm-regexp" "\ -Major mode to provide actions in helm moccur saved buffer. - -Special commands: -\\{helm-moccur-mode-map} - -\(fn)" t nil) - -(autoload 'helm-regexp "helm-regexp" "\ -Preconfigured helm to build regexps. -`query-replace-regexp' can be run from there against found regexp. - -\(fn)" t nil) - -(autoload 'helm-occur "helm-regexp" "\ -Preconfigured helm for Occur. - -\(fn)" t nil) - -(autoload 'helm-occur-from-isearch "helm-regexp" "\ -Invoke `helm-occur' from isearch. - -\(fn)" t nil) - -(autoload 'helm-multi-occur-from-isearch "helm-regexp" "\ -Invoke `helm-multi-occur' from isearch. - -With a prefix arg, reverse the behavior of -`helm-moccur-always-search-in-current'. -The prefix arg can be set before calling -`helm-multi-occur-from-isearch' or during the buffer selection. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-ring" "helm-ring.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-ring.el - -(defvar helm-push-mark-mode nil "\ -Non-nil if Helm-Push-Mark mode is enabled. -See the command `helm-push-mark-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-push-mark-mode'.") - -(custom-autoload 'helm-push-mark-mode "helm-ring" nil) - -(autoload 'helm-push-mark-mode "helm-ring" "\ -Provide an improved version of `push-mark'. -Modify the behavior of `push-mark' to update -the `global-mark-ring' after each new visit. - -\(fn &optional ARG)" t nil) - -(autoload 'helm-mark-ring "helm-ring" "\ -Preconfigured `helm' for `helm-source-mark-ring'. - -\(fn)" t nil) - -(autoload 'helm-global-mark-ring "helm-ring" "\ -Preconfigured `helm' for `helm-source-global-mark-ring'. - -\(fn)" t nil) - -(autoload 'helm-all-mark-rings "helm-ring" "\ -Preconfigured `helm' for `helm-source-global-mark-ring' and `helm-source-mark-ring'. - -\(fn)" t nil) - -(autoload 'helm-register "helm-ring" "\ -Preconfigured `helm' for Emacs registers. - -\(fn)" t nil) - -(autoload 'helm-show-kill-ring "helm-ring" "\ -Preconfigured `helm' for `kill-ring'. -It is drop-in replacement of `yank-pop'. - -First call open the kill-ring browser, next calls move to next line. - -\(fn)" t nil) - -(autoload 'helm-execute-kmacro "helm-ring" "\ -Preconfigured helm for keyboard macros. -Define your macros with `f3' and `f4'. -See (info \"(emacs) Keyboard Macros\") for detailed infos. -This command is useful when used with persistent action. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-semantic" "helm-semantic.el" (22215 7711 -;;;;;; 0 0)) -;;; Generated autoloads from helm-semantic.el - -(autoload 'helm-semantic "helm-semantic" "\ -Preconfigured `helm' for `semantic'. -If ARG is supplied, pre-select symbol at point instead of current - -\(fn ARG)" t nil) - -(autoload 'helm-semantic-or-imenu "helm-semantic" "\ -Preconfigured helm for `semantic' or `imenu'. -If ARG is supplied, pre-select symbol at point instead of current -semantic tag in scope. - -If `semantic-mode' is active in the current buffer, then use -semantic for generating tags, otherwise fall back to `imenu'. -Fill in the symbol at point by default. - -\(fn ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-sys" "helm-sys.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-sys.el - -(autoload 'helm-top "helm-sys" "\ -Preconfigured `helm' for top command. - -\(fn)" t nil) - -(autoload 'helm-list-emacs-process "helm-sys" "\ -Preconfigured `helm' for emacs process. - -\(fn)" t nil) - -(autoload 'helm-xrandr-set "helm-sys" "\ -Preconfigured helm for xrandr. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-tags" "helm-tags.el" (22215 7711 0 0)) -;;; Generated autoloads from helm-tags.el - -(autoload 'helm-etags-select "helm-tags" "\ -Preconfigured helm for etags. -If called with a prefix argument REINIT -or if any of the tag files have been modified, reinitialize cache. - -This function aggregates three sources of tag files: - - 1) An automatically located file in the parent directories, - by `helm-etags-get-tag-file'. - 2) `tags-file-name', which is commonly set by `find-tag' command. - 3) `tags-table-list' which is commonly set by `visit-tags-table' command. - -\(fn REINIT)" t nil) - -;;;*** - -;;;### (autoloads nil "helm-utils" "helm-utils.el" (22215 7711 0 -;;;;;; 0)) -;;; Generated autoloads from helm-utils.el - -(defvar helm-popup-tip-mode nil "\ -Non-nil if Helm-Popup-Tip mode is enabled. -See the command `helm-popup-tip-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `helm-popup-tip-mode'.") - -(custom-autoload 'helm-popup-tip-mode "helm-utils" nil) - -(autoload 'helm-popup-tip-mode "helm-utils" "\ -Show help-echo informations in a popup tip at end of line. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads nil nil ("helm-easymenu.el" "helm-multi-match.el" -;;;;;; "helm-pkg.el" "helm-plugin.el" "helm-types.el") (22215 7711 -;;;;;; 934049 0)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; helm-autoloads.el ends here diff --git a/elpa/helm-20160217.958/helm-bookmark.el b/elpa/helm-20160217.958/helm-bookmark.el deleted file mode 100644 index 94f63f64..00000000 --- a/elpa/helm-20160217.958/helm-bookmark.el +++ /dev/null @@ -1,739 +0,0 @@ -;;; helm-bookmark.el --- Helm for Emacs regular Bookmarks. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'bookmark) -(require 'helm) -(require 'helm-help) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-info) -(require 'helm-adaptive) -(require 'helm-net) - -(declare-function addressbook-bookmark-edit "ext:addressbook-bookmark.el" (bookmark)) -(declare-function message-buffers "message.el") -(declare-function addressbook-set-mail-buffer-1 "ext:addressbook-bookmark.el" - (&optional bookmark-name append cc)) - - -(defgroup helm-bookmark nil - "Predefined configurations for `helm.el'." - :group 'helm) - -(defcustom helm-bookmark-show-location nil - "Show location of bookmark on display." - :group 'helm-bookmark - :type 'boolean) - -(defcustom helm-bookmark-default-filtered-sources - (append '(helm-source-bookmark-files&dirs - helm-source-bookmark-helm-find-files - helm-source-bookmark-info - helm-source-bookmark-gnus - helm-source-bookmark-man - helm-source-bookmark-images - helm-source-bookmark-w3m) - (and (locate-library "addressbook-bookmark") - (list 'helm-source-bookmark-addressbook)) - (list 'helm-source-bookmark-uncategorized - 'helm-source-bookmark-set)) - "List of sources to use in `helm-filtered-bookmarks'." - :group 'helm-bookmark - :type '(repeat (choice symbol))) - -(defcustom helm-bookmark-addressbook-actions - '(("Show Contact(s)" - . (lambda (candidate) - (let* ((contacts (helm-marked-candidates)) - (current-prefix-arg helm-current-prefix-arg)) - (bookmark-jump - (helm-bookmark-get-bookmark-from-name (car contacts))) - (helm-aif (cdr contacts) - (let ((current-prefix-arg '(4))) - (cl-loop for bmk in it do - (bookmark-jump - (helm-bookmark-get-bookmark-from-name bmk)))))))) - ("Mail To" . helm-bookmark-addressbook-send-mail-1) - ("Mail Cc" . (lambda (_candidate) - (helm-bookmark-addressbook-send-mail-1 nil 'cc))) - ("Mail Bcc" . (lambda (_candidate) - (helm-bookmark-addressbook-send-mail-1 nil 'bcc))) - ("Edit Bookmark" - . (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (addressbook-bookmark-edit - (assoc bmk bookmark-alist))))) - ("Delete bookmark(s)" . helm-delete-marked-bookmarks) - ("Insert Email at point" - . (lambda (candidate) - (let* ((bmk (helm-bookmark-get-bookmark-from-name - candidate)) - (mlist (split-string - (assoc-default - 'email (assoc bmk bookmark-alist)) - ", "))) - (insert - (if (> (length mlist) 1) - (helm-comp-read - "Insert Mail Address: " mlist :must-match t) - (car mlist)))))) - ("Show annotation" - . (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (bookmark-show-annotation bmk)))) - ("Edit annotation" - . (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (bookmark-edit-annotation bmk)))) - ("Show Google map" - . (lambda (candidate) - (let* ((bmk (helm-bookmark-get-bookmark-from-name - candidate)) - (full-bmk (assoc bmk bookmark-alist))) - (addressbook-google-map full-bmk))))) - "Actions for addressbook bookmarks." - :group 'helm-bookmark - :type '(alist :key-type string :value-type function)) - - -(defface helm-bookmark-info - '((t (:foreground "green"))) - "Face used for W3m Emacs bookmarks (not w3m bookmarks)." - :group 'helm-bookmark) - -(defface helm-bookmark-w3m - '((t (:foreground "yellow"))) - "Face used for W3m Emacs bookmarks (not w3m bookmarks)." - :group 'helm-bookmark) - -(defface helm-bookmark-gnus - '((t (:foreground "magenta"))) - "Face used for Gnus bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-man - '((t (:foreground "Orange4"))) - "Face used for Woman/man bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-file - '((t (:foreground "Deepskyblue2"))) - "Face used for file bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-directory - '((t (:inherit helm-ff-directory))) - "Face used for file bookmarks." - :group 'helm-bookmark) - -(defface helm-bookmark-addressbook - '((t (:foreground "tomato"))) - "Face used for addressbook bookmarks." - :group 'helm-bookmark) - - -(defvar helm-bookmark-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-c o") 'helm-bookmark-run-jump-other-window) - (define-key map (kbd "C-d") 'helm-bookmark-run-delete) - (define-key map (kbd "C-]") 'helm-bookmark-toggle-filename) - (define-key map (kbd "M-e") 'helm-bookmark-run-edit) - map) - "Generic Keymap for emacs bookmark sources.") - -(defclass helm-source-basic-bookmarks (helm-source-in-buffer helm-type-bookmark) - ((init :initform (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global - (bookmark-all-names)))) - (filtered-candidate-transformer :initform 'helm-bookmark-transformer))) - -(defvar helm-source-bookmarks - (helm-make-source "Bookmarks" 'helm-source-basic-bookmarks) - "See (info \"(emacs)Bookmarks\").") - -(defun helm-bookmark-transformer (candidates _source) - (cl-loop for i in candidates - for loc = (bookmark-location i) - for len = (string-width i) - for trunc = (if (> len bookmark-bmenu-file-column) - (helm-substring i bookmark-bmenu-file-column) - i) - for sep = (make-string (- (+ bookmark-bmenu-file-column 2) - (length trunc)) - ? ) - if helm-bookmark-show-location - collect (cons (concat trunc sep (if (listp loc) (car loc) loc)) i) - else collect i)) - -(defun helm-bookmark-toggle-filename-1 (_candidate) - (let* ((real (helm-get-selection helm-buffer)) - (trunc (if (> (string-width real) bookmark-bmenu-file-column) - (helm-substring real bookmark-bmenu-file-column) - real)) - (loc (bookmark-location real))) - (setq helm-bookmark-show-location (not helm-bookmark-show-location)) - (helm-update (if helm-bookmark-show-location - (concat (regexp-quote trunc) - " +" - (regexp-quote - (if (listp loc) (car loc) loc))) - (regexp-quote real))))) - -(defun helm-bookmark-toggle-filename () - "Toggle bookmark location visibility." - (interactive) - (with-helm-alive-p - (helm-attrset 'toggle-filename - '(helm-bookmark-toggle-filename-1 . never-split)) - (helm-execute-persistent-action 'toggle-filename))) -(put 'helm-bookmark-toggle-filename 'helm-only t) - -(defun helm-bookmark-jump (candidate) - "Jump to bookmark from keyboard." - (let ((current-prefix-arg helm-current-prefix-arg) - non-essential) - (bookmark-jump candidate))) - -(defun helm-bookmark-jump-other-window (candidate) - (let (non-essential) - (bookmark-jump-other-window candidate))) - - -;;; bookmark-set -;; -(defvar helm-source-bookmark-set - (helm-build-dummy-source "Set Bookmark" - :filtered-candidate-transformer - (lambda (_candidates _source) - (list (or (and (not (string= helm-pattern "")) - helm-pattern) - "Enter a bookmark name to record"))) - :action '(("Set bookmark" . (lambda (candidate) - (if (string= helm-pattern "") - (message "No bookmark name given for record") - (bookmark-set candidate)))))) - "See (info \"(emacs)Bookmarks\").") - - -;;; Predicates -;; -(defconst helm-bookmark--non-file-filename " - no file -" - "Name to use for `filename' entry, for non-file bookmarks.") - -(defun helm-bookmark-gnus-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Gnus bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-gnus) - (eq (bookmark-get-handler bookmark) 'gnus-summary-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-gnus))) - -(defun helm-bookmark-w3m-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a W3m bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-w3m) - (eq (bookmark-get-handler bookmark) 'bookmark-w3m-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-w3m))) - -(defun helm-bookmark-woman-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Woman bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-woman) - (eq (bookmark-get-handler bookmark) 'woman-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-woman))) - -(defun helm-bookmark-man-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Man bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (eq (bookmark-get-handler bookmark) 'bmkext-jump-man) - (eq (bookmark-get-handler bookmark) 'Man-bookmark-jump) - (eq (bookmark-get-handler bookmark) 'bookmarkp-jump-man))) - -(defun helm-bookmark-woman-man-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is a Man or Woman bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (or (helm-bookmark-man-bookmark-p bookmark) - (helm-bookmark-woman-bookmark-p bookmark))) - -(defun helm-bookmark-info-bookmark-p (bookmark) - "Return non-nil if BOOKMARK is an Info bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (eq (bookmark-get-handler bookmark) 'Info-bookmark-jump)) - -(defun helm-bookmark-image-bookmark-p (bookmark) - "Return non-nil if BOOKMARK bookmarks an image file." - (if (stringp bookmark) - (assoc 'image-type (assoc bookmark bookmark-alist)) - (assoc 'image-type bookmark))) - -(defun helm-bookmark-file-p (bookmark) - "Return non-nil if BOOKMARK bookmarks a file or directory. -BOOKMARK is a bookmark name or a bookmark record. -This excludes bookmarks of a more specific kind (Info, Gnus, and W3m)." - (let* ((filename (bookmark-get-filename bookmark)) - (isnonfile (equal filename helm-bookmark--non-file-filename))) - (and filename (not isnonfile) (not (bookmark-get-handler bookmark))))) - -(defun helm-bookmark-helm-find-files-p (bookmark) - "Return non-nil if BOOKMARK bookmarks a `helm-find-files' session. -BOOKMARK is a bookmark name or a bookmark record." - (eq (bookmark-get-handler bookmark) 'helm-ff-bookmark-jump)) - -(defun helm-bookmark-addressbook-p (bookmark) - "Return non--nil if BOOKMARK is a contact recorded with addressbook-bookmark. -BOOKMARK is a bookmark name or a bookmark record." - (if (listp bookmark) - (string= (assoc-default 'type bookmark) "addressbook") - (string= (assoc-default - 'type (assoc bookmark bookmark-alist)) "addressbook"))) - -(defun helm-bookmark-uncategorized-bookmark-p (bookmark) - "Return non--nil if BOOKMARK match no known category." - (cl-loop for pred in '(helm-bookmark-addressbook-p - helm-bookmark-gnus-bookmark-p - helm-bookmark-w3m-bookmark-p - helm-bookmark-woman-man-bookmark-p - helm-bookmark-info-bookmark-p - helm-bookmark-image-bookmark-p - helm-bookmark-file-p - helm-bookmark-helm-find-files-p - helm-bookmark-addressbook-p) - never (funcall pred bookmark))) - -(defun helm-bookmark-filter-setup-alist (fn) - "Return a filtered `bookmark-alist' sorted alphabetically." - (cl-loop for b in bookmark-alist - for name = (car b) - when (funcall fn b) collect - (propertize name 'location (bookmark-location name)))) - -;;; Bookmark handlers -;; -(defvar w3m-async-exec) -(defun helm-bookmark-jump-w3m (bookmark) - "Jump to W3m bookmark BOOKMARK, setting a new tab. -If `browse-url-browser-function' is set to something else -than `w3m-browse-url' use it." - (require 'helm-net) - (let ((file (or (bookmark-prop-get bookmark 'filename) - (bookmark-prop-get bookmark 'url))) - (buf (generate-new-buffer-name "*w3m*")) - (w3m-async-exec nil) - (really-use-w3m (equal browse-url-browser-function 'w3m-browse-url))) - (helm-browse-url file really-use-w3m) - (when really-use-w3m - (bookmark-default-handler - `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark)))))) - -;; All bookmarks recorded with the handler provided with w3m -;; (`bookmark-w3m-bookmark-jump') will use our handler which open -;; the bookmark in a new tab or in an external browser depending -;; on `browse-url-browser-function'. -(defalias 'bookmark-w3m-bookmark-jump 'helm-bookmark-jump-w3m) - -;; Provide compatibility with old handlers provided in external -;; packages bookmark-extensions.el and bookmark+. -(defalias 'bmkext-jump-woman 'woman-bookmark-jump) -(defalias 'bmkext-jump-man 'Man-bookmark-jump) -(defalias 'bmkext-jump-w3m 'helm-bookmark-jump-w3m) -(defalias 'bmkext-jump-gnus 'gnus-summary-bookmark-jump) -(defalias 'bookmarkp-jump-gnus 'gnus-summary-bookmark-jump) -(defalias 'bookmarkp-jump-w3m 'helm-bookmark-jump-w3m) -(defalias 'bookmarkp-jump-woman 'woman-bookmark-jump) -(defalias 'bookmarkp-jump-man 'Man-bookmark-jump) - - -;;;; Filtered bookmark sources -;; -;; -(defclass helm-source-filtered-bookmarks (helm-source-in-buffer helm-type-bookmark) - ((filtered-candidate-transformer - :initform '(helm-adaptive-sort - helm-highlight-bookmark)))) - -;;; W3m bookmarks. -;; -(defun helm-bookmark-w3m-setup-alist () - "Specialized filter function for bookmarks w3m." - (helm-bookmark-filter-setup-alist 'helm-bookmark-w3m-bookmark-p)) - -(defvar helm-source-bookmark-w3m - (helm-make-source "Bookmark W3m" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-w3m-setup-alist))))) - -;;; Images -;; -(defun helm-bookmark-images-setup-alist () - "Specialized filter function for images bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-image-bookmark-p)) - -(defvar helm-source-bookmark-images - (helm-make-source "Bookmark Images" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-images-setup-alist))))) - -;;; Woman Man -;; -(defun helm-bookmark-man-setup-alist () - "Specialized filter function for bookmarks w3m." - (helm-bookmark-filter-setup-alist 'helm-bookmark-woman-man-bookmark-p)) - -(defvar helm-source-bookmark-man - (helm-make-source "Bookmark Woman&Man" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-man-setup-alist))))) - -;;; Gnus -;; -(defun helm-bookmark-gnus-setup-alist () - "Specialized filter function for bookmarks gnus." - (helm-bookmark-filter-setup-alist 'helm-bookmark-gnus-bookmark-p)) - -(defvar helm-source-bookmark-gnus - (helm-make-source "Bookmark Gnus" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-gnus-setup-alist))))) - -;;; Info -;; -(defun helm-bookmark-info-setup-alist () - "Specialized filter function for bookmarks info." - (helm-bookmark-filter-setup-alist 'helm-bookmark-info-bookmark-p)) - -(defvar helm-source-bookmark-info - (helm-make-source "Bookmark Info" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-info-setup-alist))))) - -;;; Files and directories -;; -(defun helm-bookmark-local-files-setup-alist () - "Specialized filter function for bookmarks locals files." - (helm-bookmark-filter-setup-alist 'helm-bookmark-file-p)) - -(defvar helm-source-bookmark-files&dirs - (helm-make-source "Bookmark Files&Directories" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-local-files-setup-alist))))) - -;;; Helm find files sessions. -;; -(defun helm-bookmark-helm-find-files-setup-alist () - "Specialized filter function for `helm-find-files' bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-helm-find-files-p)) - -(defvar helm-source-bookmark-helm-find-files - (helm-make-source "Bookmark helm-find-files sessions" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-helm-find-files-setup-alist))) - :persistent-action (lambda (_candidate) (ignore)) - :persistent-help "Do nothing")) - -;;; Uncategorized bookmarks -;; -(defun helm-bookmark-uncategorized-setup-alist () - "Specialized filter function for uncategorized bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-uncategorized-bookmark-p)) - -(defvar helm-source-bookmark-uncategorized - (helm-make-source "Bookmark uncategorized" 'helm-source-filtered-bookmarks - :init (lambda () - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global (helm-bookmark-uncategorized-setup-alist))))) - -;;; Addressbook. -;; -;; -(defclass helm-bookmark-addressbook-class (helm-source-in-buffer) - ((init :initform (lambda () - (require 'addressbook-bookmark nil t) - (bookmark-maybe-load-default-file) - (helm-init-candidates-in-buffer - 'global - (helm-bookmark-addressbook-setup-alist)))) - (persistent-action :initform - (lambda (candidate) - (let ((bmk (helm-bookmark-get-bookmark-from-name - candidate))) - (bookmark--jump-via bmk 'switch-to-buffer)))) - (persistent-help :initform "Show contact - Prefix with C-u to append") - (filtered-candidate-transformer :initform - '(helm-adaptive-sort - helm-highlight-bookmark)) - (action :initform 'helm-bookmark-addressbook-actions))) - -(defun helm-bookmark-addressbook-send-mail-1 (_candidate &optional cc) - (let* ((contacts (helm-marked-candidates)) - (bookmark (helm-bookmark-get-bookmark-from-name - (car contacts))) - (append (message-buffers))) - (addressbook-set-mail-buffer-1 bookmark append) - (helm-aif (cdr contacts) - (progn - (when cc (addressbook-set-mail-buffer-1 (car it) nil cc)) - (cl-loop for bmk in (cdr it) do - (addressbook-set-mail-buffer-1 - (helm-bookmark-get-bookmark-from-name bmk) 'append cc)))))) - -(defun helm-bookmark-addressbook-setup-alist () - "Specialized filter function for addressbook bookmarks." - (helm-bookmark-filter-setup-alist 'helm-bookmark-addressbook-p)) - -(defvar helm-source-bookmark-addressbook - (helm-make-source "Bookmark Addressbook" 'helm-bookmark-addressbook-class)) - -;;; Transformer -;; - -(defun helm-highlight-bookmark (bookmarks _source) - "Used as `filtered-candidate-transformer' to colorize bookmarks. -Work both with standard Emacs bookmarks and bookmark-extensions.el." - (let ((non-essential t)) - (cl-loop for i in bookmarks - for isfile = (bookmark-get-filename i) - for hff = (helm-bookmark-helm-find-files-p i) - for handlerp = (and (fboundp 'bookmark-get-handler) - (bookmark-get-handler i)) - for isw3m = (and (fboundp 'helm-bookmark-w3m-bookmark-p) - (helm-bookmark-w3m-bookmark-p i)) - for isgnus = (and (fboundp 'helm-bookmark-gnus-bookmark-p) - (helm-bookmark-gnus-bookmark-p i)) - for isman = (and (fboundp 'helm-bookmark-man-bookmark-p) ; Man - (helm-bookmark-man-bookmark-p i)) - for iswoman = (and (fboundp 'helm-bookmark-woman-bookmark-p) ; Woman - (helm-bookmark-woman-bookmark-p i)) - for isannotation = (bookmark-get-annotation i) - for isabook = (string= (bookmark-prop-get i 'type) - "addressbook") - for isinfo = (eq handlerp 'Info-bookmark-jump) - for loc = (bookmark-location i) - for len = (string-width i) - for trunc = (if (and helm-bookmark-show-location - (> len bookmark-bmenu-file-column)) - (helm-substring - i bookmark-bmenu-file-column) - i) - ;; Add a * if bookmark have annotation - if (and isannotation (not (string-equal isannotation ""))) - do (setq trunc (concat "*" (if helm-bookmark-show-location trunc i))) - for sep = (and helm-bookmark-show-location - (make-string (- (+ bookmark-bmenu-file-column 2) - (string-width trunc)) - ? )) - for bmk = (cond ( ;; info buffers - isinfo - (propertize trunc 'face 'helm-bookmark-info - 'help-echo isfile)) - ( ;; w3m buffers - isw3m - (propertize trunc 'face 'helm-bookmark-w3m - 'help-echo isfile)) - ( ;; gnus buffers - isgnus - (propertize trunc 'face 'helm-bookmark-gnus - 'help-echo isfile)) - ( ;; Man Woman - (or iswoman isman) - (propertize trunc 'face 'helm-bookmark-man - 'help-echo isfile)) - ( ;; Addressbook - isabook - (propertize trunc 'face 'helm-bookmark-addressbook)) - ( ;; directories - (and isfile - (or hff - ;; This is needed because `non-essential' - ;; is not working on Emacs-24.2 and the behavior - ;; of tramp seems to have changed since previous - ;; versions (Need to reenter password even if a - ;; first connection have been established, - ;; probably when host is named differently - ;; i.e machine/localhost) - (and (not (file-remote-p isfile)) - (file-directory-p isfile)))) - (propertize trunc 'face 'helm-bookmark-directory - 'help-echo isfile)) - ( ;; regular files - t - (propertize trunc 'face 'helm-bookmark-file - 'help-echo isfile))) - collect (if helm-bookmark-show-location - (cons (concat bmk sep (if (listp loc) (car loc) loc)) - i) - (cons bmk i))))) - - -;;; Edit/rename/save bookmarks. -;; -;; -(defun helm-bookmark-edit-bookmark (bookmark-name) - "Edit bookmark's name and file name, and maybe save them. -BOOKMARK-NAME is the current (old) name of the bookmark to be renamed." - (let ((bmk (helm-bookmark-get-bookmark-from-name bookmark-name)) - (handler (bookmark-prop-get bookmark-name 'handler))) - (if (eq handler 'addressbook-bookmark-jump) - (addressbook-bookmark-edit - (assoc bmk bookmark-alist)) - (helm-bookmark-edit-bookmark-1 bookmark-name handler)))) - -(defun helm-bookmark-edit-bookmark-1 (bookmark-name handler) - (let* ((helm--reading-passwd-or-string t) - (bookmark-fname (bookmark-get-filename bookmark-name)) - (bookmark-loc (bookmark-prop-get bookmark-name 'location)) - (new-name (read-from-minibuffer "Name: " bookmark-name)) - (new-loc (read-from-minibuffer "FileName or Location: " - (or bookmark-fname - (if (consp bookmark-loc) - (car bookmark-loc) - bookmark-loc)))) - (docid (and (eq handler 'mu4e-bookmark-jump) - (read-number "Docid: " (cdr bookmark-loc))))) - (when docid - (setq new-loc (cons new-loc docid))) - (when (and (not (equal new-name "")) (not (equal new-loc "")) - (y-or-n-p "Save changes? ")) - (if bookmark-fname - (progn - (helm-bookmark-rename bookmark-name new-name 'batch) - (bookmark-set-filename new-name new-loc)) - (bookmark-prop-set - (bookmark-get-bookmark bookmark-name) 'location new-loc) - (helm-bookmark-rename bookmark-name new-name 'batch)) - (helm-bookmark-maybe-save-bookmark) - (list new-name new-loc)))) - -(defun helm-bookmark-maybe-save-bookmark () - "Increment save counter and maybe save `bookmark-alist'." - (setq bookmark-alist-modification-count (1+ bookmark-alist-modification-count)) - (when (bookmark-time-to-save-p) (bookmark-save))) - -(defun helm-bookmark-rename (old &optional new batch) - "Change bookmark's name from OLD to NEW. -Interactively: - If called from the keyboard, then prompt for OLD. - If called from the menubar, select OLD from a menu. -If NEW is nil, then prompt for its string value. - -If BATCH is non-nil, then do not rebuild the menu list. - -While the user enters the new name, repeated `C-w' inserts consecutive -words from the buffer into the new bookmark name." - (interactive (list (bookmark-completing-read "Old bookmark name"))) - (bookmark-maybe-historicize-string old) - (bookmark-maybe-load-default-file) - (save-excursion (skip-chars-forward " ") (setq bookmark-yank-point (point))) - (setq bookmark-current-buffer (current-buffer)) - (let ((newname (or new (read-from-minibuffer - "New name: " nil - (let ((now-map (copy-keymap minibuffer-local-map))) - (define-key now-map "\C-w" 'bookmark-yank-word) - now-map) - nil 'bookmark-history)))) - (bookmark-set-name old newname) - (setq bookmark-current-bookmark newname) - (unless batch (bookmark-bmenu-surreptitiously-rebuild-list)) - (helm-bookmark-maybe-save-bookmark) newname)) - -(defun helm-bookmark-run-edit () - "Run `helm-bookmark-edit-bookmark' from keyboard." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-bookmark-edit-bookmark))) -(put 'helm-bookmark-run-edit 'helm-only t) - - -(defun helm-bookmark-run-jump-other-window () - "Jump to bookmark from keyboard." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'bookmark-jump-other-window))) -(put 'helm-bookmark-run-jump-other-window 'helm-only t) - -(defun helm-bookmark-run-delete () - "Delete bookmark from keyboard." - (interactive) - (with-helm-alive-p - (when (y-or-n-p "Delete bookmark(s)?") - (helm-exit-and-execute-action 'helm-delete-marked-bookmarks)))) -(put 'helm-bookmark-run-delete 'helm-only t) - -(defun helm-bookmark-get-bookmark-from-name (bmk) - "Return bookmark name even if it is a bookmark with annotation. -e.g prepended with *." - (let ((bookmark (replace-regexp-in-string "\\`\\*" "" bmk))) - (if (assoc bookmark bookmark-alist) bookmark bmk))) - -(defun helm-delete-marked-bookmarks (_ignore) - "Delete this bookmark or all marked bookmarks." - (cl-dolist (i (helm-marked-candidates)) - (bookmark-delete (helm-bookmark-get-bookmark-from-name i) - 'batch))) - - -;;;###autoload -(defun helm-bookmarks () - "Preconfigured `helm' for bookmarks." - (interactive) - (helm :sources '(helm-source-bookmarks - helm-source-bookmark-set) - :buffer "*helm bookmarks*" - :default (buffer-name helm-current-buffer))) - -;;;###autoload -(defun helm-filtered-bookmarks () - "Preconfigured helm for bookmarks (filtered by category). -Optional source `helm-source-bookmark-addressbook' is loaded -only if external library addressbook-bookmark.el is available." - (interactive) - (helm :sources helm-bookmark-default-filtered-sources - :prompt "Search Bookmark: " - :buffer "*helm filtered bookmarks*" - :default (list (thing-at-point 'symbol) - (buffer-name helm-current-buffer)))) - -(provide 'helm-bookmark) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-bookmark.el ends here diff --git a/elpa/helm-20160217.958/helm-buffers.el b/elpa/helm-20160217.958/helm-buffers.el deleted file mode 100644 index c456b860..00000000 --- a/elpa/helm-20160217.958/helm-buffers.el +++ /dev/null @@ -1,895 +0,0 @@ -;;; helm-buffers.el --- helm support for buffers. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-elscreen) -(require 'helm-grep) -(require 'helm-plugin) -(require 'helm-regexp) -(require 'helm-help) - -(declare-function ido-make-buffer-list "ido" (default)) -(declare-function ido-add-virtual-buffers-to-list "ido") -(declare-function helm-comp-read "helm-mode") - - -(defgroup helm-buffers nil - "Buffers related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-boring-buffer-regexp-list - '("\\` " "\\*helm" "\\*helm-mode" "\\*Echo Area" "\\*Minibuf") - "The regexp list that match boring buffers. -Buffer candidates matching these regular expression will be -filtered from the list of candidates if the -`helm-skip-boring-buffers' candidate transformer is used." - :type '(repeat (choice regexp)) - :group 'helm-buffers) - -(defcustom helm-white-buffer-regexp-list nil - "The regexp list of not boring buffers. -These buffers will be displayed even if they match one of -`helm-boring-buffer-regexp-list'." - :type '(repeat (choice regexp)) - :group 'helm-buffers) - -(defcustom helm-buffers-favorite-modes '(lisp-interaction-mode - emacs-lisp-mode - text-mode - org-mode) - "List of preferred mode to open new buffers with." - :type '(repeat (choice function)) - :group 'helm-buffers) - -(defcustom helm-buffer-max-length 20 - "Max length of buffer names before truncate. -When disabled (nil) use the longest buffer-name length found." - :group 'helm-buffers - :type '(choice (const :tag "Disabled" nil) - (integer :tag "Length before truncate"))) - -(defcustom helm-buffer-details-flag t - "Always show details in buffer list when non--nil." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-buffers-fuzzy-matching nil - "Fuzzy matching buffer names when non--nil. -Only buffer names are fuzzy matched when this is enabled, -`major-mode' matching is not affected by this." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-buffer-skip-remote-checking nil - "Ignore checking for `file-exists-p' on remote files." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-buffers-truncate-lines t - "Truncate lines in `helm-buffers-list' when non--nil." - :group 'helm-buffers - :type 'boolean) - -(defcustom helm-mini-default-sources '(helm-source-buffers-list - helm-source-recentf - helm-source-buffer-not-found) - "Default sources list used in `helm-mini'." - :group 'helm-buffers - :type '(repeat (choice symbol))) - -(defcustom helm-buffers-end-truncated-string "..." - "The string to display at end of truncated buffer names." - :type 'string - :group 'helm-buffers) - - -;;; Faces -;; -;; -(defgroup helm-buffers-faces nil - "Customize the appearance of helm-buffers." - :prefix "helm-" - :group 'helm-buffers - :group 'helm-faces) - -(defface helm-buffer-saved-out - '((t (:foreground "red" :background "black"))) - "Face used for buffer files modified outside of emacs." - :group 'helm-buffers-faces) - -(defface helm-buffer-not-saved - '((t (:foreground "Indianred2"))) - "Face used for buffer files not already saved on disk." - :group 'helm-buffers-faces) - -(defface helm-buffer-size - '((((background dark)) :foreground "RosyBrown") - (((background light)) :foreground "SlateGray")) - "Face used for buffer size." - :group 'helm-buffers-faces) - -(defface helm-buffer-process - '((t (:foreground "Sienna3"))) - "Face used for process status in buffer." - :group 'helm-buffers-faces) - -(defface helm-buffer-directory - '((t (:foreground "DarkRed" :background "LightGray"))) - "Face used for directories in `helm-buffers-list'." - :group 'helm-buffers-faces) - -(defface helm-buffer-file - '((t :inherit font-lock-builtin-face)) - "Face for buffer file names in `helm-buffers-list'." - :group 'helm-buffers-faces) - - -;;; Buffers keymap -;; -(defvar helm-buffer-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - ;; No need to have separate command for grep and zgrep - ;; as we don't use recursivity for buffers. - ;; So use zgrep for both as it is capable to handle non--compressed files. - (define-key map (kbd "M-g s") 'helm-buffer-run-zgrep) - (define-key map (kbd "C-s") 'helm-buffers-run-multi-occur) - (define-key map (kbd "C-c o") 'helm-buffer-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-buffer-switch-other-frame) - (define-key map (kbd "C-c =") 'helm-buffer-run-ediff) - (define-key map (kbd "M-=") 'helm-buffer-run-ediff-merge) - (define-key map (kbd "C-=") 'helm-buffer-diff-persistent) - (define-key map (kbd "M-U") 'helm-buffer-revert-persistent) - (define-key map (kbd "C-c d") 'helm-buffer-run-kill-persistent) - (define-key map (kbd "M-D") 'helm-buffer-run-kill-buffers) - (define-key map (kbd "C-x C-s") 'helm-buffer-save-persistent) - (define-key map (kbd "C-M-%") 'helm-buffer-run-query-replace-regexp) - (define-key map (kbd "M-%") 'helm-buffer-run-query-replace) - (define-key map (kbd "M-m") 'helm-toggle-all-marks) - (define-key map (kbd "M-a") 'helm-mark-all) - (define-key map (kbd "C-]") 'helm-toggle-buffers-details) - (define-key map (kbd "C-c a") 'helm-buffers-toggle-show-hidden-buffers) - (define-key map (kbd "") 'helm-buffers-mark-similar-buffers) - map) - "Keymap for buffer sources in helm.") - -(defvar helm-buffers-ido-virtual-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-c o") 'helm-ff-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-ff-run-switch-other-frame) - (define-key map (kbd "M-g s") 'helm-ff-run-grep) - (define-key map (kbd "M-g z") 'helm-ff-run-zgrep) - (define-key map (kbd "M-D") 'helm-ff-run-delete-file) - (define-key map (kbd "C-c C-x") 'helm-ff-run-open-file-externally) - map)) - - -(defvar helm-buffers-list-cache nil) -(defvar helm-buffer-max-len-mode nil) - -(defun helm-buffers-list--init () - ;; Issue #51 Create the list before `helm-buffer' creation. - (setq helm-buffers-list-cache (funcall (helm-attr 'buffer-list))) - (let ((result (cl-loop for b in helm-buffers-list-cache - maximize (length b) into len-buf - maximize (length (with-current-buffer b - (format-mode-line mode-name))) - into len-mode - finally return (cons len-buf len-mode)))) - (unless (default-value 'helm-buffer-max-length) - (helm-set-local-variable 'helm-buffer-max-length (car result))) - (unless (default-value 'helm-buffer-max-len-mode) - (helm-set-local-variable 'helm-buffer-max-len-mode (cdr result))))) - -(defclass helm-source-buffers (helm-source-sync helm-type-buffer) - ((buffer-list - :initarg :buffer-list - :initform #'helm-buffer-list - :custom function - :documentation - " A function with no arguments to create buffer list.") - (init :initform 'helm-buffers-list--init) - (candidates :initform helm-buffers-list-cache) - (matchplugin :initform nil) - (match :initform 'helm-buffers-match-function) - (persistent-action :initform 'helm-buffers-list-persistent-action) - (resume :initform (lambda () - (run-with-idle-timer - 0.1 nil (lambda () - (with-helm-buffer - (helm-force-update)))))) - (keymap :initform helm-buffer-map) - (migemo :initform 'nomultimatch) - (volatile :initform t) - (help-message :initform 'helm-buffer-help-message) - (persistent-help - :initform - "Show this buffer / C-u \\[helm-execute-persistent-action]: Kill this buffer"))) - -(defvar helm-source-buffers-list nil) - -(defvar helm-source-buffer-not-found - (helm-build-dummy-source - "Create buffer" - :action (helm-make-actions - "Create buffer (C-u choose mode)" - (lambda (candidate) - (let ((mjm (or (and helm-current-prefix-arg - (intern-soft (helm-comp-read - "Major-mode: " - helm-buffers-favorite-modes))) - (cl-loop for (r . m) in auto-mode-alist - when (string-match r candidate) - return m))) - (buffer (get-buffer-create candidate))) - (if mjm - (with-current-buffer buffer (funcall mjm)) - (set-buffer-major-mode buffer)) - (switch-to-buffer buffer)))))) - -(defvar ido-temp-list) -(defvar ido-ignored-list) -(defvar ido-process-ignore-lists) -(defvar ido-use-virtual-buffers) -(defvar ido-virtual-buffers) - -(defvar helm-source-ido-virtual-buffers - (helm-build-sync-source "Ido virtual buffers" - :candidates (lambda () - (let (ido-temp-list - ido-ignored-list - (ido-process-ignore-lists t)) - (when ido-use-virtual-buffers - (ido-add-virtual-buffers-to-list) - ido-virtual-buffers))) - :fuzzy-match helm-buffers-fuzzy-matching - :keymap helm-buffers-ido-virtual-map - :help-message 'helm-buffers-ido-virtual-help-message - :action '(("Find file" . helm-find-many-files) - ("Find file other window" . find-file-other-window) - ("Find file other frame" . find-file-other-frame) - ("Find file as root" . helm-find-file-as-root) - ("Grep File(s) `C-u recurse'" . helm-find-files-grep) - ("Zgrep File(s) `C-u Recurse'" . helm-ff-zgrep) - ("View file" . view-file) - ("Delete file(s)" . helm-delete-marked-files) - ("Open file externally (C-u to choose)" - . helm-open-file-externally)))) - - -(defvar ido-use-virtual-buffers) -(defvar ido-ignore-buffers) -(defun helm-buffer-list () - "Return the current list of buffers. -Currently visible buffers are put at the end of the list. -See `ido-make-buffer-list' for more infos." - (require 'ido) - (let ((ido-process-ignore-lists t) - ido-ignored-list - ido-ignore-buffers - ido-use-virtual-buffers) - (ido-make-buffer-list nil))) - -(defun helm-buffer-size (buffer) - "Return size of BUFFER." - (with-current-buffer buffer - (save-restriction - (widen) - (helm-file-human-size - (- (position-bytes (point-max)) - (position-bytes (point-min))))))) - -(defun helm-buffer--show-details (buf-name prefix help-echo - size mode dir face1 face2 - proc details type) - (append - (list - (concat prefix - (propertize buf-name 'face face1 - 'help-echo help-echo - 'type type))) - (and details - (list size mode - (propertize - (if proc - (format "(%s %s in `%s')" - (process-name proc) - (process-status proc) dir) - (format "(in `%s')" dir)) - 'face face2))))) - -(defun helm-buffer--details (buffer &optional details) - (let* ((mode (with-current-buffer buffer (format-mode-line mode-name))) - (buf (get-buffer buffer)) - (size (propertize (helm-buffer-size buf) - 'face 'helm-buffer-size)) - (proc (get-buffer-process buf)) - (dir (with-current-buffer buffer (abbreviate-file-name default-directory))) - (file-name (helm-aif (buffer-file-name buf) (abbreviate-file-name it))) - (name (buffer-name buf)) - (name-prefix (when (file-remote-p dir) - (propertize "@ " 'face 'helm-ff-prefix)))) - ;; No fancy things on remote buffers. - (if (and name-prefix helm-buffer-skip-remote-checking) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-file 'helm-buffer-process nil details 'filebuf) - (cond - ( ;; A dired buffer. - (rassoc buf dired-buffers) - (helm-buffer--show-details - name name-prefix dir size mode dir - 'helm-buffer-directory 'helm-buffer-process nil details 'dired)) - ;; A buffer file modified somewhere outside of emacs.=>red - ((and file-name - (file-exists-p file-name) - (not (verify-visited-file-modtime buf))) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-saved-out 'helm-buffer-process nil details 'modout)) - ;; A new buffer file not already saved on disk (or a deleted file) .=>indianred2 - ((and file-name (not (file-exists-p file-name))) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-not-saved 'helm-buffer-process nil details 'notsaved)) - ;; A buffer file modified and not saved on disk.=>orange - ((and file-name (buffer-modified-p buf)) - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-ff-symlink 'helm-buffer-process nil details 'mod)) - ;; A buffer file not modified and saved on disk.=>green - (file-name - (helm-buffer--show-details - name name-prefix file-name size mode dir - 'helm-buffer-file 'helm-buffer-process nil details 'filebuf)) - ;; Any non--file buffer.=>grey italic - (t - (helm-buffer--show-details - name (and proc name-prefix) dir size mode dir - 'italic 'helm-buffer-process proc details 'nofile)))))) - -(defun helm-highlight-buffers (buffers _source) - "Transformer function to highlight BUFFERS list. -Should be called after others transformers i.e (boring buffers)." - (cl-loop for i in buffers - for (name size mode meta) = (if helm-buffer-details-flag - (helm-buffer--details i 'details) - (helm-buffer--details i)) - for truncbuf = (if (> (string-width name) helm-buffer-max-length) - (helm-substring-by-width - name helm-buffer-max-length - helm-buffers-end-truncated-string) - (concat name - (make-string - (- (+ helm-buffer-max-length - (length helm-buffers-end-truncated-string)) - (string-width name)) ? ))) - for len = (length mode) - when (> len helm-buffer-max-len-mode) - do (setq helm-buffer-max-len-mode len) - for fmode = (concat (make-string - (- (max helm-buffer-max-len-mode len) len) ? ) - mode) - ;; The max length of a number should be 1023.9X where X is the - ;; units, this is 7 characters. - for formatted-size = (and size (format "%7s" size)) - collect (cons (if helm-buffer-details-flag - (concat truncbuf "\t" formatted-size - " " fmode " " meta) - name) - (get-buffer i)))) - -(defun helm-buffer--get-preselection (buffer) - (let ((bufname (buffer-name buffer))) - (concat "^" - (if (and (null helm-buffer-details-flag) - (numberp helm-buffer-max-length) - (> (string-width bufname) - helm-buffer-max-length)) - (regexp-quote - (helm-substring-by-width - bufname helm-buffer-max-length - helm-buffers-end-truncated-string)) - (concat (regexp-quote bufname) - (if helm-buffer-details-flag - "$" "[[:blank:]]+")))))) - -(defun helm-toggle-buffers-details () - (interactive) - (with-helm-alive-p - (let ((preselect (helm-buffer--get-preselection - (helm-get-selection)))) - (setq helm-buffer-details-flag (not helm-buffer-details-flag)) - (helm-force-update preselect)))) -(put 'helm-toggle-buffers-details 'helm-only t) - -(defun helm-buffers-sort-transformer (candidates _source) - (if (string= helm-pattern "") - candidates - (sort candidates - (lambda (s1 s2) - (< (string-width s1) (string-width s2)))))) - -(defun helm-buffers-mark-similar-buffers-1 () - (with-helm-window - (let ((type (get-text-property - 0 'type (helm-get-selection nil 'withprop)))) - (save-excursion - (goto-char (helm-get-previous-header-pos)) - (helm-next-line) - (let* ((next-head (helm-get-next-header-pos)) - (end (and next-head - (save-excursion - (goto-char next-head) - (forward-line -1) - (point)))) - (maxpoint (or end (point-max)))) - (while (< (point) maxpoint) - (helm-mark-current-line) - (let ((cand (helm-get-selection nil 'withprop))) - (when (and (not (helm-this-visible-mark)) - (eq (get-text-property 0 'type cand) type)) - (helm-make-visible-mark))) - (forward-line 1) (end-of-line)))) - (helm-mark-current-line) - (helm-display-mode-line (helm-get-current-source) t) - (message "%s candidates marked" (length helm-marked-candidates))))) - -(defun helm-buffers-mark-similar-buffers () - "Mark All buffers that have same property `type' than current. -i.e same color." - (interactive) - (with-helm-alive-p - (let ((marked (helm-marked-candidates))) - (if (and (>= (length marked) 1) - (with-helm-window helm-visible-mark-overlays)) - (helm-unmark-all) - (helm-buffers-mark-similar-buffers-1))))) -(put 'helm-buffers-mark-similar-buffers 'helm-only t) - - -;;; match functions -;; -(defun helm-buffer--match-mjm (pattern mjm) - (when (string-match "\\`\\*" pattern) - (cl-loop with patterns = (split-string (substring pattern 1) ",") - for pat in patterns - if (string-match "\\`!" pat) - collect (string-match (substring pat 1) mjm) into neg - else collect (string-match pat mjm) into pos - finally return - (let ((neg-test (cl-loop for i in neg thereis (numberp i))) - (pos-test (cl-loop for i in pos thereis (numberp i)))) - (or - (and neg (not pos) (not neg-test)) - (and pos pos-test) - (and neg neg-test (not neg-test))))))) - -(defun helm-buffer--match-pattern (pattern candidate) - (let ((bfn (if (and helm-buffers-fuzzy-matching - (not helm-migemo-mode) - (not (string-match "\\`\\^" pattern))) - #'helm--mapconcat-pattern - #'identity)) - (mfn (if helm-migemo-mode - #'helm-mm-migemo-string-match #'string-match))) - (if (string-match "\\`!" pattern) - (not (funcall mfn (funcall bfn (substring pattern 1)) - candidate)) - (funcall mfn (funcall bfn pattern) candidate)))) - -(defun helm-buffers--match-from-mjm (candidate) - (let* ((cand (replace-regexp-in-string "^\\s-\\{1\\}" "" candidate)) - (buf (get-buffer cand)) - (regexp (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - when (string-match "\\`\\*" p) - return p))) - (if regexp - (when buf - (with-current-buffer buf - (let ((mjm (format-mode-line mode-name))) - (helm-buffer--match-mjm regexp mjm)))) - t))) - -(defun helm-buffers--match-from-pat (candidate) - (let ((regexp-list (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - unless (string-match - "\\`\\(\\*\\)\\|\\(/\\)\\|\\(@\\)" p) - collect p))) - (if regexp-list - (cl-loop for re in regexp-list - always (helm-buffer--match-pattern re candidate)) - t))) - -(defun helm-buffers--match-from-inside (candidate) - (let* ((cand (replace-regexp-in-string "^\\s-\\{1\\}" "" candidate)) - (buf (get-buffer cand)) - (regexp (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - when (string-match "\\`@\\(.*\\)" p) - return (match-string 1 p)))) - (if (and buf regexp) - (with-current-buffer buf - (save-excursion - (goto-char (point-min)) - (if helm-migemo-mode - (helm-mm-migemo-forward regexp nil t) - (re-search-forward regexp nil t)))) - t))) - -(defun helm-buffers--match-from-directory (candidate) - (let* ((cand (replace-regexp-in-string "^\\s-\\{1\\}" "" candidate)) - (buf (get-buffer cand)) - (buf-fname (buffer-file-name buf)) - (regexps (cl-loop with pattern = helm-pattern - for p in (split-string pattern) - when (string-match "\\`/" p) - collect p))) - (if regexps - (cl-loop for re in regexps - thereis - (and buf-fname - (string-match - (substring re 1) (helm-basedir buf-fname)))) - t))) - -(defun helm-buffers-match-function (candidate) - "Default function to match buffers." - (and (helm-buffers--match-from-pat candidate) - (helm-buffers--match-from-mjm candidate) - (helm-buffers--match-from-inside candidate) - (helm-buffers--match-from-directory candidate))) - - -(defun helm-buffer-query-replace-1 (&optional regexp-flag buffers) - "Query replace in marked buffers. -If REGEXP-FLAG is given use `query-replace-regexp'." - (let ((prompt (if regexp-flag "Query replace regexp" "Query replace")) - (bufs (or buffers (helm-marked-candidates))) - (helm--reading-passwd-or-string t)) - (cl-loop with args = (query-replace-read-args prompt regexp-flag t) - for buf in bufs - do - (save-window-excursion - (switch-to-buffer buf) - (save-excursion - (let ((case-fold-search t)) - (goto-char (point-min)) - (apply #'perform-replace - (list (nth 0 args) (nth 1 args) - t regexp-flag (nth 2 args) nil - multi-query-replace-map)))))))) - -(defun helm-buffer-query-replace-regexp (_candidate) - (helm-buffer-query-replace-1 'regexp)) - -(defun helm-buffer-query-replace (_candidate) - (helm-buffer-query-replace-1)) - -(defun helm-buffer-toggle-diff (candidate) - "Toggle diff buffer CANDIDATE with it's file." - (let (helm-persistent-action-use-special-display) - (helm-aif (get-buffer-window "*Diff*") - (progn (kill-buffer "*Diff*") - (set-window-buffer it helm-current-buffer)) - (diff-buffer-with-file (get-buffer candidate))))) - -(defun helm-buffer-diff-persistent () - "Toggle diff buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'diff-action 'helm-buffer-toggle-diff) - (helm-execute-persistent-action 'diff-action))) -(put 'helm-buffer-diff-persistent 'helm-only t) - -(defun helm-revert-buffer (candidate) - (with-current-buffer candidate - (helm-aif (buffer-file-name) - (and (file-exists-p it) (revert-buffer t t))))) - -(defun helm-revert-marked-buffers (_ignore) - (mapc 'helm-revert-buffer (helm-marked-candidates))) - -(defun helm-buffer-revert-and-update (_candidate) - (let ((marked (helm-marked-candidates)) - (preselect (helm-buffers--quote-truncated-buffer - (helm-get-selection)))) - (cl-loop for buf in marked do (helm-revert-buffer buf)) - (when (> (length marked) 1) (helm-unmark-all)) - (helm-force-update preselect))) - -(defun helm-buffer-revert-persistent () - "Revert buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'revert-action '(helm-buffer-revert-and-update . never-split)) - (helm-execute-persistent-action 'revert-action))) -(put 'helm-buffer-revert-persistent 'helm-only t) - -(defun helm-buffer-save-and-update (_candidate) - (let ((marked (helm-marked-candidates)) - (preselect (helm-get-selection nil t)) - (enable-recursive-minibuffers t)) - (cl-loop for buf in marked do - (with-current-buffer (get-buffer buf) - (when (buffer-file-name) (save-buffer)))) - (when (> (length marked) 1) (helm-unmark-all)) - (helm-force-update (regexp-quote preselect)))) - -(defun helm-buffer-save-persistent () - "Save buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'save-action '(helm-buffer-save-and-update . never-split)) - (helm-execute-persistent-action 'save-action))) -(put 'helm-buffer-save-persistent 'helm-only t) - -(defun helm-buffer-run-kill-persistent () - "Kill buffer without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'kill-action '(helm-buffers-persistent-kill . never-split)) - (helm-execute-persistent-action 'kill-action))) -(put 'helm-buffer-run-kill-persistent 'helm-only t) - -(defun helm-kill-marked-buffers (_ignore) - (let* ((bufs (helm-marked-candidates)) - (killed-bufs (cl-count-if 'kill-buffer bufs))) - (with-helm-buffer - (setq helm-marked-candidates nil - helm-visible-mark-overlays nil)) - (message "Killed %s buffer(s)" killed-bufs))) - -(defun helm-buffer-run-kill-buffers () - "Run kill buffer action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-kill-marked-buffers))) -(put 'helm-buffer-run-kill-buffers 'helm-only t) - -(defun helm-buffer-run-grep () - "Run Grep action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-buffers))) -(put 'helm-buffer-run-grep 'helm-only t) - -(defun helm-buffer-run-zgrep () - "Run Grep action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-zgrep-buffers))) -(put 'helm-buffer-run-zgrep 'helm-only t) - -(defun helm-buffer-run-query-replace-regexp () - "Run Query replace regexp action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-buffer-query-replace-regexp))) -(put 'helm-buffer-run-query-replace-regexp 'helm-only t) - -(defun helm-buffer-run-query-replace () - "Run Query replace action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-buffer-query-replace))) -(put 'helm-buffer-run-query-replace 'helm-only t) - -(defun helm-buffer-switch-other-window () - "Run switch to other window action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-switch-to-buffers-other-window))) -(put 'helm-buffer-switch-other-window 'helm-only t) - -(defun helm-buffer-switch-other-frame () - "Run switch to other frame action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'switch-to-buffer-other-frame))) -(put 'helm-buffer-switch-other-frame 'helm-only t) - -(defun helm-buffer-switch-to-elscreen () - "Run switch to elscreen action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-buffer-on-elscreen))) -(put 'helm-buffer-switch-to-elscreen 'helm-only t) - -(defun helm-buffer-run-ediff () - "Run ediff action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ediff-marked-buffers))) -(put 'helm-buffer-run-ediff 'helm-only t) - -(defun helm-buffer-run-ediff-merge () - "Run ediff action from `helm-source-buffers-list'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ediff-marked-buffers-merge))) -(put 'helm-buffer-run-ediff-merge 'helm-only t) - -(defun helm-buffers-persistent-kill-1 (buffer) - "Persistent action to kill buffer." - (if (eql (get-buffer buffer) (get-buffer helm-current-buffer)) - (progn - (message "Can't kill `helm-current-buffer' without quitting session") - (sit-for 1)) - (with-current-buffer (get-buffer buffer) - (kill-buffer buffer)) - (helm-delete-current-selection) - (with-helm-temp-hook 'helm-after-persistent-action-hook - (helm-force-update (regexp-quote (helm-get-selection nil t)))))) - -(defun helm-buffers--quote-truncated-buffer (buffer) - (let ((bufname (and (bufferp buffer) - (buffer-name buffer)))) - (when bufname - (regexp-quote - (if helm-buffer-max-length - (helm-substring-by-width - bufname helm-buffer-max-length - "") - bufname))))) - -(defun helm-buffers-persistent-kill (_buffer) - (let ((marked (helm-marked-candidates))) - (unwind-protect - (cl-loop for b in marked - do (progn (helm-preselect - (format "^%s" - (helm-buffers--quote-truncated-buffer b))) - (when (y-or-n-p (format "kill buffer (%s)? " b)) - (helm-buffers-persistent-kill-1 b)) - (message nil))) - (with-helm-buffer - (setq helm-marked-candidates nil - helm-visible-mark-overlays nil)) - (helm-force-update (helm-buffers--quote-truncated-buffer - (helm-get-selection)))))) - -(defun helm-buffers-list-persistent-action (candidate) - (let ((current (window-buffer helm-persistent-action-display-window))) - (if (or (eql current (get-buffer helm-current-buffer)) - (not (eql current (get-buffer candidate)))) - (switch-to-buffer candidate) - (switch-to-buffer helm-current-buffer)))) - -(defun helm-ediff-marked-buffers (_candidate &optional merge) - "Ediff 2 marked buffers or CANDIDATE and `helm-current-buffer'. -With optional arg MERGE call `ediff-merge-buffers'." - (let ((lg-lst (length (helm-marked-candidates))) - buf1 buf2) - (cl-case lg-lst - (0 - (error "Error:You have to mark at least 1 buffer")) - (1 - (setq buf1 helm-current-buffer - buf2 (cl-first (helm-marked-candidates)))) - (2 - (setq buf1 (cl-first (helm-marked-candidates)) - buf2 (cl-second (helm-marked-candidates)))) - (t - (error "Error:To much buffers marked!"))) - (if merge - (ediff-merge-buffers buf1 buf2) - (ediff-buffers buf1 buf2)))) - -(defun helm-ediff-marked-buffers-merge (candidate) - "Ediff merge `helm-current-buffer' with CANDIDATE. -See `helm-ediff-marked-buffers'." - (helm-ediff-marked-buffers candidate t)) - -(defun helm-multi-occur-as-action (_candidate) - "Multi occur action for `helm-source-buffers-list'. -Can be used by any source that list buffers." - (let ((helm-moccur-always-search-in-current - (if helm-current-prefix-arg - (not helm-moccur-always-search-in-current) - helm-moccur-always-search-in-current)) - (buffers (helm-marked-candidates)) - (input (cl-loop for i in (split-string helm-pattern " " t) - thereis (and (string-match "\\`@\\(.*\\)" i) - (match-string 1 i))))) - (helm-multi-occur-1 buffers input))) - -(defun helm-buffers-run-multi-occur () - "Run `helm-multi-occur-as-action' by key." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-multi-occur-as-action))) -(put 'helm-buffers-run-multi-occur 'helm-only t) - -(defun helm-buffers-toggle-show-hidden-buffers () - (interactive) - (with-helm-alive-p - (let ((filter-attrs (helm-attr 'filtered-candidate-transformer - helm-source-buffers-list))) - (if (memq 'helm-shadow-boring-buffers filter-attrs) - (helm-attrset 'filtered-candidate-transformer - (cons 'helm-skip-boring-buffers - (remove 'helm-shadow-boring-buffers - filter-attrs)) - helm-source-buffers-list t) - (helm-attrset 'filtered-candidate-transformer - (cons 'helm-shadow-boring-buffers - (remove 'helm-skip-boring-buffers - filter-attrs)) - helm-source-buffers-list t)) - (helm-force-update)))) -(put 'helm-buffers-toggle-show-hidden-buffers 'helm-only t) - - -;;; Candidate Transformers -;; -;; -(defun helm-skip-boring-buffers (buffers _source) - (helm-skip-entries buffers - helm-boring-buffer-regexp-list - helm-white-buffer-regexp-list)) - -(defun helm-shadow-boring-buffers (buffers _source) - "Buffers matching `helm-boring-buffer-regexp' will be -displayed with the `file-name-shadow' face if available." - (helm-shadow-entries buffers helm-boring-buffer-regexp-list)) - - -;;;###autoload -(defun helm-buffers-list () - "Preconfigured `helm' to list buffers." - (interactive) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (helm :sources '(helm-source-buffers-list - helm-source-ido-virtual-buffers - helm-source-buffer-not-found) - :buffer "*helm buffers*" - :keymap helm-buffer-map - :truncate-lines helm-buffers-truncate-lines)) - -;;;###autoload -(defun helm-mini () - "Preconfigured `helm' lightweight version \(buffer -> recentf\)." - (interactive) - (require 'helm-files) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (helm :sources helm-mini-default-sources - :buffer "*helm mini*" - :ff-transformer-show-only-basename nil - :truncate-lines helm-buffers-truncate-lines)) - -(provide 'helm-buffers) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-buffers.el ends here diff --git a/elpa/helm-20160217.958/helm-color.el b/elpa/helm-20160217.958/helm-color.el deleted file mode 100644 index 4eadfa58..00000000 --- a/elpa/helm-20160217.958/helm-color.el +++ /dev/null @@ -1,164 +0,0 @@ -;;; helm-color.el --- colors and faces -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) - -;;; Customize Face -;; -;; -(defun helm-custom-faces-init () - "Initialize buffer for `helm-source-customize-face'." - (unless (helm-candidate-buffer) - (save-selected-window - (list-faces-display) - (message nil)) - (helm-init-candidates-in-buffer - 'global - (with-current-buffer (get-buffer "*Faces*") - (buffer-substring - (next-single-char-property-change (point-min) 'face) - (point-max)))) - (kill-buffer "*Faces*"))) - -(defvar helm-source-customize-face - (helm-build-in-buffer-source "Customize Face" - :init 'helm-custom-faces-init - :get-line 'buffer-substring - :action '(("Customize" - . (lambda (line) - (customize-face (intern (car (split-string line)))))) - ("Copy name" - . (lambda (line) - (kill-new (car (split-string line " " t))))))) - "See (info \"(emacs)Faces\")") - -;;; Colors browser -;; -;; -(defun helm-colors-init () - (unless (helm-candidate-buffer) - (save-selected-window - (list-colors-display) - (message nil)) - (helm-init-candidates-in-buffer - 'global - (with-current-buffer (get-buffer "*Colors*") - (buffer-string))) - (kill-buffer "*Colors*"))) - -(defun helm-color-insert-name (candidate) - (with-helm-current-buffer - (insert (helm-colors-get-name candidate)))) - -(defun helm-color-kill-name (candidate) - (kill-new (helm-colors-get-name candidate))) - -(defun helm-color-insert-rgb (candidate) - (with-helm-current-buffer - (insert (helm-colors-get-rgb candidate)))) - -(defun helm-color-kill-rgb (candidate) - (kill-new (helm-colors-get-rgb candidate))) - -(defun helm-color-run-insert-name () - "Insert name of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-insert-name))) -(put 'helm-color-run-insert-name 'helm-only t) - -(defun helm-color-run-kill-name () - "Kill name of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-kill-name))) -(put 'helm-color-run-kill-name 'helm-only t) - -(defun helm-color-run-insert-rgb () - "Insert RGB of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-insert-rgb))) -(put 'helm-color-run-insert-rgb 'helm-only t) - -(defun helm-color-run-kill-rgb () - "Kill RGB of color from `helm-source-colors'" - (interactive) - (with-helm-alive-p (helm-exit-and-execute-action 'helm-color-kill-rgb))) -(put 'helm-color-run-kill-rgb 'helm-only t) - -(defvar helm-color-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-c n") 'helm-color-run-insert-name) - (define-key map (kbd "C-c N") 'helm-color-run-kill-name) - (define-key map (kbd "C-c r") 'helm-color-run-insert-rgb) - (define-key map (kbd "C-c R") 'helm-color-run-kill-rgb) - map)) - -(defvar helm-source-colors - (helm-build-in-buffer-source "Colors" - :init 'helm-colors-init - :get-line 'buffer-substring - :keymap helm-color-map - :persistent-help "Kill entry in RGB format." - :persistent-action 'helm-color-kill-rgb - :help-message 'helm-colors-help-message - :action - '(("Copy Name (C-c N)" . helm-color-kill-name) - ("Copy RGB (C-c R)" . helm-color-kill-rgb) - ("Insert Name (C-c n)" . helm-color-insert-name) - ("Insert RGB (C-c r)" . helm-color-insert-rgb)))) - -(defun helm-colors-get-name (candidate) - "Get color name." - (replace-regexp-in-string - " " "" - (with-temp-buffer - (insert (capitalize candidate)) - (goto-char (point-min)) - (search-forward-regexp "\\s-\\{2,\\}") - (delete-region (point) (point-max)) - (buffer-string)))) - -(defun helm-colors-get-rgb (candidate) - "Get color RGB." - (replace-regexp-in-string - " " "" - (with-temp-buffer - (insert (capitalize candidate)) - (goto-char (point-max)) - (search-backward-regexp "\\s-\\{2,\\}") - (delete-region (point) (point-min)) - (buffer-string)))) - -;;;###autoload -(defun helm-colors () - "Preconfigured `helm' for color." - (interactive) - (helm :sources '(helm-source-colors helm-source-customize-face) - :buffer "*helm colors*")) - -(provide 'helm-color) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-color.el ends here diff --git a/elpa/helm-20160217.958/helm-command.el b/elpa/helm-20160217.958/helm-command.el deleted file mode 100644 index 9f794850..00000000 --- a/elpa/helm-20160217.958/helm-command.el +++ /dev/null @@ -1,256 +0,0 @@ -;;; helm-command.el --- Helm execute-exended-command. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-mode) -(require 'helm-elisp) - - -(defgroup helm-command nil - "Emacs command related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-M-x-requires-pattern 0 - "Value of requires-pattern for `helm-M-x'. -Show all candidates on startup when 0 (default)." - :group 'helm-command - :type 'boolean) - -(defcustom helm-M-x-always-save-history nil - "`helm-M-x' Save command in `extended-command-history' even when it fail." - :group 'helm-command - :type 'boolean) - -(defcustom helm-M-x-reverse-history nil - "The history source of `helm-M-x' appear in second position when non--nil." - :group 'helm-command - :type 'boolean) - -(defcustom helm-M-x-fuzzy-match nil - "Enable fuzzy matching in `helm-M-x' when non--nil.") - - -;;; Faces -;; -;; -(defgroup helm-command-faces nil - "Customize the appearance of helm-command." - :prefix "helm-" - :group 'helm-command - :group 'helm-faces) - -(defface helm-M-x-key '((t (:foreground "orange" :underline t))) - "Face used in helm-M-x to show keybinding." - :group 'helm-command-faces) - - -(defvar helm-M-x-input-history nil) - - -(cl-defun helm-M-x-get-major-mode-command-alist (mode-map) - "Return alist of MODE-MAP." - (when mode-map - (cl-loop for key being the key-seqs of mode-map using (key-bindings com) - for str-key = (key-description key) - for ismenu = (string-match "" str-key) - unless ismenu collect (cons str-key com)))) - -(defun helm-get-mode-map-from-mode (mode) - "Guess the mode-map name according to MODE. -Some modes don't use conventional mode-map name -so we need to guess mode-map name. e.g python-mode ==> py-mode-map. -Return nil if no mode-map found." - (cl-loop ;; Start with a conventional mode-map name. - with mode-map = (intern-soft (format "%s-map" mode)) - with mode-string = (symbol-name mode) - with mode-name = (replace-regexp-in-string "-mode" "" mode-string) - while (not mode-map) - for count downfrom (length mode-name) - ;; Return when no result after parsing entire string. - when (eq count 0) return nil - for sub-name = (substring mode-name 0 count) - do (setq mode-map (intern-soft (format "%s-map" (concat sub-name "-mode")))) - finally return mode-map)) - -(defun helm-M-x-current-mode-map-alist () - "Return mode-map alist of current `major-mode'." - (let ((map-sym (helm-get-mode-map-from-mode major-mode))) - (when (and map-sym (boundp map-sym)) - (helm-M-x-get-major-mode-command-alist (symbol-value map-sym))))) - - -(defun helm-M-x-transformer-1 (candidates &optional sort) - "Transformer function to show bindings in emacs commands. -Show global bindings and local bindings according to current `major-mode'. -If SORT is non nil sort list with `helm-generic-sort-fn'. -Note that SORT should not be used when fuzzy matching because -fuzzy matching is running its own sort function with a different algorithm." - (with-helm-current-buffer - (cl-loop with local-map = (helm-M-x-current-mode-map-alist) - for cand in candidates - for local-key = (car (rassq cand local-map)) - for key = (substitute-command-keys (format "\\[%s]" cand)) - unless (get (intern (if (consp cand) (car cand) cand)) 'helm-only) - collect - (cons (cond ((and (string-match "^M-x" key) local-key) - (format "%s (%s)" - cand (propertize - local-key - 'face 'helm-M-x-key))) - ((string-match "^M-x" key) cand) - (t (format "%s (%s)" - cand (propertize - key - 'face 'helm-M-x-key)))) - cand) - into ls - finally return - (if sort (sort ls #'helm-generic-sort-fn) ls)))) - -(defun helm-M-x-transformer (candidates _source) - "Transformer function for `helm-M-x' candidates." - (helm-M-x-transformer-1 candidates (null helm--in-fuzzy))) - -(defun helm-M-x-transformer-hist (candidates _source) - "Transformer function for `helm-M-x' candidates." - (helm-M-x-transformer-1 candidates)) - -(defun helm-M-x--notify-prefix-arg () - ;; Notify a prefix-arg set AFTER calling M-x. - (when prefix-arg - (with-helm-window - (helm-display-mode-line (helm-get-current-source) 'force)))) - -(defun helm-cmd--get-current-function-name () - (save-excursion - (beginning-of-defun) - (cadr (split-string (buffer-substring-no-properties - (point-at-bol) (point-at-eol)))))) - -(defun helm-cmd--get-preconfigured-commands (&optional dir) - (let* ((helm-dir (or dir (helm-basedir (locate-library "helm")))) - (helm-autoload-file (expand-file-name "helm-autoloads.el" helm-dir)) - results) - (when (file-exists-p helm-autoload-file) - (with-temp-buffer - (insert-file-contents helm-autoload-file) - (while (re-search-forward "Preconfigured" nil t) - (push (substring (helm-cmd--get-current-function-name) 1) results)))) - results)) - -(defun helm-M-x-read-extended-command (&optional collection history) - "Read command name to invoke in `helm-M-x'. -Helm completion is not provided when executing or defining -kbd macros. -Optional arg COLLECTION is to allow using another COLLECTION -than the default which is OBARRAY." - (if (or defining-kbd-macro executing-kbd-macro) - (if helm-mode - (unwind-protect - (progn - (helm-mode -1) - (read-extended-command)) - (helm-mode 1)) - (read-extended-command)) - (let* ((orig-fuzzy-sort-fn helm-fuzzy-sort-fn) - (helm-fuzzy-sort-fn (lambda (candidates source) - (funcall orig-fuzzy-sort-fn - candidates source 'real))) - (helm--mode-line-display-prefarg t) - (tm (run-at-time 1 0.1 'helm-M-x--notify-prefix-arg)) - (helm-move-selection-after-hook - (cons (lambda () (setq current-prefix-arg nil)) - helm-move-selection-after-hook))) - (setq extended-command-history - (cl-loop for c in extended-command-history - when (and c (commandp (intern c))) - do (set-text-properties 0 (length c) nil c) - and collect c)) - (unwind-protect - (let ((msg "Error: Specifying a prefix arg before calling `helm-M-x'")) - (when current-prefix-arg - (ding) - (message "%s" msg) - (while (not (sit-for 1)) - (discard-input)) - (user-error msg)) - (setq current-prefix-arg nil) - (helm-comp-read - "M-x " (or collection obarray) - :test 'commandp - :requires-pattern helm-M-x-requires-pattern - :name "Emacs Commands" - :buffer "*helm M-x*" - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe this command" - :history (or history extended-command-history) - :reverse-history helm-M-x-reverse-history - :input-history 'helm-M-x-input-history - :del-input nil - :help-message 'helm-M-x-help-message - :must-match t - :fuzzy helm-M-x-fuzzy-match - :nomark t - :candidates-in-buffer t - :fc-transformer 'helm-M-x-transformer - :hist-fc-transformer 'helm-M-x-transformer-hist)) - (cancel-timer tm) - (setq helm--mode-line-display-prefarg nil))))) - -;;;###autoload -(defun helm-M-x (arg &optional command-name) - "Preconfigured `helm' for Emacs commands. -It is `helm' replacement of regular `M-x' `execute-extended-command'. - -Unlike regular `M-x' emacs vanilla `execute-extended-command' command, -the prefix args if needed, are passed AFTER starting `helm-M-x'. - -You can get help on each command by persistent action." - (interactive (list current-prefix-arg (helm-M-x-read-extended-command))) - (let ((sym-com (and (stringp command-name) (intern-soft command-name)))) - ;; Avoid having `this-command' set to *exit-minibuffer. - (setq this-command sym-com - ;; Handle C-x z (repeat) Issue #322 - real-this-command sym-com) - ;; If helm-M-x is called with regular emacs completion (kmacro) - ;; use the value of arg otherwise use helm-current-prefix-arg. - (let ((prefix-arg (or helm-current-prefix-arg arg))) - ;; This ugly construct is to save history even on error. - (unless helm-M-x-always-save-history - (command-execute sym-com 'record)) - (setq extended-command-history - (cons command-name - (delete command-name extended-command-history))) - (when helm-M-x-always-save-history - (command-execute sym-com 'record))))) - - -(provide 'helm-command) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-command.el ends here diff --git a/elpa/helm-20160217.958/helm-config.el b/elpa/helm-20160217.958/helm-config.el deleted file mode 100644 index 219a6893..00000000 --- a/elpa/helm-20160217.958/helm-config.el +++ /dev/null @@ -1,169 +0,0 @@ -;;; helm-config.el --- Applications library for `helm.el' -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - - -;;; Require -;; -;; -(declare-function async-bytecomp-package-mode "ext:async-bytecomp.el") -(when (require 'async-bytecomp nil t) - (and (fboundp 'async-bytecomp-package-mode) - (async-bytecomp-package-mode 1))) - - -(defgroup helm-config nil - "Various configurations for Helm." - :group 'helm) - -(defcustom helm-command-prefix-key "C-x c" - "The key `helm-command-prefix' is bound to in the global map." - :type '(choice (string :tag "Key") (const :tag "no binding")) - :group 'helm-config - :set - (lambda (var key) - (when (and (boundp var) (symbol-value var)) - (define-key (current-global-map) - (read-kbd-macro (symbol-value var)) nil)) - (when key - (define-key (current-global-map) - (read-kbd-macro key) 'helm-command-prefix)) - (set var key))) - -(defcustom helm-minibuffer-history-key "C-r" - "The key `helm-minibuffer-history' is bound to in minibuffer local maps." - :type '(choice (string :tag "Key") (const :tag "no binding")) - :group 'helm-config - :set - (lambda (var key) - (cl-dolist (map '(minibuffer-local-completion-map - minibuffer-local-filename-completion-map - minibuffer-local-filename-must-match-map ; Emacs 23.1.+ - minibuffer-local-isearch-map - minibuffer-local-map - minibuffer-local-must-match-filename-map ; Older Emacsen - minibuffer-local-must-match-map - minibuffer-local-ns-map)) - (when (and (boundp map) (keymapp (symbol-value map))) - (when (and (boundp var) (symbol-value var)) - (define-key (symbol-value map) - (read-kbd-macro (symbol-value var)) nil)) - (when key - (define-key (symbol-value map) - (read-kbd-macro key) 'helm-minibuffer-history)))) - (set var key))) - -;;; Command Keymap -;; -;; -(defvar helm-command-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "a") 'helm-apropos) - (define-key map (kbd "e") 'helm-etags-select) - (define-key map (kbd "l") 'helm-locate) - (define-key map (kbd "s") 'helm-surfraw) - (define-key map (kbd "r") 'helm-regexp) - (define-key map (kbd "m") 'helm-man-woman) - (define-key map (kbd "t") 'helm-top) - (define-key map (kbd "/") 'helm-find) - (define-key map (kbd "i") 'helm-semantic-or-imenu) - (define-key map (kbd "I") 'helm-imenu-in-all-buffers) - (define-key map (kbd "") 'helm-lisp-completion-at-point) - (define-key map (kbd "p") 'helm-list-emacs-process) - (define-key map (kbd "C-x r b") 'helm-filtered-bookmarks) - (define-key map (kbd "M-y") 'helm-show-kill-ring) - (define-key map (kbd "C-c ") 'helm-all-mark-rings) - (define-key map (kbd "C-x C-f") 'helm-find-files) - (define-key map (kbd "f") 'helm-multi-files) - (define-key map (kbd "C-:") 'helm-eval-expression-with-eldoc) - (define-key map (kbd "C-,") 'helm-calcul-expression) - (define-key map (kbd "M-x") 'helm-M-x) - (define-key map (kbd "M-s o") 'helm-occur) - (define-key map (kbd "M-g a") 'helm-do-grep-ag) - (define-key map (kbd "c") 'helm-colors) - (define-key map (kbd "F") 'helm-select-xfont) - (define-key map (kbd "8") 'helm-ucs) - (define-key map (kbd "C-c f") 'helm-recentf) - (define-key map (kbd "C-c g") 'helm-google-suggest) - (define-key map (kbd "h i") 'helm-info-at-point) - (define-key map (kbd "h r") 'helm-info-emacs) - (define-key map (kbd "h g") 'helm-info-gnus) - (define-key map (kbd "h h") 'helm-documentation) - (define-key map (kbd "C-x C-b") 'helm-buffers-list) - (define-key map (kbd "C-x r i") 'helm-register) - (define-key map (kbd "C-c C-x") 'helm-run-external-command) - (define-key map (kbd "b") 'helm-resume) - (define-key map (kbd "M-g i") 'helm-gid) - (define-key map (kbd "@") 'helm-list-elisp-packages) - map)) - -;; Don't override the keymap we just defined with an empty -;; keymap. This also protect bindings changed by the user. -(defvar helm-command-prefix) -(define-prefix-command 'helm-command-prefix) -(fset 'helm-command-prefix helm-command-map) -(setq helm-command-prefix helm-command-map) - - -;;; Menu - -(require 'helm-easymenu) - - -;;;###autoload -(defun helm-configuration () - "Customize `helm'." - (interactive) - (customize-group "helm")) - - -;;; Fontlock -(cl-dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) - (font-lock-add-keywords - mode - '(("(\\<\\(with-helm-after-update-hook\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-temp-hook\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-window\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-quittable\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-current-buffer\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-buffer\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-show-completion\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-default-directory\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-display-same-window\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(with-helm-restore-variables\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(define-helm-type-attribute\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(helm-multi-key-defun\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(helm-while-no-input\\)\\>" 1 font-lock-keyword-face) - ("(\\<\\(helm-aif\\)\\>" 1 font-lock-keyword-face)))) - - -;;; Load the autoload file -;; It should have been generated either by -;; package.el or the make file. - -(load "helm-autoloads" nil t) - -(provide 'helm-config) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-config.el ends here diff --git a/elpa/helm-20160217.958/helm-dabbrev.el b/elpa/helm-20160217.958/helm-dabbrev.el deleted file mode 100644 index 7e768d93..00000000 --- a/elpa/helm-20160217.958/helm-dabbrev.el +++ /dev/null @@ -1,356 +0,0 @@ -;;; helm-dabbrev.el --- Helm implementation of dabbrev. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'helm) -(require 'helm-help) -(require 'helm-elisp) ; For show-completion. - -(defgroup helm-dabbrev nil - "Dabbrev related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-dabbrev-always-search-all t - "Always search in all buffers when non--nil. -Note that even if nil, a search in all buffers -will occur if the length of candidates is <= than -`helm-dabbrev-max-length-result'." - :group 'helm-dabbrev - :type 'boolean) - -(defcustom helm-dabbrev-max-length-result 20 - "Max length of candidates before searching in all buffers. -If number of candidates found in current-buffer is <= to this, -search in all buffers. -Have no effect when `helm-dabbrev-always-search-all' is non--nil." - :group 'helm-dabbrev - :type 'integer) - -(defcustom helm-dabbrev-ignored-buffers-regexps - '("\\*helm" "\\*Messages" "\\*Echo Area" "\\*Buffer List") - "List of regexps matching names of buffers that helm-dabbrev should not check." - :group 'helm-dabbrev - :type '(repeat regexp)) - -(defcustom helm-dabbrev-related-buffer-fn #'helm-dabbrev--same-major-mode-p - "A function that decide if a buffer to search in is related to `current-buffer'. -This is actually determined by comparing `major-mode' of the buffer to search -and the `current-buffer'. -The function take one arg, the buffer which is current, look at -`helm-dabbrev--same-major-mode-p' for example. - -When nil all buffers are considered related to `current-buffer'." - :group 'helm-dabbrev - :type 'function) - -(defcustom helm-dabbrev-major-mode-assoc - '((emacs-lisp-mode . lisp-interaction-mode)) - "Major mode association alist. -This allow helm-dabbrev searching in buffers with the associated `major-mode'. -e.g \(emacs-lisp-mode . lisp-interaction-mode\) -will allow searching in the lisp-interaction-mode buffer when `current-buffer' -is an `emacs-lisp-mode' buffer and vice versa i.e -no need to provide \(lisp-interaction-mode . emacs-lisp-mode\) association. - -When nil check is the searched buffer have same `major-mode' -than the `current-buffer'. -This have no effect when `helm-dabbrev-related-buffer-fn' is nil or of course -bound to a function that doesn't handle this var." - :type '(alist :key-type symbol :value-type symbol) - :group 'helm-dabbrev) - -(defcustom helm-dabbrev-lineno-around 30 - "Search first in this number of lines before an after point." - :group 'helm-dabbrev - :type 'integer) - -(defcustom helm-dabbrev-cycle-threshold nil - "Number of time helm-dabbrev cycle before displaying helm completion. -When nil or 0 disable cycling." - :group 'helm-dabbrev - :type '(choice (const :tag "Cycling disabled" nil) integer)) - -(defcustom helm-dabbrev-case-fold-search 'smart - "Set `case-fold-search' in `helm-dabbrev'. -Same as `helm-case-fold-search' but for `helm-dabbrev'. -Note that this is not affecting searching in helm buffer, -but the initial search for all candidates in buffer(s)." - :group 'helm-dabbrev - :type '(choice (const :tag "Ignore case" t) - (const :tag "Respect case" nil) - (other :tag "Smart" 'smart))) - - -(defvar helm-dabbrev-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-/") 'helm-next-line) - (define-key map (kbd "M-:") 'helm-previous-line) - map)) - -;; Internal -(defvar helm-dabbrev--exclude-current-buffer-flag nil) -(defvar helm-dabbrev--cache nil) -(defvar helm-dabbrev--data nil) -(defvar helm-dabbrev--regexp "\\s-\\|\t\\|[(\[\{\"'`=<$;.]\\|\\s\\\\|^") -(cl-defstruct helm-dabbrev-info dabbrev limits iterator) - - -(defun helm-dabbrev--buffer-list () - (cl-loop with lst = (buffer-list) - for buf in (if helm-dabbrev--exclude-current-buffer-flag - (cdr lst) lst) - unless (cl-loop for r in helm-dabbrev-ignored-buffers-regexps - thereis (string-match r (buffer-name buf))) - collect buf)) - -(defun helm-dabbrev--same-major-mode-p (start-buffer) - ;; START-BUFFER is the current-buffer where we start searching. - ;; Determine the major-mode of START-BUFFER as `cur-maj-mode'. - ;; Each time the loop go in another buffer we try to find if its - ;; `major-mode' is: - ;; - same as the `cur-maj-mode' - ;; - derived from `cur-maj-mode' - ;; - have an assoc entry (major-mode . cur-maj-mode) - ;; - have an rassoc entry (cur-maj-mode . major-mode) - ;; - check if one of these entries inherit from another one in - ;; `helm-dabbrev-major-mode-assoc'. - (let* ((cur-maj-mode (with-current-buffer start-buffer major-mode)) - (c-assoc-mode (assq cur-maj-mode helm-dabbrev-major-mode-assoc)) - (c-rassoc-mode (rassq cur-maj-mode helm-dabbrev-major-mode-assoc)) - (o-assoc-mode (assq major-mode helm-dabbrev-major-mode-assoc)) - (o-rassoc-mode (rassq major-mode helm-dabbrev-major-mode-assoc)) - (cdr-c-assoc-mode (cdr c-assoc-mode)) - (cdr-o-assoc-mode (cdr o-assoc-mode))) - (or (eq major-mode cur-maj-mode) - (derived-mode-p cur-maj-mode) - (or (eq cdr-c-assoc-mode major-mode) - (eq (car c-rassoc-mode) major-mode) - (eq (cdr (assq cdr-c-assoc-mode helm-dabbrev-major-mode-assoc)) - major-mode) - (eq (car (rassq cdr-c-assoc-mode helm-dabbrev-major-mode-assoc)) - major-mode)) - (or (eq cdr-o-assoc-mode cur-maj-mode) - (eq (car o-rassoc-mode) cur-maj-mode) - (eq (cdr (assq cdr-o-assoc-mode helm-dabbrev-major-mode-assoc)) - cur-maj-mode) - (eq (car (rassq cdr-o-assoc-mode helm-dabbrev-major-mode-assoc)) - cur-maj-mode))))) - -(defun helm-dabbrev--collect (str limit ignore-case all) - (let* ((case-fold-search ignore-case) - (buffer1 (current-buffer)) ; start buffer. - (minibuf (minibufferp buffer1)) - result pos-before pos-after - (search-and-store - (lambda (pattern direction) - (while (cl-case direction - (1 (search-forward pattern nil t)) - (-1 (search-backward pattern nil t)) - (2 (let ((pos - (save-excursion - (forward-line - helm-dabbrev-lineno-around) - (point)))) - (setq pos-after pos) - (search-forward pattern pos t))) - (-2 (let ((pos - (save-excursion - (forward-line - (- helm-dabbrev-lineno-around)) - (point)))) - (setq pos-before pos) - (search-backward pattern pos t)))) - (let* ((replace-regexp (concat "\\(" helm-dabbrev--regexp "\\)\\'")) - (match-1 (helm-aif (thing-at-point 'symbol) - ;; `thing-at-point' returns - ;; the quote outside of e-lisp mode, - ;; e.g in message mode, - ;; `foo' => foo' - ;; but in e-lisp like modes: - ;; `foo' => foo - ;; so remove it [1]. - (replace-regexp-in-string - replace-regexp - "" (substring-no-properties it)))) - (match-2 (helm-aif (thing-at-point 'filename) - ;; Same as in [1]. - (replace-regexp-in-string - replace-regexp - "" (substring-no-properties it)))) - (lst (if (string= match-1 match-2) - (list match-1) - (list match-1 match-2)))) - (cl-loop for match in lst - unless (or (string= str match) - (member match result)) - do (push match result))))))) - (cl-loop for buf in (if all (helm-dabbrev--buffer-list) - (list (current-buffer))) - - do (with-current-buffer buf - (when (or minibuf ; check against all buffers when in minibuffer. - (if helm-dabbrev-related-buffer-fn - (funcall helm-dabbrev-related-buffer-fn buffer1) - t)) - (save-excursion - ;; Start searching before thing before point. - (goto-char (- (point) (length str))) - ;; Search the last 30 lines before point. - (funcall search-and-store str -2)) ; store pos [1] - (save-excursion - ;; Search the next 30 lines after point. - (funcall search-and-store str 2)) ; store pos [2] - (save-excursion - ;; Search all before point. - (goto-char pos-before) ; start from [1] - (funcall search-and-store str -1)) - (save-excursion - ;; Search all after point. - (goto-char pos-after) ; start from [2] - (funcall search-and-store str 1)))) - when (> (length result) limit) return (nreverse result) - finally return (nreverse result)))) - -(defun helm-dabbrev--get-candidates (abbrev) - (cl-assert abbrev nil "[No Match]") - (with-current-buffer (current-buffer) - (let* ((dabbrev-get (lambda (str all-bufs) - (helm-dabbrev--collect - str helm-candidate-number-limit - (cl-case helm-dabbrev-case-fold-search - (smart (helm-set-case-fold-search-1 abbrev)) - (t helm-dabbrev-case-fold-search)) - all-bufs))) - (lst (funcall dabbrev-get abbrev helm-dabbrev-always-search-all))) - (if (and (not helm-dabbrev-always-search-all) - (<= (length lst) helm-dabbrev-max-length-result)) - ;; Search all but don't recompute current-buffer. - (let ((helm-dabbrev--exclude-current-buffer-flag t)) - (append lst (funcall dabbrev-get abbrev 'all-bufs))) - lst)))) - -(defun helm-dabbrev-default-action (candidate) - (with-helm-current-buffer - (let* ((limits (helm-bounds-of-thing-before-point - helm-dabbrev--regexp)) - (beg (car limits)) - (end (point))) - (run-with-timer - 0.01 nil - 'helm-insert-completion-at-point - beg end candidate)))) - -;;;###autoload -(defun helm-dabbrev () - "Preconfigured helm for dynamic abbreviations." - (interactive) - (let ((dabbrev (helm-thing-before-point nil helm-dabbrev--regexp)) - (limits (helm-bounds-of-thing-before-point helm-dabbrev--regexp)) - (enable-recursive-minibuffers t) - (cycling-disabled-p (or (null helm-dabbrev-cycle-threshold) - (zerop helm-dabbrev-cycle-threshold))) - (helm-execute-action-at-once-if-one t) - (helm-quit-if-no-candidate - (lambda () - (message "[Helm-dabbrev: No expansion found]")))) - (cl-assert (and (stringp dabbrev) (not (string= dabbrev ""))) - nil "[Helm-dabbrev: Nothing found before point]") - (when (and - ;; have been called at least once. - (helm-dabbrev-info-p helm-dabbrev--data) - ;; But user have moved with some other command - ;; in the meaning time. - (not (eq last-command 'helm-dabbrev))) - (setq helm-dabbrev--data nil)) - (when cycling-disabled-p - (setq helm-dabbrev--cache (helm-dabbrev--get-candidates dabbrev))) - (unless (or cycling-disabled-p - (helm-dabbrev-info-p helm-dabbrev--data)) - (setq helm-dabbrev--cache (helm-dabbrev--get-candidates dabbrev)) - (setq helm-dabbrev--data - (make-helm-dabbrev-info - :dabbrev dabbrev - :limits limits - :iterator - (helm-iter-list - (cl-loop for i in helm-dabbrev--cache when - (and i (string-match - (concat "^" (regexp-quote dabbrev)) i)) - collect i into selection - when (and selection - (= (length selection) - helm-dabbrev-cycle-threshold)) - ;; When selection len reach - ;; `helm-dabbrev-cycle-threshold' - ;; return selection. - return selection - ;; selection len never reach - ;; `helm-dabbrev-cycle-threshold' - ;; return selection. - finally return selection))))) - (let ((iter (and (helm-dabbrev-info-p helm-dabbrev--data) - (helm-dabbrev-info-iterator helm-dabbrev--data))) - deactivate-mark) - ;; Cycle until iterator is consumed. - (helm-aif (and iter (helm-iter-next iter)) - (progn - (helm-insert-completion-at-point - (car (helm-dabbrev-info-limits helm-dabbrev--data)) - (cdr limits) it) - ;; Move already tried candidates to end of list. - (setq helm-dabbrev--cache (append (remove it helm-dabbrev--cache) - (list it)))) - ;; If the length of candidates is only one when computed - ;; that's mean the unique matched item have already been - ;; inserted by the iterator, so no need to reinsert the old dabbrev, - ;; just let helm exiting with "No expansion found". - (let ((old-dabbrev (if (helm-dabbrev-info-p helm-dabbrev--data) - (helm-dabbrev-info-dabbrev helm-dabbrev--data) - dabbrev))) - (unless (cdr (all-completions old-dabbrev helm-dabbrev--cache)) - (setq cycling-disabled-p t)) - ;; Iterator is now empty, reset dabbrev to initial value - ;; and start helm completion. - (unless cycling-disabled-p - (setq dabbrev old-dabbrev - limits (helm-dabbrev-info-limits helm-dabbrev--data)) - (setq helm-dabbrev--data nil) - (delete-region (car limits) (point)) - (insert dabbrev)) - (with-helm-show-completion (car limits) (cdr limits) - (helm :sources (helm-build-in-buffer-source "Dabbrev Expand" - :data helm-dabbrev--cache - :persistent-action 'ignore - :persistent-help "DoNothing" - :keymap helm-dabbrev-map - :action 'helm-dabbrev-default-action) - :buffer "*helm dabbrev*" - :input (concat "^" dabbrev " ") - :resume 'noresume - :allow-nest t))))))) - -(provide 'helm-dabbrev) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-dabbrev.el ends here diff --git a/elpa/helm-20160217.958/helm-easymenu.el b/elpa/helm-20160217.958/helm-easymenu.el deleted file mode 100644 index 498ea76e..00000000 --- a/elpa/helm-20160217.958/helm-easymenu.el +++ /dev/null @@ -1,90 +0,0 @@ -;;; helm-easymenu.el --- Helm easymenu definitions. -*- lexical-binding: t -*- - -;; Copyright (C) 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'easymenu) - -(easy-menu-add-item - nil '("Tools") - '("Helm" - ["Find any Files/Buffers" helm-multi-files t] - ["Helm Everywhere (Toggle)" helm-mode t] - ["Helm resume" helm-resume t] - "----" - ("Files" - ["Find files" helm-find-files t] - ["Recent Files" helm-recentf t] - ["Locate" helm-locate t] - ["Search Files with find" helm-find t] - ["Bookmarks" helm-filtered-bookmarks t]) - ("Buffers" - ["Find buffers" helm-buffers-list t]) - ("Commands" - ["Emacs Commands" helm-M-x t] - ["Externals Commands" helm-run-external-command t]) - ("Help" - ["Helm Apropos" helm-apropos t]) - ("Info" - ["Info at point" helm-info-at-point t] - ["Emacs Manual index" helm-info-emacs t] - ["Gnus Manual index" helm-info-gnus t] - ["Helm documentation" helm-documentation t]) - ("Org" - ["Org headlines in org agenda files" helm-org-agenda-files-headings t] - ["Org headlines in buffer" helm-org-in-buffer-headings t]) - ("Elpa" - ["Elisp packages" helm-list-elisp-packages t] - ["Elisp packages no fetch" helm-list-elisp-packages-no-fetch t]) - ("Tools" - ["Occur" helm-occur t] - ["Grep current directory with AG" helm-do-grep-ag t] - ["Gid" helm-gid t] - ["Etags" helm-etags-select t] - ["Lisp complete at point" helm-lisp-completion-at-point t] - ["Browse Kill ring" helm-show-kill-ring t] - ["Browse register" helm-register t] - ["Mark Ring" helm-all-mark-rings t] - ["Regexp handler" helm-regexp t] - ["Colors & Faces" helm-colors t] - ["Show xfonts" helm-select-xfont t] - ["Ucs Symbols" helm-ucs t] - ["Imenu" helm-imenu t] - ["Imenu all" helm-imenu-in-all-buffers t] - ["Semantic or Imenu" helm-semantic-or-imenu t] - ["Google Suggest" helm-google-suggest t] - ["Eval expression" helm-eval-expression-with-eldoc t] - ["Calcul expression" helm-calcul-expression t] - ["Man pages" helm-man-woman t] - ["Top externals process" helm-top t] - ["Emacs internals process" helm-list-emacs-process t]) - "----" - ["Preferred Options" helm-configuration t]) - "Spell Checking") - -(easy-menu-add-item nil '("Tools") '("----") "Spell Checking") - - -(provide 'helm-easymenu) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-easymenu.el ends here diff --git a/elpa/helm-20160217.958/helm-elisp-package.el b/elpa/helm-20160217.958/helm-elisp-package.el deleted file mode 100644 index abbb5458..00000000 --- a/elpa/helm-20160217.958/helm-elisp-package.el +++ /dev/null @@ -1,390 +0,0 @@ -;;; helm-elisp-package.el --- helm interface for package.el -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'package) - -(defgroup helm-el-package nil - "helm elisp packages." - :group 'helm) - -(defcustom helm-el-package-initial-filter 'all - "Show only installed, upgraded or all packages at startup." - :group 'helm-el-package - :type '(radio :tag "Initial filter for elisp packages" - (const :tag "Show all packages" all) - (const :tag "Show installed packages" installed) - (const :tag "Show not installed packages" uninstalled) - (const :tag "Show upgradable packages" upgrade))) - -;; internals vars -(defvar helm-el-package--show-only 'all) -(defvar helm-el-package--initialized-p nil) -(defvar helm-el-package--tabulated-list nil) -(defvar helm-el-package--upgrades nil) -(defvar helm-el-package--removable-packages nil) - -(defun helm-el-package--init () - (when (null package-alist) - (setq helm-el-package--show-only 'all)) - (when (fboundp 'package--removable-packages) - (setq helm-el-package--removable-packages - (package--removable-packages))) - (save-selected-window - (list-packages helm-el-package--initialized-p) - (setq helm-el-package--initialized-p t) - (message nil)) - (helm-init-candidates-in-buffer - 'global - (with-current-buffer (get-buffer "*Packages*") - (setq helm-el-package--tabulated-list tabulated-list-entries) - (buffer-string))) - (setq helm-el-package--upgrades (helm-el-package-menu--find-upgrades)) - (if helm-force-updating-p - (if helm-el-package--upgrades - (message "%d package(s) can be upgraded, Refreshing packages list done" - (length helm-el-package--upgrades)) - (message "Refreshing packages list done, no upgrades available")) - (setq helm-el-package--show-only (if helm-el-package--upgrades - 'upgrade - helm-el-package-initial-filter))) - (kill-buffer "*Packages*")) - -(defun helm-el-package-describe (candidate) - (let ((id (get-text-property 0 'tabulated-list-id candidate))) - (describe-package (if (fboundp 'package-desc-name) - (package-desc-name id) - (car id))))) - -(defun helm-el-package-visit-homepage (candidate) - (let* ((id (get-text-property 0 'tabulated-list-id candidate)) - (pkg (if (fboundp 'package-desc-name) (package-desc-name id) - (car id))) - (desc (cadr (assoc pkg package-archive-contents))) - (extras (package-desc-extras desc)) - (url (and (listp extras) (cdr-safe (assoc :url extras))))) - (if (stringp url) - (browse-url url) - (message "Package %s has no homepage" - (propertize (symbol-name pkg) - 'face 'font-lock-keyword-face))))) - -(defun helm-el-run-visit-homepage () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-visit-homepage))) -(put 'helm-el-run-visit-homepage 'helm-only t) - -(defun helm-el-package-install-1 (pkg-list) - (cl-loop with mkd = pkg-list - for p in mkd - for id = (get-text-property 0 'tabulated-list-id p) - do (package-install - (if (fboundp 'package-desc-name) - (package-desc-name id) - (car id))) - collect (if (fboundp 'package-desc-full-name) - id - (car id)) - into installed-list - finally do (progn - (when (boundp 'package-selected-packages) - (customize-save-variable - 'package-selected-packages - (append (mapcar 'package-desc-name installed-list) - package-selected-packages))) - (if (fboundp 'package-desc-full-name) - (message (format "%d packages installed:\n(%s)" - (length installed-list) - (mapconcat #'package-desc-full-name - installed-list ", "))) - (message (format "%d packages installed:\n(%s)" - (length installed-list) - (mapconcat 'symbol-name installed-list ", "))))))) - -(defun helm-el-package-install (_candidate) - (helm-el-package-install-1 (helm-marked-candidates))) - -(defun helm-el-run-package-install () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-install))) -(put 'helm-el-run-package-install 'helm-only t) - -(defun helm-el-package-uninstall-1 (pkg-list) - (cl-loop with mkd = pkg-list - for p in mkd - for id = (get-text-property 0 'tabulated-list-id p) - do - (condition-case-unless-debug err - (with-no-warnings - (if (fboundp 'package-desc-full-name) - ;; emacs 24.4 - (package-delete id) - ;; emacs 24.3 - (package-delete (symbol-name (car id)) - (package-version-join (cdr id))))) - (error (message (cadr err)))) - unless (assoc (elt id 1) package-alist) - collect (if (fboundp 'package-desc-full-name) - id - (cons (symbol-name (car id)) - (package-version-join (cdr id)))) - into delete-list - finally do (if delete-list - (if (fboundp 'package-desc-full-name) - ;; emacs 24.4 - (message (format "%d packages deleted:\n(%s)" - (length delete-list) - (mapconcat #'package-desc-full-name - delete-list ", "))) - ;; emacs 24.3 - (message (format "%d packages deleted:\n(%s)" - (length delete-list) - (mapconcat (lambda (x) - (concat (car x) "-" (cdr x))) - delete-list ", "))) - ;; emacs 24.3 doesn't update - ;; its `package-alist' after deleting. - (cl-loop for p in package-alist - when (assq (symbol-name (car p)) delete-list) - do (setq package-alist (delete p package-alist)))) - "No package deleted"))) - -(defun helm-el-package-uninstall (_candidate) - (helm-el-package-uninstall-1 (helm-marked-candidates))) - -(defun helm-el-run-package-uninstall () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-uninstall))) -(put 'helm-el-run-package-uninstall 'helm-only t) - -(defun helm-el-package-menu--find-upgrades () - (cl-loop for entry in helm-el-package--tabulated-list - for pkg-desc = (car entry) - for status = (package-desc-status pkg-desc) - when (member status '("installed" "unsigned" "dependency")) - collect pkg-desc - into installed - when (member status '("available" "new")) - collect (cons (package-desc-name pkg-desc) pkg-desc) - into available - finally return - (cl-loop for pkg in installed - for avail-pkg = (assq (package-desc-name pkg) available) - when (and avail-pkg - (version-list-< (package-desc-version pkg) - (package-desc-version - (cdr avail-pkg)))) - collect avail-pkg))) - -(defun helm-el-package-upgrade-1 (pkg-list) - (cl-loop for p in pkg-list - for pkg-desc = (car p) - for upgrade = (cdr (assq (package-desc-name pkg-desc) - helm-el-package--upgrades)) - do - (cond ((null upgrade) - (ignore)) - ((equal pkg-desc upgrade) - ;;Install. - (package-install pkg-desc)) - (t - ;; Delete. - (if (boundp 'package-selected-packages) - (with-no-warnings - (package-delete pkg-desc t t)) - (package-delete pkg-desc)))))) - -(defun helm-el-package-upgrade (_candidate) - (helm-el-package-upgrade-1 - (cl-loop with pkgs = (helm-marked-candidates) - for p in helm-el-package--tabulated-list - for pkg = (car p) - if (member (symbol-name (package-desc-name pkg)) pkgs) - collect p))) - -(defun helm-el-run-package-upgrade () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-upgrade))) -(put 'helm-el-run-package-upgrade 'helm-only t) - -(defun helm-el-package-upgrade-all () - (if helm-el-package--upgrades - (with-helm-display-marked-candidates - helm-marked-buffer-name (mapcar (lambda (x) (symbol-name (car x))) - helm-el-package--upgrades) - (when (y-or-n-p "Upgrade all packages? ") - (helm-el-package-upgrade-1 helm-el-package--tabulated-list))) - (message "No packages to upgrade actually!"))) - -(defun helm-el-package-upgrade-all-action (_candidate) - (helm-el-package-upgrade-all)) - -(defun helm-el-run-package-upgrade-all () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-upgrade-all-action))) -(put 'helm-el-run-package-upgrade-all 'helm-only t) - -(defun helm-el-package--transformer (candidates _source) - (cl-loop for c in candidates - for id = (get-text-property 0 'tabulated-list-id c) - for name = (if (fboundp 'package-desc-name) - (package-desc-name id) - (car id)) - for installed-p = (assq name package-alist) - for upgrade-p = (assq name helm-el-package--upgrades) - for user-installed-p = (and (boundp 'package-selected-packages) - (memq name package-selected-packages)) - do (when user-installed-p (put-text-property 0 2 'display "S " c)) - do (when (memq name helm-el-package--removable-packages) - (put-text-property 0 2 'display "U " c) - (put-text-property - 2 (+ (length (symbol-name name)) 2) - 'face 'font-lock-variable-name-face c)) - for cand = (cons c (car (split-string c))) - when (or (and upgrade-p - (eq helm-el-package--show-only 'upgrade)) - (and installed-p - (eq helm-el-package--show-only 'installed)) - (and (not installed-p) - (eq helm-el-package--show-only 'uninstalled)) - (eq helm-el-package--show-only 'all)) - collect cand)) - -(defun helm-el-package-show-upgrade () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'upgrade) - (helm-update))) -(put 'helm-el-package-show-upgrade 'helm-only t) - -(defun helm-el-package-show-installed () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'installed) - (helm-update))) -(put 'helm-el-package-show-installed 'helm-only t) - -(defun helm-el-package-show-all () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'all) - (helm-update))) -(put 'helm-el-package-show-all 'helm-only t) - -(defun helm-el-package-show-uninstalled () - (interactive) - (with-helm-alive-p - (setq helm-el-package--show-only 'uninstalled) - (helm-update))) -(put 'helm-el-package-show-uninstalled 'helm-only t) - -(defvar helm-el-package-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-I") 'helm-el-package-show-installed) - (define-key map (kbd "M-O") 'helm-el-package-show-uninstalled) - (define-key map (kbd "M-U") 'helm-el-package-show-upgrade) - (define-key map (kbd "M-A") 'helm-el-package-show-all) - (define-key map (kbd "C-c i") 'helm-el-run-package-install) - (define-key map (kbd "C-c r") 'helm-el-run-package-reinstall) - (define-key map (kbd "C-c d") 'helm-el-run-package-uninstall) - (define-key map (kbd "C-c u") 'helm-el-run-package-upgrade) - (define-key map (kbd "C-c U") 'helm-el-run-package-upgrade-all) - (define-key map (kbd "C-c @") 'helm-el-run-visit-homepage) - map)) - -(defvar helm-source-list-el-package nil) -(defclass helm-list-el-package-source (helm-source-in-buffer) - ((init :initform 'helm-el-package--init) - (get-line :initform 'buffer-substring) - (filtered-candidate-transformer :initform 'helm-el-package--transformer) - (action-transformer - :initform - (lambda (actions candidate) - (let ((pkg-desc (get-text-property - 0 'tabulated-list-id candidate)) - (acts (if helm-el-package--upgrades - (append actions '(("Upgrade all packages" - . helm-el-package-upgrade-all-action))) - actions))) - (cond ((and (package-installed-p (package-desc-name pkg-desc)) - (cdr (assq (package-desc-name pkg-desc) - helm-el-package--upgrades))) - (append '(("Upgrade package(s)" . helm-el-package-upgrade) - ("Uninstall package(s)" . helm-el-package-uninstall)) acts)) - ((cdr (assq (package-desc-name pkg-desc) - helm-el-package--upgrades)) - (append '(("Upgrade package(s)" . helm-el-package-upgrade)) acts)) - ((package-installed-p (package-desc-name pkg-desc)) - (append acts '(("Reinstall package(s)" . helm-el-package-reinstall) - ("Uninstall package(s)" . helm-el-package-uninstall)))) - (t (append acts '(("Install packages(s)" . helm-el-package-install)))))))) - (help-message :initform 'helm-el-package-help-message) - (keymap :initform helm-el-package-map) - (update :initform 'helm-el-package--update) - (candidate-number-limit :initform 9999) - (action :initform '(("Describe package" . helm-el-package-describe) - ("Visit homepage" . helm-el-package-visit-homepage))))) - -(defun helm-el-package--update () - (setq helm-el-package--initialized-p nil)) - -(defun helm-el-package-reinstall (_pkg) - (cl-loop for p in (helm-marked-candidates) - for pkg-desc = (get-text-property 0 'tabulated-list-id p) - for name = (package-desc-name pkg-desc) - do (if (fboundp 'package-reinstall) - (package-reinstall name) - (package-delete pkg-desc) - (package-install name)))) - -(defun helm-el-run-package-reinstall () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-el-package-reinstall))) -(put 'helm-el-run-package-reinstall 'helm-only t) - -;;;###autoload -(defun helm-list-elisp-packages (arg) - "Preconfigured helm for listing and handling emacs packages." - (interactive "P") - (when arg (setq helm-el-package--initialized-p nil)) - (unless helm-source-list-el-package - (setq helm-source-list-el-package - (helm-make-source "list packages" 'helm-list-el-package-source))) - (helm :sources 'helm-source-list-el-package - :buffer "*helm list packages*")) - -;;;###autoload -(defun helm-list-elisp-packages-no-fetch () - "Preconfigured helm for emacs packages. -Same as `helm-list-elisp-packages' but don't fetch packages on remote." - (interactive) - (let ((helm-el-package--initialized-p t)) - (helm-list-elisp-packages nil))) - -(provide 'helm-elisp-package) - -;;; helm-elisp-package.el ends here diff --git a/elpa/helm-20160217.958/helm-elisp.el b/elpa/helm-20160217.958/helm-elisp.el deleted file mode 100644 index b2f40b43..00000000 --- a/elpa/helm-20160217.958/helm-elisp.el +++ /dev/null @@ -1,903 +0,0 @@ -;;; helm-elisp.el --- Elisp symbols completion for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-info) -(require 'helm-eval) -(require 'helm-files) -(require 'advice) - -(declare-function 'helm-describe-function "helm-lib") -(declare-function 'helm-describe-variable "helm-lib") -(declare-function 'helm-describe-face "helm-lib") - - -;;; Customizable values - -(defgroup helm-elisp nil - "Elisp related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-turn-on-show-completion t - "Display candidate in buffer while moving selection when non--nil." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-show-completion-use-special-display t - "A special display will be used in Lisp completion if non--nil. -All functions that are wrapped in macro `with-helm-show-completion' -will be affected." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-show-completion-min-window-height 7 - "Minimum completion window height used in show completion. -This is used in macro `with-helm-show-completion'." - :group 'helm-elisp - :type 'integer) - -(defcustom helm-lisp-quoted-function-list - '(funcall apply mapc cl-mapc mapcar cl-mapcar - callf callf2 cl-callf cl-callf2 fset - fboundp fmakunbound symbol-function) - "List of function where quoted function completion happen. -e.g give only function names after \(funcall '." - :group 'helm-elisp - :type '(repeat (choice symbol))) - -(defcustom helm-lisp-unquoted-function-list - '(function defadvice) - "List of function where unquoted function completion happen. -e.g give only function names after \(function ." - :group 'helm-elisp - :type '(repeat (choice symbol))) - -(defcustom helm-apropos-fuzzy-match nil - "Enable fuzzy matching for `helm-apropos' when non-nil." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-lisp-fuzzy-completion nil - "Enable fuzzy matching in emacs-lisp completion when non-nil. -NOTE: This enable fuzzy matching in helm native implementation of -elisp completion, but not on helmized elisp completion, i.e -fuzzy completion is not available in `completion-at-point'." - :group 'helm-elisp - :type 'boolean) - -(defcustom helm-apropos-function-list '(helm-def-source--emacs-commands - helm-def-source--emacs-functions - helm-def-source--eieio-classes - helm-def-source--eieio-generic - helm-def-source--emacs-variables - helm-def-source--emacs-faces - helm-def-source--helm-attributes) - "A list of functions that build helm sources to use in `helm-apropos'." - :group 'helm-elisp - :type '(repeat (choice symbol))) - - -;;; Faces -;; -;; -(defgroup helm-elisp-faces nil - "Customize the appearance of helm-elisp." - :prefix "helm-" - :group 'helm-elisp - :group 'helm-faces) - -(defface helm-lisp-show-completion - '((t (:background "DarkSlateGray"))) - "Face used for showing candidates in `helm-lisp-completion'." - :group 'helm-elisp-faces) - -(defface helm-lisp-completion-info - '((t (:foreground "red"))) - "Face used for showing info in `helm-lisp-completion'." - :group 'helm-elisp-faces) - -(defcustom helm-elisp-help-function - 'helm-elisp-show-help - "Function for displaying help for Lisp symbols." - :group 'helm-elisp - :type '(choice (function :tag "Open help for the symbol." - helm-elisp-show-help) - (function :tag "Show one liner in modeline." - helm-elisp-show-doc-modeline))) - - -;;; Show completion. -;; -;; Provide show completion with macro `with-helm-show-completion'. - -(defvar helm-show-completion-overlay nil) - -;; Called each time cursor move in helm-buffer. -(defun helm-show-completion () - (with-helm-current-buffer - (overlay-put helm-show-completion-overlay - 'display (substring-no-properties - (helm-get-selection))))) - -(defun helm-show-completion-init-overlay (beg end) - (when (and helm-turn-on-show-completion beg end) - (setq helm-show-completion-overlay (make-overlay beg end)) - (overlay-put helm-show-completion-overlay - 'face 'helm-lisp-show-completion))) - -(defun helm-show-completion-display-function (buffer &rest _args) - "A special resized helm window is used depending on position in BUFFER." - (with-selected-window (selected-window) - (if (window-dedicated-p) - (helm-default-display-buffer buffer) - (let* ((screen-size (+ (count-screen-lines (window-start) (point) t) - 1 ; mode-line - (if header-line-format 1 0))) ; header-line - (def-size (- (window-height) - helm-show-completion-min-window-height)) - (upper-height (max window-min-height (min screen-size def-size))) - split-window-keep-point) - (recenter -1) - (set-window-buffer (if (active-minibuffer-window) - (minibuffer-selected-window) - (split-window nil upper-height - helm-split-window-default-side)) - buffer))))) - -(defmacro with-helm-show-completion (beg end &rest body) - "Show helm candidate in an overlay at point. -BEG and END are the beginning and end position of the current completion -in `helm-current-buffer'. -BODY is an helm call where we want to enable show completion. -If `helm-turn-on-show-completion' is nil just do nothing." - (declare (indent 2) (debug t)) - `(let ((helm-move-selection-after-hook - (and helm-turn-on-show-completion - (append (list 'helm-show-completion) - helm-move-selection-after-hook)))) - (with-helm-temp-hook 'helm-after-initialize-hook - (with-helm-buffer - (set (make-local-variable 'helm-display-function) - (if helm-show-completion-use-special-display - 'helm-show-completion-display-function - 'helm-default-display-buffer)))) - (unwind-protect - (progn - (helm-show-completion-init-overlay ,beg ,end) - ,@body) - (when (and helm-turn-on-show-completion - helm-show-completion-overlay - (overlayp helm-show-completion-overlay)) - (delete-overlay helm-show-completion-overlay))))) - - -;;; Lisp symbol completion. -;; -;; -(defun helm-lisp-completion--predicate-at-point (beg) - ;; Return a predicate for `all-completions'. - (let ((fn-sym-p (lambda () - (or - (and (eq (char-before) ?\ ) - (save-excursion - (skip-syntax-backward " " (point-at-bol)) - (memq (symbol-at-point) - helm-lisp-unquoted-function-list))) - (and (eq (char-before) ?\') - (save-excursion - (forward-char -1) - (eq (char-before) ?\#))))))) - (save-excursion - (goto-char beg) - (if (or - ;; Complete on all symbols in non--lisp modes (logs mail etc..) - (not (memq major-mode '(emacs-lisp-mode - lisp-interaction-mode - inferior-emacs-lisp-mode))) - (not (or (funcall fn-sym-p) - (and (eq (char-before) ?\') - (save-excursion - (forward-char (if (funcall fn-sym-p) -2 -1)) - (skip-syntax-backward " " (point-at-bol)) - (memq (symbol-at-point) - helm-lisp-quoted-function-list))) - (eq (char-before) ?\())) ; no paren before str. - ;; Looks like we are in a let statement. - (condition-case nil - (progn (up-list -2) (forward-char 1) - (eq (char-after) ?\()) - (error nil))) - (lambda (sym) - (or (boundp sym) (fboundp sym) (symbol-plist sym))) - #'fboundp)))) - -(defun helm-thing-before-point (&optional limits regexp) - "Return symbol name before point. -If REGEXP is specified return what REGEXP find before point. -By default match the beginning of symbol before point. -With LIMITS arg specified return the beginning and end position -of symbol before point." - (save-excursion - (let (beg - (end (point)) - (boundary (field-beginning nil nil (point-at-bol)))) - (if (re-search-backward (or regexp "\\_<") boundary t) - (setq beg (match-end 0)) - (setq beg boundary)) - (unless (= beg end) - (if limits - (cons beg end) - (buffer-substring-no-properties beg end)))))) - -(defun helm-bounds-of-thing-before-point (&optional regexp) - "Get the beginning and end position of `helm-thing-before-point'. -Return a cons \(beg . end\)." - (helm-thing-before-point 'limits regexp)) - -(defun helm-insert-completion-at-point (beg end str) - ;; When there is no space after point - ;; we are completing inside a symbol or - ;; after a partial symbol with the next arg aside - ;; without space, in this case mark the region. - ;; deleting it would remove the - ;; next arg which is unwanted. - (delete-region beg end) - (insert str) - (let ((pos (cdr (or (bounds-of-thing-at-point 'symbol) - ;; needed for helm-dabbrev. - (bounds-of-thing-at-point 'filename))))) - (when (and pos (< (point) pos)) - (push-mark pos t t)))) - -(defvar helm-lisp-completion--cache nil) -(defvar helm-lgst-len nil) -;;;###autoload -(defun helm-lisp-completion-at-point () - "Preconfigured helm for lisp symbol completion at point." - (interactive) - (setq helm-lgst-len 0) - (let* ((target (helm-thing-before-point)) - (beg (car (helm-bounds-of-thing-before-point))) - (end (point)) - (pred (and beg (helm-lisp-completion--predicate-at-point beg))) - (loc-vars (and (fboundp 'elisp--local-variables) - (ignore-errors - (mapcar #'symbol-name (elisp--local-variables))))) - (glob-syms (and target pred (all-completions target obarray pred))) - (candidates (append loc-vars glob-syms)) - (helm-quit-if-no-candidate t) - (helm-execute-action-at-once-if-one t) - (enable-recursive-minibuffers t)) - (setq helm-lisp-completion--cache (cl-loop for sym in candidates - for len = (length sym) - when (> len helm-lgst-len) - do (setq helm-lgst-len len) - collect sym)) - (if candidates - (with-helm-show-completion beg end - ;; Overlay is initialized now in helm-current-buffer. - (helm - :sources (helm-build-in-buffer-source "Lisp completion" - :data helm-lisp-completion--cache - :persistent-action 'helm-lisp-completion-persistent-action - :nomark t - :fuzzy-match helm-lisp-fuzzy-completion - :persistent-help (helm-lisp-completion-persistent-help) - :filtered-candidate-transformer - 'helm-lisp-completion-transformer - :action `(lambda (candidate) - (with-helm-current-buffer - (run-with-timer - 0.01 nil - 'helm-insert-completion-at-point - ,beg ,end candidate)))) - :input (if helm-lisp-fuzzy-completion - target (concat target " ")) - :resume 'noresume - :buffer "*helm lisp completion*" - :allow-nest t)) - (message "[No Match]")))) - -(defun helm-lisp-completion-persistent-action (candidate &optional name) - "Show documentation for the function. -Documentation is shown briefly in mode-line or completely -in other window according to the value of `helm-elisp-help-function'." - (funcall helm-elisp-help-function candidate name)) - -(defun helm-lisp-completion-persistent-help () - "Return persistent-help according to the value of `helm-elisp-help-function'" - (cl-ecase helm-elisp-help-function - (helm-elisp-show-doc-modeline "Show brief doc in mode-line") - (helm-elisp-show-help "Toggle show help for the symbol"))) - -(defun helm-elisp--show-help-1 (candidate &optional name) - (let ((sym (intern-soft candidate))) - (cl-typecase sym - ((and fboundp boundp) - (if (member name '("describe-function" "describe-variable")) - (funcall (intern (format "helm-%s" name)) sym) - ;; When there is no way to know what to describe - ;; prefer describe-function. - (helm-describe-function sym))) - (fboundp (helm-describe-function sym)) - (bound (helm-describe-variable sym)) - (face (helm-describe-face sym))))) - -(defun helm-elisp-show-help (candidate &optional name) - "Show full help for the function CANDIDATE. -Arg NAME specify the name of the top level function -calling helm generic completion (e.g \"describe-function\")." - (helm-elisp--persistent-help - candidate 'helm-elisp--show-help-1 name)) - -(defun helm-elisp-show-doc-modeline (candidate &optional name) - "Show brief documentation for the function in modeline." - (let ((cursor-in-echo-area t) - mode-line-in-non-selected-windows) - (helm-show-info-in-mode-line - (propertize - (helm-get-first-line-documentation - (intern candidate) name) - 'face 'helm-lisp-completion-info)))) - -(defun helm-lisp-completion-transformer (candidates _source) - "Helm candidates transformer for lisp completion." - (cl-loop for c in candidates - for sym = (intern c) - for annot = (cl-typecase sym - (command " (Com)") - (class " (Class)") - (generic " (Gen)") - (fbound " (Fun)") - (bound " (Var)") - (face " (Face)")) - for spaces = (make-string (- helm-lgst-len (length c)) ? ) - collect (cons (concat c spaces annot) c) into lst - finally return (sort lst #'helm-generic-sort-fn))) - -(defun helm-get-first-line-documentation (sym &optional name) - "Return first line documentation of symbol SYM. -If SYM is not documented, return \"Not documented\"." - (let ((doc (cl-typecase sym - ((and fboundp boundp) - (cond ((string= name "describe-function") - (documentation sym t)) - ((string= name "describe-variable") - (documentation-property sym 'variable-documentation t)) - (t (documentation sym t)))) - (fbound (documentation sym t)) - (bound (documentation-property sym 'variable-documentation t)) - (face (face-documentation sym))))) - (if (and doc (not (string= doc "")) - ;; `documentation' return "\n\n(args...)" - ;; for CL-style functions. - (not (string-match-p "^\n\n" doc))) - (car (split-string doc "\n")) - "Not documented"))) - -;;; File completion. -;; -;; Complete file name at point. - -;;;###autoload -(defun helm-complete-file-name-at-point (&optional force) - "Preconfigured helm to complete file name at point." - (interactive) - (require 'helm-mode) - (let* ((tap (thing-at-point 'filename)) - beg - (init (and tap - (or force - (save-excursion - (end-of-line) - (search-backward tap (point-at-bol) t) - (setq beg (point)) - (looking-back "[^'`( ]" (1- (point))))) - (expand-file-name - (substring-no-properties tap)))) - (end (point)) - (helm-quit-if-no-candidate t) - (helm-execute-action-at-once-if-one t) - completion) - (with-helm-show-completion beg end - (setq completion (helm-read-file-name "FileName: " - :initial-input init))) - (when (and completion (not (string= completion ""))) - (delete-region beg end) (insert (if (string-match "^~" tap) - (abbreviate-file-name completion) - completion))))) - -;;;###autoload -(defun helm-lisp-indent () - ;; It is meant to use with `helm-define-multi-key' which - ;; does not support args for functions yet, so use `current-prefix-arg' - ;; for now instead of (interactive "P"). - (interactive) - (let ((tab-always-indent (or (eq tab-always-indent 'complete) - tab-always-indent))) - (indent-for-tab-command current-prefix-arg))) - -;;;###autoload -(defun helm-lisp-completion-or-file-name-at-point () - "Preconfigured helm to complete lisp symbol or filename at point. -Filename completion happen if string start after or between a double quote." - (interactive) - (let* ((tap (thing-at-point 'filename))) - (if (and tap (save-excursion - (end-of-line) - (search-backward tap (point-at-bol) t) - (looking-back "[^'`( ]" (1- (point))))) - (helm-complete-file-name-at-point) - (helm-lisp-completion-at-point)))) - - -;;; Apropos -;; -;; -(defun helm-apropos-init (test default) - "Init candidates buffer for `helm-apropos' sources." - (require 'helm-help) - (helm-init-candidates-in-buffer 'global - (let ((default-symbol (and (stringp default) - (intern-soft default))) - (symbols (all-completions "" obarray test))) - (if (and default-symbol (funcall test default-symbol)) - (cons default-symbol symbols) - symbols)))) - -(defun helm-apropos-init-faces (default) - "Init candidates buffer for faces for `helm-apropos'." - (require 'helm-help) - (with-current-buffer (helm-candidate-buffer 'global) - (goto-char (point-min)) - (let ((default-symbol (and (stringp default) - (intern-soft default))) - (faces (face-list))) - (when (and default-symbol (facep default-symbol)) - (insert (concat default "\n"))) - (insert - (mapconcat #'prin1-to-string - (if default - (cl-remove-if (lambda (sym) (string= sym default)) faces) - faces) - "\n"))))) - -(defun helm-apropos-default-sort-fn (candidates _source) - (if (string= helm-pattern "") - candidates - (sort candidates #'helm-generic-sort-fn))) - -(defun helm-def-source--emacs-variables (&optional default) - (helm-build-in-buffer-source "Variables" - :init `(lambda () - (helm-apropos-init - (lambda (x) (and (boundp x) (not (keywordp x)))) ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-variable)) - :persistent-help "Describe variable" - :action '(("Describe variable" . helm-describe-variable) - ("Find variable" . helm-find-variable) - ("Info lookup" . helm-info-lookup-symbol) - ("Set variable" . helm-set-variable)) - :action-transformer - (lambda (actions candidate) - (let ((sym (helm-symbolify candidate))) - (if (custom-variable-p sym) - (append - actions - (let ((standard-value (eval (car (get sym 'standard-value))))) - (unless (equal standard-value (symbol-value sym)) - `(("Reset Variable to default value" . - ,(lambda (candidate) - (let ((sym (helm-symbolify candidate))) - (set sym standard-value))))))) - '(("Customize variable" . - (lambda (candidate) - (customize-option (helm-symbolify candidate)))))) - actions))))) - -(defun helm-def-source--emacs-faces (&optional default) - "Create `helm' source for faces to be displayed with -`helm-apropos'." - (helm-build-in-buffer-source "Faces" - :init (lambda () (helm-apropos-init-faces default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer - (append (and (null helm-apropos-fuzzy-match) - '(helm-apropos-default-sort-fn)) - (list - (lambda (candidates _source) - (cl-loop for c in candidates - collect (propertize c 'face (intern c)))))) - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-face)) - :persistent-help "Describe face" - :nomark t - :action '(("Describe face" . helm-describe-face) - ("Find face" . helm-find-face-definition) - ("Customize face" . (lambda (candidate) - (customize-face (helm-symbolify candidate))))))) - -(defun helm-def-source--helm-attributes (&optional _default) - (let ((def-act (lambda (candidate) - (let (special-display-buffer-names - special-display-regexps - helm-persistent-action-use-special-display) - (with-output-to-temp-buffer "*Help*" - (princ (get (intern candidate) 'helm-attrdoc))))))) - (helm-build-sync-source "Helm attributes" - :candidates (lambda () - (mapcar 'symbol-name helm-attributes)) - :fuzzy-match helm-apropos-fuzzy-match - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate def-act)) - :persistent-help "Describe helm attribute" - :action def-act))) - -(defun helm-def-source--emacs-commands (&optional default) - (helm-build-in-buffer-source "Commands" - :init `(lambda () - (helm-apropos-init 'commandp ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe command" - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-def-source--emacs-functions (&optional default) - (helm-build-in-buffer-source "Functions" - :init `(lambda () - (helm-apropos-init (lambda (x) - (and (fboundp x) - (not (commandp x)) - (not (generic-p x)) - (not (class-p x)))) - ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe function" - :nomark t - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-def-source--eieio-classes (&optional default) - (helm-build-in-buffer-source "Classes" - :init `(lambda () - (helm-apropos-init (lambda (x) - (class-p x)) - ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe class" - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-def-source--eieio-generic (&optional default) - (helm-build-in-buffer-source "Generic functions" - :init `(lambda () - (helm-apropos-init (lambda (x) - (generic-p x)) - ,default)) - :fuzzy-match helm-apropos-fuzzy-match - :filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) - 'helm-apropos-default-sort-fn) - :nomark t - :persistent-action (lambda (candidate) - (helm-elisp--persistent-help - candidate 'helm-describe-function)) - :persistent-help "Describe generic function" - :action '(("Describe function" . helm-describe-function) - ("Find function" . helm-find-function) - ("Info lookup" . helm-info-lookup-symbol)))) - -(defun helm-info-lookup-symbol-1 (c) - (let ((helm-execute-action-at-once-if-one t) - (helm-quit-if-no-candidate - `(lambda () - (message "`%s' Not Documented as a symbol" ,c)))) - (helm :sources '(helm-source-info-elisp - helm-source-info-cl - helm-source-info-eieio) - :resume 'noresume - :buffer "*helm lookup*" - :input c))) - -(defun helm-info-lookup-symbol (candidate) - (run-with-timer 0.01 nil #'helm-info-lookup-symbol-1 candidate)) - -(defun helm-elisp--persistent-help (candidate fun &optional name) - (let ((hbuf (get-buffer (help-buffer)))) - (if (and (helm-attr 'help-running-p) - (string= candidate (helm-attr 'help-current-symbol)) - (null helm-persistent-action-use-special-display)) - (progn - ;; When started from a help buffer, - ;; Don't kill this buffer as it is helm-current-buffer. - (unless (equal hbuf helm-current-buffer) - (kill-buffer hbuf) - (set-window-buffer (get-buffer-window hbuf) - helm-current-buffer)) - (helm-attrset 'help-running-p nil)) - (if name (funcall fun candidate name) (funcall fun candidate)) - (helm-attrset 'help-running-p t)) - (helm-attrset 'help-current-symbol candidate))) - -;;;###autoload -(defun helm-apropos () - "Preconfigured helm to describe commands, functions, variables and faces." - (interactive) - (let ((default (thing-at-point 'symbol))) - (helm :sources - (mapcar (lambda (func) - (funcall func default)) - helm-apropos-function-list) - :buffer "*helm apropos*" - :preselect (and default (concat "\\_<" (regexp-quote default) "\\_>"))))) - - -;;; Advices -;; -;; -(defvar helm-source-advice - '((name . "Function Advice") - (candidates . helm-advice-candidates) - (action ("Toggle Enable/Disable" . helm-advice-toggle)) - (persistent-action . helm-advice-persistent-action) - (nomark) - (multiline) - (persistent-help . "Describe function / C-u C-j: Toggle advice"))) - -(defun helm-advice-candidates () - (cl-loop for (fname) in ad-advised-functions - for function = (intern fname) - append - (cl-loop for class in ad-advice-classes append - (cl-loop for advice in (ad-get-advice-info-field function class) - for enabled = (ad-advice-enabled advice) - collect - (cons (format - "%s %s %s" - (if enabled "Enabled " "Disabled") - (propertize fname 'face 'font-lock-function-name-face) - (ad-make-single-advice-docstring advice class nil)) - (list function class advice)))))) - -(defun helm-advice-persistent-action (func-class-advice) - (if current-prefix-arg - (helm-advice-toggle func-class-advice) - (describe-function (car func-class-advice)))) - -(defun helm-advice-toggle (func-class-advice) - (cl-destructuring-bind (function _class advice) func-class-advice - (cond ((ad-advice-enabled advice) - (ad-advice-set-enabled advice nil) - (message "Disabled")) - (t - (ad-advice-set-enabled advice t) - (message "Enabled"))) - (ad-activate function) - (and helm-in-persistent-action - (helm-advice-update-current-display-string)))) - -(defun helm-advice-update-current-display-string () - (helm-edit-current-selection - (let ((newword (cond ((looking-at "Disabled") "Enabled") - ((looking-at "Enabled") "Disabled")))) - (when newword - (delete-region (point) (progn (forward-word 1) (point))) - (insert newword))))) - -;;;###autoload -(defun helm-manage-advice () - "Preconfigured `helm' to disable/enable function advices." - (interactive) - (helm-other-buffer 'helm-source-advice "*helm advice*")) - - -;;; Locate elisp library -;; -;; -(defun helm-locate-library-scan-list () - (cl-loop for dir in load-path - when (file-directory-p dir) - append (directory-files dir t (concat (regexp-opt (get-load-suffixes)) - "\\'")) - into lst - finally return (helm-fast-remove-dups lst :test 'equal))) - -;;;###autoload -(defun helm-locate-library () - "Preconfigured helm to locate elisp libraries." - (interactive) - (helm :sources (helm-build-in-buffer-source "Elisp libraries (Scan)" - :data (lambda () (helm-locate-library-scan-list)) - :fuzzy-match t - :keymap helm-generic-files-map - :match-part (lambda (candidate) - (if helm-ff-transformer-show-only-basename - (helm-basename candidate) candidate)) - :filter-one-by-one (lambda (c) - (if helm-ff-transformer-show-only-basename - (cons (helm-basename c) c) c)) - :action (helm-actions-from-type-file)) - :buffer "*helm locate library*")) - -(defun helm-set-variable (var) - "Set value to VAR interactively." - (let* ((sym (helm-symbolify var)) - (val (default-value sym))) - (set-default sym (eval-minibuffer (format "Set `%s': " var) - (if (or (stringp val) (memq val '(nil t))) - (prin1-to-string val) - (format "'%s" (prin1-to-string val))))))) - - -;;; Elisp Timers. -;; -;; -(defclass helm-absolute-time-timers-class (helm-source-sync helm-type-timers) - ((candidates :initform timer-list) - (allow-dups :initform t) - (candidate-transformer - :initform - (lambda (candidates) - (cl-loop for timer in candidates - collect (cons (helm-elisp--format-timer timer) timer)))))) - -(defvar helm-source-absolute-time-timers - (helm-make-source "Absolute Time Timers" 'helm-absolute-time-timers-class)) - -(defclass helm-idle-time-timers-class (helm-source-sync helm-type-timers) - ((candidates :initform timer-idle-list) - (allow-dups :initform t) - (candidate-transformer - :initform - (lambda (candidates) - (cl-loop for timer in candidates - collect (cons (helm-elisp--format-timer timer) timer)))))) - -(defvar helm-source-idle-time-timers - (helm-make-source "Idle Time Timers" 'helm-idle-time-timers-class)) - -(defun helm-elisp--format-timer (timer) - (format "%s repeat=%s %s(%s)" - (let ((time (timer--time timer))) - (if (timer--idle-delay timer) - (format-time-string "idle-for=%5s" time) - (format-time-string "%m/%d %T" time))) - (or (timer--repeat-delay timer) "nil") - (mapconcat 'identity (split-string - (prin1-to-string (timer--function timer)) - "\n") " ") - (mapconcat 'prin1-to-string (timer--args timer) " "))) - -;;;###autoload -(defun helm-timers () - "Preconfigured `helm' for timers." - (interactive) - (helm :sources '(helm-source-absolute-time-timers - helm-source-idle-time-timers) - :buffer "*helm timers*")) - - -;;; Complex command history -;; -;; -(defun helm-btf--usable-p () - "Return t if current version of `backtrace-frame' accept 2 arguments." - (condition-case nil - (progn (backtrace-frame 1 'condition-case) t) - (wrong-number-of-arguments nil))) - -(if (helm-btf--usable-p) ; Check if BTF accept more than one arg. - ;; Emacs 24.4. - (dont-compile - (defvar helm-sexp--last-sexp nil) - ;; This wont work compiled. - (defun helm-sexp-eval-1 () - (interactive) - (unwind-protect - (progn - ;; Trick called-interactively-p into thinking that `cand' is - ;; an interactive call, See `repeat-complex-command'. - (add-hook 'called-interactively-p-functions - #'helm-complex-command-history--called-interactively-skip) - (eval (read helm-sexp--last-sexp))) - (remove-hook 'called-interactively-p-functions - #'helm-complex-command-history--called-interactively-skip))) - - (defun helm-complex-command-history--called-interactively-skip (i _frame1 frame2) - (and (eq 'eval (cadr frame2)) - (eq 'helm-sexp-eval-1 - (cadr (backtrace-frame (+ i 2) #'called-interactively-p))) - 1)) - - (defun helm-sexp-eval (_candidate) - (call-interactively #'helm-sexp-eval-1))) - ;; Emacs 24.3 - (defun helm-sexp-eval (cand) - (let ((sexp (read cand))) - (condition-case err - (if (> (length (remove nil sexp)) 1) - (eval sexp) - (apply 'call-interactively sexp)) - (error (message "Evaluating gave an error: %S" err) - nil))))) - -(defvar helm-source-complex-command-history - (helm-build-sync-source "Complex Command History" - :candidates (lambda () - ;; Use cdr to avoid adding - ;; `helm-complex-command-history' here. - (cl-loop for i in command-history - unless (equal i '(helm-complex-command-history)) - collect (prin1-to-string i))) - :action (helm-make-actions - "Eval" (lambda (candidate) - (and (boundp 'helm-sexp--last-sexp) - (setq helm-sexp--last-sexp candidate)) - (run-with-timer 0.1 nil #'helm-sexp-eval candidate)) - "Edit and eval" (lambda (candidate) - (edit-and-eval-command "Eval: " (read candidate)))) - :persistent-action #'helm-sexp-eval)) - -;;;###autoload -(defun helm-complex-command-history () - "Preconfigured helm for complex command history." - (interactive) - (helm :sources 'helm-source-complex-command-history - :buffer "*helm complex commands*")) - -(provide 'helm-elisp) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-elisp.el ends here diff --git a/elpa/helm-20160217.958/helm-elscreen.el b/elpa/helm-20160217.958/helm-elscreen.el deleted file mode 100644 index ea16b0df..00000000 --- a/elpa/helm-20160217.958/helm-elscreen.el +++ /dev/null @@ -1,102 +0,0 @@ -;;; helm-elscreen.el -- Elscreen support -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) - -(declare-function elscreen-find-screen-by-buffer "ext:elscreen.el" (buffer &optional create)) -(declare-function elscreen-find-file "ext:elscreen.el" (filename)) -(declare-function elscreen-goto "ext:elscreen.el" (screen)) -(declare-function elscreen-get-conf-list "ext:elscreen.el" (type)) - -(defun helm-find-buffer-on-elscreen (candidate) - "Open buffer in new screen, if marked buffers open all in elscreens." - (helm-require-or-error 'elscreen 'helm-find-buffer-on-elscreen) - (helm-aif (helm-marked-candidates) - (cl-dolist (i it) - (let ((target-screen (elscreen-find-screen-by-buffer - (get-buffer i) 'create))) - (elscreen-goto target-screen))) - (let ((target-screen (elscreen-find-screen-by-buffer - (get-buffer candidate) 'create))) - (elscreen-goto target-screen)))) - -(defun helm-elscreen-find-file (file) - (helm-require-or-error 'elscreen 'helm-elscreen-find-file) - (elscreen-find-file file)) - -(defclass helm-source-elscreen (helm-source-sync) - ((candidates - :initform - (lambda () - (when (cdr (elscreen-get-screen-to-name-alist)) - (cl-sort (cl-loop for (screen . name) in (elscreen-get-screen-to-name-alist) - collect (cons (format "[%d] %s" screen name) screen)) - #'< :key #'cdr)))) - (action :initform - '(("Change Screen" . - (lambda (candidate) - (elscreen-goto candidate))) - ("Kill Screen(s)" . - (lambda (_) - (cl-dolist (i (helm-marked-candidates)) - (elscreen-goto i) - (elscreen-kill)))) - ("Only Screen" . - (lambda (candidate) - (elscreen-goto candidate) - (elscreen-kill-others))))) - (migemo :initform t))) - -(defclass helm-source-elscreen-history (helm-source-elscreen) - ((candidates - :initform - (lambda () - (let ((sname (elscreen-get-screen-to-name-alist))) - (when (cdr sname) - (cl-loop for screen in (cdr (elscreen-get-conf-list 'screen-history)) - collect (cons (format "[%d] %s" screen (cdr (assq screen sname))) - screen)))))))) - -(defvar helm-source-elscreen-list - (helm-make-source "ElScreen" 'helm-source-elscreen)) - -(defvar helm-source-elscreen-history-list - (helm-make-source "ElScreen History" 'helm-source-elscreen-history)) - -;;;###autoload -(defun helm-elscreen () - "Preconfigured helm to list elscreen." - (interactive) - (helm-other-buffer 'helm-source-elscreen-list "*Helm ElScreen*")) - -;;;###autoload -(defun helm-elscreen-history () - "Preconfigured helm to list elscreen in history order." - (interactive) - (helm-other-buffer 'helm-source-elscreen-history-list "*Helm ElScreen*")) - -(provide 'helm-elscreen) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-elscreen.el ends here diff --git a/elpa/helm-20160217.958/helm-eshell.el b/elpa/helm-20160217.958/helm-eshell.el deleted file mode 100644 index aa613294..00000000 --- a/elpa/helm-20160217.958/helm-eshell.el +++ /dev/null @@ -1,268 +0,0 @@ -;;; helm-eshell.el --- pcomplete and eshell completion for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Commentary: -;; -;; Enable like this in .emacs: -;; (add-hook 'eshell-mode-hook -;; (lambda () -;; (eshell-cmpl-initialize) -;; (define-key eshell-mode-map [remap pcomplete] 'helm-esh-pcomplete) -;; (define-key eshell-mode-map (kbd "M-p") 'helm-eshell-history))) - - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-lib) -(require 'helm-help) -(require 'helm-elisp) - -(declare-function eshell-read-aliases-list "em-alias") -(declare-function eshell-send-input "esh-mode" (&optional use-region queue-p no-newline)) -(declare-function eshell-bol "esh-mode") -(declare-function eshell-parse-arguments "esh-arg" (beg end)) -(declare-function eshell-backward-argument "esh-mode" (&optional arg)) -(declare-function helm-quote-whitespace "helm-lib") - - -(defgroup helm-eshell nil - "Helm eshell completion and history." - :group 'helm) - -(defcustom helm-eshell-hist-ignoredups nil - "Same as `eshell-hist-ignoredups' which see but for helm." - :group 'helm-eshell - :type 'boolean) - - -(defvar helm-eshell-history-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-p") 'helm-next-line) - map) - "Keymap for `helm-eshell-history'.") - -(defvar helm-esh-completion-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "TAB") 'helm-next-line) - map) - "Keymap for `helm-esh-pcomplete'.") - - -(defclass helm-esh-source (helm-source-sync) - ((init :initform (lambda () - (setq pcomplete-current-completions nil - pcomplete-last-completion-raw nil) - ;; Eshell-command add this hook in all minibuffers - ;; Remove it for the helm one. (Fixed in Emacs24) - (remove-hook 'minibuffer-setup-hook 'eshell-mode))) - (candidates :initform 'helm-esh-get-candidates) - (nomark :initform t) - (persistent-action :initform 'ignore) - (filtered-candidate-transformer - :initform - (lambda (candidates _sources) - (cl-loop - for i in candidates - collect - (cond ((string-match "\\`~/?" helm-ec-target) - (abbreviate-file-name i)) - ((string-match "\\`/" helm-ec-target) i) - (t - (file-relative-name i))) - into lst - finally return (sort lst 'helm-generic-sort-fn)))) - (action :initform 'helm-ec-insert)) - "Helm class to define source for Eshell completion.") - -;; Internal. -(defvar helm-ec-target "") -(defun helm-ec-insert (candidate) - "Replace text at point with CANDIDATE. -The function that call this should set `helm-ec-target' to thing at point." - (let ((pt (point))) - (when (and helm-ec-target - (search-backward helm-ec-target nil t) - (string= (buffer-substring (point) pt) helm-ec-target)) - (delete-region (point) pt))) - (when (string-match "\\`\\*" helm-ec-target) (insert "*")) - (cond ((string-match "\\`~/?" helm-ec-target) - (insert (helm-quote-whitespace (abbreviate-file-name candidate)))) - ((string-match "\\`/" helm-ec-target) - (insert (helm-quote-whitespace candidate))) - (t - (insert (concat (and (string-match "\\`[.]/" helm-ec-target) "./") - (helm-quote-whitespace - (file-relative-name candidate))))))) - -(defun helm-esh-get-candidates () - "Get candidates for eshell completion using `pcomplete'." - (catch 'pcompleted - (with-helm-current-buffer - (let* ((pcomplete-stub) - pcomplete-seen pcomplete-norm-func - pcomplete-args pcomplete-last pcomplete-index - (pcomplete-autolist pcomplete-autolist) - (pcomplete-suffix-list pcomplete-suffix-list) - (table (pcomplete-completions)) - (entry (or (try-completion helm-pattern - (pcomplete-entries)) - helm-pattern))) - (cl-loop ;; expand entry too to be able to compare it with file-cand. - with exp-entry = (and (stringp entry) - (not (string= entry "")) - (file-name-as-directory - (expand-file-name entry default-directory))) - for i in (all-completions pcomplete-stub table) - ;; Transform the related names to abs names. - for file-cand = (and exp-entry - (if (file-remote-p i) i - (expand-file-name - i (file-name-directory entry)))) - ;; Compare them to avoid dups. - for file-entry-p = (and (stringp exp-entry) - (stringp file-cand) - ;; Fix :/tmp/foo/ $ cd foo - (not (file-directory-p file-cand)) - (file-equal-p exp-entry file-cand)) - if (and file-cand (or (file-remote-p file-cand) - (file-exists-p file-cand)) - (not file-entry-p)) - collect file-cand into ls - else - ;; Avoid adding entry here. - unless file-entry-p collect i into ls - finally return - (if (and exp-entry - (file-directory-p exp-entry) - ;; If the car of completion list is - ;; an executable, probably we are in - ;; command completion, so don't add a - ;; possible file related entry here. - (and ls (not (executable-find (car ls)))) - ;; Don't add entry if already in prompt. - (not (file-equal-p exp-entry pcomplete-stub))) - (append (list exp-entry) - ;; Entry should not be here now but double check. - (remove entry ls)) - ls)))))) - -;;; Eshell history. -;; -;; -(defclass helm-eshell-history-source (helm-source-in-buffer) - ((init :initform - (lambda () - (let ((eshell-hist-ignoredups helm-eshell-hist-ignoredups)) - (eshell-write-history eshell-history-file-name t) - (with-current-buffer (helm-candidate-buffer 'global) - (insert-file-contents eshell-history-file-name))) - ;; Same comment as in `helm-source-esh' - (remove-hook 'minibuffer-setup-hook 'eshell-mode))) - (nomark :initform t) - (keymap :initform helm-eshell-history-map) - (filtered-candidate-transformer :initform (lambda (candidates sources) - (reverse candidates))) - (candidate-number-limit :initform 9999) - (action :initform (lambda (candidate) - (eshell-kill-input) - (insert candidate)))) - "Helm class to define source for Eshell history.") - - -;;;###autoload -(defun helm-esh-pcomplete () - "Preconfigured helm to provide helm completion in eshell." - (interactive) - (let* ((helm-quit-if-no-candidate t) - (helm-execute-action-at-once-if-one t) - (end (point-marker)) - (beg (save-excursion (eshell-bol) (point))) - (args (catch 'eshell-incomplete - (eshell-parse-arguments beg end))) - (target - (or (and (looking-back " " (1- (point))) " ") - (buffer-substring-no-properties - (save-excursion - (eshell-backward-argument 1) (point)) - end))) - (first (car args)) ; Maybe lisp delimiter "(". - last ; Will be the last but parsed by pcomplete. - del-space) - (setq helm-ec-target (or target " ") - end (point) - ;; Reset beg for `with-helm-show-completion'. - beg (or (and target (not (string= target " ")) - (- end (length target))) - ;; Nothing at point. - (progn (insert " ") (setq del-space t) (point)))) - (cond ((eq first ?\() - (helm-lisp-completion-or-file-name-at-point)) - ;; In eshell `pcomplete-parse-arguments' is called - ;; with `pcomplete-parse-arguments-function' - ;; locally bound to `eshell-complete-parse-arguments' - ;; which is calling `lisp-complete-symbol', - ;; calling it before would popup the - ;; *completions* buffer. - (t (setq last (replace-regexp-in-string - "\\`\\*" "" - (car (last (ignore-errors - (pcomplete-parse-arguments)))))) - (with-helm-show-completion beg end - (or (helm :sources (helm-make-source "Eshell completions" 'helm-esh-source) - :buffer "*helm pcomplete*" - :keymap helm-esh-completion-map - :resume 'noresume - :input (and (stringp last) - (helm-ff-set-pattern last))) - (and del-space (looking-back "\\s-" (1- (point))) - (delete-char -1)))))))) - -;;;###autoload -(defun helm-eshell-history () - "Preconfigured helm for eshell history." - (interactive) - (let* ((end (point)) - (beg (save-excursion (eshell-bol) (point))) - (input (buffer-substring beg end)) - flag-empty) - (when (eq beg end) - (insert " ") - (setq flag-empty t) - (setq end (point))) - (unwind-protect - (with-helm-show-completion beg end - (helm :sources (helm-make-source "Eshell history" - 'helm-eshell-history-source) - :buffer "*helm eshell history*" - :resume 'noresume - :input input)) - (when (and flag-empty - (looking-back " " (1- (point)))) - (delete-char -1))))) - -(provide 'helm-eshell) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-eshell ends here diff --git a/elpa/helm-20160217.958/helm-eval.el b/elpa/helm-20160217.958/helm-eval.el deleted file mode 100644 index 6f30435a..00000000 --- a/elpa/helm-20160217.958/helm-eval.el +++ /dev/null @@ -1,204 +0,0 @@ -;;; helm-eval.el --- eval expressions from helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'eldoc) -(require 'edebug) - - -(defgroup helm-eval nil - "Eval related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-eldoc-in-minibuffer-show-fn - 'helm-show-info-in-mode-line - "A function to display eldoc info. -Should take one arg: the string to display." - :group 'helm-eval - :type 'symbol) - -(defcustom helm-show-info-in-mode-line-delay 12 - "Eldoc will show info in mode-line during this delay if user is idle." - :type 'integer - :group 'helm-eval) - - -;;; Eldoc compatibility between emacs-24 and emacs-25 -;; -(if (require 'elisp-mode nil t) ; emacs-25 - ;; Maybe the eldoc functions have been - ;; already aliased by eldoc-eval. - (cl-loop for (f . a) in '((eldoc-current-symbol . - elisp--current-symbol) - (eldoc-fnsym-in-current-sexp . - elisp--fnsym-in-current-sexp) - (eldoc-get-fnsym-args-string . - elisp-get-fnsym-args-string) - (eldoc-get-var-docstring . - elisp-get-var-docstring)) - unless (fboundp f) - do (defalias f a)) - ;; Emacs-24. - (declare-function eldoc-current-symbol "eldoc") - (declare-function eldoc-get-fnsym-args-string "eldoc" (sym &optional index)) - (declare-function eldoc-get-var-docstring "eldoc" (sym)) - (declare-function eldoc-fnsym-in-current-sexp "eldoc")) - -;;; Evaluation Result -;; -;; -;; Internal -(defvar helm-eldoc-active-minibuffers-list nil) - -(defvar helm-eval-expression-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-eval-new-line-and-indent) - (define-key map (kbd "") 'lisp-indent-line) - (define-key map (kbd "") 'helm-lisp-completion-at-point) - (define-key map (kbd "C-p") 'previous-line) - (define-key map (kbd "C-n") 'next-line) - (define-key map (kbd "") 'previous-line) - (define-key map (kbd "") 'next-line) - (define-key map (kbd "") 'forward-char) - (define-key map (kbd "") 'backward-char) - map)) - -(defun helm-build-evaluation-result-source () - (helm-build-dummy-source "Evaluation Result" - :multiline t - :mode-line "C-RET: nl-and-indent, M-tab: reindent, C-tab:complete, C-p/n: next/prec-line." - :filtered-candidate-transformer (lambda (_candidates _source) - (list - (condition-case nil - (with-helm-current-buffer - (pp-to-string - (if edebug-active - (edebug-eval-expression - (read helm-pattern)) - (eval (read helm-pattern))))) - (error "Error")))) - :nohighlight t - :action '(("Copy result to kill-ring" . (lambda (candidate) - (kill-new - (replace-regexp-in-string - "\n" "" candidate)) - (message "Result copied to kill-ring"))) - ("copy sexp to kill-ring" . (lambda (_candidate) - (kill-new helm-input) - (message "Sexp copied to kill-ring")))))) - -(defun helm-eval-new-line-and-indent () - (interactive) - (newline) (lisp-indent-line)) - -(defun helm-eldoc-store-minibuffer () - "Store minibuffer buffer name in `helm-eldoc-active-minibuffers-list'." - (with-selected-window (minibuffer-window) - (push (current-buffer) helm-eldoc-active-minibuffers-list))) - -(defun helm-eldoc-show-in-eval () - "Return eldoc in mode-line for current minibuffer input." - (let ((buf (window-buffer (active-minibuffer-window)))) - (condition-case err - (when (member buf helm-eldoc-active-minibuffers-list) - (with-current-buffer buf - (let* ((sym (save-excursion - (unless (looking-back ")\\|\"" (1- (point))) - (forward-char -1)) - (eldoc-current-symbol))) - (info-fn (eldoc-fnsym-in-current-sexp)) - (doc (or (eldoc-get-var-docstring sym) - (eldoc-get-fnsym-args-string - (car info-fn) (cadr info-fn))))) - (when doc (funcall helm-eldoc-in-minibuffer-show-fn doc))))) - (error (message "Eldoc in minibuffer error: %S" err) nil)))) - -(defun helm-show-info-in-mode-line (str) - "Display string STR in mode-line." - (save-selected-window - (with-current-buffer helm-buffer - (let ((mode-line-format (concat " " str))) - (force-mode-line-update) - (sit-for helm-show-info-in-mode-line-delay)) - (force-mode-line-update)))) - -;;; Calculation Result -;; -;; -(defvar helm-source-calculation-result - (helm-build-dummy-source "Calculation Result" - :filtered-candidate-transformer (lambda (_candidates _source) - (list - (condition-case nil - (calc-eval helm-pattern) - (error "error")))) - :nohighlight t - :action '(("Copy result to kill-ring" . (lambda (candidate) - (kill-new candidate) - (message "Result \"%s\" copied to kill-ring" - candidate))) - ("Copy operation to kill-ring" . (lambda (_candidate) - (kill-new helm-input) - (message "Calculation copied to kill-ring")))))) - -;;;###autoload -(defun helm-eval-expression (arg) - "Preconfigured helm for `helm-source-evaluation-result'." - (interactive "P") - (helm :sources (helm-build-evaluation-result-source) - :input (when arg (thing-at-point 'sexp)) - :buffer "*helm eval*" - :echo-input-in-header-line nil - :history 'read-expression-history - :keymap helm-eval-expression-map)) - -(defvar eldoc-idle-delay) -;;;###autoload -(defun helm-eval-expression-with-eldoc () - "Preconfigured helm for `helm-source-evaluation-result' with `eldoc' support. " - (interactive) - (let ((timer (run-with-idle-timer - eldoc-idle-delay 'repeat - 'helm-eldoc-show-in-eval))) - (unwind-protect - (minibuffer-with-setup-hook - 'helm-eldoc-store-minibuffer - (call-interactively 'helm-eval-expression)) - (and timer (cancel-timer timer)) - (setq helm-eldoc-active-minibuffers-list - (cdr helm-eldoc-active-minibuffers-list))))) - -;;;###autoload -(defun helm-calcul-expression () - "Preconfigured helm for `helm-source-calculation-result'." - (interactive) - (helm :sources 'helm-source-calculation-result - :buffer "*helm calcul*")) - -(provide 'helm-eval) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-eval.el ends here diff --git a/elpa/helm-20160217.958/helm-external.el b/elpa/helm-20160217.958/helm-external.el deleted file mode 100644 index 693e1c45..00000000 --- a/elpa/helm-20160217.958/helm-external.el +++ /dev/null @@ -1,217 +0,0 @@ -;;; helm-external.el --- Run Externals commands within Emacs with helm completion. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-net) - - -(defgroup helm-external nil - "External related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-raise-command nil - "A shell command to jump to a window running specific program. -Need external program wmctrl. -This will be use with `format', so use something like \"wmctrl -xa %s\"." - :type 'string - :group 'helm-external) - -(defcustom helm-external-programs-associations nil - "Alist to store externals programs associated with file extension. -This variable overhide setting in .mailcap file. -e.g : '\(\(\"jpg\" . \"gqview\"\) (\"pdf\" . \"xpdf\"\)\) " - :type '(alist :key-type string :value-type string) - :group 'helm-external) - -(defcustom helm-default-external-file-browser "nautilus" - "Default external file browser for your system. -Directories will be opened externally with it when -opening file externally in `helm-find-files'. -Set to nil if you do not have external file browser -or do not want to use it. -Windows users should set that to \"explorer.exe\"." - :group 'helm-external - :type 'string) - - -;;; Internals -(defvar helm-external-command-history nil) -(defvar helm-external-commands-list nil - "A list of all external commands the user can execute. -If this variable is not set by the user, it will be calculated -automatically.") - -(defun helm-external-commands-list-1 (&optional sort) - "Returns a list of all external commands the user can execute. -If `helm-external-commands-list' is non-nil it will -return its contents. Else it calculates all external commands -and sets `helm-external-commands-list'." - (helm-aif helm-external-commands-list - it - (setq helm-external-commands-list - (cl-loop - for dir in (split-string (getenv "PATH") path-separator) - when (and (file-exists-p dir) (file-accessible-directory-p dir)) - for lsdir = (cl-loop for i in (directory-files dir t) - for bn = (file-name-nondirectory i) - when (and (not (member bn completions)) - (not (file-directory-p i)) - (file-executable-p i)) - collect bn) - append lsdir into completions - finally return - (if sort (sort completions 'string-lessp) completions))))) - -(defun helm-run-or-raise (exe &optional file) - "Generic command that run asynchronously EXE. -If EXE is already running just jump to his window if `helm-raise-command' -is non--nil. -When FILE argument is provided run EXE with FILE. -In this case EXE must be provided as \"EXE %s\"." - (let* ((real-com (car (split-string (replace-regexp-in-string - "%s" "" exe)))) - (proc (if file (concat real-com " " file) real-com)) - process-connection-type) - (if (get-process proc) - (if helm-raise-command - (shell-command (format helm-raise-command real-com)) - (error "Error: %s is already running" real-com)) - (when (cl-loop for i in helm-external-commands-list thereis (string= real-com i)) - (message "Starting %s..." real-com) - (if file - (start-process-shell-command - proc nil (format exe (shell-quote-argument - (if (eq system-type 'windows-nt) - (helm-w32-prepare-filename file) - file)))) - (start-process-shell-command proc nil real-com)) - (set-process-sentinel - (get-process proc) - (lambda (process event) - (when (and (string= event "finished\n") - helm-raise-command - (not (helm-get-pid-from-process-name real-com))) - (shell-command (format helm-raise-command "emacs"))) - (message "%s process...Finished." process)))) - (setq helm-external-commands-list - (cons real-com - (delete real-com helm-external-commands-list)))))) - -(defun helm-get-mailcap-for-file (filename) - "Get the command to use for FILENAME from mailcap files. -The command is like and is meant to use with `format'." - (mailcap-parse-mailcaps) - (let* ((ext (file-name-extension filename)) - (mime (when ext (mailcap-extension-to-mime ext))) - (result (when mime (mailcap-mime-info mime)))) - ;; If elisp file have no associations in .mailcap - ;; `mailcap-maybe-eval' is returned, in this case just return nil. - (when (stringp result) result))) - -(defun helm-get-default-program-for-file (filename) - "Try to find a default program to open FILENAME. -Try first in `helm-external-programs-associations' and then in mailcap file -if nothing found return nil." - (let* ((ext (file-name-extension filename)) - (def-prog (assoc-default ext helm-external-programs-associations))) - (cond ((and def-prog (not (string= def-prog ""))) - (concat def-prog " %s")) - ((and helm-default-external-file-browser - (file-directory-p filename)) - (concat helm-default-external-file-browser " %s")) - (t (helm-get-mailcap-for-file filename))))) - -(defun helm-open-file-externally (file) - "Open FILE with an external program. -Try to guess which program to use with `helm-get-default-program-for-file'. -If not found or a prefix arg is given query the user which tool to use." - (let* ((fname (expand-file-name file)) - (collection (helm-external-commands-list-1 'sort)) - (def-prog (helm-get-default-program-for-file fname)) - (real-prog-name (if (or helm-current-prefix-arg (not def-prog)) - ;; Prefix arg or no default program. - (prog1 - (helm-comp-read - "Program: " collection - :must-match t - :name "Open file Externally" - :del-input nil - :history helm-external-command-history) - ;; Always prompt to set this program as default. - (setq def-prog nil)) - ;; No prefix arg or default program exists. - (replace-regexp-in-string " %s\\| '%s'" "" def-prog))) - (program (concat real-prog-name " %s"))) - (unless (or def-prog ; Association exists, no need to record it. - ;; Don't try to record non--filenames associations (e.g urls). - (not (file-exists-p fname))) - (when - (y-or-n-p - (format - "Do you want to make `%s' the default program for this kind of files? " - real-prog-name)) - (helm-aif (assoc (file-name-extension fname) - helm-external-programs-associations) - (setq helm-external-programs-associations - (delete it helm-external-programs-associations))) - (push (cons (file-name-extension fname) - (helm-read-string - "Program (Add args maybe and confirm): " real-prog-name)) - helm-external-programs-associations) - (customize-save-variable 'helm-external-programs-associations - helm-external-programs-associations))) - (helm-run-or-raise program file) - (setq helm-external-command-history - (cons real-prog-name - (delete real-prog-name - (cl-loop for i in helm-external-command-history - when (executable-find i) collect i)))))) - -;;;###autoload -(defun helm-run-external-command (program) - "Preconfigured `helm' to run External PROGRAM asyncronously from Emacs. -If program is already running exit with error. -You can set your own list of commands with -`helm-external-commands-list'." - (interactive (list - (helm-comp-read - "RunProgram: " - (helm-external-commands-list-1 'sort) - :must-match t - :del-input nil - :name "External Commands" - :history helm-external-command-history))) - (helm-run-or-raise program) - (setq helm-external-command-history - (cons program (delete program - (cl-loop for i in helm-external-command-history - when (executable-find i) collect i))))) - - -(provide 'helm-external) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-external ends here diff --git a/elpa/helm-20160217.958/helm-files.el b/elpa/helm-20160217.958/helm-files.el deleted file mode 100644 index 8421597d..00000000 --- a/elpa/helm-20160217.958/helm-files.el +++ /dev/null @@ -1,3516 +0,0 @@ -;;; helm-files.el --- helm file browser and related. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-types) -(require 'helm-utils) -(require 'helm-external) -(require 'helm-grep) -(require 'helm-help) -(require 'helm-locate) -(require 'helm-bookmark) -(require 'helm-tags) -(require 'helm-buffers) -(require 'thingatpt) -(require 'ffap) -(require 'dired-aux) -(require 'dired-x) -(require 'tramp) -(require 'image-dired) - -(declare-function find-library-name "find-func.el" (library)) -(declare-function w32-shell-execute "ext:w32fns.c" (operation document &optional parameters show-flag)) -(declare-function gnus-dired-attach "ext:gnus-dired.el" (files-to-attach)) -(declare-function image-dired-display-image "image-dired.el" (file &optional original-size)) -(declare-function image-dired-update-property "image-dired.el" (prop value)) -(declare-function eshell-read-aliases-list "em-alias") -(declare-function eshell-send-input "esh-mode" (&optional use-region queue-p no-newline)) -(declare-function eshell-kill-input "esh-mode") -(declare-function eshell-bol "esh-mode") -(declare-function eshell-quote-argument "esh-arg.el") -(declare-function helm-ls-git-ls "ext:helm-ls-git") -(declare-function helm-hg-find-files-in-project "ext:helm-ls-hg") -(declare-function helm-gid "helm-id-utils.el") -(declare-function helm-ls-svn-ls "ext:helm-ls-svn") - -(defvar recentf-list) -(defvar helm-mm-matching-method) - - -(defgroup helm-files nil - "Files applications and libraries for Helm." - :group 'helm) - -(defcustom helm-boring-file-regexp-list - (mapcar (lambda (f) - (concat - (rx-to-string - (replace-regexp-in-string - "/$" "" f) t) "$")) - completion-ignored-extensions) - "The regexp list matching boring files." - :group 'helm-files - :type '(repeat (choice regexp))) - -(defcustom helm-for-files-preferred-list - '(helm-source-buffers-list - helm-source-recentf - helm-source-bookmarks - helm-source-file-cache - helm-source-files-in-current-dir - helm-source-locate) - "Your preferred sources to find files." - :type '(repeat (choice symbol)) - :group 'helm-files) - -(defcustom helm-tramp-verbose 0 - "Just like `tramp-verbose' but specific to helm. -When set to 0 don't show tramp messages in helm. -If you want to have the default tramp messages set it to 3." - :type 'integer - :group 'helm-files) - -(defcustom helm-ff-auto-update-initial-value nil - "Auto update when only one candidate directory is matched. -Default value when starting `helm-find-files' is nil because -it prevent using to delete char backward and by the way -confuse beginners. -For a better experience with `helm-find-files' set this to non--nil -and use C- to toggle it." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-lynx-style-map t - "Use arrow keys to navigate with `helm-find-files'. -You will have to restart Emacs or reeval `helm-find-files-map' -and `helm-read-file-map' for this take effect." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-history-max-length 100 - "Number of elements shown in `helm-find-files' history." - :group 'helm-files - :type 'integer) - -(defcustom helm-ff-fuzzy-matching t - "Enable fuzzy matching for `helm-find-files' when non--nil. -See `helm-ff--transform-pattern-for-completion' for more info." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-tramp-not-fancy t - "No colors when listing remote files when set to non--nil. -This make listing much faster, specially on slow machines." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-exif-data-program "exiftran" - "Program used to extract exif data of an image file." - :group 'helm-files - :type 'string) - -(defcustom helm-ff-exif-data-program-args "-d" - "Arguments used for `helm-ff-exif-data-program'." - :group 'helm-files - :type 'string) - -(defcustom helm-ff-newfile-prompt-p t - "Whether Prompt or not when creating new file. -This set `ffap-newfile-prompt'." - :type 'boolean - :group 'helm-files) - -(defcustom helm-ff-avfs-directory "~/.avfs" - "The default avfs directory, usually '~/.avfs'. -When this is set you will be able to expand archive filenames with `C-j' -inside an avfs directory mounted with mountavfs. -See ." - :type 'string - :group 'helm-files) - -(defcustom helm-ff-file-compressed-list '("gz" "bz2" "zip" "7z") - "Minimal list of compressed files extension." - :type '(repeat (choice string)) - :group 'helm-files) - -(defcustom helm-ff-printer-list nil - "A list of available printers on your system. -When non--nil let you choose a printer to print file. -Otherwise when nil the variable `printer-name' will be used. -On Unix based systems (lpstat command needed) you don't need to set this, -`helm-ff-find-printers' will find a list of available printers for you." - :type '(repeat (choice string)) - :group 'helm-files) - -(defcustom helm-ff-transformer-show-only-basename t - "Show only basename of candidates in `helm-find-files'. -This can be toggled at anytime from `helm-find-files' with \ -\\\\[helm-ff-run-toggle-basename]." - :type 'boolean - :group 'helm-files) - -(defcustom helm-ff-signal-error-on-dot-files t - "Signal error when file is `.' or `..' on file deletion when non--nil. -Default is non--nil. -WARNING: Setting this to nil is unsafe and can cause deletion of a whole tree." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-search-library-in-sexp nil - "Search for library in `require' and `declare-function' sexp." - :group 'helm-files - :type 'boolean) - -(defcustom helm-tooltip-hide-delay 25 - "Hide tooltips automatically after this many seconds." - :group 'helm-files - :type 'integer) - -(defcustom helm-ff-file-name-history-use-recentf nil - "Use `recentf-list' instead of `file-name-history' in `helm-find-files'." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-skip-boring-files nil - "Non--nil to skip files matching regexps in `helm-boring-file-regexp-list'. -This take effect in `helm-find-files' and file completion used by `helm-mode' -i.e `helm-read-file-name'." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-candidate-number-limit 5000 - "The `helm-candidate-number-limit' for `helm-find-files', `read-file-name' and friends." - :group 'helm-files - :type 'integer) - -(defcustom helm-findutils-skip-boring-files t - "Ignore files matching regexps in `completion-ignored-extensions'." - :group 'helm-files - :type 'boolean) - -(defcustom helm-findutils-search-full-path nil - "Search in full path with shell command find when non--nil. -I.e use the -path/ipath arguments of find instead of -name/iname." - :group 'helm-files - :type 'boolean) - -(defcustom helm-files-save-history-extra-sources - '("Find" "Locate" "Recentf" - "Files from Current Directory" "File Cache") - "Extras source that save candidate to `file-name-history'." - :group 'helm-files - :type '(repeat (choice string))) - -(defcustom helm-find-files-before-init-hook nil - "Hook that run before initialization of `helm-find-files'." - :group 'helm-files - :type 'hook) - -(defcustom helm-find-files-after-init-hook nil - "Hook that run after initialization of `helm-find-files'." - :group 'helm-files - :type 'hook) - -(defcustom helm-multi-files-toggle-locate-binding "C-c p" - "Default binding to switch back and forth locate in `helm-multi-files'." - :group 'helm-files - :type 'string) - -(defcustom helm-find-files-bookmark-prefix "Helm-find-files: " - "bookmark name prefix of `helm-find-files' sessions." - :group 'helm-files - :type 'string) - -(defcustom helm-ff-guess-ffap-filenames nil - "Use ffap to guess local filenames at point in `helm-find-files'. -This doesn't disable url or mail at point, see -`helm-ff-guess-ffap-urls' for this." - :group 'helm-files - :type 'boolean) - -(defcustom helm-ff-guess-ffap-urls t - "Use ffap to guess local urls at point in `helm-find-files'. -This doesn't disable guessing filenames at point, -see `helm-ff-guess-ffap-filenames' for this." - :group 'helm-files - :type 'boolean) - -(defcustom helm-substitute-in-filename-stay-on-remote nil - "Don't switch back to local filesystem when expanding pattern with / or ~/." - :group 'helm-files - :type 'boolean) - - -;;; Faces -;; -;; -(defgroup helm-files-faces nil - "Customize the appearance of helm-files." - :prefix "helm-" - :group 'helm-files - :group 'helm-faces) - -(defface helm-ff-prefix - '((t (:background "yellow" :foreground "black"))) - "Face used to prefix new file or url paths in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-executable - '((t (:foreground "green"))) - "Face used for executable files in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-directory - '((t (:foreground "DarkRed" :background "LightGray"))) - "Face used for directories in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-dotted-directory - '((t (:foreground "black" :background "DimGray"))) - "Face used for dotted directories in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-dotted-symlink-directory - '((t (:foreground "DarkOrange" :background "DimGray"))) - "Face used for dotted symlinked directories in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-symlink - '((t (:foreground "DarkOrange"))) - "Face used for symlinks in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-invalid-symlink - '((t (:foreground "black" :background "red"))) - "Face used for invalid symlinks in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-ff-file - '((t (:inherit font-lock-builtin-face))) - "Face used for file names in `helm-find-files'." - :group 'helm-files-faces) - -(defface helm-history-deleted - '((t (:inherit helm-ff-invalid-symlink))) - "Face used for deleted files in `file-name-history'." - :group 'helm-files-faces) - -(defface helm-history-remote - '((t (:foreground "Indianred1"))) - "Face used for remote files in `file-name-history'." - :group 'helm-files-faces) - - -;;; Helm-find-files - The helm file browser. -;; -;; Keymaps -(defvar helm-find-files-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-]") 'helm-ff-run-toggle-basename) - (define-key map (kbd "C-x C-f") 'helm-ff-run-locate) - (define-key map (kbd "C-x C-d") 'helm-ff-run-browse-project) - (define-key map (kbd "C-x r m") 'helm-ff-bookmark-set) - (define-key map (kbd "C-x r b") 'helm-find-files-toggle-to-bookmark) - (define-key map (kbd "C-s") 'helm-ff-run-grep) - (define-key map (kbd "M-g s") 'helm-ff-run-grep) - (define-key map (kbd "M-g p") 'helm-ff-run-pdfgrep) - (define-key map (kbd "M-g z") 'helm-ff-run-zgrep) - (define-key map (kbd "M-g a") 'helm-ff-run-grep-ag) - (define-key map (kbd "M-g g") 'helm-ff-run-git-grep) - (define-key map (kbd "M-g i") 'helm-ff-run-gid) - (define-key map (kbd "M-.") 'helm-ff-run-etags) - (define-key map (kbd "M-R") 'helm-ff-run-rename-file) - (define-key map (kbd "M-C") 'helm-ff-run-copy-file) - (define-key map (kbd "M-B") 'helm-ff-run-byte-compile-file) - (define-key map (kbd "M-L") 'helm-ff-run-load-file) - (define-key map (kbd "M-S") 'helm-ff-run-symlink-file) - (define-key map (kbd "M-H") 'helm-ff-run-hardlink-file) - (define-key map (kbd "M-D") 'helm-ff-run-delete-file) - (define-key map (kbd "M-K") 'helm-ff-run-kill-buffer-persistent) - (define-key map (kbd "C-c d") 'helm-ff-persistent-delete) - (define-key map (kbd "M-e") 'helm-ff-run-switch-to-eshell) - (define-key map (kbd "C-c i") 'helm-ff-run-complete-fn-at-point) - (define-key map (kbd "C-c o") 'helm-ff-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-ff-run-switch-other-frame) - (define-key map (kbd "C-c C-x") 'helm-ff-run-open-file-externally) - (define-key map (kbd "C-c X") 'helm-ff-run-open-file-with-default-tool) - (define-key map (kbd "M-!") 'helm-ff-run-eshell-command-on-file) - (define-key map (kbd "M-%") 'helm-ff-run-query-replace-on-marked) - (define-key map (kbd "C-c =") 'helm-ff-run-ediff-file) - (define-key map (kbd "M-=") 'helm-ff-run-ediff-merge-file) - (define-key map (kbd "M-p") 'helm-ff-run-switch-to-history) - (define-key map (kbd "C-c h") 'helm-ff-file-name-history) - (define-key map (kbd "M-i") 'helm-ff-properties-persistent) - (define-key map (kbd "C-}") 'helm-narrow-window) - (define-key map (kbd "C-{") 'helm-enlarge-window) - (define-key map (kbd "C-") 'helm-ff-run-toggle-auto-update) - (define-key map (kbd "C-c ") 'helm-ff-run-toggle-auto-update) - (define-key map (kbd "C-c C-a") 'helm-ff-run-gnus-attach-files) - (define-key map (kbd "C-c p") 'helm-ff-run-print-file) - (define-key map (kbd "C-c /") 'helm-ff-run-find-sh-command) - ;; Next 2 have no effect if candidate is not an image file. - (define-key map (kbd "M-l") 'helm-ff-rotate-left-persistent) - (define-key map (kbd "M-r") 'helm-ff-rotate-right-persistent) - (define-key map (kbd "C-l") 'helm-find-files-up-one-level) - (define-key map (kbd "C-r") 'helm-find-files-down-last-level) - (define-key map (kbd "C-c r") 'helm-ff-run-find-file-as-root) - (define-key map (kbd "C-x C-v") 'helm-ff-run-find-alternate-file) - (define-key map (kbd "C-c @") 'helm-ff-run-insert-org-link) - (helm-define-key-with-subkeys map (kbd "DEL") ?\d 'helm-ff-delete-char-backward - nil nil 'helm-ff-delete-char-backward--exit-fn) - (when helm-ff-lynx-style-map - (define-key map (kbd "") 'helm-find-files-up-one-level) - (define-key map (kbd "") 'helm-execute-persistent-action)) - (delq nil map)) - "Keymap for `helm-find-files'.") - -(defvar helm-read-file-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-cr-empty-string) - (define-key map (kbd "") 'helm-cr-empty-string) - (define-key map (kbd "C-]") 'helm-ff-run-toggle-basename) - (define-key map (kbd "C-.") 'helm-find-files-up-one-level) - (define-key map (kbd "C-l") 'helm-find-files-up-one-level) - (define-key map (kbd "C-r") 'helm-find-files-down-last-level) - (define-key map (kbd "C-c h") 'helm-ff-file-name-history) - (define-key map (kbd "C-") 'helm-ff-run-toggle-auto-update) - (define-key map (kbd "C-c ") 'helm-ff-run-toggle-auto-update) - (helm-define-key-with-subkeys map (kbd "DEL") ?\d 'helm-ff-delete-char-backward - nil nil 'helm-ff-delete-char-backward--exit-fn) - (when helm-ff-lynx-style-map - (define-key map (kbd "") 'helm-find-files-up-one-level) - (define-key map (kbd "") 'helm-execute-persistent-action) - (define-key map (kbd "") 'helm-previous-source) - (define-key map (kbd "") 'helm-next-source)) - (delq nil map)) - "Keymap for `helm-read-file-name'.") - - -;; Internal. -(defvar helm-find-files-doc-header " (\\\\[helm-find-files-up-one-level]: Go up one level)" - "*The doc that is inserted in the Name header of a find-files or dired source.") -(defvar helm-ff-auto-update-flag nil - "Internal, flag to turn on/off auto-update in `helm-find-files'. -Don't set it directly, use instead `helm-ff-auto-update-initial-value'.") -(defvar helm-ff-last-expanded nil - "Store last expanded directory or file.") -(defvar helm-ff-default-directory nil) -(defvar helm-ff-history nil) -(defvar helm-ff-cand-to-mark nil) -(defvar helm-ff-url-regexp - "\\`\\(news\\(post\\)?:\\|nntp:\\|mailto:\\|file:\\|\\(ftp\\|https?\\|telnet\\|gopher\\|www\\|wais\\):/?/?\\).*" - "Same as `ffap-url-regexp' but match earlier possible url.") -(defvar helm-tramp-file-name-regexp "\\`/\\([^[/:]+\\|[^/]+]\\):") -(defvar helm-marked-buffer-name "*helm marked*") -(defvar helm-ff--auto-update-state nil) -(defvar helm-ff--deleting-char-backward nil) -(defvar helm-multi-files--toggle-locate nil) -(defvar helm-ff--move-to-first-real-candidate t) -(defvar helm-find-files--toggle-bookmark nil) - - -;;; Helm-find-files -;; -;; -(defcustom helm-find-files-actions - (helm-make-actions - "Find File" 'helm-find-file-or-marked - "Find file in Dired" 'helm-point-file-in-dired - (lambda () (and (locate-library "elscreen") "Find file in Elscreen")) - 'helm-elscreen-find-file - "View file" 'view-file - "Checksum File" 'helm-ff-checksum - "Query replace fnames on marked" 'helm-ff-query-replace-on-marked - "Query replace contents on marked" 'helm-ff-query-replace - "Query replace regexp contents on marked" 'helm-ff-query-replace-regexp - "Serial rename files" 'helm-ff-serial-rename - "Serial rename by symlinking files" 'helm-ff-serial-rename-by-symlink - "Serial rename by copying files" 'helm-ff-serial-rename-by-copying - "Open file with default tool" 'helm-open-file-with-default-tool - "Find file in hex dump" 'hexl-find-file - "Browse project" 'helm-ff-browse-project - "Complete at point `C-c i'" 'helm-insert-file-name-completion-at-point - "Insert as org link `C-c @'" 'helm-files-insert-as-org-link - "Find shell command `C-c /'" 'helm-ff-find-sh-command - "Add marked files to file-cache" 'helm-ff-cache-add-file - "Open file externally `C-c C-x, C-u to choose'" 'helm-open-file-externally - "Grep File(s) `C-s, C-u Recurse'" 'helm-find-files-grep - "Grep current directory with AG" 'helm-find-files-ag - "Git grep" 'helm-ff-git-grep - "Zgrep File(s) `M-g z, C-u Recurse'" 'helm-ff-zgrep - "Gid" 'helm-ff-gid - "Switch to Eshell `M-e'" 'helm-ff-switch-to-eshell - "Etags `M-., C-u reload tag file'" 'helm-ff-etags-select - "Eshell command on file(s) `M-!, C-u take all marked as arguments.'" - 'helm-find-files-eshell-command-on-file - "Find file as root `C-c r'" 'helm-find-file-as-root - "Find alternate file" 'find-alternate-file - "Ediff File `C-='" 'helm-find-files-ediff-files - "Ediff Merge File `C-c ='" 'helm-find-files-ediff-merge-files - "Delete File(s) `M-D'" 'helm-delete-marked-files - "Copy file(s) `M-C, C-u to follow'" 'helm-find-files-copy - "Rename file(s) `M-R, C-u to follow'" 'helm-find-files-rename - "Symlink files(s) `M-S, C-u to follow'" 'helm-find-files-symlink - "Relsymlink file(s) `C-u to follow'" 'helm-find-files-relsymlink - "Hardlink file(s) `M-H, C-u to follow'" 'helm-find-files-hardlink - "Find file other window `C-c o'" 'helm-find-files-other-window - "Switch to history `M-p'" 'helm-find-files-switch-to-hist - "Find file other frame `C-c C-o'" 'find-file-other-frame - "Print File `C-c p, C-u to refresh'" 'helm-ff-print - "Locate `C-x C-f, C-u to specify locate db'" 'helm-ff-locate) - "Actions for `helm-find-files'." - :group 'helm-files - :type '(alist :key-type string :value-type function)) - -(defvar helm-source-find-files nil - "The main source to browse files. -Should not be used among other sources.") - -(defclass helm-source-ffiles (helm-source-sync) - ((header-name - :initform (lambda (name) - (concat name (substitute-command-keys - helm-find-files-doc-header)))) - (init - :initform (lambda () - (setq helm-ff-auto-update-flag - helm-ff-auto-update-initial-value) - (setq helm-ff--auto-update-state - helm-ff-auto-update-flag) - (helm-set-local-variable 'bookmark-make-record-function - #'helm-ff-make-bookmark-record))) - (candidates :initform 'helm-find-files-get-candidates) - (filtered-candidate-transformer :initform 'helm-ff-sort-candidates) - (filter-one-by-one :initform 'helm-ff-filter-candidate-one-by-one) - (persistent-action :initform 'helm-find-files-persistent-action) - (persistent-help :initform "Hit1 Expand Candidate, Hit2 or (C-u) Find file") - (help-message :initform 'helm-ff-help-message) - (volatile :initform t) - (migemo :initform t) - (nohighlight :initform t) - (keymap :initform helm-find-files-map) - (candidate-number-limit :initform 'helm-ff-candidate-number-limit) - (action-transformer - :initform 'helm-find-files-action-transformer) - (action :initform 'helm-find-files-actions) - (before-init-hook :initform 'helm-find-files-before-init-hook) - (after-init-hook :initform 'helm-find-files-after-init-hook))) - -;; Bookmark handlers. -;; -(defun helm-ff-make-bookmark-record () - "The `bookmark-make-record-function' for `helm-find-files'." - (with-helm-buffer - `((filename . ,helm-ff-default-directory) - (presel . ,(helm-get-selection)) - (handler . helm-ff-bookmark-jump)))) - -(defun helm-ff-bookmark-jump (bookmark) - "bookmark handler for `helm-find-files'." - (let ((fname (bookmark-prop-get bookmark 'filename)) - (presel (bookmark-prop-get bookmark 'presel))) - (helm-find-files-1 fname (if helm-ff-transformer-show-only-basename - (helm-basename presel) - presel)))) - -(defun helm-ff-bookmark-set () - "Record `helm-find-files' session in bookmarks." - (interactive) - (with-helm-alive-p - (with-helm-buffer - (bookmark-set - (concat helm-find-files-bookmark-prefix - (abbreviate-file-name helm-ff-default-directory)))) - (message "Helm find files session bookmarked! "))) -(put 'helm-ff-bookmark-set 'helm-only t) - -(defun helm-dwim-target-directory () - "Return value of `default-directory' of buffer in other window. -If there is only one window return the value ot `default-directory' -for current buffer." - (with-helm-current-buffer - (let ((num-windows (length (remove (get-buffer-window helm-marked-buffer-name) - (window-list))))) - (expand-file-name - (if (> num-windows 1) - (save-selected-window - (other-window 1) - default-directory) - ;; Using the car of *ff-history allow - ;; allow staying in the directory visited instead of current. - (or (car-safe helm-ff-history) default-directory)))))) - -(defun helm-find-files-do-action (action) - "Generic function for creating actions from `helm-source-find-files'. -ACTION must be an action supported by `helm-dired-action'." - (let* ((ifiles (mapcar 'expand-file-name ; Allow modify '/foo/.' -> '/foo' - (helm-marked-candidates :with-wildcard t))) - (cand (helm-get-selection)) ; Target - (prompt (format "%s %s file(s) to: " - (capitalize (symbol-name action)) - (length ifiles))) - helm-ff--move-to-first-real-candidate - (helm-always-two-windows t) - (helm-reuse-last-window-split-state t) - (helm-split-window-default-side - (eq helm-split-window-default-side 'same)) - helm-split-window-in-side-p - (parg helm-current-prefix-arg) - helm-display-source-at-screen-top ; prevent setting window-start. - helm-ff-auto-update-initial-value - (dest (with-helm-display-marked-candidates - helm-marked-buffer-name - (mapcar (lambda (f) - (if (file-directory-p f) - (concat (helm-basename f) "/") - (helm-basename f))) - ifiles) - (with-helm-current-buffer - (helm-read-file-name - prompt - :preselect (unless (cdr ifiles) - (if helm-ff-transformer-show-only-basename - (helm-basename cand) cand)) - :initial-input (helm-dwim-target-directory) - :history (helm-find-files-history :comp-read nil)))))) - (helm-dired-action - dest :files ifiles :action action :follow parg))) - -(defun helm-find-files-copy (_candidate) - "Copy files from `helm-find-files'." - (helm-find-files-do-action 'copy)) - -(defun helm-find-files-rename (_candidate) - "Rename files from `helm-find-files'." - (helm-find-files-do-action 'rename)) - -(defun helm-find-files-symlink (_candidate) - "Symlink files from `helm-find-files'." - (helm-find-files-do-action 'symlink)) - -(defun helm-find-files-relsymlink (_candidate) - "Relsymlink files from `helm-find-files'." - (helm-find-files-do-action 'relsymlink)) - -(defun helm-find-files-hardlink (_candidate) - "Hardlink files from `helm-find-files'." - (helm-find-files-do-action 'hardlink)) - -(defun helm-find-files-other-window (_candidate) - "Keep current-buffer and open files in separate windows." - (let* ((files (helm-marked-candidates)) - (buffers (mapcar 'find-file-noselect files))) - (switch-to-buffer-other-window (car buffers)) - (helm-aif (cdr buffers) - (save-selected-window - (cl-loop for buffer in it - do (progn - (select-window (split-window)) - (switch-to-buffer buffer))))))) - -(defun helm-find-files-byte-compile (_candidate) - "Byte compile elisp files from `helm-find-files'." - (let ((files (helm-marked-candidates :with-wildcard t)) - (parg helm-current-prefix-arg)) - (cl-loop for fname in files - do (byte-compile-file fname parg)))) - -(defun helm-find-files-load-files (_candidate) - "Load elisp files from `helm-find-files'." - (let ((files (helm-marked-candidates :with-wildcard t))) - (cl-loop for fname in files - do (load fname)))) - -(defun helm-find-files-ediff-files-1 (candidate &optional merge) - "Generic function to ediff/merge files in `helm-find-files'." - (let* ((bname (helm-basename candidate)) - (marked (helm-marked-candidates :with-wildcard t)) - (prompt (if merge "Ediff Merge `%s' With File: " - "Ediff `%s' With File: ")) - (fun (if merge 'ediff-merge-files 'ediff-files)) - (input (helm-dwim-target-directory)) - (presel (if helm-ff-transformer-show-only-basename - (helm-basename candidate) - (expand-file-name - (helm-basename candidate) - input)))) - (if (= (length marked) 2) - (funcall fun (car marked) (cadr marked)) - (funcall fun candidate (helm-read-file-name - (format prompt bname) - :initial-input input - :preselect presel))))) - -(defun helm-find-files-ediff-files (candidate) - (helm-find-files-ediff-files-1 candidate)) - -(defun helm-find-files-ediff-merge-files (candidate) - (helm-find-files-ediff-files-1 candidate 'merge)) - -(defun helm-find-files-grep (_candidate) - "Default action to grep files from `helm-find-files'." - (helm-do-grep-1 (helm-marked-candidates :with-wildcard t) - helm-current-prefix-arg)) - -(defun helm-ff-git-grep (_candidate) - "Default action to git-grep `helm-ff-default-directory'." - (helm-grep-git-1 helm-ff-default-directory helm-current-prefix-arg)) - -(defun helm-find-files-ag (_candidate) - (helm-grep-ag-1 helm-ff-default-directory)) - -(defun helm-ff-zgrep (_candidate) - "Default action to zgrep files from `helm-find-files'." - (helm-ff-zgrep-1 (helm-marked-candidates :with-wildcard t) helm-current-prefix-arg)) - -(defun helm-ff-pdfgrep (_candidate) - "Default action to pdfgrep files from `helm-find-files'." - (let ((cands (cl-loop for file in (helm-marked-candidates :with-wildcard t) - if (or (string= (file-name-extension file) "pdf") - (string= (file-name-extension file) "PDF")) - collect file)) - (helm-pdfgrep-default-function 'helm-pdfgrep-init)) - (when cands - (helm-do-pdfgrep-1 cands)))) - -(defun helm-ff-etags-select (candidate) - "Default action to jump to etags from `helm-find-files'." - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (let* ((source-name (assoc-default 'name (helm-get-current-source))) - (default-directory (if (string= source-name "Find Files") - helm-ff-default-directory - (file-name-directory candidate)))) - (helm-etags-select helm-current-prefix-arg))) - -(defun helm-find-files-switch-to-hist (_candidate) - "Switch to helm-find-files history." - (helm-find-files t)) - -(defvar eshell-command-aliases-list nil) -(defvar helm-eshell-command-on-file-input-history nil) -(defun helm-find-files-eshell-command-on-file-1 (&optional map) - "Run `eshell-command' on CANDIDATE or marked candidates. -This is done possibly with an eshell alias, if no alias found, you can type in -an eshell command. - -Basename of CANDIDATE can be a wild-card. -e.g you can do \"eshell-command command *.el\" -Where \"*.el\" is the CANDIDATE. - -It is possible to do eshell-command command -like this: \"command %s some more args\". - -If MAP is given run `eshell-command' on all marked files at once, -Otherwise, run `eshell-command' on each marked files. -In other terms, with a prefix arg do on the three marked files -\"foo\" \"bar\" \"baz\": - -\"eshell-command command foo bar baz\" - -otherwise do - -\"eshell-command command foo\" -\"eshell-command command bar\" -\"eshell-command command baz\" - -Note: -If `eshell' or `eshell-command' have not been run once, -or if you have no eshell aliases `eshell-command-aliases-list' -will not be loaded first time you use this." - (when (or eshell-command-aliases-list - (y-or-n-p "Eshell is not loaded, run eshell-command without alias anyway? ")) - (and eshell-command-aliases-list (eshell-read-aliases-list)) - (let* ((cand-list (helm-marked-candidates)) - (default-directory (or helm-ff-default-directory - ;; If candidate is an url *-ff-default-directory is nil - ;; so keep value of default-directory. - default-directory)) - (command (helm-comp-read - "Command: " - (cl-loop for (a . c) in eshell-command-aliases-list - when (string-match "\\(\\$1\\|\\$\\*\\)$" (car c)) - collect (propertize a 'help-echo (car c)) into ls - finally return (sort ls 'string<)) - :buffer "*helm eshell on file*" - :name "Eshell command" - :mode-line - '("Eshell alias" - "C-h m: Help, \\[universal-argument]: Insert output at point") - :help-message 'helm-esh-help-message - :input-history - 'helm-eshell-command-on-file-input-history)) - (alias-value (car (assoc-default command eshell-command-aliases-list))) - cmd-line) - (if (or (equal helm-current-prefix-arg '(16)) - (equal map '(16))) - ;; Two time C-u from `helm-comp-read' mean print to current-buffer. - ;; i.e `eshell-command' will use this value. - (setq current-prefix-arg '(16)) - ;; Else reset the value of `current-prefix-arg' - ;; to avoid printing in current-buffer. - (setq current-prefix-arg nil)) - (if (and (or - ;; One prefix-arg have been passed before `helm-comp-read'. - ;; If map have been set with C-u C-u (value == '(16)) - ;; ignore it. - (and map (equal map '(4))) - ;; One C-u from `helm-comp-read'. - (equal helm-current-prefix-arg '(4)) - ;; An alias that finish with $* - (and alias-value - ;; If command is an alias be sure it accept - ;; more than one arg i.e $*. - (string-match "\\$\\*$" alias-value))) - (cdr cand-list)) - - ;; Run eshell-command with ALL marked files as arguments. - ;; This wont work on remote files, because tramp handlers depends - ;; on `default-directory' (limitation). - (let ((mapfiles (mapconcat 'eshell-quote-argument cand-list " "))) - (if (string-match "'%s'\\|\"%s\"\\|%s" command) - (setq cmd-line (format command mapfiles)) ; See [1] - (setq cmd-line (format "%s %s" command mapfiles))) - (helm-log "%S" cmd-line) - (eshell-command cmd-line)) - - ;; Run eshell-command on EACH marked files. - ;; To work with tramp handler we have to call - ;; COMMAND on basename of each file, using - ;; its basedir as `default-directory'. - (cl-loop for f in cand-list - for dir = (and (not (string-match ffap-url-regexp f)) - (helm-basedir f)) - for file = (eshell-quote-argument - (format "%s" (if (and dir (file-remote-p dir)) - (helm-basename f) f))) - for com = (if (string-match "'%s'\\|\"%s\"\\|%s" command) - ;; [1] This allow to enter other args AFTER filename - ;; i.e - (format command file) - (format "%s %s" command file)) - do (let ((default-directory (or dir default-directory))) - (eshell-command com))))))) - -(defun helm-find-files-eshell-command-on-file (_candidate) - "Run `eshell-command' on CANDIDATE or marked candidates. -See `helm-find-files-eshell-command-on-file-1' for more info." - (helm-find-files-eshell-command-on-file-1 helm-current-prefix-arg)) - -(defun helm-ff-switch-to-eshell (_candidate) - "Switch to eshell and cd to `helm-ff-default-directory'." - (let ((cd-eshell (lambda () - (eshell-kill-input) - (goto-char (point-max)) - (insert - (format "cd '%s'" helm-ff-default-directory)) - (eshell-send-input)))) - (if (get-buffer "*eshell*") - (switch-to-buffer "*eshell*") - (call-interactively 'eshell)) - (unless (get-buffer-process (current-buffer)) - (funcall cd-eshell)))) - -(defun helm-ff-serial-rename-action (method) - "Rename all marked files in `helm-ff-default-directory' with METHOD. -See `helm-ff-serial-rename-1'." - (let* ((helm--reading-passwd-or-string t) - (cands (helm-marked-candidates :with-wildcard t)) - (def-name (car cands)) - (name (helm-read-string "NewName: " - (replace-regexp-in-string - "[0-9]+$" "" - (helm-basename - def-name - (file-name-extension def-name))))) - (start (read-number "StartAtNumber: ")) - (extension (helm-read-string "Extension: " - (file-name-extension (car cands)))) - (dir (expand-file-name - (helm-read-file-name - "Serial Rename to directory: " - :initial-input - (expand-file-name helm-ff-default-directory) - :test 'file-directory-p - :must-match t))) - done) - (with-helm-display-marked-candidates - helm-marked-buffer-name (mapcar 'helm-basename cands) - (if (y-or-n-p - (format "Rename %s file(s) to <%s> like this ?\n%s " - (length cands) dir (format "%s <-> %s%s.%s" - (helm-basename (car cands)) - name start extension))) - (progn - (helm-ff-serial-rename-1 - dir cands name start extension :method method) - (setq done t) - (message nil)))) - (if done - (with-helm-current-buffer (helm-find-files-1 dir)) - (message "Operation aborted")))) - -(defun helm-ff-member-directory-p (file directory) - (let ((dir-file (expand-file-name - (file-name-as-directory (file-name-directory file)))) - (cur-dir (expand-file-name (file-name-as-directory directory)))) - (string= dir-file cur-dir))) - -(cl-defun helm-ff-serial-rename-1 - (directory collection new-name start-at-num extension &key (method 'rename)) - "rename files in COLLECTION to DIRECTORY with the prefix name NEW-NAME. -Rename start at number START-AT-NUM - ex: prefixname-01.jpg. -EXTENSION is the file extension to use, in empty prompt, -reuse the original extension of file. -METHOD can be one of rename, copy or symlink. -Files will be renamed if they are files of current directory, otherwise they -will be treated with METHOD. -Default METHOD is rename." - ;; Maybe remove directories selected by error in collection. - (setq collection (cl-remove-if 'file-directory-p collection)) - (let* ((tmp-dir (file-name-as-directory - (concat (file-name-as-directory directory) - (symbol-name (cl-gensym "tmp"))))) - (fn (cl-case method - (copy 'copy-file) - (symlink 'make-symbolic-link) - (rename 'rename-file) - (t (error "Error: Unknown method %s" method))))) - (make-directory tmp-dir) - (unwind-protect - (progn - ;; Rename all files to tmp-dir with new-name. - ;; If files are not from start directory, use method - ;; to move files to tmp-dir. - (cl-loop for i in collection - for count from start-at-num - for fnum = (if (< count 10) "0%s" "%s") - for nname = (concat tmp-dir new-name (format fnum count) - (if (not (string= extension "")) - (format ".%s" (replace-regexp-in-string - "[.]" "" extension)) - (file-name-extension i 'dot))) - do (if (helm-ff-member-directory-p i directory) - (rename-file i nname) - (funcall fn i nname))) - ;; Now move all from tmp-dir to destination. - (cl-loop with dirlist = (directory-files - tmp-dir t directory-files-no-dot-files-regexp) - for f in dirlist do - (if (file-symlink-p f) - (make-symbolic-link (file-truename f) - (concat (file-name-as-directory directory) - (helm-basename f))) - (rename-file f directory)))) - (delete-directory tmp-dir t)))) - -(defun helm-ff-serial-rename (_candidate) - "Serial rename all marked files to `helm-ff-default-directory'. -Rename only file of current directory, and symlink files coming from -other directories. -See `helm-ff-serial-rename-1'." - (helm-ff-serial-rename-action 'rename)) - -(defun helm-ff-serial-rename-by-symlink (_candidate) - "Serial rename all marked files to `helm-ff-default-directory'. -Rename only file of current directory, and symlink files coming from -other directories. -See `helm-ff-serial-rename-1'." - (helm-ff-serial-rename-action 'symlink)) - -(defun helm-ff-serial-rename-by-copying (_candidate) - "Serial rename all marked files to `helm-ff-default-directory'. -Rename only file of current directory, and copy files coming from -other directories. -See `helm-ff-serial-rename-1'." - (helm-ff-serial-rename-action 'copy)) - -(defun helm-ff-query-replace-on-marked-1 (candidates) - "Query replace on filenames of CANDIDATES. -This doesn't replace inside the files, only modify filenames." - (with-helm-display-marked-candidates - helm-marked-buffer-name - (mapcar 'helm-basename candidates) - (let* ((regexp (read-string "Replace regexp on filename(s): ")) - (str (read-string (format "Replace regexp `%s' with: " regexp)))) - (cl-loop with query = "y" - with count = 0 - for old in candidates - for new = (concat (helm-basedir old) - (replace-regexp-in-string - regexp str - (helm-basename old))) - ;; If `regexp' is not matched in `old' - ;; `replace-regexp-in-string' will - ;; return `old' unmodified. - unless (string= old new) - do (progn - (unless (string= query "!") - (while (not (member - (setq query - (string - (read-key - (propertize - (format - "Replace `%s' by `%s' [!,y,n,q]" - old new) - 'face 'minibuffer-prompt)))) - '("y" "!" "n" "q"))) - (message "Please answer by y,n,! or q") (sit-for 1))) - (when (string= query "q") - (cl-return (message "Operation aborted"))) - (unless (string= query "n") - (rename-file old new) - (cl-incf count))) - finally (message "%d Files renamed" count)))) - ;; This fix the emacs bug where "Emacs-Lisp:" is sent - ;; in minibuffer (not the echo area). - (sit-for 0.1) - (with-current-buffer (window-buffer (minibuffer-window)) - (delete-minibuffer-contents))) - -;; The action. -(defun helm-ff-query-replace-on-marked (_candidate) - (let ((marked (helm-marked-candidates :with-wildcard t))) - (helm-ff-query-replace-on-marked-1 marked))) - -;; The command for `helm-find-files-map'. -(defun helm-ff-run-query-replace-on-marked () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-query-replace-on-marked))) -(put 'helm-ff-run-query-replace-on-marked 'helm-only t) - -(defun helm-ff-query-replace (_candidate) - (let ((bufs (cl-loop for f in (helm-marked-candidates :with-wildcard t) - collect (buffer-name (find-file-noselect f))))) - (helm-buffer-query-replace-1 nil bufs))) - -(defun helm-ff-query-replace-regexp (_candidate) - (let ((bufs (cl-loop for f in (helm-marked-candidates :with-wildcard t) - collect (buffer-name (find-file-noselect f))))) - (helm-buffer-query-replace-1 'regexp bufs))) - -(defun helm-ff-run-query-replace () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-query-replace))) -(put 'helm-ff-run-query-replace 'helm-only t) - -(defun helm-ff-run-query-replace-regexp () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-query-replace-regexp))) -(put 'helm-ff-run-query-replace-regexp 'helm-only t) - -(defun helm-ff-toggle-auto-update (_candidate) - (setq helm-ff-auto-update-flag (not helm-ff-auto-update-flag)) - (setq helm-ff--auto-update-state helm-ff-auto-update-flag) - (message "[Auto expansion %s]" - (if helm-ff-auto-update-flag "enabled" "disabled"))) - -(defun helm-ff-run-toggle-auto-update () - (interactive) - (with-helm-alive-p - (helm-attrset 'toggle-auto-update '(helm-ff-toggle-auto-update . never-split)) - (helm-execute-persistent-action 'toggle-auto-update))) -(put 'helm-ff-run-toggle-auto-update 'helm-only t) - -(defun helm-ff-delete-char-backward () - "Disable helm find files auto update and delete char backward." - (interactive) - (with-helm-alive-p - (setq helm-ff-auto-update-flag nil) - (setq helm-ff--deleting-char-backward t) - (call-interactively - (lookup-key (current-global-map) - (read-kbd-macro "DEL"))))) -(put 'helm-ff-delete-char-backward 'helm-only t) - -(defun helm-ff-delete-char-backward--exit-fn () - (setq helm-ff-auto-update-flag helm-ff--auto-update-state) - (setq helm-ff--deleting-char-backward nil)) - -(defun helm-ff-run-switch-to-history () - "Run Switch to history action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (when (helm-file-completion-source-p) - (helm-exit-and-execute-action 'helm-find-files-switch-to-hist)))) -(put 'helm-ff-run-switch-to-history 'helm-only t) - -(defun helm-ff-run-grep () - "Run Grep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-grep))) -(put 'helm-ff-run-grep 'helm-only t) - -(defun helm-ff-run-git-grep () - "Run git-grep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-git-grep))) -(put 'helm-ff-run-git-grep 'helm-only t) - -(defun helm-ff-run-grep-ag () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-ag))) -(put 'helm-ff-run-grep-ag 'helm-only t) - -(defun helm-ff-run-pdfgrep () - "Run Pdfgrep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-pdfgrep))) -(put 'helm-ff-run-pdfgrep 'helm-only t) - -(defun helm-ff-run-zgrep () - "Run Grep action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-zgrep))) -(put 'helm-ff-run-zgrep 'helm-only t) - -(defun helm-ff-run-copy-file () - "Run Copy file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-copy))) -(put 'helm-ff-run-copy-file 'helm-only t) - -(defun helm-ff-run-rename-file () - "Run Rename file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-rename))) -(put 'helm-ff-run-rename-file 'helm-only t) - -(defun helm-ff-run-byte-compile-file () - "Run Byte compile file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-byte-compile))) -(put 'helm-ff-run-byte-compile-file 'helm-only t) - -(defun helm-ff-run-load-file () - "Run Load file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-load-files))) -(put 'helm-ff-run-load-file 'helm-only t) - -(defun helm-ff-run-eshell-command-on-file () - "Run eshell command on file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - 'helm-find-files-eshell-command-on-file))) -(put 'helm-ff-run-eshell-command-on-file 'helm-only t) - -(defun helm-ff-run-ediff-file () - "Run Ediff file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-ediff-files))) -(put 'helm-ff-run-ediff-file 'helm-only t) - -(defun helm-ff-run-ediff-merge-file () - "Run Ediff merge file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - 'helm-find-files-ediff-merge-files))) -(put 'helm-ff-run-ediff-merge-file 'helm-only t) - -(defun helm-ff-run-symlink-file () - "Run Symlink file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-symlink))) -(put 'helm-ff-run-symlink-file 'helm-only t) - -(defun helm-ff-run-hardlink-file () - "Run Hardlink file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-hardlink))) -(put 'helm-ff-run-hardlink-file 'helm-only t) - -(defun helm-ff-run-delete-file () - "Run Delete file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-delete-marked-files))) -(put 'helm-ff-run-delete-file 'helm-only t) - -(defun helm-ff-run-complete-fn-at-point () - "Run complete file name action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - 'helm-insert-file-name-completion-at-point))) -(put 'helm-ff-run-complete-fn-at-point 'helm-only t) - -(defun helm-ff-run-switch-to-eshell () - "Run switch to eshell action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-switch-to-eshell))) -(put 'helm-ff-run-switch-to-eshell 'helm-only t) - -(defun helm-ff-run-switch-other-window () - "Run switch to other window action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-files-other-window))) -(put 'helm-ff-run-switch-other-window 'helm-only t) - -(defun helm-ff-run-switch-other-frame () - "Run switch to other frame action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'find-file-other-frame))) -(put 'helm-ff-run-switch-other-frame 'helm-only t) - -(defun helm-ff-run-open-file-externally () - "Run open file externally command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-open-file-externally))) -(put 'helm-ff-run-open-file-externally 'helm-only t) - -(defun helm-ff-run-open-file-with-default-tool () - "Run open file externally command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-open-file-with-default-tool))) -(put 'helm-ff-run-open-file-with-default-tool 'helm-only t) - -(defun helm-ff-locate (candidate) - "Locate action function for `helm-find-files'." - (helm-locate-set-command) - (let ((input (concat (helm-basename - (expand-file-name - candidate - helm-ff-default-directory)) - ;; The locate '-b' option doesn't exists - ;; in everything (es). - (unless (and (eq system-type 'windows-nt) - (string-match "^es" helm-locate-command)) - " -b")))) - (helm-locate-1 helm-current-prefix-arg nil 'from-ff input))) - -(defun helm-ff-run-locate () - "Run locate action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-locate))) -(put 'helm-ff-run-locate 'helm-only t) - -(defun helm-files-insert-as-org-link (candidate) - (insert (format "[[%s][]]" candidate)) - (goto-char (- (point) 2))) - -(defun helm-ff-run-insert-org-link () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-files-insert-as-org-link))) -(put 'helm-ff-run-insert-org-link 'helm-only t) - -(defun helm-ff-run-find-file-as-root () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-find-file-as-root))) -(put 'helm-ff-run-find-file-as-root 'helm-only t) - -(defun helm-ff-run-find-alternate-file () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'find-alternate-file))) -(put 'helm-ff-run-find-alternate-file 'helm-only t) - -(defun helm-ff-run-gnus-attach-files () - "Run gnus attach files command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-gnus-attach-files))) -(put 'helm-ff-run-gnus-attach-files 'helm-only t) - -(defun helm-ff-run-etags () - "Run Etags command action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-etags-select))) -(put 'helm-ff-run-etags 'helm-only t) - -(defvar lpr-printer-switch) -(defun helm-ff-print (_candidate) - "Print marked files. - -You may to set in order -variables `lpr-command',`lpr-switches' and/or `printer-name', -but with no settings helm should detect your printer(s) and -print with the default `lpr' settings. - -NOTE: DO NOT set the \"-P\" flag in `lpr-switches', if you really -have to modify this, do it in `lpr-printer-switch'. - -Same as `dired-do-print' but for helm." - (require 'lpr) - (when (or helm-current-prefix-arg - (not helm-ff-printer-list)) - (setq helm-ff-printer-list - (helm-ff-find-printers))) - (let* ((file-list (helm-marked-candidates :with-wildcard t)) - (len (length file-list)) - (printer-name (if helm-ff-printer-list - (helm-comp-read - "Printer: " helm-ff-printer-list) - printer-name)) - (lpr-switches - (if (and (stringp printer-name) - (string< "" printer-name)) - (cons (concat lpr-printer-switch printer-name) - lpr-switches) - lpr-switches)) - (command (helm-read-string - (format "Print *%s File(s):\n%s with: " - len - (mapconcat - (lambda (f) (format "- %s\n" f)) - file-list "")) - (when (and lpr-command lpr-switches) - (mapconcat 'identity - (cons lpr-command - (if (stringp lpr-switches) - (list lpr-switches) - lpr-switches)) - " ")))) - (file-args (mapconcat (lambda (x) - (format "'%s'" x)) - file-list " ")) - (cmd-line (concat command " " file-args))) - (if command - (start-process-shell-command "helm-print" nil cmd-line) - (error "Error: Please verify your printer settings in Emacs.")))) - -(defun helm-ff-run-print-file () - "Run Print file action from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-print))) -(put 'helm-ff-run-print-file 'helm-only t) - -(defun helm-ff-checksum (file) - "Calculate the checksum of FILE. -The checksum is copied to kill-ring." - (let ((algo (intern (helm-comp-read - "Algorithm: " - '(md5 sha1 sha224 sha256 sha384 sha512))))) - (kill-new (with-temp-buffer - (insert-file-contents-literally file) - (secure-hash algo (current-buffer)))) - (message "Checksum copied to kill-ring."))) - -(defun helm-ff-toggle-basename (_candidate) - (with-helm-buffer - (setq helm-ff-transformer-show-only-basename - (not helm-ff-transformer-show-only-basename)) - (let* ((cand (helm-get-selection nil t)) - (target (if helm-ff-transformer-show-only-basename - (helm-basename cand) cand))) - (helm-force-update (regexp-quote target))))) - -(defun helm-ff-run-toggle-basename () - (interactive) - (with-helm-alive-p - (unless (helm-empty-source-p) - (helm-ff-toggle-basename nil)))) -(put 'helm-ff-run-toggle-basename 'helm-only t) - -(cl-defun helm-reduce-file-name (fname level &key unix-close expand) - "Reduce FNAME by LEVEL from end or beginning depending LEVEL value. -If LEVEL is positive reduce from end else from beginning. -If UNIX-CLOSE is non--nil close filename with /. -If EXPAND is non--nil expand-file-name." - (let* ((exp-fname (expand-file-name fname)) - (fname-list (split-string - (if (or (string= fname "~/") expand) - exp-fname fname) - "/" t)) - (len (length fname-list)) - (pop-list (if (< level 0) - (cl-subseq fname-list (* level -1)) - (cl-subseq fname-list 0 (- len level)))) - (result (mapconcat 'identity pop-list "/")) - (abbrev-fname (string-match "^~" result)) - (empty (string= result ""))) - (when unix-close (setq result (concat result "/"))) - (cond ((and abbrev-fname (string= result "~/")) "~/") - (abbrev-fname result) - ((and (< level 0) empty) "../") - ((< level 0) (concat "../" result)) - ((and (eq system-type 'windows-nt) - (not (file-remote-p fname))) - ;; Result is starting by a volume name i.e "c:/". - result) - ;; Expand to "/" or "c:/". - (empty (expand-file-name "/")) - (t (concat "/" result))))) - -(defvar helm-find-files--level-tree nil) -(defvar helm-find-files--level-tree-iterator nil) -(defun helm-find-files-up-one-level (arg) - "Go up one level like unix command `cd ..'. -If prefix numeric arg is given go ARG level up." - (interactive "p") - (with-helm-alive-p - (when (and (helm-file-completion-source-p) - (not (helm-ff-invalid-tramp-name-p))) - (with-helm-window - (when helm-follow-mode - (helm-follow-mode -1) (message nil))) - ;; When going up one level we want to be at the line - ;; corresponding to actual directory, so store this info - ;; in `helm-ff-last-expanded'. - (let ((cur-cand (helm-get-selection)) - (new-pattern (helm-reduce-file-name - helm-pattern arg :unix-close t :expand t))) - (cond ((file-directory-p helm-pattern) - (setq helm-ff-last-expanded helm-ff-default-directory)) - ((file-exists-p helm-pattern) - (setq helm-ff-last-expanded helm-pattern)) - ((and cur-cand (file-exists-p cur-cand)) - (setq helm-ff-last-expanded cur-cand))) - (unless helm-find-files--level-tree - (setq helm-find-files--level-tree - (cons helm-ff-default-directory - helm-find-files--level-tree))) - (setq helm-find-files--level-tree-iterator nil) - (push new-pattern helm-find-files--level-tree) - (helm-set-pattern new-pattern helm-suspend-update-flag) - (with-helm-after-update-hook (helm-ff-retrieve-last-expanded)))))) -(put 'helm-find-files-up-one-level 'helm-only t) - -(defun helm-find-files-down-last-level () - "Retrieve previous paths reached by `C-l' in helm-find-files." - (interactive) - (with-helm-alive-p - (when (and (helm-file-completion-source-p) - (not (helm-ff-invalid-tramp-name-p))) - (unless helm-find-files--level-tree-iterator - (setq helm-find-files--level-tree-iterator - (helm-iter-list (cdr helm-find-files--level-tree)))) - (setq helm-find-files--level-tree nil) - (helm-aif (helm-iter-next helm-find-files--level-tree-iterator) - (helm-set-pattern it) - (setq helm-find-files--level-tree-iterator nil))))) -(put 'helm-find-files-down-last-level 'helm-only t) - -(defun helm-find-files--reset-level-tree () - (setq helm-find-files--level-tree-iterator nil - helm-find-files--level-tree nil)) - -(add-hook 'helm-cleanup-hook 'helm-find-files--reset-level-tree) -(add-hook 'post-self-insert-hook 'helm-find-files--reset-level-tree) -(add-hook 'helm-after-persistent-action-hook 'helm-find-files--reset-level-tree) - -(defun helm-ff-retrieve-last-expanded () - "Move overlay to last visited directory `helm-ff-last-expanded'. -This happen after using `helm-find-files-up-one-level', -or hitting C-j on \"..\"." - (when helm-ff-last-expanded - (let ((presel (if helm-ff-transformer-show-only-basename - (helm-basename - (directory-file-name helm-ff-last-expanded)) - (directory-file-name helm-ff-last-expanded)))) - (with-helm-window - (when (re-search-forward (concat "^" (regexp-quote presel) "$") nil t) - (forward-line 0) - (helm-mark-current-line))) - (setq helm-ff-last-expanded nil)))) - -(defun helm-ff-move-to-first-real-candidate () - "When candidate is an incomplete file name move to first real candidate." - (helm-aif (and (helm-file-completion-source-p) - (not (helm-empty-source-p)) - (not (string-match - "\\`[Dd]ired-" - (assoc-default 'name (helm-get-current-source)))) - helm-ff--move-to-first-real-candidate - (helm-get-selection)) - (unless (or (not (stringp it)) - (and (string-match helm-tramp-file-name-regexp it) - (not (file-remote-p it nil t))) - (file-exists-p it)) - (helm-next-line)))) -(add-hook 'helm-after-update-hook 'helm-ff-move-to-first-real-candidate) - -;;; Auto-update - helm-find-files auto expansion of directories. -;; -;; -(defun helm-ff-update-when-only-one-matched () - "Expand to directory when sole completion. -When only one candidate is remaining and it is a directory, -expand to this directory. -This happen only when `helm-ff-auto-update-flag' is non--nil -or when `helm-pattern' is equal to \"~/\"." - (when (and (helm-file-completion-source-p) - (not (helm-ff-invalid-tramp-name-p))) - (with-helm-window - (let* ((history-p (string= (assoc-default - 'name (helm-get-current-source)) - "Read File Name History")) - (pat (if (string-match helm-tramp-file-name-regexp - helm-pattern) - (helm-create-tramp-name helm-pattern) - helm-pattern)) - (completed-p (string= (file-name-as-directory - (expand-file-name - (substitute-in-file-name pat))) - helm-ff-default-directory)) - (candnum (helm-get-candidate-number)) - (lt2-p (and (<= candnum 2) - (>= (string-width (helm-basename helm-pattern)) 2))) - (cur-cand (prog2 - (unless (or completed-p - (file-exists-p pat) - history-p (null lt2-p)) - ;; Only one non--existing candidate - ;; and one directory candidate, move to it, - ;; but not when renaming, copying etc..., - ;; so for this use - ;; `helm-ff-move-to-first-real-candidate' - ;; instead of `helm-next-line' (Issue #910). - (helm-ff-move-to-first-real-candidate)) - (helm-get-selection)))) - (when (and (or (and helm-ff-auto-update-flag - (null helm-ff--deleting-char-backward) - (not (get-buffer-window helm-action-buffer 'visible)) - ;; Issue #295 - ;; File predicates are returning t - ;; with paths like //home/foo. - ;; So check it is not the case by regexp - ;; to allow user to do C-a / to start e.g - ;; entering a tramp method e.g /sudo::. - (not (string-match "\\`//" helm-pattern)) - (not (eq last-command 'helm-yank-text-at-point))) - ;; Fix issue #542. - (string= helm-pattern "~/") - ;; Only one remaining directory, expand it. - (and (= candnum 1) - helm-ff--auto-update-state - (file-accessible-directory-p pat) - (null helm-ff--deleting-char-backward))) - (or - ;; Only one candidate remaining - ;; and at least 2 char in basename. - lt2-p - ;; Already completed. - completed-p) - (not history-p) ; Don't try to auto complete in history. - (stringp cur-cand) - (file-accessible-directory-p cur-cand)) - (if (and (not (helm-dir-is-dot cur-cand)) ; [1] - ;; Maybe we are here because completed-p is true - ;; but check this again to be sure. (Windows fix) - (<= candnum 2)) ; [2] - ;; If after going to next line the candidate - ;; is not one of "." or ".." [1] - ;; and only one candidate is remaining [2], - ;; assume candidate is a new directory to expand, and do it. - (helm-set-pattern (file-name-as-directory cur-cand)) - ;; The candidate is one of "." or ".." - ;; that mean we have entered the last letter of the directory name - ;; in prompt, so expansion is already done, just add the "/" at end - ;; of name unless helm-pattern ends with "." - ;; (i.e we are writing something starting with ".") - (unless (string-match "\\`.*[.]\\{1\\}\\'" helm-pattern) - (helm-set-pattern - ;; Need to expand-file-name to avoid e.g /ssh:host:./ in prompt. - (expand-file-name (file-name-as-directory helm-pattern))))) - (helm-check-minibuffer-input)))))) - -(defun helm-ff-auto-expand-to-home-or-root () - "Allow expanding to home/user directory or root or text yanked after pattern." - (when (and (helm-file-completion-source-p) - (string-match - "/?\\$.*/\\|/\\./\\|/\\.\\./\\|/~.*/\\|//\\|\\(/[[:alpha:]]:/\\|\\s\\+\\)" - helm-pattern) - (with-current-buffer (window-buffer (minibuffer-window)) (eolp)) - (not (string-match helm-ff-url-regexp helm-pattern))) - (let* ((match (match-string 0 helm-pattern)) - (input (cond ((string= match "/./") - (expand-file-name default-directory)) - ((string= helm-pattern "/../") "/") - ((string-match-p "\\`/\\$" match) - (let ((sub (substitute-in-file-name match))) - (if (file-directory-p sub) - sub (replace-regexp-in-string "/\\'" "" sub)))) - (t (expand-file-name - (helm-substitute-in-filename helm-pattern) - ;; [Windows] On UNC paths "/" expand to current machine, - ;; so use the root of current Drive. (i.e "C:/") - (and (memq system-type '(windows-nt ms-dos)) - (getenv "SystemDrive")) ; nil on Unix. - ))))) - (if (file-directory-p input) - (setq helm-ff-default-directory - (setq input (file-name-as-directory input))) - (setq helm-ff-default-directory (file-name-as-directory - (file-name-directory input)))) - (with-helm-window - (helm-set-pattern input) - (helm-check-minibuffer-input))))) - -(defun helm-substitute-in-filename (fname) - "Substitute all parts of FNAME from start up to \"~/\" or \"/\". -On windows system substitute from start up to \"/[[:lower:]]:/\". -This function is needed for `helm-ff-auto-expand-to-home-or-root' -and should be used carefully elsewhere, or not at all, using -`substitute-in-file-name' instead." - (cond ((and ffap-url-regexp - (string-match-p ffap-url-regexp fname)) - fname) - ((and (file-remote-p fname) - helm-substitute-in-filename-stay-on-remote) - (let ((sub (substitute-in-file-name fname))) - (if (file-directory-p sub) - sub (replace-regexp-in-string "/\\'" "" sub)))) - (t - (with-temp-buffer - (insert fname) - (goto-char (point-min)) - (skip-chars-forward "/") ;; Avoid infloop in UNC paths Issue #424 - (if (re-search-forward "~.*/?\\|//\\|/[[:alpha:]]:/" nil t) - (let ((match (match-string 0))) - (goto-char (if (or (string= match "//") - (string-match-p "/[[:alpha:]]:/" match)) - (1+ (match-beginning 0)) - (match-beginning 0))) - (buffer-substring-no-properties (point) (point-at-eol))) - fname))))) - -(add-hook 'helm-after-update-hook 'helm-ff-update-when-only-one-matched) -(add-hook 'helm-after-update-hook 'helm-ff-auto-expand-to-home-or-root) - -(defun helm-point-file-in-dired (file) - "Put point on filename FILE in dired buffer." - (unless (and ffap-url-regexp - (string-match-p ffap-url-regexp file)) - (let ((target (expand-file-name (helm-substitute-in-filename file)))) - (dired (file-name-directory target)) - (dired-goto-file target)))) - -(defun helm-create-tramp-name (fname) - "Build filename for `helm-pattern' like /su:: or /sudo::." - (apply #'tramp-make-tramp-file-name - (cl-loop with v = (tramp-dissect-file-name fname) - for i across v collect i))) - -(cl-defun helm-ff-tramp-hostnames (&optional (pattern helm-pattern)) - "Get a list of hosts for tramp method found in `helm-pattern'. -Argument PATTERN default to `helm-pattern', it is here only for debugging -purpose." - (when (string-match helm-tramp-file-name-regexp pattern) - (let ((method (match-string 1 pattern)) - (tn (match-string 0 pattern)) - (all-methods (mapcar 'car tramp-methods))) - (helm-fast-remove-dups - (cl-loop for (f . h) in (tramp-get-completion-function method) - append (cl-loop for e in (funcall f (car h)) - for host = (and (consp e) (cadr e)) - when (and host (not (member host all-methods))) - collect (concat tn host))) - :test 'equal)))) - -(defun helm-ff-before-action-hook-fn () - "Exit helm when user try to execute action on an invalid tramp fname." - (let ((cand (helm-get-selection))) - (when (and (helm-file-completion-source-p) - (stringp cand) - (helm-ff-invalid-tramp-name-p cand) ; Check candidate. - (helm-ff-invalid-tramp-name-p)) ; check helm-pattern. - (error "Error: Unknown file or directory `%s'" cand)))) -(add-hook 'helm-before-action-hook 'helm-ff-before-action-hook-fn) - -(cl-defun helm-ff-invalid-tramp-name-p (&optional (pattern helm-pattern)) - "Return non--nil when PATTERN is an invalid tramp filename." - (string= (helm-ff-set-pattern pattern) - "Invalid tramp file name")) - -(defun helm-ff-set-pattern (pattern) - "Handle tramp filenames in `helm-pattern'." - (let ((methods (mapcar 'car tramp-methods)) - (reg "\\`/\\([^[/:]+\\|[^/]+]\\):.*:") - cur-method tramp-name) - ;; In some rare cases tramp can return a nil input, - ;; so be sure pattern is a string for safety (Issue #476). - (unless pattern (setq pattern "")) - (cond ((string-match helm-ff-url-regexp pattern) pattern) - ((string-match "\\`\\$" pattern) - (substitute-in-file-name pattern)) - ((string= pattern "") "") - ((string-match "\\`[.]\\{1,2\\}/\\'" pattern) - (expand-file-name pattern)) - ((string-match ".*\\(~?/?[.]\\{1\\}/\\)\\'" pattern) - (expand-file-name default-directory)) - ((string-match ".*\\(~//\\|//\\)\\'" pattern) - (expand-file-name "/")) ; Expand to "/" or "c:/" - ((string-match "\\`\\(~/\\|.*/~/\\)\\'" pattern) - (expand-file-name "~/")) - ;; Match "/method:maybe_hostname:~" - ((and (string-match (concat reg "~") pattern) - (setq cur-method (match-string 1 pattern)) - (member cur-method methods)) - (setq tramp-name (expand-file-name - (helm-create-tramp-name - (match-string 0 pattern)))) - (replace-match tramp-name nil t pattern)) - ;; Match "/method:maybe_hostname:" - ((and (string-match reg pattern) - (setq cur-method (match-string 1 pattern)) - (member cur-method methods)) - (setq tramp-name (helm-create-tramp-name - (match-string 0 pattern))) - (replace-match tramp-name nil t pattern)) - ;; Match "/hostname:" - ((and (string-match helm-tramp-file-name-regexp pattern) - (setq cur-method (match-string 1 pattern)) - (and cur-method (not (member cur-method methods)))) - (setq tramp-name (helm-create-tramp-name - (match-string 0 pattern))) - (replace-match tramp-name nil t pattern)) - ;; Match "/method:" in this case don't try to connect. - ((and (not (string-match reg pattern)) - (string-match helm-tramp-file-name-regexp pattern) - (member (match-string 1 pattern) methods)) - "Invalid tramp file name") ; Write in helm-buffer. - ;; Return PATTERN unchanged. - (t pattern)))) - -(defun helm-find-files-get-candidates (&optional require-match) - "Create candidate list for `helm-source-find-files'." - (let* ((path (helm-ff-set-pattern helm-pattern)) - (dir-p (file-accessible-directory-p path)) - basedir - invalid-basedir - non-essential - (tramp-verbose helm-tramp-verbose)) ; No tramp message when 0. - (set-text-properties 0 (length path) nil path) - ;; Issue #118 allow creation of newdir+newfile. - (unless (or - ;; A tramp file name not completed. - (string= path "Invalid tramp file name") - ;; An empty pattern - (string= path "") - ;; Check if base directory of PATH is valid. - (helm-aif (file-name-directory path) - ;; If PATH is a valid directory IT=PATH, - ;; else IT=basedir of PATH. - (file-directory-p it))) - ;; BASEDIR is invalid, that's mean user is starting - ;; to write a non--existing path in minibuffer - ;; probably to create a 'new_dir' or a 'new_dir+new_file'. - (setq invalid-basedir t)) - ;; Don't set now `helm-pattern' if `path' == "Invalid tramp file name" - ;; like that the actual value (e.g /ssh:) is passed to - ;; `helm-ff-tramp-hostnames'. - (unless (or (string= path "Invalid tramp file name") - invalid-basedir) ; Leave helm-pattern unchanged. - (setq helm-ff-auto-update-flag ; [1] - ;; Unless auto update is disabled at startup or - ;; interactively, start auto updating only at third char. - (unless (or (null helm-ff-auto-update-initial-value) - (null helm-ff--auto-update-state) - ;; But don't enable auto update when - ;; deleting backward. - helm-ff--deleting-char-backward - (and dir-p (not (string-match-p "/\\'" path)))) - (or (>= (length (helm-basename path)) 3) dir-p))) - (setq helm-pattern (helm-ff--transform-pattern-for-completion path)) - ;; This have to be set after [1] to allow deleting char backward. - (setq basedir (expand-file-name - (if (and dir-p helm-ff-auto-update-flag) - ;; Add the final "/" to path - ;; when `helm-ff-auto-update-flag' is enabled. - (file-name-as-directory path) - (if (string= path "") "/" - (file-name-directory path))))) - (setq helm-ff-default-directory - (if (string= helm-pattern "") - (expand-file-name "/") ; Expand to "/" or "c:/" - ;; If path is an url *default-directory have to be nil. - (unless (or (string-match helm-ff-url-regexp path) - (and ffap-url-regexp - (string-match ffap-url-regexp path))) - basedir)))) - (cond ((string= path "Invalid tramp file name") - (or (helm-ff-tramp-hostnames) ; Hostnames completion. - (prog2 - ;; `helm-pattern' have not been modified yet. - ;; Set it here to the value of `path' that should be now - ;; "Invalid tramp file name" and set the candidates list - ;; to ("Invalid tramp file name") to make `helm-pattern' - ;; match single candidate "Invalid tramp file name". - (setq helm-pattern path) - ;; "Invalid tramp file name" is now printed - ;; in `helm-buffer'. - (list path)))) - ((or (and (file-regular-p path) - (eq last-repeatable-command 'helm-execute-persistent-action)) - ;; `ffap-url-regexp' don't match until url is complete. - (string-match helm-ff-url-regexp path) - invalid-basedir - (and (not (file-exists-p path)) (string-match "/$" path)) - (and ffap-url-regexp (string-match ffap-url-regexp path))) - (list path)) - ((string= path "") (helm-ff-directory-files "/" t)) - ;; Check here if directory is accessible (not working on Windows). - ((and (file-directory-p path) (not (file-readable-p path))) - (list (format "file-error: Opening directory permission denied `%s'" path))) - ;; A fast expansion of PATH is made only if `helm-ff-auto-update-flag' - ;; is enabled. - ((and dir-p helm-ff-auto-update-flag) - (helm-ff-directory-files path t)) - (t (append (unless (or require-match - ;; When `helm-ff-auto-update-flag' has been - ;; disabled, whe don't want PATH to be added on top - ;; if it is a directory. - dir-p) - (list path)) - (helm-ff-directory-files basedir t)))))) - -(defun helm-ff-directory-files (directory &optional full) - "List contents of DIRECTORY. -Argument FULL mean absolute path. -It is same as `directory-files' but always returns the -dotted filename '.' and '..' even on root directories in Windows -systems." - (setq directory (file-name-as-directory - (expand-file-name directory))) - (let* (file-error - (ls (condition-case err - (directory-files - directory full directory-files-no-dot-files-regexp) - ;; Handle file-error from here for Windows - ;; because predicates like `file-readable-p' and friends - ;; seem broken on emacs for Windows systems (always returns t). - ;; This should never be called on GNU/Linux/Unix - ;; as the error is properly intercepted in - ;; `helm-find-files-get-candidates' by `file-readable-p'. - (file-error - (prog1 - (list (format "%s:%s" - (car err) - (mapconcat 'identity (cdr err) " "))) - (setq file-error t))))) - (dot (concat directory ".")) - (dot2 (concat directory ".."))) - (append (and (not file-error) (list dot dot2)) ls))) - -(defun helm-ff-handle-backslash (fname) - ;; Allow creation of filenames containing a backslash. - (cl-loop with bad = '((92 . "")) - for i across fname - for isbad = (assq i bad) - if isbad concat (cdr isbad) - else concat (string i))) - -(defun helm-ff-fuzzy-matching-p () - (and helm-ff-fuzzy-matching - (not (memq helm-mm-matching-method '(multi1 multi3p))))) - -(defun helm-ff--transform-pattern-for-completion (pattern) - "Maybe return PATTERN with it's basename modified as a regexp. -This happen only when `helm-ff-fuzzy-matching' is enabled. -This provide a similar behavior as `ido-enable-flex-matching'. -See also `helm--mapconcat-pattern'. -If PATTERN is an url returns it unmodified. -When PATTERN contain a space fallback to multi-match. -If basename contain one or more space fallback to multi-match. -If PATTERN is a valid directory name,return PATTERN unchanged." - ;; handle bad filenames containing a backslash. - (setq pattern (helm-ff-handle-backslash pattern)) - (let ((bn (helm-basename pattern)) - (bd (or (helm-basedir pattern) "")) - (dir-p (file-directory-p pattern)) - (tramp-p (cl-loop for (m . f) in tramp-methods - thereis (string-match m pattern)))) - ;; Always regexp-quote base directory name to handle - ;; crap dirnames such e.g bookmark+ - (cond - ((or (and dir-p tramp-p (string-match ":\\'" pattern)) - (string= pattern "") - (and dir-p (<= (length bn) 2)) - ;; Fix Issue #541 when BD have a subdir similar - ;; to BN, don't switch to match plugin - ;; which will match both. - (and dir-p (string-match (regexp-quote bn) bd))) - ;; Use full PATTERN on e.g "/ssh:host:". - (regexp-quote pattern)) - ;; Prefixing BN with a space call multi-match completion. - ;; This allow showing all files/dirs matching BN (Issue #518). - ;; FIXME: some multi-match methods may not work here. - (dir-p (concat (regexp-quote bd) " " (regexp-quote bn))) - ((or (not (helm-ff-fuzzy-matching-p)) - (string-match "\\s-" bn)) ; Fall back to multi-match. - (concat (regexp-quote bd) bn)) - ((or (string-match "[*][.]?.*" bn) ; Allow entering wilcard. - (string-match "/$" pattern) ; Allow mkdir. - (string-match helm-ff-url-regexp pattern) - (and (string= helm-ff-default-directory "/") tramp-p)) - ;; Don't treat wildcards ("*") as regexp char. - ;; (e.g ./foo/*.el => ./foo/[*].el) - (concat (regexp-quote bd) - (replace-regexp-in-string "[*]" "[*]" bn))) - (t (concat (regexp-quote bd) - (if (>= (length bn) 2) ; wait 2nd char before concating. - (helm--mapconcat-pattern bn) - (concat ".*" (regexp-quote bn)))))))) - -(defun helm-dir-is-dot (dir) - (string-match "\\(?:/\\|\\`\\)\\.\\{1,2\\}\\'" dir)) - -(defun helm-ff-save-history () - "Store the last value of `helm-ff-default-directory' in `helm-ff-history'. -Note that only existing directories are saved here." - (when (and helm-ff-default-directory - (helm-file-completion-source-p) - (file-directory-p helm-ff-default-directory)) - (set-text-properties 0 (length helm-ff-default-directory) - nil helm-ff-default-directory) - (push helm-ff-default-directory helm-ff-history))) -(add-hook 'helm-cleanup-hook 'helm-ff-save-history) - -(defun helm-files-save-file-name-history (&optional force) - "Save selected file to `file-name-history'." - (let ((src-name (assoc-default 'name (helm-get-current-source)))) - (when (or force (helm-file-completion-source-p) - (member src-name helm-files-save-history-extra-sources)) - (let ((mkd (helm-marked-candidates)) - (history-delete-duplicates t)) - (cl-loop for sel in mkd - when (and sel - (stringp sel) - (file-exists-p sel) - (not (file-directory-p sel))) - do - ;; we use `abbreviate-file-name' here because - ;; other parts of Emacs seems to, - ;; and we don't want to introduce duplicates. - (add-to-history 'file-name-history - (abbreviate-file-name sel))))))) -(add-hook 'helm-exit-minibuffer-hook 'helm-files-save-file-name-history) - -(defun helm-ff-valid-symlink-p (file) - (helm-aif (condition-case-unless-debug nil - ;; `file-truename' send error - ;; on cyclic symlinks (Issue #692). - (file-truename file) - (error nil)) - (file-exists-p it))) - -(defun helm-get-default-mode-for-file (filename) - "Return the default mode to open FILENAME." - (let ((mode (cl-loop for (r . m) in auto-mode-alist - thereis (and (string-match r filename) m)))) - (or (and (symbolp mode) mode) "Fundamental"))) - -(defun helm-ff-properties (candidate) - "Show file properties of CANDIDATE in a tooltip or message." - (let* ((all (helm-file-attributes candidate)) - (dired-line (helm-file-attributes - candidate :dired t :human-size t)) - (type (cl-getf all :type)) - (mode-type (cl-getf all :mode-type)) - (owner (cl-getf all :uid)) - (owner-right (cl-getf all :user t)) - (group (cl-getf all :gid)) - (group-right (cl-getf all :group)) - (other-right (cl-getf all :other)) - (size (helm-file-human-size (cl-getf all :size))) - (modif (cl-getf all :modif-time)) - (access (cl-getf all :access-time)) - (ext (helm-get-default-program-for-file candidate)) - (tooltip-hide-delay (or helm-tooltip-hide-delay tooltip-hide-delay))) - (if (and (window-system) tooltip-mode) - (tooltip-show - (concat - (helm-basename candidate) "\n" - dired-line "\n" - (format "Mode: %s\n" (helm-get-default-mode-for-file candidate)) - (format "Ext prog: %s\n" (or (and ext (replace-regexp-in-string - " %s" "" ext)) - "Not defined")) - (format "Type: %s: %s\n" type mode-type) - (when (string= type "symlink") - (format "True name: '%s'\n" - (cond ((string-match "^\.#" (helm-basename candidate)) - "Autosave symlink") - ((helm-ff-valid-symlink-p candidate) - (file-truename candidate)) - (t "Invalid Symlink")))) - (format "Owner: %s: %s\n" owner owner-right) - (format "Group: %s: %s\n" group group-right) - (format "Others: %s\n" other-right) - (format "Size: %s\n" size) - (format "Modified: %s\n" modif) - (format "Accessed: %s\n" access))) - (message dired-line) (sit-for 5)))) - -(defun helm-ff-properties-persistent () - "Show properties without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'properties-action '(helm-ff-properties . never-split)) - (helm-execute-persistent-action 'properties-action))) -(put 'helm-ff-properties-persistent 'helm-only t) - -(defun helm-ff-persistent-delete () - "Delete current candidate without quitting." - (interactive) - (with-helm-alive-p - (helm-attrset 'quick-delete '(helm-ff-quick-delete . never-split)) - (helm-execute-persistent-action 'quick-delete))) -(put 'helm-ff-persistent-delete 'helm-only t) - -(defun helm-ff-dot-file-p (file) - "Check if FILE is `.' or `..'." - (member (helm-basename file) '("." ".."))) - -(defun helm-ff-quick-delete (_candidate) - "Delete file CANDIDATE without quitting." - (let ((marked (helm-marked-candidates))) - (unwind-protect - (save-selected-window - (cl-loop for c in marked do - (progn (helm-preselect - (if (and helm-ff-transformer-show-only-basename - (not (helm-ff-dot-file-p c))) - (helm-basename c) c)) - (when (y-or-n-p - (format "Really Delete file `%s'? " c)) - (helm-delete-file - c helm-ff-signal-error-on-dot-files 'synchro) - (helm-delete-current-selection) - (message nil))))) - (with-helm-buffer - (setq helm-marked-candidates nil - helm-visible-mark-overlays nil)) - (helm-force-update - (let ((presel (helm-get-selection))) - (regexp-quote (if (and helm-ff-transformer-show-only-basename - (not (helm-ff-dot-file-p presel))) - (helm-basename presel) presel))))))) - -(defun helm-ff-kill-buffer-fname (candidate) - (let* ((buf (get-file-buffer candidate)) - (buf-name (buffer-name buf))) - (cond ((and buf (eq buf (get-buffer helm-current-buffer))) - (user-error - "Can't kill `helm-current-buffer' without quitting session")) - (buf (kill-buffer buf) (message "Buffer `%s' killed" buf-name)) - (t (message "No buffer to kill"))))) - -(defun helm-ff-kill-or-find-buffer-fname (candidate) - "Find file CANDIDATE or kill it's buffer if it is visible. -Never kill `helm-current-buffer'. -Never kill buffer modified. -This is called normally on third hit of \ -\\\\[helm-execute-persistent-action] -in `helm-find-files-persistent-action'." - (let* ((buf (get-file-buffer candidate)) - (buf-name (buffer-name buf)) - (win (get-buffer-window buf)) - (helm--reading-passwd-or-string t)) - (cond ((and buf win (eq buf (get-buffer helm-current-buffer))) - (user-error - "Can't kill `helm-current-buffer' without quitting session")) - ((and buf win (buffer-modified-p buf)) - (message "Can't kill modified buffer, please save it before")) - ((and buf win) - (kill-buffer buf) - (set-window-buffer win helm-current-buffer) - (message "Buffer `%s' killed" buf-name)) - (t (find-file candidate))))) - -(defun helm-ff-run-kill-buffer-persistent () - "Execute `helm-ff-kill-buffer-fname' without quitting." - (interactive) - (with-helm-alive-p - (helm-attrset 'kill-buffer-fname 'helm-ff-kill-buffer-fname) - (helm-execute-persistent-action 'kill-buffer-fname))) -(put 'helm-ff-run-kill-buffer-persistent 'helm-only t) - -(defun helm-ff-prefix-filename (fname &optional file-or-symlinkp new-file) - "Return filename FNAME maybe prefixed with [?] or [@]. -If FILE-OR-SYMLINKP is non--nil this mean we assume FNAME is an -existing filename or valid symlink and there is no need to test it. -NEW-FILE when non--nil mean FNAME is a non existing file and -return FNAME prefixed with [?]." - (let* ((prefix-new (propertize - " " 'display - (propertize "[?]" 'face 'helm-ff-prefix))) - (prefix-url (propertize - " " 'display - (propertize "[@]" 'face 'helm-ff-prefix)))) - (cond (file-or-symlinkp fname) - ((or (string-match helm-ff-url-regexp fname) - (and ffap-url-regexp (string-match ffap-url-regexp fname))) - (concat prefix-url " " fname)) - (new-file (concat prefix-new " " fname))))) - -(defun helm-ff-score-candidate-for-pattern (str pattern) - (if (member str '("." "..")) - 200 - (helm-score-candidate-for-pattern str pattern))) - -(defun helm-ff-sort-candidates (candidates _source) - "Sort function for `helm-source-find-files'. -Return candidates prefixed with basename of `helm-input' first." - (if (or (and (file-directory-p helm-input) - (string-match "/\\'" helm-input)) - (string-match "\\`\\$" helm-input) - (null candidates)) - candidates - (let* ((c1 (car candidates)) - (cand1real (if (consp c1) (cdr c1) c1)) - (cand1 (unless (file-exists-p cand1real) c1)) - (rest-cand (if cand1 (cdr candidates) candidates)) - (memo-src (make-hash-table :test 'equal)) - (all (sort rest-cand - (lambda (s1 s2) - (let* ((score (lambda (str) - (helm-ff-score-candidate-for-pattern - str (helm-basename helm-input)))) - (bn1 (helm-basename (if (consp s1) (cdr s1) s1))) - (bn2 (helm-basename (if (consp s2) (cdr s2) s2))) - (sc1 (or (gethash bn1 memo-src) - (puthash bn1 (funcall score bn1) memo-src))) - (sc2 (or (gethash bn2 memo-src) - (puthash bn2 (funcall score bn2) memo-src)))) - (cond ((= sc1 sc2) - (< (string-width bn1) - (string-width bn2))) - ((> sc1 sc2)))))))) - (if cand1 (cons cand1 all) all)))) - -(defun helm-ff-filter-candidate-one-by-one (file) - "`filter-one-by-one' Transformer function for `helm-source-find-files'." - ;; Handle boring files - (unless (and helm-ff-skip-boring-files - (cl-loop for r in helm-boring-file-regexp-list - ;; Prevent user doing silly thing like - ;; adding the dotted files to boring regexps (#924). - thereis (and (not (string-match "\\.$" file)) - (string-match r file)))) - ;; Handle tramp files. - (if (and (string-match helm-tramp-file-name-regexp helm-pattern) - helm-ff-tramp-not-fancy) - (if helm-ff-transformer-show-only-basename - (if (helm-dir-is-dot file) - file - (cons (or (helm-ff-get-host-from-tramp-invalid-fname file) - (helm-basename file)) - file)) - file) - ;; Now highlight. - (let* ((disp (if (and helm-ff-transformer-show-only-basename - (not (helm-dir-is-dot file)) - (not (and ffap-url-regexp - (string-match ffap-url-regexp file))) - (not (string-match helm-ff-url-regexp file))) - (or (helm-ff-get-host-from-tramp-invalid-fname file) - (helm-basename file)) file)) - (attr (file-attributes file)) - (type (car attr))) - - (cond ((string-match "file-error" file) file) - ( ;; A not already saved file. - (and (stringp type) - (not (helm-ff-valid-symlink-p file)) - (not (string-match "^\.#" (helm-basename file)))) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-invalid-symlink) t) - file)) - ;; A dotted directory symlinked. - ((and (helm-ff-dot-file-p file) (stringp type)) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-dotted-symlink-directory) t) - file)) - ;; A dotted directory. - ((helm-ff-dot-file-p file) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-dotted-directory) t) - file)) - ;; A symlink. - ((stringp type) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-symlink) t) - file)) - ;; A directory. - ((eq t type) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-directory) t) - file)) - ;; An executable file. - ((and attr (string-match "x" (nth 8 attr))) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-executable) t) - file)) - ;; A file. - ((and attr (null type)) - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-file) t) - file)) - ;; A non--existing file. - (t - (cons (helm-ff-prefix-filename - (propertize disp 'face 'helm-ff-file) nil 'new-file) - file))))))) - -(defun helm-find-files-action-transformer (actions candidate) - "Action transformer for `helm-source-find-files'." - (let ((str-at-point (with-helm-current-buffer - (buffer-substring-no-properties - (point-at-bol) (point-at-eol))))) - (cond ((with-helm-current-buffer - (eq major-mode 'message-mode)) - (append actions - '(("Gnus attach file(s)" . helm-ff-gnus-attach-files)))) - ((save-match-data - (and ffap-url-regexp - (not (string-match-p ffap-url-regexp str-at-point)) - (not (with-helm-current-buffer (eq major-mode 'dired-mode))) - (string-match ":\\([0-9]+:?\\)" str-at-point) - )) - (append '(("Find file to line number" . helm-ff-goto-linum)) - actions)) - ((string-match (image-file-name-regexp) candidate) - (append actions - '(("Rotate image right `M-r'" . helm-ff-rotate-image-right) - ("Rotate image left `M-l'" . helm-ff-rotate-image-left)))) - ((string-match "\.el$" (helm-aif (helm-marked-candidates) - (car it) candidate)) - (append actions - '(("Byte compile lisp file(s) `M-B, C-u to load'" - . helm-find-files-byte-compile) - ("Load File(s) `M-L'" . helm-find-files-load-files)))) - ((and (string-match "\.html?$" candidate) - (file-exists-p candidate)) - (append actions - '(("Browse url file" . browse-url-of-file)))) - ((or (string= (file-name-extension candidate) "pdf") - (string= (file-name-extension candidate) "PDF")) - (append actions - '(("Pdfgrep File(s)" . helm-ff-pdfgrep)))) - (t actions)))) - -(defun helm-ff-goto-linum (candidate) - "Find file CANDIDATE and maybe jump to line number found in fname at point. -line number should be added at end of fname preceded with \":\". -e.g \"foo:12\"." - (let ((linum (with-helm-current-buffer - (let ((str (buffer-substring-no-properties - (point-at-bol) (point-at-eol)))) - (when (string-match ":\\([0-9]+:?\\)" str) - (match-string 1 str)))))) - (find-file candidate) - (and linum (not (string= linum "")) - (helm-goto-line (string-to-number linum) t)))) - -(defun helm-ff-gnus-attach-files (_candidate) - "Run `gnus-dired-attach' on `helm-marked-candidates' or CANDIDATE." - (require 'gnus-dired) - (let ((flist (helm-marked-candidates :with-wildcard t))) - (gnus-dired-attach flist))) - -(defvar image-dired-display-image-buffer) -(defun helm-ff-rotate-current-image-1 (file &optional num-arg) - "Rotate current image at NUM-ARG degrees. -This is a destructive operation on FILE made by external tool mogrify." - (setq file (file-truename file)) ; For symlinked images. - ;; When FILE is not an image-file, do nothing. - (when (string-match (image-file-name-regexp) file) - (if (executable-find "mogrify") - (progn - (shell-command (format "mogrify -rotate %s %s" - (or num-arg 90) - (shell-quote-argument file))) - (when (buffer-live-p image-dired-display-image-buffer) - (kill-buffer image-dired-display-image-buffer)) - (image-dired-display-image file) - (message nil) - (display-buffer (get-buffer image-dired-display-image-buffer))) - (error "mogrify not found")))) - -(defun helm-ff-rotate-image-left (candidate) - "Rotate image file CANDIDATE left. -This affect directly file CANDIDATE." - (helm-ff-rotate-current-image-1 candidate -90)) - -(defun helm-ff-rotate-image-right (candidate) - "Rotate image file CANDIDATE right. -This affect directly file CANDIDATE." - (helm-ff-rotate-current-image-1 candidate)) - -(defun helm-ff-rotate-left-persistent () - "Rotate image left without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'image-action1 'helm-ff-rotate-image-left) - (helm-execute-persistent-action 'image-action1))) -(put 'helm-ff-rotate-left-persistent 'helm-only t) - -(defun helm-ff-rotate-right-persistent () - "Rotate image right without quitting helm." - (interactive) - (with-helm-alive-p - (helm-attrset 'image-action2 'helm-ff-rotate-image-right) - (helm-execute-persistent-action 'image-action2))) -(put 'helm-ff-rotate-right-persistent 'helm-only t) - -(defun helm-ff-exif-data (candidate) - "Extract exif data from file CANDIDATE using `helm-ff-exif-data-program'." - (if (and helm-ff-exif-data-program - (executable-find helm-ff-exif-data-program)) - (shell-command-to-string (format "%s %s %s" - helm-ff-exif-data-program - helm-ff-exif-data-program-args - candidate)) - (format "No program %s found to extract exif" - helm-ff-exif-data-program))) - -(defun helm-find-files-persistent-action (candidate) - "Open subtree CANDIDATE without quitting helm. -If CANDIDATE is not a directory expand CANDIDATE filename. -If CANDIDATE is alone, open file CANDIDATE filename. -That's mean: -First hit on C-j expand CANDIDATE second hit open file. -If a prefix arg is given or `helm-follow-mode' is on open file." - (let* ((follow (or (buffer-local-value - 'helm-follow-mode - (get-buffer-create helm-buffer)) - helm--temp-follow-flag)) - (new-pattern (helm-get-selection)) - (num-lines-buf (with-current-buffer helm-buffer - (count-lines (point-min) (point-max)))) - (insert-in-minibuffer (lambda (fname) - (with-selected-window (minibuffer-window) - (unless follow - (delete-minibuffer-contents) - (set-text-properties 0 (length fname) - nil fname) - (insert fname)))))) - (cond ((and (helm-ff-invalid-tramp-name-p) - (string-match helm-tramp-file-name-regexp candidate)) - ;; First hit insert hostname and - ;; second hit insert ":" and expand. - (if (string= candidate helm-pattern) - (funcall insert-in-minibuffer (concat candidate ":")) - (funcall insert-in-minibuffer candidate))) - (;; A symlink directory, expand it but not to its truename - ;; unless a prefix arg is given. - (and (file-directory-p candidate) (file-symlink-p candidate)) - (funcall insert-in-minibuffer - (file-name-as-directory - (if current-prefix-arg - (file-truename (expand-file-name candidate)) - (expand-file-name candidate))))) - ;; A directory, open it. - ((file-directory-p candidate) - (when (string= (helm-basename candidate) "..") - (setq helm-ff-last-expanded helm-ff-default-directory)) - (funcall insert-in-minibuffer (file-name-as-directory - (expand-file-name candidate)))) - ;; A symlink file, expand to it's true name. (first hit) - ((and (file-symlink-p candidate) (not current-prefix-arg) (not follow)) - (funcall insert-in-minibuffer (file-truename candidate))) - ;; A regular file, expand it, (first hit) - ((and (>= num-lines-buf 3) (not current-prefix-arg) (not follow)) - (setq helm-pattern "") ; Force update. - (funcall insert-in-minibuffer new-pattern)) - ;; An image file and it is the second hit on C-j, - ;; show the file in `image-dired'. - ((string-match (image-file-name-regexp) candidate) - (when (buffer-live-p (get-buffer image-dired-display-image-buffer)) - (kill-buffer image-dired-display-image-buffer)) - ;; Fix emacs bug never fixed upstream. - (unless (file-directory-p image-dired-dir) - (make-directory image-dired-dir)) - (image-dired-display-image candidate) - (message nil) - (switch-to-buffer image-dired-display-image-buffer) - (with-current-buffer image-dired-display-image-buffer - (let ((exif-data (helm-ff-exif-data candidate))) - (setq default-directory helm-ff-default-directory) - (image-dired-update-property 'help-echo exif-data)))) - ;; Allow browsing archive on avfs fs. - ;; Assume volume is already mounted with mountavfs. - ((and helm-ff-avfs-directory - (string-match - (regexp-quote (expand-file-name helm-ff-avfs-directory)) - (file-name-directory candidate)) - (helm-ff-file-compressed-p candidate)) - (funcall insert-in-minibuffer (concat candidate "#"))) - ;; On second hit we open file. - ;; On Third hit we kill it's buffer maybe. - (t - (helm-ff-kill-or-find-buffer-fname candidate))))) - -(defun helm-ff-file-compressed-p (candidate) - "Whether CANDIDATE is a compressed file or not." - (member (file-name-extension candidate) - helm-ff-file-compressed-list)) - -(defun helm-insert-file-name-completion-at-point (candidate) - "Insert file name completion at point." - (with-helm-current-buffer - (if buffer-read-only - (error "Error: Buffer `%s' is read-only" (buffer-name)) - (let* ((end (point)) - (tap (thing-at-point 'filename)) - (guess (and (stringp tap) (substring-no-properties tap))) - (beg (- (point) (length guess))) - (full-path-p (and (stringp guess) - (or (string-match-p - (concat "^" (getenv "HOME")) - guess) - (string-match-p - "\\`\\(/\\|[[:lower:][:upper:]]:/\\)" - guess))))) - (set-text-properties 0 (length candidate) nil candidate) - (if (and guess (not (string= guess "")) - (or (string-match "^\\(~/\\|/\\|[[:lower:][:upper:]]:/\\)" - guess) - (file-exists-p candidate))) - (progn - (delete-region beg end) - (insert (cond (full-path-p - (expand-file-name candidate)) - ((string= (match-string 1 guess) "~/") - (abbreviate-file-name candidate)) - (t (file-relative-name candidate))))) - (insert (cond ((equal helm-current-prefix-arg '(4)) - (abbreviate-file-name candidate)) - ((equal helm-current-prefix-arg '(16)) - (file-relative-name candidate)) - (t candidate)))))))) - -(cl-defun helm-find-files-history (&key (comp-read t)) - "The `helm-find-files' history. -Show the first `helm-ff-history-max-length' elements of -`helm-ff-history' in an `helm-comp-read'." - (let ((history (when helm-ff-history - (helm-fast-remove-dups helm-ff-history - :test 'equal)))) - (when history - (setq helm-ff-history - (if (>= (length history) helm-ff-history-max-length) - (cl-subseq history 0 helm-ff-history-max-length) - history)) - (if comp-read - (helm-comp-read - "Switch to Directory: " - helm-ff-history - :name "Helm Find Files History" - :must-match t) - helm-ff-history)))) - -(defun helm-find-files-1 (fname &optional preselect) - "Find FNAME with `helm' completion. -Like `find-file' but with `helm' support. -Use it for non--interactive calls of `helm-find-files'." - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (setq helm-find-files--toggle-bookmark nil) - (let* ( ;; Be sure we don't erase the precedent minibuffer if some. - (helm-ff-auto-update-initial-value - (and helm-ff-auto-update-initial-value - (not (minibuffer-window-active-p (minibuffer-window))))) - (tap (thing-at-point 'filename)) - (def (and tap (or (file-remote-p tap) - (expand-file-name tap))))) - (unless helm-source-find-files - (setq helm-source-find-files (helm-make-source - "Find Files" 'helm-source-ffiles))) - (unwind-protect - (helm :sources 'helm-source-find-files - :input fname - :case-fold-search helm-file-name-case-fold-search - :preselect preselect - :ff-transformer-show-only-basename - helm-ff-transformer-show-only-basename - :default def - :prompt "Find Files or Url: " - :buffer "*Helm Find Files*") - (setq helm-ff-default-directory nil)))) - -(defun helm-find-files-toggle-to-bookmark () - "Toggle helm-bookmark for `helm-find-files' and `helm-find-files.'" - (interactive) - (with-helm-alive-p - (with-helm-buffer - (if (setq helm-find-files--toggle-bookmark - (not helm-find-files--toggle-bookmark)) - (progn - (helm-set-pattern "" t) - (helm-set-sources '(helm-source-bookmark-helm-find-files))) - ;; Switch back to helm-find-files. - (helm-set-pattern "./" t) ; Back to initial directory of hff session. - (helm-set-sources '(helm-source-find-files)) - (helm--maybe-update-keymap))))) -(put 'helm-find-files-toggle-to-bookmark 'helm-only t) - -(defun helm-find-files-initial-input (&optional input) - "Return INPUT if present, otherwise try to guess it." - (let ((ffap-machine-p-known 'reject) - (ffap-alist (and helm-ff-guess-ffap-filenames ffap-alist)) - (ffap-url-regexp (and helm-ff-guess-ffap-urls ffap-url-regexp))) - (unless (eq major-mode 'image-mode) - (or (and input (or (and (file-remote-p input) input) - (expand-file-name input))) - (helm-find-files-input - (ffap-guesser) - (thing-at-point 'filename)))))) - -(defun helm-find-files-input (file-at-pt thing-at-pt) - "Try to guess a default input for `helm-find-files'." - (let* ((non-essential t) - (remp (or (and file-at-pt (file-remote-p file-at-pt)) - (and thing-at-pt (file-remote-p thing-at-pt)))) - (def-dir (helm-current-directory)) - (urlp (and file-at-pt ffap-url-regexp - (string-match ffap-url-regexp file-at-pt))) - (lib (when helm-ff-search-library-in-sexp - (helm-find-library-at-point))) - (hlink (helm-ff-find-url-at-point)) - (file-p (and file-at-pt - (not (string= file-at-pt "")) - (not remp) - (file-exists-p file-at-pt) - thing-at-pt - (not (string= thing-at-pt "")) - (file-exists-p - (file-name-directory - (expand-file-name thing-at-pt def-dir)))))) - (cond (lib) ; e.g we are inside a require sexp. - (hlink) ; String at point is an hyperlink. - (file-p ; a regular file - (helm-aif (ffap-file-at-point) (expand-file-name it))) - (urlp file-at-pt) ; possibly an url or email. - ((and file-at-pt - (not remp) - (file-exists-p file-at-pt)) - file-at-pt)))) - -(defun helm-ff-find-url-at-point () - "Try to find link to an url in text-property at point." - (let* ((he (get-text-property (point) 'help-echo)) - (ov (overlays-at (point))) - (ov-he (and ov (overlay-get - (car (overlays-at (point))) 'help-echo))) - (w3m-l (get-text-property (point) 'w3m-href-anchor)) - (nt-prop (get-text-property (point) 'nt-link))) - ;; Org link. - (when (and (stringp he) (string-match "^LINK: " he)) - (setq he (replace-match "" t t he))) - (cl-loop for i in (list he ov-he w3m-l nt-prop) - thereis (and (stringp i) ffap-url-regexp (string-match ffap-url-regexp i) i)))) - -(defun helm-find-library-at-point () - "Try to find library path at point. -Find inside `require' and `declare-function' sexp." - (require 'find-func) - (let* ((beg-sexp (save-excursion (search-backward "(" (point-at-bol) t))) - (end-sexp (save-excursion (search-forward ")" (point-at-eol) t))) - (sexp (and beg-sexp end-sexp - (buffer-substring-no-properties - (1+ beg-sexp) (1- end-sexp))))) - (ignore-errors - (cond ((and sexp (string-match "require \'.+[^)]" sexp)) - (find-library-name - (replace-regexp-in-string - "'\\|\)\\|\(" "" - ;; If require use third arg, ignore it, - ;; always use library path found in `load-path'. - (cl-second (split-string (match-string 0 sexp)))))) - ((and sexp (string-match-p "^declare-function" sexp)) - (find-library-name - (replace-regexp-in-string - "\"\\|ext:" "" - (cl-third (split-string sexp))))) - (t nil))))) - - -;;; Handle copy, rename, symlink, relsymlink and hardlink from helm. -;; -;; -(defun helm-ff--valid-default-directory () - (with-helm-current-buffer - (cl-loop for b in (buffer-list) - for cd = (with-current-buffer b default-directory) - when (eq (car (file-attributes cd)) t) - return cd))) - -(defvar dired-async-mode) -(cl-defun helm-dired-action (candidate - &key action follow (files (dired-get-marked-files))) - "Execute ACTION on FILES to CANDIDATE. -Where ACTION is a symbol that can be one of: -'copy, 'rename, 'symlink,'relsymlink, 'hardlink. -Argument FOLLOW when non--nil specify to follow FILES to destination for the actions -copy and rename." - (when (get-buffer dired-log-buffer) (kill-buffer dired-log-buffer)) - ;; When default-directory in current-buffer is an invalid directory, - ;; (e.g buffer-file directory have been renamed somewhere else) - ;; be sure to use a valid value to give to dired-create-file. - ;; i.e start-process is creating a process buffer based on default-directory. - (let ((default-directory (helm-ff--valid-default-directory)) - (fn (cl-case action - (copy 'dired-copy-file) - (rename 'dired-rename-file) - (symlink 'make-symbolic-link) - (relsymlink 'dired-make-relative-symlink) - (hardlink 'dired-hardlink))) - (marker (cl-case action - ((copy rename) dired-keep-marker-copy) - (symlink dired-keep-marker-symlink) - (relsymlink dired-keep-marker-relsymlink) - (hardlink dired-keep-marker-hardlink))) - (dirflag (and (= (length files) 1) - (file-directory-p (car files)) - (not (file-directory-p candidate)))) - (dired-async-state (if (and (boundp 'dired-async-mode) - dired-async-mode) - 1 -1))) - (and follow (fboundp 'dired-async-mode) (dired-async-mode -1)) - (when (and (cdr files) (not (file-directory-p candidate))) - (error "%s: target `%s' is not a directory" action candidate)) - (unwind-protect - (dired-create-files - fn (symbol-name action) files - ;; CANDIDATE is the destination. - (if (file-directory-p candidate) - ;; When CANDIDATE is a directory, build file-name in this directory. - ;; Else we use CANDIDATE. - (lambda (from) - (expand-file-name (file-name-nondirectory from) candidate)) - (lambda (_from) candidate)) - marker) - (and (fboundp 'dired-async-mode) - (dired-async-mode dired-async-state))) - (push (file-name-as-directory - (if (file-directory-p candidate) - (expand-file-name candidate) - (file-name-directory candidate))) - helm-ff-history) - ;; If follow is non--nil we should not be in async mode. - (when (and follow - (not (memq action '(symlink relsymlink hardlink))) - (not (get-buffer dired-log-buffer))) - (let ((target (directory-file-name candidate))) - (unwind-protect - (progn - (setq helm-ff-cand-to-mark - (helm-get-dest-fnames-from-list files candidate dirflag)) - (with-helm-after-update-hook (helm-ff-maybe-mark-candidates)) - (if (and dirflag (eq action 'rename)) - (helm-find-files-1 (file-name-directory target) - (if helm-ff-transformer-show-only-basename - (helm-basename target) target)) - (helm-find-files-1 (file-name-as-directory - (expand-file-name candidate))))) - (setq helm-ff-cand-to-mark nil)))))) - -(defun helm-get-dest-fnames-from-list (flist dest-cand rename-dir-flag) - "Transform filenames of FLIST to abs of DEST-CAND. -If RENAME-DIR-FLAG is non--nil collect the `directory-file-name' of transformed -members of FLIST." - ;; At this point files have been renamed/copied at destination. - ;; That's mean DEST-CAND exists. - (cl-loop - with dest = (expand-file-name dest-cand) - for src in flist - for basename-src = (helm-basename src) - for fname = (cond (rename-dir-flag (directory-file-name dest)) - ((file-directory-p dest) - (concat (file-name-as-directory dest) basename-src)) - (t dest)) - when (file-exists-p fname) - collect fname into tmp-list - finally return (sort tmp-list 'string<))) - -(defun helm-ff-maybe-mark-candidates () - "Mark all candidates of list `helm-ff-cand-to-mark'. -This is used when copying/renaming/symlinking etc... and -following files to destination." - (when (and (string= (assoc-default 'name (helm-get-current-source)) - (assoc-default 'name helm-source-find-files)) - helm-ff-cand-to-mark) - (with-helm-window - (while helm-ff-cand-to-mark - (if (string= (car helm-ff-cand-to-mark) (helm-get-selection)) - (progn - (helm-make-visible-mark) - (helm-next-line) - (setq helm-ff-cand-to-mark (cdr helm-ff-cand-to-mark))) - (helm-next-line))) - (unless (helm-this-visible-mark) - (helm-prev-visible-mark))))) - - -;;; Routines for files -;; -;; -(defun helm-file-buffers (filename) - "Returns a list of buffer names corresponding to FILENAME." - (cl-loop with name = (expand-file-name filename) - for buf in (buffer-list) - for bfn = (buffer-file-name buf) - when (and bfn (string= name bfn)) - collect (buffer-name buf))) - -(defun helm-delete-file (file &optional error-if-dot-file-p synchro) - "Delete the given file after querying the user. -Ask to kill buffers associated with that file, too." - (when (and error-if-dot-file-p - (helm-ff-dot-file-p file)) - (error "Error: Cannot operate on `.' or `..'")) - (let ((buffers (helm-file-buffers file)) - (helm--reading-passwd-or-string t)) - (if (or (< emacs-major-version 24) synchro) - ;; `dired-delete-file' in Emacs versions < 24 - ;; doesn't support delete-by-moving-to-trash - ;; so use `delete-directory' and `delete-file' - ;; that handle it. - (cond ((and (not (file-symlink-p file)) - (file-directory-p file) - (directory-files file t dired-re-no-dot)) - (when (y-or-n-p (format "Recursive delete of `%s'? " file)) - (delete-directory file 'recursive))) - ((and (not (file-symlink-p file)) - (file-directory-p file)) - (delete-directory file)) - (t (delete-file file))) - (dired-delete-file - file dired-recursive-deletes delete-by-moving-to-trash)) - (when buffers - (cl-dolist (buf buffers) - (when (y-or-n-p (format "Kill buffer %s, too? " buf)) - (kill-buffer buf)))))) - -(defun helm-delete-marked-files (_ignore) - (let* ((files (helm-marked-candidates :with-wildcard t)) - (len (length files))) - (with-helm-display-marked-candidates - helm-marked-buffer-name - (mapcar (lambda (f) - (if (file-directory-p f) - (concat (helm-basename f) "/") - (helm-basename f))) - files) - (if (not (y-or-n-p (format "Delete *%s File(s)" len))) - (message "(No deletions performed)") - (cl-dolist (i files) - (set-text-properties 0 (length i) nil i) - (helm-delete-file i helm-ff-signal-error-on-dot-files)) - (message "%s File(s) deleted" len))))) - -(defun helm-find-file-or-marked (candidate) - "Open file CANDIDATE or open helm marked files in separate windows. -Called with a prefix arg open files in background without selecting them." - (let ((marked (helm-marked-candidates :with-wildcard t)) - (url-p (and ffap-url-regexp ; we should have only one candidate. - (string-match ffap-url-regexp candidate))) - (ffap-newfile-prompt helm-ff-newfile-prompt-p) - (find-file-wildcards nil) - (make-dir-fn - (lambda (dir &optional helm-ff) - (when (or (not confirm-nonexistent-file-or-buffer) - (y-or-n-p (format "Create directory `%s'? " dir))) - (let ((dirfname (directory-file-name dir))) - (if (file-exists-p dirfname) - (error - "Mkdir: Unable to create directory `%s': file exists." - (helm-basename dirfname)) - (make-directory dir 'parent))) - (when helm-ff - ;; Allow having this new dir in history - ;; to be able to retrieve it immediately - ;; if we want to e.g copy a file from somewhere in it. - (setq helm-ff-default-directory - (file-name-as-directory dir)) - (push helm-ff-default-directory helm-ff-history)) - (or (and helm-ff (helm-find-files-1 dir)) t)))) - (helm--reading-passwd-or-string t)) - (if (cdr marked) - (if helm-current-prefix-arg - (dired-simultaneous-find-file marked nil) - (mapc 'find-file-noselect (cdr marked)) - (find-file (car marked))) - (if (and (not (file-exists-p candidate)) - (not url-p) - (string-match "/$" candidate)) - ;; A a non--existing filename ending with / - ;; Create a directory and jump to it. - (funcall make-dir-fn candidate 'helm-ff) - ;; A non--existing filename NOT ending with / or - ;; an existing filename, create or jump to it. - ;; If the basedir of candidate doesn't exists, - ;; ask for creating it. - (let ((dir (and (not url-p) (helm-basedir candidate)))) - (find-file-at-point - (cond ((and dir (file-directory-p dir)) - (substitute-in-file-name candidate)) - (url-p candidate) - ((funcall make-dir-fn dir) candidate)))))))) - -(defun helm-shadow-boring-files (files) - "Files matching `helm-boring-file-regexp' will be -displayed with the `file-name-shadow' face if available." - (helm-shadow-entries files helm-boring-file-regexp-list)) - -(defun helm-skip-boring-files (files) - "Files matching `helm-boring-file-regexp' will be skipped." - (helm-skip-entries files helm-boring-file-regexp-list)) - -(defun helm-skip-current-file (files) - "Current file will be skipped." - (remove (buffer-file-name helm-current-buffer) files)) - -(defun helm-w32-pathname-transformer (args) - "Change undesirable features of windows pathnames to ones more acceptable to -other candidate transformers." - (if (eq system-type 'windows-nt) - (helm-transform-mapcar - (lambda (x) - (replace-regexp-in-string - "/cygdrive/\\(.\\)" "\\1:" - (replace-regexp-in-string "\\\\" "/" x))) - args) - args)) - -(defun helm-transform-file-load-el (actions candidate) - "Add action to load the file CANDIDATE if it is an emacs lisp -file. Else return ACTIONS unmodified." - (if (member (file-name-extension candidate) '("el" "elc")) - (append actions '(("Load Emacs Lisp File" . load-file))) - actions)) - -(defun helm-transform-file-browse-url (actions candidate) - "Add an action to browse the file CANDIDATE if it is a html file or URL. -Else return ACTIONS unmodified." - (let ((browse-action '("Browse with Browser" . browse-url))) - (cond ((string-match "^http\\|^ftp" candidate) - (cons browse-action actions)) - ((string-match "\\.html?$" candidate) - (append actions (list browse-action))) - (t actions)))) - -(defun helm-multi-files-toggle-to-locate () - (interactive) - (with-helm-alive-p - (with-helm-buffer - (if (setq helm-multi-files--toggle-locate - (not helm-multi-files--toggle-locate)) - (progn - (helm-set-sources (unless (memq 'helm-source-locate - helm-sources) - (cons 'helm-source-locate helm-sources))) - (helm-set-source-filter '(helm-source-locate))) - (helm-kill-async-processes) - (helm-set-sources (remove 'helm-source-locate - helm-for-files-preferred-list)) - (helm-set-source-filter nil))))) -(put 'helm-multi-files-toggle-to-locate 'helm-only t) - - -;;; List of files gleaned from every dired buffer -;; -;; -(defun helm-files-in-all-dired-candidates () - (save-excursion - (cl-loop for (f . b) in dired-buffers - when (buffer-live-p b) - append (let ((dir (with-current-buffer b dired-directory))) - (if (listp dir) (cdr dir) - (directory-files f t dired-re-no-dot)))))) - -;; (dired '("~/" "~/.emacs.d/.emacs-custom.el" "~/.emacs.d/.emacs.bmk")) - -(defclass helm-files-dired-source (helm-source-sync helm-type-file) - ((candidates :initform #'helm-files-in-all-dired-candidates))) - -(defvar helm-source-files-in-all-dired - (helm-make-source "Files in all dired buffer." 'helm-files-dired-source)) - - -;;; File Cache -;; -;; -(defvar file-cache-alist) - -(defclass helm-file-cache (helm-source-in-buffer helm-type-file) - ((init :initform (lambda () (require 'filecache))))) - -(defun helm-file-cache-get-candidates () - (cl-loop for item in file-cache-alist append - (cl-destructuring-bind (base &rest dirs) item - (cl-loop for dir in dirs collect - (concat dir base))))) - -(defvar helm-source-file-cache nil) - -(defcustom helm-file-cache-fuzzy-match nil - "Enable fuzzy matching in `helm-source-file-cache' when non--nil." - :group 'helm-files - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-file-cache - (helm-make-source "File Cache" 'helm-file-cache - :fuzzy-match helm-file-cache-fuzzy-match - :data 'helm-file-cache-get-candidates)))) - -(cl-defun helm-file-cache-add-directory-recursively - (dir &optional match (ignore-dirs t)) - (require 'filecache) - (cl-loop for f in (helm-walk-directory - dir - :path 'full - :directories nil - :match match - :skip-subdirs ignore-dirs) - do (file-cache-add-file f))) - -(defun helm-ff-cache-add-file (_candidate) - (require 'filecache) - (let ((mkd (helm-marked-candidates :with-wildcard t))) - (mapc 'file-cache-add-file mkd))) - -(defun helm-ff-file-cache-remove-file-1 (file) - "Remove FILE from `file-cache-alist'." - (let ((entry (assoc (helm-basename file) file-cache-alist)) - (dir (helm-basedir file)) - new-entry) - (setq new-entry (remove dir entry)) - (when (= (length entry) 1) - (setq new-entry nil)) - (setq file-cache-alist - (cons new-entry (remove entry file-cache-alist))))) - -(defun helm-ff-file-cache-remove-file (_file) - "Remove marked files from `file-cache-alist.'" - (let ((mkd (helm-marked-candidates))) - (mapc 'helm-ff-file-cache-remove-file-1 mkd))) - -(defun helm-transform-file-cache (actions _candidate) - (let ((source (helm-get-current-source))) - (if (string= (assoc-default 'name source) "File Cache") - (append actions - '(("Remove marked files from file-cache" - . helm-ff-file-cache-remove-file))) - actions))) - - -;;; File name history -;; -;; -(defvar helm-source-file-name-history - (helm-build-sync-source "File Name History" - :candidates 'file-name-history - :persistent-action #'ignore - :filtered-candidate-transformer #'helm-file-name-history-transformer - :action 'helm-type-file-actions)) - -(defvar helm-source--ff-file-name-history nil - "[Internal] This source is build to be used with `helm-find-files'. -Don't use it in your own code unless you know what you are doing.") - -(defun helm-file-name-history-transformer (candidates _source) - (cl-loop for c in candidates collect - (cond ((file-remote-p c) - (cons (propertize c 'face 'helm-history-remote) c)) - ((file-exists-p c) - (cons (propertize c 'face 'helm-ff-file) c)) - (t (cons (propertize c 'face 'helm-history-deleted) c))))) - -(defun helm-ff-file-name-history () - "Switch to `file-name-history' without quitting `helm-find-files'." - (interactive) - (unless helm-source--ff-file-name-history - (setq helm-source--ff-file-name-history - (helm-build-sync-source "File name history" - :init (lambda () - (with-helm-alive-p - (when helm-ff-file-name-history-use-recentf - (require 'recentf) - (or recentf-mode (recentf-mode 1))))) - :candidates (lambda () - (if helm-ff-file-name-history-use-recentf - recentf-list - file-name-history)) - :fuzzy-match t - :persistent-action 'ignore - :migemo t - :filtered-candidate-transformer 'helm-file-name-history-transformer - :action (helm-make-actions - "Find file" (lambda (candidate) - (helm-set-pattern - (expand-file-name candidate)) - (with-helm-after-update-hook (helm-exit-minibuffer))) - "Find file in helm" (lambda (candidate) - (helm-set-pattern - (expand-file-name candidate))))))) - (with-helm-alive-p - (helm :sources 'helm-source--ff-file-name-history - :buffer "*helm-file-name-history*" - :allow-nest t - :resume 'noresume))) -(put 'helm-ff-file-name-history 'helm-only t) - -;;; Recentf files -;; -;; -(defvar helm-recentf--basename-flag nil) - -(defun helm-recentf-pattern-transformer (pattern) - (let ((pattern-no-flag (replace-regexp-in-string " -b" "" pattern))) - (cond ((and (string-match " " pattern-no-flag) - (string-match " -b\\'" pattern)) - (setq helm-recentf--basename-flag t) - pattern-no-flag) - ((string-match "\\([^ ]*\\) -b\\'" pattern) - (prog1 (match-string 1 pattern) - (setq helm-recentf--basename-flag t))) - (t (setq helm-recentf--basename-flag nil) - pattern)))) - -(defclass helm-recentf-source (helm-source-sync helm-type-file) - ((init :initform (lambda () - (require 'recentf) - (recentf-mode 1))) - (candidates :initform (lambda () recentf-list)) - (pattern-transformer :initform 'helm-recentf-pattern-transformer) - (match-part :initform (lambda (candidate) - (if (or helm-ff-transformer-show-only-basename - helm-recentf--basename-flag) - (helm-basename candidate) candidate))) - (migemo :initform t) - (persistent-action :initform 'helm-ff-kill-or-find-buffer-fname))) - -(defmethod helm--setup-source :after ((source helm-recentf-source)) - (set-slot-value - source 'action - (append (symbol-value (helm-actions-from-type-file)) - '(("Delete file(s) from recentf" . - (lambda (_candidate) - (cl-loop for file in (helm-marked-candidates) - do (setq recentf-list (delq file recentf-list))))))))) - -(defvar helm-source-recentf nil - "See (info \"(emacs)File Conveniences\"). -Set `recentf-max-saved-items' to a bigger value if default is too small.") - -(defcustom helm-recentf-fuzzy-match nil - "Enable fuzzy matching in `helm-source-recentf' when non--nil." - :group 'helm-files - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-recentf - (helm-make-source "Recentf" 'helm-recentf-source - :fuzzy-match helm-recentf-fuzzy-match)))) - -;;; Browse project -;; Need dependencies: -;; -;; -;; Only hg and git are supported for now. -(defvar helm--browse-project-cache (make-hash-table :test 'equal)) - -(defun helm-browse-project-get-buffers (root-directory) - (cl-loop for b in (helm-buffer-list) - ;; FIXME: Why default-directory is root-directory - ;; for current-buffer when coming from helm-quit-and-find-file. - for cd = (with-current-buffer b default-directory) - for bn = (buffer-file-name (get-buffer b)) - if (or (and bn (file-in-directory-p bn root-directory)) - (and (null bn) - (file-in-directory-p cd root-directory))) - collect b)) - -(defun helm-browse-project-build-buffers-source (directory) - (helm-make-source "Buffers in project" 'helm-source-buffers - :header-name (lambda (name) - (format - "%s (%s)" - name (abbreviate-file-name directory))) - :buffer-list (lambda () (helm-browse-project-get-buffers directory)))) - -(defun helm-browse-project-find-files (directory &optional refresh) - (when refresh (remhash directory helm--browse-project-cache)) - (unless (gethash directory helm--browse-project-cache) - (puthash directory (helm-walk-directory - directory - :directories nil :path 'full :skip-subdirs t) - helm--browse-project-cache)) - (helm :sources `(,(helm-browse-project-build-buffers-source directory) - ,(helm-build-in-buffer-source "Browse project" - :data (gethash directory helm--browse-project-cache) - :header-name (lambda (name) - (format - "%s (%s)" - name (abbreviate-file-name directory))) - :match-part (lambda (c) - (if helm-ff-transformer-show-only-basename - (helm-basename c) c)) - :filter-one-by-one - (lambda (c) - (if helm-ff-transformer-show-only-basename - (cons (propertize (helm-basename c) - 'face 'helm-ff-file) - c) - (propertize c 'face 'helm-ff-file))) - :keymap helm-generic-files-map - :action 'helm-type-file-actions)) - :buffer "*helm browse project*")) - -;;;###autoload -(defun helm-browse-project (arg) - "Preconfigured helm to browse projects. -Browse files and see status of project with its vcs. -Only HG and GIT are supported for now. -Fall back to `helm-browse-project-find-files' -if current directory is not under control of one of those vcs. -With a prefix ARG browse files recursively, with two prefix ARG -rebuild the cache. -If the current directory is found in the cache, start -`helm-browse-project-find-files' even with no prefix ARG. -NOTE: The prefix ARG have no effect on the VCS controlled directories. - -Needed dependencies for VCS: - -and - -and -." - (interactive "P") - (cond ((and (require 'helm-ls-git nil t) - (fboundp 'helm-ls-git-root-dir) - (helm-ls-git-root-dir)) - (helm-ls-git-ls)) - ((and (require 'helm-ls-hg nil t) - (fboundp 'helm-hg-root) - (helm-hg-root)) - (helm-hg-find-files-in-project)) - ((and (require 'helm-ls-svn nil t) - (fboundp 'helm-ls-svn-root-dir) - (helm-ls-svn-root-dir)) - (helm-ls-svn-ls)) - (t (let ((cur-dir (helm-browse-project-get--root-dir - (helm-current-directory)))) - (if (or arg (gethash cur-dir helm--browse-project-cache)) - (helm-browse-project-find-files cur-dir (equal arg '(16))) - (helm :sources (helm-browse-project-build-buffers-source cur-dir) - :buffer "*helm browse project*")))))) - -(defun helm-browse-project-get--root-dir (directory) - (cl-loop with dname = (file-name-as-directory directory) - while (and dname (not (gethash dname helm--browse-project-cache))) - if (file-remote-p dname) - do (setq dname nil) else - do (setq dname (helm-basedir (substring dname 0 (1- (length dname))))) - finally return (or dname (file-name-as-directory directory)))) - -(defun helm-ff-browse-project (_candidate) - "Browse project in current directory. -See `helm-browse-project'." - (with-helm-default-directory helm-ff-default-directory - (helm-browse-project helm-current-prefix-arg))) - -(defun helm-ff-run-browse-project () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-browse-project))) -(put 'helm-ff-run-browse-project 'helm-only t) - -(defun helm-ff-gid (_candidate) - (with-helm-default-directory helm-ff-default-directory - (helm-gid))) - -(defun helm-ff-run-gid () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-gid))) -(put 'helm-ff-run-gid 'helm-only t) - -;;; session.el files -;; -;; session (http://emacs-session.sourceforge.net/) is an alternative to -;; recentf that saves recent file history and much more. -(defvar session-file-alist) -(defvar helm-source-session - (helm-build-sync-source "Session" - :candidates (lambda () - (cl-delete-if-not (lambda (f) - (or (string-match helm-tramp-file-name-regexp f) - (file-exists-p f))) - (mapcar 'car session-file-alist))) - :keymap helm-generic-files-map - :help-message helm-generic-file-help-message - :action 'helm-type-file-actions) - "File list from emacs-session.") - - -;;; Files in current dir -;; -;; -(defun helm-highlight-files (files) - "A basic transformer for helm files sources. -Colorize only symlinks, directories and files." - (cl-loop for i in files - for disp = (if (and helm-ff-transformer-show-only-basename - (not (helm-dir-is-dot i)) - (not (and ffap-url-regexp - (string-match ffap-url-regexp i))) - (not (string-match helm-ff-url-regexp i))) - (helm-basename i) i) - for type = (and (null helm-ff-tramp-not-fancy) - (car (file-attributes i))) - collect - (cond ((and helm-ff-tramp-not-fancy - (string-match helm-tramp-file-name-regexp i)) - (cons disp i)) - ((stringp type) - (cons (propertize disp - 'face 'helm-ff-symlink - 'help-echo (expand-file-name i)) - i)) - ((eq type t) - (cons (propertize disp - 'face 'helm-ff-directory - 'help-echo (expand-file-name i)) - i)) - (t (cons (propertize disp - 'face 'helm-ff-file - 'help-echo (expand-file-name i)) - i))))) - -(defclass helm-files-in-current-dir-source (helm-source-sync helm-type-file) - ((candidates :initform (lambda () - (with-helm-current-buffer - (let ((dir (helm-current-directory))) - (when (file-accessible-directory-p dir) - (directory-files dir t)))))) - (pattern-transformer :initform 'helm-recentf-pattern-transformer) - (match-part :initform (lambda (candidate) - (if (or helm-ff-transformer-show-only-basename - helm-recentf--basename-flag) - (helm-basename candidate) candidate))) - (fuzzy-match :initform t) - (migemo :initform t))) - -(defvar helm-source-files-in-current-dir - (helm-make-source "Files from Current Directory" - helm-files-in-current-dir-source)) - - -;;; External searching file tools. -;; -;; Tracker desktop search -(defvar helm-source-tracker-cand-incomplete nil "Contains incomplete candidate") -(defun helm-source-tracker-transformer (candidates _source) - (helm-log "received: %S" candidates) - (cl-loop for cand in candidates - for path = (when (stringp helm-source-tracker-cand-incomplete) - (caar (helm-highlight-files - (list helm-source-tracker-cand-incomplete)))) - for built = (if (not (stringp cand)) cand - (let ((snippet cand)) - (unless (or (null path) - (string= "" path) - (not (string-match-p - "\\`[[:space:]]*\\.\\.\\." - snippet))) - (let ((complete-candidate - (cons (concat path "\n" snippet) path))) - (setq helm-source-tracker-cand-incomplete nil) - (helm-log "built: %S" complete-candidate) - complete-candidate)))) - when (and (stringp cand) - (string-match "\\`[[:space:]]*file://" cand)) - do (setq helm-source-tracker-cand-incomplete ; save path - (replace-match "" t t cand)) end - collect built)) - -(defvar helm-source-tracker-search - (helm-build-async-source "Tracker Search" - :candidates-process - (lambda () - (start-process "tracker-search-process" nil - "tracker-search" - "--disable-color" - "--limit=512" - helm-pattern)) - :filtered-candidate-transformer #'helm-source-tracker-transformer - ;;(multiline) ; https://github.com/emacs-helm/helm/issues/529 - :keymap helm-generic-files-map - :action 'helm-type-file-actions - :action-transformer '(helm-transform-file-load-el - helm-transform-file-browse-url) - :requires-pattern 3) - "Source for retrieving files matching the current input pattern -with the tracker desktop search.") - -;; Spotlight (MacOS X desktop search) -(defclass helm-mac-spotlight-source (helm-source-async helm-type-file) - ((candidates-process :initform - (lambda () - (start-process - "mdfind-process" nil "mdfind" helm-pattern))) - (requires-pattern :initform 3))) - -(defvar helm-source-mac-spotlight - (helm-make-source "mdfind" helm-mac-spotlight-source) - "Source for retrieving files via Spotlight's command line -utility mdfind.") - - -;;; Findutils -;; -;; -(defvar helm-source-findutils - (helm-build-async-source "Find" - :header-name (lambda (name) - (concat name " in [" (helm-default-directory) "]")) - :candidates-process 'helm-find-shell-command-fn - :filtered-candidate-transformer 'helm-findutils-transformer - :action-transformer 'helm-transform-file-load-el - :persistent-action 'helm-ff-kill-or-find-buffer-fname - :action 'helm-type-file-actions - :keymap helm-generic-files-map - :candidate-number-limit 9999 - :requires-pattern 3)) - -(defun helm-findutils-transformer (candidates _source) - (let (non-essential - (default-directory (helm-default-directory))) - (cl-loop for i in candidates - for abs = (expand-file-name - (helm-aif (file-remote-p default-directory) - (concat it i) i)) - for type = (car (file-attributes abs)) - for disp = (if (and helm-ff-transformer-show-only-basename - (not (string-match "[.]\\{1,2\\}$" i))) - (helm-basename abs) abs) - collect (cond ((eq t type) - (cons (propertize disp 'face 'helm-ff-directory) - abs)) - ((stringp type) - (cons (propertize disp 'face 'helm-ff-symlink) - abs)) - (t (cons (propertize disp 'face 'helm-ff-file) - abs)))))) - -(defun helm-find--build-cmd-line () - (require 'find-cmd) - (let* ((default-directory (or (file-remote-p default-directory 'localname) - default-directory)) - (patterns+options (split-string helm-pattern "\\(\\`\\| +\\)\\* +")) - (fold-case (helm-set-case-fold-search (car patterns+options))) - (patterns (split-string (car patterns+options))) - (additional-options (and (cdr patterns+options) - (list (concat (cadr patterns+options) " ")))) - (ignored-dirs ()) - (ignored-files (when helm-findutils-skip-boring-files - (cl-loop for f in completion-ignored-extensions - if (string-match "/$" f) - do (push (replace-match "" nil t f) - ignored-dirs) - else collect (concat "*" f)))) - (path-or-name (if helm-findutils-search-full-path - '(ipath path) '(iname name))) - (name-or-iname (if fold-case - (car path-or-name) (cadr path-or-name)))) - (find-cmd (and ignored-dirs - `(prune (name ,@ignored-dirs))) - (and ignored-files - `(not (name ,@ignored-files))) - `(and ,@(mapcar - (lambda (pattern) - `(,name-or-iname ,(concat "*" pattern "*"))) - patterns) - ,@additional-options)))) - -(defun helm-find-shell-command-fn () - "Asynchronously fetch candidates for `helm-find'. -Additional find options can be specified after a \"*\" -separator." - (let* (process-connection-type - non-essential - (cmd (helm-find--build-cmd-line)) - (proc (start-file-process-shell-command "hfind" helm-buffer cmd))) - (helm-log "Find command:\n%s" cmd) - (prog1 proc - (set-process-sentinel - proc - (lambda (process event) - (helm-process-deferred-sentinel-hook - process event (helm-default-directory)) - (if (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Find process finished - (%s results)]" - (max (1- (count-lines - (point-min) (point-max))) - 0)) - 'face 'helm-locate-finish)))) - (force-mode-line-update)) - (helm-log "Error: Find %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defun helm-find-1 (dir) - (let ((default-directory (file-name-as-directory dir))) - (helm :sources 'helm-source-findutils - :buffer "*helm find*" - :ff-transformer-show-only-basename nil - :case-fold-search helm-file-name-case-fold-search))) - -;; helm-find-files integration. -(defun helm-ff-find-sh-command (_candidate) - "Run `helm-find' from `helm-find-files'." - (helm-find-1 helm-ff-default-directory)) - -(defun helm-ff-run-find-sh-command () - "Run find shell command action with key from `helm-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-ff-find-sh-command))) -(put 'helm-ff-run-find-sh-command 'helm-only t) - - -;;; Preconfigured commands -;; -;; -;;;###autoload -(defun helm-find (arg) - "Preconfigured `helm' for the find shell command." - (interactive "P") - (let ((directory - (if arg - (file-name-as-directory - (read-directory-name "DefaultDirectory: ")) - default-directory))) - (helm-find-1 directory))) - -(defvar org-directory) -;;;###autoload -(defun helm-find-files (arg) - "Preconfigured `helm' for helm implementation of `find-file'. -Called with a prefix arg show history if some. -Don't call it from programs, use `helm-find-files-1' instead. -This is the starting point for nearly all actions you can do on files." - (interactive "P") - (let* ((hist (and arg helm-ff-history (helm-find-files-history))) - (default-input (or hist (helm-find-files-initial-input))) - (input (cond ((and (eq major-mode 'org-agenda-mode) - org-directory - (not default-input)) - (expand-file-name org-directory)) - ((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))))) - (input-as-presel (null (nth 0 (file-attributes input)))) - (presel (helm-aif (or hist - (and input-as-presel input) - (buffer-file-name (current-buffer)) - (and (eq major-mode 'dired-mode) - default-input)) - (if helm-ff-transformer-show-only-basename - (helm-basename it) it)))) - (set-text-properties 0 (length input) nil input) - (helm-find-files-1 input (and presel (concat "^" (regexp-quote presel)))))) - -;;;###autoload -(defun helm-for-files () - "Preconfigured `helm' for opening files. -Run all sources defined in `helm-for-files-preferred-list'." - (interactive) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (helm :sources helm-for-files-preferred-list - :ff-transformer-show-only-basename nil - :buffer "*helm for files*")) - -;;;###autoload -(defun helm-multi-files () - "Preconfigured helm similar to `helm-for-files' but that don't run locate. -Allow toggling from locate to others sources. -This allow seeing first if what you search is in other sources before launching -locate." - (interactive) - (unless helm-source-buffers-list - (setq helm-source-buffers-list - (helm-make-source "Buffers" 'helm-source-buffers))) - (setq helm-multi-files--toggle-locate nil) - (let ((sources (remove 'helm-source-locate helm-for-files-preferred-list)) - (old-key (lookup-key - helm-map - (read-kbd-macro helm-multi-files-toggle-locate-binding)))) - (with-helm-temp-hook 'helm-after-initialize-hook - (define-key helm-map (kbd helm-multi-files-toggle-locate-binding) - 'helm-multi-files-toggle-to-locate)) - (unwind-protect - (helm :sources sources - :ff-transformer-show-only-basename nil - :buffer "*helm multi files*") - (define-key helm-map (kbd helm-multi-files-toggle-locate-binding) - old-key)))) - -;;;###autoload -(defun helm-recentf () - "Preconfigured `helm' for `recentf'." - (interactive) - (helm :sources 'helm-source-recentf - :ff-transformer-show-only-basename nil - :buffer "*helm recentf*")) - -(provide 'helm-files) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-files.el ends here diff --git a/elpa/helm-20160217.958/helm-font.el b/elpa/helm-20160217.958/helm-font.el deleted file mode 100644 index 8968aa9e..00000000 --- a/elpa/helm-20160217.958/helm-font.el +++ /dev/null @@ -1,198 +0,0 @@ -;;; helm-font --- Font and ucs selection for Helm -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) - -(defgroup helm-font nil - "Related applications to display fonts in helm." - :group 'helm) - -(defvar helm-ucs-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-ucs-persistent-delete) - (define-key map (kbd "") 'helm-ucs-persistent-backward) - (define-key map (kbd "") 'helm-ucs-persistent-forward) - (define-key map (kbd "") 'helm-ucs-persistent-insert) - map) - "Keymap for `helm-ucs'.") - -(defface helm-ucs-char - '((t (:foreground "Gold"))) - "Face used to display ucs characters." - :group 'helm-font) - -;;; Xfont selection -;; -;; -(defvar helm-xfonts-cache nil) -(defvar helm-previous-font nil) -(defvar helm-source-xfonts - (helm-build-sync-source "X Fonts" - :init (lambda () - (unless helm-xfonts-cache - (setq helm-xfonts-cache - (x-list-fonts "*"))) - ;; Save current font so it can be restored in cleanup - (setq helm-previous-font (cdr (assoc 'font (frame-parameters))))) - :candidates 'helm-xfonts-cache - :action '(("Copy font to kill ring" . (lambda (elm) - (kill-new elm))) - ("Set font" . (lambda (elm) - (kill-new elm) - (set-frame-font elm 'keep-size) - (message "Font copied to kill ring")))) - :cleanup (lambda () - ;; Restore previous font - (set-frame-font helm-previous-font 'keep-size)) - :persistent-action (lambda (new-font) - (set-frame-font new-font 'keep-size) - (kill-new new-font)) - :persistent-help "Preview font and copy to kill-ring")) - -;;; 𝕌𝕔𝕤 𝕊𝕪𝕞𝕓𝕠𝕝 𝕔𝕠𝕞𝕡𝕝𝕖𝕥𝕚𝕠𝕟 -;; -;; -(defvar helm-ucs--max-len nil) -(defvar helm-ucs--names nil) - -(defun helm-calculate-ucs-max-len () - "Calculate the length of longest `ucs-names' candidate." - (cl-loop for (_n . v) in (ucs-names) - maximize (length (format "#x%x:" v)) into code - maximize (max 1 (string-width (format "%c" v))) into char - finally return (cons code char))) - -(defun helm-ucs-init () - "Initialize an helm buffer with ucs symbols. -Only math* symbols are collected." - (unless helm-ucs--max-len - (setq helm-ucs--max-len - (helm-calculate-ucs-max-len))) - (or helm-ucs--names - (setq helm-ucs--names - (cl-loop for (n . v) in (ucs-names) - for len = (length (format "#x%x:" v)) - for diff = (- (car helm-ucs--max-len) len) - for code = (format "(#x%x): " v) - for char = (propertize (format "%c" v) - 'face 'helm-ucs-char) - unless (string= "" n) collect - (concat code (make-string diff ? ) - char " " n))))) - -(defun helm-ucs-forward-char (_candidate) - (with-helm-current-buffer - (forward-char 1))) - -(defun helm-ucs-backward-char (_candidate) - (with-helm-current-buffer - (forward-char -1))) - -(defun helm-ucs-delete-backward (_candidate) - (with-helm-current-buffer - (delete-char -1))) - -(defun helm-ucs-insert (candidate n) - (when (string-match - "^(\\(#x[a-f0-9]+\\)): *\\(.\\) *\\([^:]+\\)+" - candidate) - (with-helm-current-buffer - (insert (match-string n candidate))))) - -(defun helm-ucs-insert-char (candidate) - (helm-ucs-insert candidate 2)) - -(defun helm-ucs-insert-code (candidate) - (helm-ucs-insert candidate 1)) - -(defun helm-ucs-insert-name (candidate) - (helm-ucs-insert candidate 3)) - -(defun helm-ucs-persistent-insert () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-insert 'helm-ucs-insert-char) - (helm-execute-persistent-action 'action-insert))) -(put 'helm-ucs-persistent-insert 'helm-only t) - -(defun helm-ucs-persistent-forward () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-forward 'helm-ucs-forward-char) - (helm-execute-persistent-action 'action-forward))) -(put 'helm-ucs-persistent-forward 'helm-only t) - -(defun helm-ucs-persistent-backward () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-back 'helm-ucs-backward-char) - (helm-execute-persistent-action 'action-back))) -(put 'helm-ucs-persistent-backward 'helm-only t) - -(defun helm-ucs-persistent-delete () - (interactive) - (with-helm-alive-p - (helm-attrset 'action-delete 'helm-ucs-delete-backward) - (helm-execute-persistent-action 'action-delete))) -(put 'helm-ucs-persistent-delete 'helm-only t) - -(defvar helm-source-ucs - (helm-build-in-buffer-source "Ucs names" - :data #'helm-ucs-init - :get-line #'buffer-substring - :help-message 'helm-ucs-help-message - :match-part (lambda (candidate) (cadr (split-string candidate ":"))) - :filtered-candidate-transformer - (lambda (candidates _source) (sort candidates #'helm-generic-sort-fn)) - :action '(("Insert character" . helm-ucs-insert-char) - ("Insert character name" . helm-ucs-insert-name) - ("Insert character code in hex" . helm-ucs-insert-code) - ("Forward char" . helm-ucs-forward-char) - ("Backward char" . helm-ucs-backward-char) - ("Delete char backward" . helm-ucs-delete-backward))) - "Source for collecting `ucs-names' math symbols.") - -;;;###autoload -(defun helm-select-xfont () - "Preconfigured `helm' to select Xfont." - (interactive) - (helm :sources 'helm-source-xfonts - :buffer "*helm select xfont*")) - -;;;###autoload -(defun helm-ucs () - "Preconfigured helm for `ucs-names' math symbols." - (interactive) - (let ((char (helm-aif (char-after) (string it)))) - (helm :sources 'helm-source-ucs - :keymap helm-ucs-map - :input (and char (multibyte-string-p char) char)))) - -(provide 'helm-font) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-font.el ends here diff --git a/elpa/helm-20160217.958/helm-grep.el b/elpa/helm-20160217.958/helm-grep.el deleted file mode 100644 index d2d69591..00000000 --- a/elpa/helm-20160217.958/helm-grep.el +++ /dev/null @@ -1,1326 +0,0 @@ -;;; helm-grep.el --- Helm Incremental Grep. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-regexp) - -;;; load wgrep proxy if it's available -(require 'wgrep-helm nil t) - -(declare-function helm-buffer-list "helm-buffers") -(declare-function helm-elscreen-find-file "helm-elscreen" (file)) -(declare-function View-quit "view") -(declare-function doc-view-goto-page "doc-view" (page)) -(declare-function helm-mm-split-pattern "helm-multi-match") -(declare-function helm--ansi-color-apply "helm-lib") -(defvar helm--ansi-color-regexp) - - -(defgroup helm-grep nil - "Grep related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-grep-default-command - "grep --color=always -a -d skip %e -n%cH -e %p %f" - "Default grep format command for `helm-do-grep-1'. -Where: -'%e' format spec is for --exclude or --include grep options or - ack-grep --type option. (Not mandatory) - -'%c' format spec is for case-fold-search, - whether to use the -i option of grep. (Not mandatory) - When you specify this spec, helm grep will use smartcase - that is when a upcase character is found in pattern case will - be respected and no '-i' option will be used, otherwise, when - no upcase character is found in pattern always use '-i'. - If you don't want this behavior, don't use this spec and - specify or not the '-i' option. - Note that with ack-grep this is not needed, just specify - the '--smart-case' option. - -'%p' format spec is for pattern. (Mandatory) - -'%f' format spec is for filenames. (Mandatory) - -If your grep version doesn't support the --exclude/include args -don't specify the '%e' format spec. - -Helm also support ack-grep and git-grep , -here a default command example for ack-grep: - -\(setq helm-grep-default-command \"ack-grep -Hn --smart-case --no-group %e %p %f\" - helm-grep-default-recurse-command \"ack-grep -H --smart-case --no-group %e %p %f\") - -You can ommit the %e spec if you don't want to be prompted for types. - -NOTE: Helm for ack-grep support ANSI sequences, so you can remove -the \"--no-color\" option safely (recommended). - -Same for grep you can use safely the option \"--color=always\" (default). -You can customize the color of matches using GREP_COLORS env var. -e.g: \(setenv \"GREP_COLORS\" \"ms=30;43:mc=30;43:sl=01;37:cx=:fn=35:ln=32:bn=32:se=36\") - -To enable ANSI color in git-grep just add \"--color=always\". -To customize the ANSI color in git-grep, GREP_COLORS have no effect, -you will have to setup this in your .gitconfig: - - [color \"grep\"] - match = black yellow - -where \"black\" is the foreground and \"yellow\" the background. -See the git documentation for more infos. - -`helm-grep-default-command' and `helm-grep-default-recurse-command'are -independents, so you can enable `helm-grep-default-command' with ack-grep -and `helm-grep-default-recurse-command' with grep if you want to be faster -on recursive grep. - -NOTE: Remote grepping is not available with ack-grep, - and badly supported with grep because tramp handle badly - repeated remote processes in a short delay (< to 5s)." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-default-recurse-command - "grep --color=always -a -d recurse %e -n%cH -e %p %f" - "Default recursive grep format command for `helm-do-grep-1'. -See `helm-grep-default-command' for format specs and infos about ack-grep." - :group 'helm-grep - :type 'string) - -(defcustom helm-default-zgrep-command - "zgrep --color=always -a -n%cH -e %p %f" - "Default command for Zgrep. -See `helm-grep-default-command' for infos on format specs. -Option --color=always is supported and can be used safely -to replace the helm internal match highlighting, -see `helm-grep-default-command' for more infos." - :group 'helm-grep - :type 'string) - -(defcustom helm-pdfgrep-default-command - "pdfgrep --color always -niH %s %s" - "Default command for pdfgrep. -Option \"--color always\" is supported starting helm version 1.7.8, -when used matchs will be highlighted according to GREP_COLORS env var." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-use-ioccur-style-keys t - "Use Arrow keys to jump to occurences." - :group 'helm-grep - :type 'boolean) - -(defcustom helm-pdfgrep-default-read-command nil - "Default command to read pdf files from pdfgrep. -Where '%f' format spec is filename and '%p' is page number. -e.g In Ubuntu you can set it to: - - \"evince --page-label=%p '%f'\" - -If set to nil `doc-view-mode' will be used instead of an external command." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-max-length-history 100 - "Max number of elements to save in `helm-grep-history'." - :group 'helm-grep - :type 'integer) - -(defcustom helm-zgrep-file-extension-regexp - ".*\\(\\.gz\\|\\.bz\\|\\.xz\\|\\.lzma\\)$" - "Default file extensions zgrep will search in." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-preferred-ext nil - "This file extension will be preselected for grep." - :group 'helm-grep - :type 'string) - -(defcustom helm-grep-save-buffer-name-no-confirm nil - "when *hgrep* already exists,auto append suffix." - :group 'helm-grep - :type 'boolean) - -(defcustom helm-grep-ignored-files - (cons ".#*" (delq nil (mapcar (lambda (s) - (unless (string-match-p "/\\'" s) - (concat "*" s))) - completion-ignored-extensions))) - "List of file names which `helm-grep' shall exclude." - :group 'helm-grep - :type '(repeat string)) - -(defcustom helm-grep-ignored-directories - helm-walk-ignore-directories - "List of names of sub-directories which `helm-grep' shall not recurse into." - :group 'helm-grep - :type '(repeat string)) - -(defcustom helm-grep-truncate-lines t - "When nil the grep line that appears will not be truncated." - :group 'helm-grep - :type 'boolean) - -(defcustom helm-grep-file-path-style 'basename - "File path display style when grep results are displayed. -Possible value are: - basename: displays only the filename, none of the directory path - absolute: displays absolute path - relative: displays relative path from root grep directory." - :group 'helm-grep - :type '(choice (const :tag "Basename" basename) - (const :tag "Absolute" absolute) - (const :tag "Relative" relative))) - - -;;; Faces -;; -;; -(defgroup helm-grep-faces nil - "Customize the appearance of helm-grep." - :prefix "helm-" - :group 'helm-grep - :group 'helm-faces) - -(defface helm-grep-match - '((((background light)) :foreground "#b00000") - (((background dark)) :foreground "gold1")) - "Face used to highlight grep matches." - :group 'helm-grep-faces) - -(defface helm-grep-file - '((t (:foreground "BlueViolet" - :underline t))) - "Face used to highlight grep results filenames." - :group 'helm-grep-faces) - -(defface helm-grep-lineno - '((t (:foreground "Darkorange1"))) - "Face used to highlight grep number lines." - :group 'helm-grep-faces) - -(defface helm-grep-finish - '((t (:foreground "Green"))) - "Face used in mode line when grep is finish." - :group 'helm-grep-faces) - -(defface helm-grep-cmd-line - '((t (:inherit diff-added))) - "Face used to highlight grep command line when no results." - :group 'helm-grep-faces) - - -;;; Keymaps -;; -;; -(defvar helm-grep-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-c o") 'helm-grep-run-other-window-action) - (define-key map (kbd "C-c C-o") 'helm-grep-run-other-frame-action) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-x C-s") 'helm-grep-run-save-buffer) - (when helm-grep-use-ioccur-style-keys - (define-key map (kbd "") 'helm-execute-persistent-action) - (define-key map (kbd "") 'helm-grep-run-default-action)) - (delq nil map)) - "Keymap used in Grep sources.") - -(defvar helm-pdfgrep-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - map) - "Keymap used in pdfgrep.") - -(defvar helm-grep-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") 'helm-grep-mode-jump) - (define-key map (kbd "C-o") 'helm-grep-mode-jump-other-window) - (define-key map (kbd "") 'helm-grep-mode-jump-other-window-forward) - (define-key map (kbd "") 'helm-grep-mode-jump-other-window-backward) - (define-key map (kbd "") 'helm-gm-next-file) - (define-key map (kbd "") 'helm-gm-precedent-file) - (define-key map (kbd "M-n") 'helm-grep-mode-jump-other-window-forward) - (define-key map (kbd "M-p") 'helm-grep-mode-jump-other-window-backward) - (define-key map (kbd "M-N") 'helm-gm-next-file) - (define-key map (kbd "M-P") 'helm-gm-precedent-file) - map)) - - -;;; Internals vars -;; -;; -(defvar helm-rzgrep-cache (make-hash-table :test 'equal)) -(defvar helm-grep-default-function 'helm-grep-init) -(defvar helm-zgrep-recurse-flag nil) -(defvar helm-grep-history nil) -(defvar helm-grep-last-targets nil) -(defvar helm-grep-include-files nil) -(defvar helm-grep-in-recurse nil) -(defvar helm-grep-use-zgrep nil) -(defvar helm-grep-default-directory-fn nil - "A function that should return a directory to expand candidate to. -It is intended to use as a let-bound variable, DON'T set this globaly.") -(defvar helm-pdfgrep-targets nil) -(defvar helm-grep-last-cmd-line nil) -(defvar helm-grep-split-line-regexp "^\\([[:lower:][:upper:]]?:?.*?\\):\\([0-9]+\\):\\(.*\\)") - - -;;; Init -;; -;; -(defun helm-grep-prepare-candidates (candidates in-directory) - "Prepare filenames and directories CANDIDATES for grep command line." - ;; If one or more candidate is a directory, search in all files - ;; of this candidate (e.g /home/user/directory/*). - ;; If r option is enabled search also in subdidrectories. - ;; We need here to expand wildcards to support crap windows filenames - ;; as grep doesn't accept quoted wildcards (e.g "dir/*.el"). - (if helm-zgrep-recurse-flag - (mapconcat 'shell-quote-argument candidates " ") - ;; When candidate is a directory, search in all its files. - ;; NOTE that `file-expand-wildcards' will return also - ;; directories, they will be ignored by grep but not - ;; by ack-grep that will grep all files of this directory - ;; without recursing in their subdirs though, see that as a one - ;; level recursion with ack-grep. - ;; So I leave it as it is, considering it is a feature. [1] - (cl-loop for i in candidates append - (cond ((string-match "^git" helm-grep-default-command) - (list i)) - ;; Candidate is a directory and we use recursion or ack. - ((and (file-directory-p i) - (or helm-grep-in-recurse - ;; ack-grep accept directory [1]. - (helm-grep-use-ack-p))) - (list (expand-file-name i))) - ;; Grep doesn't support directory only when not in recurse. - ((file-directory-p i) - (file-expand-wildcards - (concat (file-name-as-directory (expand-file-name i)) "*") t)) - ;; Candidate is a file or wildcard and we use recursion, use the - ;; current directory instead of candidate. - ((and (or (file-exists-p i) (string-match "[*]" i)) - helm-grep-in-recurse) - (list (expand-file-name - (directory-file-name ; Needed for windoze. - (file-name-directory (directory-file-name i)))))) - ;; Else should be one or more file/directory - ;; possibly marked. - ;; When real is a normal filename without wildcard - ;; file-expand-wildcards returns a list of one file. - ;; wildcards should have been already handled by - ;; helm-read-file-name or helm-find-files but do it from - ;; here too in case we are called from elsewhere. - (t (file-expand-wildcards i t))) into all-files ; [1] - finally return - (let ((files (if (file-remote-p in-directory) - ;; Grep don't understand tramp filenames - ;; use the local name. - (mapcar (lambda (x) - (file-remote-p x 'localname)) - all-files) - all-files))) - (if (string-match "^git" helm-grep-default-command) - (mapconcat 'identity files " ") - (mapconcat 'shell-quote-argument files " ")))))) - -(defun helm-grep-command (&optional recursive) - (let* ((com (if recursive - helm-grep-default-recurse-command - helm-grep-default-command)) - (exe (and com (car (split-string com " "))))) - (if (and exe (string= exe "git")) "git-grep" exe))) - -(cl-defun helm-grep-use-ack-p (&key where) - (let* ((rec-com (helm-grep-command t)) - (norm-com (helm-grep-command)) - (norm-com-ack-p (string-match "\\`ack" norm-com)) - (rec-com-ack-p (and rec-com (string-match "\\`ack" rec-com)))) - (cl-case where - (default (and norm-com norm-com-ack-p)) - (recursive (and rec-com rec-com-ack-p)) - (strict (and norm-com rec-com rec-com-ack-p norm-com-ack-p)) - (t (and (not (and norm-com (string= norm-com "git-grep"))) - (or (and norm-com norm-com-ack-p) - (and rec-com rec-com-ack-p))))))) - -(defun helm-grep--prepare-cmd-line (only-files &optional include zgrep) - (let* ((default-directory (or (helm-default-directory) - (expand-file-name helm-ff-default-directory))) - (fnargs (helm-grep-prepare-candidates - only-files default-directory)) - (ignored-files (unless (helm-grep-use-ack-p) - (mapconcat - (lambda (x) - (concat "--exclude=" - (shell-quote-argument x))) - helm-grep-ignored-files " "))) - (ignored-dirs (unless (helm-grep-use-ack-p) - (mapconcat - ;; Need grep version >=2.5.4 - ;; of Gnuwin32 on windoze. - (lambda (x) - (concat "--exclude-dir=" - (shell-quote-argument x))) - helm-grep-ignored-directories " "))) - (exclude (unless (helm-grep-use-ack-p) - (if helm-grep-in-recurse - (concat (or include ignored-files) - " " ignored-dirs) - ignored-files))) - (types (and (helm-grep-use-ack-p) - ;; When %e format spec is not specified - ;; in `helm-grep-default-command' - ;; we need to pass an empty string - ;; to types to avoid error. - (or include ""))) - (smartcase (if (helm-grep-use-ack-p) "" - (unless (let ((case-fold-search nil)) - (string-match-p - "[[:upper:]]" helm-pattern)) "i")))) - (format-spec - helm-grep-default-command - (delq nil - (list (unless zgrep - (if types - (cons ?e types) - (cons ?e exclude))) - (cons ?c (or smartcase "")) - (cons ?p (shell-quote-argument helm-pattern)) - (cons ?f fnargs)))))) - -(defun helm-grep-init (cmd-line) - "Start an asynchronous grep process with CMD-LINE using ZGREP if non--nil." - (let* ((default-directory (or helm-ff-default-directory - (helm-default-directory))) - (zgrep (string-match "\\`zgrep" cmd-line)) - ;; Use pipe only with grep, zgrep or git-grep. - (process-connection-type (and (not zgrep) (helm-grep-use-ack-p))) - (tramp-verbose helm-tramp-verbose) - non-essential) - ;; Start grep process. - (helm-log "Starting Grep process in directory `%s'" default-directory) - (helm-log "Command line used was:\n\n%s" - (concat ">>> " (propertize cmd-line 'face 'helm-grep-cmd-line) "\n\n")) - (prog1 ; This function should return the process first. - (start-file-process-shell-command - "grep" helm-buffer cmd-line) - ;; Init sentinel. - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (process event) - (let* ((err (process-exit-status process)) - (noresult (= err 1))) - (unless err - (helm-process-deferred-sentinel-hook - process event (helm-default-directory))) - (cond ((and noresult - ;; [FIXME] This is a workaround for zgrep - ;; that exit with code 1 - ;; after a certain amount of results. - (not (with-helm-buffer helm-grep-use-zgrep))) - (with-helm-buffer - (insert (concat "* Exit with code 1, no result found," - " command line was:\n\n " - (propertize helm-grep-last-cmd-line - 'face 'helm-grep-cmd-line))) - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format - "[%s process finished - (no results)] " - (if helm-grep-use-zgrep - "Zgrep" - (capitalize - (if helm-grep-in-recurse - (helm-grep-command t) - (helm-grep-command))))) - 'face 'helm-grep-finish)))))) - ((string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format - "[%s process finished - (%s results)] " - (if helm-grep-use-zgrep - "Zgrep" - (capitalize - (if helm-grep-in-recurse - (helm-grep-command t) - (helm-grep-command)))) - (helm-get-candidate-number)) - 'face 'helm-grep-finish)))) - (force-mode-line-update))) - ;; Catch error output in log. - (t (helm-log - "Error: %s %s" - (if helm-grep-use-zgrep "Zgrep" "Grep") - (replace-regexp-in-string "\n" "" event)))))))))) - -(defun helm-grep-collect-candidates () - (let ((cmd-line (helm-grep--prepare-cmd-line - helm-grep-last-targets - helm-grep-include-files - helm-grep-use-zgrep))) - (set (make-local-variable 'helm-grep-last-cmd-line) cmd-line) - (funcall helm-grep-default-function cmd-line))) - - -;;; Actions -;; -;; -(defun helm-grep-action (candidate &optional where mark) - "Define a default action for `helm-do-grep-1' on CANDIDATE. -WHERE can be one of other-window, elscreen, other-frame." - (let* ((split (helm-grep-split-line candidate)) - (lineno (string-to-number (nth 1 split))) - (loc-fname (or (with-current-buffer - (if (eq major-mode 'helm-grep-mode) - (current-buffer) - helm-buffer) - (get-text-property (point-at-bol) 'help-echo)) - (car split))) - (tramp-method (file-remote-p (or helm-ff-default-directory - default-directory) 'method)) - (tramp-host (file-remote-p (or helm-ff-default-directory - default-directory) 'host)) - (tramp-prefix (concat "/" tramp-method ":" tramp-host ":")) - (fname (if tramp-host - (concat tramp-prefix loc-fname) loc-fname))) - (cl-case where - (other-window (find-file-other-window fname)) - (elscreen (helm-elscreen-find-file fname)) - (other-frame (find-file-other-frame fname)) - (grep (helm-grep-save-results-1)) - (pdf (if helm-pdfgrep-default-read-command - (helm-pdfgrep-action-1 split lineno (car split)) - (find-file (car split)) (doc-view-goto-page lineno))) - (t (find-file fname))) - (unless (or (eq where 'grep) (eq where 'pdf)) - (helm-goto-line lineno)) - (when mark - (set-marker (mark-marker) (point)) - (push-mark (point) 'nomsg)) - ;; Save history - (unless (or helm-in-persistent-action - (eq major-mode 'helm-grep-mode) - (string= helm-pattern "")) - (setq helm-grep-history - (cons helm-pattern - (delete helm-pattern helm-grep-history))) - (when (> (length helm-grep-history) - helm-grep-max-length-history) - (setq helm-grep-history - (delete (car (last helm-grep-history)) - helm-grep-history)))))) - -(defun helm-grep-persistent-action (candidate) - "Persistent action for `helm-do-grep-1'. -With a prefix arg record CANDIDATE in `mark-ring'." - (if current-prefix-arg - (helm-grep-action candidate nil 'mark) - (helm-grep-action candidate)) - (helm-highlight-current-line)) - -(defun helm-grep-other-window (candidate) - "Jump to result in other window from helm grep." - (helm-grep-action candidate 'other-window)) - -(defun helm-grep-other-frame (candidate) - "Jump to result in other frame from helm grep." - (helm-grep-action candidate 'other-frame)) - -(defun helm-grep-jump-elscreen (candidate) - "Jump to result in elscreen from helm grep." - (helm-grep-action candidate 'elscreen)) - -(defun helm-goto-next-or-prec-file (n) - "Go to next or precedent candidate file in helm grep/etags buffers. -If N is positive go forward otherwise go backward." - (let* ((allow-mode (or (eq major-mode 'helm-grep-mode) - (eq major-mode 'helm-moccur-mode))) - (sel (if allow-mode - (buffer-substring (point-at-bol) (point-at-eol)) - (helm-get-selection nil t))) - (current-line-list (helm-grep-split-line sel)) - (current-fname (nth 0 current-line-list)) - (bob-or-eof (if (eq n 1) 'eobp 'bobp)) - (mark-maybe (lambda () - (if allow-mode - (ignore) - (helm-mark-current-line))))) - (catch 'break - (while (not (funcall bob-or-eof)) - (forward-line n) ; Go forward or backward depending of n value. - ;; Exit when current-fname is not matched or in `helm-grep-mode' - ;; the line is not a grep line i.e 'fname:num:tag'. - (setq sel (buffer-substring (point-at-bol) (point-at-eol))) - (unless (or (string= current-fname - (car (helm-grep-split-line sel))) - (and (eq major-mode 'helm-grep-mode) - (not (get-text-property (point-at-bol) 'help-echo)))) - (funcall mark-maybe) - (throw 'break nil)))) - (cond ((and (> n 0) (eobp)) - (re-search-backward ".") - (forward-line 0) - (funcall mark-maybe)) - ((and (< n 0) (bobp)) - (helm-aif (next-single-property-change (point-at-bol) 'help-echo) - (goto-char it) - (forward-line 1)) - (funcall mark-maybe))) - (helm-log-run-hook 'helm-move-selection-after-hook))) - -;;;###autoload -(defun helm-goto-precedent-file () - "Go to precedent file in helm grep/etags buffers." - (interactive) - (with-helm-alive-p - (with-helm-window - (helm-goto-next-or-prec-file -1)))) -(put 'helm-goto-precedent-file 'helm-only t) - -;;;###autoload -(defun helm-goto-next-file () - "Go to precedent file in helm grep/etags buffers." - (interactive) - (with-helm-window - (helm-goto-next-or-prec-file 1))) - -(defun helm-grep-run-default-action () - "Run grep default action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-action))) -(put 'helm-grep-run-default-action 'helm-only t) - -(defun helm-grep-run-other-window-action () - "Run grep goto other window action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-other-window))) -(put 'helm-grep-run-other-window-action 'helm-only t) - -(defun helm-grep-run-other-frame-action () - "Run grep goto other frame action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-other-frame))) -(put 'helm-grep-run-other-frame-action 'helm-only t) - -(defun helm-grep-run-save-buffer () - "Run grep save results action from `helm-do-grep-1'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-grep-save-results))) -(put 'helm-grep-run-save-buffer 'helm-only t) - - -;;; helm-grep-mode -;; -;; -(defun helm-grep-save-results (candidate) - (helm-grep-action candidate 'grep)) - -(defun helm-grep-save-results-1 () - "Save helm grep result in a `helm-grep-mode' buffer." - (let ((buf "*hgrep*") - new-buf) - (when (get-buffer buf) - (if helm-grep-save-buffer-name-no-confirm - (setq new-buf (format "*hgrep|%s|-%s" helm-pattern - (format-time-string "%H-%M-%S*"))) - (setq new-buf (helm-read-string "GrepBufferName: " buf)) - (cl-loop for b in (helm-buffer-list) - when (and (string= new-buf b) - (not (y-or-n-p - (format "Buffer `%s' already exists overwrite? " - new-buf)))) - do (setq new-buf (helm-read-string "GrepBufferName: " "*hgrep ")))) - (setq buf new-buf)) - (with-current-buffer (get-buffer-create buf) - (setq buffer-read-only t) - (let ((inhibit-read-only t)) - (erase-buffer) - (insert "-*- mode: helm-grep -*-\n\n" - (format "Grep Results for `%s':\n\n" helm-pattern)) - (save-excursion - (insert (with-current-buffer helm-buffer - (goto-char (point-min)) (forward-line 1) - (buffer-substring (point) (point-max)))))) - (helm-grep-mode) (pop-to-buffer buf)) - (message "Helm Grep Results saved in `%s' buffer" buf))) - -(define-derived-mode helm-grep-mode - special-mode "helm-grep" - "Major mode to provide actions in helm grep saved buffer. - -Special commands: -\\{helm-grep-mode-map}" - (set (make-local-variable 'helm-grep-last-cmd-line) - (with-helm-buffer helm-grep-last-cmd-line)) - (set (make-local-variable 'revert-buffer-function) - #'helm-grep-mode--revert-buffer-function)) - -(defun helm-grep-mode--revert-buffer-function (&optional _ignore-auto _noconfirm) - (goto-char (point-min)) - (re-search-forward "^Grep Results for" nil t) - (forward-line 0) - (when (re-search-forward "^$" nil t) - (forward-line 1)) - (let ((inhibit-read-only t)) - (delete-region (point) (point-max))) - (message "Reverting buffer...") - (set-process-sentinel - (start-file-process-shell-command - "hgrep" (generate-new-buffer "*hgrep revert*") helm-grep-last-cmd-line) - (lambda (process event) - (when (string= event "finished\n") - (with-current-buffer (current-buffer) - (let ((inhibit-read-only t)) - (save-excursion - (cl-loop for line in (with-current-buffer (process-buffer process) - (prog1 (split-string (buffer-string) "\n") - (kill-buffer))) - when (string-match helm-grep-split-line-regexp line) - do (insert (propertize - (car (helm-grep-filter-one-by-one line)) - ;; needed for wgrep. - 'helm-realvalue line) - "\n")))) - (message "Reverting buffer done")))))) - -(defun helm-gm-next-file () - (interactive) - (helm-goto-next-or-prec-file 1)) - -(defun helm-gm-precedent-file () - (interactive) - (helm-goto-next-or-prec-file -1)) - -(defun helm-grep-mode-jump () - (interactive) - (helm-grep-action - (buffer-substring (point-at-bol) (point-at-eol)))) - -(defun helm-grep-mode-jump-other-window-1 (arg) - (let ((candidate (buffer-substring (point-at-bol) (point-at-eol)))) - (condition-case nil - (progn - (save-selected-window - (helm-grep-action candidate 'other-window) - (recenter)) - (forward-line arg)) - (error nil)))) - -(defun helm-grep-mode-jump-other-window-forward () - (interactive) - (helm-grep-mode-jump-other-window-1 1)) - -(defun helm-grep-mode-jump-other-window-backward () - (interactive) - (helm-grep-mode-jump-other-window-1 -1)) - -(defun helm-grep-mode-jump-other-window () - (interactive) - (let ((candidate (buffer-substring (point-at-bol) (point-at-eol)))) - (condition-case nil - (helm-grep-action candidate 'other-window) - (error nil)))) - - -;;; ack-grep types -;; -;; -(defun helm-grep-hack-types () - "Return a list of known ack-grep types." - (with-temp-buffer - ;; "--help-types" works with both 1.96 and 2.1+, while - ;; "--help types" works only with 1.96 Issue #422. - ;; `helm-grep-command' should return the ack executable - ;; when this function is used in the right context - ;; i.e After checking is we are using ack-grep with - ;; `helm-grep-use-ack-p'. - (call-process (helm-grep-command t) nil t nil "--help-types") - (goto-char (point-min)) - (cl-loop while (re-search-forward - "^ *--\\(\\[no\\]\\)\\([^. ]+\\) *\\(.*\\)" nil t) - collect (cons (concat (match-string 2) - " [" (match-string 3) "]") - (match-string 2)) - collect (cons (concat "no" (match-string 2) - " [" (match-string 3) "]") - (concat "no" (match-string 2)))))) - -(defun helm-grep-ack-types-transformer (candidates _source) - (cl-loop for i in candidates - if (stringp i) - collect (rassoc i helm-grep-ack-types-cache) - else - collect i)) - -(defvar helm-grep-ack-types-cache nil) -(defun helm-grep-read-ack-type () - "Select types for the '--type' argument of ack-grep." - (require 'helm-mode) - (require 'helm-adaptive) - (setq helm-grep-ack-types-cache (helm-grep-hack-types)) - (let ((types (helm-comp-read - "Types: " helm-grep-ack-types-cache - :name "*Ack-grep types*" - :marked-candidates t - :must-match t - :fc-transformer '(helm-adaptive-sort - helm-grep-ack-types-transformer) - :buffer "*helm ack-types*"))) - (mapconcat (lambda (type) (concat "--type=" type)) types " "))) - - -;;; grep extensions -;; -;; -(defun helm-grep-guess-extensions (files) - "Try to guess file extensions in FILES list when using grep recurse. -These extensions will be added to command line with --include arg of grep." - (cl-loop with ext-list = (list helm-grep-preferred-ext "*") - with lst = (if (file-directory-p (car files)) - (directory-files - (car files) nil - directory-files-no-dot-files-regexp) - files) - for i in lst - for ext = (file-name-extension i 'dot) - for glob = (and ext (not (string= ext "")) - (concat "*" ext)) - unless (or (not glob) - (and glob-list (member glob glob-list)) - (and glob-list (member glob ext-list)) - (and glob-list (member glob helm-grep-ignored-files))) - collect glob into glob-list - finally return (delq nil (append ext-list glob-list)))) - -(defun helm-grep-get-file-extensions (files) - "Try to return a list of file extensions to pass to '--include' arg of grep." - (let* ((all-exts (helm-grep-guess-extensions - (mapcar 'expand-file-name files))) - (extensions (helm-comp-read "Search Only in: " all-exts - :marked-candidates t - :fc-transformer 'helm-adaptive-sort - :buffer "*helm grep exts*" - :name "*helm grep extensions*"))) - (when (listp extensions) ; Otherwise it is empty string returned by C-RET. - ;; If extensions is a list of one string containing spaces, - ;; assume user entered more than one glob separated by space(s) and - ;; split this string to pass it later to mapconcat. - ;; e.g '("*.el *.py") - (cl-loop for i in extensions - append (split-string-and-unquote i " "))))) - - -;;; Set up source -;; -;; -(defvar helm-source-grep nil) -(defun helm-do-grep-1 (targets &optional recurse zgrep exts default-input input) - "Launch grep on a list of TARGETS files. -When RECURSE is given use -r option of grep and prompt user -to set the --include args of grep. -You can give more than one arg separated by space at prompt. -e.g *.el *.py *.tex. -From lisp use the EXTS argument as a list of extensions as above. -If you are using ack-grep, you will be prompted for --type -instead and EXTS will be ignored. -If prompt is empty `helm-grep-ignored-files' are added to --exclude. -Argument DEFAULT-INPUT is use as `default' arg of `helm' and INPUT -is used as `input' arg of `helm', See `helm' docstring. -ZGREP when non--nil use zgrep instead, without prompting for a choice -in recurse, and ignoring EXTS, search being made on -`helm-zgrep-file-extension-regexp'." - (when (and (helm-grep-use-ack-p) - helm-ff-default-directory - (file-remote-p helm-ff-default-directory)) - (error "Error: Remote operation not supported with ack-grep.")) - (let* (non-essential - (exts (and recurse - ;; [FIXME] I could handle this from helm-walk-directory. - (not zgrep) ; zgrep doesn't handle -r opt. - (not (helm-grep-use-ack-p :where 'recursive)) - (or exts (helm-grep-get-file-extensions targets)))) - (include-files (and exts - (mapconcat (lambda (x) - (concat "--include=" - (shell-quote-argument x))) - (if (> (length exts) 1) - (remove "*" exts) - exts) " "))) - (types (and (not include-files) - (not zgrep) - recurse - (helm-grep-use-ack-p :where 'recursive) - ;; When %e format spec is not specified - ;; ignore types and do not prompt for choice. - (string-match "%e" helm-grep-default-command) - (helm-grep-read-ack-type))) - (follow (and helm-follow-mode-persistent - (assoc-default 'follow helm-source-grep)))) - ;; When called as action from an other source e.g *-find-files - ;; we have to kill action buffer. - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - ;; If `helm-find-files' haven't already started, - ;; give a default value to `helm-ff-default-directory'. - (unless helm-ff-default-directory - (setq helm-ff-default-directory default-directory)) - ;; We need to store these vars locally - ;; to pass infos later to `helm-resume'. - (helm-set-local-variable 'helm-zgrep-recurse-flag (and recurse zgrep) - 'helm-grep-last-targets targets - 'helm-grep-include-files (or include-files types) - 'helm-grep-in-recurse recurse - 'helm-grep-use-zgrep zgrep - 'helm-grep-default-command - (cond (zgrep helm-default-zgrep-command) - (recurse helm-grep-default-recurse-command) - ;; When resuming the local value of - ;; `helm-grep-default-command' is used, only git-grep - ;; should need this. - (t helm-grep-default-command))) - ;; Setup the source. - (setq helm-source-grep - (helm-build-async-source - (if zgrep "Zgrep" (capitalize (if recurse - (helm-grep-command t) - (helm-grep-command)))) - :candidates-process 'helm-grep-collect-candidates - :filter-one-by-one 'helm-grep-filter-one-by-one - :keymap helm-grep-map - :nohighlight t - :nomark t - :candidate-number-limit 9999 - :help-message 'helm-grep-help-message - :history 'helm-grep-history - :action (helm-make-actions - "Find File" 'helm-grep-action - "Find file other frame" 'helm-grep-other-frame - (lambda () (and (locate-library "elscreen") - "Find file in Elscreen")) - 'helm-grep-jump-elscreen - "Save results in grep buffer" 'helm-grep-save-results - "Find file other window" 'helm-grep-other-window) - :persistent-action 'helm-grep-persistent-action - :persistent-help "Jump to line (`C-u' Record in mark ring)" - :requires-pattern 2 - :follow follow)) - (helm - :sources 'helm-source-grep - :buffer (format "*helm %s*" (if zgrep "zgrep" (helm-grep-command recurse))) - :default default-input - :input input - :keymap helm-grep-map - :history 'helm-grep-history - :truncate-lines helm-grep-truncate-lines))) - - - -;;; zgrep -;; -;; -(defun helm-ff-zgrep-1 (flist recursive) - (unwind-protect - (let* ((def-dir (or helm-ff-default-directory - default-directory)) - (only (if recursive - (or (gethash def-dir helm-rzgrep-cache) - (puthash - def-dir - (helm-walk-directory - def-dir - :directories nil - :path 'full - :match helm-zgrep-file-extension-regexp) - helm-rzgrep-cache)) - flist))) - (helm-do-grep-1 only recursive 'zgrep)) - (setq helm-zgrep-recurse-flag nil))) - - -;;; transformers -;; -;; -(defun helm-grep-split-line (line) - "Split a grep output line." - ;; The output of grep may send a truncated line in this chunk, - ;; so don't split until grep line is valid, that is - ;; once the second part of the line comes with next chunk - ;; send by process. - (when (string-match helm-grep-split-line-regexp line) - ;; Don't use split-string because buffer/file name or string - ;; may contain a ":". - (cl-loop for n from 1 to 3 collect (match-string n line)))) - -(defun helm-grep--filter-candidate-1 (candidate &optional dir) - (let* ((root (or dir (and helm-grep-default-directory-fn - (funcall helm-grep-default-directory-fn)))) - (ansi-p (string-match-p helm--ansi-color-regexp candidate)) - (line (if ansi-p (helm--ansi-color-apply candidate) candidate)) - (split (helm-grep-split-line line)) - (fname (if (and root split) - (expand-file-name (car split) root) - (car-safe split))) - (lineno (nth 1 split)) - (str (nth 2 split)) - (display-fname (cl-ecase helm-grep-file-path-style - (basename (and fname (file-name-nondirectory fname))) - (absolute fname) - (relative (and fname root - (file-relative-name fname root)))))) - (if (and display-fname lineno str) - (cons (concat (propertize display-fname - 'face 'helm-grep-file - 'help-echo fname) - ":" - (propertize lineno 'face 'helm-grep-lineno) - ":" - (if ansi-p str (helm-grep-highlight-match str))) - line) - ""))) - -(defun helm-grep-filter-one-by-one (candidate) - "`filter-one-by-one' transformer function for `helm-do-grep-1'." - (let ((helm-grep-default-directory-fn - (or helm-grep-default-directory-fn - (lambda () (or helm-ff-default-directory - (helm-default-directory) - default-directory))))) - (if (consp candidate) - ;; Already computed do nothing (default as input). - candidate - (and (stringp candidate) - (helm-grep--filter-candidate-1 candidate))))) - -(defun helm-grep-highlight-match (str &optional multi-match) - "Highlight in string STR all occurences matching `helm-pattern'." - (let (beg end) - (condition-case-unless-debug nil - (with-temp-buffer - (insert (propertize str 'read-only nil)) ; Fix (#1176) - (goto-char (point-min)) - (cl-loop for reg in - (if multi-match - ;; (m)occur. - (cl-loop for r in (helm-mm-split-pattern - helm-pattern) - unless (string-match "\\`!" r) - collect - (helm-aif (and helm-migemo-mode - (assoc r helm-mm--previous-migemo-info)) - (cdr it) r)) - ;; async sources (grep, gid etc...) - (list helm-input)) - do - (while (and (re-search-forward reg nil t) - (> (- (setq end (match-end 0)) - (setq beg (match-beginning 0))) 0)) - (add-text-properties beg end '(face helm-grep-match))) - do (goto-char (point-min))) - (buffer-string)) - (error nil)))) - - -;;; Grep from buffer list -;; -;; -(defun helm-grep-buffers-1 (candidate &optional zgrep) - "Run grep on all file--buffers or CANDIDATE if it is a file--buffer. -If one of selected buffers is not a file--buffer, -it is ignored and grep will run on all others file--buffers. -If only one candidate is selected and it is not a file--buffer, -switch to this buffer and run `helm-occur'. -If a prefix arg is given run grep on all buffers ignoring non--file-buffers." - (let* ((prefarg (or current-prefix-arg helm-current-prefix-arg)) - (helm-ff-default-directory - (if (and helm-ff-default-directory - (file-remote-p helm-ff-default-directory)) - default-directory - helm-ff-default-directory)) - (cands (if prefarg - (buffer-list) - (helm-marked-candidates))) - (win-conf (current-window-configuration)) - ;; Non--fname and remote buffers are ignored. - (bufs (cl-loop for buf in cands - for fname = (buffer-file-name (get-buffer buf)) - when (and fname (not (file-remote-p fname))) - collect (expand-file-name fname)))) - (if bufs - (if zgrep - (helm-do-grep-1 bufs nil 'zgrep) - (helm-do-grep-1 bufs)) - ;; bufs is empty, thats mean we have only CANDIDATE - ;; and it is not a buffer-filename, fallback to occur. - (switch-to-buffer candidate) - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (helm-occur) - (when (eq helm-exit-status 1) - (set-window-configuration win-conf))))) - -(defun helm-grep-buffers (candidate) - "Action to grep buffers." - (helm-grep-buffers-1 candidate)) - -(defun helm-zgrep-buffers (candidate) - "Action to zgrep buffers." - (helm-grep-buffers-1 candidate 'zgrep)) - - -;;; Helm interface for pdfgrep -;; pdfgrep program -;; and a pdf-reader (e.g xpdf) are needed. -;; -(defvar helm-pdfgrep-default-function 'helm-pdfgrep-init) -(defun helm-pdfgrep-init (only-files) - "Start an asynchronous pdfgrep process in ONLY-FILES list." - (let* ((default-directory (or helm-ff-default-directory - default-directory)) - (fnargs (helm-grep-prepare-candidates - (if (file-remote-p default-directory) - (mapcar (lambda (x) - (file-remote-p x 'localname)) - only-files) - only-files) - default-directory)) - (cmd-line (format helm-pdfgrep-default-command - helm-pattern - fnargs)) - process-connection-type) - ;; Start pdf grep process. - (helm-log "Starting Pdf Grep process in directory `%s'" default-directory) - (helm-log "Command line used was:\n\n%s" - (concat ">>> " (propertize cmd-line 'face 'helm-grep-cmd-line) "\n\n")) - (prog1 - (start-file-process-shell-command - "pdfgrep" helm-buffer cmd-line) - (message nil) - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (_process event) - (if (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Pdfgrep Process Finish - %s result(s)] " - (max (1- (count-lines - (point-min) (point-max))) 0)) - 'face 'helm-grep-finish)))) - (force-mode-line-update)) - (helm-log "Error: Pdf grep %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defun helm-do-pdfgrep-1 (only) - "Launch pdfgrep with a list of ONLY files." - (unless (executable-find "pdfgrep") - (error "Error: No such program `pdfgrep'.")) - (let* (helm-grep-in-recurse) ; recursion is never used in pdfgrep. - ;; When called as action from an other source e.g *-find-files - ;; we have to kill action buffer. - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (setq helm-pdfgrep-targets only) - (helm - :sources (helm-build-async-source "PdfGrep" - :init (lambda () - ;; If `helm-find-files' haven't already started, - ;; give a default value to `helm-ff-default-directory'. - (setq helm-ff-default-directory (or helm-ff-default-directory - default-directory))) - :candidates-process (lambda () - (funcall helm-pdfgrep-default-function helm-pdfgrep-targets)) - :nohighlight t - :nomark t - :filter-one-by-one #'helm-grep-filter-one-by-one - :candidate-number-limit 9999 - :history 'helm-grep-history - :keymap helm-pdfgrep-map - :help-message 'helm-pdfgrep-help-message - :action #'helm-pdfgrep-action - :persistent-help "Jump to PDF Page" - :requires-pattern 2) - :buffer "*helm pdfgrep*" - :history 'helm-grep-history))) - -(defun helm-pdfgrep-action (candidate) - (helm-grep-action candidate 'pdf)) - -(defun helm-pdfgrep-action-1 (_split pageno fname) - (save-selected-window - (start-file-process-shell-command - "pdf-reader" nil - (format-spec helm-pdfgrep-default-read-command - (list (cons ?f fname) (cons ?p pageno)))))) - -;;; AG - AT -;; -;; https://github.com/ggreer/the_silver_searcher -;; https://github.com/monochromegane/the_platinum_searcher - -(defcustom helm-grep-ag-command - "ag --line-numbers -S --hidden --color --nogroup %s %s" - "The default command for AG or PT. -Takes two format specs, the first for pattern and the second for directory. - -You must use an output format that fit with helm grep, that is: - - \"filename:line-number:string\" - -The option \"--nogroup\" allow this. -The option \"--line-numbers\" is also mandatory except with PT (not supported). - -You can use safely \"--color\" (default)." - :group 'helm-grep - :type 'string) - -(defun helm-grep--ag-command () - (car (split-string helm-grep-ag-command))) - -(defun helm-grep-ag-init (directory) - (let ((cmd-line (format helm-grep-ag-command - (shell-quote-argument helm-pattern) - (shell-quote-argument directory)))) - (set (make-local-variable 'helm-grep-last-cmd-line) cmd-line) - (prog1 - (start-process-shell-command - "ag" helm-buffer cmd-line) - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (_process event) - (when (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format - "[%s process finished - (%s results)] " - (upcase (helm-grep--ag-command)) - (helm-get-candidate-number)) - 'face 'helm-grep-finish)))) - (force-mode-line-update)))))))) - -(defvar helm-source-grep-ag nil) -(defun helm-grep-ag-1 (directory) - (setq helm-source-grep-ag - (helm-build-async-source (upcase (helm-grep--ag-command)) - :header-name (lambda (name) - (format "%s [%s]" - name (abbreviate-file-name directory))) - :candidates-process - (lambda () (helm-grep-ag-init directory)) - :nohighlight t - :keymap helm-grep-map - :help-message 'helm-grep-help-message - :filter-one-by-one 'helm-grep-filter-one-by-one - :persistent-action 'helm-grep-persistent-action - :candidate-number-limit 99999 - :requires-pattern 2 - :nomark t - :action (helm-make-actions - "Find File" 'helm-grep-action - "Find file other frame" 'helm-grep-other-frame - (lambda () (and (locate-library "elscreen") - "Find file in Elscreen")) - 'helm-grep-jump-elscreen - "Save results in grep buffer" 'helm-grep-save-results - "Find file other window" 'helm-grep-other-window))) - (helm :sources 'helm-source-grep-ag - :keymap helm-grep-map - :truncate-lines helm-grep-truncate-lines - :buffer (format "*helm %s*" (helm-grep--ag-command)))) - -;;; Git grep -;; -;; -(defcustom helm-grep-git-grep-command - "git grep -n%cH --color=always --exclude-standard --no-index --full-name -e %p -- %f" - "The git grep default command line. -The option \"--color=always\" can be used safely. -The color of matched items can be customized in your .gitconfig -See `helm-grep-default-command' for more infos. - -The \"--exclude-standard\" and \"--no-index\" switches allow -skipping unwanted files specified in ~/.gitignore_global -and searching files not already staged. -You have also to enable this in global \".gitconfig\" with - \"git config --global core.excludesfile ~/.gitignore_global\"." - :group 'helm-grep - :type 'string) - -(defun helm-grep-git-1 (directory &optional all) - (require 'vc) - (let* ((helm-grep-default-command helm-grep-git-grep-command) - helm-grep-default-recurse-command - ;; Expand filename of each candidate with the git root dir. - ;; The filename will be in the help-echo prop. - (helm-grep-default-directory-fn (lambda () - (vc-find-root directory ".git"))) - (helm-ff-default-directory (funcall helm-grep-default-directory-fn))) - (cl-assert helm-ff-default-directory nil "Not inside a Git repository") - (helm-do-grep-1 (if all '("") `(,(expand-file-name directory)))))) - - -;;;###autoload -(defun helm-do-grep-ag () - "Preconfigured helm for grepping with AG in `default-directory'." - (interactive) - (require 'helm-files) - (helm-grep-ag-1 default-directory)) - -;;;###autoload -(defun helm-grep-do-git-grep (arg) - "Preconfigured helm for git-grepping `default-directory'. -With a prefix arg ARG git-grep the whole repository." - (interactive "P") - (require 'helm-files) - (helm-grep-git-1 default-directory arg)) - - -(provide 'helm-grep) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-grep.el ends here diff --git a/elpa/helm-20160217.958/helm-help.el b/elpa/helm-20160217.958/helm-help.el deleted file mode 100644 index edecf3a6..00000000 --- a/elpa/helm-20160217.958/helm-help.el +++ /dev/null @@ -1,1433 +0,0 @@ -;;; helm-help.el --- Help messages for Helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'helm) - -(defvar helm-org-headings--nofilename) -(declare-function helm-source-org-headings-for-files "helm-org.el") - - -(defgroup helm-help nil - "Embedded help for `helm'." - :group 'helm) - -(defface helm-helper - '((t :inherit helm-header)) - "Face for helm help string in minibuffer." - :group 'helm-help) - -(defcustom helm-documentation-file "~/.emacs.d/helm-doc.org" - "The file where you want to save helm documentation." - :group 'helm-help - :type 'string) - -(defvar helm-help--string-list '(helm-help-message - helm-buffer-help-message - helm-ff-help-message - helm-read-file-name-help-message - helm-generic-file-help-message - helm-grep-help-message - helm-pdfgrep-help-message - helm-etags-help-message - helm-ucs-help-message - helm-bookmark-help-message - helm-esh-help-message - helm-buffers-ido-virtual-help-message - helm-moccur-help-message - helm-top-help-message - helm-apt-help-message - helm-el-package-help-message - helm-M-x-help-message - helm-imenu-help-message - helm-colors-help-message - helm-semantic-help-message - helm-kmacro-help-message)) - - -;;;###autoload -(defun helm-documentation (arg) - "Preconfigured helm for helm documentation. -With a prefix arg refresh the documentation. - -Find here the documentation of all sources actually documented." - (interactive "P") - (require 'helm-org) - (when arg (delete-file helm-documentation-file) - (helm-aif (get-file-buffer helm-documentation-file) - (kill-buffer it))) - (unless (file-exists-p helm-documentation-file) - (with-temp-file helm-documentation-file - (erase-buffer) - (cl-loop for elm in helm-help--string-list - for str = (symbol-value elm) - do (insert (substitute-command-keys - (if (functionp str) (funcall str) str)) - "\n\n")))) - (let ((helm-org-headings--nofilename t)) - (helm :sources (helm-source-org-headings-for-files - (list helm-documentation-file)) - :candidate-number-limit 99999 - :buffer "*helm documentation*"))) - -;;; Local help messages. - -;;; `helm-buffer-list' help -;; -;; -(defvar helm-buffer-help-message - "* Helm Buffer - -** Tips - -*** Completion - -**** Major-mode - -You can enter a partial name of major-mode (e.g. lisp, sh) to narrow down buffers. -To specify the major-mode, prefix it with \"*\" e.g. \"*lisp\". -If you want to match all buffers but the ones with a specific major-mode (negation), -prefix the major-mode with \"!\" e.g. \"*!lisp\". -If you want to specify more than one major-mode, separate them with \",\", -e.g. \"*!lisp,!sh,!fun\" will list all buffers but the ones in lisp-mode, sh-mode and -fundamental-mode. - -Enter then a space and a pattern to narrow down to buffers matching this pattern. - -**** Search inside buffers - -If you enter a space and a pattern prefixed by \"@\" helm will search for text matching -this pattern INSIDE the buffer (i.e not in the name of buffer). -NOTE that if you enter your pattern prefixed with \"@\" but escaped, helm will search a buffer -matching \"@pattern\" but will not search inside. - -**** Search by directory name - -If you prefix the beginning of pattern with \"/\" the match will occur on directory name -of buffer, it is interesting to narrow down to one directory for example, subsequent string -entered after a space will match on buffer-name only. -Note that negation is not supported for matching on buffer-file-name. -You can specify more than one directory starting from helm v1.6.8 - -**** Fuzzy matching - -Note that if `helm-buffers-fuzzy-matching' is non--nil you will have -fuzzy matching on buffer names (not on directory name matching and major-mode though). -A pattern starting with \"^\" will disable fuzzy matching and will match by exact regexp. - -**** Examples - -if I enter in pattern prompt: - - \"*lisp ^helm @moc\" - -helm will narrow down the list by selecting only buffers that are in lisp mode, start by helm -and match \"moc\" in their contents. - -if I enter in pattern prompt: - - \"*lisp ^helm moc\" - -Notice there is no \"@\" this time -helm will look for lisp mode buffers starting by \"helm\" and have \"moc\" in their name. - -if I enter in pattern prompt: - - \"*!lisp !helm\" - -helm will narrow down to buffers that are not in \"lisp\" mode and that do not match \"helm\" - -if I enter in pattern prompt: - - /helm/ w3 - -helm will narrow down to buffers that are in any \"helm\" subdirectory and matching w3. - -*** Creating buffers - -When creating a new buffer use \\[universal-argument] to choose a mode for your buffer in a list. -This list is customizable, see `helm-buffers-favorite-modes'. - -*** Killing buffers - -You have a command to kill buffer(s) and quit emacs and a command to kill buffers one by one -\(no marked\) without quitting helm. - -You can run this persistent kill buffer command either with the regular -`helm-execute-persistent-action' called with a prefix arg (C-u C-j) or with its specific command -`helm-buffer-run-kill-persistent' see binding below. - -*** Meaning of colors and prefixes for buffers - -Remote buffers are prefixed with '@'. -Red => Buffer have its file modified on disk by an external process. -Indianred2 => Buffer exists but its file have been deleted. -Orange => Buffer is modified and its file not saved to disk. -Italic => A non--file buffer. - -** Commands -\\ -\\[helm-buffer-run-zgrep]\t\tGrep Buffer(s) works as zgrep too (C-u grep all buffers but non--file buffers). -\\[helm-buffers-run-multi-occur]\t\tMulti Occur buffer or marked buffers. (C-u toggle force searching current-buffer). -\\[helm-buffer-switch-other-window]\t\tSwitch other window. -\\[helm-buffer-switch-other-frame]\t\tSwitch other frame. -\\[helm-buffer-run-query-replace-regexp]\t\tQuery replace regexp in marked buffers. -\\[helm-buffer-run-query-replace]\t\tQuery replace in marked buffers. -\\[helm-buffer-run-ediff]\t\tEdiff current buffer with candidate. If two marked buffers ediff those buffers. -\\[helm-buffer-run-ediff-merge]\t\tEdiff merge current buffer with candidate. If two marked buffers ediff merge those buffers. -\\[helm-buffer-diff-persistent]\t\tToggle Diff buffer with saved file without quitting. -\\[helm-buffer-revert-persistent]\t\tRevert buffer without quitting. -\\[helm-buffer-save-persistent]\t\tSave buffer without quitting. -\\[helm-buffer-run-kill-buffers]\t\tDelete marked buffers and quit. -\\[helm-buffer-run-kill-persistent]\t\tDelete buffer without quitting helm. -\\[helm-toggle-all-marks]\t\tToggle all marks. -\\[helm-mark-all]\t\tMark all. -\\[helm-toggle-buffers-details]\t\tToggle details. -\\[helm-buffers-toggle-show-hidden-buffers]\t\tShow hidden buffers. -\\[helm-buffers-mark-similar-buffers]\t\tMark all buffers with same type (color) than current.") - -;;; Find files help (`helm-find-files') -;; -;; -(defvar helm-ff-help-message - "* Helm Find Files - -** Tips - -*** Navigation summary - -For a better experience you can enable auto completion by setting -`helm-ff-auto-update-initial-value' to non-nil in your init file. -It is not enabled by default to not confuse new users. - -**** Use `C-j' (persistent action) on a directory to go down one level - -On a symlinked directory a prefix arg will allow expanding to its true name. - -**** Use `C-l' on a directory to go up one level - -**** Use `C-r' to walk back the resulting tree of all the `C-l' you did - -Note: The tree is reinitialized each time you enter a new tree with `C-j' -or by entering some pattern in prompt. - -*** Find file at point - -Helm is using `ffap' partially or completely to find file at point -depending on value of `helm-ff-guess-ffap-filenames'. -You can use full `ffap' by setting this to non-nil (annoying). -Default value is nil which make `ffap' working partially. - -**** Find file at number line - -With something like this at point: - - ~/elisp/helm/helm.el:1234 - -Helm will find this file at line number 1234. - -**** Find url at point - -When an url is found at point, helm expand to that url only. -Pressing RET jump to that url using `browse-url-browser-function'. - -**** Find mail at point - -When a mail address is found at point helm expand to this email address -prefixed by \"mailto:\". Pressing RET open a message buffer with this mail -address. - -*** Quick pattern expansion - -**** Enter `~/' at end of pattern to quickly reach home directory - -**** Enter `/' at end of pattern to quickly reach root of your file system - -**** Enter `./' at end of pattern to quickly reach `default-directory' (initial start of session) - -If you are already in `default-directory' this will move cursor on top. - -**** Enter `../' at end of pattern will reach upper directory, moving cursor on top - -NOTE: This is different to using `C-l' in that `C-l' don't move cursor on top but stay on previous -subdir name. - -**** Enter any environment var (e.g. `$HOME') at end of pattern, it will be expanded - -**** You can yank any valid filename after pattern, it will be expanded - -*** Helm find files is fuzzy matching (start on third char entered) - -e.g. \"fob\" or \"fbr\" will complete \"foobar\" -but \"fb\" will wait for a third char for completing. - -*** Use `C-u C-j' to watch an image or `C-' - -*** `C-j' on a filename will expand in helm-buffer to this filename - -Second hit on `C-j' will display buffer filename. -Third hit on `C-j' will kill buffer filename. -NOTE: `C-u C-j' will display buffer directly. - -*** To browse images directories turn on `helm-follow-mode' and navigate with arrow keys - -You can also use `helm-follow-action-forward' and `helm-follow-action-backward' -\(`C-'). - -*** You can turn off/on (toggle) autoupdate completion at any moment with `C-DEL' - -It is useful when auto completion is enabled and when trying to create a new file -or directory you want to prevent helm trying to complete what you are writing. -NOTE: On a terminal C- may not work, use in this case C-c . - -*** You can create a new directory and a new file at the same time - -Just write the path in prompt and press `'. -e.g. You can create \"~/new/newnew/newnewnew/my_newfile.txt\". - -*** To create a new directory, add a \"/\" at end of new name and press - -*** To create a new file just write the filename not ending with \"/\" - -*** Recursive search from helm find files - -**** You can use helm browse project (see binding below) - -- With no prefix arg - If your current directory is under version control - with one of git or hg and you have installed helm-ls-git and/or helm-ls-hg - https://github.com/emacs-helm/helm-ls-git.git - https://github.com/emacs-helm/helm-ls-hg - you will see all your files under version control, otherwise - you will be back to helm-find-files. -- With one prefix arg - You will see all the files under this directory - and other subdirectories (recursion) and this list of files will be cached. -- With two prefix args - same but the cache will be refreshed. - -**** You can start a recursive search with Locate of Find (See commands below) - -With Locate you can use a local db with a prefix arg. If the localdb doesn't already -exists, you will be prompted for its creation, if it exists and you want to refresh it, -give two prefix args. - -*** Insert filename at point or complete filename at point - -On insertion (no completion, i.e nothing at point): - -- `C-c i' => insert absolute file name. -- `C-u C-c i' => insert abbreviate file name. -- `C-u C-u C-c i' => insert relative file name. - -On completion: - -- target starts by ~/ => insert abbreviate file name. -- target starts by / or [a-z]:/ => insert full path. -- otherwise => insert relative file name. - -*** Using wildcard to select multiple files - -Use of wilcard is supported to give a set of files to an action: - -e.g. You can copy all the files with \".el\" extension by using \"*.el\" -and then run your copy action. - -You can do the same but with \"**.el\" (note the two stars), -this will select recursively all \".el\" files under current directory. - -NOTE: When using an action that involve an external backend (e.g. grep), using \"**\" -is not advised (even if it works fine) because it will be slower to select all your files, -you have better time letting the backend doing it, it will be faster. -However, if you know you have not many files it is reasonable to use this, -also using not recursive wilcard (e.g. \"*.el\") is perfectly fine for this. - -This feature (\"**\") is activated by default with the option `helm-file-globstar'. -The directory selection with \"**foo/\" like bash shopt globstar option is not supported yet. - -*** Copying renaming asynchronously - -If you use async library (if you have installed helm from MELPA you do) you can enable -async for copying/renaming etc... your files by enabling `dired-async-mode'. - -Note that even when async is enabled, running a copy/rename action with a prefix arg -will execute action synchronously, it will follow also the first file of the marked files -in its destination directory. - -*** Bookmark your `helm-find-files' session - -You can bookmark your `helm-find-files' session with `C-x r m'. -You can retrieve later these bookmarks easily by using M-x helm-filtered-bookmarks -or from the current `helm-find-files' session just hitting `C-x r b'. - -*** Run Gid from `helm-find-files' - -You can navigate to a project containing an ID file created with the `mkid' -command from id-utils, and run the `gid' command which will use the symbol at point -in `helm-current-buffer' as default. - -** Commands -\\ -\\[helm-ff-run-locate]\t\tRun Locate (C-u to specify locate db, M-n insert basename of candidate) -\\[helm-ff-run-browse-project]\t\tBrowse project (`C-u' recurse, `C-u C-u' recurse and refresh db) -\\[helm-ff-run-find-sh-command]\t\tRun Find shell command from this directory. -\\[helm-ff-run-grep]\t\tRun Grep (C-u Recursive). -\\[helm-ff-run-pdfgrep]\t\tRun Pdfgrep on marked files. -\\[helm-ff-run-zgrep]\t\tRun zgrep (C-u Recursive). -\\[helm-ff-run-grep-ag]\t\tRun AG grep on current directory. -\\[helm-ff-run-git-grep]\t\tRun git-grep on current directory. -\\[helm-ff-run-gid]\t\tRun gid (id-utils). -\\[helm-ff-run-etags]\t\tRun Etags (C-u use thing-at-point `C-u C-u' reload cache) -\\[helm-ff-run-rename-file]\t\tRename File (C-u Follow). -\\[helm-ff-run-query-replace-on-marked]\t\tQuery replace on marked files. -\\[helm-ff-run-copy-file]\t\tCopy File (C-u Follow). -\\[helm-ff-run-byte-compile-file]\t\tByte Compile File (C-u Load). -\\[helm-ff-run-load-file]\t\tLoad File. -\\[helm-ff-run-symlink-file]\t\tSymlink File. -\\[helm-ff-run-hardlink-file]\t\tHardlink file. -\\[helm-ff-run-delete-file]\t\tDelete File. -\\[helm-ff-run-kill-buffer-persistent]\t\tKill buffer candidate without quitting. -\\[helm-ff-persistent-delete]\t\tDelete file without quitting. -\\[helm-ff-run-switch-to-eshell]\t\tSwitch to Eshell. -\\[helm-ff-run-eshell-command-on-file]\t\tEshell command on file (C-u Apply on marked files, otherwise treat them sequentially). -\\[helm-ff-run-ediff-file]\t\tEdiff file. -\\[helm-ff-run-ediff-merge-file]\t\tEdiff merge file. -\\[helm-ff-run-complete-fn-at-point]\t\tComplete file name at point. -\\[helm-ff-run-switch-other-window]\t\tSwitch other window. -\\[helm-ff-run-switch-other-frame]\t\tSwitch other frame. -\\[helm-ff-run-open-file-externally]\t\tOpen file with external program (C-u to choose). -\\[helm-ff-run-open-file-with-default-tool]\t\tOpen file externally with default tool. -\\[helm-ff-rotate-left-persistent]\t\tRotate Image Left. -\\[helm-ff-rotate-right-persistent]\t\tRotate Image Right. -\\[helm-find-files-up-one-level]\t\tGo down precedent directory. -\\[helm-ff-run-switch-to-history]\t\tSwitch to last visited directories history. -\\[helm-ff-file-name-history]\t\tSwitch to file name history. -\\[helm-ff-properties-persistent]\t\tShow file properties in a tooltip. -\\[helm-mark-all]\t\tMark all visibles candidates. -\\[helm-ff-run-toggle-auto-update]\t\tToggle auto expansion of directories. -\\[helm-unmark-all]\t\tUnmark all candidates, visibles and invisibles. -\\[helm-ff-run-gnus-attach-files]\t\tGnus attach files to message buffer. -\\[helm-ff-run-print-file]\t\tPrint file, (C-u to refresh printers list). -\\[helm-enlarge-window]\t\tEnlarge helm window. -\\[helm-narrow-window]\t\tNarrow helm window. -\\[helm-ff-run-toggle-basename]\t\tToggle basename/fullpath. -\\[helm-ff-run-find-file-as-root]\t\tFind file as root. -\\[helm-ff-run-find-alternate-file]\t\tFind alternate file. -\\[helm-ff-run-insert-org-link]\t\tInsert org link.") - -;;; Help for `helm-read-file-name' -;; -;; -(defvar helm-read-file-name-help-message - "* Helm read file name - -** Tips - -If you are here, you are probably using a vanilla command like `find-file' -helmized by `helm-mode', this is cool, but it is even better for your file -navigation to use `helm-find-files' which is fully featured. - -*** Navigation - -**** Enter `~/' at end of pattern to quickly reach home directory - -**** Enter `/' at end of pattern to quickly reach root of your file system - -**** Enter `./' at end of pattern to quickly reach `default-directory' (initial start of session) - -If you are in `default-directory' move cursor on top. - -**** Enter `../' at end of pattern will reach upper directory, moving cursor on top - -NOTE: This different to using `C-l' in that `C-l' don't move cursor on top but stay on previous -subdir name. - -**** You can complete with partial basename (start on third char entered) - -E.g. \"fob\" or \"fbr\" will complete \"foobar\" -but \"fb\" will wait for a third char for completing. - -*** Persistent actions - -By default `helm-read-file-name' use the persistent actions of `helm-find-files' - -**** Use `C-u C-j' to watch an image - -**** `C-j' on a filename will expand in helm-buffer to this filename - -Second hit on `C-j' will display buffer filename. -Third hit on `C-j' will kill buffer filename. -NOTE: `C-u C-j' will display buffer directly. - -**** To browse images directories turn on `helm-follow-mode' and navigate with arrow keys - -*** Delete characters backward - -When you want to delete backward characters, e.g. to create a new file or directory, -autoupdate may keep updating to an existent directory preventing you from doing so. -In this case, type C- and then . -This should not be needed when copying/renaming files because autoupdate is disabled -by default in that case. -NOTE: On a terminal C- may not work, use in this case C-c . - -*** Create new directory and files - -**** Create a new directory and a new file at the same time - -You can create a new directory and a new file at the same time, -just write the path in prompt and press . -E.g. You can create \"~/new/newnew/newnewnew/my_newfile.txt\". - -**** To create a new directory, add a \"/\" at end of new name and press - -**** To create a new file just write the filename not ending with \"/\" - -_NOTE_: File and directory creation work only in some commands (e.g `find-file') -and will not work in other commands where it is not intended to return a file or a directory -\(e.g `list-directory'). - -** Commands -\\ -\\[helm-find-files-up-one-level]\t\tGo down precedent directory. -\\[helm-ff-run-toggle-auto-update]\t\tToggle auto expansion of directories. -\\[helm-ff-run-toggle-basename]\t\tToggle basename. -\\[helm-ff-file-name-history]\t\tFile name history. -C/\\[helm-cr-empty-string]\t\tMaybe return empty string (unless `must-match'). -\\[helm-next-source]\t\tGoto next source. -\\[helm-previous-source]\t\tGoto previous source.") - -;;; Generic file help - Used by locate. -;; -;; -(defvar helm-generic-file-help-message - "* Helm Generic files - -** Tips - -*** Locate - -You can add after writing search pattern any of the locate command line options. -e.g. -b, -e, -n ...etc. -See Man locate for more infos. - -Some other sources (at the moment recentf and file in current directory sources) -support the -b flag for compatibility with locate when they are used with it. - -*** Browse project - -When your directory is not under version control, -don't forget to refresh your cache when files have been added/removed in your directory. - -*** Find command - -Recursively search files using \"find\" shell command. - -Candidates are all filenames that match all given globbing patterns. -This respects the options `helm-case-fold-search' and -`helm-findutils-search-full-path'. - -You can pass arbitrary options directly to find after a \"*\" separator. -For example, this would find all files matching \"book\" that are larger -than 1 megabyte: - - book * -size +1M - -** Commands -\\ -\\[helm-ff-run-toggle-basename]\t\tToggle basename. -\\[helm-ff-run-grep]\t\tRun grep (C-u recurse). -\\[helm-ff-run-zgrep]\t\tRun zgrep. -\\[helm-ff-run-gid]\t\tRun gid (id-utils). -\\[helm-ff-run-pdfgrep]\t\tRun Pdfgrep on marked files. -\\[helm-ff-run-copy-file]\t\tCopy file(s) -\\[helm-ff-run-rename-file]\t\tRename file(s). -\\[helm-ff-run-symlink-file]\t\tSymlink file(s). -\\[helm-ff-run-hardlink-file]\t\tHardlink file(s). -\\[helm-ff-run-delete-file]\t\tDelete file(s). -\\[helm-ff-run-byte-compile-file]\t\tByte compile file(s) (C-u load) (elisp). -\\[helm-ff-run-load-file]\t\tLoad file(s) (elisp). -\\[helm-ff-run-ediff-file]\t\tEdiff file. -\\[helm-ff-run-ediff-merge-file]\t\tEdiff merge file. -\\[helm-ff-run-switch-other-window]\t\tSwitch other window. -\\[helm-ff-properties-persistent]\t\tShow file properties. -\\[helm-ff-run-etags]\t\tRun etags (C-u use tap, C-u C-u reload DB). -\\[helm-yank-text-at-point]\t\tYank text at point. -\\[helm-ff-run-open-file-externally]\t\tOpen file with external program (C-u to choose). -\\[helm-ff-run-open-file-with-default-tool]\t\tOpen file externally with default tool. -\\[helm-ff-run-insert-org-link]\t\tInsert org link.") - -;;; Grep help -;; -;; -(defvar helm-grep-help-message - "* Helm Grep - -** Tips - -*** You can start grep with a prefix arg to recurse in subdirectories - -*** You can use wild card when selecting files (e.g. *.el) - -*** You can grep in many differents directories by marking files or wild cards - -*** You can save your results in a `helm-grep-mode' buffer, see commands below - -Once in this buffer you can use emacs-wgrep to edit your changes. - -*** Important - -Grepping on remote file will work only with grep, not ack-grep, but it is -anyway bad supported as tramp doesn't support multiple process running in a -short delay (less than 5s actually) among other things, -so I strongly advice hitting `C-!' (i.e suspend process) -before entering anything in pattern, and hit again `C-!' when -your regexp is ready to send to remote process, even if helm is handling -this by delaying each process at 5s. -Or even better don't use tramp at all and mount your remote file system on SSHFS. - -* Helm Gid - -** Tips - -Helm gid read the database created with the `mkid' command from id-utils. -The name of the database file can be customized with `helm-gid-db-file-name', it -is usually \"ID\". -Helm Gid use the symbol at point as default-input. -You have access to this command also from `helm-find-files' which allow you to -navigate to another directory to consult its database. - -* Helm AG - -** Tips - -Helm AG is different from grep or ack-grep in that it works on a directory and not -a list of files. -You can ignore files and directories by using a \".agignore\" file, local to directory -or global when placed in home directory (See AG man page for more infos). -This file supports same entries as what you will find in `helm-grep-ignored-files' and -`helm-grep-ignored-directories'. -As always you can access helm AG from `helm-find-files'. - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext File. -\\[helm-goto-precedent-file]\t\tPrecedent File. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer. -\\[helm-grep-run-other-window-action]\t\tJump other window. -\\[helm-grep-run-other-frame-action]\t\tJump other frame. -\\[helm-grep-run-default-action]\t\tRun default action (Same as RET). -\\[helm-grep-run-save-buffer]\t\tSave to a `helm-grep-mode' enabled buffer.") - -;;; Pdf grep help -;; -;; -(defvar helm-pdfgrep-help-message - "* Helm PdfGrep Map - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext File. -\\[helm-goto-precedent-file]\t\tPrecedent File. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer.") - -;;; Etags help -;; -;; -(defvar helm-etags-help-message - "* Helm Etags Map - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext File. -\\[helm-goto-precedent-file]\t\tPrecedent File. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer.") - -;;; Ucs help -;; -;; -(defvar helm-ucs-help-message - "* Helm Ucs - -** Tips - -Use commands below to insert unicode characters -in current-buffer without quitting helm. - -** Commands -\\ -\\[helm-ucs-persistent-insert]\t\tInsert char. -\\[helm-ucs-persistent-forward]\t\tForward char. -\\[helm-ucs-persistent-backward]\t\tBackward char. -\\[helm-ucs-persistent-delete]\t\tDelete char backward.") - -;;; Bookmark help -;; -;; -(defvar helm-bookmark-help-message - "* Helm bookmark name - -** Commands -\\ -\\[helm-bookmark-run-jump-other-window]\t\tJump other window. -\\[helm-bookmark-run-delete]\t\tDelete bookmark. -\\[helm-bookmark-run-edit]\t\tEdit bookmark. -\\[helm-bookmark-toggle-filename]\t\tToggle bookmark location visibility.") - -;;; Eshell command on file help -;; -;; -(defvar helm-esh-help-message - "* Helm eshell on file - -** Tips - -*** Passing extra args after filename - -Normally your command or alias will be called with file as argument. E.g., - - 'candidate_file' - -But you can also pass an argument or more after 'candidate_file' like this: - - %s [extra_args] - -'candidate_file' will be added at '%s' and your command will look at this: - - 'candidate_file' [extra_args] - -*** Specify many files as args (marked files) - -E.g. file1 file2 ... - -Call `helm-find-files-eshell-command-on-file' with one prefix-arg -Otherwise you can pass one prefix-arg from the command selection buffer. -NOTE: This is not working on remote files. - -With two prefix-arg before starting or from the command selection buffer -the output is printed to your `current-buffer'. - -Note that with no prefix-arg or a prefix-arg value of '(16) (C-u C-u) -the command is called once for each file like this: - - file1 file2 etc... - -** Commands -\\") - -;;; Ido virtual buffer help -;; -;; -(defvar helm-buffers-ido-virtual-help-message - "* Helm ido virtual buffers - -** Commands -\\ -\\[helm-ff-run-switch-other-window]\t\tSwitch other window. -\\[helm-ff-run-switch-other-frame]\t\tSwitch other frame. -\\[helm-ff-run-grep]\t\tGrep file. -\\[helm-ff-run-zgrep]\t\tZgrep file. -\\[helm-ff-run-delete-file]\t\tDelete file. -\\[helm-ff-run-open-file-externally]\t\tOpen file externally.") - -;;; Moccur help -;; -;; -(defvar helm-moccur-help-message - "* Helm Moccur - -** Tips - -*** Matching - -Multiple regexp matching is allowed, just enter a space to separate your regexps. - -Matching empty lines is supported with the regexp \"^$\", you will get the results -with only the buffer-name and the line number, you can of course save and edit these -results (i.e add text to the empty line) . - -*** Automatically matching symbol at point - -You can match automatically the symbol at point, but keeping -the minibuffer empty ready to write into. -This is disabled by default, to enable this you have to add `helm-source-occur' -and `helm-source-moccur' to `helm-sources-using-default-as-input'. - -*** Jump to the corresponding line in the searched buffer - -You can do this with `C-j' (persistent-action), to do it repetitively -you can use `C-' and `C-' or enable `helm-follow-mode' with `C-c C-f'. - -*** Saving results - -Same as with helm-grep, you can save the results with `C-x C-s'. -Of course if you don't save your results, you can get back your session -with `helm-resume'. - -*** Refreshing the resumed session. - -When the buffer(s) where you ran helm-(m)occur have been modified, you will be -warned of this with the buffer flashing to red, you can refresh the buffer by running -`C-c C-u'. -This can be done automatically by customizing `helm-moccur-auto-update-on-resume'. - -*** Refreshing a saved buffer - -Type `g' to update your buffer. - -*** Edit a saved buffer - -First, install wgrep https://github.com/mhayashi1120/Emacs-wgrep -and then: - -1) C-c C-p to edit the buffer(s). -2) C-x C-s to save your changes. - -Tip: Use the excellent iedit https://github.com/tsdh/iedit -to modify occurences in your buffer. - -** Commands -\\ -\\[helm-goto-next-file]\t\tNext Buffer. -\\[helm-goto-precedent-file]\t\tPrecedent Buffer. -\\[helm-yank-text-at-point]\t\tYank Text at point in minibuffer. -\\[helm-moccur-run-goto-line-ow]\t\tGoto line in other window. -\\[helm-moccur-run-goto-line-of]\t\tGoto line in new frame.") - -;;; Helm Top -;; -;; -(defvar helm-top-help-message - "* Helm Top - -** Tips - -** Commands -\\ -\\[helm-top-run-sort-by-com]\t\tSort by commands. -\\[helm-top-run-sort-by-cpu]\t\tSort by cpu usage. -\\[helm-top-run-sort-by-user]\t\tSort alphabetically by user. -\\[helm-top-run-sort-by-mem]\t\tSort by memory.") - -;;; Helm Apt -;; -;; -(defvar helm-apt-help-message - "* Helm Apt - -** Tips - -** Commands -\\ -\\[helm-apt-show-all]\t\tShow all packages. -\\[helm-apt-show-only-installed]\t\tShow installed packages only. -\\[helm-apt-show-only-not-installed]\t\tShow not installed packages only. -\\[helm-apt-show-only-deinstalled]\t\tShow deinstalled (not purged yet) packages only.>") - -;;; Helm elisp package -;; -;; -(defvar helm-el-package-help-message - "* Helm elisp package - -** Tips - -*** Compile all your packages asynchronously - -When using async (if you have installed from MELPA you do), only helm, helm-core, -and magit are compiled asynchronously, if you want all your packages compiled async, -add to your init file: - - (setq async-bytecomp-allowed-packages '(all)) - -*** Upgrade elisp packages - -On initial start (when emacs is fetching packages on remote), if helm find -package to upgrade it will start in the upgradables packages view showing the packages -availables to upgrade. -On further starts, you will have to refresh the list with `C-c C-u', if helm find upgrades -you will have a message telling you some packages are available for upgrade, you can switch to -upgrade view (see below) to see what packages are available for upgrade or just hit `C-c U'. -to upgrade all. - -To see upgradables packages hit . - -Then you can install all upgradables packages with the upgrade all action (`C-c C-u'), -or upgrade only the specific packages by marking them (the new ones) and running -the upgrade action (visible only when there is upgradables packages). -Of course you can upgrade a single package by just running the upgrade action -without marking it (`C-c u' or RET) . - -\*WARNING* You are strongly advised to RESTART emacs after UPGRADING packages. - -*** Meaning of flags prefixing packages (Emacs-25) - -- The flag \"S\" that prefix package names mean that this package is one of `package-selected-packages'. -This feature is only available with emacs-25. - -- The flag \"U\" that prefix package names mean that this package is no more needed. -This feature is only available with emacs-25. - -** Commands -\\ -\\[helm-el-package-show-all]\t\tShow all packages. -\\[helm-el-package-show-installed]\t\tShow installed packages only. -\\[helm-el-package-show-uninstalled]\t\tShow not installed packages only. -\\[helm-el-package-show-upgrade]\t\tShow upgradable packages only. -\\[helm-el-run-package-install]\t\tInstall package(s). -\\[helm-el-run-package-reinstall]\t\tReinstall package(s). -\\[helm-el-run-package-uninstall]\t\tUninstall package(s). -\\[helm-el-run-package-upgrade]\t\tUpgrade package(s). -\\[helm-el-run-package-upgrade-all]\t\tUpgrade all packages upgradables. -\\[helm-el-run-visit-homepage]\t\tVisit package homepage.") - -;;; Helm M-x -;; -;; -(defvar helm-M-x-help-message - "* Helm M-x - -** Tips - -*** You can get help on any command with persistent action (C-j) - -*** Prefix Args - -All the prefix args passed BEFORE running `helm-M-x' are ignored, -you should get an error message if you do so. -When you want to pass prefix args, pass them AFTER starting `helm-M-x', -you will see a prefix arg counter appearing in mode-line notifying you -the number of prefix args entered.") - -;;; helm-imenu -;; -;; -(defvar helm-imenu-help-message - "* Helm imenu - -** Tips - -** Commands -\\ -\\[helm-imenu-next-section]\t\tGo to next section. -\\[helm-imenu-previous-section]\t\tGo to previous section.") - -;;; helm-colors -;; -;; -(defvar helm-colors-help-message - "* Helm colors - -** Commands -\\ -\\[helm-color-run-insert-name]\t\tInsert the entry'name. -\\[helm-color-run-kill-name]\t\tKill the entry's name. -\\[helm-color-run-insert-rgb]\t\tInsert entry in RGB format. -\\[helm-color-run-kill-rgb]\t\tKill entry in RGB format.") - -;;; helm semantic -;; -;; -(defvar helm-semantic-help-message - "* Helm semantic - -** Tips - -** Commands -\\") - -;;; helm kmacro -;; -;; -(defvar helm-kmacro-help-message - "* Helm kmacro - -** Tips - -- Start recording some keys with `f3' -- Record new kmacro with `f4' -- Start `helm-execute-kmacro' to list all your macros. - -Use persistent action to run your kmacro as many time as needed, -you can change of kmacro with `helm-next-line' `helm-previous-line'. - -NOTE: You can't record keys running helm commands except `helm-M-x' unless -you don't choose from there a command using helm completion. - -** Commands -\\") - - -;;; Mode line strings -;; -;; -;;;###autoload -(defvar helm-comp-read-mode-line "\ -\\\ -C/\\[helm-cr-empty-string]:Empty \ -\\\ -\\[helm-help]:Help \ -\\[helm-select-action]:Act \ -\\[helm-maybe-exit-minibuffer]/\ -f1/f2/f-n:NthAct \ -\\[helm-toggle-suspend-update]:Tog.suspend") - -;;;###autoload -(defvar helm-read-file-name-mode-line-string "\ -\\\ -\\[helm-help]:Help \ -C/\\[helm-cr-empty-string]:Empty \ -\\\ -\\[helm-select-action]:Act \ -\\[helm-maybe-exit-minibuffer]/\ -f1/f2/f-n:NthAct \ -\\[helm-toggle-suspend-update]:Tog.suspend" - "String displayed in mode-line in `helm-source-find-files'.") - -;;;###autoload -(defvar helm-top-mode-line "\ -\\\ -\\[helm-help]:Help \ -\\\ -\\[helm-select-action]:Act \ -\\[helm-maybe-exit-minibuffer]/\ -f1/f2/f-n:NthAct \ -\\[helm-toggle-suspend-update]:Tog.suspend") - - -;;; Attribute Documentation -;; -;; -;;;###autoload -(defun helm-describe-helm-attribute (helm-attribute) - "Display the full documentation of HELM-ATTRIBUTE. -HELM-ATTRIBUTE should be a symbol." - (interactive (list (intern - (completing-read - "Describe helm attribute: " - (mapcar 'symbol-name helm-attributes) - nil t)))) - (with-output-to-temp-buffer "*Help*" - (princ (get helm-attribute 'helm-attrdoc)))) - -(helm-document-attribute 'name "mandatory" - " The name of the source. It is also the heading which appears - above the list of matches from the source. Must be unique.") - -(helm-document-attribute 'header-name "optional" - " A function returning the display string of the header. Its - argument is the name of the source. This attribute is useful to - add an additional information with the source name.") - -(helm-document-attribute 'candidates "mandatory if candidates-in-buffer attribute is not provided" - " Specifies how to retrieve candidates from the source. It can - either be a variable name, a function called with no parameters - or the actual list of candidates. - - The list must be a list whose members are strings, symbols - or (DISPLAY . REAL) pairs. - - In case of (DISPLAY . REAL) pairs, the DISPLAY string is shown - in the Helm buffer, but the REAL one is used as action - argument when the candidate is selected. This allows a more - readable presentation for candidates which would otherwise be, - for example, too long or have a common part shared with other - candidates which can be safely replaced with an abbreviated - string for display purposes. - - Note that if the (DISPLAY . REAL) form is used then pattern - matching is done on the displayed string, not on the real - value. - - If the candidates have to be retrieved asynchronously (for - example, by an external command which takes a while to run) - then the function should start the external command - asynchronously and return the associated process object. - Helm will take care of managing the process (receiving the - output from it, killing it if necessary, etc.). The process - should return candidates matching the current pattern (see - variable `helm-pattern'.) - You should use instead `candidates-process' attribute for - async processes, a warning will popup when using async process - in a `candidates' attribute. - - Note that currently results from asynchronous sources appear - last in the helm buffer regardless of their position in - `helm-sources'.") - -(helm-document-attribute 'candidates-process - "Same as `candidates' attributes but for process function." - " You should use this attribute when using a function involving - an async process instead of `candidates'.") - -(helm-document-attribute 'action "mandatory if type attribute is not provided" - " It is a list of (DISPLAY . FUNCTION) pairs or FUNCTION. - FUNCTION is called with one parameter: the selected candidate. - - An action other than the default can be chosen from this list - of actions for the currently selected candidate (by default - with TAB). The DISPLAY string is shown in the completions - buffer and the FUNCTION is invoked when an action is - selected. The first action of the list is the default.") - -(helm-document-attribute 'coerce "optional" - " It's a function called with one argument: the selected - candidate. - - This function is intended for type convertion. In normal case, - the selected candidate (string) is passed to action - function. If coerce function is specified, it is called just - before action function. - - Example: converting string to symbol - (coerce . intern)") - -(helm-document-attribute 'type "optional if action attribute is provided" - " Indicates the type of the items the source returns. - - Merge attributes not specified in the source itself from - `helm-type-attributes'. - - This attribute is implemented by plug-in.") - -(helm-document-attribute 'init "optional" - " Function called with no parameters when helm is started. It - is useful for collecting current state information which can be - used to create the list of candidates later. - - For example, if a source needs to work with the current - directory then it can store its value here, because later - helm does its job in the minibuffer and in the - `helm-buffer' and the current directory can be different - there.") - -(helm-document-attribute 'match "optional" - " List of functions called with one parameter: a candidate. The - function should return non-nil if the candidate matches the - current pattern (see variable `helm-pattern'). - - This attribute allows the source to override the default - pattern matching based on `string-match'. It can be used, for - example, to implement a source for file names and do the - pattern matching on the basename of files, since it's more - likely one is typing part of the basename when searching for a - file, instead of some string anywhere else in its path. - - If the list contains more than one function then the list of - matching candidates from the source is constructed by appending - the results after invoking the first function on all the - potential candidates, then the next function, and so on. The - matching candidates supplied by the first function appear first - in the list of results and then results from the other - functions, respectively. - - This attribute has no effect for asynchronous sources (see - attribute `candidates'), since they perform pattern matching - themselves.") - -(helm-document-attribute 'candidate-transformer "optional" - " It's a function or a list of functions called with one argument - when the completion list from the source is built. The argument - is the list of candidates retrieved from the source. The - function should return a transformed list of candidates which - will be used for the actual completion. If it is a list of - functions, it calls each function sequentially. - - This can be used to transform or remove items from the list of - candidates. - - Note that `candidates' is run already, so the given transformer - function should also be able to handle candidates with (DISPLAY - . REAL) format.") - -(helm-document-attribute 'filtered-candidate-transformer "optional" - " It has the same format as `candidate-transformer', except the - function is called with two parameters: the candidate list and - the source. - - This transformer is run on the candidate list which is already - filtered by the current pattern. While `candidate-transformer' - is run only once, it is run every time the input pattern is - changed. - - It can be used to transform the candidate list dynamically, for - example, based on the current pattern. - - In some cases it may also be more efficent to perform candidate - transformation here, instead of with `candidate-transformer' - even if this transformation is done every time the pattern is - changed. For example, if a candidate set is very large then - `candidate-transformer' transforms every candidate while only - some of them will actually be dislpayed due to the limit - imposed by `helm-candidate-number-limit'. - - Note that `candidates' and `candidate-transformer' is run - already, so the given transformer function should also be able - to handle candidates with (DISPLAY . REAL) format. - - This option has no effect for asynchronous sources. (Not yet, - at least.") - -(helm-document-attribute 'action-transformer "optional" - " It's a function or a list of functions called with two - arguments when the action list from the source is - assembled. The first argument is the list of actions, the - second is the current selection. If it is a list of functions, - it calls each function sequentially. - - The function should return a transformed action list. - - This can be used to customize the list of actions based on the - currently selected candidate.") - -(helm-document-attribute 'pattern-transformer "optional" - " It's a function or a list of functions called with one argument - before computing matches. Its argument is `helm-pattern'. - Functions should return transformed `helm-pattern'. - - It is useful to change interpretation of `helm-pattern'.") - -(helm-document-attribute 'delayed "optional" - " Candidates from the source are shown only if the user stops - typing and is idle for `helm-idle-delay' seconds. - If a value is given to delayed attr, this value is used instead only - if it is > to `helm-idle-delay'.") - -(helm-document-attribute 'volatile "optional" - " Indicates the source assembles the candidate list dynamically, - so it shouldn't be cached within a single Helm - invocation. It is only applicable to synchronous sources, - because asynchronous sources are not cached.") - -(helm-document-attribute 'requires-pattern "optional" - " If present matches from the source are shown only if the - pattern is not empty. Optionally, it can have an integer - parameter specifying the required length of input which is - useful in case of sources with lots of candidates.") - -(helm-document-attribute 'persistent-action "optional" - " Can be a either a Function called with one parameter (the - selected candidate) or a cons cell where first element is this - same function and second element a symbol (e.g. never-split) - that inform `helm-execute-persistent-action'to not split his - window to execute this persistent action.") - -(helm-document-attribute 'candidates-in-buffer "optional" - " Shortcut attribute for making and narrowing candidates using - buffers. This newly-introduced attribute prevents us from - forgetting to add volatile and match attributes. - - See docstring of `helm-candidates-in-buffer'. - - (candidates-in-buffer) is equivalent of three attributes: - (candidates . helm-candidates-in-buffer) - (volatile) - (match identity) - - (candidates-in-buffer . candidates-function) is equivalent of: - (candidates . candidates-function) - (volatile) - (match identity) - - This attribute is implemented by plug-in.") - -(helm-document-attribute 'search "optional" - " List of functions like `re-search-forward' or `search-forward'. - Buffer search function used by `helm-candidates-in-buffer'. - By default, `helm-candidates-in-buffer' uses - `re-search-forward'. This attribute is meant to be used with - (candidates . helm-candidates-in-buffer) or - (candidates-in-buffer) in short.") - -(helm-document-attribute 'get-line "optional" - " A function like `buffer-substring-no-properties' or `buffer-substring'. - This function converts point of line-beginning and point of line-end, - which represents a candidate computed by `helm-candidates-in-buffer'. - By default, `helm-candidates-in-buffer' uses - `buffer-substring-no-properties'.") - -(helm-document-attribute 'display-to-real "optional" - " Function called with one parameter; the selected candidate. - - The function transforms the selected candidate, and the result - is passed to the action function. The display-to-real - attribute provides another way to pass other string than one - shown in Helm buffer. - - Traditionally, it is possible to make candidates, - candidate-transformer or filtered-candidate-transformer - function return a list with (DISPLAY . REAL) pairs. But if REAL - can be generated from DISPLAY, display-to-real is more - convenient and faster.") - -(helm-document-attribute 'real-to-display "optional" - " Function called with one parameter; the selected candidate. - - The inverse of display-to-real attribute. - - The function transforms the selected candidate, which is passed - to the action function, for display. The real-to-display - attribute provides the other way to pass other string than one - shown in Helm buffer. - - Traditionally, it is possible to make candidates, - candidate-transformer or filtered-candidate-transformer - function return a list with (DISPLAY . REAL) pairs. But if - DISPLAY can be generated from REAL, real-to-display is more - convenient. - - Note that DISPLAY parts returned from candidates / - candidate-transformer are IGNORED as the name `display-to-real' - says.") - -(helm-document-attribute 'cleanup "optional" - " Function called with no parameters when *helm* buffer is - closed. It is useful for killing unneeded candidates buffer. - - Note that the function is executed BEFORE performing action.") - -(helm-document-attribute 'candidate-number-limit "optional" - " Override `helm-candidate-number-limit' only for this source.") - -(helm-document-attribute 'accept-empty "optional" - " Pass empty string \"\" to action function.") - -(helm-document-attribute 'dummy "optional" - " Set `helm-pattern' to candidate. If this attribute is - specified, The candidates attribute is ignored. - - This attribute is implemented by plug-in.") - -(helm-document-attribute 'multiline "optional" - " Enable to selection multiline candidates.") - -(helm-document-attribute 'update "optional" - (substitute-command-keys - " Function called with no parameters at before \"init\" function when \ -\\\\[helm-force-update] is pressed.")) - -(helm-document-attribute 'mode-line "optional" - " Source local `helm-mode-line-string' (included in - `mode-line-format'). It accepts also variable/function name.") - -(helm-document-attribute 'header-line "optional" - " Source local `header-line-format'. - It accepts also variable/function name. ") - -(helm-document-attribute - 'resume "optional" - " Function called with no parameters at end of initialization - when `helm-resume' is started. - If this function try to do something against `helm-buffer', \(e.g. updating, - searching etc...\) probably you should run it in a timer to ensure - `helm-buffer' is ready.") - -(helm-document-attribute 'keymap "optional" - " Specific keymap for this source. - It is useful to have a keymap per source when using more than - one source. Otherwise, a keymap can be set per command with - `helm' argument KEYMAP. NOTE: when a source have `helm-map' as - keymap attr, the global value of `helm-map' will override the - actual local one.") - -(helm-document-attribute 'help-message "optional" - " Help message for this source. - If not present, `helm-help-message' value will be used.") - -(helm-document-attribute 'match-part "optional" - " Allow matching candidate in the line with `candidates-in-buffer'. - In candidates-in-buffer sources, match is done with - `re-search-forward' which allow matching only a regexp on the - `helm-buffer'; when this search is done, match-part allow - matching only a specific part of the current line e.g. with a - line like this: - - filename:candidate-containing-the-word-filename - - What you want is to ignore \"filename\" part and match only - \"candidate-containing-the-word-filename\" - - So give a function matching only the part of candidate after \":\" - - If source contain match-part attribute, match is computed only - on part of candidate returned by the call of function provided - by this attribute. The function should have one arg, candidate, - and return only a specific part of candidate. - - NOTE: This have effect only on sources using - `candidates-in-buffer'.") - -(helm-document-attribute 'match-strict "optional" - " When specifying a match function within a source and - helm-multi-match is enabled, the result of all matching - functions will be concatened, which in some cases is not what - is wanted. When using `match-strict' only this or these - functions will be used. You can specify those functions as a - list of functions or a single symbol function. For anonymous - function don't add the dot, e.g: - - \(match-strict (lambda () (foo))).") - -(helm-document-attribute 'nohighlight "optional" - " Disable highlight match in this source.") - -(helm-document-attribute 'no-matchplugin "optional" - " Disable matchplugin for this source.") - -(helm-document-attribute 'history "optional" - " Allow passing history variable to helm from source. - It should be a quoted symbol evaluated from source, i.e: - (history . ,'history-var)") - -(helm-document-attribute 'follow "optional" - " Enable `helm-follow-mode' for this source only. - You must give it a value of 1 or -1, though giving a -1 value - is surely not what you want, e.g: (follow . 1) - - See `helm-follow-mode' for more infos") - -(helm-document-attribute 'follow-delay "optional" - " `helm-follow-mode' will execute persistent-action after this delay. - Otherwise value of `helm-follow-input-idle-delay' is used if non--nil, - If none of these are found fallback to `helm-input-idle-delay'.") - -(helm-document-attribute 'allow-dups "optional" - " Allow helm collecting duplicates candidates.") - -(helm-document-attribute 'filter-one-by-one "optional" - " A transformer function that treat candidates one by one. - It is called with one arg the candidate. - It is faster than `filtered-candidate-transformer' or `candidates-transformer', - but should be used only in sources that recompute constantly their candidates, - e.g. `helm-source-find-files'. - Filtering happen early and candidates are treated - one by one instead of re-looping on the whole list. - If used with `filtered-candidate-transformer' or `candidates-transformer' - these functions should treat the candidates transformed by the `filter-one-by-one' - function in consequence.") - -(helm-document-attribute 'nomark "optional" - " Don't allow marking candidates when this attribute is present.") - -(provide 'helm-help) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-help.el ends here diff --git a/elpa/helm-20160217.958/helm-id-utils.el b/elpa/helm-20160217.958/helm-id-utils.el deleted file mode 100644 index 15f6bc42..00000000 --- a/elpa/helm-20160217.958/helm-id-utils.el +++ /dev/null @@ -1,126 +0,0 @@ -;;; helm-id-utils.el --- Helm interface for id-utils. -*- lexical-binding: t -*- - -;; Copyright (C) 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'helm-grep) -(require 'helm-help) - -(defgroup helm-id-utils nil - "ID-Utils related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-gid-program "gid" - "Name of gid command (usually `gid'). -For Mac OS X users, if you install GNU coreutils, the name `gid' -might be occupied by `id' from GNU coreutils, and you should set -it to correct name (or absolute path), for example, if using -MacPorts to install id-utils, it should be `gid32'." - :group 'helm-id-utils - :type 'file) - -(defcustom helm-gid-db-file-name "ID" - "Name of a database file created by `mkid' command from `ID-utils'." - :group 'helm-id-utils - :type 'string) - -(defun helm-gid-candidates-process () - (let ((proc (start-process - "gid" nil helm-gid-program - "-r" helm-pattern))) - (set (make-local-variable 'helm-grep-last-cmd-line) - (format "%s -r %s" helm-gid-program helm-pattern)) - (prog1 proc - (set-process-sentinel - proc (lambda (_process event) - (when (string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Helm Gid process finished - (%s results)]" - (max (1- (count-lines - (point-min) (point-max))) - 0)) - 'face 'helm-locate-finish)))) - (force-mode-line-update)) - (helm-log "Error: Gid %s" - (replace-regexp-in-string "\n" "" event)))))))) - -(defun helm-gid-filtered-candidate-transformer (candidates _source) - ;; "gid -r" may add dups in some rare cases. - (cl-loop for c in (helm-fast-remove-dups candidates :test 'equal) - collect (helm-grep--filter-candidate-1 c))) - -(defclass helm-gid-source (helm-source-async) - ((header-name - :initform - (lambda (name) - (concat name " [" (helm-attr 'db-dir) "]"))) - (db-dir :initarg :db-dir - :initform nil - :custom string - :documentation " Location of ID file.") - (candidates-process :initform #'helm-gid-candidates-process) - (filtered-candidate-transformer - :initform #'helm-gid-filtered-candidate-transformer) - (candidate-number-limit :initform 99999) - (action :initform (helm-make-actions - "Find File" 'helm-grep-action - "Find file other frame" 'helm-grep-other-frame - (lambda () (and (locate-library "elscreen") - "Find file in Elscreen")) - 'helm-grep-jump-elscreen - "Save results in grep buffer" 'helm-grep-save-results - "Find file other window" 'helm-grep-other-window)) - (persistent-action :initform 'helm-grep-persistent-action) - (history :initform 'helm-grep-history) - (nohighlight :initform t) - (help-message :initform 'helm-grep-help-message) - (requires-pattern :initform 2))) - -;;;###autoload -(defun helm-gid () - "Preconfigured helm for `gid' command line of `ID-Utils'. -Need A database created with the command `mkid' -above `default-directory'. -Need id-utils as dependency which provide `mkid', `gid' etc... -See ." - (interactive) - (let* ((db (locate-dominating-file - default-directory - helm-gid-db-file-name)) - (helm-grep-default-directory-fn - (lambda () default-directory)) - (helm--maybe-use-default-as-input t)) - (cl-assert db nil "No DataBase found, create one with `mkid'") - (helm :sources (helm-make-source "Gid" 'helm-gid-source - :db-dir db) - :buffer "*helm gid*" - :keymap helm-grep-map - :truncate-lines helm-grep-truncate-lines))) - -(provide 'helm-id-utils) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-id-utils ends here diff --git a/elpa/helm-20160217.958/helm-imenu.el b/elpa/helm-20160217.958/helm-imenu.el deleted file mode 100644 index ba4848a4..00000000 --- a/elpa/helm-20160217.958/helm-imenu.el +++ /dev/null @@ -1,276 +0,0 @@ -;;; helm-imenu.el --- Helm interface for Imenu -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'imenu) -(require 'helm-utils) -(require 'helm-help) - - -(defgroup helm-imenu nil - "Imenu related libraries and applications for helm." - :group 'helm) - -(defcustom helm-imenu-delimiter " / " - "Delimit types of candidates and his value in `helm-buffer'." - :group 'helm-imenu - :type 'string) - -(defcustom helm-imenu-execute-action-at-once-if-one - #'helm-imenu--execute-action-at-once-p - "Goto the candidate when only one is remaining." - :group 'helm-imenu - :type 'function) - -(defcustom helm-imenu-lynx-style-map t - "Use Arrow keys to jump to occurences." - :group 'helm-imenu - :type 'boolean) - - -;;; keymap -(defvar helm-imenu-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-imenu-next-section) - (define-key map (kbd "M-") 'helm-imenu-previous-section) - (when helm-imenu-lynx-style-map - (define-key map (kbd "") 'helm-maybe-exit-minibuffer) - (define-key map (kbd "") 'helm-execute-persistent-action)) - (delq nil map))) - -(defun helm-imenu-next-or-previous-section (n) - (with-helm-buffer - (let* ((fn (lambda () - (car (split-string (helm-get-selection nil t) - helm-imenu-delimiter)))) - (curtype (funcall fn)) - (move-fn (if (> n 0) #'helm-next-line #'helm-previous-line)) - (stop-fn (if (> n 0) - #'helm-end-of-source-p - #'helm-beginning-of-source-p))) - (catch 'break - (while (not (funcall stop-fn)) - (funcall move-fn) - (unless (string= curtype (funcall fn)) - (throw 'break nil))))))) - -(defun helm-imenu-next-section () - (interactive) - (helm-imenu-next-or-previous-section 1)) - -(defun helm-imenu-previous-section () - (interactive) - (helm-imenu-next-or-previous-section -1)) - - -;;; Internals -(defvar helm-cached-imenu-alist nil) -(make-variable-buffer-local 'helm-cached-imenu-alist) - -(defvar helm-cached-imenu-candidates nil) -(make-variable-buffer-local 'helm-cached-imenu-candidates) - -(defvar helm-cached-imenu-tick nil) -(make-variable-buffer-local 'helm-cached-imenu-tick) - - -(defvar helm-source-imenu nil "See (info \"(emacs)Imenu\")") -(defvar helm-source-imenu-all nil) - -(defclass helm-imenu-source (helm-source-sync) - ((candidates :initform 'helm-imenu-candidates) - (candidate-transformer :initform 'helm-imenu-transformer) - (persistent-action :initform 'helm-imenu-persistent-action) - (persistent-help :initform "Show this entry") - (keymap :initform helm-imenu-map) - (help-message :initform 'helm-imenu-help-message) - (action :initform 'helm-imenu-action))) - -(defcustom helm-imenu-fuzzy-match nil - "Enable fuzzy matching in `helm-source-imenu'." - :group 'helm-imenu - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-imenu - (helm-make-source "Imenu" 'helm-imenu-source - :fuzzy-match helm-imenu-fuzzy-match)))) - -(defun helm-imenu--maybe-switch-to-buffer (candidate) - (helm-aif (marker-buffer (cdr candidate)) - (switch-to-buffer it))) - -(defun helm-imenu--execute-action-at-once-p () - (let ((cur (helm-get-selection)) - (mb (with-helm-current-buffer - (save-excursion - (goto-char (point-at-bol)) - (point-marker))))) - (if (equal (cdr cur) mb) - (prog1 nil - (helm-set-pattern "") - (helm-force-update)) - t))) - -(defun helm-imenu-action (candidate) - "Default action for `helm-source-imenu'." - (helm-log-run-hook 'helm-goto-line-before-hook) - (helm-imenu--maybe-switch-to-buffer candidate) - (imenu candidate) - ;; If semantic is supported in this buffer - ;; imenu used `semantic-imenu-goto-function' - ;; and position have been highlighted, - ;; no need to highlight again. - (unless (eq imenu-default-goto-function - 'semantic-imenu-goto-function) - (helm-highlight-current-line nil nil nil nil 'pulse))) - -(defun helm-imenu-persistent-action (candidate) - "Default persistent action for `helm-source-imenu'." - (helm-imenu--maybe-switch-to-buffer candidate) - (imenu candidate) - (helm-highlight-current-line)) - -(defun helm-imenu-candidates (&optional buffer) - (with-current-buffer (or buffer helm-current-buffer) - (let ((tick (buffer-modified-tick))) - (if (eq helm-cached-imenu-tick tick) - helm-cached-imenu-candidates - (setq imenu--index-alist nil) - (prog1 (setq helm-cached-imenu-candidates - (let ((index (imenu--make-index-alist t))) - (helm-imenu--candidates-1 - (delete (assoc "*Rescan*" index) index)))) - (setq helm-cached-imenu-tick tick)))))) - -(defun helm-imenu-candidates-in-all-buffers () - (let* ((lst (buffer-list)) - (progress-reporter (make-progress-reporter - "Imenu indexing buffers..." 1 (length lst)))) - (prog1 - (cl-loop for b in lst - for count from 1 - for mm = (with-current-buffer b major-mode) - for cmm = (with-helm-current-buffer major-mode) - when (or (with-helm-current-buffer - (derived-mode-p mm)) - (with-current-buffer b - (derived-mode-p cmm))) - do (progress-reporter-update progress-reporter count) - and - append (with-current-buffer b - (helm-imenu-candidates b))) - (progress-reporter-done progress-reporter)))) - -(defun helm-imenu--candidates-1 (alist) - (cl-loop for elm in alist - nconc (if (imenu--subalist-p elm) - (helm-imenu--candidates-1 - (cl-loop for (e . v) in (cdr elm) collect - (cons (propertize - e 'helm-imenu-type (car elm)) - ;; If value is an integer, convert it - ;; to a marker, otherwise it is a cons cell - ;; and it will be converted on next recursions. - ;; (Issue #1060) [1]. - (if (integerp v) (copy-marker v) v)))) - (and (cdr elm) ; bug in imenu, should not be needed. - (setcdr elm (copy-marker (cdr elm))) ; Same as [1]. - (list elm))))) - -(defun helm-imenu--get-prop (item) - ;; property value of ITEM can have itself - ;; a property value which have itself a property value - ;; ...and so on; Return a list of all these - ;; properties values starting at ITEM. - (let* ((prop (get-text-property 0 'helm-imenu-type item)) - (lst (list prop item))) - (when prop - (while prop - (setq prop (get-text-property 0 'helm-imenu-type prop)) - (and prop (push prop lst))) - lst))) - -(defun helm-imenu-transformer (candidates) - (cl-loop for (k . v) in candidates - for types = (or (helm-imenu--get-prop k) - (list "Function" k)) - for bufname = (buffer-name (marker-buffer v)) - for disp1 = (mapconcat - (lambda (x) - (propertize - x 'face (cond ((string= x "Variables") - 'font-lock-variable-name-face) - ((string= x "Function") - 'font-lock-function-name-face) - ((string= x "Types") - 'font-lock-type-face)))) - types helm-imenu-delimiter) - for disp = (propertize disp1 'help-echo bufname) - collect - (cons disp (cons k v)))) - -;;;###autoload -(defun helm-imenu () - "Preconfigured `helm' for `imenu'." - (interactive) - (unless helm-source-imenu - (setq helm-source-imenu - (helm-make-source "Imenu" 'helm-imenu-source - :fuzzy-match helm-imenu-fuzzy-match))) - (let ((imenu-auto-rescan t) - (str (thing-at-point 'symbol)) - (helm-execute-action-at-once-if-one - helm-imenu-execute-action-at-once-if-one)) - (helm :sources 'helm-source-imenu - :default (list (concat "\\_<" str "\\_>") str) - :preselect str - :buffer "*helm imenu*"))) - -;;;###autoload -(defun helm-imenu-in-all-buffers () - "Preconfigured helm for fetching imenu entries of all buffers." - (interactive) - (unless helm-source-imenu-all - (setq helm-source-imenu-all - (helm-make-source "Imenu in all buffers" 'helm-imenu-source - :candidates 'helm-imenu-candidates-in-all-buffers - :fuzzy-match helm-imenu-fuzzy-match))) - (let ((imenu-auto-rescan t) - (str (thing-at-point 'symbol)) - (helm-execute-action-at-once-if-one - helm-imenu-execute-action-at-once-if-one)) - (helm :sources 'helm-source-imenu-all - :default (list (concat "\\_<" str "\\_>") str) - :preselect (unless (memq 'helm-source-imenu-all - helm-sources-using-default-as-input) - str) - :buffer "*helm imenu all*"))) - -(provide 'helm-imenu) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-imenu.el ends here diff --git a/elpa/helm-20160217.958/helm-info.el b/elpa/helm-20160217.958/helm-info.el deleted file mode 100644 index 1abcd2ee..00000000 --- a/elpa/helm-20160217.958/helm-info.el +++ /dev/null @@ -1,238 +0,0 @@ -;;; helm-info.el --- Browse info index with helm -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-lib) -(require 'helm-plugin) -(require 'info) - -(declare-function Info-index-nodes "info" (&optional file)) -(declare-function Info-goto-node "info" (&optional fork)) -(declare-function Info-find-node "info.el" (filename nodename &optional no-going-back)) -(defvar Info-history) -(defvar Info-directory-list) - -;;; Customize - -(defgroup helm-info nil - "Info-related applications and libraries for Helm." - :group 'helm) - -(defcustom helm-info-default-sources - '(helm-source-info-elisp - helm-source-info-cl - helm-source-info-eieio - helm-source-info-pages) - "Default sources to use for looking up symbols at point in Info -files with `helm-info-at-point'." - :group 'helm-info - :type '(repeat (choice symbol))) - -;;; Build info-index sources with `helm-info-source' class. - -(cl-defun helm-info-init (&optional (file (helm-attr 'info-file))) - ;; Allow reinit candidate buffer when using edebug. - (helm-aif (and debug-on-error - (helm-candidate-buffer)) - (kill-buffer it)) - (unless (helm-candidate-buffer) - (save-window-excursion - (info file) - (let ((tobuf (helm-candidate-buffer 'global)) - (infobuf (current-buffer)) - Info-history - start end) - (cl-dolist (node (Info-index-nodes)) - (Info-goto-node node) - (goto-char (point-min)) - (while (search-forward "\n* " nil t) - (unless (search-forward "Menu:\n" (1+ (point-at-eol)) t) - (setq start (point-at-bol) - end (point-at-eol)) - (with-current-buffer tobuf - (insert-buffer-substring infobuf start end) - (insert "\n"))))))))) - -(defun helm-info-goto (node-line) - (Info-goto-node (car node-line)) - (helm-goto-line (cdr node-line))) - -(defun helm-info-display-to-real (line) - (and (string-match - ;; This regexp is stolen from Info-apropos-matches - "\\* +\\([^\n]*.+[^\n]*\\):[ \t]+\\([^\n]*\\)\\.\\(?:[ \t\n]*(line +\\([0-9]+\\))\\)?" line) - (cons (format "(%s)%s" (helm-attr 'info-file) (match-string 2 line)) - (string-to-number (or (match-string 3 line) "1"))))) - -(defclass helm-info-source (helm-source-in-buffer) - ((info-file :initarg :info-file - :initform nil - :custom 'string) - (init :initform #'helm-info-init) - (display-to-real :initform #'helm-info-display-to-real) - (get-line :initform #'buffer-substring) - (action :initform '(("Goto node" . helm-info-goto))))) - -(defmacro helm-build-info-source (fname &rest args) - `(helm-make-source (concat "Info Index: " ,fname) 'helm-info-source - :info-file ,fname ,@args)) - -(defun helm-build-info-index-command (name doc source buffer) - "Define a helm command NAME with documentation DOC. -Arg SOURCE will be an existing helm source named -`helm-source-info-' and BUFFER a string buffer name." - (defalias (intern (concat "helm-info-" name)) - (lambda () - (interactive) - (helm :sources source - :buffer buffer - :candidate-number-limit 1000)) - doc)) - -(defun helm-define-info-index-sources (var-value &optional commands) - "Define helm sources named helm-source-info-. -Sources are generated for all entries of `helm-default-info-index-list'. -If COMMANDS arg is non-nil, also build commands named `helm-info-'. -Where NAME is an element of `helm-default-info-index-list'." - (cl-loop for str in var-value - for sym = (intern (concat "helm-source-info-" str)) - do (set sym (helm-build-info-source str)) - when commands - do (helm-build-info-index-command - str (format "Predefined helm for %s info." str) - sym (format "*helm info %s*" str)))) - -(defun helm-info-index-set (var value) - (set var value) - (helm-define-info-index-sources value t)) - -;;; Search Info files - -;; `helm-info' is the main entry point here. It prompts the user for an Info -;; file, then a term in the file's index to jump to. - -(defvar helm-info-searched (make-ring 32) - "Ring of previously searched Info files.") - -(defun helm-get-info-files () - "Return list of Info files to use for `helm-info'. - -Elements of the list are strings of Info file names without -extensions (e.g. \"emacs\" for file \"emacs.info.gz\"). Info -files are found by searching directories in -`Info-directory-list'." - (let ((files (cl-loop for d in (or Info-directory-list - Info-default-directory-list) - when (file-directory-p d) - append (directory-files d nil "\\.info")))) - (helm-fast-remove-dups - (cl-loop for f in files collect - (helm-file-name-sans-extension f)) - :test 'equal))) - -(defcustom helm-default-info-index-list - (helm-get-info-files) - "Info files to search in with `helm-info'." - :group 'helm-info - :type '(repeat (choice string)) - :set 'helm-info-index-set) - -(defun helm-info-search-index (candidate) - "Search the index of CANDIDATE's Info file using the function -helm-info-." - (let ((helm-info-function - (intern-soft (concat "helm-info-" candidate)))) - (when (fboundp helm-info-function) - (funcall helm-info-function) - (ring-insert helm-info-searched candidate)))) - -(defun helm-def-source--info-files () - "Return a `helm' source for Info files." - (helm-build-sync-source "Helm Info" - :candidates - (lambda () (copy-sequence helm-default-info-index-list)) - :candidate-number-limit 999 - :candidate-transformer - (lambda (candidates) - (sort candidates #'string-lessp)) - :nomark t - :action '(("Search index" . helm-info-search-index)))) - -;;;###autoload -(defun helm-info () - "Preconfigured `helm' for searching Info files' indices." - (interactive) - (let ((default (unless (ring-empty-p helm-info-searched) - (ring-ref helm-info-searched 0)))) - (helm :sources (helm-def-source--info-files) - :buffer "*helm Info*" - :preselect (and default - (concat "\\_<" (regexp-quote default) "\\_>"))))) - -;;;; Info at point - -;; `helm-info-at-point' is the main entry point here. It searches for the -;; symbol at point through the Info sources defined in -;; `helm-info-default-sources' and jumps to it. - -(defvar helm-info--pages-cache nil - "Cache for all Info pages on the system.") - -(defvar helm-source-info-pages - (helm-build-sync-source "Info Pages" - :init #'helm-info-pages-init - :candidates (lambda () helm-info--pages-cache) - :action '(("Show with Info" .(lambda (node-str) - (info (replace-regexp-in-string - "^[^:]+: " "" node-str))))) - :requires-pattern 2) - "Helm source for Info pages.") - -(defun helm-info-pages-init () - "Collect candidates for initial Info node Top." - (if helm-info--pages-cache - helm-info--pages-cache - (let ((info-topic-regexp "\\* +\\([^:]+: ([^)]+)[^.]*\\)\\.") - topics) - (with-temp-buffer - (Info-find-node "dir" "top") - (goto-char (point-min)) - (while (re-search-forward info-topic-regexp nil t) - (push (match-string-no-properties 1) topics)) - (kill-buffer)) - (setq helm-info--pages-cache topics)))) - -;;;###autoload -(defun helm-info-at-point () - "Preconfigured `helm' for searching info at point. -With a prefix-arg insert symbol at point." - (interactive) - (helm :sources helm-info-default-sources - :buffer "*helm info*")) - -(provide 'helm-info) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-info.el ends here diff --git a/elpa/helm-20160217.958/helm-locate.el b/elpa/helm-20160217.958/helm-locate.el deleted file mode 100644 index a29bf3ed..00000000 --- a/elpa/helm-20160217.958/helm-locate.el +++ /dev/null @@ -1,410 +0,0 @@ -;;; helm-locate.el --- helm interface for locate. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;; NOTE for WINDOZE users: -;; You have to install Everything with his command line interface here: -;; http://www.voidtools.com/download.php - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-types) -(require 'helm-help) - - -(defgroup helm-locate nil - "Locate related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-locate-db-file-regexp "m?locate\.db$" - "Default regexp to match locate database. -If nil Search in all files." - :type 'string - :group 'helm-locate) - -(defcustom helm-ff-locate-db-filename "locate.db" - "The basename of the locatedb file you use locally in your directories. -When this is set and `helm' find such a file in the directory from -where you launch locate, it will use this file and will not prompt you -for a db file. -Note that this happen only when locate is launched with a prefix arg." - :group 'helm-locate - :type 'string) - -(defcustom helm-locate-command nil - "A list of arguments for locate program. -Normally the default value should work on any system. - -If nil it will be calculated when `helm-locate' startup -with these default values for different systems: - -Gnu/linux: \"locate %s -e --regex %s\" -berkeley-unix: \"locate %s %s\" -windows-nt: \"es %s %s\" -Others: \"locate %s %s\" - -This string will be passed to format so it should end with `%s'. -The first format spec is used for the \"-i\" value of locate/es, -So don't set it directly but use `helm-locate-case-fold-search' -for this. -The \"-r\" option must be the last option, however if not specified you will -be able to specify it during helm invocation by prefixing the pattern -you enter with \"-r\"." - :type 'string - :group 'helm-locate) - -(defcustom helm-locate-create-db-command - "updatedb -l 0 -o %s -U %s" - "Command used to create a locale locate db file." - :type 'string - :group 'helm-locate) - -(defcustom helm-locate-case-fold-search helm-case-fold-search - "It have the same meaning as `helm-case-fold-search'. -The -i option of locate will be used depending of value of -`helm-pattern' when this is set to 'smart. -When nil \"-i\" will not be used at all. -and when non--nil it will always be used. -NOTE: the -i option of the \"es\" command used on windows does -the opposite of \"locate\" command." - :group 'helm-locate - :type 'symbol) - -(defcustom helm-locate-fuzzy-match nil - "Enable fuzzy matching in `helm-locate'." - :group 'helm-locate - :type 'boolean) - -(defcustom helm-locate-project-list nil - "A list of directories, your projects. -When set, allow browsing recursively files in all -directories of this list with `helm-projects-find-files'." - :group 'helm-locate - :type '(repeat string)) - - -(defvar helm-generic-files-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "C-]") 'helm-ff-run-toggle-basename) - (define-key map (kbd "C-s") 'helm-ff-run-grep) - (define-key map (kbd "M-g s") 'helm-ff-run-grep) - (define-key map (kbd "M-g z") 'helm-ff-run-zgrep) - (define-key map (kbd "M-g p") 'helm-ff-run-pdfgrep) - (define-key map (kbd "C-c g") 'helm-ff-run-gid) - (define-key map (kbd "M-R") 'helm-ff-run-rename-file) - (define-key map (kbd "M-C") 'helm-ff-run-copy-file) - (define-key map (kbd "M-B") 'helm-ff-run-byte-compile-file) - (define-key map (kbd "M-L") 'helm-ff-run-load-file) - (define-key map (kbd "M-S") 'helm-ff-run-symlink-file) - (define-key map (kbd "M-H") 'helm-ff-run-hardlink-file) - (define-key map (kbd "M-D") 'helm-ff-run-delete-file) - (define-key map (kbd "C-=") 'helm-ff-run-ediff-file) - (define-key map (kbd "C-c =") 'helm-ff-run-ediff-merge-file) - (define-key map (kbd "C-c o") 'helm-ff-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-ff-run-switch-other-frame) - (define-key map (kbd "M-i") 'helm-ff-properties-persistent) - (define-key map (kbd "C-c C-x") 'helm-ff-run-open-file-externally) - (define-key map (kbd "C-c X") 'helm-ff-run-open-file-with-default-tool) - (define-key map (kbd "M-.") 'helm-ff-run-etags) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-c @") 'helm-ff-run-insert-org-link) - map) - "Generic Keymap for files.") - - -(defface helm-locate-finish - '((t (:foreground "Green"))) - "Face used in mode line when locate process is finish." - :group 'helm-locate) - - -(defun helm-ff-find-locatedb (&optional from-ff) - "Try to find if a local locatedb file is available. -The search is done in `helm-ff-default-directory' or -fall back to `default-directory' if FROM-FF is nil." - (when helm-ff-locate-db-filename - (cond ((and helm-ff-default-directory - from-ff - (file-exists-p (expand-file-name - helm-ff-locate-db-filename - helm-ff-default-directory)) - (expand-file-name - helm-ff-locate-db-filename - helm-ff-default-directory))) - ((and (not from-ff) - (file-exists-p (expand-file-name - helm-ff-locate-db-filename - default-directory)) - (expand-file-name - helm-ff-locate-db-filename - default-directory)))))) - - -(defun helm-locate-create-db-default-function (db-name directory) - "Default function used to create a locale locate db file. -Argument DB-NAME name of the db file. -Argument DIRECTORY root of file system subtree to scan." - (format helm-locate-create-db-command db-name directory)) - -(defvar helm-locate-create-db-function - #'helm-locate-create-db-default-function - "Function used to create a locale locate db file. -It should receive the same arguments as -`helm-locate-create-db-default-function'.") - -(defun helm-locate-1 (&optional localdb init from-ff default) - "Generic function to run Locate. -Prefix arg LOCALDB when (4) search and use a local locate db file when it -exists or create it, when (16) force update of existing db file -even if exists. -It have no effect when locate command is 'es'. -INIT is a string to use as initial input in prompt. -See `helm-locate-with-db' and `helm-locate'." - (require 'helm-mode) - (helm-locate-set-command) - (let ((pfn (lambda (candidate) - (if (file-directory-p candidate) - (message "Error: The locate Db should be a file") - (if (= (shell-command - (funcall helm-locate-create-db-function - candidate - helm-ff-default-directory)) - 0) - (message "New locatedb file `%s' created" candidate) - (error "Failed to create locatedb file `%s'" candidate))))) - (locdb (and localdb - (not (string-match "^es" helm-locate-command)) - (or (and (equal '(4) localdb) - (helm-ff-find-locatedb from-ff)) - (helm-read-file-name - "Create Locate Db file: " - :initial-input (expand-file-name "locate.db" - (or helm-ff-default-directory - default-directory)) - :preselect helm-locate-db-file-regexp - :test (lambda (x) - (if helm-locate-db-file-regexp - ;; Select only locate db files and directories - ;; to allow navigation. - (or (string-match - helm-locate-db-file-regexp x) - (file-directory-p x)) - x))))))) - (when (and locdb (or (equal localdb '(16)) - (not (file-exists-p locdb)))) - (funcall pfn locdb)) - (helm-locate-with-db (and localdb locdb) init default))) - -(defun helm-locate-set-command () - "Setup `helm-locate-command' if not already defined." - (unless helm-locate-command - (setq helm-locate-command - (cl-case system-type - (gnu/linux "locate %s -e --regex %s") - (berkeley-unix "locate %s %s") - (windows-nt "es %s %s") - (t "locate %s %s"))))) - -(defvar helm-file-name-history nil) -(defun helm-locate-with-db (&optional db initial-input default) - "Run locate -d DB. -If DB is not given or nil use locate without -d option. -Argument DB can be given as a string or list of db files. -Argument INITIAL-INPUT is a string to use as initial-input. -See also `helm-locate'." - (require 'helm-files) - (when (and db (stringp db)) (setq db (list db))) - (helm-locate-set-command) - (let ((helm-locate-command - (if db - (replace-regexp-in-string - "locate" - (format "locate -d %s" - (mapconcat 'identity - ;; Remove eventually - ;; marked directories by error. - (cl-loop for i in db - unless (file-directory-p i) - collect i) ":")) - helm-locate-command) - helm-locate-command))) - (setq helm-file-name-history (mapcar 'helm-basename file-name-history)) - (helm :sources 'helm-source-locate - :buffer "*helm locate*" - :ff-transformer-show-only-basename nil - :input initial-input - :default default - :history 'helm-file-name-history))) - -(defun helm-locate-init () - "Initialize async locate process for `helm-source-locate'." - (let* ((locate-is-es (string-match "\\`es" helm-locate-command)) - (real-locate (string-match "\\`locate" helm-locate-command)) - (case-sensitive-flag (if locate-is-es "-i" "")) - (ignore-case-flag (if (or locate-is-es - (not real-locate)) "" "-i")) - (args (split-string helm-pattern " ")) - (cmd (format helm-locate-command - (cl-case helm-locate-case-fold-search - (smart (let ((case-fold-search nil)) - (if (string-match "[[:upper:]]" helm-pattern) - case-sensitive-flag - ignore-case-flag))) - (t (if helm-locate-case-fold-search - ignore-case-flag - case-sensitive-flag))) - (concat - ;; The pattern itself. - (shell-quote-argument (car args)) " " - ;; Possible locate args added - ;; after pattern, don't quote them. - (mapconcat 'identity (cdr args) " "))))) - (helm-log "Starting helm-locate process") - (helm-log "Command line used was:\n\n%s" - (concat ">>> " (propertize cmd 'face 'font-lock-comment-face) "\n\n")) - (prog1 - (start-process-shell-command - "locate-process" helm-buffer - cmd) - (set-process-sentinel - (get-buffer-process helm-buffer) - (lambda (process event) - (let* ((err (process-exit-status process)) - (noresult (= err 1))) - (cond (noresult - (with-helm-buffer - (unless (cdr helm-sources) - (insert (concat "* Exit with code 1, no result found," - " command line was:\n\n " - cmd))))) - ((string= event "finished\n") - (with-helm-window - (setq mode-line-format - '(" " mode-line-buffer-identification " " - (:eval (format "L%s" (helm-candidate-number-at-point))) " " - (:eval (propertize - (format "[Locate process finished - (%s results)]" - (max (1- (count-lines - (point-min) (point-max))) - 0)) - 'face 'helm-locate-finish)))) - (force-mode-line-update))) - (t - (helm-log "Error: Locate %s" - (replace-regexp-in-string "\n" "" event)))))))))) - -(defclass helm-locate-source (helm-source-async helm-type-file) - ((init :initform 'helm-locate-set-command) - (candidates-process :initform 'helm-locate-init) - (requires-pattern :initform 3) - (history :initform 'helm-file-name-history) - (persistent-action :initform 'helm-ff-kill-or-find-buffer-fname) - (candidate-number-limit :initform 9999))) - -(defvar helm-source-locate - (helm-make-source "Locate" 'helm-locate-source - :pattern-transformer 'helm-locate-pattern-transformer)) - -(defun helm-locate-pattern-transformer (pattern) - (if helm-locate-fuzzy-match - (cond ((string-match - " " (replace-regexp-in-string " -b" "" pattern)) pattern) - ((string-match "\\([^ ]*\\) -b" pattern) - (concat (helm--mapconcat-pattern - (match-string 1 pattern)) " -b")) - (t (helm--mapconcat-pattern pattern))) - pattern)) - -(defun helm-locate-find-dbs-in-projects (&optional update) - (let* ((pfn (lambda (candidate directory) - (unless (= (shell-command - (funcall helm-locate-create-db-function - candidate - directory)) - 0) - (error "Failed to create locatedb file `%s'" candidate))))) - (cl-loop for p in helm-locate-project-list - for db = (expand-file-name - helm-ff-locate-db-filename - (file-name-as-directory p)) - if (and (null update) (file-exists-p db)) - collect db - else do (funcall pfn db p) - and collect db))) - -;;;###autoload -(defun helm-projects-find-files (update) - "Find files with locate in `helm-locate-project-list'. -With a prefix arg refresh the database in each project." - (interactive "P") - (helm-locate-set-command) - (cl-assert (and (string-match-p "\\`locate" helm-locate-command) - (executable-find "updatedb")) - nil "Unsupported locate version") - (let ((dbs (helm-locate-find-dbs-in-projects update))) - (if dbs - (helm-locate-with-db dbs) - (user-error "No projects found, please setup `helm-locate-project-list'")))) - -;;;###autoload -(defun helm-locate-read-file-name (prompt) - (let* ((src `((name . "Locate read fname") - (init . helm-locate-set-command) - (candidates-process . helm-locate-init) - (action . identity) - (requires-pattern . 3) - (history . ,'helm-file-name-history) - (candidate-transformer . (helm-skip-boring-files - helm-highlight-files)) - (candidate-number-limit . 9999) - (no-matchplugin)))) - (or (helm :sources src - :ff-transformer-show-only-basename nil - :prompt prompt - :buffer "*helm locate read fname*" - :resume 'noresume) - (keyboard-quit)))) - -;;;###autoload -(defun helm-locate (arg) - "Preconfigured `helm' for Locate. -Note: you can add locate options after entering pattern. -See 'man locate' for valid options and also `helm-locate-command'. - -You can specify a local database with prefix argument ARG. -With two prefix arg, refresh the current local db or create it -if it doesn't exists. - -To create a user specific db, use -\"updatedb -l 0 -o db_path -U directory\". -Where db_path is a filename matched by -`helm-locate-db-file-regexp'." - (interactive "P") - (setq helm-ff-default-directory default-directory) - (helm-locate-1 arg nil nil (thing-at-point 'filename))) - -(provide 'helm-locate) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-locate.el ends here diff --git a/elpa/helm-20160217.958/helm-man.el b/elpa/helm-20160217.958/helm-man.el deleted file mode 100644 index 8ba57953..00000000 --- a/elpa/helm-20160217.958/helm-man.el +++ /dev/null @@ -1,115 +0,0 @@ -;;; helm-man.el --- Man and woman UI -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) - -(defvar woman-topic-all-completions) -(defvar woman-manpath) -(defvar woman-path) -(defvar woman-expanded-directory-path) -(declare-function woman-file-name "woman.el" (topic &optional re-cache)) -(declare-function woman-file-name-all-completions "woman.el" (topic)) -(declare-function Man-getpage-in-background "man.el" (topic)) -(declare-function woman-expand-directory-path "woman.el" (path-dirs path-regexps)) -(declare-function woman-topic-all-completions "woman.el" (path)) -(declare-function helm-generic-sort-fn "helm-utils.el" (S1 S2)) - -(defgroup helm-man nil - "Man and Woman applications for helm." - :group 'helm) - -(defcustom helm-man-or-woman-function 'Man-getpage-in-background - "Default command to display a man page." - :group 'helm-man - :type '(radio :tag "Preferred command to display a man page" - (const :tag "Man" Man-getpage-in-background) - (const :tag "Woman" woman))) - -(defcustom helm-man-format-switches "-l %s" - "Arguments to pass to the `manual-entry' function. -Arguments are passed to `manual-entry' with `format.' -Default use \"-l\" which may not be supported on old man versions, -in this case use \"%s\" as value to pass only the filename as argument. -See Issue #1035" - :group 'helm-man - :type 'string) - -;; Internal -(defvar helm-man--pages nil - "All man pages on system. -Will be calculated the first time you invoke helm with this -source.") - -(defun helm-man-default-action (candidate) - "Default action for jumping to a woman or man page from helm." - (let ((wfiles (mapcar - 'car (woman-file-name-all-completions candidate)))) - (condition-case nil - (if (> (length wfiles) 1) - (let ((file (helm-comp-read - "ManFile: " wfiles :must-match t))) - (if (eq helm-man-or-woman-function 'Man-getpage-in-background) - (manual-entry (format helm-man-format-switches file)) - (woman-find-file file))) - (funcall helm-man-or-woman-function candidate)) - ;; If woman is unable to format correctly - ;; use man instead. - (error (kill-buffer) ; Kill woman buffer. - (Man-getpage-in-background candidate))))) - -(defun helm-man--init () - (require 'woman) - (require 'helm-utils) - (unless helm-man--pages - (setq woman-expanded-directory-path - (woman-expand-directory-path woman-manpath woman-path)) - (setq woman-topic-all-completions - (woman-topic-all-completions woman-expanded-directory-path)) - (setq helm-man--pages (mapcar 'car woman-topic-all-completions))) - (helm-init-candidates-in-buffer 'global helm-man--pages)) - -(defvar helm-source-man-pages - (helm-build-in-buffer-source "Manual Pages" - :init #'helm-man--init - :persistent-action #'ignore - :filtered-candidate-transformer - (lambda (candidates _source) - (sort candidates #'helm-generic-sort-fn)) - :action '(("Display Man page" . helm-man-default-action)))) - -;;;###autoload -(defun helm-man-woman (arg) - "Preconfigured `helm' for Man and Woman pages. -With a prefix arg reinitialize the cache." - (interactive "P") - (when arg (setq helm-man--pages nil)) - (helm :sources 'helm-source-man-pages - :buffer "*Helm man woman*")) - -(provide 'helm-man) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-man.el ends here diff --git a/elpa/helm-20160217.958/helm-misc.el b/elpa/helm-20160217.958/helm-misc.el deleted file mode 100644 index b297a62e..00000000 --- a/elpa/helm-20160217.958/helm-misc.el +++ /dev/null @@ -1,334 +0,0 @@ -;;; helm-misc.el --- Various functions for helm -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-types) - -(declare-function display-time-world-display "time.el") -(defvar display-time-world-list) - - -(defgroup helm-misc nil - "Various Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-time-zone-home-location "Paris" - "The time zone of your home" - :group 'helm-misc - :type 'string) - -(defcustom helm-timezone-actions - '(("Set timezone env (TZ)" . (lambda (candidate) - (setenv "TZ" candidate)))) - "Actions for helm-timezone." - :group 'helm-misc - :type '(alist :key-type string :value-type function)) - -(defcustom helm-mini-default-sources '(helm-source-buffers-list - helm-source-recentf - helm-source-buffer-not-found) - "Default sources list used in `helm-mini'." - :group 'helm-misc - :type '(repeat (choice symbol))) - -(defface helm-time-zone-current - '((t (:foreground "green"))) - "Face used to colorize current time in `helm-world-time'." - :group 'helm-misc) - -(defface helm-time-zone-home - '((t (:foreground "red"))) - "Face used to colorize home time in `helm-world-time'." - :group 'helm-misc) - - - -;;; Latex completion -(defvar LaTeX-math-menu) -(defun helm-latex-math-candidates () - "Collect candidates for latex math completion." - (cl-loop for i in (cddr LaTeX-math-menu) - for elm = (cl-loop for s in i when (vectorp s) - collect (cons (aref s 0) (aref s 1))) - append elm)) - -(defvar helm-source-latex-math - '((name . "Latex Math Menu") - (init . (lambda () - (with-helm-current-buffer - (LaTeX-math-mode 1)))) - (candidate-number-limit . 9999) - (candidates . helm-latex-math-candidates) - (action . (lambda (candidate) - (call-interactively candidate))))) - - -;;; Jabber Contacts (jabber.el) -(defun helm-jabber-online-contacts () - "List online Jabber contacts." - (with-no-warnings - (cl-loop for item in (jabber-concat-rosters) - when (get item 'connected) - collect - (if (get item 'name) - (cons (get item 'name) item) - (cons (symbol-name item) item))))) - -(defvar helm-source-jabber-contacts - '((name . "Jabber Contacts") - (init . (lambda () (require 'jabber))) - (candidates . (lambda () (mapcar 'car (helm-jabber-online-contacts)))) - (action . (lambda (x) - (jabber-chat-with - (jabber-read-account) - (symbol-name - (cdr (assoc x (helm-jabber-online-contacts))))))))) - -;;; World time -;; -(defun helm-time-zone-transformer (candidates _source) - (cl-loop for i in candidates - for (z . p) in display-time-world-list - collect - (cons - (cond ((string-match (format-time-string "%H:%M" (current-time)) i) - (propertize i 'face 'helm-time-zone-current)) - ((string-match helm-time-zone-home-location i) - (propertize i 'face 'helm-time-zone-home)) - (t i)) - z))) - -(defvar helm-source-time-world - (helm-build-in-buffer-source "Time World List" - :data (lambda () - (with-temp-buffer - (display-time-world-display display-time-world-list) - (buffer-string))) - :action 'helm-timezone-actions - :filtered-candidate-transformer 'helm-time-zone-transformer)) - -;;; LaCarte -;; -;; -(declare-function lacarte-get-overall-menu-item-alist "ext:lacarte.el" (&optional MAPS)) - -(defun helm-lacarte-candidate-transformer (cands) - (mapcar (lambda (cand) - (let* ((item (car cand)) - (match (string-match "[^>] \\((.*)\\)$" item))) - (when match - (put-text-property (match-beginning 1) (match-end 1) - 'face 'helm-M-x-key item)) - cand)) - cands)) - -(defclass helm-lacarte (helm-source-sync helm-type-command) - ((init :initform (lambda () (require 'lacarte))) - (candidates :initform 'helm-lacarte-get-candidates) - (candidate-transformer :initform 'helm-lacarte-candidate-transformer) - (candidate-number-limit :initform 9999))) - -(defun helm-lacarte-get-candidates (&optional maps) - "Extract candidates for menubar using lacarte.el. -See http://www.emacswiki.org/cgi-bin/wiki/download/lacarte.el. -Optional argument MAPS is a list specifying which keymaps to use: it -can contain the symbols `local', `global', and `minor', mean the -current local map, current global map, and all current minor maps." - (with-helm-current-buffer - ;; FIXME: do we still need to remove possible '(nil) candidates. - (lacarte-get-overall-menu-item-alist maps))) - -;;;###autoload -(defun helm-browse-menubar () - "Preconfigured helm to the menubar using lacarte.el." - (interactive) - (require 'lacarte) - (helm :sources (mapcar - (lambda (spec) (helm-make-source (car spec) 'helm-lacarte - :candidates (lambda () (helm-lacarte-get-candidates (cdr spec))))) - '(("Major Mode" . (local)) - ("Minor Modes" . (minor)) - ("Global Map" . (global)))) - :buffer "*helm lacarte*")) - -(defun helm-call-interactively (cmd-or-name) - "Execute CMD-OR-NAME as Emacs command. -It is added to `extended-command-history'. -`helm-current-prefix-arg' is used as the command's prefix argument." - (setq extended-command-history - (cons (helm-stringify cmd-or-name) - (delete (helm-stringify cmd-or-name) extended-command-history))) - (let ((current-prefix-arg helm-current-prefix-arg) - (cmd (helm-symbolify cmd-or-name))) - (if (stringp (symbol-function cmd)) - (execute-kbd-macro (symbol-function cmd)) - (setq this-command cmd) - (call-interactively cmd)))) - -;;; Minibuffer History -;; -;; -(defvar helm-source-minibuffer-history - (helm-build-sync-source "Minibuffer History" - :header-name (lambda (name) - (format "%s (%s)" name minibuffer-history-variable)) - :candidates - (lambda () - (let ((history (cl-loop for i in - (symbol-value minibuffer-history-variable) - unless (string= "" i) collect i))) - (if (consp (car history)) - (mapcar 'prin1-to-string history) - history))) - :migemo t - :multiline t - :action (lambda (candidate) - (delete-minibuffer-contents) - (insert candidate)))) - -;;; Shell history -;; -;; -(defun helm-comint-input-ring-action (candidate) - "Default action for comint history." - (with-helm-current-buffer - (delete-region (comint-line-beginning-position) (point-max)) - (insert candidate))) - -(defvar helm-source-comint-input-ring - '((name . "Comint history") - (candidates . (lambda () - (with-helm-current-buffer - (ring-elements comint-input-ring)))) - (action . helm-comint-input-ring-action)) - "Source that provide helm completion against `comint-input-ring'.") - - -;;; Helm ratpoison UI -;; -;; -(defvar helm-source-ratpoison-commands - '((name . "Ratpoison Commands") - (init . helm-ratpoison-commands-init) - (candidates-in-buffer) - (action ("Execute the command" . helm-ratpoison-commands-execute)) - (display-to-real . helm-ratpoison-commands-display-to-real) - (candidate-number-limit))) - -(defun helm-ratpoison-commands-init () - (unless (helm-candidate-buffer) - (with-current-buffer (helm-candidate-buffer 'global) - ;; with ratpoison prefix key - (save-excursion - (call-process "ratpoison" nil (current-buffer) nil "-c" "help")) - (while (re-search-forward "^\\([^ ]+\\) \\(.+\\)$" nil t) - (replace-match " \\1: \\2")) - (goto-char (point-max)) - ;; direct binding - (save-excursion - (call-process "ratpoison" nil (current-buffer) nil "-c" "help top")) - (while (re-search-forward "^\\([^ ]+\\) \\(.+\\)$" nil t) - (replace-match "\\1: \\2"))))) - -(defun helm-ratpoison-commands-display-to-real (display) - (and (string-match ": " display) - (substring display (match-end 0)))) - -(defun helm-ratpoison-commands-execute (candidate) - (call-process "ratpoison" nil nil nil "-ic" candidate)) - -;;; Helm stumpwm UI -;; -;; -(defvar helm-source-stumpwm-commands - '((name . "Stumpwm Commands") - (init . helm-stumpwm-commands-init) - (candidates-in-buffer) - (action ("Execute the command" . helm-stumpwm-commands-execute)) - (candidate-number-limit))) - -(defun helm-stumpwm-commands-init () - (with-current-buffer (helm-candidate-buffer 'global) - (save-excursion - (call-process "stumpish" nil (current-buffer) nil "commands")) - (while (re-search-forward "[ ]*\\([^ ]+\\)[ ]*\n?" nil t) - (replace-match "\n\\1\n")) - (delete-blank-lines) - (sort-lines nil (point-min) (point-max)) - (goto-char (point-max)))) - -(defun helm-stumpwm-commands-execute (candidate) - (call-process "stumpish" nil nil nil candidate)) - -;;;###autoload -(defun helm-world-time () - "Preconfigured `helm' to show world time. -Default action change TZ environment variable locally to emacs." - (interactive) - (helm-other-buffer 'helm-source-time-world "*helm world time*")) - -;;;###autoload -(defun helm-insert-latex-math () - "Preconfigured helm for latex math symbols completion." - (interactive) - (helm-other-buffer 'helm-source-latex-math "*helm latex*")) - -;;;###autoload -(defun helm-ratpoison-commands () - "Preconfigured `helm' to execute ratpoison commands." - (interactive) - (helm-other-buffer 'helm-source-ratpoison-commands - "*helm ratpoison commands*")) - -;;;###autoload -(defun helm-stumpwm-commands() - "Preconfigured helm for stumpwm commands." - (interactive) - (helm-other-buffer 'helm-source-stumpwm-commands - "*helm stumpwm commands*")) - -;;;###autoload -(defun helm-minibuffer-history () - "Preconfigured `helm' for `minibuffer-history'." - (interactive) - (let ((enable-recursive-minibuffers t)) - (helm :sources 'helm-source-minibuffer-history - :buffer "*helm minibuffer-history*"))) - -;;;###autoload -(defun helm-comint-input-ring () - "Preconfigured `helm' that provide completion of `comint' history." - (interactive) - (when (derived-mode-p 'comint-mode) - (helm :sources 'helm-source-comint-input-ring - :input (buffer-substring-no-properties (comint-line-beginning-position) - (point-at-eol)) - :buffer "*helm comint history*"))) - - -(provide 'helm-misc) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-misc.el ends here diff --git a/elpa/helm-20160217.958/helm-mode.el b/elpa/helm-20160217.958/helm-mode.el deleted file mode 100644 index c68fa61d..00000000 --- a/elpa/helm-20160217.958/helm-mode.el +++ /dev/null @@ -1,1212 +0,0 @@ -;;; helm-mode.el --- Enable helm completion everywhere. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-files) - - -(defgroup helm-mode nil - "Enable helm completion." - :group 'helm) - -(defcustom helm-completing-read-handlers-alist - '((describe-function . helm-completing-read-symbols) - (describe-variable . helm-completing-read-symbols) - (describe-symbol . helm-completing-read-symbols) - (debug-on-entry . helm-completing-read-symbols) - (find-function . helm-completing-read-symbols) - (disassemble . helm-completing-read-symbols) - (trace-function . helm-completing-read-symbols) - (trace-function-foreground . helm-completing-read-symbols) - (trace-function-background . helm-completing-read-symbols) - (find-tag . helm-completing-read-with-cands-in-buffer) - (ffap-alternate-file . nil) - (tmm-menubar . nil) - (find-file . nil) - (execute-extended-command . nil)) - "Alist of handlers to replace `completing-read', `read-file-name' in `helm-mode'. -Each entry is a cons cell like \(emacs_command . completing-read_handler\) -where key and value are symbols. - -Each key is an Emacs command that use originaly `completing-read'. - -Each value maybe an helm function that take same arguments as -`completing-read' plus NAME and BUFFER, where NAME is the name of the new -helm source and BUFFER the name of the buffer we will use. -This function prefix name must start by \"helm\". - -See `helm-completing-read-symbols' for example. - -Note that this function will be reused for ALL the `completing-read' -of this command, so it should handle all cases, e.g -If first `completing-read' complete against symbols and -second `completing-read' should handle only buffer, -your specialized function should handle the both. - -If the value of an entry is nil completion will fall back to -emacs vanilla behavior. -e.g If you want to disable helm completion for `describe-function': -\(describe-function . nil\). - -Ido is also supported, you can use `ido-completing-read' and -`ido-read-file-name' as value of an entry or just 'ido. -e.g ido completion for `find-file': -\(find-file . ido\) -same as -\(find-file . ido-read-file-name\) -Note that you don't need to enable `ido-mode' for this to work." - :group 'helm-mode - :type '(alist :key-type symbol :value-type symbol)) - -(defcustom helm-comp-read-case-fold-search helm-case-fold-search - "Default Local setting of `helm-case-fold-search' for `helm-comp-read'. -See `helm-case-fold-search' for more info." - :group 'helm-mode - :type 'symbol) - -(defcustom helm-mode-handle-completion-in-region t - "Whether to replace or not `completion-in-region-function'. -This enable support for `completing-read-multiple' and `completion-at-point' -when non--nil." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-reverse-history t - "Display history source after current source in `helm-mode' handled commands." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-no-completion-in-region-in-modes nil - "A list of modes that do not want helm for `completion-in-region'." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-completion-in-region-fuzzy-match nil - "Whether `helm-completion-in-region' use fuzzy matching or not. -Affect among others `completion-at-point', `completing-read-multiple'." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-fuzzy-match nil - "Enable fuzzy matching in `helm-mode' globally. -Note that this will slow down completion and modify sorting -which is unwanted in many places. -This affect only the functions with completing-read helmized by helm-mode. -To fuzzy match `completion-at-point' and friends see -`helm-completion-in-region-fuzzy-match'." - :group 'helm-mode - :type 'boolean) - -(defcustom helm-mode-minibuffer-setup-hook-black-list '(minibuffer-completion-help) - "Incompatible `minibuffer-setup-hook' functions go here. -A list of symbols. -Helm-mode is rejecting all lambda's, byte-code fns -and all functions belonging in this list from `minibuffer-setup-hook'." - :group 'helm-mode - :type '(repeat (choice symbol))) - - -(defvar helm-comp-read-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-cr-empty-string) - (define-key map (kbd "") 'helm-cr-empty-string) - map) - "Keymap for `helm-comp-read'.") - -(defvar helm-comp-read-must-match-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") - 'helm-confirm-and-exit-minibuffer) - map) - "Keymap use as must-match-map in `helm-comp-read' and `helm-read-file-name'.") - - -;;; Internal -;; -;; -;; Flag to know if `helm-pattern' have been added -;; to candidate list in `helm-comp-read'. -(defvar helm-cr-unknown-pattern-flag nil) - - -;;; Helm `completing-read' replacement -;; -;; -(defun helm-cr-empty-string () - "Return empty string." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (_candidate) - (identity ""))))) -(put 'helm-cr-empty-string 'helm-only t) - -(defun helm-mode--keyboard-quit () - ;; Use this instead of `keyboard-quit' - ;; to avoid deactivating mark in current-buffer. - (let ((debug-on-quit nil)) - (signal 'quit nil))) - -(cl-defun helm-comp-read-get-candidates (collection &optional test sort-fn alistp (input "")) - "Convert COLLECTION to list removing elements that don't match TEST. -See `helm-comp-read' about supported COLLECTION arguments. - -SORT-FN is a predicate to sort COLLECTION. - -ALISTP when non--nil will not use `all-completions' to collect -candidates because it doesn't handle alists correctly for helm. -i.e In `all-completions' the car of each pair is used as value. -In helm we want to use the cdr instead like \(display . real\), -so we return the alist as it is with no transformation by all-completions. - -e.g - -\(setq A '((a . 1) (b . 2) (c . 3))) -==>((a . 1) (b . 2) (c . 3)) -\(helm-comp-read \"test: \" A :alistp nil - :exec-when-only-one t - :initial-input \"a\") -==>\"a\" Which is not what we expect. - -\(helm-comp-read \"test: \" A :alistp t - :exec-when-only-one t - :initial-input \"1\") -==>\"1\" - -See docstring of `all-completions' for more info. - -If COLLECTION is an `obarray', a TEST should be needed. See `obarray'." - ;; Ensure COLLECTION is computed from `helm-current-buffer' - ;; because some functions used as COLLECTION work - ;; only in the context of current-buffer (Issue #1030) . - (with-helm-current-buffer - (let ((cands - (cond ((vectorp collection) - (all-completions input collection test)) - ((and (symbolp collection) (boundp collection) - ;; Issue #324 history is let-bounded and given - ;; quoted as hist argument of completing-read. - ;; See example in `rcirc-browse-url'. - (symbolp (symbol-value collection))) - nil) - ;; When collection is a symbol, most of the time - ;; it should be a symbol used as a minibuffer-history. - ;; The value of this symbol in this case return a list - ;; of string which maybe are converted later as symbol - ;; in special cases. - ;; we treat here commandp as a special case as it return t - ;; also with a string unless its last arg is provided. - ;; Also, the history collections generally collect their - ;; elements as string, so intern them to call predicate. - ((and (symbolp collection) (boundp collection) test) - (let ((predicate `(lambda (elm) - (condition-case err - (if (eq (quote ,test) 'commandp) - (funcall (quote ,test) (intern elm)) - (funcall (quote ,test) elm)) - (wrong-type-argument - (funcall (quote ,test) (intern elm))))))) - (all-completions input (symbol-value collection) predicate))) - ((and (symbolp collection) (boundp collection)) - (all-completions input (symbol-value collection))) - ;; Normally file completion should not be handled here, - ;; but special cases like `find-file-at-point' do it. - ;; Handle here specially such cases. - ((and (functionp collection) minibuffer-completing-file-name) - (cl-loop for f in (funcall collection helm-pattern test t) - unless (member f '("./" "../")) - if (string-match ffap-url-regexp helm-pattern) - collect f - else - collect (concat (file-name-as-directory - (helm-basedir helm-pattern)) f))) - ((functionp collection) - (funcall collection input test t)) - ((and alistp test) - (cl-loop for i in collection when (funcall test i) collect i)) - (alistp collection) - (t (all-completions input collection test))))) - (if sort-fn (sort cands sort-fn) cands)))) - -(defun helm-cr-default-transformer (candidates _source) - "Default filter candidate function for `helm-comp-read'." - (cl-loop for c in candidates - for cand = (if (stringp c) (replace-regexp-in-string "\\s\\" "" c) c) - for pat = (replace-regexp-in-string "\\s\\" "" helm-pattern) - if (and (equal cand pat) helm-cr-unknown-pattern-flag) - collect - (cons (concat (propertize - " " 'display - (propertize "[?]" 'face 'helm-ff-prefix)) - c) - c) - into lst - else collect (if (and (stringp c) - (string-match "\n" c)) - (cons (replace-regexp-in-string "\n" "->" c) c) - c) - into lst - finally return (helm-fast-remove-dups lst :test 'equal))) - -(defun helm-comp-read--move-to-first-real-candidate () - (helm-aif (helm-get-selection nil 'withprop) - (when (string= (get-text-property 0 'display it) "[?]") - (helm-next-line)))) - -;;;###autoload -(cl-defun helm-comp-read (prompt collection - &key - test - initial-input - default - preselect - (buffer "*Helm Completions*") - must-match - fuzzy - reverse-history - (requires-pattern 0) - history - input-history - (case-fold helm-comp-read-case-fold-search) - (del-input t) - (persistent-action nil) - (persistent-help "DoNothing") - (mode-line helm-comp-read-mode-line) - help-message - (keymap helm-comp-read-map) - (name "Helm Completions") - candidates-in-buffer - exec-when-only-one - quit-when-no-cand - volatile - sort - (fc-transformer 'helm-cr-default-transformer) - hist-fc-transformer - marked-candidates - nomark - (alistp t) - (candidate-number-limit helm-candidate-number-limit)) - "Read a string in the minibuffer, with helm completion. - -It is helm `completing-read' equivalent. - -- PROMPT is the prompt name to use. - -- COLLECTION can be a list, vector, obarray or hash-table. - It can be also a function that receives three arguments: - the values string, predicate and t. See `all-completions' for more details. - -Keys description: - -- TEST: A predicate called with one arg i.e candidate. - -- INITIAL-INPUT: Same as input arg in `helm'. - -- PRESELECT: See preselect arg of `helm'. - -- DEFAULT: This option is used only for compatibility with regular - Emacs `completing-read' (Same as DEFAULT arg of `completing-read'). - -- BUFFER: Name of helm-buffer. - -- MUST-MATCH: Candidate selected must be one of COLLECTION. - -- FUZZY: Enable fuzzy matching. - -- REVERSE-HISTORY: When non--nil display history source after current - source completion. - -- REQUIRES-PATTERN: Same as helm attribute, default is 0. - -- HISTORY: A list containing specific history, default is nil. - When it is non--nil, all elements of HISTORY are displayed in - a special source before COLLECTION. - -- INPUT-HISTORY: A symbol. the minibuffer input history will be - stored there, if nil or not provided, `minibuffer-history' - will be used instead. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- DEL-INPUT: Boolean, when non--nil (default) remove the partial - minibuffer input from HISTORY is present. - -- PERSISTENT-ACTION: A function called with one arg i.e candidate. - -- PERSISTENT-HELP: A string to document PERSISTENT-ACTION. - -- MODE-LINE: A string or list to display in mode line. - Default is `helm-comp-read-mode-line'. - -- KEYMAP: A keymap to use in this `helm-comp-read'. - (the keymap will be shared with history source) - -- NAME: The name related to this local source. - -- EXEC-WHEN-ONLY-ONE: Bound `helm-execute-action-at-once-if-one' - to non--nil. (possibles values are t or nil). - -- VOLATILE: Use volatile attribute. - -- SORT: A predicate to give to `sort' e.g `string-lessp' - Use this only on small data as it is ineficient. - If you want to sort faster add a sort function to - FC-TRANSFORMER. - Note that FUZZY when enabled is already providing a sort function. - -- FC-TRANSFORMER: A `filtered-candidate-transformer' function - or a list of functions. - -- HIST-FC-TRANSFORMER: A `filtered-candidate-transformer' - function for the history source. - -- MARKED-CANDIDATES: If non--nil return candidate or marked candidates as a list. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: \(default is non--nil\) See `helm-comp-read-get-candidates'. - -- CANDIDATES-IN-BUFFER: when non--nil use a source build with - `helm-source-in-buffer' which is much faster. - Argument VOLATILE have no effect when CANDIDATES-IN-BUFFER is non--nil. - -Any prefix args passed during `helm-comp-read' invocation will be recorded -in `helm-current-prefix-arg', otherwise if prefix args were given before -`helm-comp-read' invocation, the value of `current-prefix-arg' will be used. -That's mean you can pass prefix args before or after calling a command -that use `helm-comp-read' See `helm-M-x' for example." - - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - (let ((action-fn `(("Sole action (Identity)" - . (lambda (candidate) - (if ,marked-candidates - (helm-marked-candidates) - (identity candidate))))))) - ;; Assume completion have been already required, - ;; so always use 'confirm. - (when (eq must-match 'confirm-after-completion) - (setq must-match 'confirm)) - (let* ((minibuffer-completion-confirm must-match) - (must-match-map (when must-match helm-comp-read-must-match-map)) - (loc-map (if must-match-map - (make-composed-keymap - must-match-map (or keymap helm-map)) - (or keymap helm-map))) - (minibuffer-completion-predicate test) - (minibuffer-completion-table collection) - (helm-read-file-name-mode-line-string - (replace-regexp-in-string "helm-maybe-exit-minibuffer" - "helm-confirm-and-exit-minibuffer" - helm-read-file-name-mode-line-string)) - (get-candidates (lambda () - (let ((cands (helm-comp-read-get-candidates - collection test sort alistp))) - (setq helm-cr-unknown-pattern-flag nil) - (unless (or (eq must-match t) - (string= helm-pattern "") - (assoc helm-pattern cands) - (assoc (intern helm-pattern) cands) - (member helm-pattern cands) - (member (downcase helm-pattern) cands) - (member (upcase helm-pattern) cands)) - (setq cands (append (list - ;; Unquote helm-pattern - ;; when it is added - ;; as candidate. - (replace-regexp-in-string - "\\s\\" "" helm-pattern)) - cands)) - (setq helm-cr-unknown-pattern-flag t)) - ;; When DEFAULT is initially a list, candidates - ;; come already computed with DEFAULT list appended, - ;; and DEFAULT is set to the car of this list. - (if (and default (not (string= default ""))) - (delq nil (cons default (delete default cands))) - cands)))) - (history-get-candidates (lambda () - (let ((all (helm-comp-read-get-candidates - history test nil alistp))) - (when all - (delete - "" - (helm-fast-remove-dups - (if (and default (not (string= default ""))) - (delq nil (cons default - (delete default all))) - all) - :test 'equal)))))) - (src-hist (helm-build-sync-source (format "%s History" name) - :candidates history-get-candidates - :fuzzy-match fuzzy - :filtered-candidate-transformer - (append '((lambda (candidates sources) - (cl-loop for i in candidates - ;; Input is added to history in completing-read's - ;; and may be regexp-quoted, so unquote it. - for cand = (replace-regexp-in-string "\\s\\" "" i) - collect cand))) - (and hist-fc-transformer (helm-mklist hist-fc-transformer))) - :persistent-action persistent-action - :persistent-help persistent-help - :mode-line mode-line - :help-message help-message - :action action-fn)) - (src (helm-build-sync-source name - :candidates get-candidates - :filtered-candidate-transformer fc-transformer - :requires-pattern requires-pattern - :persistent-action persistent-action - :persistent-help persistent-help - :fuzzy-match fuzzy - :mode-line mode-line - :help-message help-message - :action action-fn)) - (src-1 (helm-build-in-buffer-source name - :data get-candidates - :filtered-candidate-transformer fc-transformer - :requires-pattern requires-pattern - :persistent-action persistent-action - :fuzzy-match fuzzy - :persistent-help persistent-help - :mode-line mode-line - :help-message help-message - :action action-fn)) - (src-list (list src-hist - (if candidates-in-buffer - src-1 - (if volatile - (append src '((volatile))) - src)))) - (helm-execute-action-at-once-if-one exec-when-only-one) - (helm-quit-if-no-candidate quit-when-no-cand) - result) - (when nomark - (setq src-list (cl-loop for src in src-list - collect (cons '(nomark) src)))) - (when reverse-history (setq src-list (nreverse src-list))) - (add-hook 'helm-after-update-hook 'helm-comp-read--move-to-first-real-candidate) - (unwind-protect - (setq result (helm - :sources src-list - :input initial-input - :default default - :preselect preselect - :prompt prompt - :resume 'noresume - :candidate-number-limit candidate-number-limit - :case-fold-search case-fold - :keymap loc-map - :history (and (symbolp input-history) input-history) - :buffer buffer)) - (remove-hook 'helm-after-update-hook 'helm-comp-read--move-to-first-real-candidate)) - ;; Avoid adding an incomplete input to history. - (when (and result history del-input) - (cond ((and (symbolp history) ; History is a symbol. - (not (symbolp (symbol-value history)))) ; Fix Issue #324. - ;; Be sure history is not a symbol with a nil value. - (helm-aif (symbol-value history) (setcar it result))) - ((consp history) ; A list with a non--nil value. - (setcar history result)) - (t ; Possibly a symbol with a nil value. - (set history (list result))))) - (or - result - (when (and (eq helm-exit-status 0) - (eq must-match 'confirm)) - ;; Return empty string only if it is the DEFAULT - ;; value and helm-pattern is empty. - ;; otherwise return helm-pattern - (if (and (string= helm-pattern "") default) - default (identity helm-pattern))) - (unless (or (eq helm-exit-status 1) - must-match) ; FIXME this should not be needed now. - default) - (helm-mode--keyboard-quit))))) - -;; Generic completing-read -;; -;; Support also function as collection. -;; e.g M-x man is supported. -;; Support hash-table and vectors as collection. -;; NOTE: -;; Some crap emacs functions may not be supported -;; like ffap-alternate-file (bad use of completing-read) -;; and maybe others. -;; Provide a mode `helm-mode' which turn on -;; helm in all `completing-read' and `read-file-name' in Emacs. -;; -(defvar helm-completion-mode-string " Helm") - -(defvar helm-completion-mode-quit-message - "Helm completion disabled") - -(defvar helm-completion-mode-start-message - "Helm completion enabled") - -;;; Specialized handlers -;; -;; -(defun helm-completing-read-symbols - (prompt _collection test _require-match init - hist default _inherit-input-method name buffer) - "Specialized function for fast symbols completion in `helm-mode'." - (require 'helm-elisp) - (or - (helm - :sources (helm-build-in-buffer-source name - :init (lambda () - (helm-apropos-init (lambda (x) - (and (funcall test x) - (not (keywordp x)))) - (or (car-safe default) default))) - :filtered-candidate-transformer 'helm-apropos-default-sort-fn - :fuzzy-match helm-mode-fuzzy-match - :persistent-action - (lambda (candidate) - (helm-lisp-completion-persistent-action - candidate name)) - :persistent-help (helm-lisp-completion-persistent-help)) - :prompt prompt - :buffer buffer - :input init - :history hist - :resume 'noresume - :default (or default "")) - (helm-mode--keyboard-quit))) - - -;;; Generic completing read -;; -;; -(defun helm-completing-read-default-1 - (prompt collection test require-match - init hist default _inherit-input-method - name buffer &optional cands-in-buffer exec-when-only-one) - "Call `helm-comp-read' with same args as `completing-read'. -Extra optional arg CANDS-IN-BUFFER mean use `candidates-in-buffer' -method which is faster. -It should be used when candidate list don't need to rebuild dynamically." - (let ((history (or (car-safe hist) hist)) - (alistp cands-in-buffer) - (initial-input (helm-aif (pcase init - ((pred (stringp)) init) - ;; INIT is a cons cell. - (`(,l . ,_ll) l)) - (if minibuffer-completing-file-name it - (regexp-quote it))))) - (when (and default (listp default)) - ;; When DEFAULT is a list move the list on head of COLLECTION - ;; and set it to its car. #bugfix `grep-read-files'. - (setq collection - ;; COLLECTION is maybe a function or a table. - (append default - (helm-comp-read-get-candidates - collection test nil (listp collection)))) - ;; Ensure `all-completions' will not be used - ;; a second time to recompute COLLECTION [1]. - (setq alistp t) - (setq default (car default))) - (helm-comp-read - prompt collection - :test test - :history history - :reverse-history helm-mode-reverse-history - :input-history history - :must-match require-match - :alistp alistp ; Ensure `all-completions' is used when non-nil [1]. - :name name - :requires-pattern (if (and (string= default "") - (or (eq require-match 'confirm) - (eq require-match - 'confirm-after-completion))) - 1 0) - :candidates-in-buffer cands-in-buffer - :exec-when-only-one exec-when-only-one - :fuzzy helm-mode-fuzzy-match - :buffer buffer - ;; If DEF is not provided, fallback to empty string - ;; to avoid `thing-at-point' to be appended on top of list - :default (or default "") - ;; Fail with special characters (e.g in gnus "nnimap+gmail:") - ;; if regexp-quote is not used. - ;; when init is added to history, it will be unquoted by - ;; helm-comp-read. - :initial-input initial-input))) - -(defun helm-completing-read-with-cands-in-buffer - (prompt collection test require-match - init hist default inherit-input-method - name buffer) - "Same as `helm-completing-read-default-1' but use candidates-in-buffer." - ;; Some commands like find-tag may use `read-file-name' from inside - ;; the calculation of collection. in this case it clash with - ;; candidates-in-buffer that reuse precedent data (files) which is wrong. - ;; So (re)calculate collection outside of main helm-session. - (let ((cands (all-completions (or init "") collection))) - (helm-completing-read-default-1 prompt cands test require-match - init hist default inherit-input-method - name buffer t))) - -(cl-defun helm--completing-read-default - (prompt collection &optional - predicate require-match - initial-input hist def - inherit-input-method) - "An helm replacement of `completing-read'. -This function should be used only as a `completing-read-function'. - -Don't use it directly, use instead `helm-comp-read' in your programs. - -See documentation of `completing-read' and `all-completions' for details." - (let* ((current-command (or (helm-this-command) this-command)) - (str-command (helm-symbol-name current-command)) - (buf-name (format "*helm-mode-%s*" str-command)) - (entry (assq current-command - helm-completing-read-handlers-alist)) - (def-com (cdr-safe entry)) - (str-defcom (and def-com (helm-symbol-name def-com))) - (def-args (list prompt collection predicate require-match - initial-input hist def inherit-input-method)) - ;; Append the two extra args needed to set the buffer and source name - ;; in helm specialized functions. - (any-args (append def-args (list str-command buf-name))) - helm-completion-mode-start-message ; Be quiet - helm-completion-mode-quit-message - ;; Be sure this pesty *completion* buffer doesn't popup. - ;; Note: `minibuffer-with-setup-hook' may setup a lambda - ;; calling `minibuffer-completion-help' or other minibuffer - ;; functions we DONT WANT here, in these cases removing the hook - ;; (a symbol) have no effect. Issue #448. - ;; Because `minibuffer-completion-table' and - ;; `minibuffer-completion-predicate' are not bound - ;; anymore here, these functions should have no effect now, - ;; except in some rare cases like in `woman-file-name', - ;; so remove all incompatible functions - ;; from `minibuffer-setup-hook' (Issue #1205, #1240). - ;; otherwise helm have not the time to close its initial session. - (minibuffer-setup-hook - (cl-loop for h in minibuffer-setup-hook - unless (or (consp h) ; a lambda. - (byte-code-function-p h) - (memq h helm-mode-minibuffer-setup-hook-black-list)) - collect h)) - ;; Disable hack that could be used before `completing-read'. - ;; i.e (push ?\t unread-command-events). - unread-command-events) - (when (eq def-com 'ido) (setq def-com 'ido-completing-read)) - (unless (or (not entry) def-com) - ;; An entry in *read-handlers-alist exists but have - ;; a nil value, so we exit from here, disable `helm-mode' - ;; and run the command again with it original behavior. - ;; `helm-mode' will be restored on exit. - (cl-return-from helm--completing-read-default - (unwind-protect - (progn - (helm-mode -1) - (apply completing-read-function def-args)) - (helm-mode 1)))) - ;; If we use now `completing-read' we MUST turn off `helm-mode' - ;; to avoid infinite recursion and CRASH. It will be reenabled on exit. - (when (or (eq def-com 'completing-read) - ;; All specialized functions are prefixed by "helm" - (and (stringp str-defcom) - (not (string-match "^helm" str-defcom)))) - (helm-mode -1)) - (unwind-protect - (cond (;; An helm specialized function exists, run it. - (and def-com helm-mode) - (apply def-com any-args)) - (;; Try to handle `ido-completing-read' everywhere. - (and def-com (eq def-com 'ido-completing-read)) - (setcar (memq collection def-args) - (all-completions "" collection predicate)) - (apply def-com def-args)) - (;; User set explicitely `completing-read' or something similar - ;; in *read-handlers-alist, use this with exactly the same - ;; args as in `completing-read'. - ;; If we are here `helm-mode' is now disabled. - def-com - (apply def-com def-args)) - (t ; Fall back to classic `helm-comp-read'. - (helm-completing-read-default-1 - prompt collection predicate require-match - initial-input hist def inherit-input-method - str-command buf-name))) - (helm-mode 1) - ;; When exiting minibuffer, `this-command' is set to - ;; `helm-exit-minibuffer', which is unwanted when starting - ;; on another `completing-read', so restore `this-command' to - ;; initial value when exiting. - (setq this-command current-command)))) - -;;; Generic read-file-name -;; -;; -;;;###autoload -(cl-defun helm-read-file-name - (prompt - &key - (name "Read File Name") - (initial-input default-directory) - (buffer "*Helm file completions*") - test - (case-fold helm-file-name-case-fold-search) - preselect - history - must-match - default - marked-candidates - (candidate-number-limit helm-ff-candidate-number-limit) - nomark - (alistp t) - (persistent-action 'helm-find-files-persistent-action) - (persistent-help "Hit1 Expand Candidate, Hit2 or (C-u) Find file") - (mode-line helm-read-file-name-mode-line-string)) - "Read a file name with helm completion. -It is helm `read-file-name' emulation. - -Argument PROMPT is the default prompt to use. - -Keys description: - -- NAME: Source name, default to \"Read File Name\". - -- INITIAL-INPUT: Where to start read file name, default to `default-directory'. - -- BUFFER: `helm-buffer' name default to \"*Helm Completions*\". - -- TEST: A predicate called with one arg 'candidate'. - -- CASE-FOLD: Same as `helm-case-fold-search'. - -- PRESELECT: helm preselection. - -- HISTORY: Display HISTORY in a special source. - -- MUST-MATCH: Can be 'confirm, nil, or t. - -- MARKED-CANDIDATES: When non--nil return a list of marked candidates. - -- NOMARK: When non--nil don't allow marking candidates. - -- ALISTP: Don't use `all-completions' in history (take effect only on history). - -- PERSISTENT-ACTION: a persistent action function. - -- PERSISTENT-HELP: persistent help message. - -- MODE-LINE: A mode line message, default is `helm-read-file-name-mode-line-string'." - - (when (get-buffer helm-action-buffer) - (kill-buffer helm-action-buffer)) - ;; Assume completion have been already required, - ;; so always use 'confirm. - (when (eq must-match 'confirm-after-completion) - (setq must-match 'confirm)) - (let* ((action-fn `(("Sole action (Identity)" - . (lambda (candidate) - (if ,marked-candidates - (helm-marked-candidates :with-wildcard t) - (identity candidate)))))) - ;; Be sure we don't erase the underlying minibuffer if some. - (helm-ff-auto-update-initial-value - (and helm-ff-auto-update-initial-value - (not (minibuffer-window-active-p (minibuffer-window))))) - helm-full-frame - (hist (and history (helm-comp-read-get-candidates - history nil nil alistp))) - (minibuffer-completion-confirm must-match) - (must-match-map (when must-match helm-comp-read-must-match-map)) - (cmap (if must-match-map - (make-composed-keymap - must-match-map helm-read-file-map) - helm-read-file-map)) - (minibuffer-completion-predicate test) - (minibuffer-completing-file-name t) - (helm-read-file-name-mode-line-string - (replace-regexp-in-string "helm-maybe-exit-minibuffer" - "helm-confirm-and-exit-minibuffer" - helm-read-file-name-mode-line-string)) - (src-list - (list - ;; History source. - (helm-build-sync-source (format "%s History" name) - :header-name (lambda (name) - (concat name (substitute-command-keys - helm-find-files-doc-header))) - :mode-line mode-line - :candidates hist - :nohighlight t - :persistent-action persistent-action - :persistent-help persistent-help - :nomark nomark - :action action-fn) - ;; Other source. - (helm-build-sync-source name - :header-name (lambda (name) - (concat name (substitute-command-keys - helm-find-files-doc-header))) - :init (lambda () - (setq helm-ff-auto-update-flag - helm-ff-auto-update-initial-value) - (setq helm-ff--auto-update-state - helm-ff-auto-update-flag)) - :mode-line mode-line - :help-message 'helm-read-file-name-help-message - :nohighlight t - :candidates - (lambda () - (append (and (not (file-exists-p helm-pattern)) - (list helm-pattern)) - (if test - (cl-loop with hn = (helm-ff-tramp-hostnames) - for i in (helm-find-files-get-candidates - must-match) - when (or (member i hn) ; A tramp host - (funcall test i)) ; Test ok - collect i) - (helm-find-files-get-candidates must-match)))) - :filtered-candidate-transformer 'helm-ff-sort-candidates - :filter-one-by-one 'helm-ff-filter-candidate-one-by-one - :persistent-action persistent-action - :persistent-help persistent-help - :volatile t - :nomark nomark - :action action-fn))) - ;; Helm result. - (result (helm - :sources src-list - :input (expand-file-name initial-input) - :prompt prompt - :keymap cmap - :candidate-number-limit candidate-number-limit - :resume 'noresume - :case-fold-search case-fold - :default default - :buffer buffer - :preselect preselect))) - (or - (cond ((and result (stringp result) - (string= result "") "")) - ((and result - (stringp result) - (file-equal-p result initial-input) - default) - (if (listp default) (car default) default)) - ((and result (stringp result)) - (expand-file-name result)) - ((and result (listp result)) - (mapcar #'expand-file-name result)) - (t result)) - (when (and (not (string= helm-pattern "")) - (eq helm-exit-status 0) - (eq must-match 'confirm)) - (identity helm-pattern)) - (helm-mode--keyboard-quit)))) - -(defun helm-mode--default-filename (fname dir initial) - (unless dir (setq dir default-directory)) - (unless (file-name-absolute-p dir) - (setq dir (expand-file-name dir))) - (unless (or fname (consp fname)) - (setq fname (expand-file-name - (or initial buffer-file-name dir) - dir))) - (if (and fname (consp fname)) - (setq fname (cl-loop for f in fname - collect (expand-file-name f dir))) - (if (file-name-absolute-p fname) - fname (expand-file-name fname dir)))) - -(cl-defun helm--generic-read-file-name - (prompt &optional dir default-filename mustmatch initial predicate) - "Generic helm replacement of `read-file-name'. -Don't use it directly, use instead `helm-read-file-name' in your programs." - (let* ((init (or initial dir default-directory)) - (current-command (or (helm-this-command) this-command)) - (str-command (helm-symbol-name current-command)) - (helm--file-completion-sources - (cons str-command - (remove str-command helm--file-completion-sources))) - (buf-name (format "*helm-mode-%s*" str-command)) - (entry (assq current-command - helm-completing-read-handlers-alist)) - (def-com (cdr-safe entry)) - (str-defcom (and def-com (helm-symbol-name def-com))) - (def-args (list prompt dir default-filename mustmatch initial predicate)) - ;; Append the two extra args needed to set the buffer and source name - ;; in helm specialized functions. - (any-args (append def-args (list str-command buf-name))) - (ido-state ido-mode) - helm-completion-mode-start-message ; Be quiet - helm-completion-mode-quit-message ; Same here - fname) - (setq default-filename (helm-mode--default-filename - default-filename dir initial)) - ;; Some functions that normally call `completing-read' can switch - ;; brutally to `read-file-name' (e.g find-tag), in this case - ;; the helm specialized function will fail because it is build - ;; for `completing-read', so set it to 'incompatible to be sure - ;; we switch to `helm-read-file-name' and don't try to call it - ;; with wrong number of args. - (when (eq def-com 'ido) - (setq def-com 'ido-read-file-name) (ido-mode 1)) - (when (and def-com (> (length (help-function-arglist def-com)) 8)) - (setq def-com 'incompatible)) - (unless (or (not entry) def-com) - (cl-return-from helm--generic-read-file-name - (unwind-protect - (progn - (helm-mode -1) - (apply read-file-name-function def-args)) - (helm-mode 1)))) - ;; If we use now `read-file-name' we MUST turn off `helm-mode' - ;; to avoid infinite recursion and CRASH. It will be reenabled on exit. - (when (or (eq def-com 'read-file-name) - (eq def-com 'ido-read-file-name) - (and (stringp str-defcom) - (not (string-match "^helm" str-defcom)))) - (helm-mode -1)) - (unwind-protect - (setq fname - (cond (;; A specialized function exists, run it - ;; with the two extra args specific to helm.. - (and def-com helm-mode - (not (eq def-com 'ido-read-file-name)) - (not (eq def-com 'incompatible))) - (apply def-com any-args)) - (;; Def-com value is `ido-read-file-name' - ;; run it with default args. - (and def-com (eq def-com 'ido-read-file-name)) - (ido-mode 1) - (apply def-com def-args)) - (;; Def-com value is `read-file-name' - ;; run it with default args. - (eq def-com 'read-file-name) - (apply def-com def-args)) - (t ; Fall back to classic `helm-read-file-name'. - (helm-read-file-name - prompt - :name str-command - :buffer buf-name - :default default-filename - :initial-input (expand-file-name init dir) - :alistp nil - :must-match mustmatch - :test predicate)))) - (helm-mode 1) - (ido-mode (if ido-state 1 -1)) - ;; Same comment as in `helm--completing-read-default'. - (setq this-command current-command)) - (if (eq predicate 'file-directory-p) ; Using `read-directory-name'. - (file-name-as-directory fname) fname))) - -(defun helm-mode--advice-lisp--local-variables (old--fn &rest args) - (ignore-errors - (apply old--fn args))) - -(defun helm--completion-in-region (start end collection &optional predicate) - "Helm replacement of `completion--in-region'. -Can be used as value for `completion-in-region-function'." - (cl-declare (special require-match prompt)) - (if (memq major-mode helm-mode-no-completion-in-region-in-modes) - (funcall helm--old-completion-in-region-function - start end collection predicate) - (advice-add - 'lisp--local-variables - :around #'helm-mode--advice-lisp--local-variables) - (unwind-protect - (let* ((enable-recursive-minibuffers t) - (input (buffer-substring-no-properties start end)) - (current-command (or (helm-this-command) this-command)) - (str-command (helm-symbol-name current-command)) - (buf-name (format "*helm-mode-%s*" str-command)) - (require-match (or (and (boundp 'require-match) require-match) - minibuffer-completion-confirm - ;; If prompt have not been propagated here, that's - ;; probably mean we have no prompt and we are in - ;; completion-at-point or friend, so use a non--nil - ;; value for require-match. - (not (boundp 'prompt)))) - ;; `completion-extra-properties' is let-bounded in `completion-at-point'. - ;; `afun' is a closure to call against each string in `data'. - ;; it provide the annotation info for each string. - ;; e.g "foo" => "foo " where foo is a function. - ;; See Issue #407. - (afun (plist-get completion-extra-properties :annotation-function)) - (metadata (completion-metadata - (buffer-substring-no-properties start (point)) - collection predicate)) - (data (completion-all-completions - (buffer-substring start end) - collection - predicate - (- (point) start) - metadata)) - ;; `completion-all-completions' store the base-size in the last `cdr', - ;; so data looks like this: '(a b c d . 0) and (last data) == (d . 0). - (last-data (last data)) - (base-size (helm-aif (cdr (last data)) - (prog1 it - (setcdr last-data nil)) - 0)) - (init-space-suffix (unless (or helm-completion-in-region-fuzzy-match - (string-suffix-p " " input)) - " ")) - (file-comp-p (or (eq (completion-metadata-get metadata 'category) 'file) - (helm-mode--in-file-completion-p) - ;; Assume that when `afun' and `predicate' are null - ;; we are in filename completion. - (and (null afun) (null predicate)))) - ;; Completion-at-point and friends have no prompt. - (result (if (stringp data) - data - (helm-comp-read - (or (and (boundp 'prompt) prompt) "Pattern: ") - (if file-comp-p - (cl-loop for f in data unless - (string-match "\\`\\.\\{1,2\\}/\\'" f) - collect f) - (if afun - (mapcar (lambda (s) - (let ((ann (funcall afun s))) - (if ann - (cons - (concat - s - (propertize - " " 'display - (propertize - ann - 'face 'completions-annotations))) - s) - s))) - data) - data)) - :name str-command - :fuzzy helm-completion-in-region-fuzzy-match - :nomark t - :initial-input - (cond ((and file-comp-p - (not (string-match "/\\'" input))) - (concat (helm-basename input) - (unless (string= input "") - init-space-suffix))) - ((string-match "/\\'" input) nil) - ((or (null require-match) - (stringp require-match)) - input) - (t (concat input init-space-suffix))) - :buffer buf-name - :fc-transformer (append (list 'helm-cr-default-transformer) - (unless helm-completion-in-region-fuzzy-match - (list (lambda (candidates _source) - (sort candidates 'helm-generic-sort-fn))))) - :exec-when-only-one t - :quit-when-no-cand - (lambda () - ;; Delay message to overwrite "Quit". - (run-with-timer - 0.01 nil - (lambda () - (message "[No matches]"))) - t) ; exit minibuffer immediately. - :must-match require-match)))) - (when result - (choose-completion-string - result (current-buffer) - (list (+ start base-size) end) - completion-list-insert-choice-function))) - (advice-remove 'lisp--local-variables - #'helm-mode--advice-lisp--local-variables)))) - -(defun helm-mode--in-file-completion-p () - (with-helm-current-buffer - (run-hook-with-args-until-success 'file-name-at-point-functions))) - -(when (boundp 'completion-in-region-function) - (defconst helm--old-completion-in-region-function completion-in-region-function)) - -;;;###autoload -(define-minor-mode helm-mode - "Toggle generic helm completion. - -All functions in Emacs that use `completing-read' -or `read-file-name' and friends will use helm interface -when this mode is turned on. -However you can modify this behavior for functions of your choice -with `helm-completing-read-handlers-alist'. - -Called with a positive arg, turn on unconditionally, with a -negative arg turn off. -You can turn it on with `helm-mode'. - -Some crap emacs functions may not be supported, -e.g `ffap-alternate-file' and maybe others -You can add such functions to `helm-completing-read-handlers-alist' -with a nil value. - -Note: This mode is incompatible with Emacs23." - :group 'helm-mode - :global t - :lighter helm-completion-mode-string - (cl-assert (boundp 'completing-read-function) nil - "`helm-mode' not available, upgrade to Emacs-24") - (if helm-mode - (if (fboundp 'add-function) - (progn - (add-function :override completing-read-function - #'helm--completing-read-default) - (add-function :override read-file-name-function - #'helm--generic-read-file-name) - (when helm-mode-handle-completion-in-region - (add-function :override completion-in-region-function - #'helm--completion-in-region))) - (setq completing-read-function 'helm--completing-read-default - read-file-name-function 'helm--generic-read-file-name) - (when (and (boundp 'completion-in-region-function) - helm-mode-handle-completion-in-region) - (setq completion-in-region-function #'helm--completion-in-region)) - (message helm-completion-mode-start-message)) - (if (fboundp 'remove-function) - (progn - (remove-function completing-read-function #'helm--completing-read-default) - (remove-function read-file-name-function #'helm--generic-read-file-name) - (remove-function completion-in-region-function #'helm--completion-in-region)) - (setq completing-read-function (and (fboundp 'completing-read-default) - 'completing-read-default) - read-file-name-function (and (fboundp 'read-file-name-default) - 'read-file-name-default)) - (when (and (boundp 'completion-in-region-function) - (boundp 'helm--old-completion-in-region-function)) - (setq completion-in-region-function helm--old-completion-in-region-function)) - (message helm-completion-mode-quit-message)))) - -(provide 'helm-mode) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-mode.el ends here diff --git a/elpa/helm-20160217.958/helm-multi-match.el b/elpa/helm-20160217.958/helm-multi-match.el deleted file mode 100644 index 3e740da2..00000000 --- a/elpa/helm-20160217.958/helm-multi-match.el +++ /dev/null @@ -1,373 +0,0 @@ -;;; helm-multi-match.el --- Multiple regexp matching methods for helm -*- lexical-binding: t -*- - -;; Original Author: rubikitch - -;; Copyright (C) 2008 ~ 2011 rubikitch -;; Copyright (C) 2011 ~ 2015 Thierry Volpiatto - -;; Author: Thierry Volpiatto -;; URL: http://github.com/emacs-helm/helm - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm-lib) - - -(defgroup helm-multi-match nil - "Helm multi match." - :group 'helm) - -(defcustom helm-mm-matching-method 'multi3 - "Matching method for helm match plugin. -You can set here different methods to match candidates in helm. -Here are the possible value of this symbol and their meaning: -- multi1: Respect order, prefix of pattern must match. -- multi2: Same but with partial match. -- multi3: The best, multiple regexp match, allow negation. -- multi3p: Same but prefix must match. - -Default is multi3, you should keep this for a better experience. - -Note that multi1 and multi3p are incompatible with fuzzy matching -in file completion and by the way fuzzy matching will be disabled there -when these options are used." - :type '(radio :tag "Matching methods for helm" - (const :tag "Multiple regexp 1 ordered with prefix match" multi1) - (const :tag "Multiple regexp 2 ordered with partial match" multi2) - (const :tag "Multiple regexp 3 matching no order, partial, best." multi3) - (const :tag "Multiple regexp 3p matching with prefix match" multi3p)) - :group 'helm-multi-match) - - -;; Internal -(defconst helm-mm-default-match-functions - '(helm-mm-exact-match helm-mm-match)) -(defconst helm-mm-default-search-functions - '(helm-mm-exact-search helm-mm-search)) - - -;;; Build regexps -;; -;; -(defvar helm-mm-space-regexp "[\\ ] " - "Regexp to represent space itself in multiple regexp match.") - -(defun helm-mm-split-pattern (pattern) - "Split PATTERN if it contain spaces and return resulting list. -If spaces in PATTERN are escaped, don't split at this place. -i.e \"foo bar\"=> (\"foo\" \"bar\") -but \"foo\ bar\"=> (\"foobar\")." - (if (string= pattern "") - '("") - (cl-loop for s in (split-string - (replace-regexp-in-string helm-mm-space-regexp - "\000\000" pattern) - " " t) - collect (replace-regexp-in-string "\000\000" " " s)))) - -(defun helm-mm-1-make-regexp (pattern) - "Replace spaces in PATTERN with \"\.*\"." - (mapconcat 'identity (helm-mm-split-pattern pattern) ".*")) - - -;;; Exact match. -;; -;; -;; Internal. -(defvar helm-mm-exact-pattern-str nil) -(defvar helm-mm-exact-pattern-real nil) - -(defun helm-mm-exact-get-pattern (pattern) - (unless (equal pattern helm-mm-exact-pattern-str) - (setq helm-mm-exact-pattern-str pattern - helm-mm-exact-pattern-real (concat "\n" pattern "\n"))) - helm-mm-exact-pattern-real) - - -(cl-defun helm-mm-exact-match (str &optional (pattern helm-pattern)) - (if case-fold-search - (progn - (setq str (downcase str) - pattern (downcase pattern)) - (string= str pattern)) - (string= str pattern))) - -(defun helm-mm-exact-search (pattern &rest _ignore) - (and (search-forward (helm-mm-exact-get-pattern pattern) nil t) - (forward-line -1))) - - -;;; Prefix match -;; -;; -;; Internal -(defvar helm-mm-prefix-pattern-str nil) -(defvar helm-mm-prefix-pattern-real nil) - -(defun helm-mm-prefix-get-pattern (pattern) - (unless (equal pattern helm-mm-prefix-pattern-str) - (setq helm-mm-prefix-pattern-str pattern - helm-mm-prefix-pattern-real (concat "\n" pattern))) - helm-mm-prefix-pattern-real) - -(defun helm-mm-prefix-match (str &optional pattern) - ;; In filename completion basename and basedir may be - ;; quoted, unquote them for string comparison (Issue #1283). - (setq pattern (replace-regexp-in-string - "\\\\" "" (or pattern helm-pattern))) - (let ((len (length pattern))) - (and (<= len (length str)) - (string= (substring str 0 len) pattern )))) - -(defun helm-mm-prefix-search (pattern &rest _ignore) - (search-forward (helm-mm-prefix-get-pattern pattern) nil t)) - - -;;; Multiple regexp patterns 1 (order is preserved / prefix). -;; -;; -;; Internal -(defvar helm-mm-1-pattern-str nil) -(defvar helm-mm-1-pattern-real nil) - -(defun helm-mm-1-get-pattern (pattern) - (unless (equal pattern helm-mm-1-pattern-str) - (setq helm-mm-1-pattern-str pattern - helm-mm-1-pattern-real - (concat "^" (helm-mm-1-make-regexp pattern)))) - helm-mm-1-pattern-real) - -(cl-defun helm-mm-1-match (str &optional (pattern helm-pattern)) - (string-match (helm-mm-1-get-pattern pattern) str)) - -(defun helm-mm-1-search (pattern &rest _ignore) - (re-search-forward (helm-mm-1-get-pattern pattern) nil t)) - - -;;; Multiple regexp patterns 2 (order is preserved / partial). -;; -;; -;; Internal -(defvar helm-mm-2-pattern-str nil) -(defvar helm-mm-2-pattern-real nil) - -(defun helm-mm-2-get-pattern (pattern) - (unless (equal pattern helm-mm-2-pattern-str) - (setq helm-mm-2-pattern-str pattern - helm-mm-2-pattern-real - (concat "^.*" (helm-mm-1-make-regexp pattern)))) - helm-mm-2-pattern-real) - -(cl-defun helm-mm-2-match (str &optional (pattern helm-pattern)) - (string-match (helm-mm-2-get-pattern pattern) str)) - -(defun helm-mm-2-search (pattern &rest _ignore) - (re-search-forward (helm-mm-2-get-pattern pattern) nil t)) - - -;;; Multiple regexp patterns 3 (permutation). -;; -;; -;; Internal -(defvar helm-mm-3-pattern-str nil) -(defvar helm-mm-3-pattern-list nil) - -(defun helm-mm-3-get-patterns (pattern) - "Return `helm-mm-3-pattern-list', a list of predicate/regexp cons cells. -e.g ((identity . \"foo\") (identity . \"bar\")). -This is done only if `helm-mm-3-pattern-str' is same as PATTERN." - (unless (equal pattern helm-mm-3-pattern-str) - (setq helm-mm-3-pattern-str pattern - helm-mm-3-pattern-list - (helm-mm-3-get-patterns-internal pattern))) - helm-mm-3-pattern-list) - -(defun helm-mm-3-get-patterns-internal (pattern) - "Return a list of predicate/regexp cons cells. -e.g ((identity . \"foo\") (identity . \"bar\"))." - (unless (string= pattern "") - (cl-loop for pat in (helm-mm-split-pattern pattern) - collect (if (string= "!" (substring pat 0 1)) - (cons 'not (substring pat 1)) - (cons 'identity pat))))) - -(cl-defun helm-mm-3-match (str &optional (pattern helm-pattern)) - "Check if PATTERN match STR. -When PATTERN contain a space, it is splitted and matching is done -with the several resulting regexps against STR. -e.g \"bar foo\" will match \"foobar\" and \"barfoo\". -Argument PATTERN, a string, is transformed in a list of -cons cell with `helm-mm-3-get-patterns' if it contain a space. -e.g \"foo bar\"=>((identity . \"foo\") (identity . \"bar\")). -Then each predicate of cons cell(s) is called with regexp of same -cons cell against STR (a candidate). -i.e (identity (string-match \"foo\" \"foo bar\")) => t." - (let ((pat (helm-mm-3-get-patterns pattern))) - (cl-loop for (predicate . regexp) in pat - always (funcall predicate - (condition-case _err - ;; FIXME: Probably do nothing when - ;; using fuzzy leaving the job - ;; to the fuzzy fn. - (string-match regexp str) - (invalid-regexp nil)))))) - -(defun helm-mm-3-search-base (pattern searchfn1 searchfn2) - "Try to find PATTERN in `helm-buffer' with SEARCHFN1 and SEARCHFN2. -This is the search function for `candidates-in-buffer' enabled sources. -Use the same method as `helm-mm-3-match' except it search in buffer -instead of matching on a string. -i.e (identity (re-search-forward \"foo\" (point-at-eol) t)) => t." - (cl-loop with pat = (if (stringp pattern) - (helm-mm-3-get-patterns pattern) - pattern) - when (eq (caar pat) 'not) return - ;; Pass the job to `helm-search-match-part'. - (prog1 (list (point-at-bol) (point-at-eol)) - (forward-line 1)) - while (condition-case _err - (funcall searchfn1 (or (cdar pat) "") nil t) - (invalid-regexp nil)) - for bol = (point-at-bol) - for eol = (point-at-eol) - if (cl-loop for (pred . str) in (cdr pat) always - (progn (goto-char bol) - (funcall pred (condition-case _err - (funcall searchfn2 str eol t) - (invalid-regexp nil))))) - do (goto-char eol) and return t - else do (goto-char eol) - finally return nil)) - -(defun helm-mm-3-search (pattern &rest _ignore) - (when (stringp pattern) - (setq pattern (helm-mm-3-get-patterns pattern))) - (helm-mm-3-search-base - pattern 're-search-forward 're-search-forward)) - -;;; mp-3 with migemo -;; -;; -(defvar helm-mm--previous-migemo-info nil - "[Internal] Cache previous migemo query.") -(make-local-variable 'helm-mm--previous-migemo-info) - -(declare-function migemo-get-pattern "ext:migemo.el") -(declare-function migemo-search-pattern-get "ext:migemo.el") - -(define-minor-mode helm-migemo-mode - "Enable migemo in helm. -It will be available in the sources handling it, -i.e the sources which have the slot :migemo with non--nil value." - :lighter " Hmio" - :group 'helm - :global t - (cl-assert (featurep 'migemo) - nil "No feature called migemo found, install migemo.el.")) - -(defun helm-mm-migemo-get-pattern (pattern) - (let ((regex (migemo-get-pattern pattern))) - (if (ignore-errors (string-match regex "") t) - (concat regex "\\|" pattern) pattern))) - -(defun helm-mm-migemo-search-pattern-get (pattern) - (let ((regex (migemo-search-pattern-get pattern))) - (if (ignore-errors (string-match regex "") t) - (concat regex "\\|" pattern) pattern))) - -(defun helm-mm-migemo-string-match (pattern str) - "Migemo version of `string-match'." - (unless (assoc pattern helm-mm--previous-migemo-info) - (with-helm-buffer - (setq helm-mm--previous-migemo-info - (push (cons pattern (helm-mm-migemo-get-pattern pattern)) - helm-mm--previous-migemo-info)))) - (string-match (assoc-default pattern helm-mm--previous-migemo-info) str)) - -(cl-defun helm-mm-3-migemo-match (str &optional (pattern helm-pattern)) - (and helm-migemo-mode - (cl-loop for (pred . re) in (helm-mm-3-get-patterns pattern) - always (funcall pred (helm-mm-migemo-string-match re str))))) - -(defun helm-mm-migemo-forward (word &optional bound noerror count) - (with-helm-buffer - (unless (assoc word helm-mm--previous-migemo-info) - (setq helm-mm--previous-migemo-info - (push (cons word (if (delq 'ascii (find-charset-string word)) - word - (helm-mm-migemo-search-pattern-get word))) - helm-mm--previous-migemo-info)))) - (re-search-forward - (assoc-default word helm-mm--previous-migemo-info) bound noerror count)) - -(defun helm-mm-3-migemo-search (pattern &rest _ignore) - (and helm-migemo-mode - (helm-mm-3-search-base - pattern 'helm-mm-migemo-forward 'helm-mm-migemo-forward))) - - -;;; mp-3p- (multiple regexp pattern 3 with prefix search) -;; -;; -(defun helm-mm-3p-match (str &optional pattern) - "Check if PATTERN match STR. -Same as `helm-mm-3-match' but more strict, matching against prefix also. -e.g \"bar foo\" will match \"barfoo\" but not \"foobar\" contrarily to -`helm-mm-3-match'." - (let* ((pat (helm-mm-3-get-patterns (or pattern helm-pattern))) - (first (car pat))) - (and (funcall (car first) (helm-mm-prefix-match str (cdr first))) - (cl-loop for (predicate . regexp) in (cdr pat) - always (funcall predicate (string-match regexp str)))))) - -(defun helm-mm-3p-search (pattern &rest _ignore) - (when (stringp pattern) - (setq pattern (helm-mm-3-get-patterns pattern))) - (helm-mm-3-search-base - pattern 'helm-mm-prefix-search 're-search-forward)) - - -;;; Generic multi-match/search functions -;; -;; -(cl-defun helm-mm-match (str &optional (pattern helm-pattern)) - (let ((fun (cl-ecase helm-mm-matching-method - (multi1 #'helm-mm-1-match) - (multi2 #'helm-mm-2-match) - (multi3 #'helm-mm-3-match) - (multi3p #'helm-mm-3p-match)))) - (funcall fun str pattern))) - -(defun helm-mm-search (pattern &rest _ignore) - (let ((fun (cl-ecase helm-mm-matching-method - (multi1 #'helm-mm-1-search) - (multi2 #'helm-mm-2-search) - (multi3 #'helm-mm-3-search) - (multi3p #'helm-mm-3p-search)))) - (funcall fun pattern))) - - -(provide 'helm-multi-match) - - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-multi-match.el ends here diff --git a/elpa/helm-20160217.958/helm-net.el b/elpa/helm-20160217.958/helm-net.el deleted file mode 100644 index cdcc53e1..00000000 --- a/elpa/helm-20160217.958/helm-net.el +++ /dev/null @@ -1,526 +0,0 @@ -;;; helm-net.el --- helm browse url and search web. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'url) -(require 'xml) -(require 'browse-url) - - -(defgroup helm-net nil - "Net related applications and libraries for Helm." - :group 'helm) - -(defcustom helm-google-suggest-default-browser-function nil - "The browse url function you prefer to use with google suggest. -When nil, use the first browser function available -See `helm-browse-url-default-browser-alist'." - :group 'helm-net - :type 'symbol) - -(defcustom helm-home-url "http://www.google.fr" - "Default url to use as home url." - :group 'helm-net - :type 'string) - -(defcustom helm-surfraw-default-browser-function nil - "The browse url function you prefer to use with surfraw. -When nil, fallback to `browse-url-browser-function'." - :group 'helm-net - :type 'symbol) - -(defcustom helm-google-suggest-url - "http://google.com/complete/search?output=toolbar&q=" - "URL used for looking up Google suggestions." - :type 'string - :group 'helm-net) - -(defcustom helm-google-suggest-search-url - "http://www.google.com/search?ie=utf-8&oe=utf-8&q=%s" - "URL used for Google searching." - :type 'string - :group 'helm-net) - -(defcustom helm-net-prefer-curl nil - "When non--nil use CURL external program to fetch data. -Otherwise `url-retrieve-synchronously' is used." - :type 'boolean - :group 'helm-net) - -(defvaralias 'helm-google-suggest-use-curl-p 'helm-net-prefer-curl) -(make-obsolete-variable 'helm-google-suggest-use-curl-p 'helm-net-prefer-curl "1.7.7") - -(defcustom helm-surfraw-duckduckgo-url - "https://duckduckgo.com/lite/?q=%s&kp=1" - "The duckduckgo url. -This is a format string, don't forget the `%s'. -If you have personal settings saved on duckduckgo you should have -a personal url, see your settings on duckduckgo." - :type 'string - :group 'helm-net) - -(defcustom helm-wikipedia-suggest-url - "https://en.wikipedia.org/w/api.php?action=opensearch&search=" - "Url used for looking up Wikipedia suggestions." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-wikipedia-url - "https://en.wikipedia.org/wiki/Special:Search?search=%s" - "The Wikipedia search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-wikipedia-summary-url - "http://en.wikipedia.org/w/api.php?action=parse&format=json&prop=text§ion=0&page=" - "URL for getting the summary of a Wikipedia topic." - :type 'string - :group 'helm-net) - -(defcustom helm-wikipedia-follow-delay 2 - "Delay before wikipedia summary popup." - :type 'number - :group 'helm-net) - -(defcustom helm-search-suggest-action-youtube-url - "http://www.youtube.com/results?aq=f&search_query=%s" - "The Youtube search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-imdb-url - "http://www.imdb.com/find?s=all&q=%s" - "The IMDb search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-google-maps-url - "http://maps.google.com/maps?f=q&source=s_q&q=%s" - "The Google Maps search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-search-suggest-action-google-news-url - "http://www.google.com/search?safe=off&prmd=nvlifd&source=lnms&tbs=nws:1&q=%s" - "The Google News search url. -This is a format string, don't forget the `%s'." - :type 'string - :group 'helm-net) - -(defcustom helm-google-suggest-actions - '(("Google Search" . helm-google-suggest-action) - ("Wikipedia" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-wikipedia-url - candidate))) - ("Youtube" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-youtube-url - candidate))) - ("IMDb" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-imdb-url - candidate))) - ("Google Maps" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-google-maps-url - candidate))) - ("Google News" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-google-news-url - candidate)))) - "List of actions for google suggest sources." - :group 'helm-net - :type '(alist :key-type string :value-type function)) - -(defcustom helm-browse-url-firefox-new-window "-new-tab" - "Allow choosing to browse url in new window or new tab. -Can be \"-new-tab\" (default) or \"-new-window\"." - :group 'helm-net - :type '(radio - (const :tag "New tab" "-new-tab") - (const :tag "New window" "-new-window"))) - - -;;; Additional actions for search suggestions -;; -;; -;; Internal - -(defun helm-search-suggest-perform-additional-action (url query) - "Perform the search via URL using QUERY as input." - (browse-url (format url (url-hexify-string query)))) - -(defun helm-net--url-retrieve-sync (request parser) - (if helm-net-prefer-curl - (with-temp-buffer - (call-process "curl" nil t nil request) - (funcall parser)) - (with-current-buffer (url-retrieve-synchronously request) - (funcall parser)))) - - -;;; Google Suggestions -;; -;; -(defun helm-google-suggest-parser () - (cl-loop - with result-alist = (xml-get-children - (car (xml-parse-region - (point-min) (point-max))) - 'CompleteSuggestion) - for i in result-alist collect - (cdr (cl-caadr (assoc 'suggestion i))))) - -(defun helm-google-suggest-fetch (input) - "Fetch suggestions for INPUT from XML buffer." - (let ((request (concat helm-google-suggest-url - (url-hexify-string input)))) - (helm-net--url-retrieve-sync - request #'helm-google-suggest-parser))) - -(defun helm-google-suggest-set-candidates (&optional request-prefix) - "Set candidates with result and number of google results found." - (let ((suggestions (helm-google-suggest-fetch - (or (and request-prefix - (concat request-prefix - " " helm-pattern)) - helm-pattern)))) - (if (member helm-pattern suggestions) - suggestions - ;; if there is no suggestion exactly matching the input then - ;; prepend a Search on Google item to the list - (append - suggestions - (list (cons (format "Search for '%s' on Google" helm-input) - helm-input)))))) - -(defun helm-ggs-set-number-result (num) - (if num - (progn - (and (numberp num) (setq num (number-to-string num))) - (cl-loop for i in (reverse (split-string num "" t)) - for count from 1 - append (list i) into C - when (= count 3) - append (list ",") into C - and do (setq count 0) - finally return - (replace-regexp-in-string - "^," "" (mapconcat 'identity (reverse C) "")))) - "?")) - -(defun helm-google-suggest-action (candidate) - "Default action to jump to a google suggested candidate." - (let ((arg (format helm-google-suggest-search-url - (url-hexify-string candidate)))) - (helm-aif helm-google-suggest-default-browser-function - (funcall it arg) - (helm-browse-url arg)))) - -(defvar helm-google-suggest-default-function - 'helm-google-suggest-set-candidates - "Default function to use in helm google suggest.") - -(defvar helm-source-google-suggest - (helm-build-sync-source "Google Suggest" - :candidates (lambda () - (funcall helm-google-suggest-default-function)) - :action 'helm-google-suggest-actions - :volatile t - :keymap helm-map - :requires-pattern 3)) - -(defun helm-google-suggest-emacs-lisp () - "Try to emacs lisp complete with google suggestions." - (helm-google-suggest-set-candidates "emacs lisp")) - -;;; Wikipedia suggestions -;; -;; -(declare-function json-read-from-string "json" (string)) -(defun helm-wikipedia-suggest-fetch () - "Fetch Wikipedia suggestions and return them as a list." - (require 'json) - (let ((request (concat helm-wikipedia-suggest-url - (url-hexify-string helm-pattern)))) - (helm-net--url-retrieve-sync - request #'helm-wikipedia--parse-buffer))) - -(defun helm-wikipedia--parse-buffer () - (goto-char (point-min)) - (when (re-search-forward "^\\[.+\\[\\(.*\\)\\]\\]" nil t) - (cl-loop for i across (aref (json-read-from-string (match-string 0)) 1) - collect i into result - finally return (or result - (append - result - (list (cons (format "Search for '%s' on wikipedia" - helm-pattern) - helm-pattern))))))) - -(defvar helm-wikipedia--summary-cache (make-hash-table :test 'equal)) -(defun helm-wikipedia-persistent-action (candidate) - (unless (string= (format "Search for '%s' on wikipedia" - helm-pattern) - (helm-get-selection nil t)) - (message "Fetching summary from Wikipedia...") - (let ((buf (get-buffer-create "*helm wikipedia summary*")) - result mess) - (while (progn - (setq result (or (gethash candidate helm-wikipedia--summary-cache) - (puthash candidate - (prog1 - (helm-wikipedia-fetch-summary candidate) - (setq mess "Done")) - helm-wikipedia--summary-cache))) - (when (and result - (listp result)) - (setq candidate (cdr result)) - (message "Redirected to %s" candidate) - t))) - (if (not result) - (message "Error when getting summary.") - (with-current-buffer buf - (erase-buffer) - (setq cursor-type nil) - (insert result) - (fill-region (point-min) (point-max)) - (goto-char (point-min))) - (display-buffer buf) - (message mess))))) - -(defun helm-wikipedia-fetch-summary (input) - (let* ((request (concat helm-wikipedia-summary-url - (url-hexify-string input)))) - (helm-net--url-retrieve-sync - request #'helm-wikipedia--parse-summary))) - -(defun helm-wikipedia--parse-summary () - (goto-char (point-min)) - (when (search-forward "{" nil t) - (let ((result (cdr (assoc '* - (assoc 'text - (assoc 'parse - (json-read-from-string - (buffer-substring-no-properties - (1- (point)) (point-max))))))))) - (when result - (if (string-match "]+>\\([^<]+\\)" result) - (cons 'redirect (match-string 1 result)) - - ;; find the beginning of the summary text in the result - - ;; check if there is a table before the summary and skip that - (when (or (string-match "\\(\n\\)?\n

" result) - ;; otherwise just find the first paragraph - (string-match "

" result)) - ;; remove cruft and do a simple formatting - (replace-regexp-in-string - "Cite error: .*" "" - (replace-regexp-in-string - " " "" - (replace-regexp-in-string - "\\[[^\]]+\\]" "" - (replace-regexp-in-string - "<[^>]*>" "" - (replace-regexp-in-string - "

\n

" "\n\n" - (substring result (match-end 0))))))))))))) - - -(defvar helm-source-wikipedia-suggest - (helm-build-sync-source "Wikipedia Suggest" - :candidates #'helm-wikipedia-suggest-fetch - :action '(("Wikipedia" . (lambda (candidate) - (helm-search-suggest-perform-additional-action - helm-search-suggest-action-wikipedia-url - candidate)))) - :persistent-action #'helm-wikipedia-persistent-action - :volatile t - :keymap helm-map - :follow 1 - :follow-delay helm-wikipedia-follow-delay - :requires-pattern 3)) - - -;;; Web browser functions. -;; -;; -;; If default setting of `w3m-command' is not -;; what you want and you modify it, you will have to reeval -;; also `helm-browse-url-default-browser-alist'. - -(defvar helm-browse-url-chromium-program "chromium-browser") -(defvar helm-browse-url-uzbl-program "uzbl-browser") -(defvar helm-browse-url-conkeror-program "conkeror") -(defvar helm-browse-url-default-browser-alist - `((,(or (and (boundp 'w3m-command) w3m-command) - "/usr/bin/w3m") . w3m-browse-url) - (,browse-url-firefox-program . browse-url-firefox) - (,helm-browse-url-chromium-program . helm-browse-url-chromium) - (,helm-browse-url-conkeror-program . helm-browse-url-conkeror) - (,helm-browse-url-uzbl-program . helm-browse-url-uzbl) - (,browse-url-kde-program . browse-url-kde) - (,browse-url-gnome-moz-program . browse-url-gnome-moz) - (,browse-url-mozilla-program . browse-url-mozilla) - (,browse-url-galeon-program . browse-url-galeon) - (,browse-url-netscape-program . browse-url-netscape) - (,browse-url-mosaic-program . browse-url-mosaic) - (,browse-url-xterm-program . browse-url-text-xterm) - ("emacs" . eww-browse-url)) - "*Alist of \(executable . function\) to try to find a suitable url browser.") - -(cl-defun helm-generic-browser (url cmd-name &rest args) - "Browse URL with NAME browser." - (let ((proc (concat cmd-name " " url))) - (message "Starting %s..." cmd-name) - (apply 'start-process proc nil cmd-name - (append args (list url))) - (set-process-sentinel - (get-process proc) - (lambda (process event) - (when (string= event "finished\n") - (message "%s process %s" process event)))))) - -(defun helm-browse-url-firefox (url &optional _ignore) - "Same as `browse-url-firefox' but detach from emacs. -So when you quit emacs you can keep your firefox open -and not be prompted to kill firefox process. - -NOTE: Probably not supported on some systems (e.g Windows)." - (interactive (list (read-string "URL: " (browse-url-url-at-point)) - nil)) - (let ((process-environment (browse-url-process-environment))) - (call-process-shell-command - (format "(%s %s %s &)" - browse-url-firefox-program - helm-browse-url-firefox-new-window - url)))) - -(defun helm-browse-url-chromium (url &optional _ignore) - "Browse URL with google chrome browser." - (interactive "sURL: ") - (helm-generic-browser - url helm-browse-url-chromium-program)) - -(defun helm-browse-url-uzbl (url &optional _ignore) - "Browse URL with uzbl browser." - (interactive "sURL: ") - (helm-generic-browser url helm-browse-url-uzbl-program "-u")) - -(defun helm-browse-url-conkeror (url &optional _ignore) - "Browse URL with conkeror browser." - (interactive "sURL: ") - (helm-generic-browser url helm-browse-url-conkeror-program)) - -(defun helm-browse-url-default-browser (url &rest args) - "Find the first available browser and ask it to load URL." - (let ((default-browser-fn - (cl-loop for (exe . fn) in helm-browse-url-default-browser-alist - thereis (and exe (executable-find exe) (fboundp fn) fn)))) - (if default-browser-fn - (apply default-browser-fn url args) - (error "No usable browser found")))) - -(defun helm-browse-url (url &rest args) - "Default command to browse URL." - (if browse-url-browser-function - (browse-url url args) - (helm-browse-url-default-browser url args))) - - -;;; Surfraw -;; -;; Need external program surfraw. -;; - -;; Internal -(defvar helm-surfraw-engines-history nil) -(defvar helm-surfraw-input-history nil) -(defvar helm-surfraw--elvi-cache nil) - -(defun helm-build-elvi-list () - "Return list of all engines and descriptions handled by surfraw." - (or helm-surfraw--elvi-cache - (setq helm-surfraw--elvi-cache - (cdr (with-temp-buffer - (call-process "surfraw" nil t nil "-elvi") - (split-string (buffer-string) "\n")))))) - -;;;###autoload -(defun helm-surfraw (pattern engine) - "Preconfigured `helm' to search PATTERN with search ENGINE." - (interactive (list (read-string "SearchFor: " - nil 'helm-surfraw-input-history - (thing-at-point 'symbol)) - (helm-comp-read - "Engine: " - (helm-build-elvi-list) - :must-match t - :name "Surfraw Search Engines" - :del-input nil - :history helm-surfraw-engines-history))) - (let* ((engine-nodesc (car (split-string engine))) - (url (if (string= engine-nodesc "duckduckgo") - ;; "sr duckduckgo -p foo" is broken, workaround. - (format helm-surfraw-duckduckgo-url - (url-hexify-string pattern)) - (with-temp-buffer - (apply 'call-process "surfraw" nil t nil - (append (list engine-nodesc "-p") (split-string pattern))) - (replace-regexp-in-string - "\n" "" (buffer-string))))) - (browse-url-browser-function (or helm-surfraw-default-browser-function - browse-url-browser-function))) - (if (string= engine-nodesc "W") - (helm-browse-url helm-home-url) - (helm-browse-url url) - (setq helm-surfraw-engines-history - (cons engine (delete engine helm-surfraw-engines-history)))))) - -;;;###autoload -(defun helm-google-suggest () - "Preconfigured `helm' for google search with google suggest." - (interactive) - (helm-other-buffer 'helm-source-google-suggest "*helm google*")) - -;;;###autoload -(defun helm-wikipedia-suggest () - "Preconfigured `helm' for Wikipedia lookup with Wikipedia suggest." - (interactive) - (helm :sources 'helm-source-wikipedia-suggest - :buffer "*helm wikipedia*")) - - -(provide 'helm-net) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-net.el ends here diff --git a/elpa/helm-20160217.958/helm-org.el b/elpa/helm-20160217.958/helm-org.el deleted file mode 100644 index 19c2882f..00000000 --- a/elpa/helm-20160217.958/helm-org.el +++ /dev/null @@ -1,276 +0,0 @@ -;;; helm-org.el --- Helm for org headlines and keywords completion -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) -(require 'org) - -(declare-function org-agenda-switch-to "org-agenda.el") - -(defgroup helm-org nil - "Org related functions for helm." - :group 'helm) - -(defcustom helm-org-headings-fontify nil - "Fontify org buffers before parsing them. -This reflect fontification in helm-buffer when non--nil. -NOTE: This will be slow on large org buffers." - :group 'helm-org - :type 'boolean) - -(defcustom helm-org-format-outline-path nil - "Show all org level as path." - :group 'helm-org - :type 'boolean) - -(defcustom helm-org-show-filename nil - "Show org filenames in `helm-org-agenda-files-headings' when non--nil. -Note this have no effect in `helm-org-in-buffer-headings'." - :group 'helm-org - :type 'boolean) - -(defcustom helm-org-headings-min-depth 1 - "Minimum depth of org headings to start with." - :group 'helm-org - :type 'integer) - -(defcustom helm-org-headings-max-depth 8 - "Go down to this maximum depth of org headings." - :group 'helm-org - :type 'integer) - -(defcustom helm-org-headings-actions - '(("Go to heading" . helm-org-goto-marker) - ("Open in indirect buffer `C-RET'" . helm-org--open-heading-in-indirect-buffer) - ("Refile to this heading `C-w`''" . helm-org-heading-refile) - ("Insert link to this heading `C-l`''" . helm-org-insert-link-to-heading-at-marker)) - "Default actions alist for - `helm-source-org-headings-for-files'." - :group 'helm-org - :type '(alist :key-type string :value-type function)) - -(defcustom helm-org-truncate-lines t - "Truncate org-header-lines when non-nil" - :type 'boolean - :group 'helm-org) - -;;; Org capture templates -;; -;; -(defvar org-capture-templates) -(defun helm-source-org-capture-templates () - (helm-build-sync-source "Org Capture Templates:" - :candidates (cl-loop for template in org-capture-templates - collect (cons (nth 1 template) (nth 0 template))) - :action '(("Do capture" . (lambda (template-shortcut) - (org-capture nil template-shortcut)))))) - -;;; Org headings -;; -;; -(defun helm-org-goto-marker (marker) - (switch-to-buffer (marker-buffer marker)) - (goto-char (marker-position marker)) - (org-show-context) - (re-search-backward "^\\*+ " nil t) - (org-show-entry)) - -(defun helm-org--open-heading-in-indirect-buffer (marker) - (helm-org-goto-marker marker) - (org-tree-to-indirect-buffer) - - ;; Put the non-indirect buffer at the bottom of the prev-buffers - ;; list so it won't be selected when the indirect buffer is killed - (set-window-prev-buffers nil (append (cdr (window-prev-buffers)) - (car (window-prev-buffers))))) - -(defun helm-org--run-open-heading-in-indirect-buffer () - "Open selected Org heading in an indirect buffer." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action #'helm-org--open-heading-in-indirect-buffer))) -(put 'helm-org--run-open-heading-in-indirect-buffer 'helm-only t) - -(defvar helm-org-headings-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "") 'helm-org--run-open-heading-in-indirect-buffer) - (define-key map (kbd "C-w") 'helm-org-heading-refile) - (define-key map (kbd "C-l") 'helm-org-insert-link-to-heading-at-marker) - map) - "Keymap for `helm-source-org-headings-for-files'.") - -(defclass helm-org-headings-class (helm-source-sync) - ((parents - :initarg :parents - :initform nil - :custom boolean) - (match :initform - (lambda (candidate) - (string-match - helm-pattern - (helm-aif (get-text-property 0 'helm-real-display candidate) - it - candidate)))) - (action :initform 'helm-org-headings-actions) - (keymap :initform 'helm-org-headings-map))) - -(defmethod helm--setup-source :after ((source helm-org-headings-class)) - (let ((parents (slot-value source 'parents))) - (set-slot-value source 'candidate-transformer - (lambda (candidates) - (let ((cands (helm-org-get-candidates candidates parents))) - (if parents (nreverse cands) cands)))))) - -(defun helm-source-org-headings-for-files (filenames &optional parents) - (helm-make-source "Org Headings" helm-org-headings-class - :parents parents - :candidates filenames)) - -(defun helm-org-get-candidates (filenames &optional parents) - (apply #'append - (mapcar (lambda (filename) - (helm-org--get-candidates-in-file - filename - helm-org-headings-fontify - (or parents (null helm-org-show-filename)) - parents)) - filenames))) - -(defun helm-org--get-candidates-in-file (filename &optional fontify nofname parents) - (with-current-buffer (pcase filename - ((pred bufferp) filename) - ((pred stringp) (find-file-noselect filename))) - (let ((match-fn (if fontify - #'match-string - #'match-string-no-properties)) - (search-fn (lambda () - (re-search-forward - org-complex-heading-regexp nil t))) - (file (unless nofname - (concat (helm-basename filename) ":")))) - (when parents - (add-function :around (var search-fn) - (lambda (old-fn &rest args) - (when (org-up-heading-safe) - (apply old-fn args))))) - (save-excursion - (save-restriction - (widen) - (unless parents (goto-char (point-min))) - (cl-loop with width = (window-width (helm-window)) - while (funcall search-fn) - for beg = (point-at-bol) - for end = (point-at-eol) - when (and fontify - (null (text-property-any - beg end 'fontified t))) - do (jit-lock-fontify-now beg end) - for level = (length (match-string-no-properties 1)) - for heading = (funcall match-fn 4) - if (and (>= level helm-org-headings-min-depth) - (<= level helm-org-headings-max-depth)) - collect `(,(propertize - (if helm-org-format-outline-path - (org-format-outline-path - (append (apply #'org-get-outline-path - (unless parents - (list t level heading))) - (list heading)) - width file) - (if file - (concat file (funcall match-fn 0)) - (funcall match-fn 0))) - 'helm-real-display heading) - . ,(point-marker)))))))) - -(defun helm-org-insert-link-to-heading-at-marker (marker) - (with-current-buffer (marker-buffer marker) - (let ((heading-name (save-excursion (goto-char (marker-position marker)) - (nth 4 (org-heading-components)))) - (file-name (buffer-file-name))) - (with-helm-current-buffer - (org-insert-link - file-name (concat "file:" file-name "::*" heading-name)))))) - -(defun helm-org-heading-refile (marker) - (save-selected-window - (when (eq major-mode 'org-agenda-mode) - (org-agenda-switch-to)) - (org-cut-subtree) - (let ((target-level (with-current-buffer (marker-buffer marker) - (goto-char (marker-position marker)) - (org-current-level)))) - (helm-org-goto-marker marker) - (org-end-of-subtree t t) - (org-paste-subtree (+ target-level 1))))) - -;;;###autoload -(defun helm-org-agenda-files-headings () - "Preconfigured helm for org files headings." - (interactive) - (helm :sources (helm-source-org-headings-for-files (org-agenda-files)) - :candidate-number-limit 99999 - :truncate-lines helm-org-truncate-lines - :buffer "*helm org headings*")) - -;;;###autoload -(defun helm-org-in-buffer-headings () - "Preconfigured helm for org buffer headings." - (interactive) - (let ((helm-org-show-filename nil)) - (helm :sources (helm-source-org-headings-for-files - (list (current-buffer))) - :candidate-number-limit 99999 - :truncate-lines helm-org-truncate-lines - :buffer "*helm org inbuffer*"))) - -;;;###autoload -(defun helm-org-parent-headings () - "Preconfigured helm for org headings that are parents of the -current heading." - (interactive) - ;; Use a large max-depth to ensure all parents are displayed. - (let ((helm-org-headings-min-depth 1) - (helm-org-headings-max-depth 50)) - (helm :sources (helm-source-org-headings-for-files - (list (current-buffer)) t) - :candidate-number-limit 99999 - :truncate-lines helm-org-truncate-lines - :buffer "*helm org parent headings*"))) - -;;;###autoload -(defun helm-org-capture-templates () - "Preconfigured helm for org templates." - (interactive) - (helm :sources (helm-source-org-capture-templates) - :candidate-number-limit 99999 - :truncate-lines helm-org-truncate-lines - :buffer "*helm org capture templates*")) - - -(provide 'helm-org) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-org.el ends here diff --git a/elpa/helm-20160217.958/helm-pkg.el b/elpa/helm-20160217.958/helm-pkg.el deleted file mode 100644 index d46f0a1b..00000000 --- a/elpa/helm-20160217.958/helm-pkg.el +++ /dev/null @@ -1,9 +0,0 @@ -(define-package "helm" "20160217.958" "Helm is an Emacs incremental and narrowing framework" - '((emacs "24.3") - (async "1.6") - (popup "0.5.3") - (helm-core "1.9.1")) - :url "https://emacs-helm.github.io/helm/") -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/elpa/helm-20160217.958/helm-plugin.el b/elpa/helm-20160217.958/helm-plugin.el deleted file mode 100644 index 976a7349..00000000 --- a/elpa/helm-20160217.958/helm-plugin.el +++ /dev/null @@ -1,137 +0,0 @@ -;;; helm-plugin.el --- Helm plugins -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) - - -;;; Plug-in: `info-index' -;; -;; -(defun helm-make-info-source (source file) - `(,@source - (name . ,(concat "Info Index: " file)) - (info-file . ,file) - (init . helm-info-init) - (display-to-real . helm-info-display-to-real) - (get-line . buffer-substring) - (candidates-in-buffer) - (action ("Goto node" . helm-info-goto)))) - -(defun helm-compile-source--info-index (source) - (helm-aif (helm-interpret-value (assoc-default 'info-index source)) - (helm-make-info-source source it) - source)) - -(add-to-list 'helm-compile-source-functions 'helm-compile-source--info-index) - -(helm-document-attribute 'info-index "info-index plugin" - " Create a source of info index very easily. - - Example: - - (defvar helm-source-info-wget '((info-index . \"wget\"))") - - -;;; Plug-in: `candidates-file' -;; -;; List all lines in a file. -(defun helm-compile-source--candidates-file (source) - (if (assoc-default 'candidates-file source) - `((init helm-p-candidates-file-init - ,@(let ((orig-init (assoc-default 'init source))) - (cond ((null orig-init) nil) - ((functionp orig-init) (list orig-init)) - (t orig-init)))) - (candidates-in-buffer) - ,@source) - source)) -(add-to-list 'helm-compile-source-functions 'helm-compile-source--candidates-file) - -(defun helm-p-candidates-file-init () - (cl-destructuring-bind (file &optional updating) - (helm-mklist (helm-attr 'candidates-file)) - (setq file (helm-interpret-value file)) - (with-current-buffer (helm-candidate-buffer 'global) - (insert-file-contents file) - (when updating - (buffer-disable-undo) - (font-lock-mode -1) - (auto-revert-mode 1))))) - -(helm-document-attribute 'candidates-file "candidates-file plugin" - " Use a file as the candidates buffer. - - 1st argument is a filename, string or function name or variable - name. If optional 2nd argument is non-nil, the file is opened with - `auto-revert-mode' enabled. - - Example: - - \(defvar helm-source-test-file - '((name . \"test1\") - (candidates-file \"~/.emacs.el\" t))) - - Will list all lines in .emacs.el.") - - -;;; Plug-in: `persistent-help' -;; -;; Add help about persistent action in `helm-buffer' header. -(defun helm-compile-source--persistent-help (source) - (if (assoc 'header-line source) - source - (append source '((header-line . helm-persistent-help-string))))) -(add-to-list 'helm-compile-source-functions 'helm-compile-source--persistent-help) - -(defun helm-persistent-help-string () - (substitute-command-keys - (concat "\\\\[helm-execute-persistent-action]: " - (or (helm-interpret-value (helm-attr 'persistent-help)) - (helm-aif (or (assoc-default - 'persistent-action - (helm-get-current-source)) - (assoc-default - 'action (helm-get-current-source))) - (cond ((symbolp it) - (symbol-name it)) - ((listp it) - (or (ignore-errors (caar it)) "")))) - "") - " (keeping session)"))) - - -;;; Document new attributes -;; -;; -(helm-document-attribute 'persistent-help "persistent-help plug-in" - " A string to explain persistent-action of this source. It also - accepts a function or a variable name.") - - -(provide 'helm-plugin) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-plugin ends here diff --git a/elpa/helm-20160217.958/helm-regexp.el b/elpa/helm-20160217.958/helm-regexp.el deleted file mode 100644 index 793144d3..00000000 --- a/elpa/helm-20160217.958/helm-regexp.el +++ /dev/null @@ -1,643 +0,0 @@ -;;; helm-regexp.el --- In buffer regexp searching and replacement for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-utils) -(require 'helm-plugin) - -(declare-function helm-mm-split-pattern "helm-multi-match") - - -(defgroup helm-regexp nil - "Regexp related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-moccur-always-search-in-current nil - "Helm multi occur always search in current buffer when non--nil." - :group 'helm-regexp - :type 'boolean) - -(defcustom helm-moccur-use-ioccur-style-keys t - "Similar to `helm-grep-use-ioccur-style-keys' but for multi occur." - :group 'helm-regexp - :type 'boolean) - -(defcustom helm-moccur-auto-update-on-resume nil - "Allow auto updating helm-(m)occur buffer when outdated. -noask => Always update without asking -nil => Don't update but signal buffer needs update -never => Never update and do not signal buffer needs update -Any other non--nil value update after confirmation." - :group 'helm-regexp - :type '(radio :tag "Allow auto updating helm-(m)occur buffer when outdated." - (const :tag "Always update without asking" noask) - (const :tag "Never update and do not signal buffer needs update" never) - (const :tag "Don't update but signal buffer needs update" nil) - (const :tag "Update after confirmation" t))) - -(defcustom helm-source-multi-occur-actions - '(("Go to Line" . helm-moccur-goto-line) - ("Goto line other window" . helm-moccur-goto-line-ow) - ("Goto line new frame" . helm-moccur-goto-line-of)) - "Actions for helm-occur and helm-moccur." - :group 'helm-regexp - :type '(alist :key-type string :value-type function)) - -(defcustom helm-moccur-truncate-lines t - "When nil the (m)occur line that appears will not be truncated." - :group 'helm-regexp - :type 'boolean) - - -(defface helm-moccur-buffer - '((t (:foreground "DarkTurquoise" :underline t))) - "Face used to highlight moccur buffer names." - :group 'helm-regexp) - -(defface helm-resume-need-update - '((t (:background "red"))) - "Face used to flash moccur buffer when it needs update." - :group 'helm-regexp) - - -(defvar helm-moccur-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-c o") 'helm-moccur-run-goto-line-ow) - (define-key map (kbd "C-c C-o") 'helm-moccur-run-goto-line-of) - (define-key map (kbd "C-x C-s") 'helm-moccur-run-save-buffer) - (when helm-moccur-use-ioccur-style-keys - (define-key map (kbd "") 'helm-execute-persistent-action) - (define-key map (kbd "") 'helm-moccur-run-default-action)) - (delq nil map)) - "Keymap used in Moccur source.") - - -;; History vars -(defvar helm-build-regexp-history nil) -(defvar helm-occur-history nil) - -(defun helm-query-replace-regexp (_candidate) - "Query replace regexp from `helm-regexp'. -With a prefix arg replace only matches surrounded by word boundaries, -i.e Don't replace inside a word, regexp is surrounded with \\bregexp\\b." - (let ((regexp helm-input)) - (apply 'query-replace-regexp - (helm-query-replace-args regexp)))) - -(defun helm-kill-regexp-as-sexp (_candidate) - "Kill regexp in a format usable in lisp code." - (helm-regexp-kill-new - (prin1-to-string helm-input))) - -(defun helm-kill-regexp (_candidate) - "Kill regexp as it is in `helm-pattern'." - (helm-regexp-kill-new helm-input)) - -(defun helm-query-replace-args (regexp) - "create arguments of `query-replace-regexp' action in `helm-regexp'." - (let ((region-only (helm-region-active-p))) - (list - regexp - (query-replace-read-to regexp - (format "Query replace %sregexp %s" - (if helm-current-prefix-arg "word " "") - (if region-only "in region " "")) - t) - helm-current-prefix-arg - (when region-only (region-beginning)) - (when region-only (region-end))))) - -(defvar helm-source-regexp - (helm-build-in-buffer-source "Regexp Builder" - :init (lambda () - (helm-init-candidates-in-buffer - 'global (with-temp-buffer - (insert-buffer-substring helm-current-buffer) - (buffer-string)))) - :get-line #'helm-regexp-get-line - :persistent-action #'helm-regexp-persistent-action - :persistent-help "Show this line" - :multiline t - :matchplugin nil - :requires-pattern 2 - :mode-line "Press TAB to select action." - :action '(("Kill Regexp as sexp" . helm-kill-regexp-as-sexp) - ("Query Replace Regexp (C-u Not inside word.)" - . helm-query-replace-regexp) - ("Kill Regexp" . helm-kill-regexp)))) - -(defun helm-regexp-get-line (s e) - (let ((matches (match-data)) - (line (buffer-substring s e))) - (propertize - (cl-loop with ln = (format "%5d: %s" (1- (line-number-at-pos s)) line) - for i from 0 to (1- (/ (length matches) 2)) - concat (format "\n %s'%s'" (format "Group %d: " i) - (match-string i)) - into ln1 - finally return (concat ln ln1)) - 'helm-realvalue s))) - -(defun helm-regexp-persistent-action (pt) - (helm-goto-char pt) - (helm-highlight-current-line)) - -(defun helm-regexp-kill-new (input) - (kill-new input) - (message "Killed: %s" input)) - - -;;; Occur -;; -;; -(defvar helm-source-occur nil) -(defun helm-occur-init-source () - (unless helm-source-occur - (setq helm-source-occur - (helm-make-source "Occur" 'helm-source-multi-occur)))) - - -;;; Multi occur -;; -;; - -;; Internal -(defvar helm-multi-occur-buffer-list nil) -(defvar helm-multi-occur-buffer-tick nil) -(defun helm-moccur-init () - "Create the initial helm multi occur buffer." - (helm-init-candidates-in-buffer - 'global - (cl-loop with buffers = (helm-attr 'moccur-buffers) - for buf in buffers - for bufstr = (with-current-buffer buf (buffer-string)) - do (add-text-properties - 0 (length bufstr) - `(buffer-name ,(buffer-name (get-buffer buf))) - bufstr) - concat bufstr))) - -(defun helm-moccur--next-or-previous-char () - (save-excursion - (or (re-search-forward "^." nil t) - (re-search-backward "^." nil t)))) - -(defun helm-moccur-get-line (beg end) - "Format line for `helm-source-moccur'." - (prog1 - (format "%s:%d:%s" - (get-text-property (if (= beg end) - (helm-moccur--next-or-previous-char) - beg) - 'buffer-name) - (save-restriction - (narrow-to-region (or (previous-single-property-change - (point) 'buffer-name) 1) - (or (next-single-property-change - (if (= beg end) - (helm-moccur--next-or-previous-char) - (point)) - 'buffer-name) - (point-max))) - (line-number-at-pos beg)) - ;; When matching empty line, use empty string - ;; to allow saving and modifying with wgrep. - (if (= beg end) "" (buffer-substring beg end))) - ;; When matching empty line, forward char ("\n") - ;; to not be blocked forever here. - (when (= beg end) (forward-char 1)))) - -(cl-defun helm-moccur-action (candidate - &optional (method (quote buffer)) mark) - "Jump to CANDIDATE with METHOD. -arg METHOD can be one of buffer, buffer-other-window, buffer-other-frame." - (require 'helm-grep) - (let* ((split (helm-grep-split-line candidate)) - (buf (car split)) - (lineno (string-to-number (nth 1 split))) - (split-pat (helm-mm-split-pattern helm-input))) - (cl-case method - (buffer (switch-to-buffer buf)) - (buffer-other-window (switch-to-buffer-other-window buf)) - (buffer-other-frame (switch-to-buffer-other-frame buf))) - (helm-goto-line lineno) - ;; Move point to the nearest matching regexp from bol. - (cl-loop for reg in split-pat - when (save-excursion - (condition-case _err - (if helm-migemo-mode - (helm-mm-migemo-forward reg (point-at-eol) t) - (re-search-forward reg (point-at-eol) t)) - (invalid-regexp nil))) - collect (match-beginning 0) into pos-ls - finally (when pos-ls (goto-char (apply #'min pos-ls)))) - (when mark - (set-marker (mark-marker) (point)) - (push-mark (point) 'nomsg)))) - -(defun helm-moccur-persistent-action (candidate) - (helm-moccur-goto-line candidate) - (helm-highlight-current-line)) - -(defun helm-moccur-goto-line (candidate) - "From multi occur, switch to buffer and go to nth 1 CANDIDATE line." - (helm-moccur-action - candidate 'buffer (or current-prefix-arg ; persistent. - helm-current-prefix-arg))) ; exit. - -(defun helm-moccur-goto-line-ow (candidate) - "Go to CANDIDATE line in other window. -Same as `helm-moccur-goto-line' but go in other window." - (helm-moccur-action - candidate 'buffer-other-window - (or current-prefix-arg ; persistent. - helm-current-prefix-arg))) ; exit. - -(defun helm-moccur-goto-line-of (candidate) - "Go to CANDIDATE line in new frame. -Same as `helm-moccur-goto-line' but go in new frame." - (helm-moccur-action - candidate 'buffer-other-frame - (or current-prefix-arg ; persistent. - helm-current-prefix-arg))) ; exit. - -(defun helm-moccur-run-goto-line-ow () - "Run goto line other window action from `helm-source-moccur'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-goto-line-ow))) -(put 'helm-moccur-run-goto-line-ow 'helm-only t) - -(defun helm-moccur-run-goto-line-of () - "Run goto line new frame action from `helm-source-moccur'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-goto-line-of))) -(put 'helm-moccur-run-goto-line-of 'helm-only t) - -(defun helm-moccur-run-default-action () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-goto-line))) -(put 'helm-moccur-run-default-action 'helm-only t) - -(defvar helm-source-moccur nil) -(defclass helm-source-multi-occur (helm-source-in-buffer) - ((init :initform (lambda () - (require 'helm-grep) - (helm-moccur-init))) - (filter-one-by-one :initform 'helm-moccur-filter-one-by-one) - (get-line :initform helm-moccur-get-line) - (nohighlight :initform t) - (nomark :initform t) - (migemo :initform t) - (action :initform 'helm-source-multi-occur-actions) - (persistent-action :initform 'helm-moccur-persistent-action) - (persistent-help :initform "Go to line") - (resume :initform 'helm-moccur-resume-fn) - (candidate-number-limit :initform 9999) - (help-message :initform 'helm-moccur-help-message) - (keymap :initform helm-moccur-map) - (history :initform 'helm-occur-history) - (requires-pattern :initform 2))) - -(defun helm-moccur-resume-fn () - (with-helm-buffer - (let (new-tick-ls buffer-is-modified) - (set (make-local-variable 'helm-multi-occur-buffer-list) - (cl-loop for b in helm-multi-occur-buffer-list - when (buffer-live-p (get-buffer b)) - collect b)) - (setq buffer-is-modified (/= (length helm-multi-occur-buffer-list) - (length (helm-attr 'moccur-buffers)))) - (helm-attrset 'moccur-buffers helm-multi-occur-buffer-list) - (setq new-tick-ls (cl-loop for b in helm-multi-occur-buffer-list - collect (buffer-chars-modified-tick (get-buffer b)))) - (when buffer-is-modified - (setq helm-multi-occur-buffer-tick new-tick-ls)) - (cl-assert (> (length helm-multi-occur-buffer-list) 0) nil - "helm-resume error: helm-(m)occur buffer list is empty") - (unless (eq helm-moccur-auto-update-on-resume 'never) - (when (or buffer-is-modified - (cl-loop for b in helm-multi-occur-buffer-list - for new-tick = (buffer-chars-modified-tick (get-buffer b)) - for tick in helm-multi-occur-buffer-tick - thereis (/= tick new-tick))) - (helm-aif helm-moccur-auto-update-on-resume - (when (or (eq it 'noask) - (y-or-n-p "Helm (m)occur Buffer outdated, update? ")) - (run-with-idle-timer 0.1 nil (lambda () - (with-helm-buffer - (helm-force-update) - (message "Helm (m)occur Buffer have been udated") - (sit-for 1) (message nil)))) - (unless buffer-is-modified (setq helm-multi-occur-buffer-tick new-tick-ls))) - (run-with-idle-timer 0.1 nil (lambda () - (with-helm-buffer - (let ((ov (make-overlay (save-excursion - (goto-char (point-min)) - (forward-line 1) - (point)) - (point-max)))) - (overlay-put ov 'face 'helm-resume-need-update) - (sit-for 0.3) (delete-overlay ov) - (message "[Helm occur Buffer outdated (C-c C-u to update)]"))))) - (unless buffer-is-modified - (with-helm-after-update-hook - (setq helm-multi-occur-buffer-tick new-tick-ls) - (message "Helm (m)occur Buffer have been udated"))))))))) - -(defun helm-moccur-filter-one-by-one (candidate) - "`filter-one-by-one' function for `helm-source-moccur'." - (require 'helm-grep) - (let* ((split (helm-grep-split-line candidate)) - (buf (car split)) - (lineno (nth 1 split)) - (str (nth 2 split))) - (cons (concat (propertize - buf - 'face 'helm-moccur-buffer - 'help-echo (buffer-file-name - (get-buffer buf)) - 'buffer-name buf) - ":" - (propertize lineno 'face 'helm-grep-lineno) - ":" - (helm-grep-highlight-match str t)) - candidate))) - -(defun helm-multi-occur-1 (buffers &optional input) - "Main function to call `helm-source-moccur' with BUFFERS list." - (let ((bufs (if helm-moccur-always-search-in-current - (cons - ;; will become helm-current-buffer later. - (buffer-name (current-buffer)) - (remove helm-current-buffer buffers)) - buffers))) - (unless helm-source-moccur - (setq helm-source-moccur - (helm-make-source "Moccur" 'helm-source-multi-occur))) - (helm-attrset 'moccur-buffers bufs helm-source-moccur) - (helm-set-local-variable 'helm-multi-occur-buffer-list bufs) - (helm-set-local-variable - 'helm-multi-occur-buffer-tick - (cl-loop for b in bufs - collect (buffer-chars-modified-tick (get-buffer b))))) - (helm :sources 'helm-source-moccur - :buffer "*helm multi occur*" - :history 'helm-occur-history - :keymap helm-moccur-map - :input input - :truncate-lines helm-moccur-truncate-lines)) - -(defun helm-moccur-run-save-buffer () - "Run moccur save results action from `helm-moccur'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action 'helm-moccur-save-results))) -(put 'helm-moccur-run-save-buffer 'helm-only t) - - -;;; helm-moccur-mode -;; -;; -(defvar helm-moccur-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") 'helm-moccur-mode-goto-line) - (define-key map (kbd "C-o") 'helm-moccur-mode-goto-line-ow) - (define-key map (kbd "") 'helm-moccur-mode-goto-line-ow-forward) - (define-key map (kbd "") 'helm-moccur-mode-goto-line-ow-backward) - (define-key map (kbd "") 'helm-gm-next-file) - (define-key map (kbd "") 'helm-gm-precedent-file) - (define-key map (kbd "M-n") 'helm-moccur-mode-goto-line-ow-forward) - (define-key map (kbd "M-p") 'helm-moccur-mode-goto-line-ow-backward) - (define-key map (kbd "M-N") 'helm-gm-next-file) - (define-key map (kbd "M-P") 'helm-gm-precedent-file) - map)) - -(defun helm-moccur-mode-goto-line () - (interactive) - (helm-aif (get-text-property (point) 'helm-realvalue) - (helm-moccur-goto-line it))) - -(defun helm-moccur-mode-goto-line-ow () - (interactive) - (helm-aif (get-text-property (point) 'helm-realvalue) - (helm-moccur-goto-line-ow it))) - -(defun helm-moccur-mode-goto-line-ow-forward-1 (arg) - (condition-case nil - (progn - (save-selected-window - (helm-moccur-mode-goto-line-ow) - (recenter)) - (forward-line arg)) - (error nil))) - -(defun helm-moccur-mode-goto-line-ow-forward () - (interactive) - (helm-moccur-mode-goto-line-ow-forward-1 1)) - -(defun helm-moccur-mode-goto-line-ow-backward () - (interactive) - (helm-moccur-mode-goto-line-ow-forward-1 -1)) - -(defun helm-moccur-save-results (_candidate) - "Save helm moccur results in a `helm-moccur-mode' buffer." - (let ((buf "*hmoccur*") - new-buf) - (when (get-buffer buf) - (setq new-buf (helm-read-string "OccurBufferName: " buf)) - (cl-loop for b in (helm-buffer-list) - when (and (string= new-buf b) - (not (y-or-n-p - (format "Buffer `%s' already exists overwrite? " - new-buf)))) - do (setq new-buf (helm-read-string "OccurBufferName: " "*hmoccur "))) - (setq buf new-buf)) - (with-current-buffer (get-buffer-create buf) - (setq buffer-read-only t) - (let ((inhibit-read-only t)) - (erase-buffer) - (insert "-*- mode: helm-moccur -*-\n\n" - (format "Moccur Results for `%s':\n\n" helm-input)) - (save-excursion - (insert (with-current-buffer helm-buffer - (goto-char (point-min)) (forward-line 1) - (buffer-substring (point) (point-max)))))) - (helm-moccur-mode) (pop-to-buffer buf)) - (message "Helm Moccur Results saved in `%s' buffer" buf))) - -;;;###autoload -(define-derived-mode helm-moccur-mode - special-mode "helm-moccur" - "Major mode to provide actions in helm moccur saved buffer. - -Special commands: -\\{helm-moccur-mode-map}" - (set (make-local-variable 'helm-multi-occur-buffer-list) - (with-helm-buffer helm-multi-occur-buffer-list)) - (set (make-local-variable 'revert-buffer-function) - #'helm-moccur-mode--revert-buffer-function)) - -(defun helm-moccur-mode--revert-buffer-function (&optional _ignore-auto _noconfirm) - (goto-char (point-min)) - (let (pattern) - (when (re-search-forward "^Moccur Results for `\\(.*\\)'" nil t) - (setq pattern (match-string 1)) - (forward-line 0) - (when (re-search-forward "^$" nil t) - (forward-line 1)) - (let ((inhibit-read-only t) - (buffer (current-buffer)) - (buflst helm-multi-occur-buffer-list)) - (delete-region (point) (point-max)) - (message "Reverting buffer...") - (save-excursion - (with-temp-buffer - (insert - "\n" - (cl-loop for buf in buflst - for bufstr = (or (and (buffer-live-p (get-buffer buf)) - (with-current-buffer buf - (buffer-string))) - "") - unless (string= bufstr "") - do (add-text-properties - 0 (length bufstr) - `(buffer-name ,(buffer-name (get-buffer buf))) - bufstr) - concat bufstr) - "\n") - (goto-char (point-min)) - (cl-loop while (re-search-forward pattern nil t) - for line = (helm-moccur-get-line (point-at-bol) (point-at-eol)) - when line - do (with-current-buffer buffer - (insert - (propertize - (car (helm-moccur-filter-one-by-one line)) - 'helm-realvalue line) - "\n"))))) - (message "Reverting buffer done"))))) - - -;;; Predefined commands -;; -;; - -;;;###autoload -(defun helm-regexp () - "Preconfigured helm to build regexps. -`query-replace-regexp' can be run from there against found regexp." - (interactive) - (save-restriction - (when (and (helm-region-active-p) - ;; Don't narrow to region if buffer is already narrowed. - (not (helm-current-buffer-narrowed-p (current-buffer)))) - (narrow-to-region (region-beginning) (region-end))) - (helm :sources helm-source-regexp - :buffer "*helm regexp*" - :prompt "Regexp: " - :history 'helm-build-regexp-history))) - -;;;###autoload -(defun helm-occur () - "Preconfigured helm for Occur." - (interactive) - (helm-occur-init-source) - (let ((bufs (list (buffer-name (current-buffer))))) - (helm-attrset 'moccur-buffers bufs helm-source-occur) - (helm-set-local-variable 'helm-multi-occur-buffer-list bufs) - (helm-set-local-variable - 'helm-multi-occur-buffer-tick - (cl-loop for b in bufs - collect (buffer-chars-modified-tick (get-buffer b))))) - (helm :sources 'helm-source-occur - :buffer "*helm occur*" - :history 'helm-occur-history - :preselect (and (memq 'helm-source-occur helm-sources-using-default-as-input) - (format "%s:%d:" (regexp-quote (buffer-name)) - (line-number-at-pos (point)))) - :truncate-lines helm-moccur-truncate-lines)) - -;;;###autoload -(defun helm-occur-from-isearch () - "Invoke `helm-occur' from isearch." - (interactive) - (let ((input (if isearch-regexp - isearch-string - (regexp-quote isearch-string))) - (bufs (list (buffer-name (current-buffer))))) - (isearch-exit) - (helm-occur-init-source) - (helm-attrset 'moccur-buffers bufs helm-source-occur) - (helm-set-local-variable 'helm-multi-occur-buffer-list bufs) - (helm-set-local-variable - 'helm-multi-occur-buffer-tick - (cl-loop for b in bufs - collect (buffer-chars-modified-tick (get-buffer b)))) - (helm :sources 'helm-source-occur - :buffer "*helm occur*" - :history 'helm-occur-history - :input input - :truncate-lines helm-moccur-truncate-lines))) - -;;;###autoload -(defun helm-multi-occur-from-isearch (&optional _arg) - "Invoke `helm-multi-occur' from isearch. - -With a prefix arg, reverse the behavior of -`helm-moccur-always-search-in-current'. -The prefix arg can be set before calling -`helm-multi-occur-from-isearch' or during the buffer selection." - (interactive "p") - (let (buf-list - helm-moccur-always-search-in-current - (input (if isearch-regexp - isearch-string - (regexp-quote isearch-string)))) - (isearch-exit) - (setq buf-list (helm-comp-read "Buffers: " - (helm-buffer-list) - :name "Occur in buffer(s)" - :marked-candidates t)) - (setq helm-moccur-always-search-in-current - (if (or current-prefix-arg - helm-current-prefix-arg) - (not helm-moccur-always-search-in-current) - helm-moccur-always-search-in-current)) - (helm-multi-occur-1 buf-list input))) - - -(provide 'helm-regexp) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-regexp.el ends here diff --git a/elpa/helm-20160217.958/helm-ring.el b/elpa/helm-20160217.958/helm-ring.el deleted file mode 100644 index eafb6219..00000000 --- a/elpa/helm-20160217.958/helm-ring.el +++ /dev/null @@ -1,470 +0,0 @@ -;;; helm-ring.el --- kill-ring, mark-ring, and register browsers for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-utils) -(require 'helm-help) -(require 'helm-elisp) - -(declare-function undo-tree-restore-state-from-register "ext:undo-tree.el" (register)) - - -(defgroup helm-ring nil - "Ring related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-kill-ring-threshold 3 - "Minimum length of a candidate to be listed by `helm-source-kill-ring'." - :type 'integer - :group 'helm-ring) - -(defcustom helm-kill-ring-max-lines-number 5 - "Max number of lines displayed per candidate in kill-ring browser. -If nil or zero (disabled), don't truncate candidate, show all." - :type '(choice (const :tag "Disabled" nil) - (integer :tag "Max number of lines")) - :group 'helm-ring) - -(defcustom helm-register-max-offset 160 - "Max size of string register entries before truncating." - :group 'helm-ring - :type 'integer) - -(defcustom helm-kill-ring-actions - '(("Yank" . helm-kill-ring-action) - ("Delete" . (lambda (_candidate) - (cl-loop for cand in (helm-marked-candidates) - do (setq kill-ring - (delete cand kill-ring)))))) - "List of actions for kill ring source." - :group 'helm-ring - :type '(alist :key-type string :value-type function)) - - -;;; Kill ring -;; -;; -(defvar helm-kill-ring-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-y") 'helm-next-line) - (define-key map (kbd "M-u") 'helm-previous-line) - map) - "Keymap for `helm-show-kill-ring'.") - -(defvar helm-source-kill-ring - (helm-build-sync-source "Kill Ring" - :init (lambda () (helm-attrset 'last-command last-command)) - :candidates #'helm-kill-ring-candidates - :filtered-candidate-transformer #'helm-kill-ring-transformer - :action 'helm-kill-ring-actions - :persistent-action (lambda (_candidate) (ignore)) - :persistent-help "DoNothing" - :keymap helm-kill-ring-map - :migemo t - :multiline t) - "Source for browse and insert contents of kill-ring.") - -(defun helm-kill-ring-candidates () - (cl-loop for kill in (helm-fast-remove-dups kill-ring :test 'equal) - unless (or (< (length kill) helm-kill-ring-threshold) - (string-match "\\`[\n[:blank:]]+\\'" kill)) - collect kill)) - -(defun helm-kill-ring-transformer (candidates _source) - "Display only the `helm-kill-ring-max-lines-number' lines of candidate." - (cl-loop for i in candidates - when (get-text-property 0 'read-only i) - do (set-text-properties 0 (length i) '(read-only nil) i) - for nlines = (with-temp-buffer (insert i) (count-lines (point-min) (point-max))) - if (and helm-kill-ring-max-lines-number - (> nlines helm-kill-ring-max-lines-number)) - collect (cons - (with-temp-buffer - (insert i) - (goto-char (point-min)) - (concat - (buffer-substring - (point-min) - (save-excursion - (forward-line helm-kill-ring-max-lines-number) - (point))) - "[...]")) i) - else collect i)) - -(defun helm-kill-ring-action (str) - "Insert STR in `kill-ring' and set STR to the head. -If this action is executed just after `yank', -replace with STR as yanked string." - (with-helm-current-buffer - (setq kill-ring (delete str kill-ring)) - (if (not (eq (helm-attr 'last-command helm-source-kill-ring) 'yank)) - (insert-for-yank str) - ;; from `yank-pop' - (let ((inhibit-read-only t) - (before (< (point) (mark t)))) - (if before - (funcall (or yank-undo-function 'delete-region) (point) (mark t)) - (funcall (or yank-undo-function 'delete-region) (mark t) (point))) - (setq yank-undo-function nil) - (set-marker (mark-marker) (point) helm-current-buffer) - (insert-for-yank str) - ;; Set the window start back where it was in the yank command, - ;; if possible. - (set-window-start (selected-window) yank-window-start t) - (when before - ;; This is like exchange-point-and-mark, but doesn't activate the mark. - ;; It is cleaner to avoid activation, even though the command - ;; loop would deactivate the mark because we inserted text. - (goto-char (prog1 (mark t) - (set-marker (mark-marker) (point) helm-current-buffer)))))) - (kill-new str))) - - -;;;; -;; DO NOT use these sources with other sources use -;; the commands `helm-mark-ring', `helm-global-mark-ring' or -;; `helm-all-mark-rings' instead. - -(defun helm-mark-ring-line-string-at-pos (pos) - "Return line string at position POS." - (save-excursion - (goto-char pos) - (forward-line 0) - (let ((line (car (split-string (thing-at-point 'line) "[\n\r]")))) - (if (string= "" line) - "" - line)))) - -(defun helm-mark-ring-get-candidates () - (with-helm-current-buffer - (cl-loop with marks = (if (mark t) (cons (mark-marker) mark-ring) mark-ring) - for i in marks - with max-line-number = (line-number-at-pos (point-max)) - with width = (length (number-to-string max-line-number)) - for m = (format (concat "%" (number-to-string width) "d: %s") - (line-number-at-pos i) - (helm-mark-ring-line-string-at-pos i)) - unless (and recip (member m recip)) - collect m into recip - finally return recip))) - -(defvar helm-source-mark-ring - (helm-build-sync-source "mark-ring" - :candidates #'helm-mark-ring-get-candidates - :action '(("Goto line" - . (lambda (candidate) - (helm-goto-line (string-to-number candidate))))) - :persistent-action (lambda (candidate) - (helm-goto-line (string-to-number candidate)) - (helm-highlight-current-line)) - :persistent-help "Show this line")) - -;;; Global-mark-ring -(defvar helm-source-global-mark-ring - (helm-build-sync-source "global-mark-ring" - :candidates #'helm-global-mark-ring-get-candidates - :action '(("Goto line" - . (lambda (candidate) - (let ((items (split-string candidate ":"))) - (switch-to-buffer (cl-second items)) - (helm-goto-line (string-to-number (car items))))))) - :persistent-action (lambda (candidate) - (let ((items (split-string candidate ":"))) - (switch-to-buffer (cl-second items)) - (helm-goto-line (string-to-number (car items))) - (helm-highlight-current-line))) - :persistent-help "Show this line")) - -(defun helm-global-mark-ring-format-buffer (marker) - (with-current-buffer (marker-buffer marker) - (goto-char marker) - (forward-line 0) - (let ((line (pcase (thing-at-point 'line) - ((and line (pred stringp) - (guard (not (string-match-p "\\`\n?\\'" line)))) - (car (split-string line "[\n\r]"))) - (_ "")))) - (format "%7d:%s: %s" - (line-number-at-pos) (marker-buffer marker) line)))) - -(defun helm-global-mark-ring-get-candidates () - (let ((marks global-mark-ring)) - (when marks - (cl-loop for i in marks - for mb = (marker-buffer i) - for gm = (unless (or (string-match "^ " (format "%s" mb)) - (null mb)) - (helm-global-mark-ring-format-buffer i)) - when (and gm (not (member gm recip))) - collect gm into recip - finally return recip)))) - -(defun helm--push-mark (&optional location nomsg activate) - "[Internal] Don't use directly, use instead `helm-push-mark-mode'." - (unless (null (mark t)) - (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring)) - (when (> (length mark-ring) mark-ring-max) - (move-marker (car (nthcdr mark-ring-max mark-ring)) nil) - (setcdr (nthcdr (1- mark-ring-max) mark-ring) nil))) - (set-marker (mark-marker) (or location (point)) (current-buffer)) - ;; Now push the mark on the global mark ring. - (setq global-mark-ring (cons (copy-marker (mark-marker)) - ;; Avoid having multiple entries - ;; for same buffer in `global-mark-ring'. - (cl-loop with mb = (current-buffer) - for m in global-mark-ring - for nmb = (marker-buffer m) - unless (eq mb nmb) - collect m))) - (when (> (length global-mark-ring) global-mark-ring-max) - (move-marker (car (nthcdr global-mark-ring-max global-mark-ring)) nil) - (setcdr (nthcdr (1- global-mark-ring-max) global-mark-ring) nil)) - (or nomsg executing-kbd-macro (> (minibuffer-depth) 0) - (message "Mark set")) - (when (or activate (not transient-mark-mode)) - (set-mark (mark t))) - nil) - -(defadvice push-mark (around helm-push-mark-mode) - (helm--push-mark location nomsg activate)) - -;;;###autoload -(define-minor-mode helm-push-mark-mode - "Provide an improved version of `push-mark'. -Modify the behavior of `push-mark' to update -the `global-mark-ring' after each new visit." - :group 'helm-ring - :global t - (if helm-push-mark-mode - (if (fboundp 'advice-add) - (advice-add 'push-mark :override #'helm--push-mark) - (ad-activate 'push-mark)) - (if (fboundp 'advice-remove) - (advice-remove 'push-mark #'helm--push-mark) - (ad-deactivate 'push-mark)))) - -;;;; -;;; Insert from register -(defvar helm-source-register - (helm-build-sync-source "Registers" - :candidates #'helm-register-candidates - :action-transformer #'helm-register-action-transformer - :persistent-help "" - :multiline t - :action '(("Delete Register(s)" . - (lambda (_candidate) - (cl-loop for candidate in (helm-marked-candidates) - for register = (car candidate) - do (setq register-alist - (delq (assoc register register-alist) - register-alist))))))) - "See (info \"(emacs)Registers\")") - -(defun helm-register-candidates () - "Collecting register contents and appropriate commands." - (cl-loop for (char . val) in register-alist - for key = (single-key-description char) - for string-actions = - (cond - ((numberp val) - (list (int-to-string val) - 'insert-register - 'increment-register)) - ((markerp val) - (let ((buf (marker-buffer val))) - (if (null buf) - (list "a marker in no buffer") - (list (concat - "a buffer position:" - (buffer-name buf) - ", position " - (int-to-string (marker-position val))) - 'jump-to-register - 'insert-register)))) - ((and (consp val) (window-configuration-p (car val))) - (list "window configuration." - 'jump-to-register)) - ((and (vectorp val) - (fboundp 'undo-tree-register-data-p) - (undo-tree-register-data-p (elt val 1))) - (list - "Undo-tree entry." - 'undo-tree-restore-state-from-register)) - ((or (and (vectorp val) (eq 'registerv (aref val 0))) - (and (consp val) (frame-configuration-p (car val)))) - (list "frame configuration." - 'jump-to-register)) - ((and (consp val) (eq (car val) 'file)) - (list (concat "file:" - (prin1-to-string (cdr val)) - ".") - 'jump-to-register)) - ((and (consp val) (eq (car val) 'file-query)) - (list (concat "file:a file-query reference: file " - (car (cdr val)) - ", position " - (int-to-string (car (cdr (cdr val)))) - ".") - 'jump-to-register)) - ((consp val) - (let ((lines (format "%4d" (length val)))) - (list (format "%s: %s\n" lines - (truncate-string-to-width - (mapconcat 'identity (list (car val)) - "^J") (- (window-width) 15))) - 'insert-register))) - ((stringp val) - (list - ;; without properties - (concat (substring-no-properties - val 0 (min (length val) helm-register-max-offset)) - (if (> (length val) helm-register-max-offset) - "[...]" "")) - 'insert-register - 'append-to-register - 'prepend-to-register))) - unless (null string-actions) ; Fix Issue #1107. - collect (cons (format "Register %3s:\n %s" key (car string-actions)) - (cons char (cdr string-actions))))) - -(defun helm-register-action-transformer (actions register-and-functions) - "Decide actions by the contents of register." - (cl-loop with transformer-actions = nil - with func-actions = - '((insert-register - "Insert Register" . - (lambda (c) (insert-register (car c)))) - (jump-to-register - "Jump to Register" . - (lambda (c) (jump-to-register (car c)))) - (append-to-register - "Append Region to Register" . - (lambda (c) (append-to-register - (car c) (region-beginning) (region-end)))) - (prepend-to-register - "Prepend Region to Register" . - (lambda (c) (prepend-to-register - (car c) (region-beginning) (region-end)))) - (increment-register - "Increment Prefix Arg to Register" . - (lambda (c) (increment-register - helm-current-prefix-arg (car c)))) - (undo-tree-restore-state-from-register - "Restore Undo-tree register" . - (lambda (c) (and (fboundp 'undo-tree-restore-state-from-register) - (undo-tree-restore-state-from-register (car c)))))) - for func in (cdr register-and-functions) - for cell = (assq func func-actions) - when cell - do (push (cdr cell) transformer-actions) - finally return (append (nreverse transformer-actions) actions))) - -;;;###autoload -(defun helm-mark-ring () - "Preconfigured `helm' for `helm-source-mark-ring'." - (interactive) - (helm :sources 'helm-source-mark-ring - :resume 'noresume - :buffer "*helm mark*")) - -;;;###autoload -(defun helm-global-mark-ring () - "Preconfigured `helm' for `helm-source-global-mark-ring'." - (interactive) - (helm :sources 'helm-source-global-mark-ring - :resume 'noresume - :buffer "*helm global mark*")) - -;;;###autoload -(defun helm-all-mark-rings () - "Preconfigured `helm' for `helm-source-global-mark-ring' and \ -`helm-source-mark-ring'." - (interactive) - (helm :sources '(helm-source-mark-ring - helm-source-global-mark-ring) - :resume 'noresume - :buffer "*helm mark ring*")) - -;;;###autoload -(defun helm-register () - "Preconfigured `helm' for Emacs registers." - (interactive) - (helm :sources 'helm-source-register - :resume 'noresume - :buffer "*helm register*")) - -;;;###autoload -(defun helm-show-kill-ring () - "Preconfigured `helm' for `kill-ring'. -It is drop-in replacement of `yank-pop'. - -First call open the kill-ring browser, next calls move to next line." - (interactive) - (let ((enable-recursive-minibuffers t)) - (helm :sources helm-source-kill-ring - :buffer "*helm kill ring*" - :resume 'noresume - :allow-nest t))) - -;;;###autoload -(defun helm-execute-kmacro () - "Preconfigured helm for keyboard macros. -Define your macros with `f3' and `f4'. -See (info \"(emacs) Keyboard Macros\") for detailed infos. -This command is useful when used with persistent action." - (interactive) - (helm :sources - (helm-build-sync-source "Kmacro" - :candidates (lambda () - (helm-fast-remove-dups - (cons (kmacro-ring-head) - kmacro-ring) - :test 'equal)) - :multiline t - :candidate-transformer - (lambda (candidates) - (cl-loop for c in candidates collect - (propertize (help-key-description (car c) nil) - 'helm-realvalue c))) - :persistent-help "Execute kmacro" - :help-message 'helm-kmacro-help-message - :action - (helm-make-actions - "Execute kmacro (`C-u ' to execute times)" - (lambda (candidate) - (interactive) - ;; Move candidate on top of list for next use. - (setq kmacro-ring (delete candidate kmacro-ring)) - (kmacro-push-ring) - (kmacro-split-ring-element candidate) - (kmacro-exec-ring-item - candidate helm-current-prefix-arg)))) - :buffer "*helm kmacro*")) - -(provide 'helm-ring) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-ring.el ends here diff --git a/elpa/helm-20160217.958/helm-semantic.el b/elpa/helm-20160217.958/helm-semantic.el deleted file mode 100644 index 13801826..00000000 --- a/elpa/helm-20160217.958/helm-semantic.el +++ /dev/null @@ -1,223 +0,0 @@ -;;; helm-semantic.el --- Helm interface for Semantic -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Daniel Hackney -;; Author: Daniel Hackney - -;; 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 . - -;;; Commentary: - -;; Uses `candidates-in-buffer' for speed. - -;;; Code: - -(require 'cl-lib) -(require 'semantic) -(require 'helm-help) -(require 'helm-imenu) - -(declare-function pulse-momentary-highlight-one-line "pulse.el" (point &optional face)) - -(defgroup helm-semantic nil - "Semantic tags related libraries and applications for helm." - :group 'helm) - -(defcustom helm-semantic-lynx-style-map t - "Use Arrow keys to jump to occurences." - :group 'helm-semantic - :type 'boolean) - -(defcustom helm-semantic-display-style - '((python-mode . semantic-format-tag-summarize) - (c-mode . semantic-format-tag-concise-prototype-c-mode) - (emacs-lisp-mode . semantic-format-tag-abbreviate-emacs-lisp-mode)) - "Function to present a semantic tag according to `major-mode'. - -It is an alist where the `car' of each element is a `major-mode' and -the `cdr' a `semantic-format-tag-*' function. - -If no function is found for current `major-mode', fall back to -`semantic-format-tag-summarize' default function. - -You can have more or less informations depending of the `semantic-format-tag-*' -function you choose. - -All the supported functions are prefixed with \"semantic-format-tag-\", -you have completion on these functions with `C-M i' in the customize interface." - :group 'helm-semantic - :type '(alist :key-type symbol :value-type symbol)) - -;;; keymap -(defvar helm-semantic-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (when helm-semantic-lynx-style-map - (define-key map (kbd "") 'helm-maybe-exit-minibuffer) - (define-key map (kbd "") 'helm-execute-persistent-action)) - (delq nil map))) - -;; Internals vars -(defvar helm-semantic--tags-cache nil) - -(defun helm-semantic--fetch-candidates (tags depth &optional class) - "Write the contents of TAGS to the current buffer." - (let ((class class) cur-type - (stylefn (or (with-helm-current-buffer - (assoc-default major-mode helm-semantic-display-style)) - #'semantic-format-tag-summarize))) - (cl-dolist (tag tags) - (when (listp tag) - (cl-case (setq cur-type (semantic-tag-class tag)) - ((function variable type) - (let ((spaces (make-string (* depth 2) ?\s)) - (type-p (eq cur-type 'type))) - (unless (and (> depth 0) (not type-p)) - (setq class nil)) - (insert - (if (and class (not type-p)) - (format "%s%s(%s) " - spaces (if (< depth 2) "" "├►") class) - spaces) - ;; Save the tag for later - (propertize (funcall stylefn tag nil t) - 'semantic-tag tag) - "\n") - (and type-p (setq class (car tag))) - ;; Recurse to children - (unless (eq cur-type 'function) - (helm-semantic--fetch-candidates - (semantic-tag-components tag) (1+ depth) class)))) - - ;; Don't do anything with packages or includes for now - ((package include) - (insert - (propertize (funcall stylefn tag nil t) - 'semantic-tag tag) - "\n") - ) - ;; Catch-all - (t)))))) - -(defun helm-semantic-default-action (_candidate &optional persistent) - ;; By default, helm doesn't pass on the text properties of the selection. - ;; Fix this. - (helm-log-run-hook 'helm-goto-line-before-hook) - (with-current-buffer helm-buffer - (when (looking-at " ") - (goto-char (next-single-property-change - (point-at-bol) 'semantic-tag nil (point-at-eol)))) - (let ((tag (get-text-property (point) 'semantic-tag))) - (semantic-go-to-tag tag) - (unless persistent - (pulse-momentary-highlight-one-line (point)))))) - -(defun helm-semantic--maybe-set-needs-update () - (with-helm-current-buffer - (when (semantic-parse-tree-needs-update-p) - (semantic-parse-tree-set-needs-update)))) - -(defvar helm-source-semantic nil) - -(defclass helm-semantic-source (helm-source-in-buffer) - ((init :initform (lambda () - (helm-semantic--maybe-set-needs-update) - (setq helm-semantic--tags-cache (semantic-fetch-tags)) - (with-current-buffer (helm-candidate-buffer 'global) - (let ((major-mode (with-helm-current-buffer major-mode))) - (helm-semantic--fetch-candidates helm-semantic--tags-cache 0))))) - (get-line :initform 'buffer-substring) - (persistent-help :initform "Show this entry") - (keymap :initform 'helm-semantic-map) - (help-message :initform 'helm-semantic-help-message) - (persistent-action :initform (lambda (elm) - (helm-semantic-default-action elm t) - (helm-highlight-current-line))) - (action :initform 'helm-semantic-default-action))) - -(defcustom helm-semantic-fuzzy-match nil - "Enable fuzzy matching in `helm-source-semantic'." - :group 'helm-semantic - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-semantic - (helm-make-source "Semantic Tags" 'helm-semantic-source - :fuzzy-match helm-semantic-fuzzy-match)))) - -;;;###autoload -(defun helm-semantic (arg) - "Preconfigured `helm' for `semantic'. -If ARG is supplied, pre-select symbol at point instead of current" - (interactive "P") - (let ((tag (helm-aif (semantic-current-tag-parent) - (cons (format "\\_<%s\\_>" (car it)) - (format "\\_<%s\\_>" (car (semantic-current-tag)))) - (format "\\_<%s\\_>" (car (semantic-current-tag)))))) - (unless helm-source-semantic - (setq helm-source-semantic - (helm-make-source "Semantic Tags" 'helm-semantic-source - :fuzzy-match helm-semantic-fuzzy-match))) - (helm :sources 'helm-source-semantic - :candidate-number-limit 9999 - :preselect (if arg - (thing-at-point 'symbol) - tag) - :buffer "*helm semantic*"))) - -;;;###autoload -(defun helm-semantic-or-imenu (arg) - "Preconfigured helm for `semantic' or `imenu'. -If ARG is supplied, pre-select symbol at point instead of current -semantic tag in scope. - -If `semantic-mode' is active in the current buffer, then use -semantic for generating tags, otherwise fall back to `imenu'. -Fill in the symbol at point by default." - (interactive "P") - (unless helm-source-semantic - (setq helm-source-semantic - (helm-make-source "Semantic Tags" 'helm-semantic-source - :fuzzy-match helm-semantic-fuzzy-match))) - (unless helm-source-imenu - (setq helm-source-imenu - (helm-make-source "Imenu" 'helm-imenu-source - :fuzzy-match helm-imenu-fuzzy-match))) - (let* ((source (if (semantic-active-p) - 'helm-source-semantic - 'helm-source-imenu)) - (imenu-p (eq source 'helm-source-imenu)) - (imenu-auto-rescan imenu-p) - (helm-execute-action-at-once-if-one - (and imenu-p - helm-imenu-execute-action-at-once-if-one)) - (tag (helm-aif (semantic-current-tag-parent) - (cons (format "\\_<%s\\_>" (car it)) - (format "\\_<%s\\_>" (car (semantic-current-tag)))) - (format "\\_<%s\\_>" (car (semantic-current-tag)))))) - (helm :sources source - :candidate-number-limit 9999 - :preselect (if (or arg imenu-p) - (thing-at-point 'symbol) - tag) - :buffer "*helm semantic/imenu*"))) - -(provide 'helm-semantic) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-semantic.el ends here diff --git a/elpa/helm-20160217.958/helm-sys.el b/elpa/helm-20160217.958/helm-sys.el deleted file mode 100644 index 4c94ff21..00000000 --- a/elpa/helm-20160217.958/helm-sys.el +++ /dev/null @@ -1,300 +0,0 @@ -;;; helm-sys.el --- System related functions for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-utils) - - -(defgroup helm-sys nil - "System related helm library." - :group 'helm) - -(defface helm-top-columns - '((t :inherit helm-header)) - "Face for helm help string in minibuffer." - :group 'helm-sys) - - -(defun helm-top-command-set-fn (var _value) - (set var - (cl-case system-type - (darwin "env COLUMNS=%s ps -axo pid,user,pri,nice,ucomm,tty,start,vsz,%%cpu,%%mem,etime,command") - (t "env COLUMNS=%s top -b -n 1")))) - -(defcustom helm-top-command "env COLUMNS=%s top -b -n 1" - "Top command used to display output of top. -To use top command, a version supporting batch mode (-b option) is needed. -On Mac OSX top command doesn't support this, so ps command -is used by default instead. -If you modify this the number and order of elements displayed -should be the same as top command to have the sort commands -working properly, that is 12 elements with the 2 first being -PID and USER and the last 4 being %CPU, %MEM, TIME and COMMAND. -A format string where %s will be replaced with `frame-width'." - :group 'helm-sys - :type 'string - :set 'helm-top-command-set-fn) - - -;;; Top (process) -;; -;; -(defvar helm-top-sort-fn nil) -(defvar helm-top-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-P") 'helm-top-run-sort-by-cpu) - (define-key map (kbd "M-C") 'helm-top-run-sort-by-com) - (define-key map (kbd "M-M") 'helm-top-run-sort-by-mem) - (define-key map (kbd "M-U") 'helm-top-run-sort-by-user) - map)) - -(defvar helm-source-top - (helm-build-in-buffer-source "Top" - :header-name (lambda (name) (concat name " (Press C-c C-u to refresh)")) - :init #'helm-top-init - :nomark t - :display-to-real #'helm-top-display-to-real - :persistent-action #'helm-top-sh-persistent-action - :persistent-help "SIGTERM" - :help-message 'helm-top-help-message - :follow 'never - :keymap helm-top-map - :filtered-candidate-transformer #'helm-top-sort-transformer - :action-transformer #'helm-top-action-transformer)) - -(defun helm-top-transformer (candidates _source) - "Transformer for `helm-top'. -Return empty string for non--valid candidates." - (cl-loop for disp in candidates collect - (cond ((string-match "^ *[0-9]+" disp) disp) - ((string-match "^ *PID" disp) - (cons (propertize disp 'face 'helm-top-columns) "")) - (t (cons disp ""))))) - -(defun helm-top-action-transformer (actions _candidate) - "Action transformer for `top'. -Show actions only on line starting by a PID." - (let ((disp (helm-get-selection nil t))) - (cond ((string-match "^ *[0-9]+" disp) - (list '("kill (SIGTERM)" . (lambda (pid) (helm-top-sh "TERM" pid))) - '("kill (SIGKILL)" . (lambda (pid) (helm-top-sh "KILL" pid))) - '("kill (SIGINT)" . (lambda (pid) (helm-top-sh "INT" pid))) - '("kill (Choose signal)" - . (lambda (pid) - (helm-top-sh - (helm-comp-read (format "Kill [%s] with signal: " pid) - '("ALRM" "HUP" "INT" "KILL" "PIPE" "POLL" - "PROF" "TERM" "USR1" "USR2" "VTALRM" - "STKFLT" "PWR" "WINCH" "CHLD" "URG" - "TSTP" "TTIN" "TTOU" "STOP" "CONT" - "ABRT" "FPE" "ILL" "QUIT" "SEGV" - "TRAP" "SYS" "EMT" "BUS" "XCPU" "XFSZ") - :must-match t) - pid))))) - (t actions)))) - -(defun helm-top-sh (sig pid) - "Run kill shell command with signal SIG on PID for `helm-top'." - (let ((cmd (format "kill -%s %s" sig pid))) - (message "Executed %s\n%s" cmd (shell-command-to-string cmd)))) - -(defun helm-top-sh-persistent-action (pid) - (delete-other-windows) - (helm-top-sh "TERM" pid) - (helm-force-update)) - -(defun helm-top-init () - "Insert output of top command in candidate buffer." - (unless helm-top-sort-fn (helm-top-set-mode-line "CPU")) - (with-current-buffer (helm-candidate-buffer 'global) - (call-process-shell-command - (format helm-top-command (frame-width)) - nil (current-buffer)))) - -(defun helm-top-display-to-real (line) - "Return pid only from LINE." - (car (split-string line))) - -;; Sort top command - -(defun helm-top-set-mode-line (str) - (if (string-match "Sort:\\[\\(.*\\)\\] " helm-top-mode-line) - (setq helm-top-mode-line (replace-match str nil nil helm-top-mode-line 1)) - (setq helm-top-mode-line (concat (format "Sort:[%s] " str) helm-top-mode-line)))) - -(defun helm-top-sort-transformer (candidates source) - (helm-top-transformer - (if helm-top-sort-fn - (cl-loop for c in candidates - if (string-match "^ *[0-9]+" c) - collect c into pid-cands - else collect c into header-cands - finally return (append - header-cands - (sort pid-cands helm-top-sort-fn))) - candidates) - source)) - -(defun helm-top-sort-by-com (s1 s2) - (let* ((split-1 (split-string s1)) - (split-2 (split-string s2)) - (com-1 (nth 11 split-1)) - (com-2 (nth 11 split-2))) - (string< com-1 com-2))) - -(defun helm-top-sort-by-mem (s1 s2) - (let* ((split-1 (split-string s1)) - (split-2 (split-string s2)) - (mem-1 (string-to-number (nth 9 split-1))) - (mem-2 (string-to-number (nth 9 split-2)))) - (> mem-1 mem-2))) - -(defun helm-top-sort-by-user (s1 s2) - (let* ((split-1 (split-string s1)) - (split-2 (split-string s2)) - (user-1 (nth 1 split-1)) - (user-2 (nth 1 split-2))) - (string< user-1 user-2))) - -(defun helm-top-run-sort-by-com () - (interactive) - (helm-top-set-mode-line "COM") - (setq helm-top-sort-fn 'helm-top-sort-by-com) - (helm-force-update)) - -(defun helm-top-run-sort-by-cpu () - (interactive) - (helm-top-set-mode-line "CPU") - (setq helm-top-sort-fn nil) - (helm-force-update)) - -(defun helm-top-run-sort-by-mem () - (interactive) - (helm-top-set-mode-line "MEM") - (setq helm-top-sort-fn 'helm-top-sort-by-mem) - (helm-force-update)) - -(defun helm-top-run-sort-by-user () - (interactive) - (helm-top-set-mode-line "USER") - (setq helm-top-sort-fn 'helm-top-sort-by-user) - (helm-force-update)) - - -;;; X RandR resolution change -;; -;; -;;; FIXME I do not care multi-display. - -(defun helm-xrandr-info () - "Return a pair with current X screen number and current X display name." - (with-temp-buffer - (call-process "xrandr" nil (current-buffer) nil - "--current") - (let (screen output) - (goto-char (point-min)) - (save-excursion - (when (re-search-forward "\\(^Screen \\)\\([0-9]\\):" nil t) - (setq screen (match-string 2)))) - (when (re-search-forward "^\\(.*\\) connected" nil t) - (setq output (match-string 1))) - (list screen output)))) - -(defun helm-xrandr-screen () - "Return current X screen number." - (car (helm-xrandr-info))) - -(defun helm-xrandr-output () - "Return current X display name." - (cadr (helm-xrandr-info))) - -(defvar helm-source-xrandr-change-resolution - '((name . "Change Resolution") - (candidates - . (lambda () - (with-temp-buffer - (call-process "xrandr" nil (current-buffer) nil - "--screen" (helm-xrandr-screen) "-q") - (goto-char 1) - (cl-loop with modes = nil - while (re-search-forward " \\([0-9]+x[0-9]+\\)" nil t) - for mode = (match-string 1) - unless (member mode modes) - collect mode into modes - finally return modes)))) - (action - ("Change Resolution" - . (lambda (mode) - (call-process "xrandr" nil nil nil - "--screen" (helm-xrandr-screen) - "--output" (helm-xrandr-output) - "--mode" mode)))))) - - -;;; Emacs process -;; -;; -(defvar helm-source-emacs-process - '((name . "Emacs Process") - (init . (lambda () (list-processes--refresh))) - (candidates . (lambda () (mapcar #'process-name (process-list)))) - (persistent-action . (lambda (elm) - (delete-process (get-process elm)) - (helm-delete-current-selection))) - (persistent-help . "Kill Process") - (action ("Kill Process" . (lambda (elm) - (delete-process (get-process elm))))))) - - -;;;###autoload -(defun helm-top () - "Preconfigured `helm' for top command." - (interactive) - (save-window-excursion - (unless helm-alive-p (delete-other-windows)) - (helm :sources 'helm-source-top - :buffer "*helm top*" :full-frame t - :candidate-number-limit 9999 - :preselect "^\\s-*[0-9]+"))) - -;;;###autoload -(defun helm-list-emacs-process () - "Preconfigured `helm' for emacs process." - (interactive) - (helm-other-buffer 'helm-source-emacs-process "*helm process*")) - -;;;###autoload -(defun helm-xrandr-set () - "Preconfigured helm for xrandr." - (interactive) - (helm :sources 'helm-source-xrandr-change-resolution - :buffer "*helm xrandr*")) - -(provide 'helm-sys) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-sys.el ends here diff --git a/elpa/helm-20160217.958/helm-tags.el b/elpa/helm-20160217.958/helm-tags.el deleted file mode 100644 index 99b6fce7..00000000 --- a/elpa/helm-20160217.958/helm-tags.el +++ /dev/null @@ -1,345 +0,0 @@ -;;; helm-tags.el --- Helm for Etags. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'helm-utils) -(require 'helm-grep) - - -(defgroup helm-tags nil - "Tags related Applications and libraries for Helm." - :group 'helm) - -(defcustom helm-etags-tag-file-name "TAGS" - "Etags tag file name." - :type 'string - :group 'helm-tags) - -(defcustom helm-etags-tag-file-search-limit 10 - "The limit level of directory to search tag file. -Don't search tag file deeply if outside this value." - :type 'number - :group 'helm-tags) - -(defcustom helm-etags-match-part-only 'tag - "Allow choosing the tag part of CANDIDATE in `helm-source-etags-select'. -A tag looks like this: - filename: \(defun foo -You can choose matching against only end part of tag (i.e \"foo\"), -against only the tag part (i.e \"(defun foo\"), -or against the whole candidate (i.e \"(filename: (defun foo\")." - :type '(choice - (const :tag "Match only tag" tag) - (const :tag "Match last part of tag" endtag) - (const :tag "Match all file+tag" all)) - :group 'helm-tags) - -(defcustom helm-etags-execute-action-at-once-if-one t - "Whether to jump straight to the selected tag if there's only -one match." - :type 'boolean - :group 'helm-tags) - - -(defgroup helm-tags-faces nil - "Customize the appearance of helm-tags faces." - :prefix "helm-" - :group 'helm-tags - :group 'helm-faces) - -(defface helm-etags-file - '((t (:foreground "Lightgoldenrod4" - :underline t))) - "Face used to highlight etags filenames." - :group 'helm-tags-faces) - - -;;; Etags -;; -;; -(defun helm-etags-run-switch-other-window () - "Run switch to other window action from `helm-source-etags-select'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (c) - (helm-etags-action-goto 'find-file-other-window c))))) -(put 'helm-etags-run-switch-other-window 'helm-only t) - -(defun helm-etags-run-switch-other-frame () - "Run switch to other frame action from `helm-source-etags-select'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (c) - (helm-etags-action-goto 'find-file-other-frame c))))) -(put 'helm-etags-run-switch-other-frame 'helm-only t) - -(defvar helm-etags-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map helm-map) - (define-key map (kbd "M-") 'helm-goto-next-file) - (define-key map (kbd "M-") 'helm-goto-precedent-file) - (define-key map (kbd "C-w") 'helm-yank-text-at-point) - (define-key map (kbd "C-c o") 'helm-etags-run-switch-other-window) - (define-key map (kbd "C-c C-o") 'helm-etags-run-switch-other-frame) - map) - "Keymap used in Etags.") - -(defvar helm-etags-mtime-alist nil - "Store the last modification time of etags files here.") -(defvar helm-etags-cache (make-hash-table :test 'equal) - "Cache content of etags files used here for faster access.") - -(defun helm-etags-get-tag-file (&optional directory) - "Return the path of etags file if found. -Lookes recursively in parents directorys for a -`helm-etags-tag-file-name' file." - ;; Get tag file from `default-directory' or upper directory. - (let ((current-dir (helm-etags-find-tag-file-directory - (or directory default-directory)))) - ;; Return nil if not find tag file. - (when current-dir - (expand-file-name helm-etags-tag-file-name current-dir)))) - -(defun helm-etags-all-tag-files () - "Return files from the following sources; - 1) An automatically located file in the parent directories, by `helm-etags-get-tag-file'. - 2) `tags-file-name', which is commonly set by `find-tag' command. - 3) `tags-table-list' which is commonly set by `visit-tags-table' command." - (helm-fast-remove-dups - (delq nil - (append (list (helm-etags-get-tag-file) - tags-file-name) - tags-table-list)) - :test 'equal)) - -(defun helm-etags-find-tag-file-directory (current-dir) - "Try to find the directory containing tag file. -If not found in CURRENT-DIR search in upper directory." - (let ((file-exists? (lambda (dir) - (let ((tag-path (expand-file-name - helm-etags-tag-file-name dir))) - (and (stringp tag-path) - (file-regular-p tag-path) - (file-readable-p tag-path)))))) - (cl-loop with count = 0 - until (funcall file-exists? current-dir) - ;; Return nil if outside the value of - ;; `helm-etags-tag-file-search-limit'. - if (= count helm-etags-tag-file-search-limit) - do (cl-return nil) - ;; Or search upper directories. - else - do (cl-incf count) - (setq current-dir (expand-file-name (concat current-dir "../"))) - finally return current-dir))) - -(defun helm-etags-get-header-name (_x) - "Create header name for this helm etags session." - (concat "Etags in " - (with-helm-current-buffer - (helm-etags-get-tag-file)))) - -(defun helm-etags-create-buffer (file) - "Create the `helm-buffer' based on contents of etags tag FILE." - (let* (max - (split (with-temp-buffer - (insert-file-contents file) - (prog1 - (split-string (buffer-string) "\n" 'omit-nulls) - (setq max (line-number-at-pos (point-max)))))) - (progress-reporter (make-progress-reporter "Loading tag file..." 0 max))) - (cl-loop - with fname - with cand - for i in split for count from 0 - for elm = (unless (string-match "^\x0c" i) ;; "^L" - (helm-aif (string-match "\177" i) ;; "^?" - (substring i 0 it) - i)) - for linum = (when (string-match "[0-9]+,?[0-9]*$" i) - (car (split-string (match-string 0 i) ","))) - do (cond ((and elm (string-match "^\\([^,]+\\),[0-9]+$" elm)) - (setq fname (propertize (match-string 1 elm) - 'face 'helm-etags-file))) - (elm (setq cand (format "%s:%s:%s" fname linum elm))) - (t (setq cand nil))) - when cand do (progn - (insert (propertize (concat cand "\n") 'linum linum)) - (progress-reporter-update progress-reporter count))))) - -(defun helm-etags-init () - "Feed `helm-buffer' using `helm-etags-cache' or tag file. -If no entry in cache, create one." - (let ((tagfiles (helm-etags-all-tag-files))) - (when tagfiles - (with-current-buffer (helm-candidate-buffer 'global) - (dolist (f tagfiles) - (helm-aif (gethash f helm-etags-cache) - ;; An entry is present in cache, insert it. - (insert it) - ;; No entry, create a new buffer using content of tag file (slower). - (helm-etags-create-buffer f) - ;; Store content of buffer in cache. - (puthash f (buffer-string) helm-etags-cache) - ;; Store or set the last modification of tag file. - (helm-aif (assoc f helm-etags-mtime-alist) - ;; If an entry exists modify it. - (setcdr it (helm-etags-mtime f)) - ;; No entry create a new one. - (add-to-list 'helm-etags-mtime-alist - (cons f (helm-etags-mtime f)))))))))) - -(defvar helm-source-etags-select nil - "Helm source for Etags.") - -(defun helm-etags-build-source () - (helm-build-in-buffer-source "Etags" - :header-name 'helm-etags-get-header-name - :init 'helm-etags-init - :get-line 'buffer-substring - :match-part (lambda (candidate) - ;; Match only the tag part of CANDIDATE - ;; and not the filename. - (cl-ecase helm-etags-match-part-only - (endtag (cadr (split-string - (cl-caddr (helm-grep-split-line candidate))))) - (tag (cl-caddr (helm-grep-split-line candidate))) - (all candidate))) - :fuzzy-match helm-etags-fuzzy-match - :help-message 'helm-etags-help-message - :keymap helm-etags-map - :action '(("Go to tag" . (lambda (c) - (helm-etags-action-goto 'find-file c))) - ("Go to tag in other window" . (lambda (c) - (helm-etags-action-goto - 'find-file-other-window - c))) - ("Go to tag in other frame" . (lambda (c) - (helm-etags-action-goto - 'find-file-other-frame - c)))) - :persistent-help "Go to line" - :persistent-action (lambda (candidate) - (helm-etags-action-goto 'find-file candidate) - (helm-highlight-current-line)))) - -(defcustom helm-etags-fuzzy-match nil - "Use fuzzy matching in `helm-etags-select'." - :group 'helm-tags - :type 'boolean - :set (lambda (var val) - (set var val) - (setq helm-source-etags-select - (helm-etags-build-source)))) - -(defvar find-tag-marker-ring) - -(defun helm-etags-action-goto (switcher candidate) - "Helm default action to jump to an etags entry in other window." - (require 'etags) - (helm-log-run-hook 'helm-goto-line-before-hook) - (let* ((split (helm-grep-split-line candidate)) - (fname (cl-loop for tagf being the hash-keys of helm-etags-cache - for f = (expand-file-name - (car split) (file-name-directory tagf)) - when (file-exists-p f) - return f)) - (elm (cl-caddr split)) - (linum (string-to-number (cadr split)))) - (if (null fname) - (error "file %s not found" fname) - (ring-insert find-tag-marker-ring (point-marker)) - (funcall switcher fname) - (helm-goto-line linum t) - (when (search-forward elm nil t) - (goto-char (match-beginning 0)))))) - -(defun helm-etags-mtime (file) - "Last modification time of etags tag FILE." - (cadr (nth 5 (file-attributes file)))) - -(defun helm-etags-file-modified-p (file) - "Check if tag FILE have been modified in this session. -If FILE is nil return nil." - (let ((last-modif (and file - (assoc-default file helm-etags-mtime-alist)))) - (and last-modif - (/= last-modif (helm-etags-mtime file))))) - -;;;###autoload -(defun helm-etags-select (reinit) - "Preconfigured helm for etags. -If called with a prefix argument REINIT -or if any of the tag files have been modified, reinitialize cache. - -This function aggregates three sources of tag files: - - 1) An automatically located file in the parent directories, - by `helm-etags-get-tag-file'. - 2) `tags-file-name', which is commonly set by `find-tag' command. - 3) `tags-table-list' which is commonly set by `visit-tags-table' command." - (interactive "P") - (let ((tag-files (helm-etags-all-tag-files)) - (helm-execute-action-at-once-if-one - helm-etags-execute-action-at-once-if-one) - (str (if (region-active-p) - (buffer-substring-no-properties - (region-beginning) (region-end)) - ;; Use a raw syntax-table to determine tap. - ;; This may be wrong when calling etags - ;; with hff from a buffer that use - ;; a different syntax, but most of the time it - ;; should be better. - (with-syntax-table (standard-syntax-table) - (thing-at-point 'symbol))))) - (if (cl-notany 'file-exists-p tag-files) - (message "Error: No tag file found.\ -Create with etags shell command, or visit with `find-tag' or `visit-tags-table'.") - (cl-loop for k being the hash-keys of helm-etags-cache - unless (member k tag-files) - do (remhash k helm-etags-cache)) - (mapc (lambda (f) - (when (or (equal reinit '(4)) - (and helm-etags-mtime-alist - (helm-etags-file-modified-p f))) - (remhash f helm-etags-cache))) - tag-files) - (unless helm-source-etags-select - (setq helm-source-etags-select - (helm-etags-build-source))) - (helm :sources 'helm-source-etags-select - :keymap helm-etags-map - :default (if helm-etags-fuzzy-match - str - (list (concat "\\_<" str "\\_>") str)) - :buffer "*helm etags*")))) - -(provide 'helm-tags) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-tags.el ends here diff --git a/elpa/helm-20160217.958/helm-types.el b/elpa/helm-20160217.958/helm-types.el deleted file mode 100644 index 9c5755c6..00000000 --- a/elpa/helm-20160217.958/helm-types.el +++ /dev/null @@ -1,277 +0,0 @@ -;;; helm-types.el --- Helm types classes and methods. -*- lexical-binding: t -*- - -;; Copyright (C) 2015 Thierry Volpiatto - -;; Author: Thierry Volpiatto -;; URL: http://github.com/emacs-helm/helm - -;; 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 . - - -;;; Code: - -(require 'cl-lib) -(require 'eieio) - - -;; Files -(defclass helm-type-file (helm-source) () - "A class to define helm type file.") - -(defmethod helm-source-get-action-from-type ((object helm-type-file)) - (slot-value object 'action)) - -(defun helm-actions-from-type-file () - (let ((source (make-instance 'helm-type-file))) - (helm--setup-source source) - (helm-source-get-action-from-type source))) - -(defcustom helm-type-file-actions - (helm-make-actions - "Find file" 'helm-find-many-files - "Find file as root" 'helm-find-file-as-root - "Find file other window" 'helm-find-files-other-window - "Find file other frame" 'find-file-other-frame - "Open dired in file's directory" 'helm-open-dired - "Grep File(s) `C-u recurse'" 'helm-find-files-grep - "Zgrep File(s) `C-u Recurse'" 'helm-ff-zgrep - "Pdfgrep File(s)" 'helm-ff-pdfgrep - "Insert as org link" 'helm-files-insert-as-org-link - "Checksum File" 'helm-ff-checksum - "Ediff File" 'helm-find-files-ediff-files - "Ediff Merge File" 'helm-find-files-ediff-merge-files - "Etags `M-., C-u reload tag file'" 'helm-ff-etags-select - "View file" 'view-file - "Insert file" 'insert-file - "Add marked files to file-cache" 'helm-ff-cache-add-file - "Delete file(s)" 'helm-delete-marked-files - "Copy file(s) `M-C, C-u to follow'" 'helm-find-files-copy - "Rename file(s) `M-R, C-u to follow'" 'helm-find-files-rename - "Symlink files(s) `M-S, C-u to follow'" 'helm-find-files-symlink - "Relsymlink file(s) `C-u to follow'" 'helm-find-files-relsymlink - "Hardlink file(s) `M-H, C-u to follow'" 'helm-find-files-hardlink - "Open file externally (C-u to choose)" 'helm-open-file-externally - "Open file with default tool" 'helm-open-file-with-default-tool - "Find file in hex dump" 'hexl-find-file) - "Default actions for type files." - :group 'helm-files - :type '(alist :key-type string :value-type function)) - -(defmethod helm--setup-source :primary ((_source helm-type-file))) - -(defmethod helm--setup-source :before ((source helm-type-file)) - (set-slot-value source 'action 'helm-type-file-actions) - (set-slot-value source 'persistent-help "Show this file") - (set-slot-value source 'action-transformer '(helm-transform-file-load-el - helm-transform-file-browse-url - helm-transform-file-cache)) - (set-slot-value source 'candidate-transformer '(helm-skip-boring-files - helm-highlight-files - helm-w32-pathname-transformer)) - (set-slot-value source 'help-message 'helm-generic-file-help-message) - (set-slot-value source 'keymap helm-generic-files-map)) - - -;; Bookmarks -(defclass helm-type-bookmark (helm-source) () - "A class to define type bookmarks.") - -(defcustom helm-type-bookmark-actions - (helm-make-actions - "Jump to bookmark" 'helm-bookmark-jump - "Jump to BM other window" 'helm-bookmark-jump-other-window - "Bookmark edit annotation" 'bookmark-edit-annotation - "Bookmark show annotation" 'bookmark-show-annotation - "Delete bookmark(s)" 'helm-delete-marked-bookmarks - "Edit Bookmark" 'helm-bookmark-edit-bookmark - "Rename bookmark" 'helm-bookmark-rename - "Relocate bookmark" 'bookmark-relocate) - "Default actions for type bookmarks." - :group 'helm-bookmark - :type '(alist :key-type string - :value-type function)) - -(defmethod helm-source-get-action-from-type ((object helm-type-bookmark)) - (slot-value object 'action)) - -(defmethod helm--setup-source :primary ((_source helm-type-bookmark))) - -(defmethod helm--setup-source :before ((source helm-type-bookmark)) - (set-slot-value source 'action 'helm-type-bookmark-actions) - (set-slot-value source 'keymap helm-bookmark-map) - (set-slot-value source 'help-message 'helm-bookmark-help-message) - (set-slot-value source 'migemo t)) - - -;; Buffers -(defclass helm-type-buffer (helm-source) () - "A class to define type buffer.") - -(defcustom helm-type-buffer-actions - (helm-make-actions - "Switch to buffer(s)" 'helm-switch-to-buffers - (lambda () (and (locate-library "popwin") - "Switch to buffer in popup window")) - 'popwin:popup-buffer - "Switch to buffer(s) other window `C-c o'" - 'helm-switch-to-buffers-other-window - "Switch to buffer other frame `C-c C-o'" - 'switch-to-buffer-other-frame - (lambda () (and (locate-library "elscreen") - "Display buffer in Elscreen")) - 'helm-find-buffer-on-elscreen - "Query replace regexp `C-M-%'" - 'helm-buffer-query-replace-regexp - "Query replace `M-%'" 'helm-buffer-query-replace - "View buffer" 'view-buffer - "Display buffer" 'display-buffer - "Grep buffers `M-g s' (C-u grep all buffers)" - 'helm-zgrep-buffers - "Multi occur buffer(s) `C-s'" 'helm-multi-occur-as-action - "Revert buffer(s) `M-U'" 'helm-revert-marked-buffers - "Insert buffer" 'insert-buffer - "Kill buffer(s) `M-D'" 'helm-kill-marked-buffers - "Diff with file `C-='" 'diff-buffer-with-file - "Ediff Marked buffers `C-c ='" 'helm-ediff-marked-buffers - "Ediff Merge marked buffers `M-='" - (lambda (candidate) - (helm-ediff-marked-buffers candidate t))) - "Default actions for type buffers." - :group 'helm-buffers - :type '(alist :key-type string :value-type function)) - -(defmethod helm-source-get-action-from-type ((object helm-type-buffer)) - (slot-value object 'action)) - -(defmethod helm--setup-source :primary ((_source helm-type-buffer))) - -(defmethod helm--setup-source :before ((source helm-type-buffer)) - (set-slot-value source 'action 'helm-type-buffer-actions) - (set-slot-value source 'persistent-help "Show this buffer") - (set-slot-value - source 'filtered-candidate-transformer - '(helm-skip-boring-buffers - helm-buffers-sort-transformer - helm-highlight-buffers))) - -;; Functions -(defclass helm-type-function (helm-source) () - "A class to define helm type function.") - -(defcustom helm-type-function-actions - (helm-make-actions - "Describe command" 'describe-function - "Add command to kill ring" 'helm-kill-new - "Go to command's definition" 'find-function - "Debug on entry" 'debug-on-entry - "Cancel debug on entry" 'cancel-debug-on-entry - "Trace function" 'trace-function - "Trace function (background)" 'trace-function-background - "Untrace function" 'untrace-function) - "Default actions for type functions." - :group 'helm-elisp - :type '(alist :key-type string :value-type function)) - -(defmethod helm-source-get-action-from-type ((object helm-type-function)) - (slot-value object 'action)) - -(defun helm-actions-from-type-function () - (let ((source (make-instance 'helm-type-function))) - (helm--setup-source source) - (helm-source-get-action-from-type source))) - -(defmethod helm--setup-source :primary ((_source helm-type-function))) - -(defmethod helm--setup-source :before ((source helm-type-function)) - (set-slot-value source 'action 'helm-type-function-actions) - (set-slot-value source 'action-transformer - 'helm-transform-function-call-interactively) - (set-slot-value source 'candidate-transformer - 'helm-mark-interactive-functions) - (set-slot-value source 'coerce 'helm-symbolify)) - - -;; Commands -(defclass helm-type-command (helm-source) () - "A class to define helm type command.") - -(defun helm-actions-from-type-command () - (let ((source (make-instance 'helm-type-command))) - (helm--setup-source source) - (helm-source-get-action-from-type source))) - -(defcustom helm-type-command-actions - (append (helm-make-actions - "Call interactively" 'helm-call-interactively) - (helm-actions-from-type-function)) - "Default actions for type command." - :group 'helm-command - :type '(alist :key-type string :value-type function)) - -(defmethod helm--setup-source :primary ((_source helm-type-command))) - -(defmethod helm--setup-source :before ((source helm-type-command)) - (set-slot-value - source 'action 'helm-type-command-actions) - (set-slot-value source 'coerce 'helm-symbolify) - (set-slot-value source 'persistent-action 'describe-function)) - -;; Timers -(defclass helm-type-timers (helm-source) () - "A class to define helm type timers.") - -(defcustom helm-type-timers-actions - '(("Cancel Timer" . (lambda (_timer) - (let ((mkd (helm-marked-candidates))) - (cl-loop for timer in mkd - do (cancel-timer timer))))) - ("Describe Function" . (lambda (tm) - (describe-function (timer--function tm)))) - ("Find Function" . (lambda (tm) - (helm-aif (timer--function tm) - (if (byte-code-function-p it) - (message "Can't find anonymous function `%s'" it) - (find-function it)))))) - "Default actions for type timers." - :group 'helm-elisp - :type '(alist :key-type string :value-type function)) - -(defmethod helm--setup-source :primary ((_source helm-type-timers))) - -(defmethod helm--setup-source :before ((source helm-type-timers)) - (set-slot-value source 'action 'helm-type-timers-actions) - (set-slot-value source 'persistent-action - (lambda (tm) - (describe-function (timer--function tm)))) - (set-slot-value source 'persistent-help "Describe Function")) - -;; Builders. -(defun helm-build-type-file () - (helm-make-type 'helm-type-file)) - -(defun helm-build-type-function () - (helm-make-type 'helm-type-function)) - -(defun helm-build-type-command () - (helm-make-type 'helm-type-command)) - -(provide 'helm-types) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions obsolete) -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; helm-types.el ends here diff --git a/elpa/helm-20160217.958/helm-utils.el b/elpa/helm-20160217.958/helm-utils.el deleted file mode 100644 index cfd8e6ce..00000000 --- a/elpa/helm-20160217.958/helm-utils.el +++ /dev/null @@ -1,664 +0,0 @@ -;;; helm-utils.el --- Utilities Functions for helm. -*- lexical-binding: t -*- - -;; Copyright (C) 2012 ~ 2015 Thierry Volpiatto - -;; 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 . - -;;; Code: - -(require 'cl-lib) -(require 'helm) -(require 'helm-help) -(require 'compile) ; Fixme: Is this needed? -(require 'dired) - -(declare-function helm-find-files-1 "helm-files.el" (fname &optional preselect)) -(declare-function popup-tip "ext:popup") -(defvar winner-boring-buffers) - - -(defgroup helm-utils nil - "Utilities routines for Helm." - :group 'helm) - -(defcustom helm-su-or-sudo "sudo" - "What command to use for root access." - :type 'string - :group 'helm-utils) - -(defcustom helm-default-kbsize 1024.0 - "Default Kbsize to use for showing files size. -It is a float, usually 1024.0 but could be 1000.0 on some systems." - :group 'helm-utils - :type 'float) - -(define-obsolete-variable-alias - 'helm-highlight-number-lines-around-point - 'helm-highlight-matches-around-point-max-lines - "20160119") - -(defcustom helm-highlight-matches-around-point-max-lines 15 - "Number of lines around point where matched items are highlighted." - :group 'helm-utils - :type 'integer) - -(defcustom helm-buffers-to-resize-on-pa nil - "A list of helm buffers where the helm-window should be reduced on persistent actions." - :group 'helm-utils - :type '(repeat (choice string))) - -(defcustom helm-resize-on-pa-text-height 12 - "The size of the helm-window when resizing on persistent action." - :group 'helm-utils - :type 'integer) - -(defcustom helm-sources-using-help-echo-popup '("Moccur" "Imenu in all buffers" - "Ack-Grep" "AG" "Gid" "Git-Grep") - "Show the buffer name or the filename in a popup at selection." - :group 'helm-utils - :type '(repeat (choice string))) - - -(defvar helm-goto-line-before-hook '(helm-save-current-pos-to-mark-ring) - "Run before jumping to line. -This hook run when jumping from `helm-goto-line', `helm-etags-default-action', -and `helm-imenu-default-action'. -This allow you to retrieve a previous position after using the different helm -tools for searching (etags, grep, gid, (m)occur etc...). -By default positions are added to `mark-ring' you can also add to register -by using instead (or adding) `helm-save-pos-to-register-before-jump'. -In this case last position is added to the register -`helm-save-pos-before-jump-register'.") - -(defvar helm-save-pos-before-jump-register ?_ - "The register where `helm-save-pos-to-register-before-jump' save position.") - - -;;; Faces. -;; -(defface helm-selection-line - '((t (:inherit highlight :distant-foreground "black"))) - "Face used in the `helm-current-buffer' when jumping to candidate." - :group 'helm-faces) - -(defface helm-match-item - '((t (:inherit isearch))) - "Face used to highlight item matched in a selected line." - :group 'helm-faces) - - -;; CUA workaround -(defadvice cua-delete-region (around helm-avoid-cua activate) - (ignore-errors ad-do-it)) - -(defadvice copy-region-as-kill (around helm-avoid-cua activate) - (if cua-mode - (ignore-errors ad-do-it) - ad-do-it)) - - -;;; Utils functions -;; -;; -(defun helm-switch-to-buffers (buffer-or-name &optional other-window) - "Switch to buffer BUFFER-OR-NAME. -If more than one buffer marked switch to these buffers in separate windows. -If OTHER-WINDOW is specified keep current-buffer and switch to others buffers -in separate windows." - (let* ((mkds (helm-marked-candidates)) - (size (/ (window-height) (length mkds)))) - (or (<= window-min-height size) - (error "Too many buffers to visit simultaneously.")) - (helm-aif (cdr mkds) - (progn - (if other-window - (switch-to-buffer-other-window (car mkds)) - (switch-to-buffer (car mkds))) - (save-selected-window - (cl-loop for b in it - do (progn - (select-window (split-window)) - (switch-to-buffer b))))) - (if other-window - (switch-to-buffer-other-window buffer-or-name) - (switch-to-buffer buffer-or-name))))) - -(defun helm-switch-to-buffers-other-window (buffer-or-name) - "switch to buffer BUFFER-OR-NAME in other window. -See `helm-switch-to-buffers' for switching to marked buffers." - (helm-switch-to-buffers buffer-or-name t)) - -(cl-defun helm-current-buffer-narrowed-p (&optional - (buffer helm-current-buffer)) - "Check if BUFFER is narrowed. -Default is `helm-current-buffer'." - (with-current-buffer buffer - (let ((beg (point-min)) - (end (point-max)) - (total (buffer-size))) - (or (/= beg 1) (/= end (1+ total)))))) - -(defun helm-goto-char (loc) - "Go to char, revealing if necessary." - (goto-char loc) - (when (or (eq major-mode 'org-mode) - (and (boundp 'outline-minor-mode) - outline-minor-mode)) - (require 'org) ; On some old Emacs versions org may not be loaded. - (org-reveal))) - -(defun helm-goto-line (lineno &optional noanim) - "Goto LINENO opening only outline headline if needed. -Animation is used unless NOANIM is non--nil." - (helm-log-run-hook 'helm-goto-line-before-hook) - (goto-char (point-min)) - (helm-goto-char (point-at-bol lineno)) - (unless noanim - (helm-highlight-current-line nil nil nil nil 'pulse))) - -(defun helm-save-pos-to-register-before-jump () - "Save current buffer position to `helm-save-pos-before-jump-register'. -To use this add it to `helm-goto-line-before-hook'." - (with-helm-current-buffer - (unless helm-in-persistent-action - (point-to-register helm-save-pos-before-jump-register)))) - -(defun helm-save-current-pos-to-mark-ring () - "Save current buffer position to mark ring. -To use this add it to `helm-goto-line-before-hook'." - (with-helm-current-buffer - (unless helm-in-persistent-action - (set-marker (mark-marker) (point)) - (push-mark (point) 'nomsg)))) - -(defun helm-show-all-in-this-source-only (arg) - "Show only current source of this helm session with all its candidates. -With a numeric prefix arg show only the ARG number of candidates." - (interactive "p") - (with-helm-alive-p - (with-helm-window - (with-helm-default-directory (helm-default-directory) - (let ((helm-candidate-number-limit (and (> arg 1) arg))) - (helm-set-source-filter - (list (assoc-default 'name (helm-get-current-source))))))))) -(put 'helm-show-all-in-this-source-only 'helm-only t) - -(defun helm-display-all-sources () - "Display all sources previously hidden by `helm-set-source-filter'." - (interactive) - (with-helm-alive-p - (helm-set-source-filter nil))) -(put 'helm-display-all-sources 'helm-only t) - -(defun helm-displaying-source-names () - "Return the list of sources name for this helm session." - (with-current-buffer helm-buffer - (goto-char (point-min)) - (cl-loop with pos - while (setq pos (next-single-property-change (point) 'helm-header)) - do (goto-char pos) - collect (buffer-substring-no-properties (point-at-bol)(point-at-eol)) - do (forward-line 1)))) - -(defun helm-handle-winner-boring-buffers () - "Add `helm-buffer' to `winner-boring-buffers' when quitting/exiting helm. -Add this function to `helm-cleanup-hook' when you don't want to see helm buffers -after running winner-undo/redo." - (require 'winner) - (cl-pushnew helm-buffer winner-boring-buffers :test 'equal)) -(add-hook 'helm-cleanup-hook #'helm-handle-winner-boring-buffers) - -(defun helm-quit-and-find-file () - "Drop into `helm-find-files' from `helm'. -If current selection is a buffer or a file, `helm-find-files' -from its directory." - (interactive) - (with-helm-alive-p - (require 'helm-grep) - (helm-run-after-exit - (lambda (f) - (if (file-exists-p f) - (helm-find-files-1 (file-name-directory f) - (concat - "^" - (regexp-quote - (if helm-ff-transformer-show-only-basename - (helm-basename f) f)))) - (helm-find-files-1 f))) - (let* ((sel (helm-get-selection)) - (grep-line (and (stringp sel) - (helm-grep-split-line sel))) - (bmk-name (and (stringp sel) - (not grep-line) - (replace-regexp-in-string "\\`\\*" "" sel))) - (bmk (and bmk-name (assoc bmk-name bookmark-alist))) - (buf (helm-aif (and (bufferp sel) (get-buffer sel)) - (buffer-name it))) - (default-preselection (or (buffer-file-name helm-current-buffer) - default-directory))) - (cond - ;; Buffer. - (buf (or (buffer-file-name sel) - (car (rassoc buf dired-buffers)) - (and (with-current-buffer buf - (eq major-mode 'org-agenda-mode)) - org-directory - (expand-file-name org-directory)) - (with-current-buffer buf default-directory))) - ;; Bookmark. - (bmk (helm-aif (bookmark-get-filename bmk) - (if (and ffap-url-regexp - (string-match ffap-url-regexp it)) - it (expand-file-name it)) - default-directory)) - ((or (file-remote-p sel) - (file-exists-p sel)) - (expand-file-name sel)) - ;; Grep. - ((and grep-line (file-exists-p (car grep-line))) - (expand-file-name (car grep-line))) - ;; Occur. - (grep-line - (with-current-buffer (get-buffer (car grep-line)) - (or (buffer-file-name) default-directory))) - ;; Url. - ((and ffap-url-regexp (string-match ffap-url-regexp sel)) sel) - ;; Default. - (t default-preselection)))))) -(put 'helm-quit-and-find-file 'helm-only t) - -(defun helm-generic-sort-fn (s1 s2) - "Sort predicate function for helm candidates. -Args S1 and S2 can be single or \(display . real\) candidates, -that is sorting is done against real value of candidate." - (let* ((pattern (regexp-quote helm-pattern)) - (reg1 (concat "\\_<" pattern "\\_>")) - (reg2 (concat "\\_<" pattern)) - (reg3 helm-pattern) - (split (split-string pattern)) - (str1 (if (consp s1) (cdr s1) s1)) - (str2 (if (consp s2) (cdr s2) s2)) - (score (lambda (str r1 r2 r3 lst) - (+ (if (string-match (concat "\\`" pattern) str) 1 0) - (cond ((string-match r1 str) 5) - ((and (string-match " " pattern) - (string-match (concat "\\_<" (car lst)) str) - (cl-loop for r in (cdr lst) - always (string-match r str))) 4) - ((and (string-match " " pattern) - (cl-loop for r in lst always (string-match r str))) 3) - ((string-match r2 str) 2) - ((string-match r3 str) 1) - (t 0))))) - (sc1 (funcall score str1 reg1 reg2 reg3 split)) - (sc2 (funcall score str2 reg1 reg2 reg3 split))) - (cond ((or (zerop (string-width pattern)) - (and (zerop sc1) (zerop sc2))) - (string-lessp str1 str2)) - ((= sc1 sc2) - (< (length str1) (length str2))) - (t (> sc1 sc2))))) - -(defun helm-ff-get-host-from-tramp-invalid-fname (fname) - "Extract hostname from an incomplete tramp file name. -Return nil on valid file name remote or not." - (let* ((str (helm-basename fname)) - (split (split-string str ":")) - (meth (car (member (car split) (mapcar 'car tramp-methods))))) - (when (and meth (<= (length split) 2)) - (cadr split)))) - -(cl-defun helm-file-human-size (size &optional (kbsize helm-default-kbsize)) - "Return a string showing SIZE of a file in human readable form. -SIZE can be an integer or a float depending it's value. -`file-attributes' will take care of that to avoid overflow error. -KBSIZE if a floating point number, defaulting to `helm-default-kbsize'." - (let ((M (cons "M" (/ size (expt kbsize 2)))) - (G (cons "G" (/ size (expt kbsize 3)))) - (K (cons "K" (/ size kbsize))) - (B (cons "B" size))) - (cl-loop with result = B - for (a . b) in - (cl-loop for (x . y) in (list M G K B) - unless (< y 1) collect (cons x y)) - when (< b (cdr result)) do (setq result (cons a b)) - finally return (if (string= (car result) "B") - (format "%s" size) - (format "%.1f%s" (cdr result) (car result)))))) - -(cl-defun helm-file-attributes - (file &key type links uid gid access-time modif-time - status size mode gid-change inode device-num dired human-size - mode-type mode-owner mode-group mode-other (string t)) - "Return `file-attributes' elements of FILE separately according to key value. -Availables keys are: -- TYPE: Same as nth 0 `files-attributes' if STRING is nil - otherwise return either symlink, directory or file (default). -- LINKS: See nth 1 `files-attributes'. -- UID: See nth 2 `files-attributes'. -- GID: See nth 3 `files-attributes'. -- ACCESS-TIME: See nth 4 `files-attributes', however format time - when STRING is non--nil (the default). -- MODIF-TIME: See nth 5 `files-attributes', same as above. -- STATUS: See nth 6 `files-attributes', same as above. -- SIZE: See nth 7 `files-attributes'. -- MODE: See nth 8 `files-attributes'. -- GID-CHANGE: See nth 9 `files-attributes'. -- INODE: See nth 10 `files-attributes'. -- DEVICE-NUM: See nth 11 `files-attributes'. -- DIRED: A line similar to what 'ls -l' return. -- HUMAN-SIZE: The size in human form, see `helm-file-human-size'. -- MODE-TYPE, mode-owner,mode-group, mode-other: Split what - nth 7 `files-attributes' return in four categories. -- STRING: When non--nil (default) `helm-file-attributes' return - more friendly values. -If you want the same behavior as `files-attributes' , -\(but with return values in proplist\) use a nil value for STRING. -However when STRING is non--nil, time and type value are different from what -you have in `file-attributes'." - (let* ((all (cl-destructuring-bind - (type links uid gid access-time modif-time - status size mode gid-change inode device-num) - (file-attributes file string) - (list :type (if string - (cond ((stringp type) "symlink") ; fname - (type "directory") ; t - (t "file")) ; nil - type) - :links links - :uid uid - :gid gid - :access-time (if string - (format-time-string - "%Y-%m-%d %R" access-time) - access-time) - :modif-time (if string - (format-time-string - "%Y-%m-%d %R" modif-time) - modif-time) - :status (if string - (format-time-string - "%Y-%m-%d %R" status) - status) - :size size - :mode mode - :gid-change gid-change - :inode inode - :device-num device-num))) - (modes (helm-split-mode-file-attributes (cl-getf all :mode)))) - (cond (type (cl-getf all :type)) - (links (cl-getf all :links)) - (uid (cl-getf all :uid)) - (gid (cl-getf all :gid)) - (access-time (cl-getf all :access-time)) - (modif-time (cl-getf all :modif-time)) - (status (cl-getf all :status)) - (size (cl-getf all :size)) - (mode (cl-getf all :mode)) - (gid-change (cl-getf all :gid-change)) - (inode (cl-getf all :inode)) - (device-num (cl-getf all :device-num)) - (dired - (concat - (helm-split-mode-file-attributes (cl-getf all :mode) t) " " - (number-to-string (cl-getf all :links)) " " - (cl-getf all :uid) ":" - (cl-getf all :gid) " " - (if human-size - (helm-file-human-size (cl-getf all :size)) - (int-to-string (cl-getf all :size))) " " - (cl-getf all :modif-time))) - (human-size (helm-file-human-size (cl-getf all :size))) - (mode-type (cl-getf modes :mode-type)) - (mode-owner (cl-getf modes :user)) - (mode-group (cl-getf modes :group)) - (mode-other (cl-getf modes :other)) - (t (append all modes))))) - -(defun helm-split-mode-file-attributes (str &optional string) - "Split mode file attributes STR into a proplist. -If STRING is non--nil return instead a space separated string." - (cl-loop with type = (substring str 0 1) - with cdr = (substring str 1) - for i across cdr - for count from 1 - if (<= count 3) - concat (string i) into user - if (and (> count 3) (<= count 6)) - concat (string i) into group - if (and (> count 6) (<= count 9)) - concat (string i) into other - finally return - (if string - (mapconcat 'identity (list type user group other) " ") - (list :mode-type type :user user :group group :other other)))) - -(defmacro with-helm-display-marked-candidates (buffer-or-name candidates &rest body) - (declare (indent 0) (debug t)) - (helm-with-gensyms (buffer window) - `(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name)) - ,window) - (unwind-protect - (with-current-buffer ,buffer - (dired-format-columns-of-files ,candidates) - (select-window - (setq ,window (temp-buffer-window-show - ,buffer - '(display-buffer-below-selected - (window-height . fit-window-to-buffer))))) - (progn ,@body)) - (quit-window 'kill ,window))))) - -;;; Persistent Action Helpers -;; -;; -;; Internal -(defvar helm-match-line-overlay nil) -(defvar helm--match-item-overlays nil) - -(defun helm-highlight-current-line (&optional start end buf face pulse) - "Highlight and underline current position" - (let* ((start (or start (line-beginning-position))) - (end (or end (1+ (line-end-position)))) - (start-match (if (or (null helm-highlight-matches-around-point-max-lines) - (zerop helm-highlight-matches-around-point-max-lines)) - start - (save-excursion - (forward-line - (- helm-highlight-matches-around-point-max-lines)) - (point-at-bol)))) - (end-match (if (or (null helm-highlight-matches-around-point-max-lines) - (zerop helm-highlight-matches-around-point-max-lines)) - end - (save-excursion - (forward-line - helm-highlight-matches-around-point-max-lines) - (point-at-eol)))) - (args (list start end buf))) - (if (not helm-match-line-overlay) - (setq helm-match-line-overlay (apply 'make-overlay args)) - (apply 'move-overlay helm-match-line-overlay args)) - (overlay-put helm-match-line-overlay - 'face (or face 'helm-selection-line)) - (catch 'empty-line - (cl-loop with ov - for r in (helm-remove-if-match - "\\`!" (split-string helm-input)) - do (save-excursion - (goto-char start-match) - (while (condition-case _err - (if helm-migemo-mode - (helm-mm-migemo-forward r end-match t) - (re-search-forward r end-match t)) - (invalid-regexp nil)) - (let ((s (match-beginning 0)) - (e (match-end 0))) - (if (= s e) - (throw 'empty-line nil) - (push (setq ov (make-overlay s e)) - helm--match-item-overlays) - (overlay-put ov 'face 'helm-match-item) - (overlay-put ov 'priority 1))))))) - (recenter) - (when pulse - (sit-for 0.3) - (helm-match-line-cleanup)))) - -(defun helm-match-line-cleanup () - (when helm-match-line-overlay - (delete-overlay helm-match-line-overlay) - (setq helm-match-line-overlay nil)) - (when helm--match-item-overlays - (mapc 'delete-overlay helm--match-item-overlays))) - -(defun helm-match-line-update () - (when helm-match-line-overlay - (delete-overlay helm-match-line-overlay) - (helm-highlight-current-line))) - -(defun helm-persistent-autoresize-hook () - (when (and helm-buffers-to-resize-on-pa - (member helm-buffer helm-buffers-to-resize-on-pa) - (eq helm-split-window-state 'vertical)) - (set-window-text-height (helm-window) helm-resize-on-pa-text-height))) - -(add-hook 'helm-after-persistent-action-hook 'helm-persistent-autoresize-hook) -(add-hook 'helm-cleanup-hook 'helm-match-line-cleanup) -(add-hook 'helm-after-persistent-action-hook 'helm-match-line-update) - -;;; Popup buffer-name or filename in grep/moccur/imenu-all. -;; -(defvar helm--show-help-echo-timer nil) - -(defun helm-cancel-help-echo-timer () - (when helm--show-help-echo-timer - (cancel-timer helm--show-help-echo-timer) - (setq helm--show-help-echo-timer nil))) - -(defun helm-show-help-echo () - (when helm--show-help-echo-timer - (cancel-timer helm--show-help-echo-timer) - (setq helm--show-help-echo-timer nil)) - (when (and helm-alive-p - (member (assoc-default 'name (helm-get-current-source)) - helm-sources-using-help-echo-popup)) - (setq helm--show-help-echo-timer - (run-with-idle-timer - 1 nil - (lambda () - (with-helm-window - (helm-aif (get-text-property (point-at-bol) 'help-echo) - (popup-tip (concat " " (abbreviate-file-name it)) - :around nil - :point (save-excursion - (end-of-visual-line) (point)))))))))) - -;;;###autoload -(define-minor-mode helm-popup-tip-mode - "Show help-echo informations in a popup tip at end of line." - :global t - (require 'popup) - (if helm-popup-tip-mode - (progn - (add-hook 'helm-update-hook 'helm-show-help-echo) ; Needed for async sources. - (add-hook 'helm-move-selection-after-hook 'helm-show-help-echo) - (add-hook 'helm-cleanup-hook 'helm-cancel-help-echo-timer)) - (remove-hook 'helm-update-hook 'helm-show-help-echo) - (remove-hook 'helm-move-selection-after-hook 'helm-show-help-echo) - (remove-hook 'helm-cleanup-hook 'helm-cancel-help-echo-timer))) - -(defun helm-open-file-with-default-tool (file) - "Open FILE with the default tool on this platform." - (let (process-connection-type) - (if (eq system-type 'windows-nt) - (helm-w32-shell-execute-open-file file) - (start-process "helm-open-file-with-default-tool" - nil - (cond ((eq system-type 'gnu/linux) - "xdg-open") - ((or (eq system-type 'darwin) ;; Mac OS X - (eq system-type 'macos)) ;; Mac OS 9 - "open")) - file)))) - -(defun helm-open-dired (file) - "Opens a dired buffer in FILE's directory. If FILE is a -directory, open this directory." - (if (file-directory-p file) - (dired file) - (dired (file-name-directory file)) - (dired-goto-file file))) - -(defun helm-require-or-error (feature function) - (or (require feature nil t) - (error "Need %s to use `%s'." feature function))) - -(defun helm-find-file-as-root (candidate) - (let* ((buf (helm-basename candidate)) - (host (file-remote-p candidate 'host)) - (remote-path (format "/%s:%s:%s" - helm-su-or-sudo - (or host "") - (expand-file-name - (if host - (file-remote-p candidate 'localname) - candidate)))) - non-essential) - (if (buffer-live-p (get-buffer buf)) - (progn - (set-buffer buf) - (find-alternate-file remote-path)) - (find-file remote-path)))) - -(defun helm-find-many-files (_ignore) - (let ((helm--reading-passwd-or-string t)) - (mapc 'find-file (helm-marked-candidates)))) - -(defun helm-read-repeat-string (prompt &optional count) - "Prompt as many time PROMPT is not empty. -If COUNT is non--nil add a number after each prompt." - (cl-loop with elm - while (not (string= elm "")) - for n from 1 - do (when count - (setq prompt (concat prompt (int-to-string n) ": "))) - collect (setq elm (helm-read-string prompt)) into lis - finally return (remove "" lis))) - -(defun helm-html-bookmarks-to-alist (file url-regexp bmk-regexp) - "Parse html bookmark FILE and return an alist with (title . url) as elements." - (let (bookmarks-alist url title) - (with-temp-buffer - (insert-file-contents file) - (goto-char (point-min)) - (while (re-search-forward "href=\\|^ *