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/shpor 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
.desktoprelevante [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
gvime coloque em algum lugar no início do $ PATH. Por exemplo, chame o script~/bin/gvime, em seguida, coloque~/binno início de $ PATH; -
ou você pode copiar o arquivo .desktop de / usr para
~/.local/share/applications/gvim.desktope 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
kbuildsycoca4oukbuildsycoca4 --noincrementalde um terminal.)