Çerçevenin altındaki sözcüklerin listesi gösterilsin mi?


20

Açtığım her emacs çerçevesinin alt kısmı boyunca yatay olarak ayrı satırlarda 3 kelime listesi görüntülemek istiyorum (üst kısım da işe yarar). Bunu yapmanın 6 yolunu düşündüm ve hepsinin sorunları var:

  1. İlk düşüncem, mod satırıma bir satır eklemekti, ancak AFAICT, yeni satır karakterini bir mod satırında kullanamazsınız, sadece "^ J" ye dönüştürülür.

  2. İkinci düşüncem çizginin ekranın üst kısmında olması ve başlık satırının kullanılmasıydı, ancak yeni satır karakterini de desteklemiyordu.

  3. Pencerenin son 3 satırında bir yer paylaşımı görüntüleyebilirim, ancak bunu sağlam hale getirmek zor görünüyor - nokta pencerenin gerçek sonu yerine bindirmeye ulaştığında kaydırma tetiklenmeli ve sürekli olarak yeniden konumlandırmalıydım yer paylaşımları pencere alanında değil metin alanında olduğundan.

  4. Çerçevenin altında özel pencereler yapmaya çalışabilirdim. Bunu kodlamayı denedim ama çok sağlam değil, bir çerçeve zaten bölünmüş pencereler içerdiğinde işe yaramıyor ve Cx'i, 1'i yok sayan silme-diğer pencerelerin özel bir sürümüne hatırlatmak zorunda kaldım özel pencerelerim ve başka köşe kasaları olduğundan eminim. Ayrıca şimdi bir yardım penceresi açıldığında dikey olarak açılır çünkü zaten yatay bir bölme olduğunu düşünür (teknik olarak vardır ancak yalnızca tek satırlı bir pencere görüntülemek içindir).

  5. Bunun için özel bir çerçeveye sahip olabilirim, ancak yapılandırmam terminal modunda çalışmayacak ve pencere yöneticimi ekranın alt kısmında tutmaya çalışacak, komut satırını seçilemez hale getirecek, komut satırını etkilemeyecek, vs vs.

  6. 3 satırlık metni doğrudan minibuffer'a ekleyebilirim. Bu kısmen çalıştım, 3 hattı karşılamak için minibuffer büyüyebilir ve onları görüntüleyebilirim. Ancak, herhangi bir mesaj yankılanırsa, ben yeniden görünecekleri başka bir komut verene kadar çizgiler kaybolur. İdeal olarak 3 satır ve yankı alanı üst üste gelmez, böylece her ikisi de görebiliyordu. Hangi mesajların echo alanına gittiğini güvenilir bir şekilde filtreleyebilirsem bu daha az can sıkıcı olurdu - EmacsWiki'de bir çözüm buldum, ancak emacs C kaynağından kaynaklanan mesajlar için işe yaramıyor (özellikle almak istiyorum) dosya kaydetme mesajlarından kurtulun çünkü sık sık bir zamanlayıcıda otomatik kaydetme).

Bağlam için hedefim, geçerli arabellekte en sık kullanılan sözcükleri, geçerli arabellekteki en yakın noktayı ve geçerli arabellekte en son kullanılan sözcükleri sürekli olarak görüntülemektir. Ses komutları ile arabellek içine yerleştirmeyi planlıyorum. Bu yüzden "en yakın 2" diyebilir ve en yakın noktadaki kelimeler listesinden ikinci öğeyi seçip ekleyebilirim. Yalnızca şu anda düzenlediğim arabellek için sözcük listelerinin görünür olmasını önemsiyorum. Her zaman görünür listelere ihtiyacım olduğundan çeşitli kod tamamlama modları tarafından kullanılan açılır pencereleri kullanmak istemiyorum.


İyi soru ve iyi poz verdi. Umarım bazı yararlı öneriler alırsınız.
Drew

Terminal modu ihtiyacının yanı sıra # 5'in diğer kısımlarını da merak ediyorum. Altta bulunan özel bir çerçeve kullanabilirsiniz (sorun yok). Seçilemez ile ne demek istiyorsun ve neden buna ihtiyacın var? Eğer salt okunur demek istiyorsan, bu da sorun değil. Düzeni etkilememekle ne demek istiyorsun ? Özetle, # 5 benim için çok açık değil.
Drew

@Drew: Klavyeyi kullanarak WM'imi sürdüğümü kastediyorum ve bu çerçeveye amaca odaklanmak istemem pek olası değil, bu yüzden sonraki pencere / önceki pencere bağlamalarımın atlamasını istiyorum. Benzer şekilde, pencere düzenlerinin bu çerçevenin bir panelin / görev çubuğunun bir parçasıymış gibi hareket etmesini isterim. Düzenleme: Bu yorumun her yerinde 'pencere' dedim X penceresi demek, emacs penceresi değil; p
Joseph Garvin

