Instância única do Terminal GNOME?

8

Eu gostaria de saber ou é possível configurar o Terminal GNOME de uma maneira que, quando eu abrir o terminal e já houver uma instância aberta, ela mostrará essa instância e não abrirá uma nova.

Humor
fonte
qual versão do ubuntu você está usando e qual ambiente? Eu pergunto, porque o que você está descrevendo é a configuração padrão no unity e no gnome-shell.
27611 martin
Estou usando o Ubuntu 11.10 com Unity-2D. Não fiz uma instalação limpa, mas uma atualização do 11.04.
Humor
Você usa Ctrl + Alt + T como um atalho?
int_ua 9/12/11
Sim. Sim ou inicio um terminal digitando "ter» enter "no Kupfer. Esses são os 2 métodos que eu uso. Como não olho para o Laity com muita frequência, acabo com 3, 4 terminais diferentes.
Humor

Respostas:

8

Eu escrevi um script de shell simples usando wmctrl para dar foco ao Terminal. Faz exatamente o que eu quero.

Primeiro, instale o wmctrl sudo apt-get install wmctrl.

Em seguida, inicie um editor de texto e copie as seguintes linhas.

#!/bin/sh
SERVICE='gnome-terminal'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
  wmctrl -xa $SERVICE
else
  $SERVICE
fi

Salve o arquivo em algum lugar onde você normalmente mantém seus scripts de shell. No meu caso, fiz: ~/bin/single_instance.sh

cd para o diretório ( cd ~/bin) e torne o arquivo executávelchmod +x single_instance.sh

Agora, abra o Menu Principal, selecione Acessórios » Propriedades da impressora terminal e substitua o comando pelo script:~/bin/single_instance.sh

Abra Configurações do sistema »Teclado» Atalhos . Desative o atalho do Terminal de inicialização , dando a ele um backspace. Faça um atalho personalizado. Novamente, preencha o caminho e o nome do script e dê a combinação de teclas ctrl + alt + t .

Você está pronto, terminal de instância única ...

Humor
fonte
Por que não tornar seu script o iniciador de terminal padrão? Por que todas as etapas para adicionar atalhos e tudo? +1 para o script, -1 para a implementação.
Bruno Pereira
Honestamente ... não sei como fazer isso. Eu olhei para aplicativos padrão e não vi terminal. Também estou convencido de que a versão anterior do Ubuntu tinha campos de texto onde os comandos podiam ser inseridos. Esta versão dos aplicativos padrão é todos os menus suspensos.
Mood
2

Adicione --tab ao comando do iniciador. Então você acaba com apenas um aplicativo. aberto.

~$ gnome-terminal --help-all
:
--tab       Open a new tab in the last-opened window with the default profile
david6
fonte
Não, não quero uma nova guia. Quero que o terminal mude para o primeiro plano no estado em que o deixei pela última vez.
Mood
11
Isto apenas abre novas janelas para mim no Ubuntu 16.04
beruic
0

É o comportamento padrão se você usar o atalho Mod4+#( Mod4= Super = "Windows", #é o número no iniciador) para abrir qualquer aplicativo.

int_ua
fonte
Sim, eu estou ciente disso. Ainda assim, tenho que ter um terminal aberto para começar. Eu quis dizer quando pressiono control + alt + t ou abro no Kupfer. Estou procurando o mesmo comportamento do Chrome, por exemplo: se uma instância estiver aberta, mostre-me essa instância, se nenhuma instância abrir uma nova instância.
Humor
0

Eu generalizei e simplifiquei um pouco o script do @Mood. Agora é necessário um parâmetro de linha de comando e, em vez disso, use pgrep.

sudo apt-get install procps

O script:

#!/usr/bin/env bash

if pgrep $1
then
    wmctrl -xa $1
else
    $1
fi
Einar
fonte
0

Eu gostaria de adicionar meu próprio script, pois acho extremamente útil:

  1. Se houver um terminal gnomo no espaço de trabalho atual, ele o trará para a frente e dará foco
  2. Se não houver nenhum terminal-gnomo no espaço de trabalho atual, ele alterna o espaço de trabalho e traz o primeiro terminal-gnomo existente encontrado para a frente e dá foco
  3. Se não houver instâncias do gnome-terminal em execução, ele abre uma nova instância, coloca-a na frente e dá foco

Eu configurei o atalho Ctrl + Alt + T para executar esse script e acho ainda mais confortável que o Guake ou o Tilda.

#!/usr/bin/env sh

# APP is the binary name you see when you do ps
APP="gnome-terminal"
# WIN_CLASS is the window class you see when you do wmctrl -lx
WIN_CLASS="gnome-terminal-server.Gnome-terminal"

# Use the app from current workpace first, or any if not available
WORKSPACE=$(wmctrl -d | grep '\*' | cut -d ' ' -f1)
TPID=$(ps aux | pgrep $APP)
if [ "$TPID" ]
then
  QTERM_WIN=$(wmctrl -lx | grep $WIN_CLASS | grep $WORKSPACE  | awk 'NR == 1 {print $1}')
  if [ "$QTERM_WIN" ]
  then
    wmctrl -ia $QTERM_WIN
  else
    # No valid app found in the current workspace, switch to any
    QTERM_WIN=$(wmctrl -lx | grep $WIN_CLASS | awk 'NR == 1 {print $1}')
    wmctrl -ia $QTERM_WIN
  fi
else
  $APP &
fi

Eu o uso com o QTerminal, mas modifiquei para atender às suas necessidades. Boa sorte

Emilio M.
fonte