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?
fuente
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?
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, xdotooly 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-terminalabre la ventana (primera vez que se encuentra) y pega la ruta, precedida por el cdcomando. Como solíamos echocargar toda la línea en el portapapeles, Returnestá incluido.gnome-terminalventana 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/scriptscierre de sesión del directorio y volver a
Noneporque 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 cdy 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_EMULATORcontiene el emulador de terminal deseado para nuevas ventanas de terminal (si no le gusta el valor predeterminado de los x-terminal-emulatorpuntos 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.