修飾キーを使用してファイルの関連付けを変更する

修飾キーを使用してファイルの関連付けを変更する

ノートパソコンで映画を観ているときは、画面を巧みに無効にする必要があります。

  • 外部画面が接続されていない場合は無効にしないでください。
  • ムービーを開くために修飾キーが使用されている場合は、無効にしないでください。
  • 外部画面が接続されていて、修飾子が使用されていない場合は、ラップトップ画面を無効にします。
  • メディア プレーヤーが終了したら、ラップトップの画面を復元します。

次のスクリプトを書きました:

#!/bin/bash
if [ "$(cat /sys/class/drm/card0-VGA-1/status)" = connected ]
then
  xrandr --output eDP1 --off
  vlc "$1"
  while [ "$(pidof vlc)" > 0 ]
  do
    sleep 1
  done
  xrandr --output eDP1 --auto --below VGA1
else
  vlc "$1"
fi

eDP1 はラップトップ スクリーンを表し、VGA1 は外部スクリーンを表します。スクリプトは、~/.local/share/applications/mimeapps.list次のデスクトップ ファイルにムービー ファイルを関連付けて使用します。

[Desktop Entry]
Name=VLC
Comment=
Exec=path/to/the/above/script
Icon=vlc
Terminal=false
Type=Application
StartupNotify=true

スクリプトまたはデスクトップ ファイルを変更する方法、または修飾キーを確認する他の方法を提案していただけますか。唯一の制限は、ムービーを開くには 1 つのアクションを使用する必要があることです。

答え1

既製のソリューションはないようです。ただし、Xlib と Xkb を直接使用することは難しくありません。

ファイルを作成しますgetmodkey.c:

#include <X11/Xlib.h>
#include <stdio.h>
#include <X11/XKBlib.h>

int main() {
    XkbStateRec r;
    Display* d = XOpenDisplay(NULL);
    XkbGetState(d, XkbUseCoreKbd, &r);
    printf("mod: 0x%x\n", r.mods);
    XCloseDisplay(d);
    return !( r.mods & 1 );
}

-lX11そして、例えば次のようにコンパイルする。

make LDLIBS="-lX11" getmodkey

プログラムの終了ステータス コードは、0Shift キーが押された場合は 、1それ以外の場合は になります。別の修飾子をテストするには、(r.mods & keymask)条件を調整します (Shift のマスクは 1 です)。

そうすると、このプログラムは簡単に統合できるはずです。

if getmodkey; then 
  echo "shift!"
else
  echo "no shift"
fi

関連情報