Как написать плагин для notepad

шарпопочитатель

59 / 26 / 7

Регистрация: 31.01.2010

Сообщений: 1,035

1

30.10.2010, 21:11. Показов 14250. Ответов 12


как написать плагин для notepad++? есть какой-нибудь мануал?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

30.10.2010, 21:11

12

41 / 40 / 5

Регистрация: 22.06.2010

Сообщений: 415

Записей в блоге: 1

21.02.2011, 15:15

2

Как вариант:
Скачать исходники Notepad++ и посмотреть как он обрабатывает плагины.



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

17.07.2013, 15:40

3

Актуально…

Может кто натыкался на хоть какую-то информацию по написанию плагинов?



1



Avazart

Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

17.07.2013, 21:07

5

Спасибо сходу не заметил этого …

Добавлено через 3 часа 42 минуты
Круто … шаблон плагина скомпился ( В VC++) без всяких проблем и даже работает…

Интересует такой момент, каким образом лучше открыть новую вкладу и в нее поместить свое окно…
А лучше запустить свою программу и поместить ее окно на этой вкладке.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//----------------------------------------------//
//-- STEP 4. DEFINE YOUR ASSOCIATED FUNCTIONS --//
//----------------------------------------------//
void hello()
{
    // Open a new document
    ::SendMessage(nppData._nppHandle, NPPM_MENUCOMMAND, 0, IDM_FILE_NEW);
 
    // Get the current scintilla
    int which = -1;
    ::SendMessage(nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, (LPARAM)&which);
    if (which == -1)
        return;
    HWND curScintilla = (which == 0)?nppData._scintillaMainHandle:nppData._scintillaSecondHandle;
 
    // Say hello now :
    // Scintilla control has no Unicode mode, so we use (char *) here
    ::SendMessage(curScintilla, SCI_SETTEXT, 0, (LPARAM)"Hello, Notepad++!");
}



0



Каратель

Эксперт С++

6607 / 4026 / 401

Регистрация: 26.03.2010

Сообщений: 9,273

Записей в блоге: 1

18.07.2013, 12:38

6



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

18.07.2013, 13:09

7

Цитата
Сообщение от Jupiter
Посмотреть сообщение

пальцем в небо

Да оно коню понятно, вопрос к какому окно его лепить и как его получить из нотепад.

Также непонятно как отловить сообщение перехода между закладками ( файлами ) в нотепад.



0



Каратель

Эксперт С++

6607 / 4026 / 401

Регистрация: 26.03.2010

Сообщений: 9,273

Записей в блоге: 1

18.07.2013, 13:11

8

Цитата
Сообщение от Avazart
Посмотреть сообщение

curScintilla

ну я так понял что это хендл вкладки, значит к ней



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

18.07.2013, 13:16

9

Цитата
Сообщение от Jupiter
Посмотреть сообщение

ну я так понял что это хендл вкладки, значит к ней

Я вот тоже думал…
Там два хендла Main и Second. Но оба не дают должного эффекта.
Допустим если лепить стандартный калькулятор в окно то он будет на каждой вкладке нотепада, а не только на новой открытой.



0



Каратель

Эксперт С++

6607 / 4026 / 401

Регистрация: 26.03.2010

Сообщений: 9,273

Записей в блоге: 1

18.07.2013, 13:33

10

судя по тому что показывает spy++ это невозможно, все вкладки имеют один хендл — их парента. и даже текстовый редактор нельзя выделить.



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

18.07.2013, 13:54

11

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

Добавлено через 11 минут
В общем на данный момент я уже нашел с выход- «причаливаемое» окно…

Добавлено через 1 минуту
Основная проблема :

Цитата
Сообщение от Avazart
Посмотреть сообщение

Также непонятно как отловить сообщение перехода между закладками ( файлами ) в нотепад.



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

20.07.2013, 18:01

12

Цитата
Сообщение от Jupiter
Посмотреть сообщение

судя по тому что показывает spy++ это невозможно, все вкладки имеют один хендл — их парента. и даже текстовый редактор нельзя выделить.

Ну у меня получилось «влепить» но то что глючит перерисовка говорит о том что это не то…



0



NickoTin

Почетный модератор

Эксперт .NET

8713 / 3665 / 404

Регистрация: 14.06.2010

Сообщений: 4,513

Записей в блоге: 9

21.07.2013, 02:30

13

Цитата
Сообщение от Avazart
Посмотреть сообщение

Также непонятно как отловить сообщение перехода между закладками ( файлами ) в нотепад.

Нужно ловить уведомление NPPN_BUFFERACTIVATED от нотепада, где SCNotification::nmhdr.idFrom будет ID активного буфера (омг, не смог лучше перевести с доков), далее шлем npp сообщение NPPM_GETPOSFROMBUFFERID и получаем индекс активной вкладки.

C
1
2
3
4
5
6
7
8
9
10
11
12
beNotified(struct SCNotification* scn)
{
    // хз, может быть такой случай или нет, но лучше проверю
    if (!scn)
        return;
 
    if (scn->nmhdr.code == NPPN_BUFFERACTIVATED)
    {
        // MainData это сохраненный NppData при вызове setInfo
        DWORD index = (DWORD)SendMessage(MainData._nppHandle, NPPM_GETPOSFROMBUFFERID, scn->nmhdr.idFrom, 0);
    }
}



1



Разработка .NET плагина для работы с Gist в Notepad++

Notepad++ love GitHub

Однажды мне потребовалось создать Gist, фрагмент кода,
которым можно делиться с коллегами. А еще я активный пользователь Notepad++.
После того, как найти плагин для работы с Gist в Notepad++ не удалось
(есть только под Sublime), я решил написать свой. К тому же
это добавило опыта разработки плагинов и работы с GitHub API.
Сразу выкладываю ссылку на исходники и
сборки самого плагина NppGist-x86-1.1.0.10,
NppGist-x64-1.1.0.10.
Для его подключения нужно перенести соответствующий файл NppGist.dll в папку
plugins, которая находится в папке с установленным Notepad++. Плагины можно
разрабатывать на нескольких языках: C++, Ada, Delphi, C#, но я остановился на
последнем из-за его актуальности и большого опыта работы с ним. При разработке
использовались следующие библиотеки и инструменты:

  • NppPlugin.NET
    шаблон Notepad++ плагина для .NET платформы.
  • NppNetInf — новая библиотека
    для более легкой разработки плагинов.
  • ServiceStack.Text
    библиотека для сериализация и десериализация JSON. Имеет высокую
    производительность и небольшой размер).
  • hurl.it — удобный онлайн-инструмент для
    составления и тестирования GET, POST, DELETE и других запросов.
  • NUnit — юнит-тестирование.

Инициализация плагина

Взаимодействие с Notepad++ происходит посредством Win32 сообщений. Но, к
счастью, под .NET уже написан готовый шаблон плагина со многими
сообщениями, классами и структурами
(NppPlugin.NET.v0.5).
Для корректной компиляции плагина в Visual Studio Platform target нужно
устанавливать в x86 или x64, вместо Any CPU по-умолчанию, а также
использовать .NET не ниже версии 4.0. Инициализация плагина происходит в методах
CommandMenuInit и SetToolBarIcon. В первый добавляются пункты, которые
отображаются в меню плагина. Делается это следующим образом:

PluginBase.SetCommand(OpenCommandId, "Open Gist", OpenGistCommand,
    new ShortcutKey(false, false, false, Keys.None));

Там же можно определить комбинации клавиш для команд
(в разработанном плагине они не используются). Метод OpenGistCommand
описывается разработчиком, в нем прописана логика открытия окна с выбором гиста.
В методе SetToolBarIcon добавляются иконки с командами плагина (Open, Save)
в панель инструментов Notepad++.

toolbarIcons tbIcons = new toolbarIcons();
tbIcons.hToolbarBmp = tbLoad.GetHbitmap();
IntPtr pTbIcons = Marshal.AllocHGlobal(Marshal.SizeOf(tbIcons));
Marshal.StructureToPtr(tbIcons, pTbIcons, false);
Win32.SendMessage(PluginBase.nppData._nppHandle, NppMsg.NPPM_ADDTOOLBARICON,
    PluginBase._funcItems.Items[OpenCommandId]._cmdID, pTbIcons);
Marshal.FreeHGlobal(pTbIcons);

Сохранение и загрузка настроек

Для сохранения и загрузки параметров плагина, используются следующие методы:

saveLocally = Convert.ToBoolean(Win32.GetPrivateProfileInt("Settings", "SaveLocally", 1, IniFileName));
//...
Win32.WritePrivateProfileString("Settings", "SaveLocally",
    (Convert.ToInt32(saveLocally)).ToString(), Main.IniFileName);

Выполнение команд

