Aşağı Açılan Terminal Çıkışı


16

Bir terminal çıkışının çıkış sırasını tersine çevirmenin standart bir yolu var mı, yani:

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

şu şekilde görüntülenir:

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

Ben her zaman alt istemi karşı sezgisel çıkış çıktısını tersine olmak için çıktı woud sunmanın daha etkili bir yol olduğunu hissediyorum. Bunu nasıl uygulayabilirim? Özellikle OSX terminal programının çıkış kısmı nerede tanımlanır?


Bu beni karıştırır, ama çabalarını alkışlarım. Linux / unix / açık kaynak ana dersleri One Size Herkese Uymuyor olmasıdır.
Bruce Ediger

Kabuğun kaynak kodunu değiştirmediğiniz sürece bunun mümkün olmadığını düşünüyorum (örn. bash).
Renan

5
Sadece mermiden daha fazlasını hacklemelisin. Terminaller elektromekanik olduklarından beri bu şekilde ilerliyorlar. En azından, bir terminal emülatörünü, belki de bir kabuğu hacklemeniz gerektiğini söyleyebilirim.
Alexios

Bu aslında karşı sezgisel. ENTER tuşu okunu fark ettiniz mi? Yukarıda değil, aşağıdaki çizgiyi gösterir.
dresende

Bir terminalden dışarı koymak öğeleri yakalamanın bir yolu var mı, benim düşüncem bu çıktı öğelerinin her birini kapmak, her biri en yeni her zaman üstte apear ile tweet nasıl nakledilir benzer davranır bir tür sarıcı oluşturmaktır ve giriş istemini Sarıcı Kullanıcı Arayüzünün üstüne yapıştırmak.
rudolph9

Yanıtlar:


6

Bash'da bu, geçerli istemi / komutu üstte ve çıktısını aşağıda görüntüler, ancak kaydırma veya önceki komutlar olmadan görüntüler:

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

Bu işlev önceki komutları aşağıya koyacaktır, ancak her komutu ayrı ayrı yönlendirmeniz gerekir. Ne yazık ki, exec > >(f)bireysel komutları değil, tüm bash'ı yönlendirdiği için bu konuda yardımcı olamaz. İşte işlevi:

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

Sonra her komutu aşağıdaki gibi çalıştırın:

command args |f

Çıktıyı kaydeder, uzunluk + 1'e eşit sayıda boş satır oluşturur, sonra çıktıyı tekrar koyar. Sonunda isterseniz sahte bir istem veya yatay kural görüntüleyecek bir satırı etiketleyebilirsiniz. Örneğin

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

Tüm bu işlev için bir bok ama otomatik alternatif olarak, daha önceki $ PROMPT_COMMAND'ımızın sonuna, biraz keyfi 11 satırı temizleyen bir komut ekleyebiliriz:

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

tput -SBirden çok ikili çağrıdan kaçınmak için de kullanabilirsiniz .


Bende $PROMPT_COMMANDgelen https://github.com/swirepe/alwaysontop .


6

Ne yazık ki, bu oldukça zor olacak. Uygulamalar ve OS-X terminali arasındaki protokol, VT100 / ANSI terminal kontrol protokolünün, özellikle XTerm protokolünün bir çeşididir .

Bu, ekran konumu, vb. Hakkında, ekranın tersine çevrildiği bir dünyaya yeniden eşlemek için zor olacak bir dizi varsayımı içerir.

Daha da kötüsü, tüm terminal öykünücünüz "bu karakteri bu konuma koy" komutları dizesidir. Komut istemi ve onun tarafından çalıştırılan bir komutun çıktısı arasında bir ayrım yoktur, bu nedenle her iki parça için bir şey yapamazsınız - en azından, altındaki kabuktan işbirliği olmadan.

Kabuk ve programlar, ekranın yukarı doğru ilerlediğini varsayar - altta yeni veriler ve sonsuza kadar aşağı doğru devam eder.

En azından teorik olarak, terminal öykünücünüzün satırları ters sırayla görüntüleyecek şekilde değiştirilmesini sağlayabilirsiniz - önce "alt" çizgi ve ekranın altındaki "üst" çizgiye kadar.

Bu, komut çıkışındaki satırların sırasını tersine çevirir, böylece içeriğin geri kalanı da geriye doğru açılır. Eğer komutları (örneğin: ls, cat) "aşağı" çalıştırmak istedim ama "yukarı" taşımak istemleri hayat zor.

Bunu uygulayan herhangi bir yazılım bilmiyorum. (... ama bir link için JdeBD'nin yorumuna bakın.) :)



6

Bu, çıktıyı tam olarak tersine çevirmese de, isteminizi en üstte tutar:

https://github.com/swirepe/alwaysontop

Kullanmak için çalıştırın:

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

Beğendiğine karar verirsen, sadece .bash_profile dosyasında şöyle bir şeyle kaynak yap:

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

1
Bu biraz buggy (örneğin tab-autocomplete ve geçmiş ile), ancak düzgün bir şekilde uygulandığında bu kullanıcı arayüzünün nasıl hissedebileceğinin çok iyi bir demosudur. Bunun için değerli olduğunu düşünüyorum - insanların isteyip istemediklerini bilmelerine yardımcı olmak!
scipilot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.