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

いいえ、あなたが望むことをする既存のemacslispルーチンはありません。(emacs lispinfoおよびemacsinfoによる標準検索はこれをサポートします)。

于 2009-09-08T16:18:05.787 に答える