Notepad++ использует компонент Scintilla, который используется и в других
редакторах текста. С обоими компонентами можно общаться посредством сообщений.
Все возможные коды для сообщений прописаны в файле NppPluginNETHelper.cs. Notepad++
сообщения имеют префикс NPPM и они отвечают за работу с файлами, меню,
табами, языками и пр. Scintilla сообщения нужны непосредственно для работы с
текстом (вставка, удаление, выделение, настройка визуальных стилей, фолдинг,
скроллинг и т.д.).

Перехват событий

Для перехвата событий в Notepad++, используется метод
beNotified в файле UnmanagedExports.cs. Данные события имеют
префикс NPPN для Notepad++ (открытие, закрытие файла,
переключение вкладок) и SCN для Scintilla (изменение текста).
В данном плагине перехват событий не используется. Полный список и
подробное описание команд по Notepad++ находится в Messages And
Notifications.
А по Scintilla здесь: ScintillaDoc.

Корректное получение UTF8 текста

В .NET плагине почему-то нельзя получить текст в UTF8 формате, хотя эта
кодировка является самой распространенной. Для решения этой проблемы
было написано следующее свойство, в котором происходит корректная конвертация
текста, в том числе и русского. Это свойство вызывается при загрузке гиста
на GitHub.

public string lpstrTextUtf8
{
    get
    {
        _readNativeStruct();
        int len = 0;
        while (Marshal.ReadByte(_sciTextRange.lpstrText, len) != 0)
            ++len;
        if (len == 0)
            return string.Empty;
        byte[] buffer = new byte[len];
        Marshal.Copy(_sciTextRange.lpstrText, buffer, 0, buffer.Length);
        return Encoding.UTF8.GetString(buffer);
    }
}

Встраивание сборок

Notepad++ загружает плагины из всех .dll файлов, находящихся в папке plugins.
Причем если плагин из dll загрузить не удалось, выводится сообщение с текстом
The plugin is not compatible with current version of Notepad++.
Таким образом, если в эту папку вместе с сами плагином копировать и его
зависимости (в нашем случае ServiceStack.Text.dll), то для каждой такой
зависимости будет отображаться сообщение об ошибке, что, конечно, не является
приемлемым. Решить эту проблему можно двумя способами:

  • Помещать все зависимости в отдельную подпапку.
  • Объединять плагин и его зависимости в одну сборку.

Я воспользовался вторым способом, т.к. один файл удобней распространять и
копировать. Для этого сторонние сборки помечались как Embedded Resource
и динамически подключались к плагину во время инициализации следующим образом:

static Main()
{
    AppDomain.CurrentDomain.AssemblyResolve += ResolveEventHandler;
}

private static Assembly ResolveEventHandler(object sender, ResolveEventArgs args)
{
    string resource = string.Format("{0}.{1}.dll", PluginName, args.Name.Remove(args.Name.IndexOf(',')));
    Assembly currentAssembly = Assembly.GetExecutingAssembly();
    using (Stream stream = currentAssembly.GetManifestResourceStream(resource))
    {
        var bytes = new byte[(int)stream.Length];
        stream.Read(bytes, 0, (int)stream.Length);
        return Assembly.Load(bytes);
    }
}

Подробнее о динамической загрузке сборок написано в статье
Load DLL From Embedded Resource
на CodeProject.

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

Также можно воспользоваться сторонней программой для объединения сборок в одну,
ILMerge. Однако ее пришлось бы запускать
уже в Post-build событии.

GitHub Api

Для авторизации на GitHub используется AccessToken, который нужно получить в
свойствах аккаунта на GitHub.
Он используется во все запросах в виде параметра access_token.
С полным списком используемых GitHub Gist API методов можно
ознакомиться по ссылке.
Анонимные гисты в разработанном плагине не поддерживаются.

Подмодуль NppNetInf

При разморозке проекта в 2017 скомпилировать рабочую x64 версию плагина не удалось:
пиктограммы загрузки и сохранения не добавлялись в Toolbar. Для решения этой
проблемы я задался вопросом, существуют ли другие x64 .NET плагины и правильно
ли они работают? После недолгих поисков был найден шаблон NotepadPlusPlusPluginPack.Net
и плагин для рендеринга Markdown на его основе MarkdownViewerPlusPlus,
который добавлял пиктограммы для обеих платформ x86 и x64 правильно.

Однако в самом шаблоне не понравилась громоздкость и зависимость от Visual C++.
И я задался другим вопросом: а можно ли убрать зависимость от Visual С++ и
сделать легкое и простое подключение инфраструктуры?

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

  1. Создать репозиторий с .NET проектом MyAwesomePlugin.
  2. Добавить подмодуль https://github.com/KvanTTT/NppNetInf.git в репозиторий.
  3. Добавить таргет в файл MyAwesomePlugin.csproj следующим образом:
    <Import Project="$(SolutionDir)NppNetInfsrcDllExportNppPlugin.DllExport.targets" />
    Этот таргет будет выполняться после каждого билда. Он меняет финальную сборку
    специальным образом, чтобы Notepad++ «понимал» ее.
  4. Создать поддиректорию NppNetInf внутри проекта MyAwesomePlugin и добавить
    все *.cs файлы как ссылки из закачанного подмодуля NppNetInf
    (Win32.cs, Scintilla.cs, PluginMain.cs и пр.).
  5. Добавить класс Main и унаследовать его от PluginMain. Далее переопределить
    в нем необходимые абстрактный методы и свойства
    (PluginName, CommandMenuInit). Опционально можно переопределить и
    другие методы
    (OnNotification(ScNotification notification), PluginCleanUp(), SetToolBarIcon).
  6. Выбрать платформу (x86 или x64), построить проект и переместить
    скомпилированную сборку в соответствующую директорию плагинов Notepad++.
    Обычно это C:Program Files (x86)Notepad++plugins для x86 платформы и
    C:Program FilesNotepad++plugins для x64.
  7. Запустить Notepad++ и наслаждаться работой вашего классного плагина!

Для удаления зависимости от Visual C++ достаточно было просто удалить
атрибуты LibToolPath и LibToolDllPath в файле NppPlugin.DllExport.targets
(не знаю зачем они вообще были добавлены разработчиками).

NppNetInf при старте пытается найти класс плагина Main, реализующий
PluginMain с помощью рефлексии:

Type pluginMain = Assembly.GetExecutingAssembly().GetTypes()
    .FirstOrDefault(type => type.IsSubclassOf(typeof(PluginMain)));
_main = (PluginMain)Activator.CreateInstance(pluginMain);

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

Заключение

Окно сохранения гиста выглядит так:

NppGist Sample Screen

При инициализации плагина необходимо ввести ваш access token.

Также в проект внедрена непрерывная интеграция AppVeyor для x86 и x64 платформ.
Результаты билда, тестов и готовые сборки доступны
по ссылке.

Надеюсь, после прочтения всем желающим станет проще писать плагины под Notepad++.
Используйте плагин и присоединяйтесь к его разработке!

Привет,

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

Инструмент разработки

В качестве инструмента разработки на платформе Windows, можно использовать IDE (например: Aptana, NetBeans, RubyMine), но я предпочел Notepad++. Самый простой вариант (без инсталляции приложения), можно просто скачать Notepad++ zip package, и распаковать (например, на рабочий стол). Далее необходимо добавить в настройках приложения (меню: Settins / Preferences..) поддержку языка Ruby (см. Preferences_Language_Menu.PNG). В данном случае, будет работать только подсветка языка Ruby, поддержка IntelliSense возможна только в области переменных.

Каталог загрузки плагинов

Корневой каталог загрузки плагинов по умолчанию, является Plugins (полный путь: «C:UsersUser_NameAppDataRoamingSketchUpSketchUp 2015SketchUpPlugins»). Как правило, плагин состоит из загрузочного файла, расположенного в корневом каталоге, и подкаталог с исполняемыми файлами и ресурсами. Пример hello cube , демонстрирует, как можно создать простейший плагин в обычном текстовом редакторе. Для удобства, вы можете создать отдельный каталог Plugins, где будут располагаться предварительные версии плагинов, например:

SketchUp

— Plugins

— Plugin_1

— test

— test.rb

— Plugin_2

— Plugin_n

В данном случае, каталог Plugin_1 представляет собой директорию проекта, на тот случай если появится необходимость перехода на IDE. Далее, добавим путь в настройках Notepad++ на каталог Plugins по умолчанию (см. Preferences_Default_Directory.PNG). 

Создание загрузочного файла

Запустите приложение Notepad++. Далее, сохраните файл (см. npp_SaveAs.PNG) под именем (test.rb), и добавьте следующий код:

# Source manifest

require 'sketchup.rb'
require 'extensions.rb'

