Tôi có loại lớp hoàn chỉnh với chức năng tự động hoàn thành. Simple phiên bản:Làm thế nào để hiển thị kết quả tự động hoàn thành python?
class Completer:
def __init__(self):
self.words = ["mkdir","mktbl", "help"]
self.prefix = None
def complete(self, prefix, index):
if prefix != self.prefix:
self.matching_words = [w for w in self.words if w.startswith(prefix)]
self.prefix = prefix
else:
pass
try:
return self.matching_words[index]
except IndexError:
return None
Và thực hiện một cái gì đó như thế này để có được tính năng tự động hoàn thành với readline:
import readline
readline.parse_and_bind("tab: complete")
completer = Completer()
readline.set_completer(completer.complete)
user_input =raw_input("> ")
Vì vậy, có 3 từ để tự động hoàn thành [ "giúp đỡ", "mkdir "," mktbl "] trong ví dụ.
nếu người dùng thực hiện:
> he<tab>
người sử dụng được:
> help
nhưng nếu người dùng thực hiện
> mk<tab>
gì đang xảy ra bởi vì không có một trận đấu duy nhất (mkdir và mktbl)
Làm cách nào để hiển thị các tùy chọn trong trường hợp có nhiều kết quả khớp? Giống như Bash làm với một tên tập tin tự động hoàn thành?
Như vậy người dùng whold có được một cái gì đó như:
> mk<tab>
mktbl mkdir
> mk<cursor>
T.B. tôi đã cố gắng đưa
_readline.insert_text (...) _
và
in ...
vào chức năng Completer nhưng nó phanh chèn, do đó, một người dùng được một cái gì đó như thế này:
> mk<tab>
> mkmktbl mkdir <cursor>
PPS Tôi cần giải pháp Linux.
Đây không phải là câu trả lời hoàn chỉnh và có thể quá mức cần thiết cho một thứ đơn giản, nhưng sử dụng 'curses' là một cách tốt (mặc dù phức tạp) để thực hiện việc này: http://docs.python.org /library/curses.html Xem hướng dẫn tại đây: http://docs.python.org/howto/curses.html#curses-howto –
Có thể! Cảm ơn bạn! Nhưng chúng tôi hoàn toàn hài lòng với chức năng readline cung cấp. Và điều duy nhất chúng tôi cần là hiển thị các tùy chọn này về tự động hoàn thành. Chúng tôi nhìn vào những lời nguyền rủa, nhưng nó thực sự là quá phức tạp cho chỉ một điều nhỏ như thế này. – MajesticRa
Câu hỏi thú vị, tôi đã có ý tưởng về một điều tương tự. – Skurmedel