Depende. Programas gráficos geralmente usam os mesmos métodos que os não gráficos; isto é, um dos:
-
Às vezes, o programa entrega uma lista de parâmetros diretamente ao kernel, usando algo como:
if (fork() == 0) execlp("vim", "--remote-tab-silent", "/home/LeNoob/somefile.txt", NULL);
As várias funções
exec*()
dizem ao kernel, "execute exatamente essa coisa e passe essa lista exata de opções de linha de comando paraargv[]
." -
Outras vezes, os programas solicitarão ao shell -
/bin/sh
- interpretar uma linha de comando:system("vim $HOME/.bashrc");
É praticamente o mesmo shell dos terminais, mas é executado no modo não interativo usando a opção
-c
. Além disso, é sempre/bin/sh
por convenção, independentemente de qual shell (bash, zsh ...) você escolheu para usar interativamente. Então, o acima é praticamente o mesmo que:if (fork() == 0) execl("/bin/sh", "-c", "vim $HOME/.bashrc");
(O próprio shell, é claro, usará
exec*()
diretamente.) -
Por fim, os ambientes de área de trabalho que usam o D-Bus podem usá-lo para iniciar vários serviços simplesmente enviando uma mensagem para o "nome do barramento" desejado (por exemplo,
org.gnome.gedit
). Também conhecido como "ativação de barramento", quando o dbus-daemon vê um programa enviando uma mensagem para um nome de barramento que atualmente "não possui", ele procura sua configuração pelo caminho do programa e novamente usa exec () para iniciá-lo.Este é um recurso D-Bus comumente usado, mas principalmente apenas para serviços em segundo plano como "dconf". No futuro, o GNOME está planejando usar isso para também iniciar aplicativos comuns como o Nautilus ou o Gedit. No entanto, neste momento, ele usa o mesmo método que todos os outros DEs, lendo o arquivo
.desktop
relevante [veja abaixo] e exec () 'inserindo o programa diretamente, então estou apenas incluindo isto para completar.
(É claro que programas reais não têm "vim"
e "somefile.txt"
codificados neles - eles usam algo como getenv("EDITOR")
e o nome do arquivo desejado - mas você obtém o ponto.)
No entanto, nada disso importa , uma vez que o shell nunca interpreta apelidos no modo não interativo, e enquanto interpretaria as funções do shell, ele nunca lerá o seu ~/.bashrc
para ver quais funções você definiu.
Portanto, as próximas perguntas são: como você configura o gVim como seu editor de texto; e seu programa procura pelos diretórios gvim
in $ PATH ou leva o caminho completo /usr/bin/gvim
de seu arquivo de configuração?
Programas baseados em terminal usam a variável $EDITOR
, então, em vez de EDITOR=gvim
, você pode usar EDITOR="gvim --remote-tab-silent"
em seu ~ / .profile ou similar.
Os ambientes de área de trabalho encontram o gVim de acordo com /usr/share/applications/gvim.desktop
- especificamente, a linha Exec=gvim -f %F
, que somente diz a eles para iniciar gvim
, mas não diz onde está, então $ PATH será usado. Isso significa que pode ser substituído de duas maneiras:
-
você pode criar um script que envolva
gvim
e coloque em algum lugar no início do $ PATH. Por exemplo, chame o script~/bin/gvim
e, em seguida, coloque~/bin
no início de $ PATH; -
ou você pode copiar o arquivo .desktop de / usr para
~/.local/share/applications/gvim.desktop
e alterar a linhaExec=
para ter as opções desejadas:Exec=gvim --remote-tab-silent -f %F
(Normalmente, as alterações serão coletadas imediatamente, mas, se não forem, tente executar
kbuildsycoca4
oukbuildsycoca4 --noincremental
de um terminal.)