module Sketchup    
  module Extensions      
    module Test        
      # Plugin information        
      PLUGIN_ID       = 'Test'.freeze        
      PLUGIN_NAME     = 'Test'.freeze        
      PLUGIN_VERSION  = '1.0.0'.freeze  

      # Resource paths        
      FILENAMESPACE = File.basename(__FILE__, '.*')        
      PATH_ROOT     = File.dirname(__FILE__).freeze        
      PATH          = File.join(PATH_ROOT, FILENAMESPACE).freeze        
      PATH_ICONS    = File.join(PATH, 'icons').freeze  

      # Extension loader        
      unless file_loaded?(__FILE__)          
        loader = File.join( PATH, 'loader.rb' )          
        ex = SketchupExtension.new(PLUGIN_NAME, loader)          
        ex.description = 'Test plugin Hello World!'          
        ex.version     = PLUGIN_VERSION          
        ex.copyright   = 'Copyright © 2015'          
        ex.creator     = 'SketchUp'          
        Sketchup.register_extension(ex, true)        
      end      
    end    
  end  
end

Сохраните файл. Данный файл, будет загружен на момент запуска SketchUp в первую очередь. Далее, метод file_loaded?(__FILE__) передаст управление файлу ресурсов (loader.rb), который расположен в каталоге ресурсов «test». Важно, что бы загрузочный файл и каталог ресурсов имел одинаковое наименование.

Создание файла ресурсов

Создайте новый файл (см. npp_SaveAs2.PNG) и сохраните под именем (loader.rb) в предварительно созданный каталог «test», и добавьте следующий код:

# Loader Extension
# Add Menu

plugins_menu = UI.menu('Plugins')
item = plugins_menu.add_item('Test') { UI.messagebox('Hello World!') }

Сохраните файл. 

Запуск плагина

Копируйте содержимое директории «Plugin_1» в каталог загрузки плагинов. Запустите приложение SketchUp, и выполните плагин «test» (меню: «Extensions / test», см. su_test_run.PNG)

Дополнительные ресурсы

Основной справочник — SketchUp API.

Репозиторий разработчиков SketchUp (https://github.com/SketchUp) 

Preferences_Language_Menu.PNG

Preferences_Default_Directory.PNG

npp_SaveAs.PNG

npp_SaveAs2.PNG

su_test_run.PNG

  • Download source (RAR) — 390.3 KB

Introduction

Today, most of us use Notepad++ (based on Scintilla) as our general purpose editor. Notepad++ provides a way to inject your own plugins. Just create your plugin and put its DLL file to the right location and you are done. Here is an example of writing plugin(s) for Notepad++ using your favorite language C#.

Background

The example plugin is a simple email plugin, that will allow the user to email current file’s contents as email attachment. It allows the user to set mail server configuration and send emails using GUI injected by the plugin.

Email settings are stored in a text (.INI) file but password(s) are stored in encrypted format to provide a security layer for your credentials.

Using the Code

The source code is organized in a directory structure that is self-explanatory. Below is a short description of how directory structure organizes the code.

  • Core/Npp — Contains classes to send commands to Notepad++
  • Core/Scintilla — Contains classes that wraps scintilla types
  • Core/Platform — Contains class(es) for DLL Imports
  • DllExports — Contains class(es) for exported functions called by Notepad++ plugin system
  • Forms — Contains Windows forms for GUI

The PluginUI class contains the functions required for UI Registration with Notepad++. PluginExports class is responsible to export the functions called by Notepad++. Please go through the below link to understand how Notepad++ plugin system works.

  • http://notepad-plus-plus.org/contribute/plugin-howto.html
  • http://docs.notepad-plus-plus.org/index.php?title=Plugin_Development

To deploy the plugin, compile the project and copy the DLL file to {Notepad++ Installation Folder}}plugins folder or you can use Notepad menu Settings>>Import>>Import plugins for the same. Once the plugin is deployed, start Notepad++ and you will see the your plugin icon(s) on Notepad++ toolbar. You can also find your plugin under Plugins menu.

Below are screenshots of installed plugin:

Image 1

Image 2

Image 3

History

  • 27th January, 2016: First version

I love working on new technologies. Mostly I work on Microsoft technologies and Micro-controller programming.

  • Download source (RAR) — 390.3 KB

Introduction

Today, most of us use Notepad++ (based on Scintilla) as our general purpose editor. Notepad++ provides a way to inject your own plugins. Just create your plugin and put its DLL file to the right location and you are done. Here is an example of writing plugin(s) for Notepad++ using your favorite language C#.

Background

The example plugin is a simple email plugin, that will allow the user to email current file’s contents as email attachment. It allows the user to set mail server configuration and send emails using GUI injected by the plugin.

Email settings are stored in a text (.INI) file but password(s) are stored in encrypted format to provide a security layer for your credentials.

Using the Code

The source code is organized in a directory structure that is self-explanatory. Below is a short description of how directory structure organizes the code.

  • Core/Npp — Contains classes to send commands to Notepad++
  • Core/Scintilla — Contains classes that wraps scintilla types
  • Core/Platform — Contains class(es) for DLL Imports
  • DllExports — Contains class(es) for exported functions called by Notepad++ plugin system
  • Forms — Contains Windows forms for GUI

The PluginUI class contains the functions required for UI Registration with Notepad++. PluginExports class is responsible to export the functions called by Notepad++. Please go through the below link to understand how Notepad++ plugin system works.

  • http://notepad-plus-plus.org/contribute/plugin-howto.html
  • http://docs.notepad-plus-plus.org/index.php?title=Plugin_Development

To deploy the plugin, compile the project and copy the DLL file to {Notepad++ Installation Folder}}plugins folder or you can use Notepad menu Settings>>Import>>Import plugins for the same. Once the plugin is deployed, start Notepad++ and you will see the your plugin icon(s) on Notepad++ toolbar. You can also find your plugin under Plugins menu.

Below are screenshots of installed plugin:

Image 1

Image 2

Image 3

History

  • 27th January, 2016: First version

I love working on new technologies. Mostly I work on Microsoft technologies and Micro-controller programming.

Одним из самых популярных текстовых редакторов является Notepad++. Софт бесплатный, есть русская локализация. Даже встроенных из коробки возможностей достаточно, чтобы сделать его текстовым редактором по умолчанию и внедрить как просмотрщик в файловые менеджеры. Текстовый редактор разработан под windows платформу, на mac и linux можно найти только аналоги. Скачать последнюю версию notepad++ можно по ссылке.

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

В обзоре я расскажу о наиболее полезных для меня плагинах.

Общие плагины notepad++.

Plugin Manager

Позволяет загружать новые плагины и обновлять уже установленные. Идет в базовой поставке редактора. Рекомендуется использовать его для работы.

Compare

Как ясно из названия, позволяет сравнить содержимое двух файлов. Полезно, если нет времени или желания просматривать изменения в git или svn.

Плагин compare

NppAutoIndient

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

NppAutoIndient

TextFX

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

  1. TextFX Characters.

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

  • Convert quotes to » (+)
 "require" long " float 'string' -> "require" long " float "string"
  • Convert quotes to ‘ (+)
int "require" long " float 'string' -> int 'require' long ' float "string"
  • Swap quotes (» -> ‘) (+)
int "require" long " float 'string' -> int 'require' long ' float "string"
  • Drop quotes » & ‘ (+)
int "require" long " float 'string' -> int require long float string
  • Escape » to » (+)
int "require" long " float 'string' ->  int "require" long " float 'string'
  • Escape ‘ to ’ (+)
int "require" long " float 'string' ->  int "require" long " float 'string'
  • Escape ‘ to » (+)
int "require" long " float 'string' -> int "require" long " float "string"
  • Escape both «&’ to »&’ (+)
int "require" long " float 'string' -> int "require" long " float 'string'
  • unEscape » to » (+)
 int "require" long " float 'string' -> int "require" long " float 'string'
  • unEscape ’ to ‘ (+)
int "require" long " float 'string' -> int "require" long " float 'string'
  • unEscape » to ‘ (+)
 int "require" long " float 'string' -> int 'require' long ' float 'string'
  • unEscape both »&’ to «&’ (+)
int "require" long " float 'string' -> int "require" long " float 'string'
  • Escape » to «» (+)
int "require" long " float 'string' -> int ""require"" long "" float 'string'
  • Escape ‘ to «» (+)
int "require" long " float 'string' ->  int "require" long " float ""string""
  • unEscape «» to » (+)
 int "require" long " float ""string"" -> int "require" long " float "string"
  • unEscape «» to ‘ (+)
 int "require" long " float ""string"" ->  int "require" long " float 'string'

Все эти функции достаточно легко, да и более полезно для общей практики выполнять командами замены (Ctrl+h)

Работа со строками:

  • UPPER CASE (+)

