1

Может быть установлен псевдоним для сеанса рабочего стола, как он может быть установлен в терминале? На самом деле я не уверен, что настольные сессии работают так же. Есть ли какой-то центральный интерпретатор, который интерпретирует команды из всех приложений с графическим интерфейсом (своего рода серверная оболочка) или как это работает?

Что мне нужно сделать, это установить псевдоним gvim = "gvim --remote-tab-silent" для сеанса KDE, чтобы в настройках Krusader или в любом другом приложении с графическим интерфейсом при вызове gvim gvim с помощью --remote-tab-silent will быть призван.

Как это сделать (без включения в скрипт)?

1 ответ1

2

Это зависит. Графические программы обычно используют те же методы, что и неграфические; то есть один из:

  • Иногда программа передает список параметров непосредственно ядру, используя что-то вроде:

    if (fork() == 0)
        execlp("vim", "--remote-tab-silent", "/home/LeNoob/somefile.txt", NULL);
    

    Различные функции exec*() сообщают ядру:«Запустите именно это и передайте точный список параметров командной строки в argv[] ».

  • В других случаях программы попросят оболочку - /bin/sh - интерпретировать командную строку:

    system("vim $HOME/.bashrc");
    

    Это практически та же оболочка, что и в терминалах, но она запускается в неинтерактивном режиме с использованием опции -c . Кроме того, это всегда /bin/sh по соглашению, независимо от того, какую оболочку (bash, zsh ...) вы выбрали для интерактивного использования. Таким образом, вышеупомянутое грубо так же, как:

    if (fork() == 0)
        execl("/bin/sh", "-c", "vim $HOME/.bashrc");
    

    (Сама оболочка, конечно, будет использовать exec*() напрямую.)

  • Наконец, среды рабочего стола, использующие D-Bus, могут использовать его для запуска различных служб, просто отправив сообщение на желаемое "имя шины" (например, org.gnome.gedit). Также известный как "активация шины", когда dbus-daemon видит программу, отправляющую сообщение на имя шины, которой на данный момент ничего не "принадлежит", он ищет в своей конфигурации путь к программе и снова использует exec () для ее запуска.

    Это часто используемая функция D-Bus, но в основном только для фоновых сервисов, таких как "dconf". В будущем GNOME планирует использовать это для запуска обычных приложений, таких как Nautilus или Gedit. Однако прямо сейчас он использует тот же метод, что и все другие DE, читая соответствующий файл .desktop [см. Ниже] и exec () непосредственно в программе, так что я включил это только для полноты.

(Конечно, в реальных программах нет жестко запрограммированных "vim" и "somefile.txt" - они используют что-то вроде getenv("EDITOR") и нужного имени файла - но вы понимаете, в чем дело).

Тем не менее, все это на самом деле не имеет значения, так как оболочка никогда не интерпретирует псевдонимы в не интерактивном режиме, и в то время как он будет интерпретировать функции оболочки, он никогда не будет читать ваш ~/.bashrc , чтобы увидеть , какие функции вы определили.


Итак, следующие вопросы: как настроить gVim в качестве текстового редактора? и ваша программа ищет gvim в каталогах $ PATH, или она берет полный путь /usr/bin/gvim из своего файла конфигурации?

В терминальных программах используется переменная $EDITOR , поэтому вместо EDITOR=gvim вы можете использовать EDITOR="gvim --remote-tab-silent" в вашем ~/.profile или аналогичном.

Среды рабочего стола находят gVim в соответствии с /usr/share/applications/gvim.desktop - в частности, строкой Exec=gvim -f %F , которая только говорит им запустить gvim но не говорит, где она находится, поэтому $ PATH будет используемый. Это означает, что его можно переопределить двумя способами:

  • Вы можете создать скрипт, который обернет gvim и поместить его где-нибудь в начале $ PATH - например, вызвать скрипт ~/bin/gvim затем поместить ~/bin в начале $ PATH;

  • или вы можете скопировать файл .desktop из /usr в ~/.local/share/applications/gvim.desktop и изменить строку Exec= чтобы иметь нужные параметры:

    Exec=gvim --remote-tab-silent -f %F
    

    (Обычно изменения будут получены немедленно, но если этого не произойдет , попробуйте запустить kbuildsycoca4 или kbuildsycoca4 --noincremental из терминала.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .