All-the-icons-dired не загружается в emacsclient

Я использую all-the-icons-dired с

(use-package all-the-icons
  :if (display-graphic-p)
  :config
  (add-hook 'dired-mode-hook 'all-the-icons-dired-mode))

Если я запускаю emacs, значки загружаются. Но если начать использовать emacsclient -c ., он вообще не загружается.

Ubuntu - 22.04
emacs - 27.1
ExecStart=/usr/bin/emacs --fg-daemon # systemd service entry
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете Emacs как демон, поэтому ваша проблема будет заключаться в том, что вы тестируете (display-graphic-p) при запуске Emacs:

display-graphic-p is a byte-compiled Lisp function in `frame.el'.

(display-graphic-p &optional DISPLAY)

Return non-nil if DISPLAY is a graphic display.
Graphical displays are those which are capable of displaying several
frames and several different fonts at once.  This is true for displays
that use a window system such as X, and false for text-only terminals.
DISPLAY can be a display name, a frame, or nil (meaning the selected
frame's display).

Вы не передаете (необязательный) аргумент DISPLAY, поэтому он равен nil, что означает, что возвращаемое значение будет основано на выбранном в данный момент кадре.

При запуске демона нет графического отображения (нет графических фреймов); поэтому все, что требует его во время запуска, потерпит неудачу.

Вы можете использовать server-after-make-frame-hook или after-make-frame-functions для действия при создании фрейма, и в этот момент (если это графический фрейм) вы получите результат, отличный от этого предиката.


В вашем случае я предлагаю вместо этого сделать вашу функцию dired-mode-hook такой, которая проверяет display-graphic-p и вызывает all-the-icons-dired-mode только в том случае, если этот тест пройден.

(add-hook 'dired-mode-hook #'my-dired-mode-hook)

(defun my-dired-mode-hook ()
  "Custom `dired-mode' config called via `dired-mode-hook'."
  (when (display-graphic-p)
    (all-the-icons-dired-mode 1)))

Однако оказывается тесты режима all-the-icons-dired-mode display-graphic-p, и поэтому вы можете смело использовать:

(add-hook 'dired-mode-hook #'all-the-icons-dired-mode)

Это то, что у вас было изначально, за исключением того, что все это было заключено в какой-то use-package код с проблемной условной проверкой. Я мало что знаю о use-package, но думаю, что вы можете просто удалить :if (display-graphic-p) из этого кода, чтобы получить желаемый результат.

Можете ли вы рассказать мне, как сделать dired-mode-hook, чтобы выполнить проверку. Я совершенно новичок в elisp. Я попробовал (add-hook 'dired-mode-hook (if (display-graphic-p) 'all-the-icons-dired-mode))). Но это добавляет nil к демону dired. Думаю, я не смогу изменить dired-mode-hook себя.

Abhisek 10.04.2024 12:13

Я добавил пример (а затем упрощение, после того как проверил рассматриваемый пакет). Обратите внимание: когда вы добавляете переменную-ловушку, вы должны добавить функцию.

phils 10.04.2024 12:45

Другие вопросы по теме