Instructables

"Drop Down", Quake-style command prompt for Windows

As a regular Lifehacker reader (albeit one who rarely enacts the excellent tips within), my attention was brought some time ago to Tilda.

Tilda provides a drop-down console for *nix-based systems, in a style familiar to players of First-Person shooter games - press the Tilde (~), and the console appears at the top of the screen, ready for input. Press it again, and it disappears. Neat and tidy, easy to use, and extremely helpful.

However. While *nix users get to enjoy such marvels, we who choose to slum on the Windows platforms are left without said nifty gadgets.

Heartbroken, I found myself searching for a solution. Without any coding skills to my name, I needed something easy. So I turned to a couple of Lifehacker favourites to achieve a simple facsimile of the effect.

Disclaimer: As so many budding Instructable authors have said before me - this is my first, so be gentle on my poor ego.

What you will need:

You will need:
- A Windows-based Hotkey-enabler. I chose AutoHotKey, and the following Instructable will be based around that choice. Adjust to taste.

- A Windows-based console shadowing application. I chose Console.

Optional: Cygwin, for that truly authentic *nix flavour.

Once you have collected your components, press onward.

Step 1: Configure your Hotkey Mapper, part 1.

I'm going to - potentially mistakenly - assume that the programs suggested have been installed to your liking in your preferred directories. If you aren't able to install the programs, or you're having issues, check out the forums for the respective programs.

With that out of the way, we are free to begin configuration.

Disclaimer again: I in no way claim to be an expert at either program. What I have put together below is based on a five-minute read of the documentation for the program and having a specific goal in mind. There is, no doubt, more elegant ways to achieve the same effect. I leave this as an exercise for the reader, or pedant, or both.

So. For those eager to achieve the effect, scroll to the bottom of this instructable, download the files, install, and enjoy. But I will, for those with the desire to read further, explain my reasoning and steps.

What we want to achieve, at this stage, is to make the console appear with a hotkey, and disappear with the same hotkey - or, for a little more elegance, the escape key.

I've chosen to use the much-underappreciated Windows key along with the tilde - well, the backtick key, anyway: Win+`.

Let's start simple. We want to launch the console if it's not active, or show it if it is.
IfWinExist [[console]]{	IfWinActive [[console]]	  {			WinHide [[console]]		}	else	  {	    WinShow [[console]]	  }}else	Run [[shortcut to console]]return

Ah, love-er-ly. Pseudo-pseudocode. If it exists (IfWinExist), and it's not active (IfWinActive), make it visible and active. If it exists (IfWinExist) and it's active (IfWinActive), then hide it. If it doesn't exist, Run it.

Okay. Problem: We don't know what (console) should be.

Good point. AutoHotKey needs to be able to refer to the Console application somehow. We need to uniquely identify a session of Console, so we can work with it.

AutoHotKey includes a program called AutoIt3 Window Spy. Basically, this allows us to get the information we need about Console.

Step 2: Sideline: AutoIt3 Window Spy

It's not my intention to create an Instructable about Window Spy. But, quickly, here's how to use it to find the class details about your Console window. For more, check out the AutoHotKey Documentation.

First, launch Console.
Second, launch AutoIt3 Window Spy.

Then, with both open, select your Console window to make it active.

Window Spy will display a significant amount of detail about your Console window. The bit you need to know is the Window Title and Class section, specifically the Class - the line beginning with "ahk_class".

In this case, the line we need is:
ahk_class Console Main Command Window

You can make AHK more selective by using the title; that's, again, an exercise for the reader.

Step 3: Configure your Hotkey Mapper, part 2.

After our little tryst with Window Spy, we now have the information we need to complete our script, right?

Let's try again:

#`::IfWinExist ahk_class Console Main Command Window{	IfWinActive ahk_class Console Main Command Window	  {			WinHide ahk_class Console Main Command Window		}	else	  {	    WinShow ahk_class Console Main Command Window	  }}else	Run [[shortcut to console]]return

Okay; that should work, right?

