Как работает опция "открыть с помощью" при нажатии правой кнопки мыши в большинстве графических интерфейсов Linux?
Я пытался сделать программу, которая живет в /usr/bin
, и в настоящее время он отлично работает с терминала (потому что каждый учебник для начинающих учит вас, как использовать команды терминала), но он не работает, когда я пытаюсь запустить его из файлового менеджера.
Я хочу знать, какую команду / данные / все, что отправляет Nautilus/Caja/Dolphin/PCManFM, когда файл дважды щелкается или щелкается правой кнопкой мыши и выбирается опция "Открыть с помощью", и какая программа в любом язык должен был бы сделать, чтобы получить путь к файлу, которым он должен манипулировать из этого. Единственный язык, на котором я знаю, как это сделать - это скрипт BASH, а синтаксис BASH не позволяет мне искать информацию о том, что делает мой код.
Этот предмет в целом очень трудно найти, поэтому я буду признателен за любую информацию о нем.
РЕДАКТИРОВАТЬ: уточнить, когда я нажимаю здесь:
Какие данные отправляются в программу "bleh", и как она должна использовать эти данные?
Мне не нужно повторять это...
2 ответа
Ваше приложение должно поставляться с файлом.desktop, и эти файлы размещаются в стандартном месте.
Смотрите спецификацию здесь: http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html и некоторые пояснения здесь: http://library.gnome.org/admin/system-admin-guide/stable/mimetypes-registering.html.en
Что особенно важно, чтобы ответить на ваш вопрос - это раздел "Регистрация типов MIME".
Хорошо, я понял это сам.
Имя файла, по которому щелкнули правой кнопкой мыши, передается в качестве аргумента, а рабочий каталог устанавливается как домашний каталог пользователя.
Моя проблема была вызвана тем, что моя программа пыталась работать с двумя разными целями одновременно: имя файла, отправленное ему файловым менеджером, и мой (нерелевантный) домашний каталог. Я сам указал новый целевой каталог, и теперь он работает нормально.
РЕДАКТИРОВАТЬ: Это может быть характерно для TCL. Если это так, то я прошу прощения за размещение этого вопроса.