Запустіть два окремих демони Emacs для консолі та графічного інтерфейсу


14

Зазвичай я запускаю emacs з графічним інтерфейсом та запускаю сервер відразу з (server-start). Тепер я можу легко відкривати документи в моєму сеансі emacs через термінал через emacsclient -n <file>або через браузер файлів.

Однак час від часу я хочу запускати emacs всередині свого терміналу, використовуючи emacsclient -t. Найчастіше це трапляється під час написання журналів git počin чи виконання інших дуже малих завдань. У цих випадках факт, що мій файл init був завантажений у GUI-екземпляр emacs, означає, що я не отримую жодної моєї настройки, специфічної для TTY emacs.

Я знаю, що можу бігати

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

але це буде завантажувати всі пакунки кожного разу. Чи можу я мати найкраще з обох світів? Чи є спосіб встановити "демон TTY", щоб я міг використовувати окремі налаштування для запуску всередині терміналу проти відвідування файлу у наявному вікні emacs?


1
Чи можете ви вказати на приклад ваших налаштувань, які відрізняються між режимами TTY та GUI?
stsquad

1
@stsquad Один з дійсно простих - це те, що я використовую ліву бахрому в режимі GUI, але оскільки бахрома не існує в режимі TTY, між номерами рядків та текстом немає місця. Це можна виправити (setq linum-format "%d ")у файлі налаштування TTY. Крім того, моя кольорова тема завжди виглядає дивно в режимі TTY, тому я обов'язково виберу іншу тему для TTY. На даний момент у мене немає такої різниці, але тепер, коли я знаю, що я можу мати різні сервери, список може зростати.
nispio

@nispio: Я пропоную вам M-x report-emacs-bugі попросити нові функції, такі як можливість мати різні теми обличчя в TTY і в кадрах графічного інтерфейсу (насправді, тема може вказати абсолютно різні кольори для цих різних типів кадрів, щоб ви могли також налаштувати свою тему) . Використання декількох демонів для цих окремих випадків є лише вирішенням проблеми відсутності відповідної функціональності в Emacs.
Стефан

Відповіді:


14

Використовуйте emacs --daemon=your-server-name -l "custom-init-file"для запуску нового сервера та emacsclient -nw -s your-server-nameпідключення до нього від самого терміналу. У розділі про використання Emacs як сервера в посібнику є більше можливостей ініціалізації.


Це працює! Чи є хороший спосіб вбити сервер, розпочатий таким чином, крім пошуку та видалення серверного файлу?
nispio

(Мені довелося додати -qперемикач, щоб не init.elзапускати за замовчуванням перед користувацьким файлом init.)
nispio

2
Робиш emacsclient -s your-server-name -e "(kill-emacs)"те, що ти хочеш? Вище сказане просто називає emacsclient та evals (kill-emacs). Ви могли б замінити (kill-emacs)з , (save-buffers-kill-emacs)а також.
Вамсі

У мене був спільний init.el і для терміналів, і для gui emacs, і завантажував окремі спеціальні файли для індивідуальних налаштувань. Отже, я пропустив-q
Вамсі

1
Це рішення також вирішило проблему, яка виникала під час використання 'emacsclient -t' з mutt, а в окремому робочому просторі - 'emacsclient -c'. Простіше кажучи: демон демонстрував збій, коли "emacsclient -c" був запущений перед "emacsclient -t". Дякую,
Вамсі

9

Окрім відповіді @ Vamsi, ви можете отримати багато однакових переваг, працюючи лише на одному сервері, додавши поради make-frame-command.

Наприклад, під час запуску в терміналі я хочу, щоб фоновим кольором був black(який карти #202020), але я хочу використовувати #202020в графічному режимі. Я реалізував це за допомогою:

(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")))

З цього ви можете отримати багато пробігу за допомогою make-variable-frame-local( set-background-colorу вищенаведеному вже кадр-локальний).

Я не знаю, чи це найкращий зразок, але якщо у вас порівняно мало відмінностей між режимом TTY та Emacs X-mode, це може полегшити управління конфігурацією.

Вищевказаний код був знятий з мого .emacs.d .


Мені було цікаво, чи існує якийсь спосіб «визначити», в якому режимі я перебуваю на кадрі.
nispio

1
Це зробимо. (display-graphic-p)дає, tякщо поточний кадр графічний, в nilіншому випадку. Оскільки кадри не можна переміщувати між графічними, а не (afaik), додавання порад щодо створення кадру гарантує, що бажаний стан буде досягнуто для даного кадру.
Дж. Девід Сміт

Це, безумовно, найзручніша відповідь.
Малабарба

4

Вам не потрібна порада щодо зміни налаштувань різних кадрів, що працюють в одному демоні emacs. Просто використовуйте гачок after-make-frame-functionsтак

(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)))

Визначаючи це таким чином, додається додатковий бонус, що він встановлює потрібну конфігурацію кадру, навіть якщо ви не запускаєтесь в демон-режимі.

На жаль, load-themeце не кадр локальний, тому інші кольори теж забарвлюються, якщо ви дійсно використовуєте різні теми для тексту та графічних кадрів.

Інформація про бонус: налаштуйте свої термінали як мінімум на 256 кольорів, щоб отримати відчуття вибраної теми. Використовуйте таке налаштування в одному з файлів запуску оболонки:

TERM=xterm-256color
export TERM

Не всі термінали підтримують 256 кольорів, наприклад, у xfce4-терміналу все ще всього 8 (я перейшов на сакуру для гарних кольорів).
unhammer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.