Page 1 of 5

Ассоциации для файлов при запуске из командной строки

Posted: Tue 21 Jun, 2016 15:53
by Smitis
gene.pavlovsky
Для всех этих манипуляций ФАРу явно не хватает собственных ассоциаций, на подобие уже существующих, но для командной строки. Поясню - сейчас, можно задать ассоциацию, скажем *.sh и запускать такие файлы через bash по Enter. Но для командной строки такого нет. А если бы можно было задать расширения и ассоциированные с ними приложения, подставлять и искать файлы с этими расширениями (т.е. всё как сейчас, только не на уровне ОС, а на уровне ФАРа), то никаких бы замен COMSPEC не нужно было. Расширение sh ассоциируем с bash, ему передаётся командная строка as is и всё работает.

Подружить Far и bash (Cygwin и другие)

Posted: Tue 21 Jun, 2016 18:42
by DrKnS
Smitis wrote: ФАРу явно не хватает собственных ассоциаций, на подобие уже существующих, но для командной строки.
В принципе, существующим ассоциациям можно разрешить работать в комстроке и предусмотреть передачу аргументов по %1 %2 %3 ... %* или ещё как.

Подружить Far и bash (Cygwin и другие)

Posted: Tue 21 Jun, 2016 19:03
by gene.pavlovsky
Smitis wrote:gene.pavlovsky
... то никаких бы замен COMSPEC не нужно было. Расширение sh ассоциируем с bash, ему передаётся командная строка as is и всё работает.
Да я в командной строке много всего делаю, где ничего с расширением sh нету. Ну вот например как калькулятор echo $((2**20)), или надо с группой файлов что-то сделать: for file in *mp3; do lame --decode "$file"; done
Так что я ратую за FAR_ComSpec

Подружить Far и bash (Cygwin и другие)

Posted: Tue 21 Jun, 2016 20:37
by Smitis
DrKnS wrote:В принципе, существующим ассоциациям можно разрешить работать в комстроке и предусмотреть передачу аргументов по %1 %2 %3 ... %* или ещё как.
Но ФАРовские ассоциации это не просто соответствие расширение-программа. Там могут быть довольно хитрые маски. Что делать с ассоциациями типа readme.*;*.doc?;*.txt?
Если команда введена полность, с расширением, тогда можно поискать соответствие. А если соответствий несколько? А если команда введена без расширения?

П.С.
Как, например, это сделано в TakeCommand. При старте выполняется tcstart.btm, лежащий рядом с tcc.exe. В нём в переменную PATHEXT добавляю нужные расширения и создаю переменные среды вида set .lua=`%farhome%\lflua.exe` %*. И всё. Tcc будет искать по обычному алгоритму (текущая папка, PATH, etc) файлы подставляя расширения из PATHEXT и выполняя нужную ассоциацию, независимо от того, что там ассоциировано в Винде. Если нет нужной переменной среды, тогда как обычно - из реестра.

Подружить Far и bash (Cygwin и другие)

Posted: Tue 21 Jun, 2016 21:20
by Smitis
Хотя с другой стороны...
Допустим, что-то там ввели в командной строке. Ищем исполняемый файл обычным образом. Нашли. Ищем ФАРовскую ассоциацию имеющую Execute command (ну, т.е., как при Enter). Если нашли несколько - выводим меню. Берём выбранную в меню ассоциацию или единственную, подставляем, выполняем. Если ассоциаций нет - действуем по-старому. Это может работать!
Неуверен только, что лучше делать с частью командной строки, после команды. Возможно, можно просто дописывать через пробел as is к полученной после подстановки метасимволов.

gene.pavlovsky Получается, это предложение не относится к Вашему предложению по FAR_ComSpec. Будем считать это другим предложением. :)

Подружить Far и bash (Cygwin и другие)

Posted: Tue 21 Jun, 2016 22:05
by gene.pavlovsky
А что это всё даёт, чего нельзя добиться стандартными ассоциациями винды?

Code: Select all

assoc .php=phpfile
ftype phpfile="C:\usr\local\wnmp\php\php.exe" -f "%1" -- %~2
И можно запускать script.php arg1 arg2 ... с командной строки.

