有没有办法让flycheck-list-errors生成的新窗口永远在下面?

尝试过(setq split-width-threshold 9999),有效,但这个是全局的,我只想改flycheck-list-errors

接着尝试过
(require 'shackle)

(setq shackle-rules ‘(("\`\Flycheck errors.?\*\’" :align 'below :size 0.3)))

(shackle-mode)
此前尝试用类似命令禁止ein总给我创建新窗口,有效。代码:
(setq shackle-rules ‘(("\`\ein: .+?\.ipynb\\’" :regexp t :same t)))

无效。但不报错。

尝试popwin:
(require 'popwin)
(push '(flycheck-list-errors :position bottom) popwin: special-display-config)
同样无效。也不报错。

不知有没有别的解法?

你写的是正则,没有加上:regexp t。要么就不写正则,直接"*Flycheck errors*"

(setq split-width-threshold 9999) 也不是都有效吧,如果你要局部的话可以这样

(let ((split-width-threshold 9999))
  (flycheck-list-errors))

不过右边有窗口好像还是会复用后边的窗口

有个变量叫作 display-buffer-alist 你可以看看,好像是用来控制窗口

刚才测了一下。popwin push的那个指令直接"*Flycheck errors"是有效的,加上:regexp t无效。

shackle的指令无论怎么改都无效。

symbol’s function definition is void: flycheck-list-errors

看样子这个指令不认识flycheck-list-errors这个东西。

flycheck-list-errors 是我复制的你一楼的,你自己看下这个函数对不对,我没用 flycheck

这个拼写没错,但type好像不对。应该只是不能放在这个位置。

那就不清楚了,我用 flymake-show-diagnostics-buffer 试了一下没有问题。

你贴的错误提示是找不到这个函数,我去 flycheck 源码看了下有这个函数,应该是你用的时候没有 require 吧

个人还是推荐用 display-buffer-alist 这个比较靠谱

(setq display-buffer-alist
      '(("^\\*Flymake diagnostics"
	 (display-buffer-reuse-window
	  display-buffer-in-side-window)
	 (reusable-frames . visible)
	 (side            . bottom)
	 (window-height   . 0.33))))

把上面的字符串改成 flycheck-list-errors 执行后的那个 buffer 的名字,支持正则表达式。

window-height 是窗口占得比例。

一个该变量的说明

1 个赞

亲测有效。非常感谢! 看样子不用装什么插件了。我决定去仔细研究一下display-buffer-alist

其实 popwinshackle 都是用来 display-buffer-alist 来实现的,我使用shackle来实现这个的。

很简单,把(flycheck-error-list-mode :select t :size 0.3 :align 'below) 加入到 shackle-rules 即可。popwin也类似。