วิธีเปิดไดเรกทอรี Nautilus ใน Terminal ปัจจุบัน


13

ฉันไม่ชอบที่จะเปิดเครื่องหลายแห่ง มีวิธีการเพิ่มเปิดในเทอร์มินัลปัจจุบันแทนที่จะเปิดในเทอร์มินัลเมื่อใช้ Nautilus หรือไม่


วิธีแก้ไขปัญหาที่สกปรกเท่าที่ฉันสามารถจินตนาการ ฉันจะให้หนึ่งถ้าคุณเป็นดีกับที่ ...
จาค็อบ Vlijm

คำตอบ:


13

ไม่ดีหรือไม่ดีวิธีแก้ปัญหาด้านล่างใช้ได้อย่างสมบูรณ์ใน 30 นาทีที่ฉันทดสอบบ่อยๆ วิธีการแก้ปัญหาทำงานตราบใดที่คุณสามารถคลิกขวาที่ไฟล์ (ใด ๆ ) ภายในไดเรกทอรี:

1

ป้อนคำอธิบายรูปภาพที่นี่

2

ป้อนคำอธิบายรูปภาพที่นี่

3

ป้อนคำอธิบายรูปภาพที่นี่

สคริปต์ Nautilus

#!/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)

วิธีใช้

  1. สคริปต์ความต้องการwmctrl, xdotoolและ xclip:

    sudo apt-get install wmctrl xdotool xclip
    
  2. คัดลอกสคริปต์ลงในไฟล์ที่ว่างเปล่าบันทึกเป็นopen_in_terminal(ไม่มีนามสกุล) ~/.local/share/nautilus/scriptsใน สร้างไดเรกทอรีถ้าจำเป็น ทำให้สคริปต์เรียกใช้งานได้

แค่นั้นแหละ. ออกจากระบบและกลับเข้ามาและคุณจะมีสคริปต์พร้อมใช้งานในรูป (2)

คำอธิบาย

  • คลิกขวาไฟล์ที่เราจะได้รับใช้เส้นทางหอยโข่ง"NAUTILUS_SCRIPT_CURRENT_URI"
  • ในสคริปต์เราสามารถโหลดพา ธ นี้ไปยังคลิปบอร์ด (โดยใช้xclip)
  • ต่อจากนั้นสคริปต์จะยกหน้าต่าง (พบครั้งแรก) gnome-terminalและวางเส้นทางตามcdคำสั่ง เนื่องจากเราเคยechoโหลดทั้งบรรทัดลงในคลิปบอร์ดReturnรวมอยู่ด้วย

หมายเหตุ

  1. ควรชัดเจนว่าไม่ควรมีสิ่งใดทำงานอยู่ในเครื่องและทำงานได้ดีที่สุดหากมีหน้าต่างเทอร์มินัลเพียงหน้าต่างเดียวที่เปิดอยู่ ในกรณีที่มีหลายตัวสคริปต์จะเลือกgnome-terminalหน้าต่างที่เก่าที่สุด
  2. สคริปต์จะต้องมีการทดสอบอย่างละเอียดในทางปฏิบัติ ในขณะที่ฉันวิ่งมันไม่มีปัญหาแม้แต่ครั้งเดียวแม้แต่ตอนที่เดสก์ท็อปต้อง "เดินทาง" ในวิวพอร์ตสี่หรือห้าเพื่อไปที่หน้าต่างเทอร์มินัล หากมีข้อผิดพลาดจะเกิดขึ้นอย่างไรกับไม่กี่บรรทัดมากขึ้นเราสามารถทำให้มันเป็นจริงรออยู่ในสมาร์ท (ER) วิธีการที่หน้าต่าง terminal ที่จะได้รับการเลี้ยงดู มาดูกันว่าเกิดอะไรขึ้น ดูเหมือนไม่จำเป็น
  3. เนื่องจากสคริปต์ใช้realpathไดเร็กทอรีที่ลิงก์ยังทำงานได้อย่างถูกต้อง

ข้อมูลเพิ่มเติมเกี่ยวกับสคริปหอยโข่งที่นี่


หรือเลือกหน้าต่างเทอร์มินัลของคุณเองถ้าคุณมีหลายหน้าต่าง

หากคุณต้องการที่จะสามารถที่จะเลือกในการที่หน้าต่าง terminal ที่คุณจะเปิดปัจจุบัน (หอยโข่ง) ไดเรกทอรีใช้สคริปต์ดังต่อไปนี้

มันทำงานอย่างไรในทางปฏิบัติ

  1. คลิกขวาที่ไฟล์ (มี) ในไดเรกทอรี (ในกรณีนี้เดสก์ท็อปของฉัน) เช่นด้านล่าง:

    ป้อนคำอธิบายรูปภาพที่นี่

  2. คลิกที่ (หรือยกระดับ) หน้าต่างเทอร์มินัลที่คุณต้องการใช้และมันจะ 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)

ติดตั้ง

เป็นเหมือนสคริปต์ตัวแรก

คำอธิบาย

