Emacs 即使配置为不使用X,Flymake抱怨X也不可用

Emacs 即使配置为不使用X,Flymake抱怨X也不可用,emacs,terminal,syntax-checking,flymake,Emacs,Terminal,Syntax Checking,Flymake,在文本模式控制台Emacs会话中运行Flymake模式,如何让Flymake在文本控制台中显示其消息,而不是尝试与X通信 Emacs 23在各种环境下运行,包括Debian和Ubuntu 我已启用flymake gui警告设置为nil,但当我flymake显示当前行的错误菜单时,它会抱怨: X windows are not in use or not initialized 是的,我知道;Emacs在没有X的SSH连接上运行。这就是我禁用Flymake使用GUI的原因。我怎样才能告诉Flym

在文本模式控制台Emacs会话中运行Flymake模式,如何让Flymake在文本控制台中显示其消息,而不是尝试与X通信

Emacs 23在各种环境下运行,包括Debian和Ubuntu

我已启用
flymake gui警告
设置为
nil
,但当我
flymake显示当前行的错误菜单
时,它会抱怨:

X windows are not in use or not initialized
是的,我知道;Emacs在没有X的SSH连接上运行。这就是我禁用Flymake使用GUI的原因。我怎样才能告诉Flymake不要尝试使用GUI,而是在Emacs窗口中说出它要说的话呢?

我发现“工具提示”错误消息非常烦人,所以我在我的
.Emacs
中有这个,它在小缓冲区中显示
Flymake
错误消息。这是我从网上得到的东西。它被称为
flymake cursor.el
。信用属于第一个写它的人。您不需要pyflake位,这是我用作flymake助手的Python工具特有的。主要功能是
show fly err at point
,它允许您使用常规光标悬停在消息的突出显示行上

;;许可证:Gnu公共许可证
;;
;; 显示flymake错误消息的附加功能
;; 当点位于包含flymake的线上时,在迷你缓冲区中
;; 错误。这样就不必将鼠标悬停在错误上,这是一个错误
;    ; 键盘用户的烦恼
;;flymake ler(文件行类型文本和可选完整文件)
(取消显示点()处的飞行错误)
如果光标位于flymake错误上,则显示
“微型缓冲区中的消息”
(互动)
(let((行号(pos处的行号)))
(dolist(elem flymake错误信息)
(如果(均衡器(轿厢元件)线号)
(让((车(第二元素)))
(消息“%s”(fly-pyflake确定消息错误(()())())))
(解除飞行pyflake确定消息(错误)
“pyflake是片状的如果它有编译问题,这将调整
要显示的消息,因此有一条;)”
(cond((非(或(eq主模式“Python”)(eq主模式“Python模式”)t)))
((空(flymake ler文件错误))
做你自己的事
(FLYLER文本错误)
(t;;无法编译错误
(格式为“编译错误,第%s行出现问题”(flymake ler line err()())))
(defadvice flymake转到下一个错误(显示消息激活编译后)
“在小缓冲区中显示错误,而不必将鼠标悬停在其上”
(在点处显示飞行错误))
(defadvice flymake goto prev错误(显示消息激活编译后)
“在小缓冲区中显示错误,而不必将鼠标悬停在其上”
(在点处显示飞行错误))
(defadvice flymake模式(在post命令启动编译之前)
“将功能添加到post命令挂钩,以便
光标位于flymake错误上错误信息为
显示在微型缓冲区中(而不必将鼠标悬停在
"
(设置(使局部变量“post命令挂钩”)
(cons在point post命令挂钩处显示飞行错误)

这基本上是努法尔·易卜拉欣的答案,但pyflakes部分已被删除。更具体地说,我使用flymaker text直接提取错误的文本部分。我只试过epylint。工作起来很有魅力

;;在小缓冲区而不是菜单中显示错误。
;; flymake ler(文件行类型文本和可选完整文件)
(取消显示点()处的飞行错误)
如果光标位于flymake错误上,则在微缓冲区中显示该消息
(互动)
(let((行号(pos处的行号)))
(dolist(elem flymake错误信息)
(如果(均衡器(轿厢元件)线号)
(让((车(第二元素)))
(消息“%s”(flymake ler文本错误()())())))
(defadvice flymake转到下一个错误(显示消息激活编译后)
“在小缓冲区中显示错误,而不必将鼠标悬停在其上”
(在点处显示飞行错误))
(defadvice flymake goto prev错误(显示消息激活编译后)
“在小缓冲区中显示错误,而不必将鼠标悬停在其上”
(在点处显示飞行错误))
(defadvice flymake模式(在post命令启动编译之前)
“将功能添加到post命令挂钩,以便
光标位于flymake错误上错误信息为
显示在微型缓冲区中(而不必将鼠标悬停在
"
(设置(使局部变量“post命令挂钩”)
(cons在point post命令挂钩处显示飞行错误)

您可以从以下网址下载更完整版本的
flymake cursor.el


它进行了一些优化,确保在您高速移动时不会向您的迷你缓冲区发送垃圾邮件。

对早期解决方案的改进。使错误消息的行为更像eldoc消息。消息不会在消息缓冲区中结束,消息不会闪烁,消息不会阻止其他输出。使用词汇范围的变量,而不是全局变量

需要emacs 24。我认为词法绑定注释必须放在文件的顶部

我没有一个独立的存储库,但是可以从中获得最新的版本

;;;-*-词汇绑定:t-*-
;; 使flymake显示eldoc样式错误消息。
(需要“eldoc”)
(在点()处拆除c5飞片)
(caar(flymake查找错误信息flymake错误信息(pos处的行号)))
(德芬c5 flymake展会ler(ler)
(当
不要记录消息。
(let((消息日志最大值为零))
(信息(flymake ler text ler(())))
(让((计时器为零)
(零)
(defalias的c5 flymake指挥所行动(lambda()
(当定时器
(取消计时器)
(设定计时器为零)
(setq ler(点处c5 flymake ler))
(当
(设定计时器(在时间“0.9秒”时运行)无
(lambda()
(当(let((eldoc模式t))