Output Terminal Pushdown


15

Apakah ada cara standar untuk membalik urutan keluaran dari keluaran terminal, yaitu:

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

akan ditampilkan sebagai:

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

Saya merasa selalu memiliki prompt Anda di bagian bawah adalah kontra intuitif cara yang lebih efektif untuk menyajikan output akan membalik urutan output. Bagaimana saya bisa menerapkan ini? Khususnya di mana bagian output dari program terminal OSX didefinisikan?


Ini akan membingungkan saya, tetapi saya memuji upaya Anda. Pada linux / unix / open source lesssons utama adalah bahwa Satu Ukuran Tidak Cocok Semua.
Bruce Ediger

Saya pikir ini tidak mungkin sama sekali kecuali Anda mengubah kode sumber shell (misalnya bash).
Renan

5
Anda perlu meretas lebih dari sekadar shell. Terminal telah bergulir dengan cara ini karena mereka elektromekanis. Paling tidak, saya akan mengatakan Anda perlu meretas emulator terminal, mungkin juga sebuah shell.
Alexios

Ini sebenarnya kontra intuitif. Pernahkah Anda memperhatikan panah tombol ENTER? Itu menunjuk ke garis di bawah, bukan di atas.
dresende

Apakah ada cara untuk mengambil item out put dari terminal, saya pikir adalah untuk membuat semacam pembungkus yang mengambil masing-masing item output ini, memperlakukan masing-masing mirip dengan bagaimana tweets diposting dengan yang terbaru selalu muncul di atas dan menempel prompt input di bagian atas UI Wrapper.
rudolph9 9

Jawaban:


6

Dalam bash ini akan menampilkan prompt / perintah saat ini di bagian atas, dan hasilnya di bawah ini, tetapi tanpa menggulir atau perintah sebelumnya:

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

Fungsi ini akan menempatkan perintah-perintah sebelumnya di bawah ini, tetapi Anda harus mem-pipe masing-masing dan setiap perintah secara terpisah. Sayangnya, exec > >(f)tidak dapat membantu dengan ini karena pengalihan seluruh bash, bukan perintah individu. Inilah fungsinya:

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

Kemudian jalankan setiap perintah seperti:

command args |f

Ini menyimpan output, membuat sejumlah baris kosong sama dengan panjang + 1, lalu mengembalikan output. Anda dapat menandai sebuah baris di bagian akhir yang akan menampilkan prompt palsu atau aturan horizontal jika Anda mau. Misalnya

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

Sebagai alternatif omong kosong tetapi otomatis untuk seluruh fungsi ini, kita dapat menambahkan perintah ke akhir $ PROMPT_COMMAND sebelumnya yang menghapus 11 baris yang agak arbitrer:

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

Anda juga dapat menggunakan tput -Suntuk menghindari beberapa panggilan biner.


Saya mendapat $PROMPT_COMMANDdari https://github.com/swirepe/alwaysontop .


6

Sayangnya, ini akan cukup sulit. Protokol antara aplikasi dan terminal OS-X adalah varian dari protokol kontrol terminal VT100 / ANSI , khususnya protokol XTerm .

Itu termasuk banyak asumsi tentang posisi layar, dll, yang akan menantang untuk memetakan kembali ke dunia di mana tampilan dibalik.

Lebih buruk lagi, semua emulator terminal Anda mendapat adalah serangkaian "ketik karakter ini di posisi ini" perintah jenis. Tidak ada perbedaan yang dibuat antara command prompt dan output dari sebuah perintah yang dijalankan olehnya, sehingga Anda tidak dapat melakukan satu hal untuk kedua bagian - setidaknya, bukan tanpa kerja sama dari shell di bawahnya.

Shell, dan program-programnya, berasumsi bahwa layar berlanjut ke atas - data baru di bagian bawah, dan dijalankan ke bawah selamanya.

Anda bisa, setidaknya secara teoritis, emulator terminal Anda dimodifikasi sehingga menampilkan garis dalam urutan terbalik - garis "bawah" terlebih dahulu, dan seterusnya hingga garis "atas" di bagian bawah layar.

Itu akan membalik urutan baris dalam output perintah, jadi, sisa konten akan muncul mundur juga. Jika Anda ingin perintah (mis: ls, cat) menjalankan "turun" tetapi meminta untuk naik "naik" hidup lebih sulit.

Saya tidak tahu ada perangkat lunak yang mengimplementasikan ini. (... tapi lihat komentar JdeBD untuk ini untuk tautan ke satu.) :)



5

Meskipun ini tidak akan secara tepat membalikkan output, ini akan membuat Anda tetap di puncak:

https://github.com/swirepe/alwaysontop

Untuk menggunakannya jalankan:

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

Jika Anda memutuskan bahwa Anda menyukainya, cukup masukkan di .bash_profile Anda dengan sesuatu seperti:

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

1
Ini agak buggy (mis. Dengan tab-autocomplete dan histori) tetapi ini adalah demo yang sangat bagus tentang apa yang mungkin dirasakan UI ini jika diterapkan dengan benar. Saya pikir ini berharga untuk itu - untuk membantu orang tahu apakah mereka menginginkannya atau tidak!
scipilot
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.