Tôi không muốn có hàng tá thiết bị đầu cuối được mở. Có cách nào để thêm Open trong Terminal hiện tại thay vì Open in Terminal khi sử dụng Nautilus không?
Tôi không muốn có hàng tá thiết bị đầu cuối được mở. Có cách nào để thêm Open trong Terminal hiện tại thay vì Open in Terminal khi sử dụng Nautilus không?
Câu trả lời:
Bẩn hay không, giải pháp dưới đây hoạt động hoàn hảo trong 30 phút tôi đã kiểm tra nó thường xuyên. Giải pháp hoạt động miễn là bạn có thể nhấp chuột phải vào một tệp (bất kỳ) trong thư mục:
#!/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)
Nhu cầu kịch bản wmctrl
, xdotool
và xclip:
sudo apt-get install wmctrl xdotool xclip
Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng open_in_terminal
(không có phần mở rộng) trong ~/.local/share/nautilus/scripts
. Tạo thư mục nếu cần. Làm cho tập lệnh thực thi
Đó là nó. Đăng xuất và đăng nhập trở lại và bạn sẽ có sẵn tập lệnh như trong ảnh (2).
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
cửa sổ (tìm thấy đầu tiên) và dán đường dẫn, trước cd
lệnh. Vì chúng tôi thường echo
tải toàn bộ dòng vào bảng tạm, nên Returnđược bao gồm.gnome-terminal
cửa sổ cũ nhất .Thêm thông tin về các kịch bản nautilus ở đây .
Nếu bạn muốn để có thể chọn trong đó thiết bị đầu cuối cửa sổ bạn sẽ mở thư mục hiện hành (nautilus), sử dụng kịch bản dưới đây.
Nhấp chuột phải vào tệp (bất kỳ) trong thư mục (trong trường hợp này là máy tính để bàn của tôi) như dưới đây:
Nhấp vào (hoặc nâng lên khác) cửa sổ đầu cuối mà bạn muốn sử dụng và nó sẽ cd vào thư mục:
#!/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)
Chính xác như kịch bản đầu tiên.
Kịch bản có một điểm khác biệt so với kịch bản đầu tiên: thay vì tự động nâng cửa sổ đầu cuối được tìm thấy đầu tiên, nó chờ cửa sổ đầu tiên đầu tiên có tiêu điểm. Sau đó, nó cd vào thư mục bên trong cửa sổ đó.
~/.local/share/nautilus/scripts
đăng xuất thư mục và quay lại :)
None
vì không có biến như vậy (bên ngoài Nautilus).
Tôi khá chắc chắn rằng không có cách nào để làm điều này, tuy nhiên tôi có một cách giải quyết cho bạn có thể giúp ích.
Bạn luôn có thể kéo và thả thư mục từ Nautilus vào cửa sổ terminal và Nautilus sẽ chuyển thư mục đó và dán nó vào dòng lệnh, vì vậy bạn có thể làm cd
và sau đó kéo thư mục vào terminal và nhấn enter.
Cách đơn giản nhất là đây:
cd
, khoảng trắng, sau đó Shift+ Insert (or INS)để dán đường dẫn. Trúng Enter.Không cần kịch bản hoặc làm thêm.
Theo tôi, cách duy nhất để giải quyết vấn đề này mà không phải loay hoay là sử dụng bộ ghép kênh đầu cuối như tmux và có trình quản lý tệp của bạn
Kịch bản shell sau đạt được điều đó:
#!/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
giữ trình giả lập thiết bị đầu cuối mong muốn cho các cửa sổ đầu cuối mới (nếu bạn không thích mặc định của bất kỳ x-terminal-emulator
điểm nào) cộng với tùy chọn dòng lệnh để lệnh thực thi bên trong trình giả lập.
Bạn có thể đăng ký tập lệnh xử lý tệp như bất kỳ liên kết loại tệp nào khác trong trình quản lý tệp của bạn.