タグ付けされた質問 「hooks」

フックはEmacsをカスタマイズするための重要なメカニズムです。フックは、関数のリストを保持するLisp変数であり、明確に定義された場合に呼び出されます。

3
マイナーモードを有効にする適切な方法
私が持っているFOO-modeをして可能にするバー・マイナー・モードをそれのために。それで、どちらの方法がより一般的で望ましいですか? A (add-hook 'foo-mode-hook 'bar-minor-mode) B (add-hook 'foo-mode-hook (lambda () "Turn on `bar-minor-mode' mode." (bar-minor-mode 1))) C (defun bar-minor-mode-on () "Turn on `bar-minor-mode' mode." (interactive) (bar-minor-mode 1)) (add-hook 'foo-mode-hook 'bar-minor-mode-on) D •バリアントC、ただしアップストリームにプッシュされる機能 E •バリアントC、ただしプラグインのレシピに保存されている機能
24 hooks  minor-mode 

1
記号の前の「#」と「#」の違いは何ですか?
私はEmacsに少し慣れていない。いくつかの構成を見ると、「add-hook」に2つのタイプのコマンドがあることがわかりました。 (add-hook 'LaTeX-mode-hook #'LaTeX-math-mode) そして (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) これは私を長い間混乱させており、Googleで「#」を検索する方法がわかりません... ありがとう。
22 elisp  hooks  functions  quote 

2
コードコメント用の全自動のフィルパラグラフモードはありますか?
入力中に常に段落を埋めるマイナーモードを探しています(aggressive-indent-modeインデントの場合と同様)。また、コメント(および場合によっては言語に応じた文字列)のみを埋めるのに十分なスマートである必要があります。 私が試したいくつかのことは次のとおりです。 auto-fill-mode 新しい段落を入力している間は自動的に塗りつぶされますが、段落を編集するときは補充されません。 refill-mode 常に段落を補充しますが、コメントだけでなく段落にもコードをラップしようとします。 私fill-paragraphはafter-change-functionsフックに追加しようとしましたが、元に戻すと他の多くのことを台無しにします(これはおそらくすべて修正可能ですが、いくつかの努力が必要です)。 より良いアイデアはありますか?

2
特定のファイルタイプのファイルを開くときにコマンドを実行する
特定のファイルタイプのファイルを開いたときに、いくつかのコマンドを実行するLispスクリプトを取得しようとしています。テーマを削除すると、起動時にemacsにテーマがないため、正しいinitファイルで作業していることがわかります。 これは私が使用しているスクリプトで、動作しません(エラーも何もありません): (defun my-project-hook (filename) (when (string= (file-name-extension filename) "ts") ((typescript-mode) (tss-setup-current-buffer)) ) ) (add-hook 'after-load-functions 'my-project-hook)

2
キーシーケンスが実際に行うことを確認する方法
テキストを編集するときに、予期しない動作を時々観察します。私の最初の手段は、通常C-h k、特定のキーシーケンスによって呼び出されている関数を見つけるために使用することです。ただし、ドキュメントが観察された動作と矛盾する場合があります。これらの場合、私は通常、他のパッケージがその関数またはキーシーケンスにフックし、その動作を変更していると想定します。 キーシーケンスにどの 関数がフックしているかを調べるにはどうすればよいですか? 最近出会った一例は、"キーを押して、アクティブ領域の最初と最後に引用符が挿入されたことです。これはデフォルトのEmacsの動作ではないのではないかと疑われたため、C-h k "実際にどの関数が呼び出されているのかを調べていました。 describe-keyドキュメントには、関数があることを私に言ったself-insert-command、組み込みの関数である、と呼ばれていました。長い話を短くするために、ある程度の試行錯誤の後、私は行動がによって引き起こされたと判断することができましたelectric-pair-mode。将来、疑わしいパッケージを一度に1つずつオフにして犯人を見つけるよりも、この結論に達するより速い方法がありますか?
14 keymap  hooks 

3
フック関数を一度だけ実行する方法はありますか?
コンテキスト emacsクライアント/サーバー構成でafter-make-frame-functionsテーマを適切にロードするためにフックを使用しています。具体的には、これを作成するために使用するコードスニペットです(このSO回答に基づいています)。 (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup))) (progn (load-theme 'monokai t) (sml/setup))) 問題 新しいemacsclient -c/tセッションが開始されると、フックは新しいフレームだけでなく、以前のすべての既存のフレーム(他のemacsclientセッション)でも実行され、非常に迷惑な視覚効果をもたらします(テーマはすべてのフレームで再び読み込まれます)。さらに悪いことに、ターミナルクライアントでは、既に開いているテーマの色が完全に台無しになります。明らかに、同じemacsサーバーに接続されているemacsクライアントでのみ発生します。この動作の理由は明らかであり、フックはサーバー上で実行され、すべてのクライアントが影響を受けます。 質問 この関数を一度だけ実行する方法や、フックを使用せずに同じ結果を取得する方法はありますか? 部分的な解決策 @Drewの回答のおかげで、このコードが完成しました。しかし、まだ問題があります。ターミナルでクライアントセッションを開始すると、GUIはテーマを適切にロードせず、その逆も同様です。多くのテストを行った結果、動作はどのemacsclientが最初に起動するかに依存していることを認識し、さまざまなものを破棄した後、ロードされたカラーパレットに関連している可能性があると思います。手動でリロードすると、テーマはすべて正常に機能するため、初期構成のように毎回フックによって関数が呼び出されたときにこの動作が表示されません。 (defun emacsclient-setup-theme-function (frame) (progn (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup) …

2
遅延初期化をどこに含める必要がありますか?
latexモードに特定のキーバインディングを追加したい: (define-key latex-mode-map (kbd "<f6>") 'my-latex-defun) 同時に、特定のモードがロードされたときにのみ設定したいです。そのため、適切なフック(latex-mode-hook)を使用してそれを達成するか、句(with-eval-after-load "tex-mode" ...を使用してキーバインディング定義をラップするか、どちらが優先されるか(ベストプラクティス)を知りたいと思います。私は両方をテストしましたが、うまく動作しますが、どちらが正しい方法なのでしょうか。
13 init-file  hooks 

3
cc-modeのbefore-save-hook
cc-mode保存する前に関数を実行するようにカスタマイズしたい。1つの解決策は、cc-modeキーマップを変更C-x C-sして、必要な作業を実行して保存する関数にバインドすることです。 私の質問は、これのためにカスタマイズできるフックがあるかどうかです。CCフックドキュメントは言及していないbefore-save-hook、特にためにcc-mode。フックを介してこれをどのように行う必要がありますか? または、これをどのように行うのdefadviceですか?マニュアルを読んだところ、私が見た唯一の方法は、保存する前にアドバイスを有効にし、作業が終わったら無効にすることでした。これは面倒に聞こえます。advicesの慣用的な使い方は何でしょうか?
13 hooks  cc-mode  advice 

1
特定のモードで保存時に外部スクリプトを実行しますか?
私がいる時org-mode、私はEmacsは、私が打つ時はいつでも私が書いたbashスクリプトを実行したいC-x s保存することを。スクリプトは、保存しているファイルをRaspberry Piに自動的に同期します。引数としてファイル名が必要です。 org保存時にファイルに対して外部スクリプトを実行するようにEmacsに指示するにはどうすればよいですか?

1
特定のモードのフックを削除する
以外のすべてのモードで保存時に末尾の空白を削除したいorg-mode。 私.emacsには、次の行があります: (add-hook 'before-save-hook 'delete-trailing-whitespace) use-packageマクロを使用し(remove-hook 'before-save-hook 'delete-trailing-whitespace)て、:configブロックに追加しようとしましたが、フックがグローバルに削除されました。どうすれば削除できorg-modeますか?
12 hooks 

5
ヘルプからEmacsソースコードを参照するときに表示専用モードに入る方法
Emacsのヘルプを参照して関数をC-h f探しているとき、Elisp / Cの実装をよく調べたいと思います。view-modeこの方法でソースコードにアクセスしたときに自動的に入力して、不要な変更を回避したいと考えています。これを達成するためにアドバイスできるフックまたは関数はありますか?

1
after-init-hookとemacs-startup-hookの違いは何ですか
Emacsの初期化のアクションについていくつかのフックがあるようです。ただし、それらの違いが何であるかはわかりません。短いグーグル検索ではほとんど情報が得られません。emacs-startup-hookEmacsが起動した直後に実行されるようですが、初期化が完了するのを必ずしも待つ必要はありませんか?
9 hooks 

1
フックとは?
明確にするために...たとえば、このドキュメントでは: フックは関数のリストを保持するLisp変数であり、明確に定義された場合に呼び出されます。(これはフックの実行と呼ばれます。)リスト内の個々の関数は、フックのフック関数と呼ばれます。たとえば、フックkill-emacs-hookはEmacsを終了する直前に実行されます... 評価kill-emacs-hook時に実行される一連の「フック関数」のリストを表す名前付きの変数(シンボル)kill-emacs-hookがあり、それによってそれらの関数を実行していると言っています。正しい?その後 (add-hook 'text-mode-hook 'auto-fill-mode) 追加されたauto-fill-modeことにより、特定され、そのリストにtext-mode-hookあり、すでに何に加えて。良い。今これ (defcustom text-mode-hook nil "Normal hook run when entering Text mode and many related modes." :type 'hook :options '(turn-on-auto-fill flyspell-mode) :group 'wp) を作成または変更しているようtext-mode-hookです。フックの性質とフックとの関係について混乱していdefcustomます。私の論理的な選択は、このコードがtext-mode-hook「タイプ」(elispのタイプが何を意味するのかわからない)の変数を作成することですhook。これは確かに、フックの最初の作成であるはずtext-mode-hookですか?もしそうなら、「オプション」とは何ですか?それらは想定されたフック関数ですか、それとも何か他のものですか?

1
Emacsを終了してタッチパッドを再度有効にする
私のemacs設定には、タッチパッドを無効にする以下のelispコードがあるので、書いているときに邪魔になりません。 ;; disable touchpad when on emacs (defun turn-off-mouse (&optional frame) (interactive) (call-process-shell-command "xinput --disable bcm5974" nil "*Shell command output*" t)) (defun turn-on-mouse (&optional frame) (interactive) (call-process-shell-command "xinput --enable bcm5974" nil "*Shell command output*" t)) (add-hook 'focus-in-hook #'turn-off-mouse) (add-hook 'focus-out-hook #'turn-on-mouse) (add-hook 'delete-frame-functions #'turn-on-mouse) (provide 'setup-xinput) これは正常に動作します。問題はEmacsを終了するときだけです。 Emacsの使用中にEmacsを終了すると、タッチパッドが無効のままになります。キーボードで新しいターミナルを開き、を実行する必要がありますxinput --enable bcm5974。 …
8 hooks  exit 

2
特定のメジャーモードでのみセマンティックモードをアクティブにする方法は?
この質問はよく見ました。しかし、どの返信も私の問題を修正しませんでした。マイナーモードは他のモードのままです。 これまでのところ、私は試しました: (use-package stickyfunc-enhance :config ;; (add-to-list 'semantic-default-submodes 'global-semantic-stickyfunc-mode) ;; (defun turn-on-semantic () (semantic-mode 1) (require 'stickyfunc-enhance)) ;; (add-hook 'python-mode-hook 'turn-on-semantic) (add-hook 'python-mode-hook (lambda () (add-to-list 'semantic-default-submodes 'global-semantic-stickyfunc-mode) (semantic-mode 1) (require 'stickyfunc-enhance)))) これらの2つのアプローチに関する私の問題semantic-modeは、Pythonバッファーにアクセスした後は、すべての主要モードで機能することです。 semantic-mode他のすべてのモードでどのようにオフにできますか?手動でオフにする必要がありprog-mode-hookますか? kaushalmodiの解決策を試す: (use-package stickyfunc-enhance :init (add-to-list 'semantic-default-submodes 'global-semantic-stickyfunc-mode) :config (defun me/enable-semantic-maybe () "Maybe enable `semantic-mode'." (if (derived-mode-p …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.