2012-06-13 45 views
19

Màn hình thay thế được nhiều ứng dụng đầu cuối "tương tác với người dùng" như vim, htop, màn hình, alsamixer, ít hơn, ... Nó giống như một bộ đệm khác nội dung thiết bị đầu cuối, biến mất khi ứng dụng thoát, do đó toàn bộ thiết bị đầu cuối được khôi phục và có vẻ như ứng dụng chưa xuất ra bất kỳ thứ gì.Sử dụng "màn hình thay thế" trong tập lệnh bash

Tôi muốn đạt được chính xác điều tương tự trong kịch bản shell (bash) của riêng tôi, ngoại trừ việc nó không phải là di động. Tôi chỉ muốn sử dụng bộ mô phỏng đầu cuối dựa trên linux và xterm; nhưng giải pháp nên sử dụng một cái gì đó như tput nếu có thể. Tuy nhiên, tôi không muốn sử dụng một số ngôn ngữ kịch bản bên ngoài (hoặc thậm chí một cái gì đó như C).

Mặc dù tôi không muốn sử dụng C (vì nó phải là một bash-script với ít phụ thuộc nhất có thể), tôi đã xem xét mã nguồn ít hơn. Dường như sử dụng terminfo làm cơ sở dữ liệu và tìm kiếm khả năng đầu cuối "ti" trong quá trình khởi tạo của nó. Khi loại bỏ các dòng, nó không sử dụng các sceen thay thế, vì vậy tôi giả định rằng tôi tìm thấy dòng mã chịu trách nhiệm.

Tuy nhiên, tôi không thể tìm thấy khả năng như vậy trong man terminfo. Nhưng có lẽ tôi đang đi sai đường tìm một giải pháp cho việc này. Có lẽ terminfo/tput không phải là bạn của tôi.

Vì vậy, (làm cách nào) tôi có thể sử dụng màn hình thay thế trong tập lệnh bash? Có ai biết một ứng dụng đơn giản trong đó mã nguồn tôi có thể tìm thấy một gợi ý? (C ứng dụng hoặc kịch bản bash hoặc bất cứ điều gì ...)

Trả lời

29

Bạn có thể chuyển sang chế độ màn hình luân phiên sử dụng lệnh này:

$ tput smcup 

Và trở lại với:

$ tput rmcup 

Những lệnh này chỉ ra các trình tự thoát thích hợp cho thiết bị đầu cuối của bạn. Nếu đó là một xterm họ sẽ tương đương với (được biết đến nhiều hơn nhưng ít thanh lịch hoặc di động):

$ echo -e "\e[?1049h" 

Và:

$ echo -e "\e[?1049l" 

Để biết thêm các lệnh điều khiển thiết bị đầu cuối thấy man 5 terminfo.

+0

Aaaah, tốt. Làm việc như một say mê. Cảm ơn! :) – leemes

+0

@leemes - Trên thực tế, đọc lại câu hỏi của bạn, bạn nói về khả năng của thiết bị đầu cuối 'ti' ... nhưng nếu bạn nhìn kỹ trong' man terminfo', nó chỉ là tên termcap của 'smcup' !!! – rodrigo

+0

Lol? Tôi có thể * thề * rằng tôi đã tìm kiếm 'ti' (như đã đề cập trong câu hỏi) và không tìm thấy khả năng! Damn ... -.- – leemes

2

Đối với C giao diện điều khiển ứng dụng:

ncurses

Wikipedia:

ncurses (lời nguyền mới) là một thư viện lập trình cung cấp một API cho phép các lập trình viên để viết dựa trên văn bản giao diện người dùng theo cách độc lập với thiết bị đầu cuối.

less sử dụng thư viện này.

Chương trình thế giới xin chào từ here, để biên dịch chương trình này bằng gcc, cần phải có cờ tố.

#include <ncurses.h> 

int main() 
{ 
    initscr();   /* Start curses mode   */ 
    printw("Hello World !!!"); /* Print Hello World   */ 
    refresh();   /* Print it on to the real screen */ 
    getch();   /* Wait for user input */ 
    endwin();   /* End curses mode  */ 

    return 0; 
} 
+2

** Tuy nhiên, tôi không muốn sử dụng một số ngôn ngữ kịch bản bên ngoài (hoặc thậm chí một cái gì đó như C). ** –

4

smcup/rmcup được sử dụng, nhưng chỉ dành cho các tác dụng phụ: các dãy thoát mà chuyển giữa các màn hình bình thường/thay thế thường được nhúng vào những khả năng terminfo - không phải lúc nào.

Một số nền nằm trong faq xterm Why doesn't the screen clear when running vi?

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