Bắt đầu hai trình nền emacs riêng cho giao diện điều khiển và GUI


14

Thông thường tôi bắt đầu emacs với GUI và khởi động máy chủ ngay lập tức (server-start). Bây giờ tôi có thể dễ dàng mở tài liệu vào phiên emacs hiện tại của mình từ thiết bị đầu cuối thông qua emacsclient -n <file>hoặc từ Trình duyệt tệp.

Thỉnh thoảng, tôi muốn chạy emacs bên trong thiết bị đầu cuối của mình bằng cách sử dụng emacsclient -t. Điều này xảy ra thường xuyên nhất khi viết nhật ký cam kết git hoặc thực hiện các nhiệm vụ rất nhỏ khác. Trong các trường hợp đó, thực tế là tệp init của tôi đã được tải trong phiên bản GUI của emacs có nghĩa là tôi không nhận được bất kỳ tùy chỉnh nào dành riêng cho TTY emacs.

Tôi biết rằng tôi có thể chạy

emacs -nw -q -l "some-custom-init-file.el"

nhưng điều đó sẽ tải lại tất cả các gói mỗi lần. Tôi có thể có tốt nhất của cả hai thế giới? Có cách nào để thiết lập "TTY daemon" để tôi có thể sử dụng các tùy chỉnh riêng để chạy bên trong thiết bị đầu cuối so với truy cập tệp trong cửa sổ emacs hiện có không?


1
Bạn có thể chỉ ra một ví dụ về các tùy chỉnh của bạn khác nhau giữa chế độ TTY và GUI không?
stsquad

1
@stsquad Một điều thực sự đơn giản là tôi sử dụng rìa trái trong chế độ GUI, nhưng vì rìa không tồn tại trong chế độ TTY, nên không có khoảng cách giữa số dòng và văn bản. Điều này có thể được sửa (setq linum-format "%d ")trong tệp tùy chỉnh TTY. Ngoài ra, chủ đề màu của tôi luôn trông lạ trong chế độ TTY, vì vậy tôi chắc chắn sẽ chọn một chủ đề khác cho TTY. Tôi thực sự không có nhiều sự khác biệt vào lúc này, nhưng bây giờ tôi biết rằng tôi có thể có các máy chủ khác nhau, danh sách có thể phát triển.
nispio

@nispio: Tôi đề nghị bạn M-x report-emacs-bugvà yêu cầu các tính năng mới như khả năng có các chủ đề khuôn mặt khác nhau trong TTY và trong khung GUI (thực tế, một chủ đề có thể chỉ định các màu hoàn toàn khác nhau cho các loại khung khác nhau đó, vì vậy bạn cũng có thể điều chỉnh chủ đề của mình) . Sử dụng một số trình nền cho các trường hợp riêng biệt đó chỉ là một cách giải quyết cho việc thiếu chức năng tương ứng trong Emacs.
Stefan

Câu trả lời:


14

Sử dụng emacs --daemon=your-server-name -l "custom-init-file"để khởi động một máy chủ mới và emacsclient -nw -s your-server-nameđể kết nối với nó từ chính thiết bị đầu cuối. Phần Sử dụng Emacs làm máy chủ trong hướng dẫn sử dụng có nhiều tùy chọn khởi tạo hơn.


Những công việc này! Có cách nào tốt để giết máy chủ bắt đầu theo cách này ngoài việc tìm kiếm và xóa tệp máy chủ không?
nispio

(Tôi đã phải thêm một -qcông tắc để giữ cho mặc định của tôi init.elkhông chạy trước tệp init tùy chỉnh.)
nispio

2
emacsclient -s your-server-name -e "(kill-emacs)"làm những gì bạn muốn? Ở trên chỉ gọi emacsclient và evals (kill-emacs). Bạn có thể thay thế (kill-emacs)bằng (save-buffers-kill-emacs)là tốt.
Vamsi

Tôi đã từng có một init.el chung cho cả terminal và gui emacs và tải các tệp tùy chỉnh riêng biệt cho các tùy chỉnh riêng lẻ. Do đó tôi đã bỏ lỡ-q
Vamsi

