gpt4 book ai didi

emacs - 我如何改进 Emacs Lisp Intro 的 "create index entries"练习的解决方案?

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:16 25 4
gpt4 key购买 nike

我已经为第 11.4 节(循环练习)中的练习编写了这个解决方案:

(defun texinfo-index-dfns-in-par ()
"Create an index entry at the beginning of the paragraph for every '@dfn'."
(interactive)
(save-excursion
(forward-paragraph)
(let ((bound (point)))
(backward-paragraph)
(let ((insert-here (point)))
(while (search-forward "@dfn{" bound t)
(let* ((start (point))
(end (1- (search-forward "}" bound)))
(dfn (buffer-substring start end)))
(save-excursion
(goto-char insert-here)
(newline)
(setq insert-here (point))
(insert "@cindex " dfn)
(while (< insert-here (line-beginning-position))
(join-line))
(end-of-line)
(setq insert-here (point))
(forward-paragraph)
(setq bound (point)))))))))

虽然它有效,但对我来说感觉很复杂。我想知道如何简化这段代码。我也对其他可能的改进感兴趣。

编辑:

Tyler 的回答很棒。通过缩小我可以写一个更短更清晰的版本:

(defun texinfo-index-dfns-in-par ()
"Create an index entry at the beginning of the paragraph for every '@dfn'."
(interactive)
(save-excursion
(mark-paragraph)
(save-restriction
(narrow-to-region (point) (mark))
(while (search-forward "@dfn{" nil t)
(let ((start (point))
(end (1- (search-forward "}"))))
(save-excursion
(goto-char (point-min))
(insert "\n@cindex " (buffer-substring start end))
(while (> (line-number-at-pos) 2) (join-line))
(narrow-to-region (line-end-position) (point-max))))))))

最佳答案

要注意的一件事是缩小范围。您可以使用缩小来绕过您正在做的很多来回弹跳。

(mark-paragraph)
(narrow-to-region)

将您的功能范围限制在当前段落并将指针移至开头。然后,您可以开始向前搜索,而不必担心越过当前段落。完成后,

(widen)

恢复缓冲区的其余部分以供查看。

关于emacs - 我如何改进 Emacs Lisp Intro 的 "create index entries"练习的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com