Nautilus: Thư mục đã truy cập qua symlink, bây giờ tôi không thể tăng một cấp trong phân cấp thư mục đích


14

Tôi đã tạo một lối tắt thông qua tùy chọn "tạo liên kết". Khi tôi vào thư mục của phím tắt này, tôi không thể thấy bất kỳ thư mục nào phía trên nó để tôi không thể dễ dàng điều hướng đến chúng.

Có cách nào để tăng một thư mục trong GUI không? Có lẽ là một phím nóng? (Không thể làmcd .. lần này ^ __ ^).

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


Trong Windows chẳng hạn, tôi thực sự có thể điều hướng theo cách tôi mô tả, đây là hình ảnh Win10 giải thích nó:

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


Bạn đã thử phím Backspace chưa?
PenguinCSC

Trong nautilus nhỏ hơn 3.16, thật dễ dàng để thêm nút cha vào thanh công cụ nautilus mặc dù phải được thực hiện thông qua nguồn> xây dựng lại (bản vá hoặc bản dựng ppa cho 14.04 có sẵn) Nếu không hãy thửAlt+up key
doug

Alt + Up đưa tôi từ đích đến của liên kết đến máy tính để bàn ... Thật đáng buồn là không: \ Nếu ai đó ở đây có kết nối đúng, anh ta có thể cung cấp điều này trực tiếp cho nhóm nhà phát triển không? Tôi còn rất mới nên tôi thực sự không thể cung cấp trực tiếp, mà không có dữ liệu phải truyền qua nhiều người (tôi đoán vậy) ...
JohnDoea

À - tôi hiểu ý của bạn Có thể thử giải pháp của Jacob hoặc tự tạo liên kết. Các liên kết hiện tại của bạn được xem như một thư mục vì vậy lên là thư mục. liên kết nằm trong, điển hình là Desktop. Nếu bạn tạo liên kết bằng tệp .desktop có thể thực thi thì điều hướng sau khi sử dụng 'liên kết' đó sẽ bình thường.
gấp đôi

Câu hỏi tương tự ở đây Askubfox.com/questions/713397/show-full-path-for-links (nếu được giải quyết, để đánh dấu khác là trùng lặp)
user.dz

Câu trả lời:


17

Tại sao đây là một câu hỏi đầy thách thức

Câu hỏi có một vài thách thức:

  • nautilus không giao tiếp trực tiếp từ dòng lệnh, ví dụ để lấy thư mục đang hoạt động, bạn cũng không thể "gửi" thư mục hiện đang mở (-window) đến thư mục khác từ dòng lệnh.
  • Trong đường dẫn hiện tại, như được yêu cầu thông qua "NAUTILUS_SCRIPT_CURRENT_URI", Nautilus không trả lại đường dẫn thực cho thư mục hiện tại, nhưng "nhìn thấy" liên kết như thể đó là một thư mục thực tế.

Do đó, giải pháp là bẩn như nó được; chúng ta cần tìm cách giải quyết. Dưới đây bốn lựa chọn để giải quyết vấn đề.

1. nhấp chuột phải để tăng một cấp

Để có được đường dẫn thực sự đến thư mục hiện tại, chúng ta phải lấy thông tin từ liên kết. Chúng tôi có thể làm điều đó bằng cách sử dụng ls -ltrên liên kết, sẽ xuất ra, ví dụ:

lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current

trong đó phần sau ->là đường dẫn thực bên trong symlink, hoặc, sử dụng python:

real = os.path.realpath("/path")

Sử dụng điều này trong một nautiluskịch bản, chúng ta có thể gián tiếp có được thực tế đường dẫn đến tệp hoặc thư mục hiện tại.

Sau đó, nếu chúng ta có đường dẫn, làm thế nào để làm cho nautilus di chuyển lên một cấp?

Một lần nữa, chúng ta không thể giải quyết điều này giữ cho bàn tay của chúng ta sạch sẽ. Để di chuyển lên một cấp, trước tiên chúng tôi chỉnh sửa đường dẫn tìm thấy một chút, từ:

/path/to/a/folder

vào

/path/to/a

sau đó, sử dụng xdotoolđể mô phỏng Ctrl+ L(phím tắt GUI để chèn một đường dẫn vào cửa sổ nautilus, vì không có tùy chọn cli để di chuyển đến thư mục khác bằng cửa sổ hiện tại ) và sau đó thực hiện xclipdán đường dẫn đã chỉnh sửa +Enter , chúng tôi có một giải pháp làm việc !

