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

Хотите говорить о Far и не знаете, куда обратиться?
User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

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

Post by John Doe » Thu 21 Sep, 2017 14:14

Latest post of the previous page:

Вообще-то я о принципе. На примере *.py, но в фаре у каждого свои ассоциации.
Плюс, системными ассоциациями проблематично например сделать запуск фаровских плагинов, по префиксу.

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

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

Post by gene.pavlovsky » Thu 21 Sep, 2017 15:42

HaRT, это уже обсуждалось в начале темы, но было высказано мнение, что иногда хочется иметь portable версию Фара, которую можно использовать на чужой системе без необходимости менять системные ассоциации файлов.

User avatar
DrKnS
Posts: 4637
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Thu 21 Sep, 2017 21:50

John Doe wrote:
Wed 20 Sep, 2017 14:51
Жмём Enter на файле, получаем макрообласть "Shell".
Запускаем то же самое из командной строки - получаем "Other".
Other - это десктоп, на фоне которого отображается сообщение.
John Doe wrote:
Wed 20 Sep, 2017 14:51
по макрообласти Other я пытаюсь определить, установлен ли в данный момент режим UserScreen, соответственно надо ли вызвать Get/SetUserScreen
Почему бы не вызывать всегда?
John Doe wrote:
Thu 21 Sep, 2017 08:28
Нашёл настройку, которая влияет
Раньше не влияла, потом я зачем-то добавил, причину не помню. Возможно, как-то связано с альтернативными комспеками и идущими с ними файлами без расширения.
5036. Если у вас что-то поломалось - кричите.

User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

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

Post by John Doe » Fri 22 Sep, 2017 07:37

DrKnS wrote:
Thu 21 Sep, 2017 21:50
Other - это десктоп, на фоне которого отображается сообщение.
Бесспорно, тут всё логично.
Выходит что в этой ситуации я никак не могу выяснить, активен ли в данный момент UserScreen или нет (т.е. вызывался ли перед этим GetUserScreen).
В некоторых случаях достаточно использовать какой-то свой флаг, но этого точно недостаточно, если UserScreen использовать как универсальный способ отображения десктопа в любой момент (например в редакторе)
Как вариант, для определения текущего режима можно было бы задействовать неиспользуемый сейчас в FCTL_GETUSERSCREEN Param2.
DrKnS wrote:
Thu 21 Sep, 2017 21:50
Почему бы не вызывать всегда?
Потому что запускаемый скрипт может использовать диалоговые функции, а значит после FCTL_SETUSERSCREEN в буфере останется мусор.

А вообще для моих целей крайне желательно при запуске вообще не переключаться в Desktop, а оставлять панели.
(При запуске обычных команд этого мы добиваемся добавляя в начало символ @)
Добавлено
Мне кажется то что сейчас при запуске префикса гасятся панели, и в фоне отображается Desktop это вообще напрасное действие, потому что "нарисовать" что-то на этом десктопе всё равно не получится, не вызвав предварительно GetUserScreen.
http://bugs.farmanager.com/view.php?id=3501
Last edited by John Doe on Fri 22 Sep, 2017 07:58, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

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

Post by John Doe » Fri 22 Sep, 2017 07:48

DrKnS wrote:
Thu 21 Sep, 2017 21:50
John Doe wrote:
Thu 21 Sep, 2017 08:28
Нашёл настройку, которая влияет
Раньше не влияла, потом я зачем-то добавил, причину не помню. Возможно, как-то связано с альтернативными комспеками и идущими с ними файлами без расширения.
5036. Если у вас что-то поломалось - кричите.
Возможно это было как раз для описанного выше случая:
gene.pavlovsky wrote:
Thu 21 Sep, 2017 09:42
Пишу, допустим, "python script.py", запускаю, Фар пытается выполнить команду напрямую, без ComSpec-а, при этом он находит Cygwin-ский symlink: python => python2.7.exe, но не знает, что с ним делать, вылезает сообщение об ошибке.
Хотя лично мне например не удалось с помощью ASSOC/FTYPE добиться того, чтобы созданная ассоциация работала (в cmd).

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

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

