Page 1 of 2

Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 2:24 am
by Mario_r4
На настоящий момент мы имеем три официально поддержанных файловых менеджера: KFAR, KFM, Eolite. Все они производят запуск по ассоциациям, у каждого собственный файл INI с ассоциациями. Ситуация не самая полезная - думаю с этим никто не будет спорить. Править один файл с ассоциациями проще и надежней, чем три файла.

Одно время даже была идея сделать библиотеку ассоциаций и один из разработчиков (не будем тыкать пальцем, но это дальний родственник пресловутого Слонёнка и если захочет сам сознается) даже брался сделать, но как обычно "обстоятельства непреодолимой силы"
Spoiler:Так, обстоятельства непреодолимой силы могут вытекать из следующих событий, перечень которых не является исчерпывающим: война, как объявленная, так и необъявленная, гражданская война, бунты и революции, пиратские действия, акты саботажа; стихийные бедствия: бури, циклоны, землетрясения, цунами, наводнения, вред, причиненный молнией; аварии, взрывы, пожары, уничтожение машин, пошел на хуй, предприятий и всякого рода оборудования, за исключением незначительных аварий у стороны, в случае если они были вызваны отсутствием запасных частей, износом оборудования и другими обстоятельствами, которые сторона должна была предвидеть при принятии на себя обязательств по договору; бойкот, забастовки и локауты, уклонение от труда работников, занятие предприятий и их территорий; акты государственных органов государств сторон и иных государств, в том числе местных органов управления и самоуправления, как законные, так и незаконные (за исключением случаев отсутствия у стороны полномочий или специальных разрешений (лицензий), права въезда или нахождения или согласия, необходимых для исполнения договора, выдаваемых государственными органами), а также собственная лень и необязательность.
Нужное подчеркните сами.
помешали реализации благого начинания.

Впрочем идея эта не о библиотеке, а о программе которая возьмет на свои плечи запуск по ассоциации и возможно будет отрисовывать меню выбора, в случае более одной ассоциации (смотреть, редактировать и т.д). Для полного счастья еще предстоит сделать одну более старую задумку. Можно также сделать окно для отображения названия запускаемого приложения, если его размер превышает определенные размеры.

З.Ы. Создавая этот псто я полностью осознаю п.1, потому что в этом мире надеяться можно только на себя.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 6:17 am
by SoUrcerer
Вот это правильное предложение!

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 10:11 am
by dunkaist
Mario_r4 wrote:Одно время даже была идея сделать библиотеку ассоциаций и один из разработчиков (не будем тыкать пальцем, но это дальний родственник пресловутого Слонёнка и если захочет сам сознается) даже брался сделать, но как обычно "обстоятельства непреодолимой силы"
Spoiler: Show

помешали реализации благого начинания.
Я тут. Советов не просили, но вдруг окажется полезно: в libini есть удобная для таких задач функция ini.enum_keys. Хотя, конечно, всё зависит от реализации.

Code: Select all

;;================================================================================================;;
proc ini.enum_keys _f_name, _sec_name, _callback ;////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Enumerate keys within a section, calling callback function for each of them                    ;;
;;------------------------------------------------------------------------------------------------;;
;> _f_name = ini filename <asciiz>                                                                ;;
;> _sec_name = section name <asciiz>                                                              ;;
;> _callback = callback function address: func(f_name, sec_name, key_name, key_value), where      ;;
;>   f_name = ini filename (as passed to the function) <asciiz>                                   ;;
;>   sec_name = section name (as passed to the function) <asciiz>                                 ;;
;>   key_name = key name found <asciiz>                                                           ;;
;>   key_value = value of key found <asciiz>                                                      ;;
;;------------------------------------------------------------------------------------------------;;
;< eax = -1 (error) / 0                                                                           ;;
;;================================================================================================;;

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 11:15 am
by 0CodErr
Mario_r4 wrote:у каждого собственный файл INI с ассоциациями
Можно использовать и один для всех ini-файл.
Вообще можно настройки(ini, dat и т.п) хранить в отдельной папке(например /sys/settings). Но тут ешё возникает вопрос, настройки принадлежат всей системе или же только конкретной программе.
Может возникнуть необходимость просто узнать путь к ассоциированной программе, а не сразу пытаться запустить.
Или, например, появится какая-нибудь отдельная программа для работы с архивами(в том числе zip). Kfar сейчас заходит в архив как в папку, а другой ФМ захочет открывать в отдельной программе.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 11:51 am
by Leency
Отличная идея. Как насчёт того, чтобы этот файл содержал не только ассоциаци
расширение = программа
но и
расширение = иконка?

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 11:56 am
by Mario_r4
Leency wrote:Отличная идея. Как насчёт того, чтобы этот файл содержал не только ассоциаци
расширение = программа
но и
расширение = иконка?
Пищевод работает только в одну сторону и все попытки заставить его работать в обратную сторону заканчиваются с неожиданными результатами - это не библиотека.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:01 pm
by Mario_r4
0CodErr wrote:Можно использовать и один для всех ini-файл.
Можно, но лишний код никуда не денешь.
0CodErr wrote:Вообще можно настройки(ini, dat и т.п) хранить в отдельной папке(например /sys/settings). Но тут ешё возникает вопрос, настройки принадлежат всей системе или же только конкретной программе.
Реестр пока не нужен, совсем не нужен.
0CodErr wrote:Может возникнуть необходимость просто узнать путь к ассоциированной программе, а не сразу пытаться запустить.
Звчем?
0CodErr wrote:Или, например, появится какая-нибудь отдельная программа для работы с архивами(в том числе zip). Kfar сейчас заходит в архив как в папку, а другой ФМ захочет открывать в отдельной программе.
Программе какая то религия запрещает вызывать запускальщик не для всех случаев и по собственному усмотрению?

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:02 pm
by Leency

