holo-layer: 一种全新的Emacs增强图层插件

是不是也可以用来显示补全菜单/窗口?

是的,如果在python端实现菜单,lsp-bridge所有后端数据都不用发给emacs,lsp-bridge性能还可以继续提高,包括丝滑度,动画和像素对齐等细节都可以做到极致。

6 个赞

这算是重写了 Emacs 前端吧? :joy:

现在 lsp-bridge 即使配上 frame 已经足够快了, 暂时没有太大的动力用 holo-layer 写补全菜单, 虽然 holo-layer 写的补全菜单性能更好, 也可以做更多动画。

1 个赞

eaf, lsp-bridge还是holo-layer都坚持一个理念, 就是不管怎么扩展, 不要动Emacs本身代码, 这样增强的效果马上就可以体验。

如果改Emacs本身代码 + 多个操作系统平台, 这个工作量非常大, 而且bug很多。

3 个赞

请问可以给python加一个路径变量吗?我经常切换python环境,如果每个环境里都装依赖包就太冗余了

直接自定义 holo-layer-python-command 就好了。

2 个赞

holo-layer 预想的实用功能(窗口边框、 窗口跳转提示、 光标动画、 以及实时词典)已经基本实现, 还有一些其他功能, 比如:

  1. 窗口相机截图动效, 截取窗口截图的时候咔嚓一下
  2. 复用 eaf-pyqterminal 代码实现半透明的悬浮终端
  3. sort-tab的现代UI, 像完美的图标对齐, 贝塞尔曲线的标签圆弧, 标签重叠的阴影效果等等
  4. 代码像素级对齐线, holo-layer 来实现要比Emacs其他实现方案的效果(比如像素级虚线)和性能都要好很多
  5. acm的现代UI, 这个如果实现, lsp-bridge不但计算性能比VSCode快, 而且UI动画和丝滑程度也会超过VSCode

欢迎各位大佬一起玩

12 个赞

果冻光标很酷❗

我在使用 ArchLinux + Gnome 的组合,不开 Emacs 前,系统顶部的那一条是显示的,如下图

如果开了 Emacs,会出现两个问题:

  1. 顶部那一条不显示了
  2. 如果我将 Emacs 和 Chrome 左右分屏,那么 awesome-tray 的一条横线会保留

相关部分的配置为

(when (eq system-type 'gnu/linux)
  (add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/lazycat-theme"))
  (require 'lazycat-theme)
  (lazycat-theme-load-dark)
  (add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/awesome-tray"))
  (require 'awesome-tray)
  (awesome-tray-mode 1)
  (add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/holo-layer"))
  (setq holo-layer-enable-cursor-animation t)
  (require 'holo-layer)
  (holo-layer-enable)
  )

尽管这个不知道是为啥,但是果冻光标确实 COOL

第一需要打开选项 holo-layer-hide-mode-line

第二,emacs focus out的时候要调整一下窗口得属性,就可以显示panel了

1 个赞

Emacs focus out 的时候Gnome Panel看不到的问题已经修复了, 更新即可。

1 个赞

(1) 打开 Emacs 前:

(2) 打开 Emacs 后:

顶部的panel消失了

(3) 用 Super+左方向键 将 Emacs 分屏在左侧显示:

顶部panel仍消失、底部红线正常、果冻光标正常

(4) 当 Emacs 处于 (3) 的状态下时,用 Super+右方向键 将 Emacs 分屏在右侧显示:

顶部panel仍消失、底部红线异常(出现在上一步的位置)、果冻光标的动画也显示在上一步的位置

注:若在(3)的状态下使用 Super+上方向键 最大化 Emacs 再将 Emacs 分屏在右侧显示,则一切正常。看来目前像是:从最大化到左右分屏的切换过程是正常的,左分屏变换到右分屏,需要经过最大化这一中间态。

(5) 将 Emacs 最大化后用鼠标点击一下 Emacs,顶部 panel 恢复,底部红线消失,果冻光标状态异常

Mac 下,装好了 PyQT6等,出现了如下Traceback:

Traceback (most recent call last):
  File "/Users/ethanlin/.emacs.d/site-lisp/holo-layer/holo_layer.py", line 35, in <module>
    from plugin.window_screenshot import WindowScreenshot
  File "/Users/ethanlin/.emacs.d/site-lisp/holo-layer/plugin/window_screenshot.py", line 1, in <module>
    from PyQt5.QtCore import QObject, pyqtSignal
ModuleNotFoundError: No module named 'PyQt5'

用 brew 安装下 pyqt5 (这个好像不必要,见下帖),然后设置: (setq holo-layer-python-command “/opt/homebrew/bin/python3.10”) 可以运行了:

没对齐好像 ~

在plugIn中的 windows_screenshot.py 文件头两行代码:

from PyQt5.QtCore import QObject, pyqtSignal
from PyQt6.QtGui import QGuiApplication

第一行中的这个PyQt5,是不是应该是 PyQt6?

改了,zsbd

1 个赞

好像向上偏了一个标题栏的位置

你这个是工具栏吧? 看着不像标题栏

Hello~

我很喜欢 holo-layer。

但是我是在 NixOS 上跑的 Emacs, 当我执行 ./holo_layer.py 之后,发现:

$ ./holo_layer.py
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/nix/store/1nd3zjh3if44d87zg95fixp32k3sjn7l-qtbase-6.5.2/lib/qt-6/plugins/platforms" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, vkkhrdisplay, minimalegl, eglfs, offscreen, wayland, minimal, vnc, wayland-egl, linuxfb.

[1]    1759418 IOT instruction (core dumped)  ./holo_layer.py

我的 nix-shell 的 default.nix 内容是:

with import <nixpkgs> { };
mkShell {
  buildInputs = [ qt6.qtbase pkgconfig ];
  LD_LIBRARY_PATH = "${stdenv.cc.cc.lib}/lib:${
      lib.makeLibraryPath [ glib libGL ]
    }:${fontconfig.lib}/lib:${xorg.libX11}/lib:${libxkbcommon}/lib:${freetype}/lib:${dbus.lib}/lib";
  QT_QPA_PLATFORM_PLUGIN_PATH = "${qt6.qtbase}/lib/qt-6/plugins/platforms";

}

我的 QT_QPA_PLATFORM_PLUGIN_PATH 环境变量的值是: /nix/store/1nd3zjh3if44d87zg95fixp32k3sjn7l-qtbase-6.5.2/lib/qt-6/plugins/platforms 这个目录里的文件是:

$ l ${QT_QPA_PLATFORM_PLUGIN_PATH}
Permissions Size User Date Modified Name
.r-xr-xr-x   24k root  1 Jan  1970   libqeglfs.so
.r-xr-xr-x  502k root  1 Jan  1970   libqlinuxfb.so
.r-xr-xr-x   57k root  1 Jan  1970   libqminimal.so
.r-xr-xr-x   67k root  1 Jan  1970   libqminimalegl.so
.r-xr-xr-x  163k root  1 Jan  1970   libqoffscreen.so
.r-xr-xr-x  330k root  1 Jan  1970   libqvkkhrdisplay.so
.r-xr-xr-x  175k root  1 Jan  1970   libqvnc.so
.r-xr-xr-x   24k root  1 Jan  1970   libqxcb.so

你们觉得我哪个东西可能没配置好?

如果想在wsl2中用holo-layer,需要修改holo_layer.py文件的哪一部分?