Пример текст. текст второй -> ПРИМЕР ТЕКСТ. ТЕКСТ ВТОРОЙ 

  • lower case (+)

Пример текст. текст второй -> пример текст. текст второй 

  • Proper Case (+)

Пример текст. текст второй -> Пример Текст. Текст Второй

  • Sentence case (!+)

Пример текст. текст второй -> Пример текст. Текст второй 

  • iNVERT cASE (+)

Пример текст. текст второй -> пРИМЕР ТЕКСТ. ТЕКСТ ВТОРОЙ 

  • Zap all characters to space (?)

Пример текст. текст второй -> 48 пробелов 

  • Zap all non printable characters to # (-)

Пример текст. This is Sparta *-()+= k hh/?- -> ############ ##########. This is Sparta *-()+= k hh/?- 

Все функции, кроме последней, полезные. Последняя, к несчастью, не работает с кириллицей.

  1. TextFX Quick. Поисковые функции

  • Mark Word or Find Reverse

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе пример кат

->

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе
пример кат

  • Mark Word or Find Forward

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе пример кат

->

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе
 пример кат

  • +Mark Word or Find Case Sensitive

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе пример кат
 Пример.

->

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе пример кат Пример
.

  • +Mark Word or Find Whole Words

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе пример кат
 Пример.

->

Пример текста Пример пример вот так
Шоколад Печенье ходит само по себе 
пример кат Пример.

  • Find matching {([])}

Поставьте курсор к какой-нибудь скобке (или выделите её) из набора: {([])}. Функция найдет соответствующую скобку и перейдет к ней. Аналог действия клавиш Ctrl + B.

  • Mark to matching {([])}

Поставьте курсор к какой-нибудь скобке (или выделите её) из набора: {([])}. Функция выделит текст между скобками, включая их.

  • Delete Marked {([])} Pair

Поставьте курсор к какой-нибудь скобке (или выделите её) из набора: {([])}. Функция удалит пару соответствующих скобок.

  • Mark lines to matching {([])}

Поставьте курсор к какой-нибудь скобке (или выделите её) из набора: {([])}. Функция выделит строки, в которых есть текст, заключенный между скобками, включая сами скобки. Функция Mark to matching {([])} выделяет текст между скобками, а эта функция именно строки.

  • Find/Replace

Абсолютно бесполезная функция поиска/замены. Проще/лучше/полезнее использовать встроенные инструменты.

  • Duplicate Line or Block

Аналогично бесполезная функция. Легко заменяется Ctrl+D или Ctrl+C и Ctrl+V

  1. TextFX Edit

  • Fill Down Insert

Fill Down Insert

С помощью клавиши Alt выделите вертикально текст.

  • Fill Down Overwrite

Fill Down Overwrite

  • Insert (Clipboard) through lines

Insert (Clipboard) through lines

  • Reindent C++ code

Функция форматирует отступы в коде C++. То есть расставляет знаки табуляции в блоках, находящихся в фигурных скобках. Возможно и иные места обрабатывает.

  • Leading space to tabs or tabs to spaces

Заменяет пробелы на табы.

  • Leading space to tabs or tabs to spaces

Меняет пробелы на табы, а табы на пробелы.

  • Leading space to tabs or tabs to spaces width=8

Не понял, чем отличается эта функция от вышеописанной.

  • Trim Trailing Spaces

Trim Trailing Spaces

  • Indent text sticky left margin

Бесполезный пункт. Для получения нужного результата достаточно выделить несколько строк и нажать tab.

  • Indent & surround { text lines }

Обрамляет текст в фигурные скобки, а текст сдвигает табуляцией.

Indent & surround { text lines }

  • Delete Blank Lines

Удаляет пустые строки. Если в строке есть табуляция или пробелы, то пустой строкой не является.

  • Delete Surplus Blank Lines

Бесполезная функция замены пустых строк, эффективнее и проще воспользоваться стандартной заменой.

  • Strip unquoted text (C) separate by (Clipboard<=20)

Strip unquoted text (C) separate by (Clipboard<=20)

  • Strip unquoted text (VB) separate by (Clipboard<=20)

Strip unquoted text (C) separate by (Clipboard<=20)

  • Kill unquoted (C) whitespace

Удаляет множественные пробелы, заменяя их одним пробелом. Очень полезная функция.

  • Kill unquoted (VB) whitespace

Та же самая функция, только в синтаксисе VB.

  • Split lines at (clipboard character) or, (C)

• Split lines at (clipboard character) or, (C)

  • Split lines at (clipboard character) or, (VB)

Та же самая функция, только в синтаксисе VB.

  • Line up multiple lines by (,)

Форматирует строки по вертикали по запятым.

Line up multiple lines by (,)

  • Line up multiple lines by (=)

То же самое, только по знаку равенства. Полезная функция.

  • Line up multiple lines by (Clipboard character)

То же самое, только по знаку из буфера обмена. По сути универсальный вариант предыдущих функций.

  • Unwrap Text

Unwrap Text

  • ReWrap Text (Clipboard or 72) width

Разбивает текст по разделителю или по 72 символа (максимум). Странная функция, непонятно, чем может пригодиться.

  • Pad rectangular selection with spaces

Вообще не понял, как этим пользоваться, и чем оно могло бы быть полезно.

  1. TextFX Convert

  • Encode URI Component

Аналог php-функции urlencode. Полезная и удобная функция.

  • Encode HTML (&<>»)

Аналог php-функции htmlentities. Полезная и удобная функция.

  • Strip HTML tags table tabs

Аналог php-функции strip_tags. Полезная и удобная функция.

  • Strip HTML tags table nontabs

Аналогично предыдущей функции, только при этом таблицы делает таблицами с разделителем в виде пробелов.

  • Submit to W3C HTML Validator

Пункт не работает.

  • Submit to W3C CSS Validator

Пункт не работает.

  • Convert text to code command («text=»value»»);

Полезный пункт. Превращает какой-нибудь текст в строку под тот или иной язык. Данная функция требует выбора синтаксиса языка в документе.

Convert text to code command

  • Convert Decimal Number to Binary

Конвертирует десятичное число в двоичное.

121 -> $1111001

  • Convert Decimal Number to Octal

Конвертирует десятичное число в восьмеричное.

121 -> 0171

  • Convert Decimal

Конвертирует десятичное число в шестнадцатеричное.

121 -> 0x79

  • Convert Hex Number to Decimal

Конвертирует шестнадцатеричное число в десятичное.

0x79 -> 121

  • Convert Octal Number to Decimal

Конвертирует восьмеричное число в десятичное.

0171 -> 121

  • Convert Binary Number to Decimal

Конвертирует двоичное число в десятичное.

1111001 -> 121

  • Convert C-style Number to Decimal

Конвертирует число в форме C стиля в десятичное. Слабо понял, как может помочь эта функция.

  • Convert text to Hex-16

Переводит текст в Hex формат по 16 символов в строке.

Convert text to Hex-16

  • Convert text to Hex-32

Аналогично предыдущей функции переводит текст в Hex формат, но уже по 32 символа в строке.

  • Convert text to Hex-64

Аналогично предыдущей функции переводит текст в Hex формат, но уже по 64 символа в строке.

  • Convert text to Hex-128

Аналогично предыдущей функции переводит текст в Hex формат, но уже по 128 символов в строке.

  • Convert hex byte runs into LE-WORDS

Переводит текст из Hex формата в Little Endian WORD (порядок байтов от младшего к старшему). Это мало полезно в веб-разработке.

  • Convert hex byte runs into LE-DWORDS

Переводит текст из Hex формата в Little Endian DWORD (порядок байтов от младшего к старшему). Это мало полезно в веб-разработке.

  • Convert LE-words to hex byte runs

Переводит текст из Little Endian DWORDS формата в Hex.

  • Convert LE-words to hex byte runs

Переводит текст из Little Endian DWORDS формата в Hex.

  • Convert Hex to text

Переводит текст из Hex формата в обычный текст.

  • ROT13 Text

Кодирует и раскодирует латинский текст по шифру ROT13.

zl anzr vf -> my name is

  • Convert EBCDIC to ASCII

Функция конвертирует EBCDIC текст в текст в кодировке ASCII.

  • Convert ASCII to EBCDIC

Обратная предыдущей функция.

  • Convert KOI8_R to CP1251

Конвертирует текст из кодировки KOI8_R в CP1251.

  • Convert CP1251 to KOI8_R

Конвертирует текст из кодировки CP1251 в KOI8_R.

  1. TextFX Insert

  • Current Full Path

Функция не работает. Если нужен адрес файла, надо нажать на вкладку с файлом правой кнопкой и выбрать пункт «Полный путь к файлу в буфер» и ctrl+v.

  • Current File Name

