TextMate — это бесплатный и общедоступный графический текстовый редактор общего назначения для macOS , созданный Алланом Одгаардом. TextMate включает декларативные настройки, вкладки для открытых документов , записываемые макросы , сворачиваемые разделы , фрагменты , интеграцию оболочки и расширяемую систему пакетов.
TextMate 1.0 был выпущен 5 октября 2004 года, после 5 месяцев разработки, за которым последовала версия 1.0.1 21 октября 2004 года. [2] [3] [4] Выпуск был сосредоточен на реализации небольшого набора функций , и не имел окна настроек или панели инструментов, не интегрировал FTP и не имел опций для печати. [5] [6] Сначала поддерживалось только небольшое количество языков программирования, поскольку было создано всего несколько «языковых пакетов». Тем не менее, некоторые разработчики сочли эту раннюю и неполную версию TextMate желанным изменением для рынка, который считался застойным из-за десятилетнего доминирования BBEdit . [7]
TextMate 1.0.2 вышел 10 декабря 2004 года. В серии бета-версий TextMate 1.1 TextMate приобрел следующие функции: окно настроек с графическим интерфейсом для создания и редактирования тем; строка состояния со списком символов; меню для выбора языка и настроек вкладок, а также «редактор пакетов» для редактирования языковых настроек. 6 января 2006 года Odgaard выпустил TextMate 1.5, первый «стабильный релиз» с момента 1.0.2. [8] Отзывы были положительными, в отличие от более ранних версий, которые подвергались критике. [9]
TextMate продолжал развиваться до середины 2006 года. 8 августа 2006 года TextMate был удостоен награды Apple Design Award за лучший инструмент разработчика на Всемирной конференции разработчиков Apple в Сан-Франциско , Калифорния . [10] В феврале 2006 года блог TextMate выразил намерения относительно будущих направлений, включая улучшенное управление проектами с помощью системы подключаемых модулей для поддержки удаленных файловых систем, таких как FTP, и систем контроля версий, таких как Subversion . [11] В течение 2007 года основное приложение изменилось лишь минимально, хотя его «языковые пакеты» продолжали развиваться.
В июне 2009 года было объявлено, что TextMate 2 готов примерно на 90 процентов, но с нераскрытым списком финальных функций. [12] Публичная альфа-версия была доступна для загрузки в блоге TextMate в декабре 2011 года, за ней последовал релиз-кандидат в конце 2016 года. В сентябре 2019 года была выпущена финальная версия. [13]
В августе 2012 года исходный код TextMate 2 был опубликован на GitHub на условиях GPL-3.0-or-later , [14] что было попыткой разработчика противодействовать ограничениям, которые Apple наложила на программное обеспечение, распространяемое через Mac App Store . [15] Одгаард заявил, что он предпочитает получать патчи как общественное достояние, поскольку это сохраняет его возможность выпустить будущую версию под более разрешительной лицензией или сделать версию доступной в Mac App Store. Одгаард также заявил, что у него есть друг, который использует некоторые фреймворки TextMate в проекте с закрытым исходным кодом, и они не могли включать патчи, выпущенные под GPL. [16] [17]
В октябре 2021 года был сделан последний/последний коммит на GitHub, хотя не было сделано никакого объявления о том, что проект был официально закрыт, а его исходный код по-прежнему доступен общественности. [18]
Грамматики языка TextMate позволяют пользователям создавать собственные произвольно сложные режимы подсветки синтаксиса , присваивая каждому ключевому слову документа уникальное имя. [19] Он использует модифицированную версию формата списка свойств Apple ASCII для определения грамматик языка. [ необходима ссылка ] Эти грамматики позволяют определять правила вложенности с помощью библиотеки регулярных выражений Oniguruma , а затем назначать конкретные «области действия»: составные метки, которые идентифицируют их для окраски.
Каждой точке документа назначается одна или несколько областей действия, которые определяют, где в документе находится точка, как она должна быть окрашена и каким должно быть поведение TextMate в этой точке. Например, заголовок одной из ссылок в разделе «Внешние ссылки» имеет область действия:
текст.html.mediawiki разметка.list.mediawiki мета.link.inline.external.mediawiki string.other.link.title.external.mediawiki
Эта область видимости говорит нам, что мы рассматриваем заголовок ссылки внутри ссылки внутри списка в документе MediaWiki.
Темы TextMate могут размечать любую область действия с разной степенью точности. Например, одна тема может решить раскрасить каждую константу ( constant.*
) одинаково, в то время как другая может решить, что числовые константы ( constant.numeric.*
) должны быть раскрашены иначе, чем экранированные символы ( constant.character.escape.*
). Иерархический синтаксис области действия позволяет авторам языка и авторам темы использовать различные уровни охвата, так что каждый может выбрать простоту или полноту по своему желанию.
Документация TextMate содержит список имен, обычно используемых в различных языках программирования для обеспечения взаимодействия между пакетами. [19]
TextMate поддерживает определяемые пользователем и редактируемые пользователем команды, которые интерпретируются bash или интерпретатором , указанным с помощью shebang . Команды могут отправлять множество видов ввода TextMate (текущий документ, выделенный текст, текущее слово и т. д.) в дополнение к переменным окружения , и их вывод может аналогичным образом обрабатываться TextMate различными способами. В самом простом случае команда может получать выделенный текст, преобразовывать его и повторно вставлять в документ, заменяя выделение. Другие команды могут просто показывать подсказку , создавать новый документ для своего вывода или отображать его как веб-страницу с помощью встроенного HTML-рендерера TextMate.
Многие языковые пакеты, такие как bash, PHP или Ruby, содержат команды для компиляции и/или запуска текущего документа или проекта. Во многих случаях STDOUT и STDERR процесса кода будут отображаться в окне в TextMate.
В простейшем случае « сниппеты » TextMate — это фрагменты текста, которые можно вставить в документ в текущем месте с помощью контекстно-зависимого нажатия клавиши или автодополнения табуляцией. Сниппеты «интеллектуальны», поддерживают динамическое обновление «табуляции», доступ к переменным среды и возможность запускать встроенные скрипты. Это позволяет реализовать сложные модели поведения. Табуляции можно циклически переключать с помощью клавиши «tab» и поддерживать текст по умолчанию, раскрывающиеся списки для завершения элементов сниппета. Результаты этих табуляции можно динамически изменять в другой части сниппета, когда пользователь заполняет остановку. Можно использовать переменные среды TextMate, поддерживающие информацию о текущей области действия, номере строки или имени автора и т. д. Сниппеты также могут запускать встроенные скрипты оболочки.
Грамматики, фрагменты, макросы, команды и шаблоны языка TextMate можно сгруппировать в «пакеты» функциональности. Любой фрагмент, макрос или команду можно выполнить, нажав сочетание клавиш, введя определенное слово и нажав клавишу «tab» (так называемые «триггеры табуляции») или выбрав команду из меню. Триггеры табуляции особенно полезны; сочетание триггеров табуляции и фрагментов значительно облегчает кодирование на многословных языках или языках с часто типизированными шаблонами.
Фрагменты, макросы и команды могут быть ограничены определенной областью действия, так что, например, команда «закрыть тег html» не будет работать в скрипте Python, освобождая эту комбинацию клавиш для использования в других целях. Это позволяет отдельным языкам и даже отдельным областям действия переопределять встроенные команды, такие как «Переформатировать абзац», более специализированными версиями. Даже специальные клавиши, такие как клавиша возврата и пробел, могут быть переопределены.
Доступен репозиторий Subversion, содержащий гораздо больше пакетов, чем поставляется с пакетом редактора, для всего: от Markdown до ведения блогов и языка ассемблера MIPS . [20]
Несколько документов или папок могут быть открыты одновременно в окне проекта TextMate, которое предоставляет ящик вдоль его стороны со списком имен файлов и папок, а также ряд вкладок в верхней части. В TextMate 1.5 этот ящик предоставляет пользователям средства для организации файлов и папок по всей файловой системе, а также возможность создавать виртуальные папки для дальнейшей организации. Эта функция была удалена из TextMate 2 и заменена обычным файловым браузером . Поиск и замена могут выполняться по всему проекту, и команды могут взаимодействовать с выбранными файлами или папками в ящике. Пакеты для CVS , Subversion, darcs и других систем контроля версий позволяют TextMate управлять версионным кодом.
TextMate имеет много функций, общих с редакторами программирования:
Кроме того, TextMate поддерживает функции, обеспечивающие хорошую интеграцию с графической средой OS X:
TextMate имеет несколько ограничений по сравнению с другими редакторами своего класса:
TextMate 1.5 получил премию Apple Design Award как лучший инструмент для разработчиков в 2006 году.
{{cite web}}
: Отсутствует или пусто |title=
( помощь )Разработчик TextMate MacroMates объявил в четверг, что код TextMate 2.0, в настоящее время находящийся в стадии альфа-тестирования, теперь доступен через онлайн-репозиторий GitHub. Код открывается, чтобы противодействовать тому, что некоторые разработчики считают все более ограничивающей свободу пользователей и разработчиков на платформе Mac компанией Apple.
сторонники открытого исходного кода и потенциальные участники кода громко возражали против выбора Одгаардом версии 3 GNU General Public License, одновременно требуя, чтобы исправления кода в исходной ветке содержали лицензию общественного достояния. Проблема, к сожалению, заключается в перетягивании каната между принципами FOSS и желаниями коммерческих предприятий.