Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm using Emacs and M-xterm for a terminal. Since my typical workflow looks like this:

  • edit some code
  • C-x o to the terminal buffer (or C-x bterm[Enter] or something)
  • press Up key to use the last command
  • press Enter to run it
  • C-x o to go back

I want to bind all of these (except the first step... maybe) to one command, I believe Emacs is awesome enough to do that :-)

So, a command must:

  • go to the buffer with terminal (maybe it shouldn't change any windows at all, maybe it should split the window vertially (if it weren't split already) and use the right sid)
  • run a last command what've been run there
  • go back to the last buffer/part of the screen

Thank you! I'm not really used to the Emacs scripting system, and I hope someone will help me and someone else will be able to use the answer to improve his workflow, since I believe this is a pretty common one


Examples of commands:

python manage.py test
python manage.py test stats
python solve.py # for project-euler puzzles :-)

the first and the second runs over a ssh (in a terminal) sometimes (I like developing with vagrant)

I understand that it's easy to bind the first and the third ones, but the second changes too often - I'd just like to "run last command"

share|improve this question
1  
It sounds like you're switching windows to do some sort of code compilation. If so, you should investigate the commands built into the coding modes which do this already w/o a separate shell. Give a concrete example of what you're trying to do and you'll get a better response. –  Doug Harris Mar 7 '11 at 23:18
    
not actually, I'll add examples –  valya Mar 7 '11 at 23:19
add comment

2 Answers

Doesn't M-x compile allow one to do something similar? It allows you to type a custom command and run it, then repeat this the next time...

Well, probably there will be problems with interactive commands (that's why you would like to use a term), and perhaps also with a persistent reusable ssh-connection (but TRAMP could help here: cd REMOTELOCATION; your_cmd could work).

So, at least, you can look at compile's source code to learn how buffers are maanged for such a scenario, and how commands are executed.

share|improve this answer
add comment

Quick & dirty - define a macro:

F3
C-x b term RET
UP RET
C-x b RET
F4

Now pressing F4 again will repeat the actions you've done between the last F3/F4 pair. You can do much more with macros, including having more than one macro, editing macros, saving macros in .emacs, etc. For more info look at EmacsWiki and Emacs manual.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.