TextMate is a graphical text editor for macOS 10.12 or later




You can download TextMate from here.


You can use the TextMate mailing list or #textmate IRC channel on freenode.net for questions, comments, and bug reports.

You can also contact MacroMates.

Before you submit a bug report please read the writing bug reports instructions.





To build TextMate, you need the following:

All this can be installed using either Homebrew or MacPorts:

# Homebrew
brew install boost capnp google-sparsehash multimarkdown ninja ragel

# MacPorts
sudo port install boost capnproto multimarkdown ninja ragel sparsehash

After installing dependencies, make sure you have a full checkout (including submodules) and then run ./configure followed by ninja, for example:

git clone --recursive https://github.com/textmate/textmate.git
cd textmate
./configure && ninja TextMate/run

The ./configure script simply checks that all dependencies can be found, and then calls bin/rave to bootstrap a build.ninja file with default config set to release and default target set to TextMate.

Building from within TextMate

You should install the Ninja bundle which can be installed via PreferencesBundles.

After this you can press ⌘B to build from within TextMate. In case you haven't already you also need to set up the PATH variable either in PreferencesVariables or ~/.tm_properties so it can find ninja and related tools; an example could be $PATH:/usr/local/bin.

The default target (set in .tm_properties) is TextMate/run. This will relaunch TextMate but when called from within TextMate, a dialog will appear before the current instance is killed. As there is full session restore, it is safe to relaunch even with unsaved changes.

If the current file is a test file then the target to build is changed to build the library to which the test belongs (this is done by setting TM_NINJA_TARGET in the .tm_properties file found in the root of the source tree).

Similarly, if the current file belongs to an application target (other than TextMate.app) then TM_NINJA_TARGET is set to build and run this application.

Build Targets

For the TextMate.app application there are two symbolic build targets:

ninja TextMate      # Build and sign TextMate
ninja TextMate/run  # Build, sign, and (re)launch TextMate

To clean everything run:

ninja -t clean

Or simply delete ~/build/TextMate.


The source for TextMate is released under the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

