bắt đầu emacsclient với tiêu điểm từ dòng lệnh


11

Khi tôi bắt đầu emacsclient từ dòng lệnh như dưới đây:

emacsclient -a '' -c "$@"

Nó luôn bắt đầu ở chế độ nền (cửa sổ đầu cuối ở trên cùng của cửa sổ emacsclient), vì vậy tôi phải sử dụng chuột để nhấp vào cửa sổ để chuyển sang emacsclient.

Thật là bực bội, tôi có thể lấy emacsclient để lấy nét khung hình bật lên khi được gọi từ dòng lệnh không?

nhập mô tả hình ảnh ở đây


Đây có lẽ là một chức năng của trình quản lý cửa sổ / môi trường máy tính để bàn, hơn là của emacs / emacsclient. Trong trường hợp của tôi, khung mới bật lên trên cùng của cửa sổ đầu cuối, ví dụ (Gnome 3.20 trên Fedora 24).
NickD

Câu trả lời:


14

Bạn có thể sử dụng server-switch-hookvà nâng khung hình lên. Cái gì đó như:

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

Nếu điều đó khiến bạn không tập trung vào khung hình mới, bạn có thể thử một cái gì đó như thế này:

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

Nếu bạn đang tìm kiếm một lệnh shell để hiển thị khung Emacs (không chỉ định một hoặc nhiều tệp để chỉnh sửa), bạn cũng có thể thực hiện việc này từ dòng lệnh:

emacsclient -e "(raise-frame)"

Nó không hoạt động. nhưng có vẻ như nếu thêm một tên tệp vào dòng lệnh, emacs sẽ bật lên nền trước nhưng không có tệp để mở, nó sẽ ở lại nền.
lucky1928

Nếu bạn không cần truyền đối số tên tệp, bạn cũng có thể gọi một hàm từ dòng lệnh, ví dụ:emacsclient -e '(raise-frame)'
glucas

1
Lời khuyên của bạn (select-frame-set-input-Focus (select-frame)) đã giúp ích cho tôi.
Tim Stewart

2

Vấn đề này cũng được báo cáo là một vấn đề ( xem vấn đề spacemacs # 7078 ). Giải pháp sử dụng tập lệnh bao bọc được đăng ở đó làm việc cho tôi. Để hoàn thiện tôi sẽ thêm nội dung của kịch bản vào đây:

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

Tôi không có đủ điểm danh tiếng để bình luận ở đây. Nhưng sẽ thật tuyệt nếu thông tin về nơi đặt server-switch-hookcó thể được thêm vào câu trả lời của @glucas. Cuối cùng, tôi đã không nhận được bất kỳ giải pháp nào của anh ấy để làm việc theo cách hoàn toàn đơn giản ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.