当设置的文本块高度小于限制宽度之后的文本总高度时,对于溢出文本框的部分实现可滚动的效果,支持多个参数自定义滚动条的样式风格。下面是demo效果,测试了各种情况,解决了很多bug,目前代码应该很健壮了,滚动起来也是非常的丝滑
,欢迎大家来玩。目前还没有合并到 main 分支,想试用的小伙伴可以下载 develop 分支尝鲜。

demo 的代码在 develop 分支的这个文件: ETML/tests/etml-block-scroll-tests.el at develop · Kinneyzhang/ETML · GitHub
21 个赞
yibie
2
文本内容是可以动态生成然后塞进去 block 里的吗?
,半夜看了一眼,爬起来试了一下,只能说有点好玩
,不过我录的 gif 太大了就不放了。etml-block-scroll-tests.el 里面的 file-content 函数没有,我暂时用 org-file-contents 替代了:
(defvar etml-test-scroll-str1
(string-trim-right (org-file-contents "./text-zh.txt") "\n"))
(defvar etml-test-scroll-str2
(string-trim-right (org-file-contents "./text-zh-en_US.txt") "\n"))
(defvar etml-test-scroll-str3
(string-trim-right (org-file-contents "./text-en_US.txt") "\n"))
1 个赞
目前发现的一个问题是:由于有些中文字体的行高 与 英文行高不一致,滚动的时候会发生抖动。这个不是插件本身的问题,只要行高不一致就会存在,很早之前在其他地方也发现了,当时没有找到很好解决方法,不知道有没有大佬知道怎么处理。我的中文字体是:聚珍新仿,英文字体是:Fira Code。
研究了一下,使用一个兼具中英文的字体可以解决,我测试用的 LXGW WenKai Mono,非常的完美!滚动时没有出现抖动。
定义一个指定字体和大小的 face,并应用到文本上,不会影响 emacs 本身的中英文字体的设置。
(defface etml-mono-face
'((t :font "LXGW WenKai Mono" :height 150))
"")

3 个赞
yibie
8
之前之光实现了一个插件,手动给所有字符加一个同等大小的边框,但有很严重的性能问题。
Kinney
11
我试了一下,可以用来设置等宽,但是等高好像还是不行。不过 cjk-grid-mode--cjk-p 让我学到了更高效的识别 CJK 字符的方法,感谢

昨晚测试的时候,我偶然的发现,把字体的基础高度调整为 15px (之前一直用的 16px),我的不同的中英文字体的行高就等高了,这一块还要深入研究一下。
yibie
12
我记得 cn-font 这个项目实际上就是帮人找到,可以相互配合的字体。
因为中英文的高度和宽度的确不相等,所以如果要设置一起,并有等宽的效果,就得中英文分开设置高宽度。
我怀疑,你设置到 15px 的时候,刚好令中英文的字体处于一个平衡的比例下…
2 个赞
ginqi7
13
正准备给大佬提“翻页”的需求呢,一上论坛,就已经有了效果更好的滚动了。大佬威武。
3 个赞
Kinney
15
不是,这只用来展示布局的一个 demo 的纯文本,按钮不难实现。ETML的目标就是布局和展示,搞完后续的工作就是实现交互操作。
Kinney
16
你倒是提醒了我,我从一开始就没有想到通过翻页来实现,哈哈,其实翻页从实现上要简单很多。这个滚动花费了我一个周末的时间
,翻页我后续也会支持,满足各种场景的需求。
1 个赞
yibie
17
为何不能直接 require?
Debugger entered–Lisp error: (file-missing “Cannot open load file” “No such file or directory” “etml”)
Kinney
20
包使用的机制是需要先 load,再require。
如果使用了 add-to-list 'load-path … 在emacs启动的时候会加载列表中路径下的文件。但是如果不重启 emacs,使用 add to load path 是无效的,原因是就是上面的加载时机问题。可以直接手动 load-file,当然直接用现成的包管理器更方便,比如我的配置是这样的:
(use-package etml
:load-path "~/IPARA/3-RESOURCES/emacs/config/github/ETML")