web-dev-qa-db-ja.com

-さまざまなターミナルエミュレータのeオプション

マウスでlessの出力をスクロールしようとしたときのxtermの動作が気に入らなかった(lessをスクロールする代わりにコマンド履歴をスクロールする)。それでさくらを手に入れました、そしてそれは私が望むように振る舞いました。ただし、「-e」オプションはうまく機能していないようです。

入力すると

xterm -e "ls /usr/bin | less"

コマンドls /usr/bin | lessが実行された新しいxtermを取得します。しかしながら、

sakura -e "ls /usr/bin | less"

私の要求を無視しているようで、単に新しいさくら端末を起動します。

実際、私は他のターミナルエミュレーターとオプションを試しましたが成功しませんでした...

sakura -x "ls /usr/bin | less"
xfce4-terminal -e "ls /usr/bin | less"
roxterm -e "ls /usr/bin | less"
lxterminal -e "ls /usr/bin | less"
lilyterm -e "ls /usr/bin | less"

彼らの中には私の要求を無視する人もいれば、「子プロセスの実行に失敗しました...(そのようなファイルやディレクトリはありません)」と言う人もいます。

私は現在アーチにいます。私は http://osdir.com/ml/general/2013-07/msg06468.html に出くわしました。これは、さくらがかつて私が望んでいたように振る舞っていたことを示唆しているようです(私は現在、バージョン3.1.0があります)。

sakuraまたはその他の「Nice」ターミナルエミュレータを期待どおりに動作させるためのヘルプがあれば幸いです(つまり、コマンド$ TERM -e "ls/usr/bin | less"でターミナルを開きます。指定されたコマンドが実行されたエミュレーターで、マウスホイールでスクロールできない出力があります)。

1
math4tots

sakuraは壊れているようですが、他のタイプには2つの主なタイプがあります。-eの後に1つの引数を取り、それをシェルコマンドラインとして扱うタイプと、引数のリストと最初のものは、実行するコマンドを導出するために使用されます(シェルは関与しないため、パイプなどのシェル機能は使用できません。

xterm、特別な場合として、複数の引数がある場合、または1つの引数が($PATHでのルックアップによって)既存の実行可能ファイルに解決される場合は2番目のカテゴリに分類され、それ以外の場合は2番目のカテゴリに分類されます。 。

そう:

xterm -e 'ls | less'

たとえば、/usr/bin/ls | less実行可能ファイル(スペースとパイプ文字を含むファイル名)を実行します。存在する場合は最初の引数としてls | lessを使用します。存在しない場合は、(より可能性が高いですが)/bin/sh with、sh-cls | lessそれ以外の場合。

他のほとんどの端末では(あいまいさを解消するためにxtermでも推奨されています)、明示的にshを呼び出す必要があります。

lxterminal -e sh -c 'ls | less'

sakura-eが機能していないようです。 -xはある程度機能します。できるよ:

sakura -x 'sh -c "ls | less"'

-xに渡された単一の引数をシェルのように解析し、それを引数のリストに分割してから実行するようです。

lessでのスクロールについて。 sakura(および他のVTEベースのターミナルエミュレーター)で機能します。これは、代替のscreenで(tput smcupを発行した後のように)、スクロールダウンイベントとスクロールアップイベントが同じものを送信するためです。を押すときのようにシーケンスをエスケープする Down そして Up キー。

smcupが発行されていないls | less -Xでは機能しないことに気付くでしょう。

xtermはこれをオプションとしてサポートしており、デフォルトでは有効になっていません。 XTerm.VT100.alternateScrollリソースをtrueに設定することで変更できます。たとえば、次のように追加します。

XTerm.VT100.alternateScroll: true

~/.Xdefaults(そのマシンで開始されたxtermsの場合)、またはXサーバーにロードされたリソースファイル(どこでも開始され、Xサーバーに接続しているxtermsの場合)、またはxtermを呼び出す:

xterm -xrm 'XTerm.VT100.alternateScroll: true' -e sh -c 'ls | less'
3