Not quite. It's good, but it's not right. Yet. We have a couple of issues outstanding.

When you run the script, and press your hotkey, you'll notice that Console launches. Another press - it disappears. Great!

Not really. Press it again - and it launches another session of Console! That's not right, is it?

Issue 1: Hidden Consoles stay hidden
So, we're losing the script at "IfWinActive" - it can't find the hidden Console!

AHK has a command for that - DetectHiddenWindows. Let's add it now.

#`::DetectHiddenWindows, onIfWinExist ahk_class Console Main Command Window{	IfWinActive ahk_class Console Main Command Window	  {			WinHide ahk_class Console Main Command Window		}	else	  {	    WinShow ahk_class Console Main Command Window	  }}else	Run consoleDetectHiddenWindows, offreturn

Run it again. This time, it'll hide - but, hmm... it won't come back!

Issue 2: Hidden Consoles really stay hidden
What's happening here is, the console is hidden by WinHide, but it's still active. We need to move the focus somewhere else, so that the IsWinActive call won't return true. The easiest place to send that focus is to the Windows Taskbar.

#`::DetectHiddenWindows, onIfWinExist ahk_class Console Main Command Window{	IfWinActive ahk_class Console Main Command Window	  {			WinHide ahk_class Console Main Command Window			WinActivate ahk_class Shell_TrayWnd		}	else	  {	    WinShow ahk_class Console Main Command Window	  }}else	Run consoleDetectHiddenWindows, offreturn

Close, but no cigar! It comes back, but it's not active - you can't just start typing!

Issue 3: Home movie effect - Console hasn't got focus!
Easy. We'll just make sure that when we show it, we give it focus straight away.

#`::DetectHiddenWindows, onIfWinExist ahk_class Console Main Command Window{	IfWinActive ahk_class Console Main Command Window	  {			WinHide ahk_class Console Main Command Window			WinActivate ahk_class Shell_TrayWnd		}	else	  {	    WinShow ahk_class Console Main Command Window	    WinActivate ahk_class Console Main Command Window	  }}else	Run consoleDetectHiddenWindows, offreturn

It works! Except... we can't close it with escape. That's the icing on the cake.

Issue 4: No way out!
This is just a matter of adding a quick second script to the end of your .AHK file:

#IfWinActive ahk_class Console Main Command Windowesc:: {   WinHide ahk_class Console Main Command Window   WinActivate ahk_class Shell_TrayWnd }return

Simply: if we're in Console, escape hides it. Done!

So - that's it for the AHK file. But your console window is still appearing in the middle of the screen - not very Quake-like. Let's fix that.

Step 4: Skin your Console

So, now the finishing touches. Again, like AHK, there's any number of ways to customize Console to your liking; check out the readme.txt file in your Console directory to find out more about the XML syntax Console uses.

However: here's how to create the drop-down effect: we want something borderless, semi-transparent and top-left anchored.

Here's the console.xml file I used for this effect.

<?xml version="1.0"?><console title="dropdownconsole" change_refresh="5" refresh="100">   <font>      <size>10</size>      <bold>false</bold>      <italic>false</italic>      <color r="255" g="255" b="255" />      <name>Lucida Console</name>   </font>

The size and width of the font affects the eventual width of the console. Unfortunately, Console - like the Windows console - can only be so wide. Choose a wider font to achieve a wider console.

Personally, I had issues with proportional fonts (ie: fonts with variable-width letters, like Arial); stick with Monospaced fonts such as Lucida Console for best effect.

   <position>      <x>0</x>      <y>10</y>      <!-- dock to top left for "quake-console" feel -->      <docked>top left</docked>      <snap_distance>10</snap_distance>      <!-- float on top -->      <z_order>on top</z_order>   </position>

The top-left docking and the on-top z_order are what give the appropriate feel, here. Play around with these values to change the look-and-feel of your console.

   <appearance>      <hide_console>true</hide_console>      <border>none</border>            <!-- move text away from the outside edge -->      <inside_border>10</inside_border>      <taskbar_button>tray</taskbar_button>