Trong thực tế

  1. Chúng tôi đang ở trong một thư mục, được mở từ một liên kết ("Liên kết đến Telegram") trên Màn hình của tôi. Các thực thư mục là một thư mục con của tôi Downloadsthư mục:

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

  2. Sau đó, nếu chúng ta nhấp chuột phải vào bất kỳ tệp nào trong thư mục để chạy tập lệnh:

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

  3. Tự động, đường dẫn đến thư mục ưu việt được chèn vào:

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

  4. Và, cũng tự động, Returnđược nhấn và chúng tôi di chuyển một cấp thư mục lên:

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

Kịch bản

#!/usr/bin/env python3
import subprocess
import os
import time

def run(cmd):
    subprocess.call(["/bin/bash", "-c", cmd])

current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = os.path.abspath(os.path.join(real, os.pardir))
run("xdotool key Control_L+l")
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")

Làm thế nào để thiết lập

  1. Kịch bản cần cả hai xdotoolxclip:

    sudo apt-get install xdotool xclip
    
  2. tạo, nếu nó chưa tồn tại, thư mục

    ~/.local/share/nautilus/scripts
    
  3. Sao chép tập lệnh ở trên vào một tệp trống, lưu nó dưới dạng level_up(không có phần mở rộng) ~/.local/share/nautilus/scriptslàm cho nó có thể thực thi được

  4. Bạn có thể phải đăng xuất và đăng nhập lại.
  5. Bây giờ bạn sẽ có thể chạy tập lệnh bằng cách nhấp chuột phải vào tệp (bất kỳ)> tập lệnh> level_up:

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


[ EDIT ] Tôi đã thay đổi tập lệnh ở trên để dán đường dẫn vào nautiluscửa sổ, thay vì tạo xdotool kiểu . Nó needs xclipđược cài đặt, nhưng nó là một cải tiến lớn, đặc biệt là trên những con đường rất dài.


2. Hoặc, mở một cửa sổ nautilus mới trong thư mục ưu việt

Bạn có thể tránh sử dụng xdotool, bằng cách làm cho tập lệnh mở một cửa sổ nautilus mới , trong thư mục của cha mẹ. Kịch bản sau đó sẽ còn ngắn hơn:

#!/usr/bin/env python3
import subprocess
import os

def run(cmd):
    subprocess.call(cmd)

current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = real[:real.rfind("/")]
subprocess.Popen(["nautilus", up])

Trong trường hợp này, bạn sẽ không cần phải cài đặt xdotool . Chúng tôi thậm chí có thể mở rộng tập lệnh bằng cách đóng cửa sổ gốc và đặt cửa sổ mới chính xác ở cùng một vị trí (& kích thước).

Nhược điểm là lịch sử của cửa sổ ban đầu bị mất theo cách này.

3. Một giải pháp bổ sung: cách khác để (tự động) tạo liên kết

Không liên quan đến các liên kết hiện có, nhưng khi được sử dụng từ GUI, tập lệnh nautilus để tự động tạo tệp thực thi .desktop tệp khi nhấp chuột phải có thể hữu ích:

nhấp chuột phải vào thư mục để tạo lối tắt (hoạt động như một liên kết)

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

Không giống như các liên kết tượng trưng, ​​các liên kết này sẽ đưa bạn đến thư mục thực tế, mà không hoạt động như chính thư mục:

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

Kịch bản

#!/usr/bin/env python3
import subprocess
import os

current = os.getenv(
    "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
    ).replace("file://", "").replace("%20", " ").strip()

if os.path.isdir(current):
    parent = os.path.abspath(os.path.join(current, os.pardir))
    fldr_path = '"'+current+'"'
    folder = current[current.rfind("/")+1:]
    linkfilename = parent+"/"+folder+"link.desktop"
    linkdata = [
        "[Desktop Entry]",
        "Type=Application",
        "Name=Link to -> "+folder,
        "Icon=folder",
        "Exec=nautilus "+fldr_path,
        ]
    with open(linkfilename, "wt") as wt:
        for l in linkdata:
            wt.write(l+"\n")
    command = "chmod +x "+"'"+linkfilename+"'" 
    subprocess.Popen(["/bin/bash", "-c", command])

Cách sử dụng

  1. Sao chép tập lệnh vào một tệp trống, lưu nó dưới dạng make_link(không có phần mở rộng) ~/.local/share/nautilus/scriptslàm cho nó có thể thực thi được
  2. Sử dụng tập lệnh bằng cách chọn nó làm tùy chọn nhấp chuột phải như trong hình ảnh đầu tiên. Một .desktoptập tin thực thi sẽ được tạo trong cùng thư mục, di chuyển nó đi nơi khác nếu bạn cần; đường dẫn liên kết là tuyệt đối.

