我正在寻找一个接受字符串并在标题大小写中返回相同字符串的 elisp 函数(即,所有单词大写,“a”、“an”、“on”、“the”等除外)。
我找到了这个脚本,它需要一个标记的区域。
只是,我需要一个接受字符串变量的函数,所以我可以将它与replace-regex
. 我很想看到上述脚本的一个版本,它可以接受或者......
我正在寻找一个接受字符串并在标题大小写中返回相同字符串的 elisp 函数(即,所有单词大写,“a”、“an”、“on”、“the”等除外)。
我找到了这个脚本,它需要一个标记的区域。
只是,我需要一个接受字符串变量的函数,所以我可以将它与replace-regex
. 我很想看到上述脚本的一个版本,它可以接受或者......
像这样的东西?
(progn
(defun title-case (input) ""
(let* (
(words (split-string input))
(first (pop words))
(last (car(last words)))
(do-not-capitalize '("the" "of" "from" "and" "yet"))) ; etc
(concat (capitalize first)
" "
(mapconcat (lambda (w)
(if (not(member (downcase w) do-not-capitalize))
(capitalize w)(downcase w)))
(butlast words) " ")
" " (capitalize last))))
(title-case "the presentation of this HEADING OF my own from my keyboard and yet\n"))
我会说您链接到的脚本在标题外壳方面做得很好。您可以按原样使用它。
这给我们留下了另外两个问题:
在 Emacs 中处理字符串通常是在不显示的临时缓冲区中完成的。你可以这样写一个包装器:
(defun title-capitalization-string (s)
(with-temp-buffer
(erase-buffer)
(insert s)
(title-capitalization (point-min)
(point-max))
(buffer-substring-no-properties (point-min)
(point-max))))
现在,对于一个神奇地实现你的意思的函数,考虑这样的事情:
(defun title-capitalization-dwim (&optional arg)
(interactive)
(cond
(arg
(title-capitalization-string arg))
((use-region-p)
(title-capitalization-string
(buffer-substring-no-properties (region-beginning)
(region-end))))
(t
(title-capitalization-string
(buffer-substring-no-properties (point-at-bol)
(point-at-eol))))))
它接受可选参数、活动区域或回退到当前行的文本。请注意,此功能在交互使用时并不是真正有用,因为它不显示任何效果。帽子小费也给https://www.emacswiki.org/emacs/titlecase.el
除了站点的默认许可之外,我将所有这些代码置于 Apache 许可 2.0 和 GPL 2.0(或更高版本,由您选择)下。
利用M-x
upcase-initials-region
是“C 源代码”中的交互式内置函数。(
upcase-initials-region
请求 结束)将区域中每个单词的首字母大写。这意味着每个单词的第一个字符被转换为标题大小写或大写,其余的保持不变。在程序中,给出两个参数,即要操作的起始字符位置和结束字符位置。