Set border to none to hide the Windows border and make the window chromeless, for a seamless feel.

The inside_border is a personal taste, as is the taskbar_button. The former moves the console's text away from the outside edges, and the taskbar_button makes a Console icon appear on the taskbar when it's active.
      <size rows="18" columns="95" buffer_rows="500" />      <transparency alpha="200" inactive_alpha="100">alpha</transparency>      <background>         <color r="0" g="0" b="0" />         <image style="center">dark.png</image>      </background>
Columns and Rows govern how many lines/columns of text your console can display. Again, this is a personal taste; set columns to "max" for Console to ... erm... set the width to the maximum.

The alpha and inactive_alpha transparency is, again, a matter of personal taste. Closer to 255 is more opaque; closer to 0 is more transparent.

I've chosen to put an image behind my console; the sizing of this image, however, is a little bit of guesswork unless you know the letter-sizes of your chosen font; then, simply, multiply out by the rows and columns and come up with an appropriate size. Quake console, anyone?
      <scrollbar>      	<color r="0" g="0" b="0" />        <style>flat</style>      </scrollbar>
Self-explanatory; this sets how the scrollbars are coloured and displayed.
      <cursor>         <color r="255" g="255" b="255" />         <style>fading block</style>      </cursor>   </appearance>   <behaviour>      <!-- keep the console in place -->      <mouse_drag>false</mouse_drag>      <copy_on_select>true</copy_on_select>   </behaviour></console>
Mouse_drag prevents you from picking up the console and moving it around. Copy_on_select replicates the *nix select-to-copy functionality, for a more *nixy-feel.

The final step is to save all this as an XML file, typically in your Console directory. You can then refer to it directly in your AHK script, or, as I've done, create a shortcut in your path somewhere - called "console" - that passes the XML file as a parameter; then point AHK to that.

Extra Credit
For those truly in search of a *nix experience; you can install Cygwin, and direct Console to use the Cygwin Bash environment as your primary shell:

<console title="dropdownconsole" change_refresh="5" refresh="100"    shell="c:\cygwin\cygwin.bat">

Extra-Extra Credit

Run both Cygwin and Windows cmd with two different hotkeys! That, I'm afraid, is an exercise for the reader...
 
Remove these adsRemove these ads by Signing Up
bill_gates3 years ago
Added show/hide animation. I'm sure it could use some cleanup and optimization since I just picked up AHK scripting

http://snipt.net/bill_gates/autohotkey-quake-console
xster4 years ago
I made a shorter guide for people who just want to get it done

http://tech.xster.net/tips/quake-style-drop-down-terminal-for-windows/
poprhythm4 years ago
I've augmented the AutoHotKey script to automatically navigate to the currently open explorer window's path.  Grab it here.
Geek1015 years ago
DoEs this work with command prompt portable? Would be cool if I could put it on my USB.
jsepia5 years ago
Actually, you can make Console wider. I used:
<size rows="25" columns="160" buffer_rows="500" />
to make it similar to Yakuake. It fits quite well on my 1280px wide screen.

That said, thanks a lot for the instructions! Transforming my Windows into Linux has been my lifelong dream.
berky935 years ago
finally! I've been loogking for the 2 things this instructable provides: a transparent console window and one that appears with a shortcut. hell you even got it in the top-left, which for some reason looks better than any other placement I tried. plus its a good resource for learning about autohotkey and console.
uogo6 years ago
sorry about that it was a directory problum managed to fix it ps super grate instructabule
uogo6 years ago
first off this is a grate instructable very good and very informative i copyed and pasted all the commands and script it was all working perfectly :) . but suddeunly for some strage reson it started comeing up with a new window error :failed attempt to launch program - -> 017 run,console if i open up the consle manuly it has no problum hiding and showing the window but for some reason it cant "wont" open the console hope you find a way if not no biggs
GeekyAdam6 years ago
On Tue, Jul 8, 2008 at 10:23 PM, Srivathsan V. Canchi wrote:

