Adding pcomplete to eshell
This commit is contained in:
parent
dc7ace6e14
commit
fa1545b088
1 changed files with 25 additions and 11 deletions
|
@ -52,6 +52,22 @@ If any program wants to pause the output through the =$PAGER= variable, well, we
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setenv "PAGER" "cat")
|
(setenv "PAGER" "cat")
|
||||||
#+end_src
|
#+end_src
|
||||||
|
** Argument Completion
|
||||||
|
Shell completion uses the flexible =pcomplete= mechanism internally, which allows you to program the completions per shell command. To know more, check out this [[https://www.masteringemacs.org/article/pcomplete-context-sensitive-completion-emacs][blog post]], about how to configure =pcomplete= for git commands. The [[https://github.com/JonWaltman/pcmpl-args.el][pcmpl-args]] package extends =pcomplete= with completion support for more commands, like the Fish and other modern shells. I love how a package c→
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package pcmpl-args)
|
||||||
|
#+end_src
|
||||||
|
Note that this will work with =shell-command= as well.
|
||||||
|
** Better Command Line History
|
||||||
|
On [[http://www.reddit.com/r/emacs/comments/1zkj2d/advanced_usage_of_eshell/][this discussion]] a little gem for using IDO to search back through the history, instead of =M-R= to prompt for the history.
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(defun eshell-insert-history ()
|
||||||
|
"Displays the eshell history to select and insert back into your eshell."
|
||||||
|
(interactive)
|
||||||
|
(insert (completing-read "Eshell history: "
|
||||||
|
(delete-dups
|
||||||
|
(ring-elements eshell-history-ring)))))
|
||||||
|
#+END_SRC
|
||||||
* Predicate Filters and Modifiers
|
* Predicate Filters and Modifiers
|
||||||
The =T= predicate filter allows me to limit file results that have internal =org-mode= tags. For instance, =eshell= will send files that have a =#+TAGS:= header with a =mac= label to the =grep= function:
|
The =T= predicate filter allows me to limit file results that have internal =org-mode= tags. For instance, =eshell= will send files that have a =#+TAGS:= header with a =mac= label to the =grep= function:
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
|
@ -317,6 +333,10 @@ Specify the buffers with either the Eshell approach, e.g. =#<buffer buffer-name>
|
||||||
(list (get-buffer ha-eshell-ebbflow-buffername))))
|
(list (get-buffer ha-eshell-ebbflow-buffername))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
I used to call this function, =bcat= (for /buffer cat/), and I sometimes type this:
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(defalias 'eshell/bcat 'eshell/flow)
|
||||||
|
#+end_src
|
||||||
*** ebb: Bump Data to a Buffer
|
*** ebb: Bump Data to a Buffer
|
||||||
|
|
||||||
We have three separate use-cases:
|
We have three separate use-cases:
|
||||||
|
@ -556,10 +576,14 @@ The [[https://github.com/joddie/pcre2el][pcre2el]] project can convert from a Li
|
||||||
Most shell applications accept Perl Compatible Regular Expressions."
|
Most shell applications accept Perl Compatible Regular Expressions."
|
||||||
`(rx-let ((integer (1+ digit))
|
`(rx-let ((integer (1+ digit))
|
||||||
(float (seq integer "." integer))
|
(float (seq integer "." integer))
|
||||||
|
(b256 (seq (optional (or "1" "2"))
|
||||||
|
(regexp "[0-9]\\{1,2\\}")))
|
||||||
|
(ipaddr (seq b256 "." b256 "." b256 "." b256))
|
||||||
(time (seq digit (optional digit) ":" (= 2 digit) (optional ":" (= 2 digit))))
|
(time (seq digit (optional digit) ":" (= 2 digit) (optional ":" (= 2 digit))))
|
||||||
(date (seq (= 2 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 4 digit)))
|
(date (seq (= 2 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 4 digit)))
|
||||||
(ymd (seq (= 4 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 2 digit)))
|
(ymd (seq (= 4 digit) (or "/" "-") (= 2 digit) (or "/" "-") (= 2 digit)))
|
||||||
(guid (seq (= 8 hex) "-" (= 3 (seq (= 4 hex) "-")) (= 12 hex))))
|
(uuid (seq (= 8 hex) "-" (= 3 (seq (= 4 hex) "-")) (= 12 hex)))
|
||||||
|
(guid (seq uuid)))
|
||||||
(rxt-elisp-to-pcre (rx ,@expressions)))))
|
(rxt-elisp-to-pcre (rx ,@expressions)))))
|
||||||
#+end_src
|
#+end_src
|
||||||
** Map
|
** Map
|
||||||
|
@ -1143,16 +1167,6 @@ This function pulls it all together:
|
||||||
(message "Connecting to: %s" destination)
|
(message "Connecting to: %s" destination)
|
||||||
(eshell-there destination))))
|
(eshell-there destination))))
|
||||||
#+end_src
|
#+end_src
|
||||||
* Better Command Line History
|
|
||||||
On [[http://www.reddit.com/r/emacs/comments/1zkj2d/advanced_usage_of_eshell/][this discussion]] a little gem for using IDO to search back through the history, instead of =M-R= to prompt for the history.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(defun eshell-insert-history ()
|
|
||||||
"Displays the eshell history to select and insert back into your eshell."
|
|
||||||
(interactive)
|
|
||||||
(insert (completing-read "Eshell history: "
|
|
||||||
(delete-dups
|
|
||||||
(ring-elements eshell-history-ring)))))
|
|
||||||
#+END_SRC
|
|
||||||
* Command on the File Buffer
|
* Command on the File Buffer
|
||||||
Sometimes you need to change something about the current file you are editing...like the permissions or even execute it. Hitting =Command-1= will prompt for a shell command string and then append the current file to it and execute it.
|
Sometimes you need to change something about the current file you are editing...like the permissions or even execute it. Hitting =Command-1= will prompt for a shell command string and then append the current file to it and execute it.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
|
Loading…
Reference in a new issue