Code: Select all

[run]
txt = /sys/tinypad
asm = /sys/tinypad
gif = /sys/media/kiv

[icons]
txt = 1
asm = 1
gif = 3

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:04 pm
by Mario_r4
dunkaist wrote:Я тут.
Очень рад, что сам сознался. :lol:
dunkaist wrote: Советов не просили, но вдруг окажется полезно: в libini есть удобная для таких задач функция ini.enum_keys. Хотя, конечно, всё зависит от реализации.
Можно, но опять же не универсальный выход. Это лучше в самом заспускальшике использовать.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:08 pm
by Mario_r4
Leency wrote:

Code: Select all

[run]
txt = /sys/tinypad
asm = /sys/tinypad
gif = /sys/media/kiv

[icons]
txt = 1
asm = 1
gif = 3
Запуск по ассоциации - универсальное решение, а иконки нужны не всем и они могут быть разными для разных программ.

З.Ы. Тут уже один бывший школьник (не будем тыкать пальцем, но тоже дальний родственник слоненка, а вернее крольчонка) очень сильно хотел иконки в бинарник размещать, не нужно повторять его опыт.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:15 pm
by dunkaist
Mario_r4 wrote:Это лучше в самом заспускальшике использовать.
Я это и имел в виду. В своё время думал, как просмотреть все строки из конфига, если пользователь может руками добавить какой угодно непредсказуемый ключ вроде torrent=/hd1/2/torrent_client.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:28 pm
by Leency
>> З.Ы. Тут уже один бывший школьник очень сильно хотел иконки в бинарник размещать, не нужно повторять его опыт

А сейчас ты предлагаешь, чтобы каждый ФМ, open dialog и другие программы (например, браузер показывает иконку закаченного файла) имели свой набор иконок и ассоциаций? Чем это лучше идеи Максимыча?
Предлагаю одно место с ассоциациями. Набор иконок можно будет обсудить. И не обязательно ВСЕМ его юзать, но пусть бы он был в одном месте - и то, порядка было бы больше, а это то, зачем ты создал эту тему.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 12:41 pm
by Mario_r4
Leency wrote:Предлагаю одно место с ассоциациями. Набор иконок можно будет обсудить. И не обязательно ВСЕМ его юзать, но пусть бы он был в одном месте - и то, порядка было бы больше, а это то, зачем ты создал эту тему.
1) Еще раз - программа работает в одну сторону, библиотека работает в обе стороны. Я предложил сделать программу.
2) У каждого собственные понятия "о порядке".
3) Тему я создал для важности (чтобы гордо надувать щеки и бить себя пяткой в грудь), ведь у нас есть п.2, и чтобы учесть мнения по существу вопроса, а не на отвлеченную тему.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 1:03 pm
by 0CodErr
Mario_r4 wrote:Запуск по ассоциации - универсальное решение, а иконки нужны не всем и они могут быть разными для разных программ.
Здесь вопрос в том, кому принадлежит иконка: системе, ФМ или ассоциированной программе. В больших ОС ассоциированная программа при установке может сообщить системе о своих иконках. Мы сейчас хотим, чтобы все ФМ использовали общие настройки. Вполне логично здесь считать, что они принадлежат системе.

Если иконка не нужна(например Kfar-у она не нужна), то просто не надо читать настройки иконок. Это по аналогии с этим:
Mario_r4 wrote:Программе какая то религия запрещает вызывать запускальщик не для всех случаев и по собственному усмотрению?
Вот мы и не будем для всех случаев читать настройки иконок.
Mario_r4 wrote:Реестр пока не нужен, совсем не нужен.
Но по факту он есть: ini, dat, и т. п. Чем не реестр? Как его не называй — суть одна.

Re: Запускальщик по ассоциации

Posted: Sat Jun 22, 2013 1:13 pm
by Mario_r4
0CodErr
1) Я не буду делать иконки и точка. Кому действительно нужно сделает сам.
2) Еще раз - это будет просто программа, без обратных связей. Передача каких либо параметров обратно, в том числе и иконок - не предусматривается.

Все, закрываем тему с иконками. Мне лично это не нужно, если вам нужно - сделаете сами.