У меня всегда возникало желание как то улучшить работу и подружиться с командной строкой. Все было хорошо, пока я не начал понимать, что для полного счастья нужен полноценный редактор, хотя бы Notepad++.
Сам я программист на Java и PHP. Для автоматизации логина и «некоторых» примочек в игре танки онлайн я познакомился с AutoHotkey. С тех пор немного он у меня всегда под рукой. Для облегчения работы с командной строкой я написал небольшую программу (BAT.ahk).
BAT.ahk — Программа облегченной работы с командной строкой на AutoHotkey.
Для работы вам понадобится AutoHotkey (a) или скачайте скомпилированную программу (b) (32 bit Unicode).
(a) AutoHotkey (желательно использовать версию юникод ‘AutoHotkey_L’). BAT.ahk
Этот метод предпочтительнее, так как вы можете редактировать скрипт под ваши нужды.
(b) BAT.exe
Позволяет быстро проверить нужно ли это вам.
Все что делает программа, это копирует строку под курсором и вставляет в командную строку.
1. Если командная строка не открыта, то программа откроет ее.
2. Я пользуюсь Notepad++ как редактором. BAT проверяет активен ли он. Если да посылает одну строку в CMD. В ином случае посылает обычную F1. BAT можно настроить на любой другой редактор или просто убрать проверку на наличие Notepad++, тогда будет работать глобально.
3. Для начала работы, вам нужно вписать нужные команды в редакторе и нажимать F1 по нужным вам строчкам. Фокус остается на редакторе, и вы сможете редактировать ваши команды и наблюдать за их выполнением в окне консоли. При повторном нажатии скрипты посылаются в туже самую консоль. Я обычно не использую F1, так что она идеально подошла для этой функции. Конечно, при желании можно установить любую другую комбинацию.
Для чего я написал этот скрипт, и где он может нам понадобится:
a) По работе мне часто требуется работать с разными версиями компиляторов и командными утилитами, такие как MinGw, Visual Studio, Java, PHP CLI, Android и как мне показалось CMD лишь мешает в этом плане. Не реализован нормальный копи паст – это одна из основных причин. Также если вы допустили ошибку в написании длинных путей, то начать заново не просто.
b) Я искал решение данной проблемы, устанавливал разные программы-заменители командной строки с поддержкой копи-паста и мультитабности. Понравилась одна утилита: Take Command. Но и там нет подцветки команд, иногда виснет, когда ждет ввода и при запуске gui, в редактировании не сравнится с Notepad++ и к тому же платная. Хотелось чего-то своего, родного. Именно из этой утилиты я почерпнул идею разделения команд от вывода. Вот так родилась идея выполнять все консольные задачи в Notepad++. Так сказать, не отходя от кассы.
c) У меня всегда было желание выполнять работу с минимальными затратами на установку и настройку. Или хотя бы как то все оптимизировать. Так же хотелось бы не уходить далеко от привычной нам консоли, пусть оно напоминает нам с чего мы начинали. На мой взгляд, это и есть небольшая оптимизация рабочего процесса.
d) Не люблю я все впихивать в глобальные переменные и пути (Path) в Windows. Это мешает при работе с разными версиями и возможно снижает производительность. С этой программой все будет немного легче, вбили нужные команды и проверяете код.
При нажатии F1 BAT сохраняет документ (Ctrl-S), выделяет всю строку под курсором, копирует в буфер, и посылает команду в командную строку, после чего нажимает Enter.
Вы сразу увидите результат выполнения команды в консоли. Возможно, появится ошибка компиляции. Отредактировав код можно заново скомпилировать. Я часто использую команды компилятора в самом коде в комментариях. Это очень удобно. Иногда пользуюсь немного измененной версией BAT, когда команда находится в комментариях на второй строчке кода. Тогда вам даже не нужно переходить на строчку со скриптом компиляции. F1 и ошибка компиляции под вашим редактором ждет вас.
— директория активного файла в Notepad++. Можно использовать эту директиву для замены пути к корню проекта, если файл находится там же. BAT использует SendMessage и годится только для Notepad++ если ничего не менять. Можно прикрутить и к другому редактору, если у него есть опция путь в буфер обмена. Я использовал Winspector Spy для нахождения нужных значений.
Программа может быть полезна для новичков изучающих компиляторы и командные утилиты, а так же для опытных пользователей разделяющих мои идеи. Программа не идеальна, но на данный момент очень часто помогает мне. Жду ваши заметки, идеи и критику.
PS. Ctrl-V теперь работает в консоли. Идея подсмотрена у 7plus.
Пример 1 (создание android проекта, компиляция, и запуск приложения):
CLS
PATH
PATH=%PATH%;C:\webdev\android-sdk\tools\;C:\webdev\android-sdk\platform-tools\
CD C:\webprojects\Android\pr2\
CD C:\webprojects\Android\pr2\Hungry
DEL /s /x /y /z Hungry
ANDROID create project --target «Google Inc.:Google APIs:10» --path ./Hungry --activity Hungry --package uz.alfred.hungry
ANDROID list
ant debug
ant clean
emulator @NEXUS-ONE-loc
adb devices
adb -s emulator-5554 install -r c:\webprojects\Android\pr2\Hungry\bin\Hungry-debug.apk
adb -s HT09HP801540 install -r c:\webprojects\Android\pr2\Hungry\bin\Hungry-debug.apk
Пример 2 (создание ПХП проекта с фреймворком yii)
CLS
PATH
PATH=%PATH%;c:\wamp\bin\php\php5.3.8;c:\wamp\www\yii\yii-1.1.9.r3527\framework
CD C:\wamp\www\yiipr1
yiic webapp pr1
php -v
php C:\wamp\www\yiipr1\pr1\index.php
Ну и сам код программы BAT:
Сам я программист на Java и PHP. Для автоматизации логина и «некоторых» примочек в игре танки онлайн я познакомился с AutoHotkey. С тех пор немного он у меня всегда под рукой. Для облегчения работы с командной строкой я написал небольшую программу (BAT.ahk).
BAT.ahk — Программа облегченной работы с командной строкой на AutoHotkey.
Для работы вам понадобится AutoHotkey (a) или скачайте скомпилированную программу (b) (32 bit Unicode).
(a) AutoHotkey (желательно использовать версию юникод ‘AutoHotkey_L’). BAT.ahk
Этот метод предпочтительнее, так как вы можете редактировать скрипт под ваши нужды.
(b) BAT.exe
Позволяет быстро проверить нужно ли это вам.
Все что делает программа, это копирует строку под курсором и вставляет в командную строку.
1. Если командная строка не открыта, то программа откроет ее.
2. Я пользуюсь Notepad++ как редактором. BAT проверяет активен ли он. Если да посылает одну строку в CMD. В ином случае посылает обычную F1. BAT можно настроить на любой другой редактор или просто убрать проверку на наличие Notepad++, тогда будет работать глобально.
3. Для начала работы, вам нужно вписать нужные команды в редакторе и нажимать F1 по нужным вам строчкам. Фокус остается на редакторе, и вы сможете редактировать ваши команды и наблюдать за их выполнением в окне консоли. При повторном нажатии скрипты посылаются в туже самую консоль. Я обычно не использую F1, так что она идеально подошла для этой функции. Конечно, при желании можно установить любую другую комбинацию.
Для чего я написал этот скрипт, и где он может нам понадобится:
a) По работе мне часто требуется работать с разными версиями компиляторов и командными утилитами, такие как MinGw, Visual Studio, Java, PHP CLI, Android и как мне показалось CMD лишь мешает в этом плане. Не реализован нормальный копи паст – это одна из основных причин. Также если вы допустили ошибку в написании длинных путей, то начать заново не просто.
b) Я искал решение данной проблемы, устанавливал разные программы-заменители командной строки с поддержкой копи-паста и мультитабности. Понравилась одна утилита: Take Command. Но и там нет подцветки команд, иногда виснет, когда ждет ввода и при запуске gui, в редактировании не сравнится с Notepad++ и к тому же платная. Хотелось чего-то своего, родного. Именно из этой утилиты я почерпнул идею разделения команд от вывода. Вот так родилась идея выполнять все консольные задачи в Notepad++. Так сказать, не отходя от кассы.
c) У меня всегда было желание выполнять работу с минимальными затратами на установку и настройку. Или хотя бы как то все оптимизировать. Так же хотелось бы не уходить далеко от привычной нам консоли, пусть оно напоминает нам с чего мы начинали. На мой взгляд, это и есть небольшая оптимизация рабочего процесса.
d) Не люблю я все впихивать в глобальные переменные и пути (Path) в Windows. Это мешает при работе с разными версиями и возможно снижает производительность. С этой программой все будет немного легче, вбили нужные команды и проверяете код.
При нажатии F1 BAT сохраняет документ (Ctrl-S), выделяет всю строку под курсором, копирует в буфер, и посылает команду в командную строку, после чего нажимает Enter.
Вы сразу увидите результат выполнения команды в консоли. Возможно, появится ошибка компиляции. Отредактировав код можно заново скомпилировать. Я часто использую команды компилятора в самом коде в комментариях. Это очень удобно. Иногда пользуюсь немного измененной версией BAT, когда команда находится в комментариях на второй строчке кода. Тогда вам даже не нужно переходить на строчку со скриптом компиляции. F1 и ошибка компиляции под вашим редактором ждет вас.
— директория активного файла в Notepad++. Можно использовать эту директиву для замены пути к корню проекта, если файл находится там же. BAT использует SendMessage и годится только для Notepad++ если ничего не менять. Можно прикрутить и к другому редактору, если у него есть опция путь в буфер обмена. Я использовал Winspector Spy для нахождения нужных значений.
Программа может быть полезна для новичков изучающих компиляторы и командные утилиты, а так же для опытных пользователей разделяющих мои идеи. Программа не идеальна, но на данный момент очень часто помогает мне. Жду ваши заметки, идеи и критику.
PS. Ctrl-V теперь работает в консоли. Идея подсмотрена у 7plus.
Пример 1 (создание android проекта, компиляция, и запуск приложения):
CLS
PATH
PATH=%PATH%;C:\webdev\android-sdk\tools\;C:\webdev\android-sdk\platform-tools\
CD C:\webprojects\Android\pr2\
CD C:\webprojects\Android\pr2\Hungry
DEL /s /x /y /z Hungry
ANDROID create project --target «Google Inc.:Google APIs:10» --path ./Hungry --activity Hungry --package uz.alfred.hungry
ANDROID list
ant debug
ant clean
emulator @NEXUS-ONE-loc
adb devices
adb -s emulator-5554 install -r c:\webprojects\Android\pr2\Hungry\bin\Hungry-debug.apk
adb -s HT09HP801540 install -r c:\webprojects\Android\pr2\Hungry\bin\Hungry-debug.apk
Пример 2 (создание ПХП проекта с фреймворком yii)
CLS
PATH
PATH=%PATH%;c:\wamp\bin\php\php5.3.8;c:\wamp\www\yii\yii-1.1.9.r3527\framework
CD C:\wamp\www\yiipr1
yiic webapp pr1
php -v
php C:\wamp\www\yiipr1\pr1\index.php
Ну и сам код программы BAT:
#SingleInstance force ;force|ignore|off
SetTitleMatchMode 2
SetKeyDelay, -1, 0
; Иконка CMD, можно закомментировать если она не нужна
;Menu , Tray , Icon , %A_ScriptDir%\res\cmd.ico
;;;;;;;;;;;;;;;;;;;;; Перегрузить скрипт по двойному щелчку на иконке
menu, tray, add ; Создать разделяющую линию.
menu, tray, add, Reload script, ReloadScript
menu, tray, Default, Reload script
Return
ReloadScript:
Reload
return
;;;;;;;;;;;;;;;;;;;;;
; Очень удобно нажав F1 закрыть консольное окно если оно активно
#IfWinActive ahk_class ConsoleWindowClass
F1::
WinClose
Return
; После этого вставка Ctrl-V в командной строке будет работать. Небольшой фикс.
; Идея подсмотрена у 7plus. http://code.google.com/p/7plus
#IfWinActive ahk_class ConsoleWindowClass
^v::
SendInput {Raw}%clipboard%
Return
OutputVarPID = 0
; Проверка активен ли Notepad++
; удалите это строку (#If ....) для глобальной работы горячей клавиши
#If WinActive("ahk_class Notepad++")
F1::
clipboard =
; Можно прикрутить и к другому редактору если у него есть опция путь в
; буфер обмена. Я использовал Winspector Spy для нахождения нужных значений.
PostMessage, 0x111, 42029,0,, ahk_class Notepad++ ; 0x111 is WM_COMMAND
sleep 100
fileFullPath = %clipboard%
clipboard =
if (WinActive("ahk_class Notepad++")) {
Send ^s
Send {end}{end}+{home}
}
Send ^c
ClipWait
fileFolder := SubStr(fileFullPath , 1 , InStr(fileFullPath, "\", false ,0))
fileName := SubStr(fileFullPath , InStr(fileFullPath, "\", false ,0)+1)
fName := SubStr(fileName , 1 , InStr(fileName, "." , false , 0)-1)
fType := SubStr(fileName , InStr(fileName, "." , false , 0)+1, 8)
main()
Return
; Функции
main()
{
global
StringReplace, clipboard, clipboard, , %fileFolder%, All
SetWorkingDir %fileFolder%
; две проверки одного значения, так как окно CMD может еще не открыто
ifWinNotExist ahk_pid %OutputVarPID%
{
; cmd /c - закрыть после исполнения, /k остаться открытым
Run, %comspec% /k dir /b
&& cls, , , OutputVarPID
sleep 100
WinActivate, Notepad++
sleep 50
}
ifWinExist ahk_pid %OutputVarPID%
{
PostMessage, 0x112, 0xfff1,0,, ahk_pid %OutputVarPID% ; 0x112 это команда WM_SYSCOMMAND
ControlSend, , {Enter}, ahk_pid %OutputVarPID%
}
}
Return