yadex
1
陆陆续续,折腾了半个月。被其丝滑动画所吸引,抛弃了使用多年的x11,投向了wayland怀抱 。
不过动画虽丝滑,问题也贼多。比如原生wayland,chromium 输入法不能用,不能vaapi硬解。还有很多软件没有原生wayland,只能在xwayland中运行,然后就各种奇奇怪怪的bug。
折腾效果图:
桌面: Hyprland
status bar: waybar
终端: Alacritty / foot
字体: Rec Mono Casual
gtk主题: Gruvbox
2 个赞
blove
2
我也刚刚入坑 Hyprland。最初只是想了解、尝试一下。但现在经过简单配置,Hyprland 已经取代了我之前一直使用的 dwm 了。
在 Arch 中,从安装到配置使用,都非常舒适、顺滑。
在 Fedora 中,虽然按照 wiki 介绍的,安装了必要组件、编译,但没有成功!
目前,个人很喜欢使用 Hyprland!
1 个赞
Lee
5
我也用 Hyprland,不仅是高分屏,还是 N 卡,有各种问题。
已使用hyprland大半年了。
比起sway,多了一些动画,窗口圆角,gaps等。
2 个赞
比起sway更大的优势是开发特别活跃,sway到现在还没有合并input popup导致输入法在一些地方没有候选框(貌似是因为当前pr里的实现还存在问题)
blove
10
的确!而且特别喜欢 Hyprland 设置配置时,实时生效。透明、模糊效果也不会拖慢系统流畅度!
1 个赞
yadex
12
加入参数—enable-wayland-ime以在启用wayland的chromium内核的产品中使用输入法
1 个赞
我的老旧ati显卡最高只支持opengl2,导致我只能使用legacyranderer的版本并忍受一大堆渲染问题和鼠标指针的卡顿
我希望有人可以告诉我要怎么给ati x1300装上opengl3
最近在 aur 的 chromium-wayland-vaapi 看到了--enable-wayland-ime
选项的评论,但是在chrome的release版本和Arch自己的chromium中没有看到这个实验性选项,以为只有该patch的aur包里增添了该选项,但是由于编译这个包在我的机器上需要4个小时,遂没有理会。 但是刚刚我在命令行中尝试强制指定该选项启动chrome居然成功了,感谢楼主提醒。
同时这个评论也给没有尝试的朋友们做个实验佐证 (即使这个选项在117版本的chrome和chromium中没有explicit的指明)。
jixiuf
17
分享一个脚本,hypr-other-window, 是对 hyprctl --batch "dispatch cyclenext; dispatch bringactivetotop"
的简单包装 通常我绑定为cmd+ctrl+o(space被我映射为cmd+ctrl,所以= space+o), 功能相当于 emacs 的 C-x o
即焦点在各个窗口间切换。
但是 如果 我在同一个workspace 开了一个多 窗口 emacs ,还有一个firefox ,我也希望 当按下 cmd+ctrl+o 时,即可以在emacs 内部的多个window 间切换,也可以装焦点转移到emacs 外的firefox
则可以使用以下脚本 和 elisp 配合后实现
#!/usr/bin/env bash
# ws=$(hyprctl activeworkspace -j)
# ws_id=`echo $ws|jq -r '.id'`
# app count in current workspace
# app_cnt=$(hyprctl clients -j | jq -cr '.[] | select(.workspace.id == '$ws_id')'|wc -l)
appinfo=`hyprctl activewindow -j`
# if front app exits
if [ -n "$appinfo" ]; then
class=`echo $appinfo|jq -r '.class'|head -n 1`
# fullscreen=`echo $appinfo|jq -r '.fullscreen'|head -n 1`
# ( "$app_cnt" = "1" || "$fullscreen" = "true" )
if [[ "$class" = "emacs" ]]; then
echo key ctrl+super+o|dotoolc
else
hyprctl --batch "dispatch cyclenext; dispatch bringactivetotop"
fi
else
hyprctl --batch "dispatch cyclenext; dispatch bringactivetotop"
fi
(global-set-key (kbd "C-s-o") 'vmacs-other-window)
(defvar vmacs-window-status nil)
(defun vmacs-focus()
(if (frame-focus-state)
(unless (and vmacs-window-status
(window-live-p vmacs-window-status))
(setq vmacs-window-status (selected-window)))
;; (setq vmacs-window-status (selected-window))
(setq vmacs-window-status nil)))
(add-function :after after-focus-change-function #'vmacs-focus)
(defun vmacs-other-window()
(interactive)
(select-window (next-window))
(when (eq (selected-window) vmacs-window-status)
(call-process "hyprctl" nil nil nil "--batch"
"dispatch cyclenext; dispatch bringactivetotop"))
(unless (and vmacs-window-status
(window-live-p vmacs-window-status))
(setq vmacs-window-status (selected-window))))
用到了 dotool: Command to simulate input anywhere (X11, Wayland, TTYs) 来实现 模拟发送快捷键
echo key ctrl+super+o|dotoolc
是模拟按下 ctrl+cmd+o
1 个赞
jixiuf
18
再分享一个https://github.com/jixiuf/dotfiles/blob/main/linux/bin/hypr-fullscreen ,功能类似于 上面的 hrpr-other-window
,
它是对 hyprctl dispatch fullscreen 1
的封装 实现最大化窗口与正常窗口的一键切换
同样的道理,emacs 内部也是多窗口, 我希望emacs 也可以一键实现窗口的切换
#!/usr/bin/env bash
ws=$(hyprctl activeworkspace -j)
ws_id=`echo $ws|jq -r '.id'`
# app count in current workspace
app_cnt=$(hyprctl clients -j | jq -cr '.[] | select(.workspace.id == '$ws_id')'|wc -l)
appinfo=`hyprctl activewindow -j`
# if front app exits
if [ -n "$appinfo" ]; then
class=`echo $appinfo|jq -r '.class'|head -n 1`
# fullscreen=`echo $appinfo|jq -r '.fullscreen'|head -n 1`
if [[ "$class" = "emacs" ]]; then
sleep 0.1
echo key ctrl+super+m|dotoolc
else
hyprctl dispatch fullscreen 1
fi
else
hyprctl dispatch fullscreen 1
fi
(global-set-key (kbd "C-s-m") 'vmacs-fullscreen)
(defvar vmacs--fullscreen-window-configuration nil)
(defun vmacs-fullscreen()
(interactive)
(if (and (eq this-command 'vmacs-fullscreen)
(eq last-command 'vmacs-fullscreen)
(not (string-equal "1" (string-trim (shell-command-to-string "ws_id=$(hyprctl activeworkspace -j|jq -r '.id');hyprctl clients -j | jq -cr '.[] | select(.workspace.id == '$ws_id')'|wc -l")))))
(progn
(call-process "hyprctl" nil nil nil "dispatch" "fullscreen" "1")
(setq this-command 'hypr-fullscreen))
(if (> (length (window-list)) 1)
(progn
(setq vmacs--fullscreen-window-configuration (current-window-configuration))
(delete-other-windows))
(when vmacs--fullscreen-window-configuration
(set-window-configuration vmacs--fullscreen-window-configuration)
(setq vmacs--fullscreen-window-configuration nil)))))
核心代码 大都在以下文件中,如果有缺漏的可以去那找 https://github.com/jixiuf/vmacs/blob/master/conf/conf-evil-window.el#L32
https://github.com/jixiuf/vmacs/blob/master/lazy/lazy-window.el#L1
jixiuf
19
hypr-resize 也类似,我使用xremap 配置了以下4个按键调整窗口的大小,同样我也期望相同的按键 当 当前窗口是emacs 时,也可以调整emacs内部的window大小
# 窗口大小调整 space+ 箭头
super-C-l: { launch: ["hypr-resize" ,"right"]}
super-C-h: { launch: ["hypr-resize" ,"left"]}
super-C-k: { launch: ["hypr-resize" ,"up"]}
super-C-j: { launch: ["hypr-resize" ,"down"]}
#!/usr/bin/env bash
resize_window() {
case "$1" in
left*)
hyprctl dispatch resizeactive -15 0
;;
right*)
hyprctl dispatch resizeactive 15 0
;;
up*)
hyprctl dispatch resizeactive 0 -15
;;
down*)
hyprctl dispatch resizeactive 0 15
;;
esac
}
# need https://github.com/ramnes/move-border for emacs
resize_emacs_window() {
case "$1" in
left*)
echo key ctrl+super+h|dotoolc
;;
right*)
echo key ctrl+super+l|dotoolc
;;
up*)
echo key ctrl+super+k|dotoolc
;;
down*)
echo key ctrl+super+j|dotoolc
;;
esac
}
ws=$(hyprctl activeworkspace -j)
ws_id=`echo $ws|jq -r '.id'`
# app count in current workspace
app_cnt=$(hyprctl clients -j | jq -cr '.[] | select(.workspace.id == '$ws_id')'|wc -l)
appinfo=`hyprctl activewindow -j`
if [ -n "$appinfo" ]; then
class=`echo $appinfo|jq -r '.class'|head -n 1`
fullscreen=`echo $appinfo|jq -r '.fullscreen'|head -n 1`
if [[ "$class" = "emacs" && ( "$app_cnt" = "1" || "$fullscreen" = "true" ) ]]; then
resize_emacs_window $1
else
resize_window $1
fi
else
resize_window $1
fi
(global-set-key (kbd "C-s-k") 'move-border-up)
(global-set-key (kbd "C-s-j") 'move-border-down)
(global-set-key (kbd "C-s-h") 'move-border-left)
(global-set-key (kbd "C-s-l") 'move-border-right)
;;用到了 https://github.com/ramnes/move-border