AkelPad в многооконном режиме не работает как редактор в Git

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 4
Joined: Thu Dec 15, 2016 5:26 pm

AkelPad в многооконном режиме не работает как редактор в Git

Post by Mirocit »

Здравствуйте.

Если установить AkelPad и настроить Git for Windows:

Code: Select all

$ git config --global core.editor "'C:\Program Files\Git\AkelPad.bat'"
Содержимое файла C:\Program Files\Git\AkelPad.bat:

Code: Select all

C:\Windows\SysWOW64\notepad.exe /x %1
То все прекрасно работает. После запуска коммита из git bash открывается AkelPad с содержимым файла .git\COMMIT_EDITMSG, его можно отредактировать, сохранить и закрыть, после чего все то, что было сохранено в .git\COMMIT_EDITMSG становится описанием коммита.

Проблема возникает, если в AkelPad выбрать многооконный режим: Настройки -> Оконный режим -> Многооконный или Псевдооконный. После этого файл .git\COMMIT_EDITMSG открывается в AkelPad, но вот в консоли git bash отображается ошибка: "Aborting commit due to empty commit message.", т.е. git bash перестает ожидать закрытия окна AkelPad с текстом.

Команда на открытие AkelPad:

C:\Windows\SysWOW64\notepad.exe /x PATHTOREPO/.git/COMMIT_EDITMSG

Подскажите, как исправить ситуацию, так как привык работать в многооконном режиме?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Добавить параметры вызова /NewIstance /MainClass("GitAkelPad4_%d")
(если в батнике, понадобится два %%)

В чем суть: гит запускает редактор, и по его завершении делает своё дело. АР в мультиоконном режиме в включенной опции
"не открывать программу дважды" находит запущенный АР, говорит ему что открыть, и сам завершается, вот гит и лажает. Этими опциями заставили не искать старых экземпляров а открыть новый сразу.

Offline
Posts: 4
Joined: Thu Dec 15, 2016 5:26 pm

Post by Mirocit »

Спасибо за попытку помочь, изменил строку в батнике, как вы посоветовали:

Code: Select all

C:\Windows\SysWOW64\notepad.exe /NewIstance /MainClass("GitAkelPad4_%%d") /x %1
Но ничего не изменилось. Если AkelPad не запущен, то что с вашими опциями, что без - все ок, после git commit запускается редактор с открытым на редактирование файлом описания коммита, и редактор ждет закрытия AkelPad - все ок. Если AkelPad запущен, и в нем открыт или не открыт, без разницы, файл - открывается на редактирование файл COMMIT_EDITMSG в новой вкладке, но git не ждет редактирования, а сразу выдает ошибку, что "empty commit message"...

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Не буду советовать поставить черепаху :lol:

Получилось у меня втолковать гиту как запускать, а то он матерился на синтаксические ошибки. Вот что получилось

Code: Select all

git config core.editor D:/akelpad/gitapedit.cmd
Содержимое:

Code: Select all

@d:\AkelPad\AkelPad.exe /NewInstance /MainClass("MyAkelPad4%%d") /x "%*"
Проблема в том, что я не использую АР как замена блокнота. Это может быть проблемой, но есть вторая: вы с ходу запускаете 32битный АР. Почему? Вероятно потому что сам гит 32битный. Я же запускаю 64битный. Проблем не имею. Очевидно в одном из двоих названых отличий и проблема.
Я подозреваю что проблема в первом.

Offline
Posts: 4
Joined: Thu Dec 15, 2016 5:26 pm

Post by Mirocit »

С чего вы взяли, что я использую 32битный АР? У меня установлены новейшие версии, на сегодняшний момент: AkelPad 4.9.8 (x64) и Git for Windows Git-2.11.0-64-bit

Огромное Вам спасибо за cmd!!! Попробовал этот вариант, и все заработало как нужно: после коммита открывается другая программа AP (не новое окно в уже запущенном AkelPad`e, не смотря на многооконный режим, а новое окно с AkelPad`ом) с уже открытым COMMIT_EDITMSG, после редактирования и закрытия AkelPad, коммит записывается.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

С чего вы взяли, что я использую 32битный АР?
Потому-что глодиолус :lol:

Code: Select all

C:\Windows\SysWOW64\notepad.exe
В директории C:\Windows\SysWOW64 лежит 32битная копия системных компонентов.
Если 32битное приложение(в64битной системе) пытается посмотреть на c:\windows\system32, система на самом деле подставляет ему содержимое директорию C:\windows\syswow64
Если 32битному приложению(в64битной системе) таки нужно посмотреть на настоящий c:\windows\system32, то ему нужно искать его в c:\windows\sysnative.
Если в C:\windows\syswow64 попадет таки 64битные компоненты, то рискуете получить большой фингал 8) Ну вы поняли, рискуете получить неработоспособность.

Гуглить "MSDN File System Redirector"

Всё-же перепроверьте битность того notepad.exe на который вы смотрели. Ну или не проверяйте пока оно работает :)

Offline
Posts: 4
Joined: Thu Dec 15, 2016 5:26 pm

Post by Mirocit »

Я перед тем, как Вам написать, как раз и перепроверил: Справка -> О программе -> AkelPad 4.9.8 (x64). Возможно, notepad.exe как раз 32битный, а AP, как я писал ранее, у меня встроен вместо штатного блокнота. Но не суть важно - главное, что все ЗАРАБОТАЛО, благодаря Вам! И дело не в батнике, или цмдешнике, а в параметре MyAkelPad4 вместо GitAkelPad4_ :)

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Mirocit
да, %%d суть решения)
Пояснение есть в доках АР AkelFiles\docs\AkelHelp-End|Rus.html
Кстати, а плагин сессий настроен у вас? Вангую проблемы если да :)

Instructor
Если товарищ начнет коммитить с разных рабочих копий, и у него настроен плагин сессий, то ему придет привет: у него много табов будет, ибо закрывает по Esc и плагин помнит. После коммита гит затирает файл который редактировался, и ему будет матерится что файлов(с других рабочих копий) нету и предлагать создавать будет. Можно как с командной строки запретить сессии? Да и этот механизм редактирования используется для разрешения конфликтов тоже.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

FeyFre wrote:Можно как с командной строки запретить сессии?
Отключить автозагрузку Sessions плагина и запускать, когда нужен, с помощью:

Code: Select all

AkelPad.exe /Call("Sessions::Main", 10) /Call("Sessions::Main", 1, "OnExit")
Когда не нужен:

Code: Select all

AkelPad.exe
Post Reply