フォーカスを受け取ったときにクライアントを上げるという驚くべきシグナル


11

私はEmacsをタグで動かしている workerserver-start 立ち上げました。ファイルマネージャを別の場所(たとえば別のモニタ)で開いていて、テキストファイルを emacsclient emacsでうまく開くことができますが、それには切り替わりません。

私が探しているのは、クライアント固有のシグナルです rc.lua。何かのようなもの:

client.add_signal("focus", function(c) c:raise() end)

Emacs専用にしたいそしてに切り替えます worker 同時にタグを付けます。あるいは、Emacsのルールコールバックから行うことができますか?

何か案は? :)


1
誰もそれに出会ったことがありませんか?
platforma

回答:


0

私は同じことを望んでいました、そしてemacsコールバックのあなたの考えはついにうまくいったものです。私はすごいことでそれをテストしませんでした、しかし私はdwmを使用しています、そして、私は彼らがこれが働くのに十分に類似していると思います。

これはemacsのコールバック関数です。

(defun raiseme ()
  (x-send-client-message
   nil                ; DISPLAY - nil is selected frame
   0                  ; DEST - 0 is root window of display
   nil                ; FROM - nil is selected frame
   "_NET_ACTIVE_WINDOW"    ; MESSAGE-TYPE - name of an Atom as a string
   32                 ; FORMAT  - size of the values in bits
   '(1 "_NET_WM_USER_TIME" 0) ; VALUES
   )
  )

コールバックを呼び出す方法はいくつかあります。単純さと柔軟性のために、私はコールバックを呼び出し、次に通常のemacsclientを呼び出すシェルエイリアスを選びました。

$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'

それがまだ役に立つことを願っています;)

メッセージタイプと値の詳細については、を参照してください。 ウィンドウマネージャのヒント

このメッセージのawesomeによる処理に関しては、このイベントが処理されているようです。ソースコードは ここに

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