2013-11-14 16 views
13

Tôi muốn thêm hoàn thành tab vào ứng dụng Nodejs CLI (Và tốt nhất là tạo hoàn thành tab động).Cách thêm hoàn thành tab vào ứng dụng Nodejs CLI

Tôi tìm thấy một vài mô-đun NPM nhưng không chắc chắn làm thế nào để thực sự thực hiện chúng:

https://github.com/hij1nx/complete

https://github.com/mklabs/node-tabtab

Vì vậy, những gì tôi đang tìm kiếm được để tôi có thể có một tập tin nodejs đó là một cái gì đó như:

my-cmd create arg1 arg2 

Nhưng sau đó tôi có thể muốn tự động hoàn thành như:

my-cmd cr<tab> -> create 

Cảm ơn!

+0

Đây không phải là nội dung nào đó được triển khai trong ứng dụng của bạn nhưng bên trong trình bao mà người dùng sử dụng. Xem http://askubuntu.com/questions/95211/how-do-i-set-up-bash-completion-for-command-arguments để biết cách 'bash' thực hiện điều này. – Joe

+1

Tôi cũng vậy. Đã tìm thấy một số mô-đun 'npm' để xử lý hoàn thành nhưng tôi không thể tìm ra cách để chạy các ví dụ. – diosney

+0

@diosney. Vì vậy, tôi đã bắt đầu làm việc trên một dự án có nó trong. Https://github.com/Jonovono/um. Tôi sẽ gửi một câu trả lời đầy đủ hơn về cách tôi cũng đạt được điều này. – Jonovono

Trả lời

1

Như @Joe đã nói, đây là điều mà vỏ người dùng của bạn cung cấp. Đối với bash, về cơ bản bạn tạo và đăng ký một hàm chạy khi người dùng tab sau khi nhập tên chương trình của bạn. Hàm trả về các chuỗi có sẵn để tự động hoàn thành.

Xem hướng dẫn này cho một giới thiệu

http://www.debian-administration.org/article/316/An_introduction_to_bash_completion_part_1

Tôi cũng giống như ví dụ này, bởi vì nó đơn giản và cho thấy những gì cần phải tiếp tục. Đó là cho họ vải công cụ python.

https://raw.githubusercontent.com/marcelor/fabric-bash-autocompletion/master/fab

4

Edit - câu trả lời nhanh

Sau khi tôi trả lời, tôi tiếp tục đọc nguồn tabtab một chút và nhận thấy rằng tôi cũng có thể chạy

pkgname completion install 

để cài đặt kết thúc. từ môi trường của tôi là đã bẩn, tôi không biết nếu nó thực sự đã làm bất cứ điều gì, nhưng dường như với tôi như nó đã làm ..

Còn câu trả lời

@CameronLittle đã đưa ra tài liệu tuyệt vời.

Đối với thiếu kiên nhẫn, bạn có thể bắt đầu bằng cách chạy

sudo bash -c 'pkgname completion > /etc/bash_completion.d/pkgname' 
source /etc/bash_completion.d/pkgname 

này sẽ thêm hoàn phiên bash hiện tại của bạn.

Theo như tôi biết, các phiên mới sẽ tự động hoàn tất.

Để làm cho quá trình liền mạch cho người sử dụng, bạn có thể sử dụng installpostinstall móc trong package.json

https://docs.npmjs.com/misc/scripts

Hãy chắc chắn để không in bất cứ điều gì theo mặc định. có nghĩa là chạy pkgname sẽ dẫn đến không có đầu ra, hoặc nếu không nó sẽ không hoạt động.

quan trọng!cài đặt tabtab chỉ từ thạc sĩ

Dường tabtab có lỗi gây phiền nhiễu mà đã được giải quyết trong tổng thể nhưng không bao giờ bước vào một thông cáo ..

Các liên quan cam kết sửa chữa nó là thế này: https://github.com/mklabs/node-tabtab/commit/f8473555bf7278a300eae31cbe3377421e2eeb26

mà xử lý hoàn thành cho chuỗi bắt đầu bằng --.

Cam kết nếu từ tháng 2 năm 2014, tuy nhiên bản phát hành mới nhất kể từ tháng 1 năm 2015 là 0,0.2 từ tháng 1 năm 2014 .. Tôi cho rằng sẽ không có nhiều bản phát hành nữa.

Vì vậy, nếu bạn muốn khắc phục sự cố này và bạn nên (!), Hãy chỉ cài đặt tabtab từ chính.

không lãng phí 2 giờ để tìm ra những gì bạn đã làm sai như tôi :)

Làm cách nào để tôi nhận được câu trả lời này? TL; DR

Trong khi câu trả lời của @ CameronLittle đưa ra giải thích đằng sau hiện trường, tôi muốn giải thích cách tôi đạt được câu trả lời.

Tôi đã thử sử dụng gói tabtab có phần rõ ràng về cách cài đặt gói. xem https://www.npmjs.com/package/tabtab#completion-install

Tuy nhiên, điều đó dường như không hiệu quả đối với tôi.

Nhìn vào mã họ hướng dẫn thêm, tôi thấy process.argv.slice(2)[0] === 'completion' sau đó khiến tôi chạy lệnh pkgname completion, mà kết quả đầu ra một cái gì đó bắt đầu với

###-begin-pkgname-completion-### 
### credits to npm, this file is coming directly from isaacs/npm repo 
# 
# Just testing for now. (trying to learn this cool stuff) 
# 
# npm command completion script 
# 
# Installation: pkgname completion >> ~/.bashrc (or ~/.zshrc) 
# 

những lời this file is coming directly from isaacs/npm repo khiến tôi băn khoăn hơn. sau câu trả lời khác ở đây, tôi đã xem /etc/bash_completion.d/npm - hiển thị cùng một nội dung chính xác .. và vì vậy nhận xét.

tôi quyết định chạy

pkgname completion > /etc/bash_completion.d/pkgname 

tuy nhiên đòi hỏi quyền sudo và do đó trở thành

sudo bash -c "pkgname completion > /etc/bash_completion.d/pkgname 

và sau đó, để áp dụng nó vào phiên bash hiện tại tôi đã phải chạy

source /etc/bash_completion.d/pkgname 

và thì đấy! nó hoạt động!

khi tôi cố gắng mở một thiết bị đầu cuối khác, nó vẫn hoạt động, vì vậy tôi cho rằng nó sẽ áp dụng cho tất cả người dùng. nếu không - bạn nên thêm nó vào .bashrc hoặc một cái gì đó ..

2

Tôi chỉ muốn thêm rằng có npm package yargs cho phép các phím tắt hoàn tất cho lệnh và tùy chọn.

Có tùy chọn xuất tập lệnh hoàn thành .bashrc. Sau đó, các lần hoàn thành Bash được kích hoạt bằng cách tìm nguồn cung ứng kịch bản được tạo ra.

Đây hiện là gói được duy trì tích cực trên npm với hơn một triệu lượt tải xuống mỗi tháng.

6

Sử dụng gói omelette mà tôi đã tạo.Nếu bạn có bất kỳ câu hỏi, xin vui lòng liên hệ với tôi.

Các vấn đề liên quan