No me gusta tener docenas de terminales abiertas. ¿Hay alguna manera de agregar Abrir en la Terminal actual en lugar de Abrir en la Terminal cuando se usa Nautilus?
No me gusta tener docenas de terminales abiertas. ¿Hay alguna manera de agregar Abrir en la Terminal actual en lugar de Abrir en la Terminal cuando se usa Nautilus?
Respuestas:
Sucia o no, la siguiente solución funcionó perfectamente en los 30 minutos que la probé con frecuencia. La solución funciona siempre que pueda hacer clic con el botón derecho en un archivo (cualquiera) dentro del directorio:
#!/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)
El script necesita wmctrl
, xdotool
y xclip:
sudo apt-get install wmctrl xdotool xclip
Copie el script en un archivo vacío, guárdelo como open_in_terminal
(sin extensión) en ~/.local/share/nautilus/scripts
. Cree el directorio si es necesario. Hacer el script ejecutable
Eso es. Cierre la sesión y vuelva a iniciarla y tendrá el script disponible como en la imagen (2).
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
abre la ventana (primera vez que se encuentra) y pega la ruta, precedida por el cd
comando. Como solíamos echo
cargar toda la línea en el portapapeles, Returnestá incluido.gnome-terminal
ventana más antigua .Más información sobre scripts nautilus aquí .
Si desea poder elegir en qué ventana de terminal abriría el directorio actual (nautilus), use el siguiente script.
Haga clic derecho (cualquier) archivo dentro del directorio (en este caso mi escritorio) como a continuación:
Haga clic en (o levante de otro modo) la ventana de terminal que le gustaría usar, y se colocará en el directorio del directorio:
#!/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)
Es exactamente como el primer guión.
El script tiene una diferencia con respecto al primero: en lugar de abrir automáticamente la primera ventana de terminal encontrada, espera a que la primera ventana de terminal tenga foco. Luego está en el directorio dentro de esa ventana.
~/.local/share/nautilus/scripts
cierre de sesión del directorio y volver a
None
porque no hay tal variable (aparte de Nautilus).
Estoy bastante seguro de que no hay forma de hacer esto, sin embargo, tengo una solución para usted que podría ayudar.
Siempre puede arrastrar y soltar un directorio de Nautilus en una ventana de terminal y Nautilus pasará ese directorio y lo pegará en la línea de comando, para que pueda hacerlo cd
y luego arrastre la carpeta al terminal y presione enter.
La forma más simple es esta:
cd
, espacio, luego Shift+ Insert (or INS)para pegar la ruta. Hit Enter.No necesita guiones ni trabajo extra.
En mi opinión, la única forma elegante de resolver esto sin perder el tiempo es usar un multiplexor de terminal como tmux y tener su administrador de archivos
El siguiente script de shell logra exactamente eso:
#!/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
contiene el emulador de terminal deseado para nuevas ventanas de terminal (si no le gusta el valor predeterminado de los x-terminal-emulator
puntos a los que apunta) más una opción de línea de comandos para que el comando se ejecute dentro del emulador.
Puede registrar la secuencia de comandos del controlador de archivos como cualquier otra asociación de tipo de archivo en su administrador de archivos.