Đầu ra thiết bị đầu cuối đẩy


15

Có cách nào chuẩn để đảo ngược thứ tự đầu ra của đầu ra đầu cuối không, nghĩa là:

~/Developer $ command0 
-bash: comman0: command not found 
~/Developer $ command2 
-bash: command2: command not found 
~/Developer $ command3 
-bash: command3: command not found 
~/Developer $ 

sẽ được hiển thị dưới dạng:

~/Developer $ 
-bash: command3: command not found 
~/Developer $ command3 
-bash: command2: command not found 
~/Developer $ command2 
-bash: comman0: command not found 
~/Developer $ comman0

Tôi cảm thấy luôn có lời nhắc của bạn ở phía dưới là phản biện trực quan một cách hiệu quả hơn để trình bày đầu ra sẽ được đảo ngược thứ tự đầu ra. Làm thế nào tôi có thể đi về thực hiện điều này? Cụ thể phần đầu ra của chương trình thiết bị đầu cuối OSX được xác định ở đâu?


Điều này sẽ làm tôi bối rối, nhưng tôi hoan nghênh những nỗ lực của bạn. Trên linux / unix / mã nguồn chính là một kích thước không phù hợp với tất cả.
Bruce Ediger

Tôi nghĩ rằng điều này là không thể, trừ khi bạn thay đổi mã nguồn của shell (ví dụ bash).
Renan

5
Bạn sẽ cần hack nhiều hơn chỉ là vỏ. Thiết bị đầu cuối đã được cuộn theo cách này kể từ khi chúng là cơ điện. Ít nhất, tôi muốn nói rằng bạn cần hack một trình giả lập thiết bị đầu cuối, cũng có thể là một trình bao.
Alexios

Đây thực sự là phản trực quan. Bạn đã nhận thấy mũi tên phím ENTER? Nó chỉ vào dòng bên dưới, không phải ở trên.
dresende

Có cách nào để lấy các mục ra khỏi thiết bị đầu cuối không, tôi nghĩ là tạo ra một loại trình bao bọc lấy từng mục đầu ra này, xử lý từng mục tương tự như cách tweet được đăng với cái mới nhất luôn luôn xuất hiện trên đầu và dán dấu nhắc nhập ở đầu giao diện người dùng Wrapper.
rudolph9

Câu trả lời:


6

Trong bash, điều này sẽ hiển thị dấu nhắc / lệnh hiện tại ở trên cùng và đầu ra của nó bên dưới, nhưng không có lệnh cuộn hoặc các lệnh trước đó:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'

Hàm này sẽ đặt các lệnh trước bên dưới, nhưng bạn phải đặt từng lệnh cho từng lệnh. Thật không may, exec > >(f)không thể giúp với điều này vì nó chuyển hướng toàn bộ bash, không phải các lệnh riêng lẻ. Đây là chức năng:

f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }

Sau đó chạy mọi lệnh như:

command args |f

Nó lưu đầu ra, tạo một số dòng trống bằng chiều dài + 1, sau đó đặt đầu ra trở lại. Bạn có thể gắn thẻ một dòng ở cuối sẽ hiển thị một dấu nhắc giả hoặc quy tắc ngang nếu bạn muốn. Ví dụ

printf '%*s' $COLUMNS | tr ' ' _;

Là một thứ nhảm nhí nhưng tự động thay thế cho toàn bộ chức năng này, chúng ta có thể thêm một lệnh vào cuối $ PROMPT_COMMAND trước đó để xóa 11 dòng tùy ý:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'

Bạn cũng có thể sử dụng tput -Sđể tránh nhiều cuộc gọi nhị phân.


Tôi đã nhận được $PROMPT_COMMANDtừ https://github.com/swirepe/alwaysontop .


6

Thật không may, điều này sẽ khá khó khăn. Giao thức giữa các ứng dụng và thiết bị đầu cuối OS-X là một biến thể của giao thức điều khiển thiết bị đầu cuối VT100 / ANSI , đặc biệt là giao thức XTerm .

Điều đó bao gồm một loạt các giả định về vị trí màn hình, v.v., sẽ rất khó khăn để sắp xếp lại một thế giới nơi màn hình bị đảo ngược.

Thậm chí tệ hơn, tất cả các trình giả lập thiết bị đầu cuối của bạn nhận được là một chuỗi các lệnh loại "đặt ký tự này ở vị trí này". Không có sự phân biệt giữa dấu nhắc lệnh và đầu ra của lệnh do nó chạy, vì vậy bạn không thể làm một việc cho cả hai phần - ít nhất, không phải không có sự hợp tác từ lớp vỏ bên dưới.

Shell và các chương trình giả định rằng màn hình tiến lên phía trên - dữ liệu mới ở phía dưới và tiếp tục đi xuống mãi mãi.

Về mặt lý thuyết, bạn có thể sửa đổi trình giả lập thiết bị đầu cuối của mình để nó hiển thị các dòng theo thứ tự ngược lại - dòng "dưới cùng" trước, và tiếp tục đến dòng "trên cùng" ở dưới cùng của màn hình.

Tuy nhiên, điều đó sẽ đảo ngược thứ tự các dòng trong đầu ra lệnh, do đó, phần còn lại của nội dung cũng sẽ bật ra phía sau. Nếu bạn muốn các lệnh (ví dụ: ls, cat) chạy "xuống" nhưng nhắc nhở để di chuyển "lên" thì cuộc sống khó khăn hơn.

Tôi không biết bất kỳ phần mềm nào thực hiện điều này. (... nhưng hãy xem nhận xét của JdeBD về điều này để biết liên kết đến một.) :)



5

Mặc dù điều này sẽ không hoàn toàn đảo ngược đầu ra, nhưng nó sẽ giữ lời nhắc của bạn ở đầu:

https://github.com/swirepe/alwaysontop

Để sử dụng nó chạy:

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh

Nếu bạn quyết định bạn thích nó, chỉ cần nguồn nó trong .bash_profile của bạn với một cái gì đó như:

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile

1
Đây là một lỗi nhỏ (ví dụ với tab-autocomplete và history) nhưng đây là bản demo rất tốt về giao diện người dùng này có thể cảm thấy như thế nào nếu được triển khai đúng cách. Tôi nghĩ rằng nó có giá trị cho điều đó - để giúp mọi người biết họ có muốn hay không!
scipilot
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.