Pushdown Terminal output


16

มีวิธีมาตรฐานในการสลับลำดับผลลัพธ์ของเทอร์มินัลเอาท์พุทเช่น:

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

จะแสดงเป็น:

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

ฉันรู้สึกว่าการให้พรอมต์ของคุณที่ด้านล่างเป็นเรื่องง่าย ๆ และเป็นวิธีที่มีประสิทธิภาพมากขึ้นในการนำเสนอเอาต์พุตที่จะเป็นการย้อนกลับลำดับเอาต์พุต ฉันจะดำเนินการสิ่งนี้อย่างไร โดยเฉพาะที่กำหนดส่วนเอาท์พุทของโปรแกรมเทอร์มินัล OSX ที่กำหนด?


สิ่งนี้จะทำให้ฉันสับสน แต่ฉันขอปรบมือให้ความพยายามของคุณ น้อยกว่าที่สำคัญของ linux / unix / open source คือ One Size ไม่พอดีทั้งหมด
Bruce Ediger

ฉันคิดว่ามันเป็นไปไม่ได้เลยเว้นแต่คุณจะเปลี่ยนซอร์สโค้ดของเชลล์ (เช่นbash)
Renan

5
คุณต้องแฮ็คมากกว่าแค่เปลือก เทอร์มินัลได้รับการเลื่อนด้วยวิธีนี้ตั้งแต่พวกเขาเป็นระบบเครื่องกลไฟฟ้า อย่างน้อยที่สุดฉันจะบอกว่าคุณต้องแฮ็คเทอร์มินัลอีมูเลเตอร์บางทีอาจเป็นเชลล์ด้วย
Alexios

นี่คือการตอบโต้ที่ใช้งานง่ายจริง ๆ คุณสังเกตเห็นปุ่มลูกศร ENTER หรือไม่ มันชี้ไปที่บรรทัดด้านล่างไม่ใช่ด้านบน
dresende

มีวิธีที่จะหยิบของที่นำออกจากเทอร์มินัลหรือไม่ฉันคิดว่าจะสร้างเสื้อคลุมที่หยิบของเอาท์พุทแต่ละรายการเหล่านี้ปฏิบัติต่อพวกเขาแต่ละอย่างคล้ายกับการโพสต์ทวีต ผสานการป้อนข้อมูลที่ด้านบนของ Wrapper UI
rudolph9

คำตอบ:


6

ในทุบตีนี้จะแสดงพรอมต์คำสั่ง / ปัจจุบันที่ด้านบนและเอาท์พุทด้านล่าง แต่ไม่มีคำสั่งเลื่อนหรือก่อนหน้า:

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

ฟังก์ชั่นนี้จะใส่คำสั่งก่อนหน้าด้านล่าง แต่คุณต้องไพพ์แต่ละคำสั่งและทุกคำสั่งไปทีละรายการ แต่น่าเสียดายที่exec > >(f)ไม่สามารถช่วยได้เพราะมันเปลี่ยนเส้นทางการทุบตีทั้งหมดไม่ใช่คำสั่งทีละรายการ นี่คือฟังก์ชั่น:

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

จากนั้นเรียกใช้ทุกคำสั่งเช่น:

command args |f

มันบันทึกเอาท์พุทสร้างจำนวนบรรทัดว่างเท่ากับความยาว + 1 จากนั้นใส่เอาท์พุทกลับมาคุณสามารถติดแท็กบรรทัดในตอนท้ายที่จะแสดงพรอมต์ปลอมหรือกฎแนวนอนถ้าคุณต้องการ เช่น

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

ในฐานะที่เป็นอึ แต่เป็นทางเลือกโดยอัตโนมัติสำหรับสิ่งที่ฟังก์ชั่นทั้งหมดนี้เราสามารถเพิ่มคำสั่งที่ส่วนท้ายของ $ PROMPT_COMMAND ก่อนหน้าของเราซึ่งจะลบ 11 บรรทัดโดยพลการ:

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

นอกจากนี้คุณยังสามารถใช้tput -Sเพื่อหลีกเลี่ยงการโทรไบนารีหลายรายการ


ผมได้$PROMPT_COMMANDจากhttps://github.com/swirepe/alwaysontop


6

น่าเสียดายที่นี่จะค่อนข้างยาก โปรโตคอลระหว่างแอ็พพลิเคชันและเทอร์มินัล OS-X เป็นตัวแปรของโปรโตคอลควบคุมเทอร์มินัลVT100 / ANSIโดยเฉพาะโปรโตคอลXTerm

นั่นรวมถึงข้อสมมติฐานมากมายเกี่ยวกับตำแหน่งหน้าจอและอื่น ๆ ซึ่งจะเป็นสิ่งที่ท้าทายที่จะทำการแมปไปยังโลกที่จอแสดงผลกลับด้าน

ยิ่งแย่ไปกว่านั้นเทอร์มินัลอีมูเลเตอร์ทั้งหมดของคุณคือสตริงคำสั่งชนิด "ใส่อักขระนี้ที่ตำแหน่งนี้" ไม่มีความแตกต่างระหว่างพรอมต์คำสั่งและเอาท์พุทของคำสั่งที่รันดังนั้นคุณจึงไม่สามารถทำสิ่งใดสิ่งหนึ่งสำหรับทั้งสองส่วน - อย่างน้อยไม่ได้โดยปราศจากความร่วมมือจากเชลล์ที่อยู่ด้านล่าง

เชลล์และโปรแกรมสันนิษฐานว่าหน้าจอมีรายรับเพิ่มขึ้น - ข้อมูลใหม่ที่ด้านล่างและดำเนินการลงตลอดไป

อย่างน้อยในทางทฤษฎีคุณสามารถปรับแต่งเทอร์มินัลอีมูเลเตอร์ของคุณเพื่อให้แสดงบรรทัดในลำดับย้อนกลับ - บรรทัด "ด้านล่าง" ก่อนและต่อไปจนถึงบรรทัด "ด้านบน" ที่ด้านล่างของหน้าจอ

ที่จะย้อนกลับลำดับของบรรทัดในเอาท์พุทคำสั่งดังนั้นเนื้อหาที่เหลือจะโผล่ออกมาด้านหลังด้วย หากคุณต้องการคำสั่ง (เช่น: ls, cat) เพื่อเรียกใช้ "ลง" แต่การแจ้งให้ย้ายชีวิต "ขึ้น" นั้นยากขึ้น

ฉันไม่ทราบว่าซอฟต์แวร์ใดที่ใช้สิ่งนี้ (... แต่เห็นความคิดเห็นของ JdeBD เกี่ยวกับสิ่งนี้สำหรับลิงก์ไปยังหนึ่ง) :)



6

แม้ว่าสิ่งนี้จะไม่ย้อนกลับผลลัพธ์ที่แน่นอน แต่ก็จะให้คุณพร้อมที่ด้านบน:

https://github.com/swirepe/alwaysontop

วิธีใช้งาน:

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

หากคุณตัดสินใจว่าคุณจะชอบเพียงแค่ส่งมันใน. bash_profile ของคุณด้วยสิ่งต่อไปนี้:

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

1
นี่เป็นรถบิต (เช่นกับการเติมข้อความอัตโนมัติของแท็บและประวัติ) แต่เป็นการสาธิตที่ดีมากว่า UI นี้อาจรู้สึกอย่างไรหากมีการใช้งานอย่างถูกต้อง ฉันคิดว่ามันมีค่าสำหรับสิ่งนั้น - เพื่อช่วยให้ผู้คนรู้ว่าพวกเขาต้องการหรือไม่!
scipilot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.