3

我想将给定的输入字符串居中对齐到给定的大小,以便生成的是输入字符串两侧(左侧和右侧)带有填充空格的字符串。

我必须这样做的代码:

(defun center-string (string size)
  (let* ((padding (/ (- size (length string)) 2))
         (lpad (+ (length string) padding))
         (lformat (format "%%%ds" lpad))
         (rformat (format "%%%ds" (- size))))
    (format rformat (format lformat string))))

还有一些测试用例:

(center-string "KJF" 10)
 => "   KJF    "
(center-string "KF" 10)
 => "    KF    "
(center-string "0123456789" 10)
 => "0123456789"
(center-string "0123456789" 5)
 => "0123456789"       ; Notice justifcation is ignored as input string too large.

是否有现有的 elisp 函数可以执行此操作或更好的方法?

4

2 回答 2

1

有一个center-line, 它在缓冲区中工作(并使用缓冲区的值fill-column作为行长),因此如果您的目标是生成格式良好的文件,您可以执行类似的操作

(defun insert-centered (x)
  (insert "\n" x)
  (center-line)
  (insert "\n"))
于 2009-09-09T11:58:34.827 回答
0

不,没有现有的 emacs lisp 例程可以满足您的要求。(通过 emacs lisp info 和 emacs info 的标准搜索支持这一点)。

于 2009-09-08T16:18:05.787 回答