* Question: Is there any way to use the bash completion feature from Emacs shell mode. @ 2016-10-08 19:14 ISHIKAWA,chiaki 2016-10-09 18:11 ` Dan Hitt ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: ISHIKAWA,chiaki @ 2016-10-08 19:14 UTC (permalink / raw) To: help-gnu-emacs Hi, I have been using GNU emacs more than 30 years and thank you for maintaining the great package. I have a question. Bash, the GNU shell interpreter has a feature called completion, and over the years, people have created various completion databases for many commands which are useful. Case in point. I just noticed the source control system called mercurial (known as "hg" with its main command) has a very nice bash completion database. The completion understands where the various so called MERCURIAL's patch queues are stored and thus can offer the alternatives quite easily. e.g. After including . /usr/share/bash-completion/completions/hg (I am using Debian GNU/Linux and the above is where the completion code for hg is stored.) I can do the following inside a bash on an ordinary console. $ hg qq [TAB] expands to $ hg qqueue another couple of [TABS] expands to --create TEST patches --delete TEST-Q pristine --list one-letter-C-locale submission --purge partial4upload submission1 --rename partial4upload-1 $ hg qqueue hitting pa[TAB] expands to $hg qqueue pa partial4upload partial4upload-1 patches ishikawa@ip030:/NREF-COMM-CENTRAL/comm-central/mozilla$ hg qqueue pa Very nice. However, due to various reasons, I prefer to run bash inside Emacs's shell buffer. It is easy to copy&paste the result of bash output and reuse commands is one reason. (I am so used to keyboard and copy&paste using mouse or other pointing device takes much longer.) Unfortunately, bash's completion feature does not work in Emacs shell mode. Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. Emacs's tab completion for filenames works great. But I would like Bash's completion somehow works, too. Is there a way? Am I missing the obvious? (Does using eshell mode helps?) TIA ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-08 19:14 Question: Is there any way to use the bash completion feature from Emacs shell mode ISHIKAWA,chiaki @ 2016-10-09 18:11 ` Dan Hitt 2016-10-10 6:06 ` Eli Zaretskii 2016-10-10 0:49 ` Bob Proulx 2016-10-10 13:40 ` Oleksandr Gavenko 2 siblings, 1 reply; 14+ messages in thread From: Dan Hitt @ 2016-10-09 18:11 UTC (permalink / raw) To: ISHIKAWA,chiaki; +Cc: help-gnu-emacs On Sat, Oct 8, 2016 at 12:14 PM, ISHIKAWA,chiaki <ishikawa@yk.rim.or.jp> wrote: > Hi, > I have been using GNU emacs more than 30 years and thank you for maintaining > the great package. > > I have a question. > > Bash, the GNU shell interpreter has a feature called completion, and > over the years, people have created various completion databases for many > commands which are useful. > ....... > However, due to various reasons, I prefer to run bash inside Emacs's shell > buffer. It is easy to copy&paste the result of bash output and reuse > commands is one reason. (I am so used to keyboard and copy&paste using mouse > or other pointing device takes much longer.) > > Unfortunately, bash's completion feature does not work in Emacs shell mode. > Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. > Emacs's tab completion for filenames works great. > But I would like Bash's completion somehow works, too. This is also my experience (in almost every detail). As the OP says, emacs has improved over the decades, and all the time new features are showing up, such as ibuffer. And emacs can do a lot of tricks, such as looking at jpg files. So, perhaps there is some mode like octave mode, that could run a bash shell with much deeper integration (perhaps by keeping a second interface to the inferior bash, such as through a socket or something?)? Or perhaps instead of bash it could be some derivative of bash? Or some derivative of zsh? I'm aware of eshell, which also seems to be improving, but i think it's very difficult to have a bash-like shell that also does elisp --- e.g., parentheses are special to both bash and elisp, but not in the same way. So in eshell, for example, if i type '( ls )' (without the quotes), it expects ls to refer to a function rather than a command. That's very natural for what eshell does, of course, and this is not a criticism of eshell! But it's not the same as having a strong, deeply integrated, bash mode, where emacs has access to the internals of the inferior process. TIA for any info or pointers regarding this! dan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-09 18:11 ` Dan Hitt @ 2016-10-10 6:06 ` Eli Zaretskii 2016-10-10 14:05 ` Dan Hitt 0 siblings, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2016-10-10 6:06 UTC (permalink / raw) To: help-gnu-emacs > From: Dan Hitt <dan.hitt@gmail.com> > Date: Sun, 9 Oct 2016 11:11:24 -0700 > Cc: help-gnu-emacs@gnu.org > > On Sat, Oct 8, 2016 at 12:14 PM, ISHIKAWA,chiaki <ishikawa@yk.rim.or.jp> wrote: > > Hi, > > I have been using GNU emacs more than 30 years and thank you for maintaining > > the great package. > > > > I have a question. > > > > Bash, the GNU shell interpreter has a feature called completion, and > > over the years, people have created various completion databases for many > > commands which are useful. > > > ....... > > However, due to various reasons, I prefer to run bash inside Emacs's shell > > buffer. It is easy to copy&paste the result of bash output and reuse > > commands is one reason. (I am so used to keyboard and copy&paste using mouse > > or other pointing device takes much longer.) > > > > Unfortunately, bash's completion feature does not work in Emacs shell mode. > > Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. > > Emacs's tab completion for filenames works great. > > But I would like Bash's completion somehow works, too. > > This is also my experience (in almost every detail). > > As the OP says, emacs has improved over the decades, and all the time > new features are showing up, such as ibuffer. And emacs can do a lot > of tricks, such as looking at jpg files. > > So, perhaps there is some mode like octave mode, that could run a bash > shell with much deeper integration (perhaps by keeping a second > interface to the inferior bash, such as through a socket or > something?)? Or perhaps instead of bash it could be some derivative > of bash? Or some derivative of zsh? I guess I don't understand what you guys are saying, because completion with TAB and M-? keys does work for me in shell-mode. I see completion on commands, files, and environment variables. What am I missing? ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-10 6:06 ` Eli Zaretskii @ 2016-10-10 14:05 ` Dan Hitt 2016-10-10 14:13 ` Dan Hitt 2016-10-11 0:59 ` Bob Proulx 0 siblings, 2 replies; 14+ messages in thread From: Dan Hitt @ 2016-10-10 14:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: help-gnu-emacs Tab completion certainly works, but it's the emacs completion, not the bash completion. Unfortunately, i don't have a good example of the difference right now, but i'll bet Chiaki does. (Bash can be much more intelligent about how to complete than emacs, of course, because it has a much sharper picture of what the user is doing and how the user is configured, while all emacs can do is observe from a distance.) Now, Bob's suggestion to use term-mode may just work, not sure. I never used term mode since trying it out a few decades ago, because i would get stuck in a buffer and not be able to get out --- unless it was a graphical emacs and i could use the mouse to choose another buffer --- but that would defeat the whole power of parking the mouse and controlling everything by the keyboard. However, Bob said that you substitute Control X with Control C, and man that works. So you can switch buffers using, e.g., Control-C o. I'd still be interested in a more deeply integrated bash, but if term doesn't have other problems, it's a very good proxy. dan On Sun, Oct 9, 2016 at 11:06 PM, Eli Zaretskii <eliz@gnu.org> wrote: >> From: Dan Hitt <dan.hitt@gmail.com> >> Date: Sun, 9 Oct 2016 11:11:24 -0700 >> Cc: help-gnu-emacs@gnu.org >> >> On Sat, Oct 8, 2016 at 12:14 PM, ISHIKAWA,chiaki <ishikawa@yk.rim.or.jp> wrote: >> > Hi, >> > I have been using GNU emacs more than 30 years and thank you for maintaining >> > the great package. >> > >> > I have a question. >> > >> > Bash, the GNU shell interpreter has a feature called completion, and >> > over the years, people have created various completion databases for many >> > commands which are useful. >> > >> ....... >> > However, due to various reasons, I prefer to run bash inside Emacs's shell >> > buffer. It is easy to copy&paste the result of bash output and reuse >> > commands is one reason. (I am so used to keyboard and copy&paste using mouse >> > or other pointing device takes much longer.) >> > >> > Unfortunately, bash's completion feature does not work in Emacs shell mode. >> > Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. >> > Emacs's tab completion for filenames works great. >> > But I would like Bash's completion somehow works, too. >> >> This is also my experience (in almost every detail). >> >> As the OP says, emacs has improved over the decades, and all the time >> new features are showing up, such as ibuffer. And emacs can do a lot >> of tricks, such as looking at jpg files. >> >> So, perhaps there is some mode like octave mode, that could run a bash >> shell with much deeper integration (perhaps by keeping a second >> interface to the inferior bash, such as through a socket or >> something?)? Or perhaps instead of bash it could be some derivative >> of bash? Or some derivative of zsh? > > I guess I don't understand what you guys are saying, because > completion with TAB and M-? keys does work for me in shell-mode. I > see completion on commands, files, and environment variables. > > What am I missing? > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-10 14:05 ` Dan Hitt @ 2016-10-10 14:13 ` Dan Hitt 2016-10-11 1:02 ` Bob Proulx 2016-10-11 0:59 ` Bob Proulx 1 sibling, 1 reply; 14+ messages in thread From: Dan Hitt @ 2016-10-10 14:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: help-gnu-emacs Eli, sorry for double-posting so quickly. But one example where emacs doesn't work as well as bash is emacs can get confused over what directory you are in. For example, if you have a bash alias that switches directory, emacs cannot monitor it. Then it will not know how to complete. So that makes you hesitant to write little bash scripts that change around your directory, because you know emacs will never track them. I think term potentially can overcome that limitation, so we'll try it out and see, although i can imagine that it may be confusing to switch from Control-X to Control-C. dan On Mon, Oct 10, 2016 at 7:05 AM, Dan Hitt <dan.hitt@gmail.com> wrote: > Tab completion certainly works, but it's the emacs completion, not the > bash completion. > > Unfortunately, i don't have a good example of the difference right > now, but i'll bet Chiaki does. > > (Bash can be much more intelligent about how to complete than emacs, > of course, because it has a much sharper picture of what the user is > doing and how the user is configured, while all emacs can do is > observe from a distance.) > > Now, Bob's suggestion to use term-mode may just work, not sure. > > I never used term mode since trying it out a few decades ago, because > i would get stuck in a buffer and not be able to get out --- unless it > was a graphical emacs and i could use the mouse to choose another > buffer --- but that would defeat the whole power of parking the mouse > and controlling everything by the keyboard. > > However, Bob said that you substitute Control X with Control C, and > man that works. > > So you can switch buffers using, e.g., Control-C o. > > I'd still be interested in a more deeply integrated bash, but if term > doesn't have other problems, it's a very good proxy. > > dan > > On Sun, Oct 9, 2016 at 11:06 PM, Eli Zaretskii <eliz@gnu.org> wrote: >>> From: Dan Hitt <dan.hitt@gmail.com> >>> Date: Sun, 9 Oct 2016 11:11:24 -0700 >>> Cc: help-gnu-emacs@gnu.org >>> >>> On Sat, Oct 8, 2016 at 12:14 PM, ISHIKAWA,chiaki <ishikawa@yk.rim.or.jp> wrote: >>> > Hi, >>> > I have been using GNU emacs more than 30 years and thank you for maintaining >>> > the great package. >>> > >>> > I have a question. >>> > >>> > Bash, the GNU shell interpreter has a feature called completion, and >>> > over the years, people have created various completion databases for many >>> > commands which are useful. >>> > >>> ....... >>> > However, due to various reasons, I prefer to run bash inside Emacs's shell >>> > buffer. It is easy to copy&paste the result of bash output and reuse >>> > commands is one reason. (I am so used to keyboard and copy&paste using mouse >>> > or other pointing device takes much longer.) >>> > >>> > Unfortunately, bash's completion feature does not work in Emacs shell mode. >>> > Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. >>> > Emacs's tab completion for filenames works great. >>> > But I would like Bash's completion somehow works, too. >>> >>> This is also my experience (in almost every detail). >>> >>> As the OP says, emacs has improved over the decades, and all the time >>> new features are showing up, such as ibuffer. And emacs can do a lot >>> of tricks, such as looking at jpg files. >>> >>> So, perhaps there is some mode like octave mode, that could run a bash >>> shell with much deeper integration (perhaps by keeping a second >>> interface to the inferior bash, such as through a socket or >>> something?)? Or perhaps instead of bash it could be some derivative >>> of bash? Or some derivative of zsh? >> >> I guess I don't understand what you guys are saying, because >> completion with TAB and M-? keys does work for me in shell-mode. I >> see completion on commands, files, and environment variables. >> >> What am I missing? >> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-10 14:13 ` Dan Hitt @ 2016-10-11 1:02 ` Bob Proulx 0 siblings, 0 replies; 14+ messages in thread From: Bob Proulx @ 2016-10-11 1:02 UTC (permalink / raw) To: help-gnu-emacs Dan Hitt wrote: > But one example where emacs doesn't work as well as bash is emacs can > get confused over what directory you are in. > > For example, if you have a bash alias that switches directory, emacs > cannot monitor it. Perhaps this will help: https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Tracking.html#Directory-Tracking 37.6 Directory Tracking ======================= Shell mode keeps track of ‘cd’, ‘pushd’ and ‘popd’ commands given to the subshell, in order to keep the Shell buffer’s default directory (*note File Names::) the same as the shell’s working directory. It recognizes these commands by examining lines of input that you send. If you use aliases for these commands, you can tell Emacs to recognize them also, by setting the variables ‘shell-pushd-regexp’, ‘shell-popd-regexp’, and ‘shell-cd-regexp’ to the appropriate regular expressions (*note Regexps::). For example, if ‘shell-pushd-regexp’ matches the beginning of a shell command line, that line is regarded as a ‘pushd’ command. These commands are recognized only at the beginning of a shell command line. If Emacs gets confused about changes in the working directory of the subshell, type ‘M-x dirs’. This command asks the shell for its working directory and updates the default directory accordingly. It works for shells that support the most common command syntax, but may not work for unusual shells. You can also use Dirtrack mode, a buffer-local minor mode that implements an alternative method of tracking the shell’s working directory. To use this method, your shell prompt must contain the working directory at all times, and you must supply a regular expression for recognizing which part of the prompt contains the working directory; see the documentation of the variable ‘dirtrack-list’ for details. To use Dirtrack mode, type ‘M-x dirtrack-mode’ in the Shell buffer, or add ‘dirtrack-mode’ to ‘shell-mode-hook’ (*note Hooks::). ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-10 14:05 ` Dan Hitt 2016-10-10 14:13 ` Dan Hitt @ 2016-10-11 0:59 ` Bob Proulx 2016-10-11 12:12 ` Filipp Gunbin 1 sibling, 1 reply; 14+ messages in thread From: Bob Proulx @ 2016-10-11 0:59 UTC (permalink / raw) To: help-gnu-emacs Dan Hitt wrote: > Tab completion certainly works, but it's the emacs completion, not the > bash completion. Right. There are really (at least) three types of completion. 1) bash completion using bash only http://tiswww.case.edu/php/chet/bash/bashtop.html 2) bash-completion using the bash-completion 3rd party addon to bash http://bash-completion.alioth.debian.org/ 3) emacs shell-mode completion https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html All three of those do completion. The second extends onto the first. They all have slightly different behavior with pluses and minues to each of them. Personally I only use 1 and 3 and don't miss not having 2 but I can understand people wanting it inside emacs. > Unfortunately, i don't have a good example of the difference right > now, but i'll bet Chiaki does. bash (1) does this: complete (TAB) Attempt to perform completion on the text before point. Bash attempts completion treating the text as a variable (if the text begins with $), username (if the text begins with ~), hostname (if the text begins with @), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. touch foo bar ls f<TAB> will complete foo bash-completion (2) has many additional completions including completing options for commands that support --help. ls --so<TAB> will complete to --sort > I never used term mode since trying it out a few decades ago, because > i would get stuck in a buffer and not be able to get out --- unless it > was a graphical emacs and i could use the mouse to choose another > buffer --- but that would defeat the whole power of parking the mouse > and controlling everything by the keyboard. That was specifically why I mentioned that C-x is mapped to C-c! :-) Because if that isn't known then you are trapped. But knowing that allows you to switch buffers away or other commands. > However, Bob said that you substitute Control X with Control C, and > man that works. > > So you can switch buffers using, e.g., Control-C o. Or kill the buffer with C-c k RET which I usually do when done in order to clean up and free up memory. Also as Oleksandr Gavenko wrote the following keys are very useful: C-c C-j switch to term-line-mode (effectively similar to shell mode) C-c C-k switch to term-char-mode When in term mode I switch back and forth between those modes *a lot* as needed to deal with the immediate task. Some things are easier one way. Some the other way. Relevant to this discussion with C-c C-k you get bash completion. With C-c C-j you get emacs completion. Bob ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-11 0:59 ` Bob Proulx @ 2016-10-11 12:12 ` Filipp Gunbin 0 siblings, 0 replies; 14+ messages in thread From: Filipp Gunbin @ 2016-10-11 12:12 UTC (permalink / raw) To: help-gnu-emacs On 10/10/2016 18:59 -0600, Bob Proulx wrote: > Dan Hitt wrote: >> Tab completion certainly works, but it's the emacs completion, not the >> bash completion. > > Right. There are really (at least) three types of completion. > > 1) bash completion using bash only > http://tiswww.case.edu/php/chet/bash/bashtop.html > 2) bash-completion using the bash-completion 3rd party addon to bash > http://bash-completion.alioth.debian.org/ > 3) emacs shell-mode completion > https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html You might want to look at emacs-bash-completion (https://github.com/szermatt/emacs-bash-completion) which integrates bash-completion (https://github.com/scop/bash-completion), which provides many completion functions. Filipp ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-08 19:14 Question: Is there any way to use the bash completion feature from Emacs shell mode ISHIKAWA,chiaki 2016-10-09 18:11 ` Dan Hitt @ 2016-10-10 0:49 ` Bob Proulx 2016-10-10 13:40 ` Oleksandr Gavenko 2 siblings, 0 replies; 14+ messages in thread From: Bob Proulx @ 2016-10-10 0:49 UTC (permalink / raw) To: ISHIKAWA,chiaki; +Cc: help-gnu-emacs ISHIKAWA,chiaki wrote: > However, due to various reasons, I prefer to run bash inside Emacs's shell > buffer. It is easy to copy&paste the result of bash output and reuse > commands is one reason. (I am so used to keyboard and copy&paste using mouse > or other pointing device takes much longer.) > > Unfortunately, bash's completion feature does not work in Emacs shell mode. > Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. > Emacs's tab completion for filenames works great. > But I would like Bash's completion somehow works, too. > > Is there a way? > Am I missing the obvious? > (Does using eshell mode helps?) You mention emacs shell mode. But if you want bash to handle the completion then I think maybe you want emacs term mode with bash. Using term mode is different from using shell mode. But you get exactly the bash features you wish. M-x term Note that most C-x keys are remapped to C-c inside that buffer. https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-emulator.html#Terminal-emulator Keys are mapped: https://www.gnu.org/software/emacs/manual/html_node/emacs/Term-Mode.html#Term-Mode The buffer is allocated a separate tty. The result is that most keys are passed through directly to bash and therefore all bash completion works from bash without emacs in between. Bob ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-08 19:14 Question: Is there any way to use the bash completion feature from Emacs shell mode ISHIKAWA,chiaki 2016-10-09 18:11 ` Dan Hitt 2016-10-10 0:49 ` Bob Proulx @ 2016-10-10 13:40 ` Oleksandr Gavenko 2016-10-10 23:24 ` Dmitry Gutov 2016-10-12 0:25 ` ISHIKAWA,chiaki 2 siblings, 2 replies; 14+ messages in thread From: Oleksandr Gavenko @ 2016-10-10 13:40 UTC (permalink / raw) To: help-gnu-emacs On 2016-10-08, ISHIKAWA,chiaki wrote: > Unfortunately, bash's completion feature does not work in Emacs shell mode. > Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. > Emacs's tab completion for filenames works great. > But I would like Bash's completion somehow works, too. Please look to my answer: http://stackoverflow.com/a/28618762/173149 In short you should learn ``M-x term`` mode and a few key binding: * ``C-C C-j`` * ``C-c C-k`` * ``C-c ...`` There is attempts to define ``comint-dynamic-complete-functions``: --8<---------------cut here---------------start------------->8--- (defun comint-completion-at-point () (run-hook-with-args-until-success 'comint-dynamic-complete-functions)) --8<---------------cut here---------------end--------------->8--- for readline-enabled programs: https://github.com/szermatt/emacs-bash-completion -- http://defun.work/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-10 13:40 ` Oleksandr Gavenko @ 2016-10-10 23:24 ` Dmitry Gutov 2016-10-12 0:25 ` ISHIKAWA,chiaki 1 sibling, 0 replies; 14+ messages in thread From: Dmitry Gutov @ 2016-10-10 23:24 UTC (permalink / raw) To: Oleksandr Gavenko, help-gnu-emacs On 10.10.2016 16:40, Oleksandr Gavenko wrote: > for readline-enabled programs: > > https://github.com/szermatt/emacs-bash-completion There's also https://github.com/monsanto/readline-complete.el, for company-mode and auto-complete. Not sure how it compares. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-10 13:40 ` Oleksandr Gavenko 2016-10-10 23:24 ` Dmitry Gutov @ 2016-10-12 0:25 ` ISHIKAWA,chiaki 2016-10-12 18:50 ` Oleksandr Gavenko 2016-10-19 1:12 ` Robert Thorpe 1 sibling, 2 replies; 14+ messages in thread From: ISHIKAWA,chiaki @ 2016-10-12 0:25 UTC (permalink / raw) To: Oleksandr Gavenko, help-gnu-emacs Hi, Sorry for top posting. I have tried term mode and it certainly can use the full featured bash completion (tailored for each command, e.g. hg command, and its subcomands even.) However, as some mentioned, basically almost all the keys are eaten now by term-mode. This negates the benefit of copy&paste using emacs of the output of previous commands executed by bash, etc. (I can use mouse to do the operation, but I prefer key binding.) However, I did not realize C-C ad C-X are swapped there. Maybe I should retry the experience. emacs-bash-completion may be a way to go. I will check it out. OTOH, I think my needs can be satisfied using term mode, but somehow keeping C-N, C-P, C-@ and C-W for emacs. After thinking more, I think I need C-A and C-E and C-K for emacs mode editing, too. But this definitely interferes with bash's idea of readline editing. We can't have cake and eat it, too. I will try using these different methods a few days more and report back my experience. I once tried using term mode, but gave up. But the merit of bash completion is now too good to ignore these days. It magically works for many commands! Thank you again. Best Regards, Chiaki PS: The shell mode completion can offer the candidates for command names and arguments that are filenames. This is useful definitely. But bash completion database "KNOWS" the name of the options each command takes, AND sometimes it knows where the argument which is mapped to a file path name in one way or the other: for example, MERCURIUM source control system command "hg" has "qqueue" subcommand to switch between different patch queues. Patch queues are stored under .hg/patches-QQNAMES where QQNAMES is the name of the queue. So if we issue hg qqueue original it refers to .hg/patches-original queue. hg qqueue myfix refers to .hg/patches-myfix And this .hg subdirector is searched if it is not under the current directory. It will be searched in the parent directory, and so on. Bash completion is very clever (of course, it depends on the completion database that defines the functions to look for candidates for command options and arguments.) The completion of Emacs's shell mode cannot handle such advanced mapping to a file name. But bash's completion can (!). This is why I wanted to use bash's completion. On 2016/10/10 22:40, Oleksandr Gavenko wrote: > On 2016-10-08, ISHIKAWA,chiaki wrote: > >> Unfortunately, bash's completion feature does not work in Emacs shell mode. >> Obviously, [TAB] is stolen by Emacs for its own handling of TAB character. >> Emacs's tab completion for filenames works great. >> But I would like Bash's completion somehow works, too. > > Please look to my answer: > > http://stackoverflow.com/a/28618762/173149 > > In short you should learn ``M-x term`` mode and a few key binding: > > * ``C-C C-j`` > * ``C-c C-k`` > * ``C-c ...`` > > There is attempts to define ``comint-dynamic-complete-functions``: > > --8<---------------cut here---------------start------------->8--- > (defun comint-completion-at-point () > (run-hook-with-args-until-success 'comint-dynamic-complete-functions)) > --8<---------------cut here---------------end--------------->8--- > > for readline-enabled programs: > > https://github.com/szermatt/emacs-bash-completion > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-12 0:25 ` ISHIKAWA,chiaki @ 2016-10-12 18:50 ` Oleksandr Gavenko 2016-10-19 1:12 ` Robert Thorpe 1 sibling, 0 replies; 14+ messages in thread From: Oleksandr Gavenko @ 2016-10-12 18:50 UTC (permalink / raw) To: help-gnu-emacs On 2016-10-12, ISHIKAWA,chiaki wrote: > I have tried term mode and it certainly can use the full featured bash > completion (tailored for each command, e.g. hg command, and its subcomands > even.) > > However, as some mentioned, basically almost all the keys are eaten now by > term-mode. This negates the benefit of copy&paste using emacs of the output of > previous commands executed by bash, etc. > (I can use mouse to do the operation, but I prefer key binding.) S-Insert still works in char mode (‘term-char-mode’) - in this way I insert data from another buffers. Unfortunately cycling with M-y in not worked in char mode so you may paste only last copied string. If I need to copy text I use mouse selection or switch to line mode (‘C-c C-j’). > However, I did not realize C-C ad C-X are swapped there. Maybe I should retry > the experience. > Definitely you should try. It is inconvenient to use `C-c` prefix. You should remember: * C-c b (ido-switch-buffer) * C-c o (other-window) to be able leave term buffer. Under Linux I define Left-Win key as Super in ~/.xmodmaprc: --8<---------------cut here---------------start------------->8--- ! Win key. clear mod3 clear mod4 keycode 133 = Super_L ! keycode 134 = Multi_key ! keycode 134 = Super_R keycode 134 = Hyper_R add mod3 = Super_L add mod4 = Hyper_R --8<---------------cut here---------------end--------------->8--- ``term-raw-map`` have no any associations with Super key. In this way I define common operation which works even in term-mode: --8<---------------cut here---------------start------------->8--- (global-set-key [s-right] 'next-buffer) (global-set-key [s-left] 'previous-buffer) (global-set-key [s-delete] 'my--kill-this-buffer-maybe-switch-to-next) (global-set-key [s-up] #'my--backward-other-window) (global-set-key [s-down] #'other-window) (global-set-key [s-insert] 'ibuffer) (unless (ignore-errors (require 'ido) (ido-mode 1) ; (ido-everywhere 'both) (global-set-key [?\s-d] #'ido-dired) (global-set-key [?\s-f] #'ido-find-file) t) (global-set-key [?\s-d] #'dired) (global-set-key [?\s-f] #'find-file)) --8<---------------cut here---------------end--------------->8--- > emacs-bash-completion may be a way to go. I will check it out. > Please write about your experience with emacs-bash-completion. I also searched for bash completion in ``M-x shell`` but there weren't ready solutions in 2010, so I switched to M-x term. > OTOH, I think my needs can be satisfied using > term mode, but somehow keeping C-N, C-P, C-@ and C-W for emacs. > After thinking more, I think I need C-A and C-E and C-K for emacs mode > editing, too. > But this definitely interferes with bash's idea of readline editing. > We can't have cake and eat it, too. I have: --8<---------------cut here---------------start------------->8--- (defun my-term-send-delete-word-forward () (interactive) (term-send-raw-string "\ed")) (defun my-term-send-delete-word-backward () (interactive) (term-send-raw-string "\e\C-h")) (define-key term-raw-map [C-delete] 'my-term-send-delete-word-forward) (define-key term-raw-map [C-backspace] 'my-term-send-delete-word-backward) (defun my-term-send-forward-word () (interactive) (term-send-raw-string "\ef")) (defun my-term-send-backward-word () (interactive) (term-send-raw-string "\eb")) (define-key term-raw-map [C-left] 'my-term-send-backward-word) (define-key term-raw-map [C-right] 'my-term-send-forward-word) (defun my-term-send-m-right () (interactive) (term-send-raw-string "\e[1;3C")) (defun my-term-send-m-left () (interactive) (term-send-raw-string "\e[1;3D")) (define-key term-raw-map [M-right] 'my-term-send-m-right) (define-key term-raw-map [M-left] 'my-term-send-m-left) --8<---------------cut here---------------end--------------->8--- to make navigation in readline as in Emacs. Bash has kill buffer. C-delete add following words to it. To paste you should C-y / M-y. Och, you should boost ~/.inputrc to make it works: --8<---------------cut here---------------start------------->8--- # Define my favorite Emacs key bindings. "\C-@": set-mark "\C-w": kill-region "\M-w": copy-region-as-kill # Ctrl+Left/Right to move by whole words. "\e[1;5C": forward-word "\e[1;5D": backward-word # Same with Shift pressed. "\e[1;6C": forward-word "\e[1;6D": backward-word # Ctrl+Backspace/Delete to delete whole words. "\e[3;5~": kill-word "\C-_": backward-kill-word # UP/DOWN filter history by typed string as prefix. "\e[A": history-search-backward "\C-p": history-search-backward "\eOA": history-search-backward "\e[B": history-search-forward "\C-n": history-search-forward "\eOB": history-search-forward # Bind 'Shift+TAB' to complete as in Python TAB was need for another purpose. "\e[Z": complete # Cycling possible completion forward and backward in place. "\e[1;3C": menu-complete # M-Right "\e[1;3D": menu-complete-backward # M-Left "\e[1;5I": menu-complete # C-TAB --8<---------------cut here---------------end--------------->8--- ================================================================ You can find relevant settings in my configs: * http://hg.defun.work/skel/file/tip/.inputrc * http://hg.defun.work/dot-emacs/file/tip/.emacs-my -- http://defun.work/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Question: Is there any way to use the bash completion feature from Emacs shell mode. 2016-10-12 0:25 ` ISHIKAWA,chiaki 2016-10-12 18:50 ` Oleksandr Gavenko @ 2016-10-19 1:12 ` Robert Thorpe 1 sibling, 0 replies; 14+ messages in thread From: Robert Thorpe @ 2016-10-19 1:12 UTC (permalink / raw) To: ISHIKAWA,chiaki; +Cc: help-gnu-emacs, gavenkoa Notice that there are two flavours of term mode. In normal term-mode the special prefix keys all begin C-c, in ansi-term mode the prefix keys begin C-x. So, it's C-x C-j and C-x C-k to switch between char and line mode. Apart from that the two modes are the same. Which is best for you depends on which one tramples the fewest on the keys that you wish to use. BR, Robert Thorpe ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2016-10-19 1:12 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-10-08 19:14 Question: Is there any way to use the bash completion feature from Emacs shell mode ISHIKAWA,chiaki 2016-10-09 18:11 ` Dan Hitt 2016-10-10 6:06 ` Eli Zaretskii 2016-10-10 14:05 ` Dan Hitt 2016-10-10 14:13 ` Dan Hitt 2016-10-11 1:02 ` Bob Proulx 2016-10-11 0:59 ` Bob Proulx 2016-10-11 12:12 ` Filipp Gunbin 2016-10-10 0:49 ` Bob Proulx 2016-10-10 13:40 ` Oleksandr Gavenko 2016-10-10 23:24 ` Dmitry Gutov 2016-10-12 0:25 ` ISHIKAWA,chiaki 2016-10-12 18:50 ` Oleksandr Gavenko 2016-10-19 1:12 ` Robert Thorpe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).