расставляй правильно приоритеты и не отвлекайся на мелочи

Расширяем возможности любимого редактора PSPad

Почему я люблю PSPad? Потому что он простой, «легкий», быстрый, бесплатный и достаточно функциональный.

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

Есть в PSPad такая полезная штука, — поддержка активного скриптинга, работающего благодаря MS Windows Scripting Host (WSH), что это такое рассмотрим немного позже, а сейчас давайте взглянем на проблему.

Как я уже говорил ранее, я не использую никаких навороченных редакторов монстров и фреймворков для написания кодов своих программ, разметок страниц и т.п., признаюсь больше, я отлаживаю PHP код всего лишь с помощью echo() или print_r(), exit(), ну и естественно Error_reporting, хотя, конечно, к примеру отлаживать JavaScript с помощью FireBug гораздо приятнее, но для PHP мне и этого вполне достаточно, наверное уровень PHP программирования не тот, но тем не менее это не мешает мне составлять рекурсии и использовать ООП, ну да ладно, я отвлекся.

Так вот, конечно я не совсем «дремучий», что-бы не пользоваться полезным функционалом редакторов и имею право забывать …, к примеру структуру оператора switch, ведь всегда под рукой есть шаблоны и спасительный Ctrl+Space, это немного расхолаживает, но избавляет от ошибок и напрасного долбежа по кнопкам. Все это хорошо, но всегда чего-то не хватает.

При написании текстов очень часто приходится делать ссылки, оборачивая либо текст ссылкой, либо ссылку текстом. В конце концов, все эти «попугайные» набивания <a href=»… начинают доставать и вот тут на помощь может прийти active scripting.

Вобщем есть задача: максимально упростить процесс создания ссылок при наборе текста, чем мы и займемся. Хочется следующее: при выделении текста и нажатии комбинации клавиш, он — текст должен оборачиваться «якорем» и курсор устанавливаться в позицию пустого аттрибута href, что-то типа такого: <a href=»|»>Text</a> и в добавок: при выделении и нажатии другой комбинации клавиш, формироваться «якорь» в котором выделенный текст (ссылка) попадает в атрибут href, а курсор устанавливается в позицию содержимого якоря, вот так: <a href=»http://handynotes.ru»>|</a>

Все это наверное уже есть в каких-то редакторах, хотя насчет позиционирования курсора я не уверен, но в PSPad мы можем сделать это собственными руками по собственным потребностям.

Для того, что-бы заработала поддержка active scripting, необходимо скачать и установить WSH (это файлик: WindowsXP-Windows2000-Script56-KB917344-x86-enu.exe), например с официального сайта Microsoft, но это долго: качать через IE, устанавливать ненужные мне компоненты, что-бы подтвердить легитимность Windows, меня это всегда останавливало, т.к. например здесь, почему-то этот файлик можно взять просто так.

Скачали, установили, теперь дело за написанием необходимого скрипта. В помоще к PSPad есть разделы Script User’s Guide и Script Language Reference, которые поясняют работу со скриптами, я опишу свои шаги.

Сами скрипты располагаются в директории «C:\Program Files\PSPad editor\Script\», которая разбита на директории с соответствующими языками программирования: VBScript, JScript (JavaScript), может быть и Python и Script Runtime и т.д., там-же лежат готовые примеры.

Создаем в директории VBScript файл, к примеру wrappers.vbs и заносим туда следующий код, редактировать его можно прямо в PSPad’е:


'Author: handyblogger

'Published: 01-11-2008 11:43

Const module_name  = "Selection Wrapping"

Const module_ver   = "1.1"   

Sub Sel2Anchor

    Set editor = newEditor()

    editor.assignActiveEditor

    selLen = len(editor.selText())

    editor.selText("<a href=" + Chr(34) + Chr(34) + " target=" + Chr(34) + "_blank" + Chr(34) + ">" + editor.selText + "</a>")

    For counter = 0 To selLen + 21

         editor.command("ecLeft")

    Next

End Sub

Sub Sel2Href

    Set editor = newEditor()

    editor.assignActiveEditor

    editor.selText("<a href=" + Chr(34) + editor.selText + Chr(34) + " target=" + Chr(34) + "_blank" + Chr(34) + "></a>")

    For counter = 0 To 3

         editor.command("ecLeft")

    Next

End Sub

Sub Init

  addMenuItem "Selection2Anchor", "Wrappers", "Sel2Anchor", "CTRL+ALT+A"

  addMenuItem "Selection2Href", "Wrappers", "Sel2Href", "CTRL+SHIFT+ALT+A"

End Sub

Скрипты компилируются и «подцепляются» при каждом запуске PSPad, но вручную это можно сделать через меню «Скрипт/Перекомпилировать скрипты», после чего Вы сможете ими воспользоваться, а сейчас немного комментариев по коду:

Обязательно наличие процедуры Init, в которой осуществляется добавление (addMenuItem) элементов меню ваших исполняемых процедур к общему меню скриптов и привязка горячих клавиш (Будет создано меню Wrappers с подпунктами Selection2Anchor и Selection2Href и назначены клавиши CTRL+ALT+A и CTRL+SHIFT+ALT+A. К подпунктам будут привязаны процедуры Sel2Anchor и Sel2Href).

В самих процедурах (в примере Sel2Anchor и Sel2Href) описываются необходимые действия с помощью функционала выбранного Вами языка и объектной модели PSPad. Для понятности опишу построчно процедуру Sel2Anchor, язык, если Вы поняли — Visual Basic.

Поехали.
Первой строчкой определили процедуру: Sub Sel2Anchor.
Создаем новый объект для работы с редактором: Set editor = newEditor()
Назначаем этому объекту экземпляр текущего активного редактора: editor.assignActiveEditor
Сохраняем длину такущего выделенного текста: selLen = len(editor.selText())
Заменяем выделенный текст на сформированный «якорь»: editor.selText(«<a href=» + Chr(34) + Chr(34) + » target=» + Chr(34) + «_blank» + Chr(34) + «>» + editor.selText + «</a>»)
Сдвигаем курсор на требуемую позицию влево до href:
For counter = 0 To selLen + 21
editor.command(«ecLeft»)
Next
Закрываем процедуру: End Sub

Все. Надеюсь мой пример по использованию active scripting даст кому-то пищу для размышления.

Ответить
Обязательные поля помечены *