Helm: Prompt which file name to insert with C-c i.
parent
9a4dddacf2
commit
20b1e6a36c
|
@ -335,6 +335,7 @@ Useful for Guix."
|
||||||
(setf (slot-value source 'action-transformer) 'helm-occur-action-transformer))
|
(setf (slot-value source 'action-transformer) 'helm-occur-action-transformer))
|
||||||
|
|
||||||
(require 'patch-helm)
|
(require 'patch-helm)
|
||||||
|
(require 'patch-helm-file-name-completion)
|
||||||
|
|
||||||
(when (require 'helm-switch-to-repl nil :noerror)
|
(when (require 'helm-switch-to-repl nil :noerror)
|
||||||
(helm-switch-to-repl-setup))
|
(helm-switch-to-repl-setup))
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
(defun ambrevar/helm-insert-file-name-completion-at-point (_candidate)
|
||||||
|
"Insert file name completion at point.
|
||||||
|
Like `helm-insert-file-name-completion-at-point' but prompt which
|
||||||
|
of the full, abbreviated or relative paths to insert."
|
||||||
|
(with-helm-current-buffer
|
||||||
|
(if buffer-read-only
|
||||||
|
(error "Error: Buffer `%s' is read-only" (buffer-name))
|
||||||
|
(let* ((mkds (helm-marked-candidates :with-wildcard t))
|
||||||
|
(candidate (car mkds))
|
||||||
|
(end (point))
|
||||||
|
(tap (helm-ffap-guesser))
|
||||||
|
(guess (and (stringp tap)
|
||||||
|
(substring-no-properties tap)))
|
||||||
|
(beg (helm-aif (and guess
|
||||||
|
(save-excursion
|
||||||
|
(when (re-search-backward
|
||||||
|
(regexp-quote guess)
|
||||||
|
(point-at-bol) t)
|
||||||
|
(point))))
|
||||||
|
it (point)))
|
||||||
|
(full-path-p (and (stringp guess)
|
||||||
|
(or (string-match-p
|
||||||
|
(concat "^" (getenv "HOME"))
|
||||||
|
guess)
|
||||||
|
(string-match-p
|
||||||
|
"\\`\\(/\\|[[:lower:][:upper:]]:/\\)"
|
||||||
|
guess))))
|
||||||
|
(escape-fn (if (memq major-mode
|
||||||
|
helm-modes-using-escaped-strings)
|
||||||
|
#'shell-quote-argument #'identity))
|
||||||
|
(fname-formats '(:full nil
|
||||||
|
:abbreviated (4)
|
||||||
|
:relative (16)
|
||||||
|
:basename (64)))
|
||||||
|
(format-fname (lambda (format)
|
||||||
|
(helm-ff--format-fname-to-insert
|
||||||
|
candidate beg end full-path-p guess
|
||||||
|
format)))
|
||||||
|
(abbreviated-path (funcall format-fname (plist-get fname-formats :abbreviated)))
|
||||||
|
(relative-path (funcall format-fname (plist-get fname-formats :relative)))
|
||||||
|
(basename-path (funcall format-fname (plist-get fname-formats :basename)))
|
||||||
|
(full-path (funcall format-fname (plist-get fname-formats :full)))
|
||||||
|
(format-fname-rest (lambda (candidate format)
|
||||||
|
(helm-ff--format-fname-to-insert
|
||||||
|
candidate nil nil nil nil
|
||||||
|
format))))
|
||||||
|
(when (and beg end)
|
||||||
|
(delete-region beg end))
|
||||||
|
(let* ((path-type (completing-read "Path type to insert: "
|
||||||
|
(list abbreviated-path
|
||||||
|
relative-path
|
||||||
|
basename-path
|
||||||
|
full-path)))
|
||||||
|
(format-choice (plist-get fname-formats (cond
|
||||||
|
((string= abbreviated-path path-type) :abbreviated)
|
||||||
|
((string= relative-path path-type) :relative)
|
||||||
|
((string= basename-path path-type) :basename)
|
||||||
|
((string= full-path path-type) :full)))))
|
||||||
|
(insert
|
||||||
|
(funcall
|
||||||
|
escape-fn
|
||||||
|
path-type)
|
||||||
|
(if (cdr mkds) " " "")
|
||||||
|
(mapconcat escape-fn
|
||||||
|
(cl-loop for f in (cdr mkds)
|
||||||
|
collect (funcall format-fname-rest f format-choice))
|
||||||
|
" ")))))))
|
||||||
|
|
||||||
|
(advice-add 'helm-insert-file-name-completion-at-point :override 'ambrevar/helm-insert-file-name-completion-at-point)
|
Loading…
Reference in New Issue