
alacritty
私はデフォルトのシェルとしてTile WM(AwesomeWM)を使用します。 (端末で)ファイルを開くと、端末の横にある新しいウィンドウでファイルが開きます。
これは迷惑なことであり、私が望むものではありません。端末を閉じるとPDF(zathura
)も閉じます。端末を最小限に抑えることができますが、よりエレガントなソリューションを探しています。
「サイレントモード」というものがあったことを覚えていますが、それが何なのかはよくわかりません。アイデアは、PDF(または画像など)が開かれると、端末が「消えて」PDFを閉じるまでそのまま残ります。この場合、端末が再び表示されます。
どのように動作するのか分からないし、見つけることもできないようです。誰でもアイデアがあればありがとうございます。
答え1
これはで行うことができますxdotools
。横に「最小化する」私たちができるターミナルマッピング解除ウィンドウマネージャから隠されます。
数年前、このプロジェクトのために書いたスクリプトを整理してコメントしました。正直なところ、ほとんど使用しませんが、手形に適している必要があります。
xdotools
(Xを実行するだけで)使用の利点は、制御可能で調整できることです。カスタムウィンドウツールを作成するのに便利なツールです。バグや必要な機能があれば処理が簡単です。
ターミナルエミュレータを隠すことに加えて、このスクリプトにはいくつかのオプションがあります。
-p
マッピングを解除する前に、端末と同じ座標に子を配置します。-r
端末を隠すのではなく、端末の子として作成します。 (非常に実験的であり、さまざまなアプリケーションで正しく機能するには、より多くの作業が必要です。)-v
より細かい印刷-h
助ける
オプションが設定されていない場合は、単にプログラムを起動してターミナルマッピングを解除します。
また、再マッピング時に端末の位置を復元します。これは、さまざまなウィンドウマネージャで失われる可能性があるためです。
広くテストされていませんが、短時間でうまく機能しました。
実行中で新しいインスタンスを作成しないアプリケーションにこれを使用する場合(たとえば)、アプリケーションが新しいセッションを開始するためにフラグまたはその他の項目(存在する場合)をqalculate
使用する必要があります。-n
もちろん実装も可能です最小化する代わりに/追加マッピング解除など。
気づく!:サイト/ SEはタブのスペースを置き換えるか、[コピー]をクリックしてコードを分割するため編集するまたはエディタに貼り付けた後も続きます。 (これは<<-EOF
次に適用されます)
#! /bin/sh -
# Print various information, option: -v
verbose=0
# Position spawned window at X Y of terminal, option: -p
poschild=0
# Reparent to terminal
reparent=0
# ENABLE JOB CONTROL
set -m
print_help() {
cat<<-EOF
Usage: $(basename "$0") [OPTION] program [args ...]
Hide terminal window by unmapping until program exits.
Do Ctrl+C when using -r / -p if program fails.
OPTIONS
-p Position child at X Y of terminal.
-r Reparent. Set it as child of terminal.
-v Verbose. Print geometry.
-h This help.
EOF
}
print_geom() {
cat<<-EOF
WIN-ID $WINDOW
POS $X $Y
SIZE $WIDTH $HEIGHT
EOF
}
# DEFINES by Evil Eval
# WINDOW (window id)
# X Y
# WIDTH HEIGHT
# SCREEN
get_win_geom() {
eval "$(xdotool getactivewindow getwindowgeometry --shell)"
}
# RESTORE Terminal Geom
set_win_geom() {
xdotool windowmove "$WINDOW" "$X" "$Y"
xdotool windowsize "$WINDOW" "$WIDTH" "$HEIGHT"
}
# HIDE current terminal
term_hide() {
xdotool windowunmap "$WINDOW"
}
# RESTORE Terminal
term_show() {
xdotool windowmap "$WINDOW"
# On remapping window can loose original position
# Restore to pre-unmap values
set_win_geom
}
# Position program at X Y of terminal
# Using -sync has two effects:
# 1. Need to wait for window to appear
# 2. If command fails it hangs, and we can
# abort with Ctrl+C
# Use --onlyvisible as windows can have a range of sub-windows.
# This could likely be done better.
pos_child() {
wid="$(xdotool search --sync --pid "$1" --onlyvisible --limit 1 --all)"
xdotool windowmove "$wid" "$X" "$Y"
}
# Adopt the child process's window
win_reparent() {
wid="$(xdotool search --sync --pid "$1" --onlyvisible --limit 1 --all)"
xdotool windowreparent "$wid" "$WINDOW"
}
# Bring process to foreground after mapping, moving etc.
fg_cpid() {
if ! kill -0 "$cpid" 2>/dev/null || ! fg %1 >/dev/null; then
printf 'Failed\n' >&2
return 1
fi
}
while [ -n "$1" ]; do
case "$1" in
'-h'|--help) print_help >&2 ; exit 1 ;;
'-v') verbose=1 ;;
'-p') poschild=1 ;;
'-r') reparent=1 ;;
*) break ;;
esac
shift
done
get_win_geom
[ $verbose -eq 1 ] && print_geom >&2
# Order of operation can be of importance here.
# Start child before unmap
command "$@" &
cpid="$!"
[ $poschild -eq 1 ] && pos_child "$cpid"
[ $verbose -eq 1 ] && jobs -l
if [ $reparent -eq 1 ]; then
win_reparent "$cpid"
fg_cpid || exit 1
else
term_hide
fg_cpid || exit 1
# Restore when child departs
term_show
fi
答え2
シェルはZarathuraのようなプロセスを作成しますサブプロセス親プロセスが終了しても終了します。端末エミュレータはシェル自体を子プロセスとして起動します。
したがって、最も簡単な解決策はいいえ子プロセスでアイテムを開きますが、別のプロセスとして開きます。
あなたはこれを行うことができますどのプロセスの使用
nohup programname parameters..
しかし、あなたの場合はより簡単です。
xdg-open yourfile.pdf
application/pdf ファイルを開く必要があるアプリケーションを別のプロセスとして開きます。これは他のファイル形式にも当てはまります。
答え3
私が何を言っているのか理解しているようです。ちょっととんでもない感じがしましたが、しばらく見つけることができず、質問も私が尋ねたよりも多かったです。偶然、後でとても早く見つけました。
しかし、助けてくれてありがとう!
(関心のある方https://www.youtube.com/watch?v=mBNLzHcUtTo映像の名前はとても残念です。 )
乾杯。