eaf: fix window position on Hyprland (see my article as well)

This commit is contained in:
MitchMarq42 2023-06-06 13:27:59 -08:00
parent dff70b90d4
commit fc0414ac20

View File

@ -1144,6 +1144,35 @@ Taken from https://howardism.org/Technical/Emacs/eshell-why.html"
"--install" "pdf-viewer" "browser"
"--ignore-sys-deps")))
:config (add-to-list 'load-path (expand-file-name "app/" eaf-source-dir))
(if (and (string= (getenv "XDG_CURRENT_DESKTOP") "Hyprland")
(featurep 'hypop))
(defun eaf--get-frame-coordinate ()
"We need fetch Emacs coordinate to adjust coordinate of EAF if it running on system not support cross-process reparent technology.
Such as, wayland native, macOS etc.
This is redefined for use with `hypop' library because multiple Emacs frames may be open."
(cond ((string-equal (getenv "XDG_CURRENT_DESKTOP") "sway")
(eaf--split-number (shell-command-to-string (concat eaf-build-dir "swaymsg-treefetch/swaymsg-rectfetcher.sh emacs"))))
((string-equal (getenv "XDG_CURRENT_DESKTOP") "Hyprland")
(let ((clients (json-parse-string (shell-command-to-string "hyprctl -j clients")))
(coordinate))
(dotimes (i (length clients))
(when (and (equal (gethash "pid" (aref clients i)) (emacs-pid))
(not (string= (gethash "title" (aref clients i)) hypop--frame-name)))
(setq coordinate (gethash "at" (aref clients i)))))
(list (aref coordinate 0) (aref coordinate 1))))
((eaf-emacs-running-in-wayland-native)
(require 'dbus)
(let* ((coordinate (eaf--split-number
(dbus-call-method :session "org.gnome.Shell" "/org/eaf/wayland" "org.eaf.wayland" "get_emacs_window_coordinate" :timeout 1000)
","))
;; HiDPI need except by `frame-scale-factor'.
(frame-x (truncate (/ (car coordinate) (frame-scale-factor))))
(frame-y (truncate (/ (cadr coordinate) (frame-scale-factor)))))
(list frame-x frame-y)))
(t
(list 0 0)))))
)
(use-package eaf-browser
:elpaca nil