Yerel elisp kullanarak emac'leri etkinleştirebilir / öne çıkarabilir misiniz? (örneğin, başka bir programda çalışırken)


16

Emacs'ın aktive olmasını, yaprak haline getirilmesini ve belirli durumlarda odaklanmayı 'zorlamak istiyorum. Bir org-Pomodoro'yu bitirdiğimde veya önemli bir randevu hatırlatıcısı sırasında.

Şimdi, sadece dış bağımlılıkları azaltmak için 'yerel' bir yol arıyorum. (sadece Linux benim için uygun, çapraz platform daha iyi olurdu).

Bu teknik olarak içeride emacs mümkün mü?

[değiştir] Çözüm:

GUI kullanıyorsanız, bu iyi çalışır:

(x-focus-frame nil)

[Tarihsel nedenlerle ...] Denedim:

Çerçeve görünürlüğü (çalışmıyor)

(make-frame-visible)

Ve ayrıca:

(make-frame-invisible)
(make-frame-visible)

Ancak bunlar yalnızca Emacs zaten etkinleştirilmişse işe yarar.

Çerçeve yükseltme (çalışmıyor)

İndirme çerçevesi aslında emac'ları gizliyor gibi görünüyor.

(lower-frame)

Ancak çerçeveyi bir zamanlayıcıdan kaldırmak değil. Yani, hiçbir şey olmuyor.

(raise-frame)

Kaldırmadan önce eksik bir 'etkinleştir-emac' var gibi görünüyor.

[Harici çözüm hakkında NOT]

Şu anda, (geçici çözüm / çözüm?) Ben biraz elisp kullanın:

(call-process "activateEmacs")

Ve ilgili bash betiği: (önce sisteminize xdotool yüklemeniz gerekebilir)

#!/bin/sh 
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate

4
Deneyin raise-frame.
Tom Tromey

Öneri için teşekkürler. çerçeveyi indirmek çalışır, ancak çerçeveyi yükseltmek bir nedenden ötürü yeniden yükseltmez mi?
Leo Ufimtsev

@TomTromey'nin doğru olduğuna inanıyorum. Aşağıdaki gibi test edebilirsiniz. İlk olarak, bir boşta zamanlayıcı oluşturun: (defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame)))). Çerçeveyi ile askıya alın M-x (suspend-frame). 5 saniye içinde bu çerçeve yeniden görünür.
Dan

Peki, eğer çalışır (suspend-frame)ve başka bir pencereye tıklamadan orada beklerseniz. Ancak çerçeveyi askıya alır ve başka bir uygulamada çalışmaya devam ederseniz, emacs yeniden görünmez. En azından sistemimde değil (Mate masaüstü ile fedora 21). Basit bir örnek şudur: bunu : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))çalıştırın ve alt-tab'ı başka bir uygulamaya yükleyin. Mesaj arabellekte görünecek, ancak emacs yükseltilmeyecek ... Düşünceler?
Leo Ufimtsev

1
Emacs'ın Gui sürümünü mü kullanıyorum? (terminal sürümü değil), GUI'yi de mi kullanıyordunuz?
Leo Ufimtsev

Yanıtlar:


16

Bir Pencere Sistemi kullanıyorsanız, kullanabilirsiniz x-focus-frame.

Not:

  • x-focus-frame Windows ve Linux için çalışır
  • Emacs 23.1'den önce w32-focus-frameWindows'ta kullanın .

Evet kesinlikle. (x-focus-frame nil) emacs penceresini kaldırır. Temiz!
Leo Ufimtsev

1

Ya öyle (x-focus-frame nil)ya (other-frame 0)da yapacak. İkisi arasında davranış farkı olup olmadığından emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.