나는 guake, tilda 또는 yakuake 터미널(이 터미널에서는 드롭다운 메뉴라고 함)에서 볼 수 있는 것처럼 가시성을 토글(숨기기/표시)하도록 Emacs GUI를 설정하고 싶습니다. 예를 들어, 저는 GUI에서 Emacs를 사용하고 있고 그 뒤에 브라우저 창이 있습니다. 단축키(예: F12)를 사용하여 Emacs GUI를 숨긴 다음 (포커스가 있는) 브라우저가 다른 창과 상호 작용하는 것을 보고 싶습니다. 다시 F12를 누르면 Emacs GUI가 다시 나타납니다(KDE 5.13을 실행 중입니다). 또한 XFCE 또는 gnome에서 이 작업을 수행하는 방법을 알고 있다면 지식을 공유해 주세요.
답변1
나는 또한 emacs.stackexchange에 이 질문을 했습니다.협회. 참조용으로 여기에 답변을 복사했습니다. X11을 사용하여 작동하며 xdotool 및 wmctrl을 설치해야 합니다.
#!/bin/bash
######################################################################################################
# This script will toggle minimize/activate first window with specified class
# If window not found program will be launched
#
# window class can be found with next programs:
# wmctrl -x -l
# xprop
# No credit taken.......... Cannot read the original.....
# Found on http://blog.sokolov.me/2014/06/20/linuxx11-toggle-window-minimizemaximize/
# in Russian :) but works when adjusting the wrapping.
######################################################################################################
NEEDED_WINDOW_CLASS="emacs.Emacs"
LAUNCH_PROGRAM="emacs"
######################################################################################################
NEEDED_WINDOW_WINDOW_ID_HEX=`wmctrl -x -l | grep ${NEEDED_WINDOW_CLASS} | awk '{print $1}' | head -n 1`
NEEDED_WINDOW_WINDOW_ID_DEC=$((${NEEDED_WINDOW_WINDOW_ID_HEX}))
if [ -z "${NEEDED_WINDOW_WINDOW_ID_HEX}" ]; then
${LAUNCH_PROGRAM}
else
echo "Found window ID:${NEEDED_WINDOW_WINDOW_ID_DEC}(0x${NEEDED_WINDOW_WINDOW_ID_HEX})"
ACIVE_WINDOW_DEC=`xdotool getactivewindow`
if [ "${ACIVE_WINDOW_DEC}" == "${NEEDED_WINDOW_WINDOW_ID_DEC}" ]; then
xdotool windowminimize ${NEEDED_WINDOW_WINDOW_ID_DEC}
else
xdotool windowactivate ${NEEDED_WINDOW_WINDOW_ID_DEC}
fi
fi
답변2
조금 늦었지만 KDE나 gnome에 국한되지 않고 작업을 완료하기 위해 기본 디스플레이 서버/창 관리자(예: X11 또는 Wayland)와 상호 작용하는 두 응용 프로그램에 의존하는 답변을 여기에 게시하고 싶었습니다.
Ubuntu에서 테스트되었으며 설치할 수 있는 모든 곳에서 작동해야 합니다 wmctrl
. xdotool
이 예에서는 konsole
터미널 애플리케이션을 사용하지만 클래스 이름을 알고 있는 모든 애플리케이션을 사용할 수 있습니다. 클래스 이름을 찾으려면 애플리케이션을 열고 wmctrl -lx
.
#!/usr/bin/env bash
# if app is not open then launch it -- remove this if you don't want your
# shortcut to launch the application if it hasn't been launched yet
if [ -z "$(xdotool search --class konsole)" ]; then
konsole
fi
# get current focused window and visible konsole window
CLASS="konsole"
ACTIVE_WINDOW="$(xdotool getactivewindow)"
APP_WINDOW="$(xdotool search --onlyvisible --class $CLASS)"
# if focused, minimize and hide the konsole, otherwise bring konsole to current desktop and open
if [ "$ACTIVE_WINDOW" = "$APP_WINDOW" ]; then
xdotool getactivewindow windowminimize
else
wmctrl -xR "$CLASS"
fi
스크립트는 다음과 같은 몇 가지 사항을 가정합니다.
- 단일 일치 항목 반환
$(xdotool search --onlyvisible --class yourApp)
(배열/여러 일치 항목을 처리해야 함) - 돌출된(표시된) GUI 애플리케이션으로 즉시 전환하고 싶습니다.
- 대상 응용 프로그램이 데몬/서비스로만 실행되고 있지 않습니다(그렇지 않으면 X11 또는 Wayland 내에서 창으로 등록되지 않습니다).
- 현재 있는 데스크톱 공간에 응용 프로그램이 나타나기를 원합니다.
2와 4가 자체적으로 작동하는 것을 원하지 않는다면 Guake 터미널의 표시/숨기기 동작을 더 자세히 시뮬레이션하여 현재 활성 데스크톱에 GUI 응용 프로그램을 표시하고 표시하는 xdotool
데 사용하고 싶습니다 .wmctrl
Bash 스크립트이기 때문에 이식성이 뛰어납니다. 즉, 데스크톱 응용 프로그램(KDE, Gnome 등)에서 사용자 정의 바로 가기를 설정하는 방법을 알아내고 해당 바로 가기를 사용하여 스크립트를 실행하면 됩니다.