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

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Tue 21 Jun, 2016 15:53

gene.pavlovsky
Для всех этих манипуляций ФАРу явно не хватает собственных ассоциаций, на подобие уже существующих, но для командной строки. Поясню - сейчас, можно задать ассоциацию, скажем *.sh и запускать такие файлы через bash по Enter. Но для командной строки такого нет. А если бы можно было задать расширения и ассоциированные с ними приложения, подставлять и искать файлы с этими расширениями (т.е. всё как сейчас, только не на уровне ОС, а на уровне ФАРа), то никаких бы замен COMSPEC не нужно было. Расширение sh ассоциируем с bash, ему передаётся командная строка as is и всё работает.
Last edited by HaRT on Wed 22 Jun, 2016 12:11, edited 1 time in total.
Reason: Добавлена ссылка на исходную тему
Разум когда-нибудь победит.

User avatar
DrKnS
Posts: 4501
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 110 times
Contact:

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

Postby DrKnS » Tue 21 Jun, 2016 18:42

Smitis wrote:Source of the post ФАРу явно не хватает собственных ассоциаций, на подобие уже существующих, но для командной строки.
В принципе, существующим ассоциациям можно разрешить работать в комстроке и предусмотреть передачу аргументов по %1 %2 %3 ... %* или ещё как.

gene.pavlovsky
Posts: 157
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Postby gene.pavlovsky » Tue 21 Jun, 2016 19:03

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

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Tue 21 Jun, 2016 20:37

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

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

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Tue 21 Jun, 2016 21:20

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

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

gene.pavlovsky
Posts: 157
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Postby gene.pavlovsky » Tue 21 Jun, 2016 22:05

А что это всё даёт, чего нельзя добиться стандартными ассоциациями винды?

Code: Select all

assoc .php=phpfile
ftype phpfile="C:\usr\local\wnmp\php\php.exe" -f "%1" -- %~2

И можно запускать script.php arg1 arg2 ... с командной строки.

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Tue 21 Jun, 2016 23:11

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

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Fri 24 Jun, 2016 09:53

drkns 24.06.2016 01:15:01 +0200 - build 4723

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

User avatar
DrKnS
Posts: 4501
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 110 times
Contact:

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

Postby DrKnS » Fri 24 Jun, 2016 20:33

Да.

gene.pavlovsky
Posts: 157
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Postby gene.pavlovsky » Sun 26 Jun, 2016 22:12

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

User avatar
HaRT
Moderator
Posts: 7953
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

Postby HaRT » Sun 26 Jun, 2016 23:53

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

gene.pavlovsky
Posts: 157
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Postby gene.pavlovsky » Mon 27 Jun, 2016 00:19

Было всё нормально, работало. Имхо такая экспериментальная фича должна быть опцией, также как сейчас опция - Use windows registered types.

User avatar
HaRT
Moderator
Posts: 7953
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

Postby HaRT » Mon 27 Jun, 2016 00:29

gene.pavlovsky, а точно дело именно в этой фиче, а не в других недавних изменениях запускатора?
Фар есть инструмент, а не нянька. © 2009 DrKnS

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Mon 27 Jun, 2016 08:05

gene.pavlovsky
А что делает execute: ? (я имею ввиду код)
Разум когда-нибудь победит.

gene.pavlovsky
Posts: 157
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Postby gene.pavlovsky » Mon 27 Jun, 2016 09:09

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

Smitis
Posts: 1438
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 22 times
Contact:

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

Postby Smitis » Mon 27 Jun, 2016 10:21

Добавил себе для проверки такую ассоциацию. Специального приложения для xml у меня нет, поэтому по Enter xml открывается в IE, при любом значении Use Windows registered types. При этом стоит плагин XML Browser (видимо, это тот, который показывает xml в виде дерева, других плагинов для xml, вроде, нет), но он при такой ассоциации по Enter не ничего открывает, только по CtrlDown.
Разум когда-нибудь победит.


Return to “Предложения и идеи”

Who is online

Users browsing this forum: No registered users and 4 guests