Gọi hàm hoàn thành zsh và nhận kết quả của nó


7

Tôi đang cố gắng sử dụng các widget hoàn thành của zsh trong các tập lệnh của riêng tôi. Tại một thời điểm tôi muốn có quyền truy cập vào kết quả của mọi lần hoàn thành đang hoạt động trong zsh, hay đúng hơn là tôi muốn có được kết quả cuối cùng của chuỗi hoàn thành.

function foo() {
  do_unrelated_stuff()

  # call zsh completion
  comp_results=_main_complete_() # won't work like this, can only be called from within a completion function

  if [[ "$#comp_results" -gt "0" ]]; then
    # do something
    echo "results:"
  else
    # do something else
    echo "no results"
  fi
}

Tôi đã nghĩ đến việc tạo một hàm hoàn thành tùy chỉnh chỉ cần gọi _main_complete(hoặc bất kỳ hàm nào phù hợp) và lưu trữ các kết quả trong một biến được xuất để làm cho nó có thể truy cập được vào các hàm khác. Tuy nhiên, điều này cũng có nghĩa là gọi chức năng hoàn thành tùy chỉnh bằng cách nào đó - và tôi không biết làm thế nào. Thậm chí có thể có được kết quả hoàn thành "trung gian" mà không thực hiện hoàn thành thực tế?

Câu trả lời:


3

Tôi không chắc tại sao zsh không cung cấp chức năng này ... May mắn thay, ai đó đã hack để sử dụng hệ thống hoàn thành một cách thực tế / không tương tác: https://github.com/Valodim/zsh-capture-completion

$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>

Điều này chỉ cung cấp quyền truy cập vào danh sách hoàn thành. I E. không phải các đối tượng zsh nội bộ (mô tả, v.v.)

(Một câu hỏi tương tự: Có thể tự gọi hàm hoàn thành zsh không? )


1
Nếu bạn muốn cài đặt cái này bằng zplug, bạn có thể sử dụng: zplugValodim/zsh-capture-completion, as:command, use:capture.zsh, rename-to:capture.zsh
Att Righ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.