KDE 5에서 Tilda/guake/yakuake와 유사한 단축키를 사용하여 GUI 응용 프로그램을 표시하거나 숨기는 방법

KDE 5에서 Tilda/guake/yakuake와 유사한 단축키를 사용하여 GUI 응용 프로그램을 표시하거나 숨기는 방법

나는 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

스크립트는 다음과 같은 몇 가지 사항을 가정합니다.

  1. 단일 일치 항목 반환 $(xdotool search --onlyvisible --class yourApp)(배열/여러 일치 항목을 처리해야 함)
  2. 돌출된(표시된) GUI 애플리케이션으로 즉시 전환하고 싶습니다.
  3. 대상 응용 프로그램이 데몬/서비스로만 실행되고 있지 않습니다(그렇지 않으면 X11 또는 Wayland 내에서 창으로 등록되지 않습니다).
  4. 현재 있는 데스크톱 공간에 응용 프로그램이 나타나기를 원합니다.

2와 4가 자체적으로 작동하는 것을 원하지 않는다면 Guake 터미널의 표시/숨기기 동작을 더 자세히 시뮬레이션하여 현재 활성 데스크톱에 GUI 응용 프로그램을 표시하고 표시하는 xdotool데 사용하고 싶습니다 .wmctrl

Bash 스크립트이기 때문에 이식성이 뛰어납니다. 즉, 데스크톱 응용 프로그램(KDE, Gnome 등)에서 사용자 정의 바로 가기를 설정하는 방법을 알아내고 해당 바로 가기를 사용하여 스크립트를 실행하면 됩니다.

사용자 정의 키보드 제작에 관한 KDE 문서여기 바로가기, Gnome 문서에서여기 바로가기.

관련 정보