2012-02-09 18 views
9

Tôi muốn sử dụng rlwrap với một tùy chỉnh erlang repl.Rlwrap có thể sử dụng hoàn thành TAB của lệnh được bao bọc không?

Nó hoạt động hoàn hảo nếu tôi chạy nó dưới dạng "rlwrap -a myrepl".

Vấn đề là myrepl đã hoàn thành tab được xây dựng mà bị chà đạp bởi rlwrap.

Tôi muốn làm rlwrap để giải phóng TAB key

+0

myrepl là gì? Đây có phải là một câu hỏi erlang hoặc một câu hỏi perl/rlwrap? – Isac

+0

Đối với tôi, lợi ích của việc sử dụng rlwrap lớn hơn giá trị của Erlang tự động hoàn thành. Tôi không thể làm cho họ làm việc cùng nhau, vì vậy tôi sử dụng "rlwrap erl -oldshell". – alavrik

Trả lời

18

Bạn không thể sử dụng rlwrap 's chỉnh sửa dòng/lịch sử và hoàn TAB của repl của bạn cùng một lúc.

rlwrap cung cấp chỉnh sửa dòng, lịch sử và (rất đơn giản) hoàn thành cho các lệnh không có nó. Một lệnh có thứ gì đó lạ mắt như hoàn thành TAB không cần rlwrap để chỉnh sửa đường, phải không?

Các -a (--always-readline) lựa chọn là một cách khá thô đến hành vi trực tuyến chỉnh sửa thay rlwrap cho rằng các lệnh của bạn. Nó chủ yếu dành cho các lệnh có trình chỉnh sửa dòng rất đơn giản, không có lịch sử lệnh

Nếu bạn muốn sử dụng tùy chọn -a vì bạn thích rlwrap 's fanciness (như lịch sử liên tục hoặc lời nhắc màu) cho lệnh của bạn (như hoàn thành TAB), hãy tiếp tục, nhưng không thể chọn một số fanciness của một và giữ một số khác.

Đây là chương trình giá (nhỏ) (và người dùng của họ) phải trả tiền để tránh thư viện readline và giấy phép GPL đi kèm với nó.

Hans (rlwrap tác giả)


Chỉnh sửa (April 2017):

Trong nhiều trường hợp nó sẽ có thể sử dụng một filter để khôi phục lại hoàn thành. Xem A node shell based on readline để biết ví dụ về điều này.

+3

Vỏ Erlang có TAB hoàn thành, nhưng thiếu trong một số khu vực khác. Không có lịch sử giữa các phiên, khả năng chỉnh sửa dòng giới hạn, v.v. –

+0

@ Bạn có thấy bất kỳ lý do nào, nếu tôi thay đổi nguồn của rlwrap và xóa TAB khỏi các khóa đặc biệt hoặc có thể viết lại nó vào một số khóa khác, tôi sẽ không làm việc này? Đã không có thời gian để thử, nhưng tôi đang tận dụng lợi thế mà bạn đã trả lời bài đăng của tôi. –

+6

@ Gabriel: Xóa TAB khỏi "khóa đặc biệt" là không đủ, điều này sẽ chỉ cung cấp cho bạn một khóa TAB đã chết. Điều thực sự cần phải làm là TAB xóa bộ đệm đầu vào của lệnh cơ bản, chuyển bộ đệm đầu vào hiện tại vào nó, định vị con trỏ của nó, sau đó truyền TAB, phân tích kết quả đầu ra (bao gồm cả lệnh di chuyển con trỏ) và cuối cùng điền vào bộ đệm đầu vào readline và đặt rl_point cho phù hợp. Tất cả các bước này đều khó và dễ xảy ra lỗi; đặc biệt là việc phân tích cú pháp đầu ra của lệnh của bạn sẽ yêu cầu rlwrap chứa một trình giả lập thiết bị đầu cuối ảo. –

0

Rlwrap thật dễ thương. Nhưng trong Erlang, nó chỉ cung cấp lịch sử liên tục trong khi phá vỡ hoàn thành tab của erl.

Vấn đề cơ bản là ERL REPL của Erlang chỉ cũ và bị vỡ, và không tuân theo quy ước thông thường * nix. Hơn nữa, họ từ chối sửa chữa nó bởi vì sợ các sysadmins grouchy ngẫu nhiên mà không thể chấp nhận bất kỳ thay đổi nào. Không có số lượng rlwrap "ống dẫn" hack có thể sửa chữa một UX REPL nghèo.

Sẽ tốt hơn (mặc dù công việc đáng kể hơn) để viết REPL từ đầu như pry/ipython/etc. có thể định cấu hình màu, hoàn thành tab, lịch sử liên tục, phân trang, người quan sát CLI, plugin, v.v.

Rlwrap chiếu sáng chương trình bằng vỏ nguyên thủy.

+0

Tôi nghĩ rằng bạn đang quá khắc nghiệt về "ngẫu nhiên, sysadmins grouchy", và đánh giá cao những khó khăn của việc sử dụng thư viện 'readline' tuyệt vời. Lý do chính cho những REPL cũ và bị băm là giấy phép GPL của readline: sử dụng 'readline' có nghĩa là chương trình của bạn phải là GPL. Xem [trao đổi email] này (http://clisp.cvs.sourceforge.net/viewvc/clisp/clisp/doc/Why-CLISP-is-under-GPL) từ một phần tư thế kỷ trước - có thể là một trong những trường hợp đầu tiên của Thực thi GPL, trong đó 'readline' đóng một vai trò quan trọng. –

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