Thiết lập emacsclient trên MS windows


11

Tôi đang cố gắng thiết lập trình nền máy chủ emacs và sử dụng emacsclient trên MS Windows để các tệp có thể được mở nhanh chóng mà không bị trì hoãn và chi phí liên quan đến việc bắt đầu các phiên bản bổ sung của emacs cho mỗi tệp được mở. Tôi đang làm theo các hướng dẫn cụ thể được cung cấp trong emacswiki cho MS Windows, bao gồm:

  1. Chạy emacs như một daemon, runemacs.exe --daemon
  2. Tiếp theo là gọi emacsclientw.exevới các tùy chọn thích hợp.

Bắt đầu trình nền thành công (tôi thấy emacs.exe trong danh sách quy trình), nhưng việc gọi emacsclient tạo ra lỗi. Wiki nói để tạo một lối tắt đến emacsclientw.exevà thay đổi mục tiêu thành

X:\path\to\emacs\bin\emacsclientw.exe -na "X:\path\to\emacs\bin\emacsclientw.exe" -c -n

Điều này có đúng không? Có vẻ như khách hàng được gọi hai lần. Sử dụng đích như được hiển thị không chạy chương trình và tạo ra lỗi "tên tệp hoặc đối số được yêu cầu". Chỉ sử dụng phần đầu tiên của mục tiêu được hiển thị ở trên

X:\path\to\emacs\bin\emacsclientw.exe -na

tạo ra một lỗi chung. Chỉ sử dụng phần thứ hai

X:\path\to\emacs\bin\emacsclientw.exe -c -n

tạo ra lỗi "Không có socket hoặc trình soạn thảo thay thế." (Các tùy chọn emacsclient chính thức được mô tả ở đây. )

Bất kỳ đề xuất? Emacs chạy tốt ở chế độ tiêu chuẩn, nghĩa là không ở chế độ daemon. Phiên bản 25.1. Tôi thích chạy daemon hơn là khởi động máy chủ trong tệp khởi tạo của mình.

Câu trả lời:


5

Tôi không chắc chắn về lời khuyên trong trang emacswiki. Những gì bạn muốn làm là sau đây:

  • Khởi chạy một máy khách emacs được kết nối với máy chủ emacs đang chạy.
  • Nếu máy chủ emacs không chạy, hãy khởi động nó và sau đó kết nối máy khách emacs.
  • Đừng đợi khách hàng kết thúc (nếu bạn bắt đầu từ một dòng lệnh).

Lệnh tôi sử dụng là

C:\emacs\bin\emacsclientw.exe -n -c -a ""

Các -n phương tiện không chờ đợi cho khách hàng đến khi kết thúc khi bạn đang tung ra từ dòng lệnh. Các -a phép bạn chỉ định một trình soạn thảo thay thế nếu máy chủ emacs không chạy , nhưng nếu bạn cho nó một chuỗi rỗng, nó sẽ cố gắng để khởi động server emacs và kết nối với nó. Cuối cùng, nếu bạn đặt cái này trong một phím tắt windows, bạn cũng muốn thêm một -c sẽ mở một khung mới ( xem các tùy chọn emacsclient ).

Đây là lối tắt của tôi, nó hoạt động với tôi (trên windows 7, emacs 25.3). Tôi không biết tại sao trang emacswiki lại đưa ra một lời mời khác của emacsclientw là trình chỉnh sửa thay thế vô nghĩa.

Tôi nên thêm rằng khi tôi cố gắng bỏ qua tùy chọn -c khi chạy dưới dạng phím tắt , nó sẽ báo lỗi.

phím tắt emacsclientw


Định cấu hình phím tắt emacsclientw.exe theo cách hiển thị tạo ra: Error: Cannot connect even after starting the Emacs daemonXác nhận phím tắt này không khởi chạy quy trình trình nền, nhưng các tệp vẫn mở trong ví dụ emacs của riêng chúng. Đã thử nghiệm có và không có quyền quản trị viên. Emacs 25.1, Windows 7.
Snelephant

@Snelephant, hmm, tôi không biết điều gì có thể sai. Tôi thậm chí đã hạ cấp xuống emacs 25.1 và phím tắt của tôi vẫn hoạt động. Làm thế nào bạn mở tệp thông qua một menu ngữ cảnh hoặc với lệnh trong phím tắt theo sau là tên tệp?
Angelo

Lỗi xảy ra cả khi tôi nhấp vào lối tắt đến chính emacsclientw.exe mà không có tệp nào được chỉ định và khi tôi nhấp vào lối tắt đến tệp văn bản có emacsclientw.exe và tên tệp được chỉ định trong trường Target. Trên thực tế, tôi không rõ ràng về phương pháp dự định để mở tệp vào máy khách trên Windows? Tôi muốn chỉ cần nhấp vào tệp trong Windows Explorer. Bấm vào một tệp trong OSX dường như để mở tệp trong một thể hiện hiện có, nhưng bấm vào một tệp trong Windows sẽ tạo một thể hiện riêng. Lưu ý Tôi đã cấu hình Windows để mở tệp văn bản bằng cách sử dụng runemacs.exe được cung cấp cùng với emacs.
Snelephant

Nếu bạn đã cấu hình Windows để mở tệp văn bản bằng runemacs.exe, thì chúng sẽ mở trong các quy trình Emacs riêng biệt. Thay vào đó, bạn muốn thay đổi liên kết đó để sử dụng emacsclientw.
glucas

@glucas Thay đổi liên kết tệp văn bản thành lối tắt đến emacsclientw.exe như mô tả của Angelo. Nhấp vào một tệp văn bản tạo ra cùng Error: Cannot connect even after starting the Emacs daemon.
Snelephant

1

Lệnh tôi sử dụng là:

emacsclientw.exe --create-frame --no-wait --alternate-editor runemacs.exe --server-file %APPDATA%\.emacs.d\server\server

(Nếu thư mục bin Emacs không có trên bạn PATH, hãy sử dụng đường dẫn đầy đủ cho emacsclientw.exerunemacs.exe.)

hoặc với các tên tùy chọn ngắn và thủ thuật chuỗi trống,

emacsclientw.exe -c -n -a "" -f %APPDATA%\.emacs.d\server\server

Lưu ý rằng thủ thuật chuỗi trống cho -asẽ khởi động trình nền nếu nó không chạy, nhưng điều này không được cho là hoạt động cho đến khi Emacs 26 (Tôi vẫn còn trên 25). Trước 26 bạn phải xác định rõ trình soạn thảo thay thế. Tôi đã sử dụng runemacs.exe, nhưng Emacs của tôi được cấu hình để khởi động máy chủ và để nó chạy.

Vì Windows thiếu các ổ cắm tên miền Unix cục bộ emacsclientthường được sử dụng để kết nối với máy chủ, nên nó phải quay trở lại sử dụng ổ cắm TCP mạng. Vì lý do bảo mật rõ ràng, bạn không muốn bất kỳ ai trong mạng truy cập toàn bộ hệ thống tệp của mình thông qua máy chủ Emacs. Vì vậy, emacsclientphải biết cổng (phù du) bên phải và mã thông báo bảo mật được ghi trong tệp máy chủ trước khi máy chủ cho phép kết nối.

Nếu máy chủ đang chạy, thì bạn không cần -a(nhưng nó không bị tổn thương). Bạn có thể đặt ALTERNATE_EDITORbiến môi trường thay vì sử dụng -a.

Nếu bạn đặt EMACS_SERVER_FILEbiến môi trường, thì bạn không cần chỉ định lại với -f.

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.