สคริปต์มีความแตกต่างอย่างหนึ่งจากหน้าต่างแรก: แทนที่จะเพิ่มหน้าต่างเทอร์มินัลแรกที่พบโดยอัตโนมัติสคริปต์จะรอให้หน้าต่างเทอร์มินัลแรกมีโฟกัส จากนั้นมันจะไปยังไดเรกทอรีภายในหน้าต่างนั้น


เนื่องจากคุณใช้ไฟล์เพื่อเรียกใช้สคริปต์ให้ลบชื่อไฟล์ออกจากพา ธ sys.argv [1] มันจะทำให้สคริปต์สั้นลงมาก
Sergiy Kolodyazhnyy

1
@TonyLancer เมนูปรากฏขึ้นหลังจากการสร้างไดเรกทอรี~/.local/share/nautilus/scriptsออกจากระบบและกลับมาอยู่ใน :)
จาค็อบ Vlijm

1
@Benny ใช้งานได้กับ nautilus คลิกขวาเท่านั้น
Jacob Vlijm

1
@Benny สภาพแวดล้อมสำหรับสคริปต์ได้รับการส่งผ่านจากกระบวนการหลัก ในกรณีนี้ Nautilus เป็นกระบวนการหลักของสคริปต์และตั้งค่าสภาพแวดล้อมสำหรับสคริปต์ หากคุณพยายามทำสิ่งเดียวกันจากล่ามไพ ธ อนหรือสคริปต์ก็จะมีกระบวนการหลักที่แตกต่างกันดังนั้นมันจะกลับมาNoneเพราะไม่มีตัวแปรดังกล่าว (นอก Nautilus นั่นคือ)
Sergiy Kolodyazhnyy

1
@JacobVlijm คุณยอดเยี่ยม ทำงานเต็มที่! ตอนนี้ฉันเข้าใจว่าสคริปต์ตัวที่สองทำงานได้ถูกต้องแล้ว มันเป็นอุปกรณ์ที่ดีสำหรับชุมชนอูบุนตู แน่นอนว่าเราสามารถคิดถึงการปรับปรุงหลาย ๆ อย่างสำหรับสคริปต์ใด ๆ แต่อันนี้ทำงานได้ดี เพียงแค่พูดถึงในคำตอบของคุณว่าสคริปต์ที่สองทำงานกับ Alt Tab
Vitor Abella

8

ฉันค่อนข้างมั่นใจว่าไม่มีวิธีการทำเช่นนี้ แต่ฉันมีวิธีแก้ปัญหาสำหรับคุณที่อาจช่วยได้

คุณสามารถลากและวางไดเรกทอรีจาก Nautilus ลงในหน้าต่างเทอร์มินัลและ Nautilus จะส่งผ่านไดเรกทอรีนั้นและวางลงในบรรทัดคำสั่งดังนั้นคุณสามารถทำได้cdจากนั้นลากโฟลเดอร์ไปยังเทอร์มินัลแล้วกด Enter


8

วิธีที่ง่ายที่สุดคือ:

  1. จาก nautilus กดCtrl+ Lนี่จะเปิดแถบที่อยู่เพื่อแก้ไข กดเครื่องหมายCtrl+C
  2. สลับไปที่เทอร์มินัลแล้วพิมพ์cdเว้นวรรคแล้วShift+ Insert (or INS)เพื่อวางเส้นทาง Enterhit

ไม่จำเป็นต้องใช้สคริปต์หรือทำงานพิเศษ


ฉันใช้ Ctrl + Shift + V เพื่อวางเส้นทาง
Katu

1
ใช่นั่นเป็นอีกวิธีที่จะทำ Linux มีสอง clipboards จริง ๆ แล้วดังนั้น Ctrl + Shift + V สำหรับ primary และ Shift + Insert สำหรับรอง แต่เนื่องจากอันที่สองต้องการเพียงสองปุ่มฉันจึงใช้มันเป็นส่วนใหญ่ พวกเขากำลังแชร์กันเว้นแต่คุณจะเน้นบางอย่าง - นั่นคือเมื่อสิ่งต่าง ๆ เข้าสู่คลิปบอร์ดรอง
Sergiy Kolodyazhnyy

1

ในความคิดของฉันวิธีเดียวที่สวยงามในการแก้ปัญหานี้โดยไม่ต้องยุ่งเกี่ยวกับการใช้เทอร์มินัลมัลติเพล็กเซอร์เช่นtmuxและมีเครื่องมือจัดการไฟล์ของคุณ

  • เปิดหน้าต่างเทอร์มินัลใหม่ภายในเซสชันที่มีอยู่หรือ
  • เริ่มการจำลองเทอร์มินัลใหม่ด้วยเซสชัน 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) บวกกับตัวเลือกบรรทัดคำสั่งเพื่อให้คำสั่งดำเนินการภายในตัวจำลอง

คุณสามารถลงทะเบียนสคริปต์ตัวจัดการไฟล์เช่นการเชื่อมโยงประเภทไฟล์อื่น ๆ ในตัวจัดการไฟล์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.