MacOS X: Làm thế nào để có một ứng dụng tiện dụng Mở một thư mục này trong lối tắt iTerm tinh?


12

Tôi nghĩ rằng tiêu đề nêu chính xác những gì tôi muốn làm. Tôi muốn một phím tắt hoặc thậm chí một nút trong Finder để kích hoạt Tab iTerm mới và thay đổi vị trí thành vị trí tôi đã mở trong Finder. Một số loại open .ngược lại. :-)

Cảm ơn bạn, Malax

Câu trả lời:



10

Bản thảo này hoạt động với tôi:

-- script was opened by click in toolbar
on run
tell application "Finder"
    try
        set currFolder to (folder of the front window as string)
    on error
        set currFolder to (path to desktop folder as string)
    end try
end tell
CD_to(currFolder, false)
end run

-- script run by draging file/folder to icon
on open (theList)
set newWindow to false
repeat with thePath in theList
    set thePath to thePath as string
    if not (thePath ends with ":") then
        set x to the offset of ":" in (the reverse of every character of thePath) as string
        set thePath to (characters 1 thru -(x) of thePath) as string
    end if
    CD_to(thePath, newWindow)
    set newWindow to true -- create window for any other files/folders
end repeat
return
end open

-- cd to the desired directory in iterm
on CD_to(theDir, newWindow)
set theDir to quoted form of POSIX path of theDir as string
tell application "iTerm"
    activate
    delay 1
    -- talk to the first terminal 
    try
        set myterm to the first terminal
    on error
        set myterm to (make new terminal)
    end try

    tell myterm
        try
            -- launch a default shell in a new tab in the same terminal 
            launch session "Default Session"
        on error
            display dialog "There was an error creating a new tab in iTerm." buttons {"OK"}
        end try
        tell the last session
            try
                -- cd to the finder window
                write text "cd " & theDir
            on error
                display dialog "There was an error cding to the finder window." buttons {"OK"}
            end try
        end tell
    end tell
end tell
end CD_to

1
Tôi nghĩ rằng đây nên là câu trả lời được chấp nhận.
dhilipsiva

8

Sử dụng các câu trả lời khác trên trang này, tôi đã tạo một Ứng dụng có thể được kéo vào thanh tác vụ của công cụ tìm.

Bạn có thể tải xuống từ đây: https://github.com/rc1/iTermTo


1
Công việc tuyệt vời! Hoạt động hoàn hảo. Đây phải là câu trả lời được chấp nhận.
rcd

1
Tôi đồng tình - dường như làm việc hoàn hảo. Tải về zip. Kéo ứng dụng vào thư mục Ứng dụng để cài đặt. Kéo ứng dụng vào thanh công cụ tìm kiếm cho các phím tắt tiện dụng.
justingordon

3

Điều này được tích hợp sẵn trong iTerm2 kể từ phiên bản 3.1.0.

Để sử dụng chức năng:
trong Finder, nhấp chuột phải vào thư mục -> Dịch vụ -> Cửa sổ iTerm2 mới Tại đây

Lưu ý: Servicesmenu con nằm ở dưới cùng của menu chuột phải.

Tham khảo
Tại liên kết này, nhấp vào Hiển thị các phiên bản cũ hơn , sau đó trong iTerm2 3.1.0, nhấp vào Hiển thị Changelog và tìm kiếm các dịch vụ , bạn sẽ tìm thấy điều này:

Thêm hỗ trợ cho các dịch vụ tìm kiếm. Bạn có thể nhấp chuột phải vào Finder để khởi chạy iTerm2 ở vị trí đó.


2

Hãy xem cdtodự án được lưu trữ trên https://github.com/jbtule/cdto "Ứng dụng Thanh công cụ Finder để mở thư mục hiện tại trong Terminal (hoặc iTerm, X11). Ứng dụng này được thiết kế (bao gồm biểu tượng của nó) để đặt vào thanh công cụ của cửa sổ tìm. "


Nhưng nó sẽ mở hai cửa sổ iTerms rất khó chịu sau một thời gian.
Mike Lischke

1

Chỉ để hoàn thiện, trước khi tìm thấy câu hỏi này, điều làm việc cho tôi là:

  • điều chỉnh new_tab.sh (AppleScript do bash script phát hành) thành giải pháp chỉ dành cho AppleScript.
  • sau đó từ Applescript Editor-> File-> Export-> File Format = .app.
  • kéo và thả .appthanh công cụ của Finder.