Подружить Far и bash (Cygwin и другие)

Posted: Tue 21 Jun, 2016 23:11
by Smitis
gene.pavlovsky wrote:А что это всё даёт, чего нельзя добиться стандартными ассоциациями винды?
То же, что и ассоциации ФАРа - независимость от Винды и мобильность. Например, у меня есть мобильная версия ФАРа, включающая в себя ФАР, ConEmu и некоторый "джентльменский набор" консольных (и не только) утилит, которую я, во-первых, синхронизирую на несколько компьютеров, во-вторых, она есть на флешке, всегда можно воткнутся в другой компьютер и работать. А на другом компьютере может и не быть нужных системных ассоциаций или быть "ассоциированны" не с тем, с чем нужно. Даже vbs/js могут быть ассоциированы по разному (через cscript или wscript). А так можно работать ничего не меняя в системе.
Например, есть некий завод (не буду рекламировать), у них есть сервер. На сервере крутятся некоторые их программы и есть софт для нашей системы (софт для ПЛК, скада, система управления печатью этикеток и т.д.). Если у них что-то произошло, мы договариваемся и я захожу через удаленный рабочий стол и смотрю, что эти кадры сломали. Типа, поддержка. На сервере у меня, естественно, есть ФАР. Так вот, чем меньше я буду вносить изменения в их систему, тем лучше.

Ассоциации для файлов при запуске из командной строки

Posted: Fri 24 Jun, 2016 09:53
by Smitis
drkns 24.06.2016 01:15:01 +0200 - build 4723

1. Очень экспериментальная фича: встроенные ассоциации распространяются на комстроку.
Отлично! Требует тестирования, но на первый взгляд, работает.
Вопрос: расширения исполняемых файлов, как правильно понял, берутся из PATHEXT?

Ассоциации для файлов при запуске из командной строки

Posted: Fri 24 Jun, 2016 20:33
by DrKnS
Да.

Ассоциации для файлов при запуске из командной строки

Posted: Sun 26 Jun, 2016 22:12
by gene.pavlovsky
У меня, наоброт, обновление до 4725 - вылезли проблемы, очевидно из-за этой фичи.
В ассоциациях файлов для *.xml у меня стоит Execute: @"!.!"
Для того, чтобы xml файлы открывались ассоц. приложением (у меня - notepad2), а не в виде дерева в фаре.
Теперь же при нажатии на ввод на xml файл мой ComSpec (bashcmd-wrapper) рапортует, что @path/to/file.xml - неизвестная ему команда.

Ассоциации для файлов при запуске из командной строки

Posted: Sun 26 Jun, 2016 23:53
by HaRT
gene.pavlovsky wrote:В ассоциациях файлов для *.xml у меня стоит Execute: @"!.!"
Для того, чтобы xml файлы открывались ассоц. приложением (у меня - notepad2), а не в виде дерева в фаре.
Так пропишите @cmd.exe /c start "" "!\!.!" — и будет так, как Вам надо.

Ассоциации для файлов при запуске из командной строки

Posted: Mon 27 Jun, 2016 00:19
by gene.pavlovsky
Было всё нормально, работало. Имхо такая экспериментальная фича должна быть опцией, также как сейчас опция - Use windows registered types.

Ассоциации для файлов при запуске из командной строки

Posted: Mon 27 Jun, 2016 00:29
by HaRT
gene.pavlovsky, а точно дело именно в этой фиче, а не в других недавних изменениях запускатора?

Ассоциации для файлов при запуске из командной строки

Posted: Mon 27 Jun, 2016 08:05
by Smitis
gene.pavlovsky
А что делает execute: ? (я имею ввиду код)

Ассоциации для файлов при запуске из командной строки

Posted: Mon 27 Jun, 2016 09:09
by gene.pavlovsky
HaRT wrote: а точно дело именно в этой фиче, а не в других недавних изменениях запускатора?
Не уверен, но в билде 4720 этой проблемы нету, а в 4725 - есть.
Smitis wrote: А что делает execute: ? (я имею ввиду код)
Под Execute (command) имеется в виду настройка ассоциации, отвечающая за поведение при Enter на файле. Само содержимое это только @"!.!"