问题标签 [smie]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emacs - Emacs `message` function doesn't update *Messages* automatically when called from an SMIE rules-function
I have two buffers open in Emacs, each in their own window, and one of those buffers is the *Messages*
buffer (for the sake of example, let's say the other buffer is *scratch*
). Most things printed to the echo area are immediately visible in the *Messages*
buffer. In other words, if I'm in *scratch*
and press C-g
then "Quit" is printed to the *Messages*
buffer right away. If I enter (message "hi")
into the *scratch*
buffer and eval
it, the *Messages*
buffer is also updated right away.
However, when I try to call the message
function from an SMIE rules-function
, the *Messages*
buffer is not updated right away, and I have to switch to it (C-x o
) in order to see it updated, or scroll it from the other buffer (C-M-v
).
This is obviously trivial to work around, but printing stuff with messages
is damn useful when debugging an SMIE indentation rules function, which is what I'm doing. When I hit tab
in a particular place in my source code, sometimes this function is called more than once, with different parameters (:before
and :after
for the same token, for instance), resulting in more than one line printed to *Messages*
.
Maybe I'm barking up the wrong tree, and in actual fact the SMIE rules function should never be called more than once?? In that case I guess this would be a bug in the lexical spec for this SMIE mode? I'm fiddling with sml-mode.el
and it's called twice when the point is on a line after a "definitional equals" for instance:
where the point is |
elisp - 使用 Emac 的 SMIE 解析带有 optional 的语言;用于语句终止
我正在使用 SMIE 来解析一种并不总是需要;
终止语句的语言。如果行尾位于大括号构造 ( {}
, ()
, []
) 之外,并且最后一个非注释标记不是运算符,则\n
充当语句终止符。否则,如果行尾在大括号结构内或最后一个标记是运算符,则\n
充当延续。
例如,
都是有效的陈述。但,
不是。
我如何编码这是 SMIE 的 BNF 语法(或初学者的任何 BNF)?或者,这不可能吗?
我了解如何将其放入词法分析器并;
酌情添加标记,但如果可能的话,我宁愿将其放入语法中。
emacs - 如何在 SMIE 中定义多字符括号
我复制了 GNU 手册中关于 SMIE 的代码。的缩进begin
和end
工作正常。
但是当我尝试如下添加class
/ endclass
,module
/endmodule
时,新添加的对根本不缩进。当我启用show-paren-mode
. 它们没有像以前那样突出begin
显示end
。
emacs - Emacs 中设置了哪些“本地规则”?
我一直在尝试解决sh-mode
Emacs 中的缩进问题(我在 a 之后得到了双缩进then
),发现我可以手动设置缩进,然后运行C-c >
以自动配置缩进。
但是,此配置仅适用于我当前的会话,并且我似乎找不到任何由于自动配置而被修改的变量。(它虽然有效:缩进始终是我想要的。)当它运行时,它会显示“本地规则集”,但没有告诉我已经设置了哪些本地规则。
当然,当我重新启动 Emacs 时,本地配置会丢失,我必须再次运行 auto-config 命令。
我在这个网站上发现了许多关于列出变量及其值的问题,但我不知道如何列出仅在当前会话中更改的那些。我什至用这篇文章C-c >
在运行命令和比较输出之前和之后转储变量;没有什么明显不同。
所以我想我的问题是双重的:
- 如果会话变量是“本地规则”的意思,那么我如何找出设置了哪些变量?
- 如果“本地规则”意味着别的东西,那是什么,我怎样才能以某种方式将这些更改转移到我的
~/.emacs
文件中?
css - Emacs CSS 模式不会跨多行缩进值
当我的 CSS 文件中的一行看起来太长(通常是一个属性后跟一堆值)时,我想将它们分成几行这样的新行(对不起,我的声誉很低):
https://i.stack.imgur.com/bxXvv.png
但是我必须在行前手动输入空格来实现这一点。实际上,当我用光标url
在行上按 TAB 时,我得到的是:
https://i.stack.imgur.com/r4nxa.png
最糟糕的是,在手动插入空格后,当我在同一行再次按 TAB 时,由于indent-region
.
这不是一个重要的问题,但它真的让我很痛苦,我真的希望我们能在这里找到一个体面的解决方案。提前致谢!
MX版本:
编辑:还为 css 文件和 xah-css-mode 尝试了 web-mode。他们都没有成功。