TextMate is a trademark of Allan Odgaard.

  • Change License to WTFPL

    Change License to WTFPL

    opened by baloo 76
  • Inline marks

    Inline marks

    This pull request add supports for inline marks. The attached image shows an example of how it will look like. The implementation uses the existing marks API, meaning calling mate --set-mark will show up as an inline mark. Since this is a bit intrusive change it's disabled by default and there's a new preference available to enable it.

    Drawing of the inline mark tries to be a bit cleaver, it will draw the message on the next line if it will hide the code on the current line. If it hides the code on the next line as well, it will fall back to draw on the current line.

    A new theme component, "lineBackground". It's used to color the background of a whole line (the lighter red in the attached image). The existing "background" is used to color the background only where there is text (the darker red in the attached image).

    We most likely want to extend the themes with a couple of default marks, like "error", "warning" and so on.


    • [x] Separate out functionality in three commits
      • Ability to highlight lines with marks
      • Ability to store multiple marks per line
      • Rendering of the inline marks (with a preferences setting)
    • [x] Handle when no theme color is set (use default background and foreground color)
    • [x] Rename "lineBackground" to "highlight"
    • [x] Investigate if the width of the view port can be used instead of passing it in
    • [x] Remove split function in buffer/src/marks.cc
    • [ ] Use ++row instead of std::next
    • [x] Fix coding style
    • [x] Fix indentation after CGContextSaveGState(context)
    • [ ] Fix line above bookmarks are also drawn
    opened by jacob-carlborg 51
  • Native Commit window

    Native Commit window

    This is a proposal for a new native commit window (See screenshot below.). It should not be merge in yet (only git is currently support and that is the bare minimum), but I wanted some initial feedback, regrading the overall approach. If not I will break out the responsibility of committing back to the bundles (like the current commit window). However, since TextMate already knows about some SCMs, extending it to handle committing might not be too much of a stretch. Also, I wanted to try and take advantage of the nice diffs in the git bundle hence the HTMLOutputWindow.

    I do not know the best way to launch it so adding it to the view menu along with key mapping are really only for convience.

    screen shot 2014-01-26 at 4 26 44 pm

    opened by rdwampler 18
  • Add

    Add "Commit and Continue" button to the commit window

    The use case for this feature is when an interactive rebase is in progress and be able to, in one command, amend the current commit and continue with the rebase.

    By default, if the --rebase-in-progress flag is passed when the "commit" command is invoked the commit button will be in a "commit and continue" state. This is indicated by the title of the commit button now being "Commit & Continue". If the option (⌥) key is being hold down the state will revert back to the standard "commit" state and the title will change to "Continue".

    If the butten was clicked when it was in the "commit and continue" state the "commit" command will print "TM_SCM_COMMIT_CONTINUE=1" (without the quotes) to stdout as the last line. If the button was clicked when it was in the standard "commit" state the output may contain "TM_SCM_COMMIT_CONTINUE=0", or the "TM_SCM_COMMIT_CONTINUE" string will be absent

    opened by jacob-carlborg 17
  • Make find panel use standard combo boxes for history management

    Make find panel use standard combo boxes for history management

    As mentioned on the laundry list, the Find panel now uses standard combo box controls for history management, and OakPasteboardSeleector, which previousy filled this role, has been completely removed.

    Also fixes a small longstanding issue of history items drawing a white background behind them when syntax colouring is used; it was just barely visible in the "Find History" panel before, but with 10.14's translucent combo box dropdowns, it definitely stands out. Thus, there is a new option on OakSyntaxFormatter that tells it to omit the background from styled text, and it's used in both the Find panel and the Find History panel.

    I hereby dedicate the contents of these patches to the public domain.

    opened by ThatsJustCheesy 17
  • Fix crash when input multi-byte character by some input, update scopes a...

    Fix crash when input multi-byte character by some input, update scopes a...

    issue: bug info

    bug info

    Application Specific Information:
    text size: 7, line is valid utf-8: YES, 2 scope(s): 0-5
    range 0-5 is not UTF-8:
    0000 61 E9 81 87 E5 AE B3                            a......         

    my input(wubi) : baidu wubi input download

    ajmpd ----> wubi input --- output ---> a遇害 (utf-8)

    so input length is 5, replace text length is 7 in wubi input, only click jmpd without other key, it will output 遇害

    opened by shlxue 14
  • RFC: Jump to marks

    RFC: Jump to marks

    This essentially add keyboard shortcuts to jump to next/previous mark, regardless if it's a bookmark or not. I do not know if these are the best shortcuts to use. Xcode uses + ' and + " , but those are already being use by other bundles. And I couldn't find examples from other apps that have a similar feature. Any suggestions?

    opened by rdwampler 14
  • Lion fullscreen

    Lion fullscreen

    Added Lion/Mountain Lion fullscreen support to main document window and menu item to View menu.

    Per recommendation in the README, this pull request is public domain.

    opened by jbhannah 14
  • Fix many bugs

    Fix many bugs

    I tried to use TextMate 2, but ran into an unacceptable number of problems. This patch fixes every bug I encountered.

    Please do not put words in my mouth.

    opened by ieure 14
  • Update to support thumbnail generation

    Update to support thumbnail generation

    QLThumbnail generation is needed. According to Apple docs is more than needed, its basically required more than the full on preview.

    Note that your current code will cause crashes and memory problems as it reads the entire file, which is not a good idea for a quick preview, if the file is 20MB, or 2GB things will get messy.

    The code as I have here has not been compiled, just a few thoughts on what needs to be done.

    --Tom Andersen

    opened by tomandersen 13
  • Search and replace text fields changed to use NSComboBox

    Search and replace text fields changed to use NSComboBox

    Search and replace text fields changed to use the NSComboBox class. I've removed all references to the popover and the history buttons previously used but I've kept the OakPasteboardSelector class and the helper methods in OakPasteboard, I can delete them after discussion on another commit.

    opened by armartinez 7
  • adjust CJK graph spacing to double ascii width

    adjust CJK graph spacing to double ascii width

    Set TextMate2 use fixed width english fonts, like Monaco, PT Mono , One Chinese/Japanese/Korean character graph small than two ascii graph width, this patch add two parameters, set them enable expand some character fonts spacing

    defaults write com.macromates.TextMate.preview g_need_kern_noascii -bool YES
    defaults write com.macromates.TextMate.preview g_double_width_unicode -integer 9472

    this still has there are problem: i. performance (check each character on line) ii. emoji character (width bigger than double ascii width) iii. which unicode range graph need set kern-attribute

    Any idea?

    opened by windwiny 12
  • Add a Diff View

    Add a Diff View

    Some facts:

    Enabled by menu item: View -> Diff Uses the patience-diff algorithm, enhanced for live editing. Unified view only for now. Compare against Git HEAD only for now. New appended ”layout” scopes: diff.removed.line and diff.added.line .

    Stick this in your theme file to get started:

    { name = 'Diff Removed'; scope = 'diff.removed'; settings = { background = '#FFC0CB'; }; }, { name = 'Diff Added'; scope = 'diff.added'; settings = { background = '#90EE90'; }; },

    Screencast: http://www.screencast.com/t/ZQyRQPIBvu Missing +/- though.

    opened by joachimm 8
  • Open favorites at startup and re-activation

    Open favorites at startup and re-activation

    Added a checkbox in the files preference pane which enables showing the favorites chooser at startup and re-activation with no open documents. This option is mutually exclusive with «Create one at startup» and «Create one at re-activated» settings.

    screenshot 2014-12-25 23 36 17

    opened by estum 7
  • [RFC] Add syntax to include grammar by resetting their base

    [RFC] Add syntax to include grammar by resetting their base


    Here's a small proposal to fix a (non-critical) issue we found while deploying TextMate grammars to production.

    As you obviously know (since you designed the format, haha), include rules in grammars can use the $self and $base magic variables to recursively include themselves or the base grammar at the root of the parse tree. This is a crucial feature to parse many programming language that have some kind of recursion in their syntax.

    Grammars like C (source.c), however, routinely include $base instead of $self for their recursion rules. This is because the C grammar is included from other languages (like source.cpp or source.objc) to provide basic syntactic parsing, and when including itself recursively, we want the base grammar to be included again (or else chunks of source.cppwould be parsed as source.c, as they would be missing the C++ rules).

    The bug, which I believe is not trivial to fix, arises on languages that include a grammar like source.c not to extend their syntax, but to parse a chunk of code as a different language.

    Two obvious examples of this are source.lua and source.ruby, which include source.c to highlight an external block of C declarations or a heredoc with C code, respectively.

    The result looks like this:

    screen shot 2014-11-13 at 12 08 00 am

    In this case, when source.lua includes source.c, and as soon as C does a recursive include (when parsing the inside of a struct definition), the $base rule is obviously Lua, so all the C parsing breaks. We're now parsing Lua inside C inside of Lua. This is not what we want!

    So, how can we work around this? I propose the following small change in syntax: In an include rule, a scope name followed by two hashes (##) resets the base grammar for the inclusion.


    • source.ruby# Include source.ruby with the current base as base. Equivalent to source.ruby.
    • 'source.ruby##Includesource.rubywithsource.ruby` as base
    • source.ruby#regexp Include the rule regexp from source.ruby, using the current base as base.
    • source.ruby##regexp Include the rule regexp from source.ruby, but use source.ruby as base.

    This change will allow any languages that need to require a sub-language in an isolated way to do so. I believe this is the least intrusive way to fix this issue.

    @sorbits: Do you think this is reasonable, or can you come up with a more elegant way to fix the issue? I'm all ears and eager for your feedback. I'd love to get this fixed! :)

    Cheers, vmg

    opened by vmg 12
  • Display visual column width in selection

    Display visual column width in selection

    • displays tab width instead of counting hard tabs as 1 character wide, which is how TextMate 1 worked.

    For example if your tab width is set to 4 and you're on the second indent position the column will display as 9 (4 * 2) + 1, before this patch it would display as 3 (1 * 2) + 1.

    opened by jscipione 0