Функция не работает. Если нужен адрес файла, надо нажать на вкладку с файлом правой кнопкой и выбрать пункт «Имя файла в буфер» и ctrl+v.

  • Current Directory

Функция не работает. Если нужен адрес файла, надо нажать на вкладку с файлом правой кнопкой и выбрать пункт «Путь к директории файла в буфер» и ctrl+v.

  • Date & Time — short format

Вставляет дату и время в коротком формате. Удобная функция.

  • Date & Time — long format

Вставляет дату и время в полном формате, но работает нормально только для документов в кодировке UTF-8.

  1. TextFX HTML Tidy

Пункт не работает.

  1. TextFX Tools

  • Sort lines case sensitive (at column)

Сортировка строк с учетом регистра.

Sort lines case insensitive

  • Sort lines case insensitive (at column)

Сортировка строк без учета регистра. Работает корректно только для латиницы. Для кириллицы сортировка будет производиться, но с учетом регистра.

  • +Sort ascending

При включенной галочке сортировка в предыдущий двух функциях будет вестись по возрастанию. Без ее включения сортировка будет вестись по убыванию.

  • +Sort outputs only UNIQUE (at column) lines

При включенной галочке при сортировке будут удалены копии строк.

  • Insert Ascii Chart or Character

Если выделить любой символ, функция покажет его ASCII код и другие характеристики. Если не выделять – вставится вся ASCII таблица.

  • Insert Ruler

Вставляет линейку. Как это использовать на практике – не представляю.

  • Insert Line Numbers

Вставляет номера строк для выделенных строк.

  • Delete Line Numbers or First Word

Удаляет первое слово в выделенных строках. Полезная функция.

  • Clean eMail > Quoting

Очищает текст e-mail письма от знаков цитирования >.

  • UUdecode

Декодирует текст в виде UUE.

#0V%T -> Cat

  • Base64 Decode

Декодирует текст в виде Base64.

dGVzdA== -> test

  • Word Count

Показывает число слов в тексте и другие характеристики.

  • Add up numbers

Суммирует выделенные цифры.

  • Empty Undo Buffer (be sure to save)

Очищает буфер изменений.

  1. TextFX Viz

Функционал предназначен для работы со скрытыми строками. Можно выделить несколько строк и нажать alt+h. Глобально, не думаю, что есть реальные сценарии работы, при которых все нижеописанные функции могут быть полезны.

  • Show Between-Selected or All-Reset Lines

Разворачивает в выделенном фрагменте все свернутые строки. Если ничего не выделено, то развернет все строки.

  • Hide Between-Selected or All-Reset Lines

Функция работает плохо и глючно. Не рекомендую использовать.

  • Invert Visibility Between-Selected or All-Reset Lines

Показывает скрытые строки в выделенном фрагменте.

  • Hide Lines with (Clipboard) text

Функция работает плохо и глючно. Не рекомендую использовать.

  • Hide Lines without (Clipboard) text

Функция работает плохо и глючно. Не рекомендую использовать.

  • Show Lines with (Clipboard) text

Функция показывает те строки, в которых есть текст в буфере обмена.

  • Show Lines without (Clipboard) text

Функция показывает те строки, в которых нет текста из буфера обмена.

  • Show More Lines around my position

Функция работает плохо и глючно. Не рекомендую использовать.

  • Hide/Show sequence all steps

Функция работает плохо и глючно. Не рекомендую использовать.

  • Hide/Show sequence singlestep start

Функция работает плохо и глючно. Не рекомендую использовать.

  • Hide/Show sequence singlestep next

Функция работает плохо и глючно. Не рекомендую использовать.

  • Hide/Show sequence singlestep rest

Функция работает плохо и глючно. Не рекомендую использовать.

  • Select at Hide/Show sequence

Функция работает плохо и глючно. Не рекомендую использовать.

  • Insert Show/Hide Sequence

Функция работает плохо и глючно. Не рекомендую использовать.

  • Copy Visible Selection

Копирует только видимый текст, но без переносов строк.

  • Cut Visible Selection

Вырезает только видимый текст, но без переносов строк.

  • Delete Visible Selection

Удаляет только видимый текст.

  • Copy Invisible Selection

Копирует только невидимый текст, но без переносов строк.

  • Cut Invisible Selection

Вырезает только невидимый текст, но без переносов строк.

  • Delete Invisible Selection

Удаляет только невидимый текст.

  • Copy Entire Selection (no append)

Копирует текст (и видимый и невидимый), но без переноса строк.

  • Cut Entire Selection (no append)

Вырезает текст (и видимый и невидимый), но без переноса строк.

  • Copy & Append Entire Selection

Копирует текст (и видимый и невидимый), но без переноса строк. Добавляет все к буферу обмена.

  • Cut & Append Entire Selection

Вырезает текст (и видимый и невидимый), но без переноса строк. Добавляет все к буферу обмена.

  • Paste as UTF-8/ANSI

Вставляет текст, преобразуя попутно кодировку.

  • Paste

Вставляет текст. Походу просто вставляет текст.

  1. TextFX Viz Settings

Настройки TextFX Viz.

  • +Viz Text Search Case Sensitive

Включить регистр зависимый вариант поиска в вышеописанных функциях.

  • +Viz Text Search Whole Words

Включить поиск по полным словам.

  • +Viz Text Search Regex

Включает поиск по регулярным выражениям.

  • +Viz Copy-Cut Appends to clipboard

При включенной этой галочке все функции раздела TexFX Viz при копировании, вырезании элемента в буфер обмена будут копировать текст, не удаляя его, а добавляя его к тому, что уже было в буфере. Как в функции Cut & Append Entire Selection.

  • +Viz Copy-Cut always converts to CRLF

Конвертирует строки в CRLF при копировании и вырезании.

  • +Viz Copy-Cut replace [NUL] with space

При копировании в функциях TextFX Viz заменяет [NULL] на пробел.

  • +Viz Copy-Cut also in UTF-8

Копирование и вставка происходит только в формате UTF-8.

  • +Viz Paste retains position

Возвращает курсор при вставке обратно в то место, где был курсор до вставки.

  • +Viz Paste/Append binary

Добавляет в буфер данные в бинарном формате.

  • +Viz Paste converts EOL to editor

При включенной галочке должна конвертировать символ EOL.

  • +Viz Capture Keyboard Ctrl-C,X,V

При включенной галочке должна перехватывать клавиши Ctrl-C,X,V и навязывать свои функции. Крайне не рекомендую использовать.

  1. TextFX Settings

Общие настройки плагина TextFX

  • +Cancel Overwrite Mode moving from current line

При нажатии на кнопку Insert включается режим Overwrite. Это значит, что если нажать на клавишу, то вводимый текст будет заменять текущий. Если эта стандартная функция бесит – можно включить эту опцию, и режим работы будет стандартным.

  • +Autoclose XHTML/XML

