素晴らしい-wm フォーカスを受け取ったときにクライアントを起動する信号

素晴らしい-wm フォーカスを受け取ったときにクライアントを起動する信号

起動したタグで Emacs を実行していますworkerserver-startファイル マネージャーを別の場所 (別のモニターなど) で開いていて、テキスト ファイルを開くと、emacsclientEmacs で正常に開きますが、Emacs に切り替わらず、表示されません。

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

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

Emacs 固有のものにしたいです。worker同時にタグに切り替えます。あるいは、Emacs ルール コールバックから実行できますか?

何か案は? :)

答え1

私も同じことを望んでいましたが、emacs コールバックのアイデアが最終的に機能しました。 awesome でテストしたわけではありませんが、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のこのメッセージの処理については、このイベントが処理されているようです。ソースコードはここ

関連情報