TextMate usability flaws
I’ve posted previously about TextMate, a great text editor for Mac OSX. While it is one of the best text editors I’ve used due to its simplicity, elegance, and power, there are a few UI features that drive me up the wall, and make it fall short of being perfect.
Tab key behavior
Here I have a bunch of text selected. What will happen when I hit tab?
If you answered, delete your selection and insert a literal tab, you win the prize. What happens in Microsoft Word, NetBeans Platform, and any number of other IDEs and text editors? The text is indented. This is clearly the better alternative in my mind because it is non-destructive, and you can get the destructive tab with a simple addition of any delete/backspace key before hitting tab.
Furthermore, it’s inconsistent – if I had selected that text and hit quote, I’d have the text surrounded by quotes, not a single quote replacing all my test. I would argue that it does more harm than good to
To indent the region, you have to do ⌘-]; to unindent you do ⌘-[. I’m sure there’s a way to remap tab and shift tab to indent the region, but it’s not immediately clear to me how to do that. If you know how, please comment so people can see. Every time I switch between Netbeans and TextMate I invariably delete a whole region of text I meant to indent by forgetting to context switch and use ⌘-]. Fortunately TextMate has extremely good undo support, so it’s not the end of the world, but it’s that little bit of friction that slows down work and adds up to frustration over multiple instances.
EDIT: The following sneaks up on me all the time and also is very irksome. Here’s a rather typical situation:

Before backwards indenting
Here I want to move the block of text backward; I resist the urge to hit shift tab, and instead press ⌘-[. What happens? Not what you’d think.

After hitting un-indent
I really cannot think of a valid reason for this behavior; I have the first line selected, but it does not respond to the indentation command. Very frustrating.
Syntax highlighting with unsaved files
If you are working on an unsaved file, there is no way to tell TextMate to treat it as a file of a certain programming language, and thus which syntax highlighting rules apply.
Why is this irksome? When I’m writing a blog post, for instance, I have a lot of snippets I compose in TextMate. In order to get the syntax highlighting to work correctly, I need to save each individual file.
Now, I’m not suggesting TextMate is magical and can read my mind as to what ruleset to apply to an unsaved file. What I’m suggesting is the addition of a menu that allows you to apply the syntax rules of a given language to the current file, regardless of whether it’s saved or not. Notepad++, a Windows text editor, has precisely this feature.
EDIT: Thanks to the comment by Marshall, I realize that this complaint is way off base – I didn’t realize where the menu was but it’s there. Right where it says “Plain text” in the above screen shot, click that and you get a full list of languages to treat the file as.
Tab support
Tab support is abysmal. There is no support for closing tabs with the middle mouse button, a convention followed by most major web browsers, as well as NetBeans and Eclipse. Instead, you are forced to click a small close icon on each tab. Fitts’s Law states that the smaller a button is, the longer it will take a user to navigate to; this is part of the reason that Apple has adopted menu bars at the top of the screen rather than floating with each window. Doing so gives the menu effectively infinite height, as the user can slam the mouse up and not go past it. Long story short, having the only means of closing tabs be a tiny button is bad UI design.
I could forgive the lack of middle button close IF the tabs supported sensible context menus to close other tabs. Compare for instance the options of some other products that support tabs:
Firefox’s popup menu on tab
When you right click a tab in TextMate, no context menu appears – there is absolutely no menu option I can find to close all tabs. Any system providing tabs should allow the user to make a blank slate for himself and focus on one (or zero) files at a time. As it stands, you must click each tiny x button individually on all the tabs.
Finally, you cannot undock tabs. Again, maybe I’ve just been spoiled by other products like Adium, Firefox, and NetBeans, but I consider it a very important feature to be able to undock tabs to show two windows side by side. While tabs are certainly more space efficient than tiling windows side by side, sometimes you really need to compare two files side by side. TextMate makes it very difficult to do that, especially when you have opened a project rather than individual files.
Here is the workflow in FireFox:
Before drag is initiated on the tab
While tab is being dragged; note that a translucent version of the page follows the cursor to indicate what is happening
After the drop is completed, the tab is split off from the original window and becomes a separate frame.
Conclusion
TextMate is an excellent text editor but not without some usability flaws. I’ve detailed some features that irritate me about TextMate, due to their violation of the principle of least astonishment; I’ve used enough other similar systems to expect certain functionality, and this expectation is violated in a few ways. These ways include the fact that hitting tab while text is selected replaces the contents with a literal tab rather than indenting the region, lack of a feature to syntax highlight unsaved files, an inability to close multiple tabs at once, and finally an inability to drag tabs out of the frame to become separate frames, so as to be able to compare documents side by side. Software designers take note – if you are going to have tabs, you must build in these features or your users will feel seriously limited.
Re: Syntax highlighting in unsaved files.
In the very bottom bar click where it says “Plain Text”. You can select the language it is as well as see the many hotkeys to set it for you.
Thanks Marshall – I don’t know how I missed that. Guess I was expecting it in a menu rather than in plain site in the interface. I’ve amended the relevant section
The lack of powerful “browser” tab related options in textmate frustrates me as well. My biggest hangup is that tabs drop of the right side of the window and that there is no simple way to get them back into the visible area. Google Chrome is the best implementation I have seen of tabs to date. If TextMate acted like that I would be in heaven.
BTW, the key combo for closing all tabs is ctrl+cmd+w. This option becomes visible from the file menu if you hold down the ctrl key.
Excellent information.. I don’t know if I would have ever found out about that “Close all tabs” key shortcut. I don’t frequently go around holding down random meta keys while browsing through the menus.
Another possibility would be if the tabs reacted to the scroll wheel, so you could scroll through your tabs (a la NetBeans and Firefox)
Oh and to avoid your tab indenting problem, a work around of sorts is to hit cmd+shift+L before doing the left shift. You can lock this functionality in with the following steps:
* In a TextMate editor window press: opt+cmd+m
* cmd+shift+L
* cmd+[
* opt+shift+M
* ctrl+cmd+M
* Name your macro (I called it “Left Shift”), and associate with cmd+[
Now cmd+[ does the line selection automatically.
I too prefer the tab key, but once you get use to cmd+[, it’s is easy enough to remember, although not preferred.
Interesting – I didn’t know how to record macros before. Thanks for the tip.
thanks for this post. these same things irk me as well. i paid for textmate a long time ago, but it breaks so many features i am used to with other editors, particularly editors in windows. the missing tab-indent functionality is #1, and the funky indent/unindent is #2 frustration (where a line won’t be un-indented if not fully selected.)
here is my other main frustration: drag and drop a file onto textmate, and it won’t open in a new tab! if i drop a file on the app icon, it opens in a new window. if i drop the file into a textmate window i already have open, it should then open the file in a new tab, right? wrong… it pastes the ENTIRE CONTENTS of the dropped file in the middle of my document. what? sometimes i don’t understand how this passes for a great text editor… i could name 10 better editors for windows. i will just name two: context (free) and sublime text (not free). sublime text is everything that textmate SHOULD be.
Very good points. I get bitten by that drag and drop feature at least once a day.
I use TM for both code and writing, and this makes good sense when TextMate is used as a LaTeX or HTML editor. The dropping behaviour triggers a ruby macro that dictates what it does – for example, when I drop a PDF on prose I’m writing, TM automatically fills out the syntax that I would otherwise type out to include the file (caption, width, labels… and lets you tab through the parameters you’re likely to change!) And a different set if a EPS is dropped, so on so forth. I guess for most languages the default is a local text-dump, which isn’t what most people want, but this can be customized to taste.
Thanks for the info, that’s very useful to know
Nick
Thanks Nick, all of the issues you mention above annoy me every day of using TextMate. I’ve gotten used to most of them, but one key combo I sorely miss is CTRL+Tab and CTRL+Shift+Tab to tab through my open tabs. I realize there is another key combo, but nearly every other app with tabs uses this combo – even Photoshop – and frankly any combo with brackets is a real pain on German keyboards.
Ditto on the cycle through tabs. I’ve gotten to the point where I will just close all my tabs periodically and then reopen the file I’m looking for via the Command T shortcut, rather than trying to find it in my tab list. Not ideal at all.
In most cases the Command T shortcut works well, but when you have a lot of similarly named files, it falls apart.
textmate has its’ short-commings, but pretty much all the points you mention, and the fact you mention them, simply show that you (and many readers) probably maybe need some time to try and really understand its’ potential..
TM goes way beyond the trivial-level of the issues you describe (like a tab-keys’ functionality). To give you an idea; a nice illustration is this o’reilly article, outlining howto implement a RPN-calculator IN (not just with..) textmate. And as it happens, this also involves customizing the TAB-key’s behaviour 😉
http://macdevcenter.com/pub/a/mac/2007/04/11/customizing-textmate.html
arri-
Thanks for replying.
I love TextMate, and I do realize that it’s extremely powerful – if you read a few of my other posts on Unix you’ll know I understand the power of the command line, and how incredible it is that TextMate can tie into any arbitrary script you write. My intention in this post is to highlight some of the *UI* problems that TextMate has. While I agree that the tab key can have some great uses (e.g. isoD –> current date), I don’t see why the tab behavior can’t be dependent upon whether text is highlighted or not.
Anyways, thanks for that link – I hadn’t seen that before.
I also can’t stand textmate’s tab indent/unindent functionality. I’m coming from Notepad++ and it’s the most painful thing to adapt to.
Anyone know of a fix?
If I have text selected and I hit the tab key, I want to indent that text, not replace it with a tab.
If I have text selected and I hit shift+tab, I want to deindent.
I don’t want to hit a 3 key combination to deindent since it’s a very common combo.
If you hold down option when you press tab or shift tab, it indents or unindents. But it’s not an ideal solution. (http://comments.gmane.org/gmane.editors.textmate.general/8159)
Superb posting, I share the same views. I wonder why this particular world truly does not picture for a moment like me and also the blog site creator 😀
What theme are you using out of curiosity?
Good question – I’m not sure. I just launched TextMate and it was on the default theme; somewhere along the way I must have lost it.