Não gosto de ter dezenas de terminais abertos. Existe uma maneira de adicionar Abrir no Terminal atual em vez de Abrir no Terminal ao usar o Nautilus?
Não gosto de ter dezenas de terminais abertos. Existe uma maneira de adicionar Abrir no Terminal atual em vez de Abrir no Terminal ao usar o Nautilus?
Respostas:
Suja ou não, a solução abaixo funcionou perfeitamente nos 30 minutos que a testei com frequência. A solução funciona desde que você possa clicar com o botão direito do mouse em um arquivo (qualquer) dentro do diretório:
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
t = get(["pgrep", "gnome-terminal"])
if t:
w = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if t in l][0]
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# raise the found terminal window
subprocess.call(["wmctrl", "-ia", w])
time.sleep(0.3)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
As necessidades de script wmctrl
, xdotool
e xclip:
sudo apt-get install wmctrl xdotool xclip
Copie o script para um arquivo vazio, salve-o como open_in_terminal
(sem extensão) em ~/.local/share/nautilus/scripts
. Crie o diretório, se necessário. Tornar o script executável
É isso aí. Efetue logout e logon novamente e você terá o script disponível como na imagem (2).
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
janela (encontrada primeiro) e cola o caminho, precedido pelo cd
comando. Desde que costumávamos echo
carregar toda a linha na área de transferência, Returnestá incluído.gnome-terminal
janela mais antiga .Mais informações sobre scripts nautilus aqui .
Se você quiser escolher em qual janela do terminal abriria o diretório atual (nautilus), use o script abaixo.
Clique com o botão direito do mouse (qualquer) arquivo dentro do diretório (neste caso, minha área de trabalho) como abaixo:
Clique em (ou aumente o contrário) na janela do terminal que você gostaria de usar, e ela acessará o diretório:
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
# check if gnome-terminal runs
pid = get(["pgrep", "gnome-terminal"])
if pid:
t = 0
while t < 30:
# see if the frontmost window is a terminam window
active = get(["xdotool", "getactivewindow"])
if pid in get(["xprop", "-id", active]):
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
break
else:
t += 1
time.sleep(0.5)
É exatamente como o primeiro script.
O script tem uma diferença em relação à primeira: em vez de aumentar automaticamente a primeira janela do terminal encontrada, aguarda que a primeira janela do terminal tenha foco. Em seguida , o CD está no diretório dentro dessa janela.
~/.local/share/nautilus/scripts
de logout e volta :)
None
porque não existe essa variável (fora do Nautilus).
Tenho certeza de que não há como fazer isso, no entanto, tenho uma solução alternativa para você que pode ajudar.
Você sempre pode arrastar e soltar um diretório do Nautilus em uma janela do terminal e o Nautilus passa esse diretório e colá-lo na linha de comando, para que você possa fazer cd
e arrastar a pasta para o terminal e pressionar Enter.
A maneira mais simples é a seguinte:
cd
, espaço e, em seguida, Shift+Insert (or INS) para colar o caminho. Hit Enter.Não há necessidade de scripts ou trabalho extra.
Na minha opinião, a única maneira elegante de resolver isso sem mexer é usar um multiplexador de terminal como o tmux e ter seu gerenciador de arquivos
O seguinte script de shell alcança exatamente isso:
#!/bin/sh
set -e
TMUX=tmux
#TERMINAL_EMULATOR='gnome-terminal -x'
cd "$1"
if $TMUX has-session; then
exec $TMUX new-window
else
exec ${TERMINAL_EMULATOR:-x-terminal-emulator -x} $TMUX
fi
TERMINAL_EMULATOR
mantém o emulador de terminal desejado para novas janelas de terminal (se você não gostar do padrão de qualquer x-terminal-emulator
ponto), mais uma opção de linha de comando para o comando executar dentro do emulador.
Você pode registrar o script do manipulador de arquivos como qualquer outra associação de tipo de arquivo no seu gerenciador de arquivos.