問題タブ [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を使用して、オプションで言語を解析します。ステートメント終了の場合
;
私はSMIEを使用して、ステートメントを終了する必要がない言語を解析しています。{}
行の終わりが中括弧構造( 、、)の外側にあり()
、[]
最後の非コメントトークンが演算子ではなかった場合\n
、ステートメントターミネータとして機能します。それ以外の場合、行の終わりが中括弧内にあるか、最後のトークンが演算子である場合、\n
継続として機能します。
例えば、
すべて有効なステートメントです。だが、
ではありません。
これをSMIEのBNF文法(または初心者向けのBNF)にエンコードするにはどうすればよいですか?または、それは不可能ですか?
これをレクサーに入れて必要に応じてトークンを追加する方法を理解して;
いますが、可能であれば文法に入れたいと思います。
emacs - How to define multiple character parenthesis in SMIE
I copied the the code in the GNU manual about SMIE. The indent of begin
and end
works fine.
But when I try to add class
/endclass
, module
/endmodule
as below, the new added pairs do not indent at all. When I enable show-paren-mode
. They are not highlighted as begin
and end
does.
emacs - Emacsにはどのような「ローカルルール」が設定されていますか?
Emacs でインデントの問題を解決しようとしておりsh-mode
( の後に二重のインデントが表示されます)、手動でインデントを設定してから、実行してインデントを自動的に構成then
できることがわかりました。C-c >
ただし、この構成は現在のセッションにのみ適用され、自動構成の結果として変更された変数が見つからないようです。(ただし、機能しました:インデントは一貫して私が望むものです。)実行すると、「ローカルルールセット」と表示されますが、どのローカルルールが設定されているかはわかりません。
もちろん、Emacs を再起動すると、ローカル構成が失われ、auto-config コマンドを再度実行する必要があります。
このサイトで、変数とその値の一覧表示に関する多くの質問を見つけましたが、現在のセッションでのみ変更されたものを一覧表示する方法がわかりません。この投稿を使用して、C-c >
コマンドを実行して出力を比較する前後に変数をダンプしました。明らかに違うものはありません。
したがって、私の質問は2つあると思います。
- セッション変数が「ローカル ルール」の意味するものである場合、どの変数が設定されているかを調べるにはどうすればよいですか?
- 「ローカルルール」が別の意味である場合、それは何ですか?また、どうすればそれらの変更を自分の
~/.emacs
ファイルに転送できますか?