Làm thế nào để mở thư mục Nautilus trong Terminal hiện tại?


13

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?


Chỉ có giải pháp bẩn như tôi có thể tưởng tượng. Tôi có thể cho một người nếu bạn ổn với điều đó ...
Jacob Vlijm

Câu trả lời:


13

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:

1.

nhập mô tả hình ảnh ở đây

2.

nhập mô tả hình ảnh ở đây

3.

nhập mô tả hình ảnh ở đây

Kịch bản 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)

Cách sử dụng

  1. Nhu cầu kịch bản wmctrl, xdotoolvà xclip:

    sudo apt-get install wmctrl xdotool xclip
    
  2. 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).

Giải trình

  • Nhấp chuột phải vào một tệp, chúng ta có thể nhận được đường dẫn bằng cách sử dụng nautilus ' "NAUTILUS_SCRIPT_CURRENT_URI".
  • Trong một tập lệnh, sau đó chúng ta có thể tải đường dẫn này vào bảng tạm (sử dụng xclip)
  • Sau đó, tập lệnh tăng gnome-terminalcửa sổ (tìm thấy đầu tiên) và dán đường dẫn, trước cdlệnh. Vì chúng tôi thường echotải toàn bộ dòng vào bảng tạm, nên Returnđược bao gồm.

Ghi chú

  1. Cần phải rõ ràng rằng không có gì chạy trong thiết bị đầu cuối, và nó hoạt động tốt nhất nếu chỉ có một cửa sổ thiết bị đầu cuối mở. Trong trường hợp có nhiều, tập lệnh chọn gnome-terminalcửa sổ cũ nhất .
  2. Kịch bản cần phải được kiểm tra kỹ lưỡng trong thực tế. Trong khi tôi chạy nó, thời gian không có vấn đề gì dù chỉ một lần, ngay cả khi Máy tính để bàn phải "di chuyển" qua bốn hoặc năm khung nhìn để đến cửa sổ đầu cuối. Tuy nhiên, lỗi IF sẽ xảy ra, với một vài dòng nữa, chúng ta có thể thực sự chờ nó theo cách thông minh (er) để cửa sổ đầu cuối được nâng lên. Hãy xem điều gì xảy ra. Có vẻ như không cần thiết.
  3. Vì tập lệnh sử dụng realpath , các thư mục được liên kết cũng sẽ hoạt động chính xác.

Thêm thông tin về các kịch bản nautilus ở đây .


Hoặc, chọn cửa sổ đầu cuối của riêng bạn nếu bạn có nhiều

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.

Làm thế nào nó hoạt động trong thực tế

  1. 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 mô tả hình ảnh ở đây

  2. 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:

    nhập mô tả hình ảnh ở đây

Kịch bản

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

Thiết lập

Chính xác như kịch bản đầu tiên.

Giải trình

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ổ đó.


vì dù sao bạn cũng đang sử dụng tệp để khởi chạy tập lệnh, chỉ cần xóa tên tệp khỏi đường dẫn sys.argv [1]. nó sẽ làm cho kịch bản ngắn hơn nhiều
Sergiy Kolodyazhnyy

1
@TonyLancer menu xuất hiện sau khi tạo ~/.local/share/nautilus/scriptsđăng xuất thư mục và quay lại :)
Jacob Vlijm

1
@Benny nó chỉ hoạt động từ nautilus nhấp chuột phải.
Jacob Vlijm

1
@Benny môi trường cho tập lệnh được truyền từ quy trình cha. Trong trường hợp này, Nautilus là tiến trình cha của tập lệnh và nó thiết lập môi trường cho tập lệnh. Nếu bạn đang cố gắng làm điều tương tự từ trình thông dịch python hoặc tập lệnh, nó sẽ có quy trình cha khác nhau, do đó nó sẽ trả về Nonevì không có biến như vậy (bên ngoài Nautilus).
Sergiy Kolodyazhnyy

1
@JacobVlijm bạn thật tuyệt vời. Làm việc đầy đủ! Bây giờ tôi đã hiểu cách tập lệnh thứ hai hoạt động, bạn nói đúng về trình kích hoạt. Nó thực sự là một tiện ích tốt đẹp cho cộng đồng ubfox. Tất nhiên chúng ta có thể nghĩ về nhiều cải tiến như đối với bất kỳ kịch bản nào, nhưng cái này thực hiện công việc. Chỉ cần đề cập trong câu trả lời của bạn rằng tập lệnh thứ hai hoạt động với Alt Tab.
Vitor Abella

8

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 cdvà sau đó kéo thư mục vào terminal và nhấn enter.


8

Cách đơn giản nhất là đây:

  1. Từ nautilus, nhấn Ctrl+ L, điều này sẽ mở thanh địa chỉ để chỉnh sửa. Nhấn phím Ctrl+C
  2. Chuyển sang thiết bị đầu cuối và nhập vào 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.


Tôi sử dụng Ctrl + Shift + V để dán đường dẫn.
Katu

1
yup, đó là một cách khác để làm điều đó. Linux thực sự có hai clipboard, vì vậy Ctrl + Shift + V là dành cho chính và Shift + Chèn là dành cho phụ, nhưng vì cái thứ hai chỉ cần hai khóa, nên tôi sử dụng phần lớn. Chúng được chia sẻ, trừ khi bạn làm nổi bật một cái gì đó - đó là khi mọi thứ đi vào bảng tạm thứ cấp
Sergiy Kolodyazhnyy

1

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

  • mở các cửa sổ đầu cuối mới trong một phiên hiện có hoặc
  • bắt đầu một trình giả lập thiết bị đầu cuối mới với phiên tmux mới.

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_EMULATORgiữ 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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.