Open19

hyprhookをインストールしたい

えう@お金くださいえう@お金ください

-vオプションをつけた

$ hyprpm add -v https://github.com/Hyprhook/Hyprhook

gin(s)[v] shell returned:  -> cd /run/user/1000/hyprpm/u1e2k && PKG_CONFIG_PATH="/usr//share/pkgconfig" make -C hyprhook all
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
Package pixman-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `pixman-1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'pixman-1' not found
Package 'libdrm' not found
Package 'pangocairo' not found
Package 'libinput' not found
Package 'libudev' not found
Package 'wayland-server' not found
Package 'xkbcommon' not found
/bin/sh: 行 1: g++: コマンドが見つかりません
make: *** [Makefile:7: all] エラー 127
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます

色々足りなかったらしい

えう@お金くださいえう@お金ください

一通り入れてみる

$ sudo zypper in libpixman-1-0-devel libdrm-devel pango-devel libinput-devel  wayland-devel libxkbcommon-devel
えう@お金くださいえう@お金ください
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み:  /usr/include/hyprland/src/desktop/DesktopTypes.hpp:2,
         次から読み込み:  src/Parser.cpp:1:
/usr/include/hyprland/src/helpers/memory/Memory.hpp:3:10: 致命的エラー: hyprutils/memory/WeakPtr.hpp: そのようなファイルやディレクトリはありません
    3 | #include <hyprutils/memory/WeakPtr.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
src/main.cpp:1:10: 致命的エラー: hyprlang.hpp: そのようなファイルやディレクトリはありません
    1 | #include <hyprlang.hpp>
      |          ^~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます

hyprland関連の開発パッケージ足りないかも

えう@お金くださいえう@お金ください
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み:  /usr/include/hyprland/src/plugins/PluginAPI.hpp:23,
         次から読み込み:  src/Parser.cpp:4:
/usr/include/hyprland/src/helpers/Color.hpp:4:10: 致命的エラー: hyprgraphics/color/Color.hpp: そのようなファイルやディレクトリはありません
    4 | #include <hyprgraphics/color/Color.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
次のファイルから読み込み:  /usr/include/hyprland/src/plugins/PluginAPI.hpp:23,
         次から読み込み:  src/main.cpp:6:
/usr/include/hyprland/src/helpers/Color.hpp:4:10: 致命的エラー: hyprgraphics/color/Color.hpp: そのようなファイルやディレクトリはありません
    4 | #include <hyprgraphics/color/Color.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます

まだ足りないのか

えう@お金くださいえう@お金ください
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み:  /usr/include/hyprland/src/defines.hpp:3,
         次から読み込み:  /usr/include/hyprland/src/plugins/PluginAPI.hpp:26,
         次から読み込み:  src/Parser.cpp:4:
/usr/include/hyprland/src/includes.hpp:26:10: 致命的エラー: GLES3/gl32.h: そのようなファイルやディレクトリはありません
   26 | #include <GLES3/gl32.h>
      |          ^~~~~~~~~~~~~~
コンパイルを停止しました。
次のファイルから読み込み:  /usr/include/hyprland/src/defines.hpp:3,
         次から読み込み:  /usr/include/hyprland/src/plugins/PluginAPI.hpp:26,
         次から読み込み:  src/main.cpp:6:
/usr/include/hyprland/src/includes.hpp:26:10: 致命的エラー: GLES3/gl32.h: そのようなファイルやディレクトリはありません
   26 | #include <GLES3/gl32.h>
      |          ^~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます

なんかだんだん楽しくなってきた

えう@お金くださいえう@お金ください
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み:  /usr/include/hyprland/src/render/Framebuffer.hpp:4,
         次から読み込み:  /usr/include/hyprland/src/render/Transformer.hpp:3,
         次から読み込み:  /usr/include/hyprland/src/desktop/Window.hpp:15,
         次から読み込み:  /usr/include/hyprland/src/debug/HyprCtl.hpp:5,
         次から読み込み:  src/Parser.cpp:6:
/usr/include/hyprland/src/render/Texture.hpp:4:10: 致命的エラー: aquamarine/buffer/Buffer.hpp: そのようなファイルやディレクトリはありません
    4 | #include <aquamarine/buffer/Buffer.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
えう@お金くださいえう@お金ください
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
src/Parser.cpp: In function ‘std::string Parser::parseCWorkspace(std::any)’:
src/Parser.cpp:39:66: エラー: ‘class CWorkspace’ has no member named ‘m_self’; did you mean ‘m_pSelf’?
   39 |         const std::string& ret       = parseWorkspace(workspace->m_self.lock());
      |                                                                  ^~~~~~
      |                                                                  m_pSelf
src/Parser.cpp: In function ‘std::string Parser::parseMonitor(std::any)’:
src/Parser.cpp:45:72: エラー: ‘class CMonitor’ has no member named ‘m_self’; did you mean ‘self’?
   45 |         const std::string& ret     = CHyprCtl::getMonitorData(monitor->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
      |                                                                        ^~~~~~
      |                                                                        self
src/Parser.cpp: In function ‘std::string Parser::parseVectorWorkspaceMonitor(std::any)’:
src/Parser.cpp:56:79: エラー: ‘class CMonitor’ has no member named ‘m_self’; did you mean ‘self’?
   56 |                 ret += CHyprCtl::getMonitorData(std::any_cast<CMonitor*>(it)->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
      |                                                                               ^~~~~~
      |                                                                               self
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
えう@お金くださいえう@お金ください

ソースコード直すことにした

39行目付近:

変更前: const std::string& ret = parseWorkspace(workspace->m_self.lock());
変更後: const std::string& ret = parseWorkspace(workspace->m_pSelf.lock()); (m_self を m_pSelf に変更)

45行目付近:

変更前: const std::string& ret = CHyprCtl::getMonitorData(monitor->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
変更後: const std::string& ret = CHyprCtl::getMonitorData(monitor->self.lock(), eHyprCtlOutputFormat::FORMAT_JSON); (m_self を self に変更)

56行目付近:

変更前: ret += CHyprCtl::getMonitorData(std::any_cast<CMonitor*>(it)->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
変更後: ret += CHyprCtl::getMonitorData(std::any_cast<CMonitor*>(it)->self.lock(), eHyprCtlOutputFormat::FORMAT_JSON); (m_self を self に変更)
えう@お金くださいえう@お金ください

makeし直したら
無事にファイルが書き出されたのでcp hyprhook.so ~/.config/hypr/plugins/でファイルをコピー
hyprctl plugin load %.so PATH%
したらOKが出た。
たぶん真似する人はいないだろうけどプラグイン読み込まれた状態で.soファイルを上書きするとhyprlandそのものがクラッシュします。
私はクラッシュして一度画面が真っ暗になりました。

えう@お金くださいえう@お金ください

https://github.com/Hyprhook/Hyprhook
に従ってサンプルを入れる
hyprland.confに

bindd = $mainMod, C, Close Window, closeWindow
bindd = $mainMod, H, Toggle Binds Help, exec, ~/.config/hypr/scripts/which-key.sh -b
plugin {
  hyprhook {
    onSubmap = ~/.config/hypr/scripts/which-key.sh
  }
}

bindd = $mainMod, C, Close Window, closeWindowはいらないかもしれない。

git cloneした./examples/which-key/ewwをmkdirして~/.config/eww-which-keyに配置
./examples/which-key/which-key.shを~/.config/hypr/scriptsに配置

えう@お金くださいえう@お金ください

無事に動作したけどスクリーンショットには映らなかった。
なのでgithubのリポジトリにある画像でお茶を濁す

ちなみに
bindd = $mainMod, H, キーバインドの表示を切り替え, exec, ~/.config/hypr/scripts/which-key.sh -bみたいに日本語でもちゃんと表示されました。