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

欢迎发送补丁,谢谢

pass emacs_frame_info to IndentLine.draw function. by tickscn · Pull Request #34 · manateelazycat/holo-layer (github.com) 按照我对变量的理解提了一个 pr。

合并了,感谢感谢

更新到最新版本,可以看到效果了,酷炫。

猫大,在我按照readme更改了 hyprland.conf 后,启用 holo-layer,虽然holo-layer的窗口全屏了,但是它显示的是桌面的背景图片而非emacs,使得看不见emacs窗口了,且 holo-layer 无响应

*holo-layer*不断重复:(**** 为递增的数字)

[New Thread 0x7fffabfff6c0 (LWP ****)]
[Thread 0x7fffabfff6c0 (LWP ****) exited]

*holo-layer-epc con 35* 无错误输出

  • hyprland version: v0.33.1
  • Emacs version: GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8)

开启前

开启后

我不用 hyprland,不晓得哇。

1 个赞

holo-layer 其实可以做一个 org-mode 的多媒体实时预览插件, 思路如下:

  1. Overlay 插件: 写一个 elisp 插件, 解析连接和多媒体的文本内容, 创建 overlay 提前占好空白位置
  2. 多媒体渲染: 根据内容的属性, 根据视频、SVG、数学公式等, 用Qt绘制置顶的控件, 这样就可以多媒体显示 org-mode 的多媒体内容, 又不用对 emacs 和 org-mode 的代码进行修改, 保持 org-mode 强大的生态
  3. 滚动支持: 根据窗口的边界和org-mode的offset, 传输矩形给 Qt 那边用 setClipPath 函数裁剪掉超出 org-mode window 以外的内容

我不用 org-mode, 但是我想这种功能识别出来以后, org-mode 几乎就是完美了, 分享一下我的思路, 如果哪位大佬有兴趣, 我下班后可以提供Qt关键函数的技术指导。

9 个赞

我有一个暂时的方法可以解决,就是把 showFullScreen() 改成 show() 。可以考虑一下怎么搞一个通用的方法

经过尝试,可以不修改 holo-layer 的代码,在 hyprland 的 配置文件中再加一个规则

windowrulev2 = nofullscreenrequest, title:(holo_layer.py)
4 个赞

;; 启动时窗口全屏 ;(add-to-list 'default-frame-alist '(fullscreen . maximized))

可能要把这一行注释掉, M2 Mac, emacs-plus 可以使用 cursor-animation

但是 indent line 会报错:

/Users/xiudi/.emacs.d/site-lisp/holo-layer/holo_layer.py:223: DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead
  super().__init__()

Traceback (most recent call last):
  File "/Users/xiudi/.emacs.d/site-lisp/holo-layer/holo_layer.py", line 297, in paintEvent
    self.indent_line.draw(painter, self.emacs_indent_infos, self.emacs_frame_info)
  File "/Users/xiudi/.emacs.d/site-lisp/holo-layer/plugin/indent_line.py", line 25, in draw
    indents = [int(i) for i in indents.split(',')]
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/xiudi/.emacs.d/site-lisp/holo-layer/plugin/indent_line.py", line 25, in <listcomp>
    indents = [int(i) for i in indents.split(',')]
               ^^^^^^
ValueError: invalid literal for int() with base 10: ''

Process *holo-layer* abort trap: 6

今天把holo-layer重新捣鼓了一遍,终于配好了。非常好用,非常丝滑 :yum:

就是 lsp-bridge 在holo-layer下好像会有点轻微闪烁?猫大能不能帮忙看看:

环境:

  • Hyprland
  • GNU Emacs 29.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.40, cairo version 1.18.0)
  • holo-layer 与 lsp-bridge 均为最新版

已用 emacs -Q 复现

光标是 bar 的时候,indent_line 都缩到了最左边,看了一下代码,好像是光标类型是 bar 就会把宽度设置为 1,这是为了什么考虑的呢?

使用 indent_line 的时候发现,cursor-type 是 bar 的时候线都缩到了左边。看代码是因为 cursor-type 是 bar 的时候 indent width 就被设置成了 1. 这是基于什么考虑的呢? image

我感觉是不是你的Emacs没有设置 tab 转换成空格的问题呀?

这个肯定不是这样设计的。

tab 格式化后都会转为 4 个空格,应该不是这个问题

evil-mode 插入的模式 cursor-type 会从 box 变成 bar, 然后宽度就不对了

这问题大佬已经修了

这个是不是也能用在 popweb 上?

感谢大佬,Mac上终于看到了和linux一样完美的效果了!

1 个赞

应该行的, 都应该是一个问题。

1 个赞