Merge branch 'main' of github.com:Kinneyzhang/emacs-kp
This commit is contained in:
commit
3df885bef8
10
ekp.el
10
ekp.el
@ -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)
|
||||||
|
|||||||
@ -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...
|
||||||
|
|
||||||
|
|||||||
@ -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) 重新定义编辑行为")
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
作为神之编辑器(Editor of the Gods),Emacs 早已超越了普通文本编辑器的范畴。它是由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 Gods),Emacs 早已超越了普通文本编辑器的范畴。它是由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算法。)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user