Cung cấp cho liên kết một biểu tượng phân biệt

Bạn có thể cung cấp cho các liên kết thay thế một biểu tượng phân biệt. Nếu bạn tìm kiếm trong /usr/share/iconsthư mục "thư mục", nhiều tùy chọn hợp lệ sẽ bật lên.

Nếu trong tập lệnh, dòng "Icon=folder",được thay thế bằng Icon=stock_folder-copy,(sử dụng tên biểu tượng không có phần mở rộng), kết quả trên hệ thống của tôi là:

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

Tất nhiên bạn cũng có thể sử dụng biểu tượng tùy chỉnh của riêng mình, nhưng nếu bạn sử dụng đường dẫn đầy đủ (không sử dụng ~), bạn nên bao gồm phần mở rộng của biểu tượng.

4. Di chuyển đến thư mục ưu việt với phím tắt

Có lẽ là lựa chọn thuận tiện nhất; với cửa sổ nautilus ở phía trước, nhấn phím cắt ngắn để di chuyển một thư mục lên.

Kịch bản

#!/usr/bin/env python3
import subprocess
import time
import os

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def run(cmd):
    subprocess.call(["/bin/bash", "-c", cmd])

# get information on the active window
front = get(["xprop", "-id", get(["xdotool", "getactivewindow"])])
# (only) if it is a "normal" nautilus window, take action
if 'WM_CLASS(STRING) = "nautilus", "Nautilus"' in front:
    # "virtually" press Ctrl + l
    run("xdotool key Control_L+l"); time.sleep(0.05)
    # copy the current path, calculate the "real" parent directory
    real = os.path.realpath(get(["xclip", "-o"]))
    up = os.path.abspath(os.path.join(real, os.pardir))
    time.sleep(0.1)
    # enter the superior directory
    run("printf '"+up+"' | xclip -selection clipboard")
    run("xdotool key Control_L+v")
    # confirm by virtually press Return
    time.sleep(0.1)
    run("xdotool key Return")

Để sử dụng

  1. Đối với giải pháp này, cả xclipxdotoolCần phải có trên hệ thống của bạn.

    sudo apt-get install xdodool 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 level_up.py(bất cứ nơi nào).

  3. Thêm nó vào một phím tắt: chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh:

    python3 /path/to/level_up.py
    

NB Các tùy chọn phím tắt bị giới hạn một chút trong trường hợp này, vì chính tập lệnhsẽ mô phỏngCtrl+LCtrl+Alt+Lsẽ khiến bạn đăng xuất ...Ctrl+\ hoạt động tốt trên hệ thống của tôi.

Giải trình

Kịch bản này cũng mô phỏng Ctrl+ L, nhưng thay vì sử dụng nautilus ' "NAUTILUS_SCRIPT_CURRENT_URI", nó sử dụng xclipđể sao chép đường dẫn được chọn tự động trong cửa sổ nautilus. Giống như tùy chọn 1, tập lệnh sau đó tính toán đường dẫn thực và lấy thư mục cấp trên.

Tùy chọn này có thể hữu ích nếu bạn thích bàn phím sử dụng nhấp chuột phải.


3

Hoặc đối với Ubuntu 14.04, nautilus 3.10-1, với xdotoolgói được thêm vào, chỉ cần sử dụng các mục sau trong .local/share/nautilus/scripts/updirtree tệp của bạn :

# In nautilus, the pwd is the actual, not the link path
xdotool key ctrl-l
xdotool type "$(dirname $(pwd))" "
"

Báo giá cuối cùng chỉ nên chứa một dòng mới hoặc return ( 0x0a). Các pwdtừ bên trong nautilus tạo ra một kết quả khác nhau so với khi chạy từ một bash / thiết bị đầu cuối - nó trả về đường dẫn thực tế, không phải là con đường bằng cách sử dụng liên kết.


Tôi đồng ý rằng nó không có ý nghĩa gì, nó không có giấy tờ và thậm chí tôi không thể tìm ra loại môi trường thực thi nào đang chạy mã (tôi không thể tìm thấy bất kỳ shell nào tạo ra kết quả đó), nhưng nó hoạt động. Đó là một hack, đó là lý do tại sao tôi bao gồm phiên bản nautilus. Ai biết nó sẽ hoạt động trong bao lâu? Có thể phá vỡ ở lần nâng cấp nautilus tiếp theo (hoặc trình thông dịch không xác định), nhưng đối với tôi, nó hoạt động trên các liên kết đến các vị trí được gắn kết, liên kết đến các vị trí trong cây thư mục hoặc chỉ các vị trí đơn giản trong cây thư mục.