Điều này dẫn đến một nút thanh công cụ Finder sẽ mở thư mục hiện tại trong iTerm2tab mới . Xtra Downloader cung cấp một nút như vậy, nhưng nó sẽ mở các cửa sổ mới.

Một giải pháp tương tự sử dụng các dịch vụ có thể được tìm thấy ở đây , liên kết đến các giải pháp AppleScript liên quan hơn nữa:

AppleScript được điều chỉnh của tôi là:

try
    tell application "iTerm2"
        tell the last terminal
            launch session "Default Session"
            tell the last session
                tell i term application "Finder"
                    set cur_dir to (the target of the front Finder window) as string
                end tell
                set cur_dir to POSIX path of cur_dir
                write text "cd " & cur_dir
            end tell
        end tell
     end tell
end try

Giải pháp này đã được nhận xét trong chủ đề liên quan đến nút này .

Nhờ câu trả lời của iTermTo ở trên.


1

Tôi đoán đó là vì nội bộ của iTerm đã thay đổi, nhưng không có giải pháp nào phù hợp với tôi. Mã đã làm gì sau đây:

tell application "Finder"
    set cur_dir to POSIX path of ((the target of the front Finder window) as string)
end tell
tell application "iTerm"
    tell (create window with default profile)
        write current session text "cd " & quoted form of cur_dir
    end tell
end tell

Hoặc sử dụng Automator làm dịch vụ tìm kiếm:

on run {input, parameters}
    tell application "Finder"
        set cur_dir to POSIX path of (input as string)
    end tell
    tell application "iTerm"
        tell (create window with default profile)
            write current session text "cd " & quoted form of cur_dir
        end tell
    end tell
end run

0

Với iTerm:

Tùy chọn Iterm và tab Cấu hình, đi tới Bảng phụ chung, đặt Thư mục làm việc thành Thư mục sử dụng lại thư mục phiên trước đó.


0

Đây là một tập lệnh đơn giản hóa luôn mở một tab mới (như tập lệnh của bulljit):

try
    tell application "Finder"
        if number of Finder windows is 0 then
            set p to POSIX path of (desktop as alias)
        else
            set p to POSIX path of (target of Finder window 1 as alias)
        end if
    end tell
    tell application "iTerm"
        reopen
        tell current terminal
            tell (launch session "Default Session")
                write text "cd " & quoted form of p
            end tell
        end tell
        activate
    end tell
end try

Nếu bạn muốn tập lệnh sử dụng lại các tab hiện có, hãy thay thế tell current terminalkhối bằng một cái gì đó như thế này:

tell current session of current terminal
    write text "cd " & quoted form of p
end tell

Nhưng điều đó sẽ không hoạt động nếu ví dụ phiên hiện tại đang bận hoặc chạy một quy trình ít hoặc vim.

Gói kịch bản trong một khối thử làm cho nó thất bại trong âm thầm. reopenmở một cửa sổ đầu cuối mới nếu không có cửa sổ hiển thị hoặc chỉ ví dụ như cửa sổ tùy chọn đang mở. Finder cũng có một insertion locationtài sản, thường là target of Finder window 1hoặc máy tính để bàn. Nhưng có một lỗi trong 10.7 và sau đó, nơi nó thường đề cập đến một số cửa sổ khác ngoài cửa sổ ngoài cùng.

Một số vấn đề tiềm ẩn với kịch bản của bulljit:

  • Nó có độ trễ một giây. Tôi không biết nếu nó cần cho một cái gì đó, nhưng tôi không cần bất kỳ sự chậm trễ nào khi tôi thử nghiệm kịch bản này.
  • Nếu bạn đã thiết lập iTerm để mở các cửa sổ mới ở chế độ toàn màn hình và không có cửa sổ đang mở, nó sẽ mở một cửa sổ không toàn màn hình.
  • Nó báo cho Finder biết đường dẫn của front window( window 1), có thể là cửa sổ thông tin hoặc cửa sổ tùy chọn. Finder window 1sẽ luôn luôn là một cửa sổ trình duyệt tập tin.
  • Nó thay đổi thư mục thành /nếu cửa sổ Finder phía trước đang hiển thị chế độ xem không có đường dẫn (như chế độ xem Mạng).

Tôi thích chỉ sử dụng một chức năng như thế này mặc dù:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
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.