Bana önerilen bir diğer olasılık da sadece minibufferi kullanmak. Yine de kullanmaya çalıştığınız her şeye müdahale etmeden pasif olarak metni göstermenin mümkün olup olmadığı hakkında hiçbir fikrim yok ...
Joseph Garvin

Minibuffer'ı kullanmaya çalışma hakkında bir not eklendi.
Joseph Garvin

Yanıtlar:


8

Bir sürü hileli deney ile # 6 (minibuffer metni kullanarak) 'yeterince iyi' çalışma durumuna geçebildim. İşte bir ekran görüntüsü:

Hareket halindeki kemerin ekran görüntüsü

Bu işi yapmak için birkaç anahtar parça vardır:

  • Minibuffer'a metin eklemek şaşırtıcı bir şekilde neredeyse doğru şeyi kutudan çıkarır. Oraya eklenen metin aslında görünecektir.
  • Metni, normal metin yerine bir yer paylaşımının 'son dizesi haline getirerek seçilemez hale getirirsiniz ve imlecin yanlışlıkla içeri girmesi konusunda endişelenmenize gerek kalmaz.
  • Minibuffer komut istemlerinin doğru çalışmasını sağlamak için minibuffer penceresi etkinken metin / yer paylaşımının eklenmesini engellemeniz gerekir.
  • Minibuffer'ı normal pencere yeniden boyutlandırma işlevleriyle yeniden boyutlandırmaya çalışırsanız, pencerelerin çok küçük olmasıyla ilgili hatalar alırsınız, belgesiz md-resize-minibuf işlevini kullanırsanız, istediğiniz satır sayısını istediğiniz gibi yeniden boyutlandırabilirsiniz resize-mini-windows'u ilk olarak nil olarak ayarladık.
  • Bir mesaj olduğunda kaybolan listeleri çözmek için mesaj fonksiyonunu mesajları durdurmak için uyarmanız gerekir. Sonra bunları kendiniz minibuffer'a yerleştirirsiniz. Ayrıca yankı alanında en son ne olursa olsun depolayan geçerli mesaj değişkenine bakmanız gerekir (şaşırtıcı bir şekilde yankı alanı ve minibuffer teknik olarak farklıdır ve bazı C kaynak kodu işlevleri mesajdan geçmeden doğrudan yankı alanına yazdırır fonksiyonu). Bunun için aşağıda verdiğim kod kusurlu, mesajlar normalde araştırmam gerekenlerden daha uzun sürüyor (* Mesajlar * 'daki son girişi kontrol etmek daha basit ve daha sağlam olabilir) ama bu şimdilik' yeterince iyi '.

İşte benim öldürme halkasını gösteren örnek bir kemer ile benim uygulama bir bağlantı. Sonunda bu uygun bir projenin parçası olacak: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9

Bu benim ilk kez önemli miktarda elisp yazmak, bu yüzden kalite muhtemelen subpar, ama işe yarıyor.


1

Ne mod satırı ne de başlık satırı maalesef birden fazla satır olamaz. Daha önce bunu sordum ve bu işi yapmak için herhangi bir gizli seçenek (en azından yoktu) vardı. Yani 1 ve 2 çıktı. Ayrıca 3 ve 6'nın sizi uzun vadede mutlu etmeyecek hackler olduğunu hissediyorum. 3 ve 4 iyi yaklaşımlar gibi görünüyor, ancak güvenilir bir şekilde çalışmalarını sağlamak oldukça yatırım olacak.

Bu yüzden önce bunu emacs-devel'e getirmenizi tavsiye ederim . Deneyimlerime göre, ne istediğinizi ve bunun neden iyi bir şey olduğunu dikkatlice açıklamak için zahmetli olursanız, işler sonunda gerçekleşir. En azından bir sonraki sürüme kadar biraz zaman alabilir, ancak biraz bekliyorsanız veya geliştirme sürümünü kullanıyorsanız, muhtemelen istediğiniz şeyi çok daha az çabayla elde edebilirsiniz.


Emacs-devel ile iletişim önerisi için teşekkürler. Bir çözüm bulduğum halde oldukça acayipti ve doğrudan ekran koordinatlarını çizmek için gerçek bir API'ye sahip olmak güzel olurdu, bu yüzden zamanım olduğunda muhtemelen bir e-posta çekeceğim.
Joseph Garvin
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.