Zen Coding

Обещанные пакеты настроек (bundles) для TextMate наконец-то готовы для всеобщего использования на странице проекта Zen Coding:

Изначальная версия обоих пакетов — 1.0, в дальнейшем она будет формироваться по принципу: первый индекс (n.0) увеличивается в зависимости от внедрения новых возможностей или серьёзного пересмотря существующих, второй (1.n) обозначает исправление ошибок или добавление группы новых сокращений.

Что касается развития и поддержки пакетов — всё максимально открыто для новых идей и улучшений. Ограничения могут касаться только ключевых принципов, основанных на собственном стиле написания HTML и CSS-кода — они, скорее всего, останутся нетронуты, либо появятся возможности простой настройки пакетов под другие стили написания кода.

Надеюсь, что для кого-то эти пакеты окажутся полезными в использовании, или, по крайней мере, дадут толчок для написания собственных аналогов для других редакторов.

Комментарии

51

Странное занятие — публиковать бандлы в зипниках в наше время…
И кстати bundle, а не bungle. Bungle — это медведь из детского сериала =)

Опечатался, спасибо.

А zip — это способ уменьшить размер файла для скачивания в 10 раз: 1.1 МБ → 144 КБ, 628 КБ → 88 КБ. Я забочусь о пользователях.

Уточню что я имел ввиду говоря про зипники:
1) В таком виде жутко неудобно кастомайзить.
Значительно удобнее если бандл лежит гденить в git например. Я его себе форкаю, переделываю что хочу, а когда он обновляется — просто вытягиваю изменения к себе. Вместо того чтобы сливать новую версию, распаковывать, применять изменения, итд.
2) Не очень удобно обновлять и следить за обновлениями. Есть чудесные тулзы вроде http://yehudakatz.com/2008/05/19/textmate-gem/

Оу, тогда понятно о чём речь.

Да, я думал про систему контроля версий, но браться за это стоит только в том случае, если дело пойдёт и будут заинтересованные в этом люди.

А пока — zip, который жмёт почти в 10 раз ;)

Отлично, а будет читлист какойто? Понять хоть где конфликты с другими бандлами по хоткеям. Да и на стеночку приколоть.

Николай, как временным читлистом можно пользоваться самим редактором бандлов в TextMate: выделяете сам бандл и справа появляется список команд и сокращений. А в качестве отдельных документов — да, планируются.

Добрый, чертовски жаль. Особенно потому, что никакой серьёзной разницы с моей стороны в них нет, видимо, проблемы возникли с поддержкой базовой части бандла, которую я скопировал из оригинального.

Черт, какойто у вас глюк в вордпрессе тут - пишет "не заполнил типа имя и емайл", хотя заполнил, и все что написал пропало.

Ну, еще разок...

Есть еще прога KeyCue которая если подержать cmd выводит список всех хоткеев текущего приложения, в tm забавно выглядит.

Но печатный лист всеже лучше чем в bundle editorе изучать.

Было бы круто писать ul+4 и получать 4 вложенных li. Аналогично с другими шорткатами.
Не знаю можно это реализовать или нет, но удобно было бы писать:
ul-a-span+ и получать список со вложенными ссылками и спаном.
Это что первое в голову пришло.
А так, спасибо Вадим, все очень круто.

Да вы тут целый jQuery придумали :) Отличная идея, я попробую. Но наверное сделаю такое через описание полного пути, т.е. ul-li-span-a+ — чтобы сокращение можно было не только запомнить, но ещё и додумать.

pepelsbey, ну не jQuery, но всеж думаю будет круто, если получится реализовать это.
А я вот решил все таки заточить под себя интайп, за неимением альтернативы нормальной +)
А вот как перейду на макось, так и опробую твой zen )

Было бы круто писать ul+4 и получать 4 вложенных li. Аналогично с другими шорткатами.

Я тут на скорую руку залабал команду, которая реализует эту штуку:
Auto Lists Command

При добавлении команды нужно выбрать "Input: Selected Text or Line", "Output: Insert As Snippet", "Scope Selector: text.html" ну и собственно повесить на какое-нибудь сочетание клавиш.

Вроде работает :) Поддерживаются как нумерованные так и ненумерованные списки. Полностью заменяет сниппеты ol+, ul+ (если числа после плюса нет, то сгенерирует один li). Из минусов — активироваться может только по сочетанию клавиш.

Panya, красота ) поражаюсь мощности TextMate + Ruby. Но наверное вариант «написать + нажать-сочетание» слишком сложен. Лучше прописать нужное количество сниппетов на каждую конструкцию ul+2, ul+3, ul+4… до определённых пределов )

К слову сказать, я был бы очень рад использовать ваши познания в Ruby и любовь к TextMate в одной задумке для Zen CSS. Речь идёт о сортировке правил по шаблону. Т.е. на входе у нас есть определённый идеологически верный список следования правил, на основе которого, после нажатия сочетания клавиш, срабатывает сортировка выделенной группы правил.

Это была бы отличная фича для поддержания код-стиля для команд, где подобное практикуется. Как думаете?

За неимением TextMate ищу редактор с подобным функциональм для Windows :-)
Кстати, на официальном сайте TextMate и во многих примерах использутся именно руби, можно использовать только его? Или можно, примеру, и на Питоне и Перле писать подобные расширения? Вообще, глядя на эти обзоры просто завидую белой завистью тем, кто может использовать TextMate :-)

Если не ошибаюсь, можно использовать любой язык, что предустановлен на Mac OS X: Ruby, Python, PHP, Perl… Если так сильно хочется попробовать, могу порекомендовать Хакинтош — установку Mac OS X на любую Intel-машину. Насколько я понимаю, в этом деле уже очень сильно продвинулись. Но карму это портит )

Не универсально, конечно, но для себя я точно сделаю что-то подобное,
layout:3 превратится в классический трехколонник:
body
header
content
aside
main
extra
footer

Добрый, многие начинают с хакинтоша. Покупать дорогостоящие машины без предварительного знакомства не каждый осмелится.

Chupa, и правда универсальность невелика. Попробовал, кстати, с ul+4 — вполне удобно.

А ещё возникла мысль сделать бандл совсем по другому принципу — слушать клавишу Tab каким-нибудь сниппетом и обрабатывать конструкции, которые до. В этом случае можно будет и правда полноценный CSS Query сделать…

Chupa, в этом плане мне значит повезло.
посчастливилось юзать ibook g4 и g3 =)
Макось — это мегакрутая ось, в ней все интуитивно понятно, не то что в винде)

CSS Query — это обращение при помощи CSS-синтаксиса к DOM. Эмулировано в jQuery — $('#page ul li a') и кажется уже нативно поддерживается Firefox.

Так вот, если всё получится, то можно будет развернуть такое — div#page-span-span.icon в соответствующее дерево HTML-элементов по нажатию Tab'а.

Кстати, что касается конструкций вида ul+3, то подход, который использован в InType мне видится более элегантным - похоже, там добавлен снипет, который создает новый элемент списка по шоткату [TAB]. То есть мы развернули список, заполнили его элементы, на последнем жмем [TAB] и переходим в конец конструкции .

Далее жмем [TAB] и добавляем новый пункт, заполняем его, жмем таб дважды и создаем новый пункт... Можно довольно длинные списки заполнять практически без задержек, мне показалось удобно.

P.S: не хватает у вас в блоге предпросмотра — вот сейчас отправляю, и не знаю, отобразятся ли теги…

smmurf, в данном случае, если все элементы списка одинаковые, то стоит наверное воспользоваться хоткеем клонирования строки (ctrl+shift+d)

Можно, конечно, это просто один из вариантов.
Хотя если мы заполним пункт списка и клонируем строку - то клонируется ведь и его содержимое? Придется его удалять. А если клонируем пункт пока он пуст - придется возвращаться. А так наполнение идет «потоком». Впрочем, я просто предположил, что кому-то и этот подход покажется удобным, не утверждаю, что он самый лучший и единственно правильный.

smmurf, здесь речь скорее не о том, что удобно, а о том, что получится сделать для TextMate — я не уверен, что подобный сниппет с дубликатами строк по табам вообще возможен.

Наверное мы не совсем друг друга поняли — в сниппете ничего дублировать не надо.
Просто, допустим, ul+ разворачивается в список из 2-х элементов (потому что список из одного элемента противоречит семантике списка), при этом $0 стоит за последним закрывающим li. Затем в работу вступает другой снипет, который вызывается нажатием табуляции после закрывающего /li, и заменяет его на закрывающий li, перевод строки и новый пустой элемент списка. Надеюсь, понятно объяснил.
Если в TextMate в шоткатах сниппета можно использовать символы больше, меньше и слэш — думаю, должно сработать.
Прошу прощения за настойчивость. :-)

Pepelsbey, можно попробовать, но нужно уточнить правила сортировки и другие детали.

Насчет, вашей задумки про команду, которая будет слушать таб, я не уверен, что такое возможно. Так как результатом этой комманды должен быть опять же сниппет, а механизм раскрывания сниппета по табу вряд ли получится переопределить. Не говорю, что это невозможно, потому что сам в эту сторону еще не копал.

не знаю можно ли так сделать, но в общем то было бы лучше, если при вводе: div-tab-cmd+3 айдишник ставился не внутри дива, а на свое место.

Очень прикололо, удалил дефолный html бандл, но возникли вопросы:

HTML:
a:selected как используется? вобще для чего эти :selected хоткеи?

Например, для чего shift+cmd+b - b:selected?
У меня на этом месте Select balanced tags – отличная вешь чтобы выделить весь родительский div, и его родителя, и его родителя...
Можно сразу посмотреть начало и конец блока, ну и редактировать очень удобно.

Что такое tag:double? Написано ctrl+

во черт глючит форма

Что такое tag:double? Написано ctrl+< – т.е. ctrl+shift+, ? У меня это "Сonvert to tag", незнаю уж откуда, html бандл отключил

cmd+2,3,4 (это attr:class attr:id attr:style – добавление id="") - отлично
opt+space -   тоже

convert: cmd & – может назвать convert:entities convert:htmlchars как в php скажем. Правда я их сам путаю, может текущие и неплохие описания

группа html:*, link: и script - большое спасибо
cc:ie - клево тоже

CSS:

Может некоторые сокращения я бы переделал, но в целом – отлично.

p:4 может сделать вместо p? Т.е. по умолчанию чтоб было padding: x x x x, margin: x x x x.

Не понятно, как делать cmd+enter - тоесть вставка строки после текущей. Cовершенно точно надо вернуть cmd-enter, а вставку скобок можно поставить на скажем fn+enter (return) или с option-enter, например

Николай:

*:selected — это шорткаты к частым строчным элеметам вроде B, STRONG, I, EM, они основаны на традиционном I (italic) B (bold), поэтому назначены такие шорткаты. Учитывая то, что Cmd+Shift+B — это не дефолтный критический шорткат из TextMate, у меня есть право использовать его, кстати — вполне логично.

tag:double — эта штука из стандартного пакета, которая вставляет пару закрытый/открытый тег, которые потом можно редактировать одновременно. Учитывая то, что вы скорее всего просто отключили HTML-бандл, а не удалили его полностью, вы можете включить его одновременно с этим и попробовать сравнить.

Насчёт p:4 — мне хотелось бы сделать эти пакеты максимально гибкими, т.е.: хочешь использовать по минимуму — используй только для свойств/элементов, хочешь по максимуму — используй готовые конструкции. Иначе говоря, я гарантирую право выбора методики.

Cmd+Enter — я пока не придумал более удобного шортката для вставки фигурных скобок одной рукой, удобного своей ассоциативностью с переводом строки. В TopStyle я использовал кажется Ctrl+{ — эта штука занята сдвигами tab'ов, так что пока Cmd+Enter.

Написал команду для сортировки. Правила взяты отсюда. Если их не расширить, то сортировщик будет «спотыкаться» о неизвестные свойства :) В остальном, кажется, работает.

Сделал тут на днях команду для сортировки блоков деклараций в CSS правилах:
Sort Rules By Template

При добавлении команды указать: "Input: Selected Text or Document", "Output: Replace Selected Text", "Scope Selector: text.css" ну и назначить какое-нибудь сочетание клавиш.

Для использования команды нужно выделить блоки правил, вызвать команду, написать в диалоговом окне шаблон сортировки правил (указать только порядок свойств, свойства разделяются переводом строки, свойства указывать без значений), нужно указать как можно больше свойств. Нажать ок. Внимание! Это бета-версия, используйте на свой страх и риск :) Очень жду комментариев насчёт работы команды.

pepelsbey, можно сделать проверки на пробел после ':' и перед '}'. На скорую руку набросал: http://pastie.textmate.org/306702

Panya, ваш вариант кажется мне лучше :) Только его надо допилить, как следует :)

Первый багрепорт: http://pastie.textmate.org/private/macjxapqyhnzpgreayeaog

Не учитывается код-стайл, как и у меня (пробел после ':', таб перед '}'). Сбивается индентинг; последний тест не сортируется почему-то.

Александр, большое спасибо) Поправил оба бага. Дело в том, что раньше разделитель деклараций и значений запоминался глобально для всего выделенного текста, поэтому с таким динамическим код-стайлом, как у Вадима это могло покорежить отступы в коде, насчет второго бага, такие селекторы он просто не находил (нехватало запятой в символьном классе регекспа), теперь же все нормально. Обновленную версию команды брать тут

Поправил еще один неприятный баг, теперь команда не спотыкается на пустых правилах (без деклараций). Брать тут.

Вадим, я попытался распаковать TextMate.Zen.HTML.1.3.zip под виндой, но она не
разрешает символ ' * ' в именах файлов. Если я переименую эти файлы, это как-то скажется на функциональности?

Сергей, боюсь, что да — кажется они привязаны к файлу настроек именно по имени. Но я не уверен, стоит попробовать.