determine (no script) se o comando é executado no terminal (do arquivo da área de trabalho?)

4

Simplificado, quero escrever uma função shell que execute um programa em uma nova janela. Para aplicativos como… emacs, firefox, gitk, que podem ter esta aparência:

myopen() {
  $@
}

Mas quero abrir aplicativos que são executados no terminal em um novo terminal, por exemplo, para alsamixer, vim, bash, zsh, ele deve se parecer com

myopen() {
  urxvt -e "$@"
}

Eu vi que arquivos .desktop contêm as informações se eles devem ser executados em um terminal (para vim / gvim)

[Desktop Entry]
Name=Vim
GenericName=Text Editor
TryExec=vim
Exec=vim %F
Terminal=true

ou

[Desktop Entry]
Name=GVim
GenericName=Text Editor
TryExec=gvim
Exec=gvim -f %F
Terminal=false

existe uma interface existente para consultar o Terminal arquivado (ou seja, sem usar locate e grep para localizar o arquivo .desktop e analisá-los)?

Portanto, no código quase quero preencher a lacuna

myopen() {
  TERMINALFIELD=$(xdg-app-uses-terminal $1) # this line is made up
  if [[ TERMINALFIELD == true ]]; then
    urxvt -e "$@"
  else
    $@
  fi
  return $?
}
    
por pseyfert 25.12.2016 / 16:49

1 resposta

4

Parece que gtk-launch fará o que você deseja. Ele iniciará um aplicativo usando as informações no arquivo .desktop . Aqui estão algumas informações relevantes da página man:

gtk-launch takes at least one argument, the name of the application to launch. The name should match application desktop file name, as residing in /usr/share/application, with or without the '.desktop' suffix.

    
por 25.12.2016 / 19:13