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영상 이름이 촌스럽네요 죄송합니다. )
건배.