コマンドラインからフォーカスしてemacsclientを起動します


11

以下のようにコマンドラインからemacsclientを起動すると:

emacsclient -a '' -c "$@"

常にバックグラウンド(emacsclientウィンドウの上にあるターミナルウィンドウ)で起動するため、マウスを使用してウィンドウをクリックし、emacsclientに切り替える必要があります。

それは本当にイライラさせられます、コマンドラインから呼び出されたときにポップアップするフレームにフォーカスするようにemacsclientを取得できますか?

ここに画像の説明を入力してください


これはおそらく、emacs / emacsclientよりもウィンドウマネージャー/デスクトップ環境の機能です。私の場合、新しいフレームがターミナルウィンドウの上にポップアップします(例:Fedora 24のGnome 3.20)。
NickD 2017

回答:


14

を使用しserver-switch-hookてフレームを上げることができる場合があります。何かのようなもの:

(add-hook 'server-switch-hook #'raise-frame)

それでも新しいフレームに集中できない場合は、代わりに次のような方法を試してください。

(add-hook 'server-switch-hook (lambda () (select-frame-set-input-focus (selected-frame))))

(編集する1つ以上のファイルを指定せずに)Emacsフレームを表示するシェルコマンドを探している場合は、コマンドラインから次のように実行することもできます。

emacsclient -e "(raise-frame)"

動作しません。コマンドラインでファイル名を追加すると、emacsはフォアグラウンドにポップアップしますが、開くファイルがないとバックグラウンドのままです。
lucky1928 2017

ファイル名の引数を渡す必要がない場合は、コマンドラインから関数を呼び出すこともできます。例:emacsclient -e '(raise-frame)'
glucas

1
あなたの(select-frame-set-input-focus(selected-frame))アドバイスがうまくいきました。
Tim Stewart

2

この問題は問題としても報告されました(spacemacsの問題#7078を参照)。そこで投稿されたラッパースクリプトを使用する解決策は私にとってはうまくいきました。完全を期すために、ここにスクリプトの内容を追加します。

#!/usr/bin/bash

if [[ "$#" -lt 1 ]] ; then
    emacsclient -c -e \
                "(select-frame-set-input-focus (selected-frame))" \
                "(delete-other-windows)" \
                "(spacemacs/home)" else
    emacsclient -c -e \
                "(select-frame-set-input-focus (selected-frame))" \
                "(delete-other-windows)" \
                "(find-file \"$1\")" fi

ここにコメントするのに十分な評判ポイントがありません。しかしserver-switch-hook、@ glucasが回答のどこに配置するかについての情報を追加できればすばらしいと思います。結局、私は彼の解決策をまったく簡単な方法で機能させることができませんでした...

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