mulai emacsclient dengan fokus dari baris perintah

11

Ketika saya mulai emacsclient dari baris perintah seperti di bawah ini:

emacsclient -a '' -c "$@"

Itu selalu dimulai di latar belakang (jendela terminal di atas jendela emacsclient), jadi saya harus menggunakan mouse untuk mengklik jendela untuk beralih ke emacsclient.

Benar-benar membuat frustrasi, bisakah saya mendapatkan emacsclient untuk memfokuskan frame yang muncul ketika dipanggil dari baris perintah?

masukkan deskripsi gambar di sini

lucky1928
sumber
Ini mungkin lebih merupakan fungsi dari lingkungan window manager / desktop, daripada emacs / emacsclient. Dalam kasus saya, frame baru muncul di atas jendela terminal, misalnya (Gnome 3.20 pada Fedora 24).
NickD

Jawaban:

14

Anda mungkin dapat menggunakan server-switch-hookdan menaikkan bingkai. Sesuatu seperti:

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

Jika itu membuat Anda tanpa fokus pada bingkai baru Anda bisa mencoba sesuatu seperti ini sebagai gantinya:

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

Jika Anda mencari perintah shell untuk memunculkan frame Emacs (tanpa menentukan satu atau lebih file untuk diedit), Anda juga dapat melakukan ini dari baris perintah:

emacsclient -e "(raise-frame)"
glukas
sumber
Itu tidak bekerja. tetapi kedengarannya seperti jika menambahkan nama file di baris perintah, emacs akan muncul ke latar depan tetapi tanpa file untuk membuka, itu akan tetap di latar belakang.
lucky1928
Jika Anda tidak perlu memberikan argumen nama file, Anda juga dapat memanggil fungsi dari baris perintah, misalnya:emacsclient -e '(raise-frame)'
glucas
1
Saran Anda (pilih-bingkai-set-input-fokus (bingkai-terpilih)) bekerja untuk saya.
Tim Stewart
2

Masalah ini juga dilaporkan sebagai masalah ( lihat masalah ruang # 7078 ). Solusi menggunakan skrip pembungkus yang diposting di sana bekerja untuk saya. Untuk kelengkapan saya akan menambahkan konten skrip di sini:

#!/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

Saya tidak memiliki poin reputasi yang cukup untuk berkomentar di sini. Tapi alangkah baiknya jika informasi tentang tempat menempatkan server-switch-hookdapat ditambahkan ke jawaban oleh @glucas. Pada akhirnya saya tidak mendapatkan solusinya untuk bekerja dengan cara yang sepenuhnya langsung ...

dalanicolai
sumber