Câu hỏi
Tôi muốn tạo giao diện người dùng ở dạng menu bật lên , menu bật lên tương tự như được sử dụng trong Magit .
Đặc trưng
Định nghĩa của Popup
Popup trong ngữ cảnh của câu hỏi này có nghĩa là cửa sổ nhỏ tạm thời chứa bộ sưu tập các mục menu để người dùng có thể chọn một và chỉ một trong những mục này.
Vị trí trên màn hình
Cửa sổ bật lên được phép xuất hiện ở bất kỳ phần nào của màn hình, nhưng điều mong muốn là nó phải khá rõ ràng và do đó nó sẽ xuất hiện bên cạnh cửa sổ hiện đang hoạt động.
Nội dung của bộ đệm Popup
Các mục nên được hiển thị dưới dạng bảng đẹp. Khá là bối cảnh của câu hỏi có nghĩa là hấp dẫn trực quan, hiệu ứng này có thể dễ dàng đạt được nhất bằng cách đặt các mục menu thành các hàng thẳng, xem
complete--insert-string
ví dụ. Đoạn này phục vụ để làm rõ thêm, bạn có thể làm theo cách riêng của mình, điều này sẽ không khiến câu trả lời của bạn không chính xác.
Lựa chọn các mục menu
Việc lựa chọn dự kiến sẽ được thực hiện bằng một lần bấm phím hoặc tùy chọn bằng chuột (mặc dù điều đó không quan trọng nên câu trả lời có chứa các đề xuất không hỗ trợ chuột là hợp pháp). Nếu bạn đề xuất giải pháp hỗ trợ chuột, xin lưu ý rằng người dùng sẽ có thể chọn một mục menu theo cách trực quan, nghĩa là, bằng cách nhấp chuột trái vào lựa chọn mong muốn.
Chuột NB có thể được sử dụng theo nhiều cách và các cách khác nhau để chỉ ra lựa chọn cũng được hoan nghênh.
Loại bỏ Popup
Khi người dùng đã chọn một mục menu theo cách được mô tả ở trên, bộ đệm và do đó, cửa sổ của nó sẽ bị loại khỏi chế độ xem cũng như bị giết. Cửa sổ đã được kích hoạt trước khi gọi menu bật lên sẽ lấy lại tiêu điểm (nghĩa là trở nên hoạt động).
Giá trị trả về và đối số
Tốt hơn là, hậu quả của các hành động này sẽ dẫn đến một đối tượng Lisp được trả về. Đối tượng Lisp có thể là:
nil
- điều này cho thấy rằng người dùng đã hủy bỏ menu bật lên bằng cách nhấn C-ghoặc theo một cách khác.string
- chuỗi (được phép sử dụng ký hiệu) phải làstring-equal
một trong các chuỗi được cung cấp cho menu bật lên dưới dạng tập hợp các mục thực tế.
Các cách khác để cho phần còn lại của chương trình biết lựa chọn của người dùng, hoặc, có thể, sự vắng mặt của nó, được chấp nhận. Tuy nhiên, nếu không rõ nó có thể được thực hiện như thế nào thì tôi yêu cầu tất cả những người trả lời ứng biến và đừng hỏi tôi để làm rõ hơn về khía cạnh này.
Đây là tất cả cho giá trị trả lại. Đối với các tham số đầu vào, ít nhất chúng phải bao gồm tập hợp các chuỗi đại diện cho các lựa chọn có thể (nghĩa là các mục menu).
Câu trả lời chấp nhận được
Câu trả lời dự kiến có thể có các dạng sau:
Đoạn mã đủ cho phép người đọc có giáo dục viết chức năng như mô tả ở trên; nó không được mong đợi hoặc không cần thiết để viết toàn bộ chức năng làm việc. Tuy nhiên, để tránh sự không chắc chắn (có thể bỏ qua các phần đáng kể của mã không?), Tôi cần lưu ý rằng các phần còn thiếu của đoạn mã cần được mô tả trong thành phần văn bản của câu trả lời.
Một liên kết đến thư viện hiện có thực hiện chức năng tương tự. Để tránh sự không chắc chắn, tôi nên lưu ý rằng tương tự trong trường hợp của chúng tôi có nghĩa là thư viện có thể được sử dụng để tạo cửa sổ bật lên (xem định nghĩa ở trên) có ít nhất 2 hoặc 3 tính năng được mô tả ở trên. Nếu thư viện đề xuất khác với điểm không thể đáp ứng điều kiện đã nêu trước đó, mỗi trường hợp như vậy sẽ được đánh giá độc lập và sẽ luôn được nâng cấp nếu OP thấy nó hữu ích.
Mô tả các chức năng Emacs tích hợp hoặc các chức năng của bên thứ ba có thể được sử dụng để triển khai bất kỳ tính năng nào được mô tả trong phần «Tính năng», xem bên trên. Để tránh sự không chắc chắn, vui lòng nêu rõ cách trả lời của bạn có thể hữu ích cho những độc giả tương lai muốn thực hiện cửa sổ bật lên , menu bật lên tương tự như được sử dụng trong Magit .
Các cách khác để hủy bỏ menu bật lên có thể bao gồm những điều sau đây (nhưng không giới hạn ở những cách này):
nhấp vào bên ngoài cửa sổ menu bật lên;
giết chết bộ đệm chứa cửa sổ bật lên mà không có sự lựa chọn.
magit-popup
. Gói mới được gọitransient
và đây là gói được sử dụng trong các phiên bản hiện tại củamagit
. Xem magit.vc/manual/transient để biết tài liệu.