Закрывает html теги. Если ввести <p и > <p></p>. Аналогичная настройка есть и в редакторе. Использовать обе настройки сразу нельзя!

  • +Autoclose {([Brace

Включает автозакрытие скобок. Аналогичная настройка есть и в редакторе. Использовать обе настройки сразу нельзя!

  • +Autoconvert typed leading spaces to tabs

Включает автоматическое превращение пробелов в знаки табуляции в начале строк, когда их число равно 4. Очень полезная функция.

  • +Autoconvert typed HTML/XML to &entities;

Довольно странный функционал. При включенной опции нажатие кнопки Enter приводит к появлению <br/>.

  • +Disable Subclassing & advanced features

Я не подключил Tidy и настройка по сути не работает.

  • +Move quick menus out of ‘Plugins’ menu

Выносит в меню настройки TextFX.

  • +Move quick menus out of ‘Plugins’ menu

Ctrl+D дублирует строку, на которую установлен курсор. Если выделена подстрока, дублирует подстроку.

C#, Разработка под Windows, Java, Perl


Рекомендация: подборка платных и бесплатных курсов 3D max — https://katalog-kursov.ru/

Компиляция программ при помощи текстового редактора на примере Notepad++

Цель: Научиться компилировать программы из командной строки. Научиться компилировать из текстового редактора Notepad++ (вернее научиться писать скрипты и связывать их), создавать скрипты и макросы, устанавливать системные переменные.

Сам текстовый редактор ничего не компилирует и не запускает. Также как и IDE не компилирует. Компиляция происходит с помощью компилятора. Выполнение производится некоторой средой выполнения. Это может быть интерпретатор команд или среда выполнения.
При компиляции программы на C# упаковываются в сборки. Код на языке IL автоматически преобразуется в код для конкретного процессора. Что относится к java, то скомпилированные файлы .class выполняется виртуальной машиной Java. Файлы .java компилируются в бай-код, то есть некоторый промежуточный код. Компиляция в exe файл тоже производится компилятором.

.EXE (сокр. англ. executable — исполнимый) — расширение исполняемых файлов, применяемое в операционных системах DOS, Windows, Symbian OS, OS/2 и в некоторых других, соответствующее ряду форматов. Процесс получения exe файла состоит из следующих этапов: препроцессинг, ассемблирование, компилирование, линковка.

ОUT файлы — исполняемые файлы для UNIX-подобных операционных систем.
Файл может хранить исполняемый код, общую динамическую библиотеку или объектный код.

Терминология

Cmd.exe — интерпретатор командной строки (англ. command line interpreter) для операционных систем OS/2, Windows CE и для семейства операционных систем, базирующихся на Windows NT (англ. Windows NT-based). cmd.exe является аналогом COMMAND.COM

Те?кстовый проце?ссор — компьютерная программа, используемая для написания и модификации документов, компоновки макета текста и предварительного просмотра документов в том виде, в котором они будут напечатаны (свойство, известное как WYSIWYG).

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

Скрипт (сценарий) — это отдельные последовательности действий, созданные для автоматического выполнения задачи.

Интерфе?йс по?льзователя, он же по?льзовательский интерфейс (UI — англ. user interface) — интерфейс, обеспечивающий передачу информации между пользователем-человеком и программно-аппаратными компонентами компьютерной системы (ISO/IEC/IEEE 24765-2010).

GUI означает graphical user interface, графический интерфейс пользователя.
GUI состоит из одного или нескольких окон и каждое окно содержит один или несколько элементов управления.

SDK (от англ. software development kit) — набор средств разработки, который позволяет специалистам по программному обеспечению создавать приложения для определённого пакета программ, программного обеспечения базовых средств разработки, аппаратной платформы, компьютерной системы, игровых консолей, операционных систем и прочих платформ.

IDE (Integrated Development Environment) — интегрированная среда разработки программного обеспечения.

Переменная среды? (англ. environment variable) — текстовая переменная операционной системы, хранящая какую-либо информацию — например, данные о настройках системы.

Переменные среды? Windows делятся на две категории:
Переменные среды? пользователя — указывают путь до пользовательских каталогов.
Системные переменные — хранят данные о некоторых каталогах операционной системы и конфигурации компьютера.

Предпосылки

Для сборки проектов, в настоящее время часто используется командная строка.

Как это упрощает сборку? Дело в том, что вы можете создать командный файл с параметрами компилятора, с параметрами логирования, с параметрами получения ошибок и многими другими параметрами, которые будут автоматизировать вашу сборку. Плюсы такого подхода очевидны:
у вас не тратится время на загрузку тяжелой IDE, вы можете автоматизировать многие детали вашей сборки. Из командной строки могут быть доступны аргументы программы, которые недоступны из GUI. У GUI обычно меньше возможностей, потому как не все команды и аргументы будут предоставлены пользователю. Вы можете записать ваш скрипт(набор команд, логику и переменные) в отдельный файл и запускать при надобности.
К тому же такой подход даст вам более глубокое изучение и понимание того, что происходит во время выполнения. Вы сможете рассмотреть каждый шаг отдельно. Другой аспект, использование блокнота для компиляции, предоставляет вам возможность отлаживать и запускать небольшие куски кода без использования вашей тяжелой IDE. У вас в нужный момент может не оказаться установленной IDE и отсутсвовать подключение к интернет. В принципе вы можете использовать другой текстовый редактор, не Notepad++. Основная идея остается та же. В этой статье я опишу использование cmd Windows 10, Notepad++ и плагина NppExec. В предыдущих версиях Windows это тоже работает. Могут быть незначительные отличия. В данном вопросе вы можете разобраться самостоятельно.

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

Скачать программы вы можете с официальных сайтов:
Notepad++: notepad-plus-plus.org
Исходники релизов программы: github.com/notepad-plus-plus/notepad-plus-plus/releases
Автор программы: Don HO, Senior Software Engineer
Биография Резюме автора: donho.github.io

Автор плагина: Vitaliy Dovgan
Помощь: Don HO, Jens Lorenz, Juha Nieminen,Joel Yulilouma

Новую версию NppExec вы можете скачать с сайта.

Новые версии Notepad++ поддерживают установку плагинов из репозиториев. Вам достаточно нажать в меню плагины/управление плагинами, в строке поиск набрать NppExec, отметить галочку и нажать кнопку установить. Если же вы пользуетесь более ранней версией npp, то вам следует скачать плагин и распаковать в папку plugins. Обычно она находится по пути …Notepad++plugins.

Версии NppExec: Unicode и ANSI
Разработчик рекомендует использовать Unicode версию.

Узнать версию NppExec: ПлагиныNppExecHelp/About

Вначале рассмотрим компиляцию из командной строки.

Программа cmd в Windows находится по следующему пути:

%windir%system32cmd.exe

Выполнить программу можно нажав поиск cmd и нажав на приложение «командная строка» либо из меню «выполнить», набрав cmd.

Настройки консоли cmd

В левом верхнем углу нажмите на значке консоли и выберите «свойства» для изменения текущих свойств. Вы можете поменять ряд свойств консоли: цвет, шрифт, расположение.

Для изменения свойств по умолчанию выберите «значения по умолчанию».

Вы можете назначить горячие клавиши для вызова командной строки.

Для этого наберите в поиске cmd, щелкните на «Командная строка» правой кнопкой и выберите «перейти к расположению файла. Затем, правой кнопкой на расположении и свойства. Установите курсор в поле «Быстрый вызов» и нажмите на клавиатуре сочетание клавиш, например: Ctrl+Alt+T. Такое сочетание клавиш соответствует вызову терминала Linux Ubuntu и вам не нужно будет заучивать новое. Если хотите, можете задать свое сочетание клавиш. cmd будет вызываться от имени пользователя. Чтобы запустить cmd от имени администратора, нужно набрать cmd в поиске, щелкнуть на нем правой кнопкой мышки и выбрать «Запуск от имени администратора».

cmd.exe — файл, это часть системы, командный интерпретатор системы Windows.

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

Ключи запуска cmd.exe:

/c исполняет команду, заданную строкой, и завершает работу приложения;
/k исполняет команду, заданную строкой, и продолжает работу приложения;
/a — устанавливает вывод в стандарте ANSI;
/u — устанавливает вывод в Юникоде;
/? — вывод справки в командной строке;
Для компиляции из командной строки, вам нужно знать минимальных набор команд.

Для более глубокого изучения вам, скорее всего, понадобятся такие понятия как:
Processes, Threads, Streams, Fibers, семафоры, мьютексы и так далее. Всё то, что связанно с многопоточностью и многозадачностью.

В этой небольшой статье, пока что, таких глубоких знаний не требуется.

Немного о переменных

Вы можете использовать переменные, которые относятся к переменным среды пользователя, к переменным cmd, к переменным программы Notepad++, к переменным плагина NppExec.
Aliases — в общем случае это псевдонимы переменных. Они могут быть использованы для задания короткого имени переменной в определенной области видимости.

В нашем контексте слово «команда» означает команда или программа. Получить список команд вы можете набрав в командной строке «help» без кавычек. Отобразится список команд с их описанием. Получить помощь по определенной команде, вы можете набрав «help имя_команды».

Компиляция программ java из командной строки

Для компиляции программ java, у вас на компьютере должна быть установлена jdk.
«Java Development Kit (сокращенно JDK) — бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac)». JDK включает стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE). В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки. Скачать её вы можете с сайта Oracle, либо выбрать OpenJDK. Существуют комплекты разработки приложений на Java других производителей, доступные для ряда платформ. Ссылка для скачивания jdk: jdk.java.net/archive

Вот несколько существующих на сегодняшний день jdk: Oracle JDK, OpenJDK by Oracle, AdoptOpenJDK, Red Hat OpenJDK, Azul Zulu, Amazon Corretto. Скачиваете и устанавливаете, в документации об установке всё подробно расписано. Если же вы уже используете IDE — интегрированную среду разработки с уже установленной JDK, то вам остается только найти её на вашем диске. Среды разработки либо включают в комплект поставки одну из версий JDK, либо требуют для своей работы предварительной инсталляции JDK на машине разработчика. Для компиляции и выполнения, вам потребуются файлы: javac.exe — для компиляции и java.exe — для выполнения программы. Заметьте jdk должна быть установлена, потому как при компиляции и выполнении используются ряд файлов ресурсов, таких как библиотеки классов, отладчик и другие ресурсы.

Компиляция из командной строки в упрощенном виде выглядит так:

javac HelloWorld.java

. Почему в упрощенном? Потому как мы не задаем полный путь к компилятору, полный путь к файлу, не указываем другие параметры, такие как имя выходного файла и другие.

Если вы просто выполните такую команду, предварительно ничего не настроив, то скорее всего вы получите ошибку: «javac не является внутренней или внешней командой, исполняемой программой или пакетным файлом». То есть ваша система «не знает» где находится javac и нам нужно явно указать где находится компилятор.

Об установке java читайте в официальной документации.

Где установлена java, вы можете узнать набрав команду в консоли:

where java

Пишем новую строчку:

c:путь_к_файлу_javacjavac  HelloWorld.java
с:папка_на_диске_перваяпапка_на_диске_вторая...javac  HelloWorld.java

Здесь папка_на_диске_первая, папка_на_диске_вторая — это название ваших папок на диске.
То есть это полный путь до файла javac.

Скорее всего вы получите следующую ошибку:

javac: file not found: hello.java
Usage: javac <options> <source files>
use -help for a list of possible options

В этом случае javac сообщает нам, что нет такого файла hello.java и предлагает ознакомиться с опциями компилятора.

Мы можем решить эту проблему двумя путями. Перейти в каталог в терминале.

cd полный_путь_к_нашему_java_файлу

Либо указать полный путь при компиляции.

с:папка_на_диске_перваяпапка_на_диске_вторая...javac  с:путьHelloWorld.java

Здесь следует сделать уточнение, в данном случае я рассматриваю путь в системах Windows.
В других системах пути прописываются по другому. Более подробно смотрите документацию.

В случае успешной компиляции у вас в каталоге появится файл HelloWorld.class

Выполнить этот файл мы можем командой:

с:папка_на_диске_перваяпапка_на_диске_вторая...java -classpath . HelloWorld

В данном случае точка означает текущий пакет, текущий каталог.

В случае не указания -classpath, возможен вывод ошибки:

«Error: Could not find or load main class имя»

Если вы указываете в классе пакет, то вам при запуске скомпилированного файла нужно указать путь к пакету.

Мы с вами немного разобрались, как компилировать и запускать java программы из командной строки. Теперь нам нужно сделать тоже самое в Notepad++ при помощи плагина NppExec. Скачиваем и устанавливаем плагин, если он у нас еще не установлен и устанавливаем.

После правильной установки, плагин NppExec появится в меню «Плагины».

NppExec имеет свою собственную консоль наподобие CMD.
По умолчанию приглашение на ввод команд не отображается. Для показаскрытия консоли выберите: ПлагиныNppExecShow console.
Для получения справки наберите в консоли help и нажмите Enter. Для получения более подробной информации об NppExec наберите в консоли: help npp_exec.

Из help:

Так что, вообще говоря, NppExec — это инструмент. Этот инструмент делает именно то, что вы говорите, без каких-либо предположений, без неявного вызова чего-либо и так далее.

Это может быть критичто при разработке, когда «родная», «умная» консоль о чем-то «догадывается», к примеру в какой системе она запущена и может подставлять свои «умные» значения.

Do _not_ use NPP_EXEC to start a batch file or an executable file in NppExec!

Не используйте команду npp_exec для старта exe файла или bat файла.
Цель NPP_EXEC — выполнить собственный скрипт.
Для старта стороннего приложения напечатайте:
application.exe // в этом случае exe файл с именем application.exe
batchfile.bat // в этом случае batch с именем«batchfile.bat»

Нам остается только создать настройки для компиляции и выполнения. Мы сделаем эти настройки отдельно. Создадим настройки «для компиляции» и создадим настройки «для компиляции и выполнения».

Настройка системных переменных

Для того чтобы не вводить каждый раз полный путь к программе, будь то компилятор,
компоновщик, система сборки и т.д., вы можете установить системные переменные.
Как задаются системные переменные? Вы можете задать их в графическом интерфейсе, из cmd, используя Power Shell, используя regedit.

Как задать системные переменные используя графический интерфейс

Свойства компьютераДополнительноПеременные средыПеременные среды пользователя для «имя пользователя». Здесь вы можете создать, либо отредактировать имеющуюся переменную среды.

Как задать переменную среды используя командную строку

Для задания переменных окружения, вам нужно иметь права администратора.

сmd

SET

— вывод текущих установленных переменных системного окружения. Команда выводит не полный список.

Другие переменные принимают свои значения динамически:

%CD% — принимает значение текущего каталога.
%DATE% — принимает значение текущей даты.
%TIME% — принимает значение текущего времени.
%RANDOM% — значение случайного числа в диапазоне между 0 и 32767.
%ERRORLEVEL% — текущее значение ERRORLEVEL, специальной переменной, которая используется в качестве признака результата выполнения программы.
%CMDEXTVERSION% значение версии расширенной обработки команд CMD.EXE.
%CMDCMDLINE% — раскрывается в исходную командную строку, которая вызвала командный процессор.

SET переменная=строка

переменная — Имя переменной среды.
строка — Строка символов, присваиваемая указанной переменной.

set имя_переменной

— Показывает текущее значение переменной с именем имя_переменной.

echo %имя_переменной% 

— Выводит значение переменной.

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

Для того чтобы переменные работали после перезагрузки, вам нужно добавить их в системный реестр (В случае использования систем линейки Windows). Они могут быть добавлены средствами GUI Windows:

Выберите Run или Выполнить(Клавиша Win+R)

control sysdm.cpl 

У вас отобразится окно свойств системы. Выберите «дополнительно» и «переменные среды».

Здесь есть два вида переменных среды. Это системные переменные и переменные среды пользователя. Переменные среды пользователя относятся к определенному пользователю системы и его системному окружению. Здесь вы можете задать переменную Path для быстрого доступа к часто используемым программам. Значение переменной представляет из себя строку.
Это набор путей разделенных символом «;».

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

Вы также можете сделать это с помощью утилиты командной строки для работы с реестром Windows — reg.

reg /?

— получение справки по данной утилите.

REG ADD <имя_раздела> [/v <имя_параметра> | /ve] [/t <тип>] [/s <разделитель>]
        [/d <данные>] [/f]
        [/reg:32 | /reg:64]

Пример использования скрипта для добавления системной переменой:

SET KEY=полный_путь_к_разделу_рееестра
SET PARM=имя_параметра

Эти переменные сохраняются до окончания текущей командной сессии либо до изменения значения в текущей сессии.

Чтобы добавить переменную path для текущего пользователя(текущий пользователь — пользователь имя которого вы использовали при входе в сеанс):

Устанавливаем значения переменных и используем их в команде

REG ADD ...

Значение Path указываем пути через точку с запятой.

SET KEY=HKEY_CURRENT_USEREnvironment
SET PARAM=%systemdrive%путь;d:;
REG ADD %KEY% /v Path /d  %PARAM%

Нам нужно указать в значении PARAM все пути, которые у нас были уже установлены и путь к компилятору.

HKEY_CURRENT_USER — это ветка текущего пользователя в реестре.
Environment — здесь хранятся переменные среды.

Предупреждение: «Так вы работаете с системным реестром. Обязательно сделайте копию реестра и создайте контрольную точку восстановления вашей системы». Безопаснее будет устанавливать системные переменные и переменные среды пользователя штатными средствами.

Обязательно ознакомьтесь с материалами:

Как создать резервную копию и восстановить реестр в Windows
Применимо к: Windows 7, Windows 8.1, Windows 10 (Официальная поддержка Microsoft):
support.microsoft.com/ru-ru/help/322756

Создание точки восстановления системы
Применимо к: Windows 10
support.microsoft.com/ru-ru/help/4027538/windows-create-a-system-restore-point

mrt 

— запуск средства удаления вредоносных программ Malicious Software Removal Tool

Настройки NppExec в Notepad++

Открываем Nonepad++.
Нам нужно создать скрипты cmd.
Выбираем ПлагиныNppExec
Отключяем «Console Command History»;
Включаем «Save all files on execute»;
Включаем «Follow $(CURRENT_DIRECTORY)»

Выбираем ПлагиныNppExecExecute или нажимаем F6.

В открывшемся окне пишем:

cd "$(CURRENT_DIRECTORY)"
javac $(FILE_NAME)  

Нажимаем Save… и в поле ScriptNme пишем: CompileJava.
Данный скрипт будет выполнять наш код java.

Снова выбираем ПлагиныNppExecExecete или нажимаем F6.

cd "$(CURRENT_DIRECTORY)"   
java $(NAME_PART)

Нажимаем Save… и пишем имя «RunJava». Данный код, написанный выше, будет компилировать код Java.

Повторяем тоже самое и пишем (Для компиляции и выполнения):

cd "$(CURRENT_DIRECTORY)"
javac $(FILE_NAME)
if $(EXITCODE) !=0 goto exit
java $(NAME_PART)
:exit

Сохраняем как CompileAndRunJava.
Нажмем кнопку «ОК».

cd "$(CURRENT_DIRECTORY)"

— перейти в текущую папку. В данном случае текущей будет та папка, куда вы сохранили текстовый файл.

javac $(FILE_NAME) 

— компилировать файл с именем находящимся в переменной FILE_NAME.

В нашем случае это имя сохраненного файла. Далее следует условие.

if $(EXITCODE) !=0 goto exit 

— если наш код не возвратил нормальное завершение == 0, то выйти.

java $(NAME_PART) 

— выполнить наш скомпилированный файл.

Далее мы свяжем наши скрипты с макросами.

В Notepad++ выбираем Плагины (Plugins) NppExec Advanced options…

Ставим галочку напротив «Place to the Macros submenu». В раскрывающемся списке «Associated script:» выбираем нужный нам скрипт и даем ему имя в поле «Item Name». И нажимаем Add/Modify. Проделываем это для всех наших скриптов, нажимаем «Ок» и перезапускаем Notepad.

Решение проблем с неправильным выводом русских букв в консоли:
Плагины (Plugins)/ NppExec / Console Output

Ставим нужные нам кодировки ввода и вывода.

Отключение сообщений внутренней консоли: Плагины (Plugins) / NppExec / No internal messages.

В случае появления сообщение при выполнении файла ИмяНашегоКласса.class, о том что main не найден, просто меняем наш скрипт: То есть нам нужно указать либо полный путь к пакету либо указать текущий пакет символом «.».

У нас получится такой скрипт:

cd "$(CURRENT_DIRECTORY)"   
java . $(NAME_PART)

Если же cmd не находит файла javа, то указываем к нему полный путь.
ИмяДиска:папка1папка2…java. $(NAME_PART).

Слегка улучшим наш код:

npp_save 
cd "$(CURRENT_DIRECTORY)"
путь_к_javacjavac $(FILE_NAME) 
if $(EXITCODE) !=0 goto exit
путь_к_javajava . $(NAME_PART)
:exit 

Скрипт компиляции Perl:

 npp_save 
CD $(CURRENT_DIRECTORY)
perl.exe -c -w "$(FILE_NAME)" 

Объяснение скрипта:
npp_save — внутренняя команда npp, сохранить
CD $(CURRENT_DIRECTORY) — переход к текущей папке
perl.exe -c -w «$(FILE_NAME)» выполнение perl.exe -c -w
пример: perl.exe -c -w test.pl
-c означает compile, компилировать
-w означает warnings, выводить предупреждения

Скрипт для компиляции с#:


cd "$(CURRENT_DIRECTORY)"
Путь_к_csccsc $(FILE_NAME)
if $(EXITCODE) !=0 goto exit
$(NAME_PART)
:exit

Здесь Путь_к_csc — это путь к вашему csc.exe
Обычно он выглядит так: %systemdrive%WindowsMicrosoft.NETFramework64версия
Для 32-битной версии — Framework32. Вы можете не указывать полный путь, а добавить путь к вашей системной переменной.

Есть такая особенность cmd, когда вы меняете путь и указываете другой диск, то вы можете увидеть тот же самый путь. Кажется что ничего не происходит при выполнении команды:

 CD другой_диск:папка1папка2

.

Для смены диска вам нужно применять CD c ключем /D или явным образом указывать имя_диска: после ввода команды.

Пример 1:

cd e:папка1папка2
e:

Пример 2:

cd /D e:папка1папка2

здесь е — имя диска, которое отличается от текущего.

Методика выявления ошибок компиляции

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

  1. Проверить запускается ли cmd и отрабатывают ли простейшие команды.
  2. Проверить ваш компилятор на предмет компиляции из командной строки.
  3. Проверить системные переменные
  4. Проверить установлен ли плагин NppExec
  5. Запускает ли он скрипты
  6. Связанны ли скрипты с макросами NppExec.
  7. Отрабатывают ли макросы совместно со скриптами.

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

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

Нам не предоставляется большого выбора из сочетаний клавиш на клавиатуре. К тому-же данные комбинации клавиш у нас могут быть заняты. Сделать назначение горячих клавиш или клавиш быстрого вызова мы можем в меню: Максросы/Измен.соч.клав./Удалить макро.

Какие у вас могут быть резоны познакомиться с командной строкой?

Вам может быть не придется использовать её часто. Но знать о её существовании просто необходимо. Например, на начальном этапе обучения вам нужно познакомиться с опциями компилятора, компоновщика, системы сборки и протестировать их. Вам понадобятся знание того, какие аргументы и ключи принимает программа на входе и что она может возвращать.
Не всегда у вас будет возможность использовать умные и дорогие IDE. И не потому что они могут оказаться слишком дороги, а по той причине, что вы просто не сможете установить их на некоторые системы. В других системах этого могут требовать меры безопасности. Вам может понадобится протестировать каждый модуль, такой как компилятор, линковщик, компановщик, систему сборки, систему контроля версий отдельно. То есть каждую часть вашей системы разработки. Вам может понадобится проверить корректность их работы по отдельности. В некоторых случаях вам может понадобится использовать другой компилятор с вашей IDE или любой другой отдельный модуль. Собирание кубиков графического интерфейса в IDE не делает из вас программиста. Вам понадобятся знания языков, знания архитектуры, знание некоторых скриптов, математические знания и т.д, то есть умение использовать в работе многих инструментов. В различных терминалах и консолях командная строка работает по разному. Это зависит от вашей консоли или терминала. Общие принципы работы для некоторых схожи, но для некоторых могут отличаться очень сильно. Командная строка — это только дополнительный инструмент в ваших руках, а насколько вы его эффективно использовать зависит от вас. В случае, когда вы занимаетесь opensource проектом, вы сможете предоставить командные файлы вашим пользователям для сборки, для тестирования проекта, развертывания проекта и тд. Для команды разработчиков такой подход может помочь более эффективно взаимодействовать. При этом это может оказаться выходом за пределы «комфорта» и нести дополнительные риски. Но использование любых инструментов несет в себе риски, во многом это определяется надежностью инструментов и умением их использовать.

В чем преимущество такого подхода к компиляции? Для обучающихся это приобретение новых навыков работы с командной строкой и связывание кода скриптов с текстовым редактором, изучение компиляции из командной строки. Экономия времени на тестировании небольшого кода без загрузки тяжелых IDE. В некоторых случаях, когда нет возможности установить полноценную IDE такой подход может выручить. Изучение скриптов для командной строки позволяет компилировать из исходников там где вообще нет никакой возможности применять UI, например на серверах. И хотя там не будет возможности использовать текстовые редакторы типа Notepad++, будет возможность использовать текстовые процессоры типа vi, vim, emacs, nano и тд. Основные принципы работы остаются теми же.

Мы с вами, несколько обзорно, познакомились с компиляцией из командной строки, с написанием скриптов для этого, с заданием и использованием системных переменных,
со связыванием кода скриптов с макросами Notepad++, c внутренними переменными Notepad++. Надеюсь данная статья будет полезна обучающимся. Здесь я описал подробно общие методики. Прежде чем обращаться в службу поддержки или отправлять баги, вам следует самостоятельно все выяснить. Во многих случаях может оказаться, что это ваша ошибка или опечатка, а не инженеров разработчиков.

Современные IDE имеют собственные консоли или эмуляторы консолей. Так что вам не обязательно использовать cmd для сборки. К тому же кроме cmd существует достаточно много подобных инструментов. Изучение работы скриптов может помочь вам в будущем в освоении таких инструментов, как системы сборки, компиляторов, компоновщиков, линковщиков. К тому же некоторые SDK не предоставляют графического пользовательского интереса(GUI), использование GUI может быть запрещено политикой безопасности, так как несет дополнительные угрозы в критических для этого областях применения.

Надеюсь данная публикация будет полезной в освоении, расширении новых знаний и навыков.

<<< Мои публикации на Habr >>>

Полезные ссылки

Как создать резервную копию и восстановить реестр в Windows
Применимо к: Windows 7Windows 8.1Windows 10 (Офиальная поддержка Microsoft)
support.microsoft.com/ru-ru/help/322756

Материалы для дополнительного изучения

notepad-plus-plus.org

Управление Java classpath (UNIX и Mac OS X)

Управление Java classpath (Windows)

Java — the Java application launcher

Для ознакомления:
Избавляемся от «исторических причин» в cmd.exe
habr.com/ru/post/260991

Сравнение командных оболочек
ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D1%8B%D1%85_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%B5%D0%BA

Понравилась статья? Поделить с друзьями:
  • Как написать плагин для minecraft на python
  • Как написать плагин для minecraft на java
  • Как написать плагин для kodi
  • Как написать плагин для intellij idea
  • Как написать плагин для cinema 4d