フォアグラウンド/バックグラウンド操作のシェルキーバインディングの交換

フォアグラウンド/バックグラウンド操作のシェルキーバインディングの交換

使用量が多く、tmuxウィンドウ間の切り替えにもかかわらず、依然としてシェルジョブコントロールをかなり使用しています。刺す必要がある場合は、バックグラウンドCtrl+使用しているツールをZ刺して、fgもう一度ツールを使用します。問題は、時々「パーキング」が別のツールを使用することに変わり、数回前後に移動したいということです。

最新のバックグラウンドジョブに関係なく、現在のジョブをバックグラウンドに置き、それを実行しているシェルによってキャプチャされた(つまり、フォアグラウンドアプリケーションに渡されていない)他のキーをバインドできますか?

ベストアンサー1

これにより、1つ以上のジョブが一時停止されるたびに、Publish CTRL+は直前のジョブを直ちに再開します。Zwhileループを終了する唯一の方法は、最大1つのバックグラウンドプログラムが残るまでプログラムを閉じることです。

function fgstack() {
  local n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  while [[ n_jobs -gt 1 ]]; do
    fg %-;
    n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  done
}

2つの作業ループから抜け出す機会を与えたい場合は、0.2秒が経過するまで作業を一時停止してもかまいませんか?CTRL++:(zsh - bashの場合、時間を取得するには他のものを使用する必要があります):ZZ

function fgstack() {
  local n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  while [[ n_jobs -gt 1 ]]; do
    if [[ $SECONDS -lt 0.2 ]]; then
      break
    fi
    typeset -F SECONDS=0
    fg %-;
    n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  done
}

これはもう一つ必要なものです富士ただし、選択できるオプションが3つ以上の場合はメニューが表示されます。

function fgstack() {
  local n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  while [[ n_jobs -gt 1 ]]; do
    if [[ n_jobs -eq 2 ]]; then
      fg %-;
    else
     job=$(jobs | fzf -0 -1 | tr -cd "[:digit:]") && fg %$job
    fi
    n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  done

zshとbashでテスト済み - bashは、関数呼び出し後に最初のバックグラウンドジョブから戻ってからwhileループを終了するようです。この問題を解決する方法を知っている人がいる場合は、編集とコメントを歓迎します!

おすすめ記事