Xem bộ đệm được quản lý bởi thể hiện emacs khác


7

Có thể chạy gnushoặc những thứ khác có xu hướng thường xuyên chặn trong một cá thể emacs riêng biệt và "chuyển tiếp bộ đệm" sang thể hiện emacs chính. Tôi đoán chung hơn tôi đang tự hỏi loại giao tiếp giữa các trường hợp emacs là có thể.


Không phải là một câu trả lời cho câu hỏi của bạn, mà chỉ là một vài suy nghĩ - nhiều người dường như chạy nhiều phiên bản Emacs vì thiếu một phương pháp tốt hơn để giữ bộ đệm được tổ chức. Có thể tránh được các vấn đề giao tiếp giữa nhiều trường hợp bằng cách không có chúng - nghĩa là tổ chức tốt hơn chỉ với một trường hợp - ví dụ: tổ chức theo khung bằng frame-bufs github.com/alpaker/Frame-Bufs hoặc một loạt các thư viện tổ chức khác (ví dụ: dự án , Vân vân.). Tóm lại, có nhiều cách để tổ chức hiệu quả một khối lượng lớn bộ đệm hoạt động trong một thể hiện của Emacs.
luật

Tôi đang bắt đầu sử dụng el-screencho tổ chức bộ đệm, nhưng cách tiếp cận theo dự án có thể có ý nghĩa hơn. Tôi đang mường tượng nhiều hơn về một emacs bậc thầy và một vài emac công nhân không đầu làm những việc như thế gnus. Giải pháp đơn giản nhất có thể là các emac liên lạc qua các ổ cắm hoặc các emacs chính sinh ra một nhân viên phù du và tất cả các giao tiếp được thực hiện trên stdin và stdout, nhưng sau đó tôi sẽ phải gặp nhiều rắc rối để tuần tự hóa và giải trừ các đối tượng cụ thể của emacs (đó là công việc khó khăn tôi đang cố gắng tránh).
Gregory Nisbet

Ah tôi thấy . . . vâng, tôi thường nhận được một tách cà phê hoặc kiểm tra các câu hỏi mới nhất trên stackexchange trong khi tôi nhận / gửi email lần đầu tiên sau khi khởi chạy Emacs - tức là tôi cảm thấy nỗi đau của bạn. Kiểm tra / gửi email sau đó nhanh hơn nhiều với Wanderlust, nhưng kiểm tra / gửi ban đầu với hàng ngàn email được lưu trữ có thể kéo dài vài phút.
luật

@lawlist, tôi đã thử chạy mutt bên trong ansiterm vì sau đó chỉ có ansiterm sẽ khóa, nhưng tốc độ làm mới là khủng khiếp (và tôi không thể tìm ra cách tắt màu nền trong mutt). Tôi cũng đã thử sử dụng wanderlust nhưng không thể tìm ra cách cấu hình nó cho gmail (Tôi có một thư mục Desktop trống không có gì trong đó).
Gregory Nisbet

Tôi sử dụng mu4e, sử dụng quy trình không đồng bộ để tải xuống thư. (Gửi vẫn là một vấn đề, nhưng thường thì ít hơn, vì đó chỉ là một tin nhắn.)
mbork

Câu trả lời:


4

Đảm bảo rằng mỗi phiên bản Emacs chạy một daemon với một tên duy nhất. Đặt biến server-startđể chọn tên máy chủ, ví dụ:

emacs --daemon &          # Normal instance with the default server name ("server")
emacs --daemon=gnus &     # Instance for GNUS only

Từ một thể hiện, bạn có thể thực thi mã trong một thể hiện khác với hàm server-eval-at. Giá trị của biểu thức được trả về thể hiện cục bộ. Nó cần phải là một giá trị có thể được đọc lại: số nguyên, chuỗi, danh sách và các cấu trúc dữ liệu trong suốt khác của Cameron là ổn, nhưng bạn có thể chuyển bộ đệm, khung, v.v. theo cách này.

Bạn có thể sử dụng cơ sở này để nói với một thể hiện khác để mở một khung, để liệt kê các tên bộ đệm trong một thể hiện khác, v.v ... Lưu ý rằng nếu cá thể kia bận, mã của bạn sẽ chặn cho đến khi nó trả lời daemon.

(server-eval-at "gnus" `(frame-parameter
                          (make-frame-on-display ,(frame-parameter (selected-frame) 'display))
                          window-id))

Không có nhiều mã sử dụng thiết bị này: hầu hết người dùng Emacs đều chạy một phiên bản duy nhất. Vì vậy, bất cứ điều gì bạn muốn làm, có lẽ bạn phải thực hiện một số công việc mã hóa.


Bạn chỉ có thể nói emacs --daemon=gnusthay vìemacs --daemon --eval '(setq server-name "gnus")'
phils 4/10/2015

0

Emacsclient

Sử dụng thay vì Emacs the Emacsclient. Trước tiên, bạn phải thực hiện một (server-start)Emacs (en) và sau đó chạy ứng dụng khách trong khung riêng của nó với emacsclient -c test.mac.

Bạn cũng có thể phân biệt các tệp máy chủ khác nhau với các tùy chọn -f ServerFile(trên Windows) hoặc tên máy chủ -s ServerName. Vui lòng xem tại http://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html . Để đạt được điều đó, bạn phải đặt các tên máy chủ khác nhau cho các Emacsen khác nhau (setq server-name "Server1"), v.v.


Emacsclient có thể kết nối với nhiều daemon không?
Gregory Nisbet

Tôi sợ tôi không hiểu đầy đủ các trường hợp sử dụng của bạn. Bạn có thể cho chúng tôi ví dụ xin vui lòng.
Dieter.Wilmus

1
các chương trình đọc thư như gnus hoặc wanderlust khóa ui trong khi cập nhật. Tôi thực sự không cần các chương trình này để tương tác với phần còn lại của emacs, nhưng muốn bộ đệm được quản lý trong một ngữ cảnh duy nhất vì vậy tôi không cần phải chuyển đổi qua lại giữa các emacs email và mọi thứ khác emacs. Tôi biết rằng một số gói nhất định như helm sử dụng một cá thể emacs riêng biệt để tránh bị chặn và tự hỏi liệu có cách nào để hiển thị bộ đệm từ một cá thể emacs khác thay vì viết lại một phần của máy khách emacs hiện tại để ít đồng bộ hơn.
Gregory Nisbet

@GregoryNisbet: Tôi thấy, tôi đã cập nhật câu trả lời của mình để bao gồm câu trả lời của bạn về nhiều phiên bản máy chủ daemon hoặc Emacs, hy vọng nó có ích ...
Dieter.Wilmus

2
Sẽ không giống như chạy các phiên bản khác nhau của emacs, vì tại một thời điểm, emacsclient có thể truy cập vào bộ đệm của chỉ một emacs sever?
Iqbal Ansari
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.