Post by Smitis » Fri 22 Sep, 2017 09:46

John Doe wrote:
Fri 22 Sep, 2017 07:48
Хотя лично мне например не удалось с помощью ASSOC/FTYPE добиться того, чтобы созданная ассоциация работала (в cmd).
А в PATHEXT расширение добавили?
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

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

Post by John Doe » Fri 22 Sep, 2017 10:27

Smitis wrote:
Fri 22 Sep, 2017 09:46
А в PATHEXT расширение добавили?
Выше говорилось, что файлы без расширения нельзя добавить. Похоже что можно:
set pathext

Code: Select all

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.
После этого при запуске предлагает программу для открытия.
Но флажок "Использовать её для всех файлов такого типа" недоступен, серый. Т.е. толку мало..

В любом случае, PATHEXT тут врядли применим, ведь я пытался запустить файл из текущей папки.

Ассоциацию я пробовал и вручную задать:
assoc .

Code: Select all

.=noext
ftype noext

Code: Select all

noext=echo %1

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

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

Post by HaRT » Fri 22 Sep, 2017 12:29

John Doe, насколько я понимаю, в системной ассоциации надо указать именно исполняемый файл (например, %COMSPEC%). echo таковым не является. Впрочем, для файлов без расширения у меня и это не завелось (но не очень-то и хотелось).
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

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

Post by John Doe » Fri 22 Sep, 2017 12:41

А вот кстати вы правильно указали на мою ошибку.

Code: Select all

ftype noext=cmd /c echo %1
После этого у меня файлы без расширения заработали как исполняемые.

PATHEXT тоже правил.

P. S.
Проблема только в том, что фар это в новом окне открывает.
Last edited by John Doe on Fri 22 Sep, 2017 12:50, edited 1 time in total.

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

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

Post by Smitis » Fri 22 Sep, 2017 12:51

John Doe,
Я могу кое в чём ошибится, но механизм использования PATHEXT следующий:
- Исполняемыми файлами в cmd считаются файлы с расширение из pathext.
- Если файл указан без расширения, поочерёдно подставляются расширения из pathext и ищется соответствующий файл по стандартному алгоритму.
- Если файл найден, для него выполняется команда из глагола open в соответствующих разделах реестра (HKCU\Software\Classes или HKCR). Возможно, вместо open используется глагол по умолчанию, заданный в разделе выше (в shell, надо бы проверить).
Но пустое расширение не предусмотрено в реестре! Хотя в pathext такое расширение, похоже, обрабатывается.
Впрочем, попробуйте задать в реестре в HKCR расширение из одной точки, может сработает, как в pathext.
Разум когда-нибудь победит.

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

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

Post by Smitis » Fri 22 Sep, 2017 13:05

Попробовал - так работает.
- Добавил пустое расширение в PATHEXT.
- Добавил ветку HKEY_CLASSES_ROOT\.\shell\open\command со значением C:\Windows\System32\cscript.exe //nologo //e:javascript "%1"
Скрипт на JS без расширения из CMD выполнился.
А вот из ФАРа, да, открывается в отдельном окне.
Last edited by Smitis on Fri 22 Sep, 2017 13:13, edited 3 times in total.
Разум когда-нибудь победит.

User avatar
DrKnS
Posts: 4637
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Sun 24 Sep, 2017 17:06

Smitis wrote:
Fri 22 Sep, 2017 13:05
из ФАРа, да, открывается в отдельном окне.
А это даже баг.
5038.

User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

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

Post by John Doe » Mon 25 Sep, 2017 19:36

5041, продолжает открываться в отдельном

User avatar
DrKnS
Posts: 4637
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Mon 25 Sep, 2017 20:37

John Doe wrote:
Mon 25 Sep, 2017 19:36
продолжает открываться в отдельном
Указывайте полный путь, а не просто cmd.

User avatar
DrKnS
Posts: 4637
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Mon 25 Sep, 2017 21:01

А впрочем - почему бы и нет. 5045.

Post Reply

Return to “Обсуждение Far Manager”