шарпопочитатель 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 |
Как вариант:
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 минуты Интересует такой момент, каким образом лучше открыть новую вкладу и в нее поместить свое окно…
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 |
пальцем в небо Да оно коню понятно, вопрос к какому окно его лепить и как его получить из нотепад. Также непонятно как отловить сообщение перехода между закладками ( файлами ) в нотепад.
0 |
Каратель 6607 / 4026 / 401 Регистрация: 26.03.2010 Сообщений: 9,273 Записей в блоге: 1 |
|
18.07.2013, 13:11 |
8 |
curScintilla ну я так понял что это хендл вкладки, значит к ней
0 |
8385 / 6147 / 615 Регистрация: 10.12.2010 Сообщений: 28,683 Записей в блоге: 30 |
|
18.07.2013, 13:16 |
9 |
ну я так понял что это хендл вкладки, значит к ней Я вот тоже думал…
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 минуту
Также непонятно как отловить сообщение перехода между закладками ( файлами ) в нотепад.
0 |
8385 / 6147 / 615 Регистрация: 10.12.2010 Сообщений: 28,683 Записей в блоге: 30 |
|
20.07.2013, 18:01 |
12 |
судя по тому что показывает spy++ это невозможно, все вкладки имеют один хендл — их парента. и даже текстовый редактор нельзя выделить. Ну у меня получилось «влепить» но то что глючит перерисовка говорит о том что это не то…
0 |
NickoTin Почетный модератор 8713 / 3665 / 404 Регистрация: 14.06.2010 Сообщений: 4,513 Записей в блоге: 9 |
||||
21.07.2013, 02:30 |
13 |
|||
Также непонятно как отловить сообщение перехода между закладками ( файлами ) в нотепад. Нужно ловить уведомление NPPN_BUFFERACTIVATED от нотепада, где SCNotification::nmhdr.idFrom будет ID активного буфера (омг, не смог лучше перевести с доков), далее шлем npp сообщение NPPM_GETPOSFROMBUFFERID и получаем индекс активной вкладки.
1 |
Разработка .NET плагина для работы с Gist в Notepad++
Однажды мне потребовалось создать 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. Для ее
подключения нужно выполнить несколько простых шагов:
- Создать репозиторий с .NET проектом MyAwesomePlugin.
- Добавить подмодуль https://github.com/KvanTTT/NppNetInf.git в репозиторий.
- Добавить таргет в файл MyAwesomePlugin.csproj следующим образом:
<Import Project="$(SolutionDir)NppNetInfsrcDllExportNppPlugin.DllExport.targets" />
Этот таргет будет выполняться после каждого билда. Он меняет финальную сборку
специальным образом, чтобы Notepad++ «понимал» ее. - Создать поддиректорию NppNetInf внутри проекта MyAwesomePlugin и добавить
все*.cs
файлы как ссылки из закачанного подмодуля NppNetInf
(Win32.cs, Scintilla.cs, PluginMain.cs и пр.). - Добавить класс
Main
и унаследовать его отPluginMain
. Далее переопределить
в нем необходимые абстрактный методы и свойства
(PluginName
,CommandMenuInit
). Опционально можно переопределить и
другие методы
(OnNotification(ScNotification notification)
,PluginCleanUp()
,SetToolBarIcon
). - Выбрать платформу (x86 или x64), построить проект и переместить
скомпилированную сборку в соответствующую директорию плагинов Notepad++.
Обычно этоC:Program Files (x86)Notepad++plugins
для x86 платформы и
C:Program FilesNotepad++plugins
для x64. - Запустить 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 пакета, а не подмодуля). Однако и при текущей реализации проект
инфраструктуры добавлять в солюшн плагина не обязательно.
Заключение
Окно сохранения гиста выглядит так:
При инициализации плагина необходимо ввести ваш 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)
- 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:
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:
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.
NppAutoIndient
Как тоже очевидно из названия, расставляет отступы в коде, что улучшает его читаемость. После установки плагин по умолчанию выключен, его надо активировать и выбрать режим работы, я рекомендую smart. Плагин в этом режиме учитывает действия пользователя и форматирует текст в том же стиле, что и разработчик.
TextFX
Очень мощный инструмент для преобразования текста.
-
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/?-
Все функции, кроме последней, полезные. Последняя, к несчастью, не работает с кириллицей.
-
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
-
TextFX Edit
- Fill Down Insert
С помощью клавиши Alt выделите вертикально текст.
- Fill Down Overwrite
- 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
- Indent text sticky left margin
Бесполезный пункт. Для получения нужного результата достаточно выделить несколько строк и нажать tab.
- Indent & surround { text lines }
Обрамляет текст в фигурные скобки, а текст сдвигает табуляцией.
- Delete Blank Lines
Удаляет пустые строки. Если в строке есть табуляция или пробелы, то пустой строкой не является.
- Delete Surplus Blank Lines
Бесполезная функция замены пустых строк, эффективнее и проще воспользоваться стандартной заменой.
- Strip unquoted text (C) separate by (Clipboard<=20)
- Strip unquoted text (VB) 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, (VB)
Та же самая функция, только в синтаксисе VB.
- Line up multiple lines by (,)
Форматирует строки по вертикали по запятым.
- Line up multiple lines by (=)
То же самое, только по знаку равенства. Полезная функция.
- Line up multiple lines by (Clipboard character)
То же самое, только по знаку из буфера обмена. По сути универсальный вариант предыдущих функций.
- Unwrap Text
- ReWrap Text (Clipboard or 72) width
Разбивает текст по разделителю или по 72 символа (максимум). Странная функция, непонятно, чем может пригодиться.
- Pad rectangular selection with spaces
Вообще не понял, как этим пользоваться, и чем оно могло бы быть полезно.
-
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 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-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.
-
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.
-
TextFX HTML Tidy
Пункт не работает.
-
TextFX Tools
- Sort lines case sensitive (at column)
Сортировка строк с учетом регистра.
- 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)
Очищает буфер изменений.
-
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
Вставляет текст. Походу просто вставляет текст.
-
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 и навязывать свои функции. Крайне не рекомендую использовать.
-
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
здесь е — имя диска, которое отличается от текущего.
Методика выявления ошибок компиляции
У вас на этапе подготовки могут возникать различного рода ошибки и первое что вам нужно выяснить — это к чему относится ваша ошибка. То есть локализировать проблему. Для этого выясняем на каком уровне возникает проблема. Относится ли она к системе, к командной оболочке, к компилятору, текстовому редактору или к опечатке, ошибке в скрипте.
- Проверить запускается ли cmd и отрабатывают ли простейшие команды.
- Проверить ваш компилятор на предмет компиляции из командной строки.
- Проверить системные переменные
- Проверить установлен ли плагин NppExec
- Запускает ли он скрипты
- Связанны ли скрипты с макросами NppExec.
- Отрабатывают ли макросы совместно со скриптами.
Для более подробного вывода ошибок при компиляции смотрите документацию к вашей системе сборки, к компилятору и другим модулям, которые вы используете.
Теперь, когда мы создали, отладили и наши скрипты, убедились, что они работают предсказуемо, создали макросы для них, мы можем связать их с клавишами быстрого вызова. Как это сделать?
Мы не назначили горячие клавиши при создании скриптов, потому как назначение их, клавиш быстрого вызова, в окне создания скрипта ограничены.
Нам не предоставляется большого выбора из сочетаний клавиш на клавиатуре. К тому-же данные комбинации клавиш у нас могут быть заняты. Сделать назначение горячих клавиш или клавиш быстрого вызова мы можем в меню: Максросы/Измен.соч.клав./Удалить макро.
Какие у вас могут быть резоны познакомиться с командной строкой?
Вам может быть не придется использовать её часто. Но знать о её существовании просто необходимо. Например, на начальном этапе обучения вам нужно познакомиться с опциями компилятора, компоновщика, системы сборки и протестировать их. Вам понадобятся знание того, какие аргументы и ключи принимает программа на входе и что она может возвращать.
Не всегда у вас будет возможность использовать умные и дорогие 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