ฉันไม่ชอบที่จะเปิดเครื่องหลายแห่ง มีวิธีการเพิ่มเปิดในเทอร์มินัลปัจจุบันแทนที่จะเปิดในเทอร์มินัลเมื่อใช้ Nautilus หรือไม่
ฉันไม่ชอบที่จะเปิดเครื่องหลายแห่ง มีวิธีการเพิ่มเปิดในเทอร์มินัลปัจจุบันแทนที่จะเปิดในเทอร์มินัลเมื่อใช้ Nautilus หรือไม่
คำตอบ:
ไม่ดีหรือไม่ดีวิธีแก้ปัญหาด้านล่างใช้ได้อย่างสมบูรณ์ใน 30 นาทีที่ฉันทดสอบบ่อยๆ วิธีการแก้ปัญหาทำงานตราบใดที่คุณสามารถคลิกขวาที่ไฟล์ (ใด ๆ ) ภายในไดเรกทอรี:
#!/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)
สคริปต์ความต้องการwmctrl
, xdotool
และ xclip:
sudo apt-get install wmctrl xdotool xclip
คัดลอกสคริปต์ลงในไฟล์ที่ว่างเปล่าบันทึกเป็นopen_in_terminal
(ไม่มีนามสกุล) ~/.local/share/nautilus/scripts
ใน สร้างไดเรกทอรีถ้าจำเป็น ทำให้สคริปต์เรียกใช้งานได้
แค่นั้นแหละ. ออกจากระบบและกลับเข้ามาและคุณจะมีสคริปต์พร้อมใช้งานในรูป (2)
"NAUTILUS_SCRIPT_CURRENT_URI"
xclip
)gnome-terminal
และวางเส้นทางตามcd
คำสั่ง เนื่องจากเราเคยecho
โหลดทั้งบรรทัดลงในคลิปบอร์ดReturnรวมอยู่ด้วยgnome-terminal
หน้าต่างที่เก่าที่สุดข้อมูลเพิ่มเติมเกี่ยวกับสคริปหอยโข่งที่นี่
หากคุณต้องการที่จะสามารถที่จะเลือกในการที่หน้าต่าง terminal ที่คุณจะเปิดปัจจุบัน (หอยโข่ง) ไดเรกทอรีใช้สคริปต์ดังต่อไปนี้
คลิกขวาที่ไฟล์ (มี) ในไดเรกทอรี (ในกรณีนี้เดสก์ท็อปของฉัน) เช่นด้านล่าง:
คลิกที่ (หรือยกระดับ) หน้าต่างเทอร์มินัลที่คุณต้องการใช้และมันจะ cd ไปที่ไดเรกทอรี:
#!/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)
เป็นเหมือนสคริปต์ตัวแรก
สคริปต์มีความแตกต่างอย่างหนึ่งจากหน้าต่างแรก: แทนที่จะเพิ่มหน้าต่างเทอร์มินัลแรกที่พบโดยอัตโนมัติสคริปต์จะรอให้หน้าต่างเทอร์มินัลแรกมีโฟกัส จากนั้นมันจะไปยังไดเรกทอรีภายในหน้าต่างนั้น
~/.local/share/nautilus/scripts
ออกจากระบบและกลับมาอยู่ใน :)
None
เพราะไม่มีตัวแปรดังกล่าว (นอก Nautilus นั่นคือ)
ฉันค่อนข้างมั่นใจว่าไม่มีวิธีการทำเช่นนี้ แต่ฉันมีวิธีแก้ปัญหาสำหรับคุณที่อาจช่วยได้
คุณสามารถลากและวางไดเรกทอรีจาก Nautilus ลงในหน้าต่างเทอร์มินัลและ Nautilus จะส่งผ่านไดเรกทอรีนั้นและวางลงในบรรทัดคำสั่งดังนั้นคุณสามารถทำได้cd
จากนั้นลากโฟลเดอร์ไปยังเทอร์มินัลแล้วกด Enter
วิธีที่ง่ายที่สุดคือ:
cd
เว้นวรรคแล้วShift+ Insert (or INS)เพื่อวางเส้นทาง Enterhitไม่จำเป็นต้องใช้สคริปต์หรือทำงานพิเศษ
ในความคิดของฉันวิธีเดียวที่สวยงามในการแก้ปัญหานี้โดยไม่ต้องยุ่งเกี่ยวกับการใช้เทอร์มินัลมัลติเพล็กเซอร์เช่นtmuxและมีเครื่องมือจัดการไฟล์ของคุณ
เชลล์สคริปต์ต่อไปนี้สามารถทำได้:
#!/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
เก็บเทอร์มินัลอีมูเลเตอร์ที่ต้องการสำหรับวินโดว์เทอร์มินัลใหม่ (หากคุณไม่ชอบค่าเริ่มต้นของสิ่งใดก็ตามx-terminal-emulator
) บวกกับตัวเลือกบรรทัดคำสั่งเพื่อให้คำสั่งดำเนินการภายในตัวจำลอง
คุณสามารถลงทะเบียนสคริปต์ตัวจัดการไฟล์เช่นการเชื่อมโยงประเภทไฟล์อื่น ๆ ในตัวจัดการไฟล์ของคุณ