Open terminal from emacs
up vote
9
down vote
favorite
Is there a fast way (keyboard shortcut) to open a terminal emulator (in my case urxvt) in the same directory as the file in the current emacs buffer?
emacs keyboard-shortcuts
add a comment |
up vote
9
down vote
favorite
Is there a fast way (keyboard shortcut) to open a terminal emulator (in my case urxvt) in the same directory as the file in the current emacs buffer?
emacs keyboard-shortcuts
add a comment |
up vote
9
down vote
favorite
up vote
9
down vote
favorite
Is there a fast way (keyboard shortcut) to open a terminal emulator (in my case urxvt) in the same directory as the file in the current emacs buffer?
emacs keyboard-shortcuts
Is there a fast way (keyboard shortcut) to open a terminal emulator (in my case urxvt) in the same directory as the file in the current emacs buffer?
emacs keyboard-shortcuts
emacs keyboard-shortcuts
edited Aug 7 '12 at 12:23
Kevdog777
2,087123259
2,087123259
asked Aug 7 '12 at 12:06
student
6,9081663120
6,9081663120
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
up vote
14
down vote
accepted
The combination M-!
allows you to launch shell commands. You could use it to launch a separate urxvt
.
M-! urxvt RET
I just tried it with xterm
(I don't have urxvt
) and it did open in the same directory as the file in the buffer.
If you want to define a shortcut add something similar in your init file:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
In my case I bound the shortcut to: Ctrl+C - S.
add a comment |
up vote
7
down vote
I usually use M-x term
.
You can also checkout:
M-x terminal
M-x shell
M-x term
is effectively launching a terminal emulator written in elisp. From the help:
term
M-x ... RET Start a terminal-emulator in a new buffer. (term PROGRAM)
term is an interactive compiled Lisp function in `term.el'.
Start a terminal-emulator in a new buffer. The buffer is in Term mode;
see `term-mode' for the commands to use in that buffer.
Type C-c b to switch to another buffer.
Thanks, I didn't knowM-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for examplebash
orzsh
in an emacs buffer but a terminal emulator (xterm
orurxvt
...).
– student
Aug 7 '12 at 12:50
@student have a look atmulti-term
– Ulrich Dangel
Aug 7 '12 at 14:10
add a comment |
up vote
6
down vote
The emacs command M-x shell
will start a shell in a new buffer (or switch to an existing shell buffer, if there is one). If it's a new shell buffer, it'll be started in the directory of the file being visited in the current buffer. If it's an existing shell buffer, it'll still be in the directory where you left it after last using it. In order to always get the behaviour you want, remember to kill the shell buffer when you're done with it (C-x k
)
If M-x shell
is too much typing, you can set a global key to start a shell for you. Something like (global-set-key (kbd "C-x S") 'shell)
in your startup file should do it (but be careful not to mask another useful command with your shortcut!)
add a comment |
up vote
2
down vote
I wanted to run a dedicated terminal application, konsole
. I wanted to open a new tab in konsole if it is running, or fire-up one if it is not.
Since I was younger back then I split the implementation between emacs and bash. I call the following defun from emacs:
(defun bk-konsoles ()
"Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
(interactive)
(let ((curDir default-directory))
(shell-command (concat "bk_konsoles.bash "" curDir "" 2>&1 > /dev/null & disown") nil nil)
(kill-buffer "*Shell Command Output*")))
The defun calls bash script, bk_konsoles.bash
:
#!/bin/bash
myPath=`echo $@ | sed 's/.$//'`
runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
if [ "$@"!="" ]; then
konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
else
konsole --new-tab 2>&1 > /dev/null
fi
wmctrl -a " – Konsole"
else
konsole
fi
add a comment |
up vote
0
down vote
Most of the time I use shell-mode
. So I heavily use shell-here. But when I need external terminal. I use urxvt-client with tmux using this:
- Create file named 'term-here' in /usr/local/bin/ containing
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Create new function in emacs
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
- Bind to your favorite key
This will open urxvt-client (with tmux) in your current directory. I bind it in dired-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
I choose urxvt-client because it is fast and simple. Don't forget to run your urxvt-daemon at startup.
add a comment |
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
14
down vote
accepted
The combination M-!
allows you to launch shell commands. You could use it to launch a separate urxvt
.
M-! urxvt RET
I just tried it with xterm
(I don't have urxvt
) and it did open in the same directory as the file in the buffer.
If you want to define a shortcut add something similar in your init file:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
In my case I bound the shortcut to: Ctrl+C - S.
add a comment |
up vote
14
down vote
accepted
The combination M-!
allows you to launch shell commands. You could use it to launch a separate urxvt
.
M-! urxvt RET
I just tried it with xterm
(I don't have urxvt
) and it did open in the same directory as the file in the buffer.
If you want to define a shortcut add something similar in your init file:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
In my case I bound the shortcut to: Ctrl+C - S.
add a comment |
up vote
14
down vote
accepted
up vote
14
down vote
accepted
The combination M-!
allows you to launch shell commands. You could use it to launch a separate urxvt
.
M-! urxvt RET
I just tried it with xterm
(I don't have urxvt
) and it did open in the same directory as the file in the buffer.
If you want to define a shortcut add something similar in your init file:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
In my case I bound the shortcut to: Ctrl+C - S.
The combination M-!
allows you to launch shell commands. You could use it to launch a separate urxvt
.
M-! urxvt RET
I just tried it with xterm
(I don't have urxvt
) and it did open in the same directory as the file in the buffer.
If you want to define a shortcut add something similar in your init file:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
In my case I bound the shortcut to: Ctrl+C - S.
edited Aug 7 '12 at 14:41
answered Aug 7 '12 at 14:12
rahmu
10.1k1969110
10.1k1969110
add a comment |
add a comment |
up vote
7
down vote
I usually use M-x term
.
You can also checkout:
M-x terminal
M-x shell
M-x term
is effectively launching a terminal emulator written in elisp. From the help:
term
M-x ... RET Start a terminal-emulator in a new buffer. (term PROGRAM)
term is an interactive compiled Lisp function in `term.el'.
Start a terminal-emulator in a new buffer. The buffer is in Term mode;
see `term-mode' for the commands to use in that buffer.
Type C-c b to switch to another buffer.
Thanks, I didn't knowM-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for examplebash
orzsh
in an emacs buffer but a terminal emulator (xterm
orurxvt
...).
– student
Aug 7 '12 at 12:50
@student have a look atmulti-term
– Ulrich Dangel
Aug 7 '12 at 14:10
add a comment |
up vote
7
down vote
I usually use M-x term
.
You can also checkout:
M-x terminal
M-x shell
M-x term
is effectively launching a terminal emulator written in elisp. From the help:
term
M-x ... RET Start a terminal-emulator in a new buffer. (term PROGRAM)
term is an interactive compiled Lisp function in `term.el'.
Start a terminal-emulator in a new buffer. The buffer is in Term mode;
see `term-mode' for the commands to use in that buffer.
Type C-c b to switch to another buffer.
Thanks, I didn't knowM-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for examplebash
orzsh
in an emacs buffer but a terminal emulator (xterm
orurxvt
...).
– student
Aug 7 '12 at 12:50
@student have a look atmulti-term
– Ulrich Dangel
Aug 7 '12 at 14:10
add a comment |
up vote
7
down vote
up vote
7
down vote
I usually use M-x term
.
You can also checkout:
M-x terminal
M-x shell
M-x term
is effectively launching a terminal emulator written in elisp. From the help:
term
M-x ... RET Start a terminal-emulator in a new buffer. (term PROGRAM)
term is an interactive compiled Lisp function in `term.el'.
Start a terminal-emulator in a new buffer. The buffer is in Term mode;
see `term-mode' for the commands to use in that buffer.
Type C-c b to switch to another buffer.
I usually use M-x term
.
You can also checkout:
M-x terminal
M-x shell
M-x term
is effectively launching a terminal emulator written in elisp. From the help:
term
M-x ... RET Start a terminal-emulator in a new buffer. (term PROGRAM)
term is an interactive compiled Lisp function in `term.el'.
Start a terminal-emulator in a new buffer. The buffer is in Term mode;
see `term-mode' for the commands to use in that buffer.
Type C-c b to switch to another buffer.
edited Aug 7 '12 at 13:01
answered Aug 7 '12 at 12:45
rahmu
10.1k1969110
10.1k1969110
Thanks, I didn't knowM-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for examplebash
orzsh
in an emacs buffer but a terminal emulator (xterm
orurxvt
...).
– student
Aug 7 '12 at 12:50
@student have a look atmulti-term
– Ulrich Dangel
Aug 7 '12 at 14:10
add a comment |
Thanks, I didn't knowM-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for examplebash
orzsh
in an emacs buffer but a terminal emulator (xterm
orurxvt
...).
– student
Aug 7 '12 at 12:50
@student have a look atmulti-term
– Ulrich Dangel
Aug 7 '12 at 14:10
Thanks, I didn't know
M-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for example bash
or zsh
in an emacs buffer but a terminal emulator (xterm
or urxvt
...).– student
Aug 7 '12 at 12:50
Thanks, I didn't know
M-x term
, it seems nice but is not exactly what I want. I want to start not a shell (for example bash
or zsh
in an emacs buffer but a terminal emulator (xterm
or urxvt
...).– student
Aug 7 '12 at 12:50
@student have a look at
multi-term
– Ulrich Dangel
Aug 7 '12 at 14:10
@student have a look at
multi-term
– Ulrich Dangel
Aug 7 '12 at 14:10
add a comment |
up vote
6
down vote
The emacs command M-x shell
will start a shell in a new buffer (or switch to an existing shell buffer, if there is one). If it's a new shell buffer, it'll be started in the directory of the file being visited in the current buffer. If it's an existing shell buffer, it'll still be in the directory where you left it after last using it. In order to always get the behaviour you want, remember to kill the shell buffer when you're done with it (C-x k
)
If M-x shell
is too much typing, you can set a global key to start a shell for you. Something like (global-set-key (kbd "C-x S") 'shell)
in your startup file should do it (but be careful not to mask another useful command with your shortcut!)
add a comment |
up vote
6
down vote
The emacs command M-x shell
will start a shell in a new buffer (or switch to an existing shell buffer, if there is one). If it's a new shell buffer, it'll be started in the directory of the file being visited in the current buffer. If it's an existing shell buffer, it'll still be in the directory where you left it after last using it. In order to always get the behaviour you want, remember to kill the shell buffer when you're done with it (C-x k
)
If M-x shell
is too much typing, you can set a global key to start a shell for you. Something like (global-set-key (kbd "C-x S") 'shell)
in your startup file should do it (but be careful not to mask another useful command with your shortcut!)
add a comment |
up vote
6
down vote
up vote
6
down vote
The emacs command M-x shell
will start a shell in a new buffer (or switch to an existing shell buffer, if there is one). If it's a new shell buffer, it'll be started in the directory of the file being visited in the current buffer. If it's an existing shell buffer, it'll still be in the directory where you left it after last using it. In order to always get the behaviour you want, remember to kill the shell buffer when you're done with it (C-x k
)
If M-x shell
is too much typing, you can set a global key to start a shell for you. Something like (global-set-key (kbd "C-x S") 'shell)
in your startup file should do it (but be careful not to mask another useful command with your shortcut!)
The emacs command M-x shell
will start a shell in a new buffer (or switch to an existing shell buffer, if there is one). If it's a new shell buffer, it'll be started in the directory of the file being visited in the current buffer. If it's an existing shell buffer, it'll still be in the directory where you left it after last using it. In order to always get the behaviour you want, remember to kill the shell buffer when you're done with it (C-x k
)
If M-x shell
is too much typing, you can set a global key to start a shell for you. Something like (global-set-key (kbd "C-x S") 'shell)
in your startup file should do it (but be careful not to mask another useful command with your shortcut!)
answered Aug 7 '12 at 12:49
D_Bye
10.4k13227
10.4k13227
add a comment |
add a comment |
up vote
2
down vote
I wanted to run a dedicated terminal application, konsole
. I wanted to open a new tab in konsole if it is running, or fire-up one if it is not.
Since I was younger back then I split the implementation between emacs and bash. I call the following defun from emacs:
(defun bk-konsoles ()
"Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
(interactive)
(let ((curDir default-directory))
(shell-command (concat "bk_konsoles.bash "" curDir "" 2>&1 > /dev/null & disown") nil nil)
(kill-buffer "*Shell Command Output*")))
The defun calls bash script, bk_konsoles.bash
:
#!/bin/bash
myPath=`echo $@ | sed 's/.$//'`
runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
if [ "$@"!="" ]; then
konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
else
konsole --new-tab 2>&1 > /dev/null
fi
wmctrl -a " – Konsole"
else
konsole
fi
add a comment |
up vote
2
down vote
I wanted to run a dedicated terminal application, konsole
. I wanted to open a new tab in konsole if it is running, or fire-up one if it is not.
Since I was younger back then I split the implementation between emacs and bash. I call the following defun from emacs:
(defun bk-konsoles ()
"Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
(interactive)
(let ((curDir default-directory))
(shell-command (concat "bk_konsoles.bash "" curDir "" 2>&1 > /dev/null & disown") nil nil)
(kill-buffer "*Shell Command Output*")))
The defun calls bash script, bk_konsoles.bash
:
#!/bin/bash
myPath=`echo $@ | sed 's/.$//'`
runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
if [ "$@"!="" ]; then
konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
else
konsole --new-tab 2>&1 > /dev/null
fi
wmctrl -a " – Konsole"
else
konsole
fi
add a comment |
up vote
2
down vote
up vote
2
down vote
I wanted to run a dedicated terminal application, konsole
. I wanted to open a new tab in konsole if it is running, or fire-up one if it is not.
Since I was younger back then I split the implementation between emacs and bash. I call the following defun from emacs:
(defun bk-konsoles ()
"Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
(interactive)
(let ((curDir default-directory))
(shell-command (concat "bk_konsoles.bash "" curDir "" 2>&1 > /dev/null & disown") nil nil)
(kill-buffer "*Shell Command Output*")))
The defun calls bash script, bk_konsoles.bash
:
#!/bin/bash
myPath=`echo $@ | sed 's/.$//'`
runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
if [ "$@"!="" ]; then
konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
else
konsole --new-tab 2>&1 > /dev/null
fi
wmctrl -a " – Konsole"
else
konsole
fi
I wanted to run a dedicated terminal application, konsole
. I wanted to open a new tab in konsole if it is running, or fire-up one if it is not.
Since I was younger back then I split the implementation between emacs and bash. I call the following defun from emacs:
(defun bk-konsoles ()
"Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
(interactive)
(let ((curDir default-directory))
(shell-command (concat "bk_konsoles.bash "" curDir "" 2>&1 > /dev/null & disown") nil nil)
(kill-buffer "*Shell Command Output*")))
The defun calls bash script, bk_konsoles.bash
:
#!/bin/bash
myPath=`echo $@ | sed 's/.$//'`
runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
if [ "$@"!="" ]; then
konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
else
konsole --new-tab 2>&1 > /dev/null
fi
wmctrl -a " – Konsole"
else
konsole
fi
answered Jul 9 '14 at 6:02
Adobe
176111
176111
add a comment |
add a comment |
up vote
0
down vote
Most of the time I use shell-mode
. So I heavily use shell-here. But when I need external terminal. I use urxvt-client with tmux using this:
- Create file named 'term-here' in /usr/local/bin/ containing
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Create new function in emacs
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
- Bind to your favorite key
This will open urxvt-client (with tmux) in your current directory. I bind it in dired-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
I choose urxvt-client because it is fast and simple. Don't forget to run your urxvt-daemon at startup.
add a comment |
up vote
0
down vote
Most of the time I use shell-mode
. So I heavily use shell-here. But when I need external terminal. I use urxvt-client with tmux using this:
- Create file named 'term-here' in /usr/local/bin/ containing
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Create new function in emacs
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
- Bind to your favorite key
This will open urxvt-client (with tmux) in your current directory. I bind it in dired-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
I choose urxvt-client because it is fast and simple. Don't forget to run your urxvt-daemon at startup.
add a comment |
up vote
0
down vote
up vote
0
down vote
Most of the time I use shell-mode
. So I heavily use shell-here. But when I need external terminal. I use urxvt-client with tmux using this:
- Create file named 'term-here' in /usr/local/bin/ containing
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Create new function in emacs
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
- Bind to your favorite key
This will open urxvt-client (with tmux) in your current directory. I bind it in dired-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
I choose urxvt-client because it is fast and simple. Don't forget to run your urxvt-daemon at startup.
Most of the time I use shell-mode
. So I heavily use shell-here. But when I need external terminal. I use urxvt-client with tmux using this:
- Create file named 'term-here' in /usr/local/bin/ containing
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Create new function in emacs
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
- Bind to your favorite key
This will open urxvt-client (with tmux) in your current directory. I bind it in dired-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
I choose urxvt-client because it is fast and simple. Don't forget to run your urxvt-daemon at startup.
answered Dec 2 at 1:56
azzamsa
789
789
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f44932%2fopen-terminal-from-emacs%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown