Pull to refresh

Comments 60

Я рад, что для моего любимого EmEditor'a не нужно изобретать ничего подобного — он из коробки поддерживает макросы на Javascript/VBscript (более того, поддерживается запись таких макросов). Больше я не видел текстовых редакторов (кроме офиса со своим VBA) с подобным функционалом. Думаю за ваши старания поклонники Notepad++ тоже скажут вам спасибо.
До вашего коментария не слышал о EmEditor'a :-). Посмотрел, действительно мощьно, правда за деньги и ещё нет поддержики для ClearCase ;-)
А у этого плагина есть возможность заменить фрагмент текста в редакторе? Например, заменить выделенный текст на что-нибудь другое?
это была та самая первая идея.
// заменим в выделении все пробелы на плюсики
currentView.selection = currentView.selection.replace(/\s/,'+');


* This source code was highlighted with Source Code Highlighter.
мне почему то казалось что подобная статья получить больший ажиотаж ;) я как яркий поклонник Notepad++ искренне благодарен вам за проделанную роботу =) единственное, хотелось бы пожелать дальнейшего развития плагина!..
p.s. очень хочется возможности обработки открытия \ закрытия файла…
Прощу прощения, недосмотрел) Оказывается, прямо сейчас уже можно вешать обработчики. Ещё раз спасибо…
Вы правы, это ожиотаж. Я вообще-то называю это «зараженный человек». Если я от чего-то в восторге, я готов бежать и со всеми делиться. Такое поведение наверное неправильно, тк не все это понимают :-)
Полезная штука. Всё думаю вернуться к notepad++ от textmate. Textmate хвалят-хвалят, а много чего не хватает…
Я сейчас делаю один плагин для Notepad++ на основе вашего, столкнулся с такой проблемой: WSH наотрез отказывается импортирвать JS-файлы, размер которых больше 20 КБ (примерно). При этом программа падает, ссылаясь на другой плагин.

В качестве решения своей проблемы я вставляю кода плагина прямиком в start.js, что, конечно, не очень хорошо. Может, есть вариант вместо start.js использовать .wsf файл, чтобы можно было подключать файлы более «нативным» способом?
И ещё вдогонку вопрос: как вызвать диалоговое окно с полем для ввода? Стандартный prompt() не работает.
Вы правы, функции нет! Я хотел сразу мощьный инструмент для построения диалогов предоставить. Посмотрите пример «Show Dialog» в меню «Tests» (реализован в tests.menu.js). Используется ИЕ, а это значит что вы можете доволно таки сложные диалоги строить, как для ввода данных так и для управления редактором. Если предполагается частое использование такого диалога, то совет создавать его один раз и по закрытию скрывать, экономите инициализацию ИЕ.
Скажу сразу, сам я еще ничего толкового, кроме примера, таким способом не сделал. Уверен prompt() с эмулировать можно :-)
хммм!
Сохраните ваш плагин в UTF-8!
WSF это уже программа от MS, которая использует то же Windows scripting. Про такой же подход для подключения новых скриптов я тоже думал, но это уже другая история.
Не помогает. Вот такую ошибку вижу:


Причём если я беру свой плагин и сокращаю количество кода в нём, скажем, до 15 КБ, то всё работает (верее, ничего не падает).
Хочется надеяться, что ошибку я исправил не наделав новых. Проблема была в том что я освобождал память которую не выделял :-). Zen Coding я выделил в новый файл и добавил в обновленный архив, если вы не против.
Внезапно тоже выскочила эта ошибка. Оказывается касперский что-то похерил. Исправил перерегистрацией библиотек — forum.oszone.net/post-1482725.html
Вот, собственно, и результат: Zen Coding for Notepad++. Могу сказать, что вы осчастливили многих пользователей этого редактора :)

Вы не против того, что я ваш плагин поставляю вместе со своим? Там в readme.txt ваше авторство указано + я удалил все тестовые скрипты.
Конечно же я не против! Я рад что плагин находит применение, не смотря на присутствие ошибок. Я предалагаю «Zen Coding for Notepad++» включить в стандартный набор скриптов!
Очень оперативно! Спасибо за проделанную работу.
Спасибо!
Очень приятно использовать!
По сравнению с E — просто летает)
Спасибо, что реализовали то, что я в свое время не смогла сделать.
Спасибо большое действительно удобно…
только есть небольшой баг (
если меню скрыто и показывается только по нажатию Alt, то новые пункты не добавляются((
я из за этого уже два раза обновил программу и кучу всего перепробовал(((
Cпасибо за найденую ошибку. Не продумал такой пример использования.
Уже поправил, в обновленном архиве лежит новая версия Dll.
Возможно не нашел «обновленного» архива, но у меня все равно работает только так:

var mh = Editor.menuHidden;
Editor.menuHidden = 0;

var testMenu = Editor.addMenu(«Tests»);

Editor.menuHidden = mh;

NPP 5.6.8 UNICODE
Nppscripting.dll 0.1.1.0

Может исходники на google code? Ошибки сами собой находиться будут (не знаю, как выразить смущение)

P.S. Спасибо за плагин.
Вы немного не туда написали)
а вообще архив действительно обновлен уже…
По ссылке в топике уже Nppscripting.dll 0.1.2.0.
Я использовал что то подобное, но только на CPP, чтобы получить хендл меню от нпп. Иначе к сожалению никак.
Заставте браузер скачать новый zip!
У меня при нажатии CTRL+E выскакивает ENQ.
Скорее всего CTRL+E было зарезервировано другим приложением. Попробуйте дургую комбинацию.
Как изменить комбинацию? Например, хочется ctrl+пробел
Будет! Но только это все глобально, так что перестанет работать в других приложениях и будет вызывать ваш обработчик в Нпп даже если он не активен!
Эм… Т.е. эта возомжность будет в скором?
Давайте попорядку! Опишите что вы и как делаете!

Где вы это обнаружили: сами пишете или используете сторонний яваскрипт?
Какую версию Nppscriptingю.dll вы используете?
Что вы хотите добиться?
По порядку:
1. есть чистый notepad++ последней версии 5.6.8
2. Ставлю Zen.Coding-Notepad++.v0.6.zip
3. Версия Nppscripting.dll
clip2net.com/clip/m5759/1270197580-clip-7kb.png
4. открываю notepad++, ввеожу «div», нажимаю ctrl+e получаю символ ENQ (как на скриншоте). Если же выбрать пункт меню «Expand Abbreviation», то все разворачивается
А какая раскладка по умолчанию? Попробуйте английскую поставить по умолчанию и перезапустить Npp! Я думаю заработает :-) Решение проблемы я думаю вы уже понимаете.

1. Если вы используете оригинал Zen Coding то открываете start.js
2. Меняете комбинации в самом внизу файла на другие (русские буковки)
3. Перезапускаете Нпп.

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

А еще я советую вам скачать плагин по ссылке в этой статье. Так как были устранены некоторые ошибки, а Zen Coding выделен в отдельный файл.
А можно ссылку на issue, где описывается проблема глобальных hotkey'ев? Спасибо
Я так понимаю, ребята более важной работой завалены. Поэтому каждый интегрирует сам.
Подозреваю, что из тикета просто не понятен смысл проблемы, из-за этого он наверное и не в приоритете.
Вы правы.

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

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

Так что, кто хочет интегрирует, а терпеливые ждут новую версию плагина!

;-)
Все еще терпеливо ждем.
Если это из-за того, что CTRL+E занято, то поменять можно так:

в файле Zen Coding.js найдите
строку
addMenuItem('Expand Abbreviation', 'expand_abbreviation', 'Ctrl+E');
и замените CTRL+E на любую удобную вам комбинацию (из клавиш ALT,CTRL,SHIFT и одного символа).
Если вы хотите CTRL+пробел, то нужно чуть-больше поменять:
addMenuItem('Expand Abbreviation', 'expand_abbreviation', 'Ctrl+Space');
Нечаянно отправил ответ, не дописав его.
Выше, в функции function addMenuItem(name, action, keystroke) {
после строки:
for (var i = 0, il = keys.length; i < il; i++) {
var key = keys[i].toLowerCase();
нужно добавить:
if (key=='space') key=' ';

Тогда у вас сработает CTRL+пробел.
Это же просто пи… ец! Это нереально удобно! Сегодня только узнал про зен кодинг и сразу плагин для нотпада. Теперь-то я с него точно никогда не слезу. Огромное спасибо!
Это очень удобно! Я вчера узнал про Zen Coding и нашел плагин для npp сразу 0.7-й версии! Только один вопрос меня мучает — как добавить свои снипеты?
Я в качестве шаблонизатора в некоторых проектах использую смарти и хотелось бы некоторые его конструкции добавить.

Добавляю в plugins\NppScripting\includes\Zen Coding.js — 675-й строкой

'foreach': '{ foreach }\r\n\r\n{ /foreach }',

Перезагружаюсь
В результате получаю закрытый тег foreach
Кажется разобрался, добавляю в zen_settings секцию

Copy Source | Copy HTML«php»: {
  «filters»: «tpl,php,html»,
  «extends»: «html,css»,
  «snippets»: {
    «foreach»: "{ foreach }\n\n{ /foreach }\n",
    «foreachelse»: "{ foreach }\n\n{ foreachelse }\n\n{ /foreach }\n"
  }
},

при этом у меня в настройках стилей для php назначено пользовательское расширение php, все работает!
Еще раз спасибо Автору.
Что-то у меня Editor.currentView.column возвращает то же, что Editor.currentView.pos. :(
А не поделитесь примером!?
Editor.addMenu("Example").addItem({
	text: "Example",
	cmd: function() {
		alert(Editor.currentView.column - Editor.currentView.pos);
	}
});


В любом файле на любой строке при выполнении этой команды выводится 0.
Южный? :) Кстати. открытие исходников не предвидится?
Спасибо за подсказку. Ошибка была уже давно исправлена возможно даже я и не заметил ее. Вот с публикацией новой версии я затянул. Дом-работа-семья.

Версия для желающих выявить ошибки и нестыковки со скриптами написанными для предыдущей версии. Крохи API документации.
Заинтересовал плагин. В процессе написания своего JS плагина под ваше решение столкнулся с некоторыми трудностями:

Поскольку работает мы уже не в браузере, и вместо стандартного браузерного объекта window, у нас объект Editor, то где искать методы типа setInterval, SetTimout?

И вообще интересует каким образом сделан этот плагин, в плане движка, вряд ли в плагине реализован собственный движок, ведь так?
Я спрашиваю это для того что обратиться к его мануалам и посмотреть какое АПИ доступно кроме описанного вами.
Снимаю часть своего вопроса: setTimeout нашел в вашем Api.
Но вот как реализован JS все равно интересно. Я так понимаю что задействован Windows Host Script, но я попытался использовать его встроенные объекты и у меня ничего не вышло.
Я не слишком силен в этой специфике, основное направление разработки всегда было WEB…
Используется Scripting Engine. Microsoft предлагает VB и JScript реализованные на ее базисе. Доступны только те объекты, которые видны из javascript и те что вы нашли в Api плагина.

WHS это совершенно отдельное приложение, которое добавляет свои объекты для облегчения работы с Windows из скрипта. Части WHS реализованны ввиде ActiveX и могут быть использованны в ваших скриптах для Npp.
Как например
// объект для работы с файловой системой
var fso = new ActiveXObject(«Scripting.FileSystemObject»);
или
// объект для чтения файла с возможностью указания кодировки
// советую обратить на него внимание
var stream = new ActiveXObject(«ADODB.Stream»);

А тут и тут можно глянуть как работать с базой данных.

Например так можно новую создать БД
var cat = new ActiveXObject(«ADOX.Catalog»);
cat.Create(«Provider='Microsoft.Jet.OLEDB.4.0';Data Source='h:\\new1.mdb'»);

Успехов!
Кто-нибудь в курсе, как в NPP настроить всплывающие подсказки по функциям JS, с параметрами функций?
например, вот так:
image

Пробовал настроить плагин Language Help с разными справочниками *.CHM, всплывающих подсказок нет (не путать с автодополнением)… Но для других языков народ как-то ухитряется настроить, для PHP и т.п.

В папке "Notepad++\autoCompletion" есть xml файлы.
К примеру "sql.xml" фрагмент:


        <KeyWord name="REPLACE" func="yes">
            <Overload retVal="CHAR" descr="returns inputstring with every occurrence of search_string removed">
            <Param name="CHAR inputstring" />
            <Param name="CHAR search_string" />
            </Overload>
            <Overload retVal="CHAR" descr="returns inputstring with every occurrence of search_string replaced with replacement_string">
            <Param name="CHAR inputstring" />
            <Param name="CHAR search_string" />
            <Param name="CHAR replacement_string" />
            </Overload>
        </KeyWord>

см. KeyWord->Overload.descr

Sign up to leave a comment.

Articles