The official Vim repository

For translations of this README see the end. What is Vim? Vim is a greatly improved version of the good old UNIX editor Vi. Many new features have bee

Vim - the text editor 24.8k Sep 25, 2021
🔥 The most advanced open-source online code execution system in the world.

Judge0 CE ?? The most advanced open-source online code execution system in the world. Table of Contents About Features Get Started Flavors Supported L

Judge0 798 Sep 16, 2021
Open source API-compatible alternative to the text editor Sublime Text

lime Welcome to the meta project for Lime. For the backend, please see limetext/lime-backend. There are also three frontends currently in development:

LimeText 15.3k Sep 21, 2021
:atom: The hackable text editor

Atom Atom is a hackable text editor for the 21st century, built on Electron, and based on everything we love about our favorite editors. We designed i

Atom 56.1k Sep 24, 2021
Browser code editor awesomeness

ICEcoder Code editor awesomeness ...in your browser ICEcoder is a browser based code editor, which provides a modern approach to building websites. By

ICEcoder 1.3k Sep 19, 2021
🛠 All-in-one web-based IDE specialized for machine learning and data science.

All-in-one web-based development environment for machine learning Getting Started • Features & Screenshots • Support • Report a Bug • FAQ • Known Issu

Machine Learning Tooling 2.2k Sep 25, 2021
An open source code editor for the web, written in JavaScript, HTML and CSS.

