Saya tidak suka puluhan terminal dibuka. Apakah ada cara untuk menambahkan Buka di Terminal saat ini daripada Buka di Terminal saat menggunakan Nautilus?
Saya tidak suka puluhan terminal dibuka. Apakah ada cara untuk menambahkan Buka di Terminal saat ini daripada Buka di Terminal saat menggunakan Nautilus?
Jawaban:
Kotor atau tidak, solusi di bawah ini bekerja dengan sempurna dalam 30 menit saya sering mengujinya. Solusinya berfungsi selama Anda dapat mengklik kanan file (apa saja) di dalam direktori:
#!/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)
Kebutuhan skrip wmctrl
, xdotool
dan xclip:
sudo apt-get install wmctrl xdotool xclip
Salin skrip ke file kosong, simpan sebagai open_in_terminal
(tanpa ekstensi) di ~/.local/share/nautilus/scripts
. Buat direktori jika perlu. Jadikan skrip dapat dieksekusi
Itu dia. Logout dan kembali dan Anda akan memiliki skrip yang tersedia seperti pada gambar (2).
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
dan menempelkan path, didahului oleh cd
perintah. Karena kami biasa echo
memuat seluruh baris ke clipboard, Returndisertakan.gnome-terminal
jendela tertua .Informasi lebih lanjut tentang skrip nautilus di sini .
Jika Anda ingin dapat memilih di jendela terminal mana Anda akan membuka direktori saat ini (nautilus), gunakan skrip di bawah ini.
Klik kanan (ada) file di dalam direktori (dalam hal ini desktop saya) seperti di bawah ini:
Klik pada (atau naikkan sebaliknya) jendela terminal yang ingin Anda gunakan, dan itu akan cd ke direktori:
#!/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)
Persis seperti naskah pertama.
Script memiliki satu perbedaan dari yang pertama: alih-alih secara otomatis menaikkan jendela terminal yang pertama ditemukan, ia menunggu jendela terminal pertama untuk memiliki fokus. Kemudian cd ke direktori di dalam jendela itu.
~/.local/share/nautilus/scripts
keluar direktori dan kembali :)
None
karena tidak ada variabel seperti itu (di luar Nautilus).
Saya cukup yakin tidak ada cara untuk melakukan ini, namun saya punya solusi untuk Anda yang mungkin bisa membantu.
Anda selalu dapat menarik dan melepas direktori dari Nautilus ke jendela terminal dan Nautilus akan melewati direktori itu dan menempelkannya ke baris perintah, sehingga Anda bisa melakukannya cd
lalu seret folder ke terminal dan tekan enter.
Cara termudah adalah ini:
cd
, spasi, lalu Shift+ Insert (or INS)untuk menempelkan path. Hit Enter.Tidak perlu skrip atau kerja ekstra.
Menurut pendapat saya, satu-satunya cara yang elegan untuk menyelesaikan masalah ini tanpa menggunakan fusi adalah dengan menggunakan terminal multiplexer seperti tmux dan minta manajer file Anda
Script shell berikut hanya mencapai itu:
#!/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
memegang emulator terminal yang diinginkan untuk windows terminal baru (jika Anda tidak suka default apa pun yang x-terminal-emulator
menunjuk ke) ditambah opsi baris perintah untuk perintah untuk mengeksekusi di dalam emulator.
Anda dapat mendaftarkan skrip penangan file seperti asosiasi tipe file lainnya di manajer file Anda.