Trước hết, Firefox dựa trên các cài đặt trong "Chọn ứng dụng trợ giúp" trên cài đặt hệ thống, vì vậy không có cách nào đơn giản để định cấu hình đó.
Một giải pháp thậm chí tốt hơn, tiện dụng, khôn ngoan, là sử dụng tiện ích mở rộng Firefox có tên "Open With" https://addons.mozilla.org/en-US/firefox/addon/open-with/
Nó nói rằng nó dành cho các trình duyệt web, nhưng hóa ra nó có thể là bất kỳ chương trình nào - nó chỉ gọi chương trình của anh ta với URL là đối số đầu tiên.
Tiếp theo, tôi đã viết một kịch bản Python:
import sys, os, re, tempfile, urllib, urlparse, time
handler, url = sys.argv[1:3]
match = re.match(r".*(\.[A-Za-z_]+)$", urlparse.urlparse(url).path)
tmpfile, tmpfile_path = tempfile.mkstemp(suffix=match.group(1) if match else '')
os.close(tmpfile)
print "Downloading to temp file ..."
urllib.urlretrieve(url, tmpfile_path)
#Normally it would try to clean up the file we urlretrieved after this Python
#process ends. Thank BDFL there are no access restrictions on private variables.
urllib._urlopener._URLopener__tempfiles = []
os.execlp(handler, handler, '%s' % tmpfile_path)
#We don't attempt to delete the temporary file because:
# 1. Firefox also doesn't in such cases.
# 2. It's problematic in some instances, such as when the subprocess (this
# script used to call the handler in a subprocess) finds another copy
# of itself running, hands the file over to it and exits. Meanwhile, we
# would be over here deleting the file while the subprocess'es brother
# hadn't tried to open it yet.
Những gì nó làm:
Tạo một tên tệp duy nhất trong thư mục Temp của người dùng (cùng nơi mà Firefox lưu trữ các tệp trong các trường hợp đó).
Đảm bảo rằng phần mở rộng của tệp tạm thời sẽ lành mạnh, ngay cả với một URL bao gồm chuỗi truy vấn và hàm băm ( urlretrieve(..)
không có đối số thứ hai xử lý cái trước, nhưng không có cái sau). Điều này rất hữu ích, vì nó cho Vim biết cách làm nổi bật tệp.
Tải tập tin từ URL về người dùng hiện tại Temp
danh mục.
Mở tệp bằng gvim.exe
(hoặc một biên tập viên bạn chọn - xem bên dưới).
Cách sử dụng giải pháp này:
Lưu tập lệnh Python ở trên dưới dạng open_with.py
một nơi nào đó bạn giữ những kịch bản như vậy.
Cài đặt Mở với Phần mở rộng Firefox tại liên kết trên và khởi động lại Firefox.
Đi đến Tools > Add-ons > Extensions > Open With > Options
. Có:
(a). (Trừ khi bạn có kế hoạch sử dụng Mở với cho mục đích dự định của nó, "Ẩn"
tất cả các trình duyệt trong danh sách.)
(b). "Thêm vào..." python.exe
.
(c). Đặt "Đối số ..." cho đường dẫn của tập lệnh theo sau là tên tệp hoặc đường dẫn thực thi của trình soạn thảo. Đối với tôi, đây sẽ là
C:\E\infrastructure\open_with.py gvim.exe
(d). "Đổi tên ..." thành "gVim".
Đảm bảo rằng gvim.exe
nằm trong biến PATH. Tôi đề nghị Chỉnh sửa tập lệnh Autohotkey , có thể biên dịch được với EXE bằng các công cụ AHK (đặt nó vào Quick Launch
để thuận tiện - chỉnh sửa PATH trở thành ba lần nhấp, thay vì phải trải qua kiểm tra bộ nhớ Bảng điều khiển một lần nữa.) Nếu không, bạn phải cung cấp toàn bộ đường dẫn của gvim.exe
ở bước 3 (c).
Đó là nó. Bây giờ hãy tìm một liên kết đến một tệp trong Firefox, nhấp chuột phải vào tệp đó và chọn "Liên kết mở với gVim".
(Đoán làm thế nào tôi có biểu tượng chính xác ở đó :)
Phần thưởng: nếu bạn đặt cài đặt có liên quan trong Mở với tiện ích mở rộng Tùy chọn , bạn có thể nhấp chuột phải vào tab Firefox và mở (hầu hết) các trang web trong Vim - ví dụ như "Xem nguồn" ngoại trừ sử dụng Vim.
Lưu ý rằng giải pháp này cũng áp dụng tốt cho Emacs, Notepad ++ và nhiều phần mềm khác không bị hạn chế đối với trình soạn thảo văn bản. Ví dụ, tôi vừa thử nó với GIMP và nó đã mở một tệp PNG. (Để làm điều đó, thay thế gvim.exe
ở trên với đường dẫn đến GIMP. Lưu ý: để mở một hình ảnh tùy ý theo cách này, không chỉ là một liên kết, bạn có thể Xem hình ảnh và sau đó nhấp chuột phải vào tab của nó.)
Ghi chú lịch sử: ban đầu tôi đã đi viết một kịch bản BAT, nhưng điều đó đã trở nên không thể kiểm soát được sau khi nó thất bại trong trường hợp thử nghiệm này: http://evgeni.org/w/api.php?format=xml&action=query&title=AutoHotkey_shortype&prop=revutions&rvprop=content
Đó là bởi vì cmd.exe
có vấn đề với các đối số có chứa =
tính cách. Hơn nữa, nó không chỉ là vấn đề gọi gvim.exe
với URL là đối số dòng lệnh (mặc dù Vim không chấp nhận URL), vì nó không thể xử lý trường hợp kiểm tra này - chỉ mở một phiên bản trống của Vim. Và để phân tích URL, tôi phải dùng đến Powershell, điều này hạn chế tính di động của giải pháp. Cuối cùng, tôi quyết định rằng việc cài đặt Python làm điều kiện tiên quyết không phải là quá nhiều để hỏi.