问题标签 [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.

0 投票
1 回答
139 浏览

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 |

0 投票
1 回答
246 浏览

elisp - 使用 Emac 的 SMIE 解析带有 optional 的语言;用于语句终止

我正在使用 SMIE 来解析一种并不总是需要;终止语句的语言。如果行尾位于大括号构造 ( {}, (), []) 之外,并且最后一个非注释标记不是运算符,则\n充当语句终止符。否则,如果行尾在大括号结构内或最后一个标记是运算符,则\n充当延续。

例如,

都是有效的陈述。但,

不是。

我如何编码这是 SMIE 的 BNF 语法(或初学者的任何 BNF)?或者,这不可能吗?

我了解如何将其放入词法分析器并;酌情添加标记,但如果可能的话,我宁愿将其放入语法中。

0 投票
0 回答
66 浏览

emacs - 如何在 SMIE 中定义多字符括号

我复制了 GNU 手册中关于 SMIE 的代码。的缩进beginend工作正常。

但是当我尝试如下添加class/ endclassmodule/endmodule时,新添加的对根本不缩进。当我启用show-paren-mode. 它们没有像以前那样突出begin显示end

0 投票
2 回答
165 浏览

emacs - Emacs 中设置了哪些“本地规则”?

我一直在尝试解决sh-modeEmacs 中的缩进问题(我在 a 之后得到了双缩进then),发现我可以手动设置缩进,然后运行C-c >以自动配置缩进。

但是,此配置仅适用于我当前的会话,并且我似乎找不到任何由于自动配置而被修改的变量。(它虽然有效:缩进始终是我想要的。)当它运行时,它会显示“本地规则集”,但没有告诉我已经设置了哪些本地规则。

当然,当我重新启动 Emacs 时,本地配置会丢失,我必须再次运行 auto-config 命令。

我在这个网站上发现了许多关于列出变量及其值的问题,但我不知道如何列出仅在当前会话中更改的那些。我什至用这篇文章C-c >在运行命令和比较输出之前和之后转储变量;没有什么明显不同。

所以我想我的问题是双重的:

  1. 如果会话变量是“本地规则”的意思,那么我如何找出设置了哪些变量?
  2. 如果“本地规则”意味着别的东西,那是什么,我怎样才能以某种方式将这些更改转移到我的~/.emacs文件中?
0 投票
2 回答
152 浏览

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。他们都没有成功。