1
Các giải pháp này cũng đã khắc phục sự cố tôi gặp phải khi sử dụng 'emacsclient -t' với mutt và, trong một không gian làm việc riêng, 'emacsclient -c'. Nói một cách đơn giản: daemon đã bị sập khi 'emacsclient -c' bị kích hoạt trước khi 'emacsclient -t'. Cảm ơn bạn, Vamsi
Boccaperta-IT

9

Ngoài câu trả lời của @ Vamsi, bạn có thể nhận được nhiều lợi ích tương tự trong khi chỉ chạy một máy chủ bằng cách đính kèm lời khuyên make-frame-command.

Ví dụ, trong khi chạy trong thiết bị đầu cuối, tôi muốn màu nền là black(ánh xạ tới #202020) nhưng tôi muốn sử dụng #202020trong chế độ đồ họa. Tôi đã thực hiện điều này với:

(defadvice make-frame-command (after make-frame-change-background-color last activate)
  "Adjusts the background color for different frame types. 
Graphical (X) frames should have the theme color, while terminal frames should match the terminal color (which matches the theme color...but terminal frames can't directly render this color)"
    (if (display-graphic-p)
        (set-background-color "#202020")
      (set-background-color "black")))

Bạn có thể nhận được rất nhiều số dặm trong số này bằng cách sử dụng make-variable-frame-local( set-background-colorở trên đã là khung cục bộ).

Tôi không biết đây có phải là mẫu tốt nhất không, nhưng nếu bạn có tương đối ít khác biệt giữa chế độ TTY và chế độ X, nó có thể giúp việc quản lý cấu hình dễ dàng hơn.

Đoạn mã trên được lấy từ .emacs.d của tôi .


Tôi đã tự hỏi nếu có một số cách để "phát hiện" tôi đang ở chế độ nào trên cơ sở mỗi khung hình.
nispio

1
Điều này sẽ làm điều đó. (display-graphic-p)đưa ra tnếu khung hiện tại là đồ họa, nilnếu không. Vì không thể di chuyển khung giữa đồ họa và không (afaik), nên đính kèm lời khuyên cho việc tạo khung đảm bảo rằng trạng thái mong muốn đạt được cho khung đã cho.
J David Smith

Đây chắc chắn là câu trả lời thuận tiện nhất.
Malabarba

4

Bạn không cần một lời khuyên để thay đổi cài đặt của các khung khác nhau đang chạy trong cùng một trình nền emacs. Chỉ cần sử dụng móc after-make-frame-functionsnhư vậy

(defvar my/ttheme 'tango-dark)
(defvar my/gtheme 'tango)
(defun my/frame-configuration (frame)
  "configure the current frame depending on the frame type"
  (with-selected-frame frame
    (if (display-graphic-p)
        (progn
          (message "after-make-frame-functions hook: window system")
          (set-frame-size frame 115 60)
          ;; other settings for a graphical frame
          (load-theme my/gtheme t))
      (message "after-make-frame-functions hook: text console")
      (load-theme my/ttheme t)
      (set-frame-parameter frame 'menu-bar-lines 0))))

(add-hook 'after-make-frame-functions 'my/frame-configuration)

;; normal start without daemon
(if (not (daemonp))
  (my/frame-configuration (selected-frame)))

Xác định nó theo cách này có thêm phần thưởng, rằng nó đặt cấu hình khung mong muốn ngay cả khi bạn không bắt đầu ở chế độ daemon.

Thật không may, load-themekhông phải là khung cục bộ và vì vậy các khung khác cũng bị tô màu nếu bạn thực sự sử dụng các chủ đề khác nhau cho khung văn bản và đồ họa.

Thông tin về phần thưởng: định cấu hình thiết bị đầu cuối của bạn với ít nhất 256 màu để có được cảm giác thực sự về chủ đề bạn đã chọn. Sử dụng một cài đặt như thế này trong một trong các tệp khởi động shell của bạn:

TERM=xterm-256color
export TERM

Không phải tất cả các thiết bị đầu cuối đều hỗ trợ 256 màu, ví dụ xfce4-terminal vẫn chỉ là 8 (tôi đã chuyển sang sakura cho các màu đẹp).
unhammer
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.