EDITAR:
Como resultado da percepção contínua, abaixo de uma versão aprimorada do script.
Devido ao fato de que o script agora cola o caminho em vez de digitar (usando xdotool
), o script é mais confiável. Embora o script não seja realmente mais rápido (considere uma solução alternativa, devido à falta de cli options do nautilus), o script "parece" mais "crocante". Fato permanece no entanto que o script simplesmente precisa esperar que a GUI esteja pronta para cada próxima etapa, pois simula as ações do usuário. O tempo dentro do script está no lado de salvamento; em sistemas mais rápidos, pode-se conseguir alguma otimização.
Use o script exatamente como explicado na resposta original; ele (ainda) precisa dos doiswmctrl
e xdotool
a serem instalados. Esta versão também exige xclip
:
sudo apt-get install xclip
A nova versão do script:
#!/usr/bin/env python3
import subprocess
import sys
import time
arg = sys.argv[1:]
arg = arg[0] if arg else ""
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
try:
pid = get(["pidof", "nautilus"])
except subprocess.CalledProcessError:
wlist = []
else:
wlist = [l for l in get(["wmctrl", "-lp"]).splitlines() if pid in l\
and "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", l.split()[0]])]
if wlist:
w = wlist[-1].split()[0]
subprocess.call(["wmctrl", "-ia", w])
subprocess.call(["/bin/bash", "-c", "printf '"+arg+"' | xclip -selection clipboard"])
subprocess.Popen(["xdotool", "key", "Control_L+t"])
time.sleep(0.4)
subprocess.Popen(["xdotool", "key", "Control_L+l"])
time.sleep(0.2)
subprocess.call(["xdotool", "key", "Control_L+v"])
subprocess.Popen(["xdotool", "key", "Return"])
else:
subprocess.Popen(["nautilus", arg])
Resposta antiga:
O Nautilus não tem uma opção de linha de comando para abrir uma nova guia, no entanto, você pode "falsificá-lo" com a ajuda de um script, usando xdotool
e wmctrl
.
Como usar
-
Instale (se necessário)
wmctrl
exdotool
:sudo apt-get install xdotool wmctrl
-
Copie o script abaixo em um arquivo vazio, salve-o como
nautilus_tab
(sem extensão) em~/bin
e torne-o executável .
Se o diretório~/bin
ainda não existir, crie-o e executesource ~/.profile
para tornar o diretório "show up" em$PATH
. (ou alternativamente, sair / in) -
Teste-o executando o comando:
nautilus_tab <directory>
Deve:
- se nenhuma janela do nautilus estiver aberta, abra uma nova janela do nautilus no diretório
- se uma janela estiver aberta , abra uma nova guia no diretório
O script
#!/usr/bin/env python3
import subprocess
import time
import sys
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
def run(cmd):
subprocess.call(cmd)
try:
arg = sys.argv[1]
except:
arg = ""
try:
pid = get(["pidof", "nautilus"]).strip()
except subprocess.CalledProcessError:
run(["nautilus ", arg])
else:
w = [l.split() for l in get(["wmctrl", "-lp"]).splitlines() if pid in l][-1]
print(w)
w_id = w[0]
if len([l for l in get(["xprop", "-id", w_id]).splitlines() if all(
["_NET_WM_WINDOW_TYPE(ATOM)" in l, "_TYPE_NORMAL" in l])]) != 0:
run(["wmctrl", "-ia", w[0]]); time.sleep(0.1)
run(["xdotool", "key", "Control_L+t"])
if arg != "":
run(["xdotool", "key", "Control_L+l"])
time.sleep(0.2)
run(["xdotool", "type", arg])
time.sleep(0.02*len(arg))
run(["xdotool", "key", "Return"])
else:
run(["nautilus", arg])
Notas
- O script é uma solução alternativa para simular ações do usuário. Como resultado, o tempo "dentro" do script é importante. Configurei o tempo para valores "seguros" no meu sistema e tornei-o "inteligente", se possível. Se não funcionar corretamente no seu sistema, deixe um comentário.
- O script possivelmente será interrompido se a janela de segmentação (para adicionar a guia) estiver em outra área de trabalho
-
No caso de diretórios com espaços, use aspas:
nautilus_tab '</directory/with spaces>'
Se nenhum argumento (-directory) for usado, o script abrirá uma nova guia no mesmo diretório que a janela nautilus
atualmente aberta. Se nenhuma janela 'nautilus' foi aberta, uma nova janela será aberta em seu diretório pessoal.