Tôi sử dụng Ubuntu 15.10 ... Nó có thể hoạt động, có thể trong một mã tương tự không?
JohnDoea

1
Điều này vô nghĩa, $(pwd)là thư mục làm việc của shell , không phải của nautilus . Xem help.ubuntu.com/community/NautilusScriptsHowto
Jacob Vlijm

@benos Tôi xác nhận, nó hoạt động vào 15.10
user.dz

@JacobVlijm, Nó hoạt động tốt, có vẻ hợp lý với tôi, nautilus chạy các tập lệnh trong thư mục hiện tại.
user.dz

1
Ngoài ra @Sneetsher làm tôi ngạc nhiên, nó hoạt động. Bạn có một vấn đề thời gian tuy nhiên khi được sử dụng trên các đường dẫn rất dài. Bạn sẽ cần thiết lập một khoảng nghỉ sau đó, tùy thuộc vào độ dài của đường dẫn. Những con đường đánh máy khác dường như bị phá vỡ. Lúc đầu, tôi đã sửa nó bằng một dấu ngắt (tùy ý), Trong phiên bản mới nhất, tôi đã xclip dán đường dẫn, không có chủ đề về độ dài của đường dẫn.
Jacob Vlijm

2

Một bản sửa lỗi rõ ràng nhưng cần xây dựng lại nguồn bằng cách hoàn nguyên cam kết này :

diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index ca1f0ac..0b363b4 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -2029,21 +2029,13 @@ activate_activation_uris_ready_callback (GList *files_ignore,

    /* Convert the files to the actual activation uri files */
    for (l = parameters->locations; l != NULL; l = l->next) {
-       char *uri = NULL;
-
+       char *uri;
        location = l->data;

        /* We want the file for the activation URI since we care
         * about the attributes for that, not for the original file.
         */
-       if (nautilus_file_is_symbolic_link (location->file)) {
-           uri = nautilus_file_get_symbolic_link_target_uri (location->file);
-       }
-
-       if (uri == NULL) {
-           uri = nautilus_file_get_activation_uri (location->file);
-       }
-
+       uri = nautilus_file_get_activation_uri (location->file);
        if (uri != NULL) {
            launch_location_update_from_uri (location, uri);
        }

Hướng dẫn xây dựng:

  1. Tải về nguồn:

    apt-get source nautilus
    
  2. Tải xuống phụ thuộc xây dựng

    sudo apt-get build-dep nautilus
    
  3. Thực hiện sửa đổi cần thiết từ bản vá trên

    Biên tập src/nautilus-mime-actions.c

    /* Convert the files to the actual activation uri files */
    for (l = parameters->locations; l != NULL; l = l->next) {
        char *uri = NULL;
        location = l->data;
    
        /* We want the file for the activation URI since we care
         * about the attributes for that, not for the original file.
         */
        if (nautilus_file_is_symbolic_link (location->file)) {
            uri = nautilus_file_get_symbolic_link_target_uri (location->file);
        }
    
        if (uri == NULL) {
            uri = nautilus_file_get_activation_uri (location->file);
        }
    
        if (uri != NULL) {
            launch_location_update_from_uri (location, uri);
        }
    
  4. Xây dựng và cài đặt nó

    autoreconf
    ./configure
    make
    

    Để kiểm tra mà không cần cài đặt

    sudo killall -r "[\w]*nautilus"
    ./src/nautilus
    

    Để cài đặt nó

    sudo make install
    

Điều này sẽ làm cho nautilus giải quyết các liên kết vào đường dẫn đích của chúng. BTW, điều này đã được báo cáo là lỗi một thời gian trước đây. Nếu bạn nghĩ rằng đây là một tính năng thì hãy gửi một báo cáo lỗi khác, yêu cầu cài đặt chuyển đổi hoặc lối tắt cụ thể cho nó.

Tham khảo: Làm thế nào tôi có thể ngăn Nautilus khỏi các liên kết hội nghị? [đóng cửa]


Một vấn đề có thể là bạn cần phải ghim phiên bản hiện tại của nautilus hoặc lặp lại quy trình sau mỗi lần cập nhật.
Jacob Vlijm

1
@JacobVlijm, vâng sẽ như vậy nếu tôi xây dựng gói deb. Nhưng tôi đã không làm, nó sẽ được cài đặt /usr/local/bin/, vì vậy hệ thống sẽ luôn chạy bản sao đã sửa đổi, như được liệt kê trong$PATH
user.dz
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.