Hi Adam,

Thanks very much for posting your distro of Quake Console. I am sure it is gonna rock, only thing, I am not able to get the ZIP file in one piece from rapidshare (The zip is always corrupted) :-(

I used the link in your post - http://adamisageek.tumblr.com/post/27245663/quakeconsole. Is there another place from where I can download your QuakeConsole?

Thanks in advance!

Cheers,
Srivathsan



Hi Srivathsan,
I am currently working on a second release of QuakeConsole with a few improvements over the old version.
I can't tell you why the previous version is not working correctly for you, it works fine for me, I just downloaded it, unzipped it, and used it fine.
I can tell you that the new version will be available for download from my personal website and blog:
www.adamisageek.com/blog
Sadly, the project is very close to completion, but my spare time to work on it is minimal to non-existent at the moment so I can't give you an accurate date it will be done just yet, sorry.
I will gladly let you know via email once it is finished and ready for downloading!
There will also be a post made on the blog for the release.

Note: I apologize for the lack of recent updating to the blog, as I said before, personal time is at a minimum right now :( I hope to devote more time to the blog soon :D

Thx for your interest in QuakeConsole and I hope you enjoy the new version once it is released.

Adam _
adamisageek.com
dott6 years ago
There are a new and better console(console2) version, with tabbed interface and others.
I customise the script , for console2 and make a QuakeConsole.xml with cmd, powershell, bash,.. predefined tabs.
Console2 + QuakeConsole.ahk and precompiled EXE + Script for make startup shortcut:
http://www.mediafire.com/?0e3kxld19qd
It's actually pretty easy to change this to another terminal if you like. I use puttytray and it's as simple as changing the program the script loads. I used GeekyAdam's script and tweaked it a bit to my liking.
GeekyAdam6 years ago
Hey I created a clean .zip file containing the Console program and a compiled version of working AutoHotkey script, much like BlueForce's except that it doesn't install anything to the registry, and the script restores focus to the previous program used after it hides, much like DukeSucks's idea, but it also reacts correctly if you pressed tilde while the taskbar has focus.<br/>Check it out here:<br/><a rel="nofollow" href="http://adamisageek.tumblr.com/post/27245663">QuakeConsole</a><br/>
scherzo7 years ago
Is there a way to make the window slowly drop from the top of of the screen instead of appearing instantaneously?
m3gatr0n7 years ago
I'm a little confused here: "The final step is to save all this as an XML file, typically in your Console directory. You can then refer to it directly in your AHK script, or, as I've done, create a shortcut in your path somewhere - called "console" - that passes the XML file as a parameter; then point AHK to that." Could you please be more specific about this? So I save the file as cosole.xml and put it in the console's directory. What's next? How do I link it so that it appears as in Quake? Thank you in advance
paraxion (author)  m3gatr0n7 years ago
Basically, there's two ways to work with a console XML file. If you save the file in your Console directory (say, c:\program files\console) as "console.xml", Console should automatically load it when it runs.

If you save it as something else, say "console1.xml", you'll need to tell Console to choose that XML file when it runs. You do that by passing the name of the file to console.exe. For example, you'd create a Windows shortcut to:

c:\program files\console\console.exe console1.xml

Putting the XML file into Console only makes Console look like Quake; you then need to use AutoHotKey as outlined above to make it appear when you press Win+Tilde.

Cheers!

-m
I tried doing this but it doesn't seem to work with Console2. Any ideas?
Great work! Isn't it funny, authoring something; it's always tough when figuring how much to assume one's audience will already knows--and how to best avoid treating them like n00bs vs assuming they all know this stuff.
kubus0077 years ago
ended up doing it a different way. took all the files that came with console and put them in system32 directory. used the autohotkey.ahk and put that file in the startup folder. now when i press "win+` " console runs. the only problem i had was exiting and starting console repeatedly. when i did that it would pop-up at different points on the screen so in settings i turned on docking top-left. now console starts in the same place everytime.
Cool and easy to follow scripts! I have a complete package available for download. You don't need anything else. Just download and install. Everything is included. Only modification is that you only need to press the ` key. (right below the ~). Enjoy!
http://rapidshare.com/files/56025510/Console.exe.html
Just to clarify...you dont need to press " WINDOWS KEY + ` " like the tutorial shows. You only need to press the " ` " key.
corroded7 years ago
hi i tried using this tutorial and i've already used both autohotkey.ahk(the one you made and the one in the ocmments) but everytime i press win+`, the folder containing my Console (C:\Documents and Settings\me\My Documents\Console) pops up, instead of console running itself. what's the matter with this? anyway, thanks for the tutorial..it is still a great help!
i made a temporary fix for this: use the SetWorkingDir command to set where your console is(put it at the top most part of your autohotkey.ahk file SetWorkingDir, C:\Documents and Settings\me\My Documents\Console that way it will lkook for console in that directory first :) now to skin console...
dukesucks7 years ago
Excellent idea! I updated the script to work with Console 2 and to restore focus to the previously active window. It should be attached.
aka_bigred7 years ago
I made a couple changes so that it works with the latest version of console.exe It will your original one works for v1.42, but my attached AHK file will work with both 2.0+ version and 1.42 version. I also included my config XML file to skin console v2+ with the same "quake style" BTW, I'm no expert, but they work for my system.
jdavidw137 years ago
Great tutorial, I really liked it. In fact, I blogged you.
King Geek Weblog
This is fantastic, thank you! I'm still having an issue with the script methinks. I choose Win+T to invoke the terminal instead of Win+`, but I'm pretty sure that this isn't the issue. When I run the script the first time, it works like a champ. Then I hit Escape, and it hides brilliantly. When I want to invoke the terminal again, I press Win+T and it appears for about a second and then hides again. Repeat pressing of Win+T doesn't seem to make it play nice. I then have to quit the instance of Console that's in the system tray before being able to use the Quake-Console again -- which kind of defeats the purpose of the nice hiding the console feature. Any ideas on how to keep it from continuously hiding itself and just stay put when I want it to? Cheers!
Nevermind, I followed jchristof's advice below, thanks!
jchristof7 years ago
The script as it's written in the tutorial only hides the console when pressing the esc key. In order to actually kill the console, change the following line in the script from this: WinHide ahk_class Console Main Command Window to : WinKill ahk_class Console Main Command Window
jaypee687 years ago
Something isn't working for me. Console.exe lives in D:\Stuff\Console, and I have a shortcut to it in c:\windows called console.exe but when ever I hit Win+` AHK pops up an error box that says...


AutoHotkey.ahk

Error: Failed attempt to launch program or document:
Action: <console.exe>
Params: <>

The current thread will exit.

Specifically: The system cannot find the file specified.

Line#
012: Else
013: {
014: WinShow,ahk_class Console Main Command Window
015: WinActivate,ahk_class Console Main Command Window
016: }
017: }
018: Else
---> 019: Run,console.exe
024: DetectHiddenWindows,off
025: Return
030: {
031: WinHide,ahk_class Console Main Command Window
032: WinActivate,ahk_class Shell_TrayWnd
033: }
034: Return


OK


Do I need to rename my shortcut to something else? BTW this only happens when Console is not running and I use Win+` to execute it.
NM, I fixed it. I took the .exe off of the console.exe shortcut, and also removed it from the script. :-)
ronj7 years ago
Great great great ! Two things though : - The Window Class of Console changed in the beta of Console2. Using the same tool as you, I stumbled on (uh) ahk_class ATL:00456188. Not really pretty, but it works. - In step 4, setting the "Columns" value to "max" doesn't work for me. Again, this may be a change in 2.0 Thanks for your work !
hikelley7 years ago
While this is certainly useful and innovative, one could use the JediConsole which seems to offer the same effect and functionality, without all of the setup.
paraxion (author)  hikelley7 years ago
You're absolutely right; I hoped in writing this instructable better options might come out of the woodwork. Thanks!