⚠️ On September 1, 2021, Adobe will end support for Brackets. If you would like to continue using, maintaining, and improving Brackets, you may fork t

Adobe, Inc. 33.7k Sep 14, 2021
Wakatime server implementation & analytics dashboard

hakatime Hakatime is a server implementation of Wakatime. You can use it as a self-hosted alternative. It comes together with a dashboard which provid

null 240 Sep 14, 2021
Visual Studio Code

Visual Studio Code - Open Source ("Code - OSS") The Repository This repository ("Code - OSS") is where we (Microsoft) develop the Visual Studio Code p

Microsoft 121.6k Sep 21, 2021
personal computing platform

Slingcode is a personal computing platform in a single html file. You can make, run, and share web apps with it. You don't need any complicated tools

Chris McCormick 304 Sep 8, 2021
📊 A minimalist, self-hosted WakaTime-compatible backend for coding statistics

A minimalist, self-hosted WakaTime-compatible backend for coding statistics. Website | Features | How to use | Issues | Contact Table of Contents User

Ferdinand Mütsch 423 Sep 18, 2021
The Light Table IDE ⛺

Light Table Light Table is a next generation code editor that connects you to your creation with instant feedback. Light Table is very customizable an

Light Table 11.6k Sep 15, 2021
Mirror of GNU Emacs

Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. This directory tree holds version 28.0.50 of

null 3.2k Sep 13, 2021
Git-backed real time collaborative editor built with meteor.

jotgit Git-backed real time collaborative editor built with meteor. Here's a quick demo: http://youtu.be/z-_wSiGS18U The current version of jotgit is

John Lees-Miller 208 May 6, 2021
RStudio is an integrated development environment (IDE) for R

RStudio RStudio is an integrated development environment (IDE) for the R programming language. Some of its features include: Customizable workbench wi

RStudio 3.7k Sep 15, 2021
A self-hosted browser-based cloud IDE, updated from Codiad IDE

Atheos IDE, built on Codiad About Atheos is an updated and currently maintained fork of Codiad, a web-based IDE framework with a small footprint and m

Atheos IDE 197 Sep 15, 2021
A self-hosted server for source code parsing

bblfshd This repository contains bblfsh daemon (bblfshd), which includes the runtime that runs the driver in containers and the bblfshctl, a cli tool

Babelfish 314 Sep 10, 2021
JupyterLab computational environment.

Installation | Documentation | Contributing | License | Team | Getting help | JupyterLab An extensible environment for interactive and reproducible co

JupyterLab 11.4k Sep 24, 2021
The Kubernetes-Native IDE for Developer Teams

Next-generation container development platform, developer workspace server and cloud IDE Che is Kubernetes-native and places everything the developer

Eclipse Foundation 6.5k Sep 24, 2021