Pytanie
Chciałbym stworzyć interfejs użytkownika w postaci menu kontekstowego , menu kontekstowego podobnej do tej stosowanej w MAGIT .
funkcje
Definicja wyskakującego okienka
Wyskakujące okienko w kontekście tego pytania oznacza niewielkie tymczasowe okno, które zawiera zbiór elementów menu, dzięki czemu użytkownik może wybrać jeden i tylko jeden z tych elementów.
Pozycja na ekranie
Wyskakujące okienko może pojawiać się w dowolnej części ekranu, ale pożądane jest, aby było dość oczywiste i dlatego powinno się pojawiać obok aktualnie aktywnego okna.
Zawartość Popup Buffer
Przedmioty powinny być wyświetlane w formie ładnego stołu. Ładny jest kontekst pytania oznacza atrakcyjny wizualnie, efekt ten można najłatwiej osiągnąć, umieszczając elementy menu w prostych rzędach, patrz
complete--insert-string
na przykład. Ten akapit służy dodatkowym wyjaśnieniom, możesz to zrobić na swój własny sposób, co nie spowoduje, że twoja odpowiedź będzie niepoprawna.
Wybór pozycji menu
Oczekuje się, że selekcja zostanie przeprowadzona przez naciśnięcie jednego klawisza lub, opcjonalnie, za pomocą myszy (chociaż nie jest to tak ważne, więc odpowiedzi zawierające propozycje, które nie obsługują myszy, są legalne). Jeśli zaproponujesz rozwiązanie, które obsługuje mysz, pamiętaj, że użytkownik powinien być w stanie wybrać element menu w intuicyjny sposób, to znaczy klikając lewym przyciskiem myszy żądany wybór.
Myszy NB można używać na wiele sposobów; mile widziane są również alternatywne sposoby wskazania wyboru.
Eliminacja wyskakującego okienka
Gdy użytkownik wybierze pozycję menu w sposób opisany powyżej, bufor, a tym samym jego okno, należy usunąć z widoku, a także zabić. Okno, które było aktywne przed wywołaniem menu podręcznego, powinno ponownie stać się aktywne (to znaczy stać się aktywne).
Zwrócona wartość i argumenty
Najlepiej, jeśli ta konsekwencja działań powinna spowodować zwrócenie obiektu Lisp. Obiektem Lisp może być:
nil
- oznacza to, że użytkownik przerwał menu podręczne, naciskając C-glub w inny sposób †.string
- ciąg (dozwolone jest użycie symbolu) powinien byćstring-equal
jednym z ciągów dostarczonych do menu podręcznego jako zbiór rzeczywistych elementów.
Dopuszczalne są alternatywne sposoby poinformowania reszty programu o wyborze użytkownika lub ewentualnie jego braku. Jeśli jednak nie jest jasne, jak inaczej można to zrobić, proszę wszystkich improwizujących o improwizację i nie proszę o dalsze wyjaśnienia tego aspektu.
To wszystko dla zwróconej wartości. Jeśli chodzi o parametry wejściowe, powinny one obejmować przynajmniej zbiór ciągów, które reprezentują możliwe wybory (tj. Pozycje menu).
Dopuszczalne odpowiedzi
Oczekiwana odpowiedź może mieć następujące formy:
Wystarczający fragment kodu, który pozwala wykształconemu czytelnikowi pisać funkcje takie jak opisano powyżej; napisanie całej funkcji roboczej nie jest oczekiwane ani konieczne. Aby jednak uniknąć niepewności (czy można pominąć znaczną część kodu?), Należy zauważyć, że brakujące części fragmentu kodu należy opisać w tekstowym składniku odpowiedzi.
Łącze do istniejącej biblioteki, która implementuje podobną funkcjonalność. Aby uniknąć niepewności, należy zauważyć, że podobnie w naszym przypadku oznacza, że biblioteki można użyć do tworzenia wyskakujących okienek (patrz definicja powyżej), która ma co najmniej 2 lub 3 funkcje opisane powyżej. Jeśli proponowana biblioteka różni się od punktu, w którym nie można spełnić wcześniej określonego warunku, każdy taki przypadek będzie oceniany niezależnie i zawsze będzie oceniany, jeśli OP uzna to za przydatne.
Opis wbudowanych funkcji Emacsa lub innych firm, których można użyć do zaimplementowania dowolnej funkcji opisanej w sekcji «Funkcje», patrz wyżej. Niepewności uniknąć należy podać wyraźnie, jak Twoja odpowiedź może być przydatne dla przyszłych czytelników, którzy chcą zaimplementować popup , menu podręczne podobną do tej stosowanej w MAGIT .
† Alternatywne sposoby przerwania menu podręcznego mogą obejmować następujące (ale nie tylko):
kliknięcie poza wyskakującym oknem menu;
zabicie bufora zawierającego wyskakujące okienko bez dokonywania wyboru.
magit-popup
. Wywoływany jest nowy pakiettransient
, który jest używany w aktualnych wersjachmagit
. Zobacz magit.vc/manual/transient dla dokumentacji.