代码之家  ›  专栏  ›  技术社区  ›  kjfletch

如何在elisp中使字符串居中?

  •  3
  • kjfletch  · 技术社区  · 16 年前

    我想将给定的输入字符串居中对齐到给定的大小,这样生成的字符串两边(左右两侧)都有填充空格。

    我要做的代码是:

    (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函数来执行此操作或更好的方法?

    2 回复  |  直到 16 年前
        1
  •  0
  •   Trey Jackson    16 年前

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

        2
  •  1
  •   Jouni K. Seppänen    16 年前

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

    (defun insert-centered (x)
      (insert "\n" x)
      (center-line)
      (insert "\n"))