Các dòng thiết bị đầu cuối OS X không đi vào cuộn lại


12

Tôi gặp một vấn đề nảy sinh khi sử dụng Terminal của Mac OS X (TERM = xterm): đôi khi, nó tự chuyển sang trạng thái mà các dòng cuộn từ trên xuống không được thêm vào bộ đệm cuộn. Tôi không sử dụng screenhoặc tương tự; đây là một vỏ bash đơn giản bên trong tab Terminal.

Nó không làm điều này ngay lập tức sau khi mở một tab mới. Tôi tin rằng đó là tác dụng phụ của thứ tôi đã chạy trong tab vấn đề. Tôi đoán là nó có liên quan đến việc mô phỏng xterm, có thể là vùng cuộn.

Những gì đã không làm việc:

  • Đặt lại mềm và cứng thông qua menu Shell
  • Chạy resettrong tab

Có cách nào đáng tin cậy để thiết lập lại Terminal và / hoặc trạng thái xterm không?

Bất cứ ai cũng có thể đưa ra lời giải thích cho những gì đang xảy ra, ngay cả khi cách khắc phục duy nhất là đóng tab và mở một cái mới?


Phiên bản Mac OS X nào bạn đang chạy? Bạn có bộ đệm trên một cái gì đó ít hơn "không giới hạn" và các dòng bạn thiếu chỉ đơn giản là các dòng cũ nhất rơi ra phía sau của bộ đệm?
Spiff

Mac OS X 10.6.2 và bộ đệm là 10.000 dòng, tuy nhiên các dòng bị mất là những cuộn chỉ tắt khỏi màn hình. Nếu tôi trang lên một màn hình, những dòng đó không có ở đó và trên thực tế khi các dòng cuộn từ trên xuống, trang cuộn gần đây nhất không bao giờ thay đổi.
Steve Madsen

Câu trả lời:


19

Điều này có nghĩa là thiết bị đầu cuối đang sử dụng bộ đệm màn hình thay thế. Có một màn hình chính, cuộn vào nhật ký cuộn và một màn hình thay thế không có. Các chương trình "Toàn màn hình" hoặc "định hướng màn hình" như top, less, emacs, vim và màn hình chuyển thiết bị đầu cuối sang màn hình thay thế theo mặc định.

Mỗi màn hình có nội dung và trạng thái riêng. Có màn hình thay thế cho phép các chương trình chiếm toàn bộ màn hình, sau đó khôi phục các nội dung trước đó khi chúng thoát, bằng cách chuyển trở lại màn hình chính.

Kể từ Mac OS X Lion 10.7, Terminal có một mục menu bạn có thể sử dụng để chuyển đổi màn hình theo cách thủ công:

Xem> Hiển thị / Ẩn màn hình thay thế

Điều này được cung cấp chủ yếu để bạn có thể xem hoặc sao chép văn bản từ màn hình thay thế sau khi thoát khỏi chương trình "toàn màn hình". Xterm có một lệnh tương tự.

Bạn cũng có thể sử dụng nó để buộc một chương trình sử dụng một màn hình cụ thể, để kiểm soát xem đầu ra có vào nhật ký cuộn không, chẳng hạn. Tuy nhiên, nếu bạn hiện đang sử dụng một chương trình chuyển đổi rõ ràng sang màn hình thay thế, bạn có thể nhầm lẫn hoặc nhận được kết quả không mong muốn nếu bạn buộc nó vào màn hình chính trong khi chương trình đang chạy, vì vậy hãy thận trọng khi sử dụng chương trình này.

Tùy thuộc vào chương trình, nó có thể có một đối số dòng lệnh hoặc một số phương tiện khác để cấu hình nó để sử dụng màn hình chính thay thế. ví dụ less -X.

Một số mục terminfo được thiết kế đặc biệt để triệt tiêu bằng cách sử dụng màn hình thay thế, ví dụ : xterm1. TERM=xterm1 emacssẽ chạy Emacs trên màn hình chính. Tôi không khuyên bạn nên sử dụng xterm1vĩnh viễn, vì nó vô hiệu hóa một số tính năng hữu ích khác so với mặc định xterm-256colortrên Lion.

Bạn cũng có thể chuyển đổi màn hình bằng cách sử dụng tputlệnh để đưa ra các chuỗi thoát từ bên trong shell hoặc script. tput smcupchuyển sang màn hình thay thế và tput rmcupchuyển trở lại màn hình chính.

Để xem chương trình nào hiện đang chạy, hãy xem tên chương trình được hiển thị trong cửa sổ Terminal hoặc tiêu đề tab hoặc nhìn vào cửa sổ Inspector ( Shell> Show Inspector ). Quá trình cuối cùng trong danh sách trong Thanh tra là (thường) chương trình hiện tại sử dụng màn hình. Đó là cái bạn sẽ cần cấu hình để sử dụng màn hình chính thay thế.


1
Điều này nghe có vẻ như một câu trả lời rất hứa hẹn. Là một lời giải thích hợp lý rằng một chương trình có thể thoát bất thường, khiến màn hình thay thế hoạt động?
Steve Madsen

Nếu bạn quay lại vỏ sau khi chạy chương trình "toàn màn hình", vâng, đó là một khả năng, mặc dù hầu hết các chương trình phổ biến, như những chương trình tôi liệt kê, đều đáng tin cậy về việc tự dọn dẹp. Nếu chương trình "toàn màn hình" gặp sự cố, nó có thể rời khỏi thiết bị đầu cuối trên màn hình thay thế. Tuy nhiên, bạn cho biết bạn đã thử Shell> Send Hard Reset , bao gồm chuyển trở lại màn hình chính. Nếu nó xảy ra lần nữa, bạn có thể thử sử dụng lệnh này để chuyển trở lại:tput rmcup
Chris Trang

Một khả năng khác là một chương trình rời khỏi thiết bị đầu cuối với "vùng cuộn". Có các mã để báo cho thiết bị đầu cuối chỉ cuộn một phạm vi con của dòng khi cuộn. Các chương trình sử dụng điều này để hiển thị các dòng trạng thái, ví dụ, không cuộn khỏi màn hình. Nếu vùng cuộn không bao gồm dòng trên cùng, văn bản sẽ không cuộn vào nhật ký cuộn. Tuy nhiên, một lần nữa, bạn nói rằng bạn đã thử Hard Reset, điều này cũng sẽ xóa điều đó.
Chris Trang

2
Trong trường hợp của tôi, điều dường như đã xảy ra là sshphiên của tôi với một máy từ xa bị lỗi (hết thời gian?) Khi tôi đang ở trong vi, dường như rời khỏi thiết bị đầu cuối trong Màn hình thay thế (vì vikhông bao giờ có cơ hội để dọn dẹp). Sau đó, bất kỳ sshphiên mới nào trong cùng một thiết bị đầu cuối sẽ thể hiện sự cố được mô tả bởi OP, cho đến khi tôi giải quyết vấn đề bằng cách chọn mục menu View> Hide Alternate Screen .
Hephaestus

Cảm ơn bạn, Xem> Hiển thị / Ẩn màn hình thay thế đã giúp. Nó có một tổ hợp quan trọng mà tôi phải vô tình đánh và không biết chuyện gì đã xảy ra hoặc làm thế nào để hoàn tác
aexl
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.