Как я могу разделить буфер компиляции spacemacs по горизонтали?

Я устанавливаю (setq split-width-threshold 100) в моем dotspacemacs/user-config, чтобы различные буферы разделялись по горизонтали, когда окно достаточно широкое. Это работает так, как задумано для магит-статуса и т. д.

Однако буфер журнала компиляции, похоже, игнорирует это и всегда открывается внизу.

Как я могу заставить буфер компиляции придерживаться split-width-threshold? В качестве альтернативы, как заставить его всегда разделяться по горизонтали?

Я совершенно новичок как в emacs, так и в spacemacs.


person Jostein    schedule 26.06.2017    source источник


Ответы (3)


Причина, по которой компиляция не подчиняется вашим настройкам, заключается в том, что в spacemacs по умолчанию включено purpose-mode. Если вы используете это, то это вопрос изменения макетов целей по вашему желанию. Однако, если вы не используете purpose-mode, то его отключение решает проблему для меня. Чтобы просто попробовать, вы можете сделать SPC SPC purpose-mode RET, а затем (открыв только одно окно) запустить компиляцию.

person nert    schedule 16.10.2017
comment
Спасибо за ответ, но у меня это тоже не сработало. У меня не установлен уровень цели, и в SPC SPC нет режима цели. - person Jostein; 08.11.2017
comment
@Jostein Так что теперь мне интересно. Мне удалось исправить это для себя таким образом, поэтому я сразу же сделал вывод, что это основная причина. Однако с тех пор я удалил пакет target-mode, и он у меня больше не работает. Так что, думаю, это сработало только один раз. Думаю, мне следовало добавить несколько баллов к моему свойству удачи, когда я начинал это воплощение. Хорошо. Извините за вводящий в заблуждение ответ тогда. - person nert; 08.11.2017
comment
Это просто спасло мой день :). - person Dominik Schrempf; 13.04.2018

Вот один из способов сделать это (SPC f e d, чтобы добраться до вашего файла конфигурации, затем вы можете поместить его в существующую функцию dotspacemacs-user-config) - здесь я показал, как получить всплывающие справа буферы grep и компиляции:

(require 'dash)

(defun my/popwin-on-right (alist-item)
  (let ((props-alist (seq-partition (cdr alist-item) 2)))
    (setf (alist-get :position props-alist) '(right))
    (setf (alist-get :height props-alist) '(1.0))
    (setf (alist-get :width props-alist) '(0.5))
    (let ((flattened (apply #'append props-alist)))
      (cons (car alist-item) flattened))))

(custom-set-variables
  '(popwin:special-display-config
    (--map-when (-contains? '("*compilation*" "*grep*") (car it))
                (my/popwin-on-right it)
                popwin:special-display-config)))

или вы можете просто установить popwin:special-display-config более прямо, заменив там вызов --map-when буквальным списком. Просто просмотрите существующее значение переменной, например. используя SPC SPC ielm <RET>, чтобы получить красивое форматирование, затем вырежьте и вставьте его (вам нужно будет заключить список в кавычки, используя '). Или вы можете сделать то, что я делаю, когда я хочу установить настраиваемую переменную в качестве буквального значения: используйте SPC SPC customize, пусть это обновит конец вашего конфигурационного файла spacemacs с его блоком сгенерированного кода, а затем скопируйте в него пользовательские наборы переменных. генерируется в ваш dotspacemacs-user-config, и удалите блок кода, который сгенерировал customize).

person Croad Langshan    schedule 25.08.2019
comment
Хорошо, это единственное, что, кажется, действительно работает! Тем не менее мне интересно, почему необходимо использовать такой метод грубой силы. - person leftaroundabout; 18.09.2019

Из другого ответа

(setq split-height-threshold nil)
(setq split-width-threshold 0)

Если вы хотите, чтобы эти настройки влияли только на compile

(defadvice compile (around split-horizontally activate)
  (let ((split-width-threshold 0)
        (split-height-threshold nil))
    ad-do-it))
person Tim Miller    schedule 28.06.2017
comment
Как я уже писал, я уже это делаю, но это не дает ожидаемого эффекта. Это проблема, которую я пытаюсь решить. Я предполагаю, что это связано с Spacemacs (я полагаю, что другой ответ касается ванильного emacs), но я могу ошибаться. - person Jostein; 29.06.2017
comment
В своем посте вы говорите, что устанавливаете порог разделения ширины на 100, а не на 0, верно? Вы пробовали установить его на 0? Возможно, Spacemacs делает что-то странное с размещением буфера, но мне ничего не известно о таком поведении. Вы можете попробовать это в конфигурации vanilla emacs, чтобы увидеть, что происходит. - person Tim Miller; 29.06.2017
comment
Да, я действительно пробовал и 0, и 100, и в любом случае это не должно иметь значения, так как моя ширина больше 100, и это работает, как предполагалось, с буфером magit. Но по какой-то причине буфер компиляции кажется освобожденным от пороговых значений. Я мог бы покопаться в самом spacemacs или попытаться узнать больше о конфигурации emacs, но я надеялся, что у кого-то может быть такая же проблема. - person Jostein; 29.06.2017