22
votes
Accepted
How does emacs `shell-mode` know to prompt for sudo?
This is done via a process filter.
By default comint-output-filter-functions includes comint-watch-for-password-prompt, which is the filter function that handles this.
If it sees text matching ...
13
votes
Accepted
Set indentation for shell script function
Setting sh-basic-offset to the required indentation is what is needed - but what I didn't realise is, it's also necessary to close and reopen all shell script files before the customisation takes ...
9
votes
Accepted
Keymap that is dependent on the buffer
You set shell-command as global key-binding for F1
and you add a hook function to shell-mode-hook that sets the local key binding to mode-line-other-buffer.
(global-set-key (kbd "<f1>")...
7
votes
Accepted
How to run a previous unique command in an Emacs shell (without repeats)?
The shell you get from M-x shell is based on comint, so you can
set comint-input-ignoredups to t in order to get the behaviour you
want. The help even mentions bash:
comint-input-ignoredups is a ...
7
votes
Accepted
differences of shell-mode vs. shell-script-mode?
shell-mode is to run shell inside Emacs, shell-script-mode is a major mode for shell script editing.
See:
https://www.emacswiki.org/emacs/ShellMode
https://www.emacswiki.org/emacs/ShMode
7
votes
Equivalent of pausing (CTRL-Z bindkey) in shell-mode
C-cC-z, which runs comint-stop-subjob, is the shell-mode equivalent.
Use C-hm from your shell buffer to see other bindings on that prefix which may be of interest.
6
votes
Accepted
How to send *shell* stdout directly to kill-ring?
Emacs Command
Instead of select-and-copy manually, you can also write a command and
let it do the work for you:
;; Adapted from `comint-delete-output'
(defun comint-copy-output ()
"Copy all output ...
6
votes
differences of shell-mode vs. shell-script-mode?
shell-mode is used by the interactive shell (command line) environment started by the shell command (spc : shell, or M-x shell in regular Emacs). It is a variant of the comint mode, which sends lines ...
5
votes
Accepted
EMACS shell mode that supports annotations
Use Literate DevOps Method
I recommend using the literate devops method via org-mode, that @phils suggested in the comments, because of the ease of use and adaptable workflow.
Example Workflow
...
5
votes
Accepted
Symbol's value as variable is void: shell-mode-map
Drew is right you need to load the package, which defines shell-mode-map
(require 'shell)
;; your code based on functions and variables defined in shell.el
Explanation
At the end of your Emacs's ...
4
votes
Accepted
sh-script alignment issues
For the indentation after the | you should be able to get the right result by going to the incorrect line (i.e. the one that starts with grep) and then do M-x smie-config-set-indent RET before "|" RET ...
4
votes
Set indentation for shell script function
I set-basic-offset to 2 but that didn't seem to work, I went back pressed C-h v sh-<TAB> and realized that there was a sh-indentation I set that variable to 2 and everything seems to work like a ...
4
votes
Accepted
how to watch and cat and grep with emacs
As commented, watch needs to run in a terminal so that it can do all the fancy things that it does. In Emacs, that means running it via term.
The very simplest thing is to invoke it from a shell ...
4
votes
how to watch and cat and grep with emacs
An alternative solution:
(with-eval-after-load 'em-term
(add-to-list 'eshell-visual-commands "watch"))
To run command like watch -d date, issue:
M-x eshell-command RET watch -d date RET
The ...
4
votes
Accepted
How to automatically kill a shell buffer when the shell process exits
Use a process sentinel when you want to react to a process exiting. e.g.:
Refer to C-hig (elisp)Sentinels
In this case shell only calls shell-mode when (and after) starting the inferior process, so ...
3
votes
Shell mode: moving through the command history
M-p and M-n let you navigate through the shell history. You can try C-up and C-down too.
There are other ways, as explained in Shell History on the manual.
3
votes
How to disable show-trailing-whitespace in emacs shell?
Chances are that you'll want to do this for numerous modes, so I would suggest using an approach which makes that simpler to specify. e.g.:
(defun my-hide-trailing-whitespace-maybe ()
"Disable `...
3
votes
Get the same/map bindkeys in shell mode, in particular CTRL-r
Consider using term-mode rather than shell-mode. In term-mode you can switch between "character mode" (where commands like C-r go directly to the terminal) and "line mode" (where commands are first ...
3
votes
Get the same/map bindkeys in shell mode, in particular CTRL-r
By default the binding to do this in Emacs' shell-mode is M-r which runs the command comint-history-isearch-backward-regexp. This allows you to search backwards though your input history using a ...
3
votes
How to turn off alignment-indent after line continuation in Shell-script mode?
Open a file in shell-script-mode, run M-x customize-variable RET sh-indent-after-continuation, and see if you can set it to always. (This seems to be a relatively new option, Emacs 25.1+)
3
votes
Accepted
Directory tracking in remote shell buffer
Not the best solution, but certainly a working one: Use [dirtrack-mode]. The following preparations are needed:
1. On the remote machine:
Make sure the prompt of the remote shell contains the path ...
3
votes
Accepted
Emacs: How to clear a subshell screen?
You can clear the shell buffer like any other, if you get the cursor away from the current prompt, where its movement behavior is different. Here's one recipe, which feels intuitive to me but looks ...
3
votes
Emacs: How to clear a subshell screen?
eshell-postoutput-scroll-to-bottom in the hook eshell-output-filter-functions is causing to scroll to bottom and so to remove it from the hook add this snippet to emacs config
(add-hook 'eshell-mode-...
3
votes
Shell-mode execute script every time a shell is invoked
You can test the TERM environment variable in your bashrc file. For M-x shell it will be "dumb" as opposed to anything else. For ansi-term the TERM environment variable is set to "eterm-color".
3
votes
Accepted
How to force filename completion in shell buffers to use quotes instead of backslashes
An interesting question. It's not configurable at all, so I recommend looking at pcomplete-insert-entry. This is where the completed text is inserted, and it's what calls comint-quote-filename. Note ...
3
votes
Emacs unable to execute shell commands despite them being in the Emacs shell PATH
Solved it: it was because Emacs was installed as a flatpak. For some reason, this mean the Emacs shell had many differences. I wasn't able to cd into certain folders. Other folders didn't exist: /usr/...
3
votes
Accepted
At the time of prompting for a password (from a subordinate shell), sometimes Emacs hides the password, sometimes not. Why the inconsistency?
comint uses a regular expression to recognize password prompts: comint-password-prompt-regexp. It's fairly complicated in an attempt to catch as many variations as possible, but it is conceivable (and ...
3
votes
On tramp shell, commands like `head`, `tail`, `man`, `git log`, etc... output all text at once instead of prompting
No, this isn't supported by Tramp. It suppresses all pagers when calling interactive commands like man. See "PAGER=cat" in tramp-remote-process-environment.
And even if you change this to &...
2
votes
configure shell-mode to understand implicit cd
For tab completion, I use company-mode:
(defun my-shell-mode-hook ()
(company-mode)
(define-key shell-mode-map (kbd "TAB") #'company-manual-begin))
(add-hook 'shell-mode-hook #'my-shell-...
2
votes
Any way to have emacs shell pass the TAB into a readline command running inside it?
As @user20119 pointed out, M-x term might be a good option: it also supports dynamically switching to "line mode" which is somewhat similar to what you get with M-x shell.
M-x eshell also tries to ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
shell-mode × 86shell × 24
indentation × 5
completion × 5
bash × 5
comint × 5
term × 4
zsh × 4
history × 3
passwords × 3
customize-face × 3
key-bindings × 2
osx × 2
tramp × 2
major-mode × 2
commands × 2
shell-command × 2
sh-mode × 2
org-mode × 1
spacemacs × 1
org-babel × 1
buffers × 1
helm × 1
debugging × 1
window × 1