Soru
Magit'te kullanılana benzer açılır menü , açılır menü şeklinde kullanıcı arayüzü oluşturmak istiyorum .
Özellikleri
Popup'un tanımı
Bu soru bağlamında açılır pencere, menü öğelerinin koleksiyonunu içeren çok az geçici pencere anlamına gelir, böylece kullanıcı bu öğelerden birini ve yalnızca birini seçebilir.
Ekrandaki Konumu
Pop-up'ın ekranın herhangi bir bölümünde görünmesine izin verilir, ancak oldukça açık olması ve bu nedenle o anda etkin pencerenin yanında görünmesi istenir.
Açılır Arabellek İçeriği
Öğeler güzel tablo şeklinde gösterilmelidir. Oldukça görsel olarak çekici soru araçlarının bağlamdır, bu etki en kolay düz sıralar halinde menü öğelerini koyarak elde edilebilir, bakınız
complete--insert-string
örneğin. Bu paragraf ek açıklama sağlar, kendi yolunuzla yapabilirsiniz, bu cevabınızı yanlış yapmaz.
Menü Öğesinin Seçimi
Seçimin tek bir tuşa basarak veya isteğe bağlı olarak bir fare ile yapılması beklenir (bu kadar önemli olmasa da, fareyi desteklemeyen önermeleri içeren cevaplar yasaldır). Fareyi destekleyen bir çözüm öneriyorsanız, kullanıcının sezgisel bir şekilde bir menü öğesini seçebilmesi gerektiğini, yani istenen seçeneğe sol tıklayarak tıklayabileceğini unutmayın.
NB fare birçok şekilde kullanılabilir ve bir seçeneği belirtmek için alternatif yollar da memnuniyetle karşılanmaktadır.
Popupun Ortadan Kaldırılması
Kullanıcı yukarıda açıklanan şekilde bir menü öğesi seçtikten sonra, tampon ve dolayısıyla penceresi görünümden çıkarılmalı ve öldürülmelidir. Açılır menünün çağrılmasından önce aktif olan pencere tekrar odaklanmalı (yani aktif hale gelmelidir).
Döndürülen Değer ve Bağımsız Değişkenler
Tercihen, eylemlerin bu sonucu döndürülen bir Lisp nesnesiyle sonuçlanmalıdır. Lisp nesnesi şunlardan biri olabilir:
nil
- Bu, kullanıcının pop-up menüsünü tuşuna basarak C-gveya başka bir şekilde † iptal ettiğini gösterir .string
- string (bir sembol kullanılmasına izin verilir)string-equal
, gerçek öğelerin toplanması olarak açılır menüye verilen dizelerden biri olmalıdır .
Programın geri kalanının kullanıcının seçimini veya muhtemelen yokluğunu bilmesini sağlamanın alternatif yolları kabul edilebilir. Ancak, başka nasıl yapılabileceği açık değilse, tüm cevaplayanlardan doğaçlama yapmasını ve bu yönün daha fazla açıklanmasını istemiyorum.
Tüm bunlar döndürülen değer içindir. Giriş parametrelerine gelince, en azından olası seçenekleri temsil eden dizeleri (yani menü öğelerini) toplamalıdırlar.
Kabul Edilebilir Yanıtlar
Beklenen cevap aşağıdaki şekillerde olabilir:
Eğitimli okuyucunun yukarıda anlatıldığı gibi bir işlev yazmasını sağlayan yeterli kod snippet'i; tüm çalışma fonksiyonunun yazılması beklenmez veya gerekli değildir. Ancak, belirsizliği önlemek için (kodun önemli bölümleri atlanabilir mi?), Snippet'in eksik bölümlerinin cevabın metinsel bileşeninde tanımlanması gerektiğini belirtmeliyim.
Benzer işlevselliği uygulayan mevcut kitaplığa bir bağlantı. Belirsizliği önlemek için, bizim durumumuzda benzer olanın, kütüphanenin yukarıda açıklanan en az 2 veya 3 özelliğe sahip açılır pencere (yukarıdaki tanıma bakın) oluşturmak için kullanılabileceği anlamına geldiğini belirtmeliyim . Önerilen kütüphane, daha önce belirtilen koşulun karşılanamayacağı noktadan farklıysa, her bir vaka bağımsız olarak değerlendirilecek ve OP'nin yararlı bulması halinde her zaman kaldırılacaktır.
«Özellikler» bölümünde açıklanan herhangi bir özelliği uygulamak için kullanılabilen yerleşik Emacs işlevlerinin veya üçüncü taraf işlevlerin açıklaması, yukarıya bakın. Belirsizliği önlemek için, lütfen yanıtınızın Magit'te kullanılana benzer pop- up , pop-up menüsü uygulamak isteyen okuyucular için nasıl yararlı olabileceğini açıkça belirtin .
† Açılır menüyü iptal etmenin alternatif yolları aşağıdakileri içerebilir (ancak bunlarla sınırlı değildir):
açılır menü penceresinin dışına tıklamak;
seçim yapmadan pop-up içeren tamponun öldürülmesi.
magit-popup
. Yeni paket denirtransient
ve şu anki sürümlerinde kullanılan budurmagit
. Belgeler için magit.vc/manual/transient adresine bakın .