Merge branch 'main' of github.com:Kinneyzhang/emacs-kp

This commit is contained in:
Kinneyzhang 2025-08-09 19:30:12 +08:00
commit 3df885bef8
4 changed files with 11 additions and 10 deletions

10
ekp.el
View File

@ -546,7 +546,8 @@ return the value of KEY in plist."
"Line glues include glues before first box and after last box. "Line glues include glues before first box and after last box.
So the length of line glues is: line-boxes-num + 1" So the length of line glues is: line-boxes-num + 1"
(let* ((boxes-widths (ekp-boxes-widths string)) (let* ((boxes-widths (ekp-boxes-widths string))
(boxes-num (length (ekp-boxes string))) (boxes (ekp-boxes string))
(boxes-num (length boxes))
(glues-types (ekp-glues-types string)) (glues-types (ekp-glues-types string))
(ideal-prefixs (ekp-ideal-prefixs string)) (ideal-prefixs (ekp-ideal-prefixs string))
(max-prefixs (ekp-max-prefixs string)) (max-prefixs (ekp-max-prefixs string))
@ -564,7 +565,12 @@ So the length of line glues is: line-boxes-num + 1"
(setq line-glue (setq line-glue
(cond (cond
((= 1 (length line-boxes-widths)) ((= 1 (length line-boxes-widths))
(list 0 (- line-pixel (aref line-boxes-widths 0)))) (if (ekp-hyphenate-p glues-types end)
;; ends with hyphen, minus hyphen-pixel
(list 0 (- line-pixel
(ekp-hyphen-pixel string)
(aref line-boxes-widths 0)))
(list 0 (- line-pixel (aref line-boxes-widths 0)))))
(is-last (is-last
(append '(0) (append '(0)
(mapcar #'ekp-glue-ideal-pixel line-glues-types) (mapcar #'ekp-glue-ideal-pixel line-glues-types)

View File

@ -56,6 +56,7 @@ Formats the text STRING to fit a pixel width of LINE-PIXEL per line and returns
Searches for optimal typesetting within the range of MIN-PIXEL to MAX-PIXEL. Returns a cons-cell where the car is the formatted text and the cdr is the pixel value achieving the best typesetting result. Please Note: This function iteratively computes the typesetting cost between the minimum and maximum pixel values to find the optimal case at the minimum cost. If the specified range is too large, execution time may increase significantly. Future updates plan to leverage Rust dynamic libraries for parallel computation to improve performance. Searches for optimal typesetting within the range of MIN-PIXEL to MAX-PIXEL. Returns a cons-cell where the car is the formatted text and the cdr is the pixel value achieving the best typesetting result. Please Note: This function iteratively computes the typesetting cost between the minimum and maximum pixel values to find the optimal case at the minimum cost. If the specified range is too large, execution time may increase significantly. Future updates plan to leverage Rust dynamic libraries for parallel computation to improve performance.
## Next Todos ## Next Todos
- [ ] Preserve the original text's text properties.
- [ ] Refactor using Rust dynamic modules: Utilize Rust's parallel computing capabilities to enhance rendering performance. - [ ] Refactor using Rust dynamic modules: Utilize Rust's parallel computing capabilities to enhance rendering performance.
- [ ] Implement autocorrection for punctuation: Correct English punctuation mistakenly used in Chinese text; Correct Chinese punctuation mistakenly used in English texts... - [ ] Implement autocorrection for punctuation: Correct English punctuation mistakenly used in Chinese text; Correct Chinese punctuation mistakenly used in English texts...

View File

@ -50,7 +50,7 @@
;; (ekp-test-justify nil "fr" "Cascadia Next SC" 666) ;; (ekp-test-justify nil "fr" "Cascadia Next SC" 666)
;; (ekp-test-justify nil "de_DE" "Cascadia Next SC" 666) ;; (ekp-test-justify nil "de_DE" "Cascadia Next SC" 666)
;; (ekp-test-justify "zh" "en_US" "Noto Serif" 689) ;; (ekp-test-justify "zh" "en_US" "Noto Serif" 689)
;; (ekp-test-justify "zh" nil nil 250) ;; (ekp-test-justify "zh" nil nil 980)
;;; FIXME: font size also affect! ;;; FIXME: font size also affect!
@ -78,9 +78,3 @@
(sit-for 0.00001)))))) (sit-for 0.00001))))))
;; (ekp-test-demo 400 800 1) ;; (ekp-test-demo 400 800 1)
;; (ekp-clear-caches)
;; (ekp-test-justify "zh2" "en_US" "Cascadia Next SC" 666)
;; (ekp-boxes (ekp-test-str "zh2" "en_US" "Cascadia Next SC"))
;; (ekp-split-to-boxes "用户可通过Emacs Lisp (elisp) 重新定义编辑行为")
;; (ekp-split-to-boxes "用户可通过Emacs Lisp (elisp) 重新定义编辑行为")

View File

@ -1,5 +1,5 @@
作为神之编辑器Editor of the GodsEmacs 早已超越了普通文本编辑器的范畴。它是由Richard Stallman于1976年创建的GNU项目核心组件其名字源自 Editor MACroS。在过去的半个世纪里Emacs演化成了一个self-documenting, customizable, extensible的生态系统用户可通过Emacs Lisp (elisp) 重新定义编辑行为。M-x 是每个Emacer的魔法咒语——按下Alt或Meta键加x即可召唤任意命令比如M-x butterfly这样的复活节彩蛋。中国开发者常戏称其为“永远的操作系统因为你可以通过org-mode管理TODO list、用magit操作Git仓库、甚至用EMMS播放MP3音乐。在Unix哲学中Emacs坚持“一个编辑器统治所有One Editor to Rule Them All的理念这与VS Code等现代编辑器形成鲜明对比。C-x C-f打开文件C-x C-s保存文档看似复杂的组合键一旦形成肌肉记忆效率就会呈指数级飙升。著名Python库Black的开发者曾公开表示"My .emacs is my second brain." 作为神之编辑器Editor of the GodsEmacs 早已超越了普通文本编辑器的范畴。它是由Richard Stallman于1976年创建的GNU项目核心组件其名字源自 Editor MACroS。在过去的半个世纪里Emacs演化成了一个self-documenting, customizable, extensible的生态系统用户可通过Emacs Lisp (elisp) 重新定义编辑行为。M-x 是每个Emacer的魔法咒语——按下Alt或Meta键加x即可召唤任意命令比如M-x butterfly这样的复活节彩蛋。中国开发者常戏称其为“永远的操作系统因为你可以通过org-mode管理TODO list、用magit操作Git仓库、甚至用EMMS播放MP3音乐。在Unix哲学中Emacs坚持“一个编辑器统治所有One Editor to Rule Them All的理念这与VS Code等现代编辑器形成鲜明对比。C-x C-f打开文件C-x C-s保存文档看似复杂的组合键一旦形成肌肉记忆效率就会呈指数级飙升。著名Python库Black的开发者曾公开表示"My .emacs is my second brain."
当然学习曲线Learning Curve也是陡峭的。新用户需要理解buffer、window、frame的区别当你C-x 2分割视窗时两个窗口共享同一个frame而C-x 5 2会创建新frame——这种设计对Retina显示屏尤其友好。中文用户还必须配置ivy或helm这类模糊搜索插件来优化中文输入著名的.emacs.d配置仓库如 purcell/emacs.d 在GitHub上有超过11k stars。最令人震撼的是其实时文档系统按下C-h k后点击任何按键组合都会弹出对应函数的elisp文档。这种introspective capability让定制化没有边界。有程序员开玩笑说“当你终于调通.emacs配置时第一件事应该是用M-x doctor找心理医生。” 毕竟,谁没经历过因为(setq indent-tabs-mode nil)配置错误导致Python代码崩溃的深夜呢 当然学习曲线Learning Curve也是陡峭的。新用户需要理解buffer、window、frame的区别当你C-x 2分割视窗时两个窗口共享同一个frame而C-x 5 2会创建新frame —— 这种设计对Retina显示屏尤其友好。中文用户还必须配置ivy或helm这类模糊搜索插件来优化中文输入著名的.emacs.d配置仓库如 purcell/emacs.d 在GitHub上有超过11k stars。最令人震撼的是其实时文档系统按下C-h k后点击任何按键组合都会弹出对应函数的elisp文档。这种introspective capability让定制化没有边界。有程序员开玩笑说“当你终于调通.emacs配置时第一件事应该是用M-x doctor找心理医生。” 毕竟,谁没经历过因为(setq indent-tabs-mode nil)配置错误导致Python代码崩溃的深夜呢
Emacs哲学的精髓在于不是工具适应人而是人塑造工具Not the tool adapts to human, but human forges the tool。正如Stallman所言"Free as in freedom." 当你用org-capture记录灵感时用gnus收发邮件时甚至用M-x tetris摸鱼时都是在践行这种数字世界的自由意志。This text intentionally contains mixed spacing/tab alignment for KP algorithm testing purposes. 本文故意包含混合空格/制表符对齐以测试KP算法。 Emacs哲学的精髓在于不是工具适应人而是人塑造工具Not the tool adapts to human, but human forges the tool。正如Stallman所言"Free as in freedom." 当你用org-capture记录灵感时用gnus收发邮件时甚至用M-x tetris摸鱼时都是在践行这种数字世界的自由意志。This text intentionally contains mixed spacing/tab alignment for KP algorithm testing purposes. 本文故意包含混合空格/制表符对齐以测试KP算法。