Make string-pad take an optional START parameter

* lisp/emacs-lisp/subr-x.el (string-pad): Alter the calling
convention.
This commit is contained in:
Lars Ingebrigtsen 2020-12-22 06:59:25 +01:00
parent 9480169f1b
commit 051d8f7535
4 changed files with 14 additions and 12 deletions

View file

@ -418,13 +418,13 @@ Split @var{string} into a list of strings on newline boundaries. If
@var{omit-nulls}, remove empty lines from the results.
@end defun
@defun string-pad string length &optional padding
@defun string-pad string length &optional padding start
Pad @var{string} to the be of @var{length} using @var{padding} as the
padding character (defaulting to the space character). If
@var{string} is shorter than @var{length}, no padding is done. If
@var{length} is positive, the padding is done to the end of the
string, and if it's negative, to the start of the string (using the
absolute value).
@var{start} is @code{nil} (or not present), the padding is done to the
end of the string, and if it's non-@code{nil}, to the start of the
string.
@end defun
@defun string-chop-newline string

View file

@ -134,7 +134,7 @@ There can be any number of :example/:result elements."
(string-pad
:eval (string-pad "foo" 5)
:eval (string-pad "foobar" 5)
:eval (string-pad "foo" -5 ?-))
:eval (string-pad "foo" 5 ?- t))
(mapcar
:eval (mapcar #'identity "123"))
(format

View file

@ -322,7 +322,7 @@ The boundaries that match REGEXP are included in the result."
(push (substring string start-substring) result)
(nreverse result))))
(defun string-pad (string length &optional padding)
(defun string-pad (string length &optional padding start)
"Pad STRING to LENGTH using PADDING.
If PADDING is nil, the space character is used. If not nil, it
should be a character.
@ -330,16 +330,18 @@ should be a character.
If STRING is longer than the absolute value of LENGTH, no padding
is done.
If LENGTH is positive, the padding is done to the end of the
string, and if it's negative, padding is done to the start of the
If START is nil (or not present), the padding is done to the end
of the string, and non-nil, padding is done to the start of the
string."
(let ((pad-length (- (abs length) (length string))))
(unless (natnump length)
(signal 'wrong-type-argument (list 'natnump length)))
(let ((pad-length (- length (length string))))
(if (< pad-length 0)
string
(concat (and (< length 0)
(concat (and start
(make-string pad-length (or padding ?\s)))
string
(and (> length 0)
(and (not start)
(make-string pad-length (or padding ?\s)))))))
(defun string-chop-newline (string)

View file

@ -613,7 +613,7 @@
(ert-deftest subr-string-pad ()
(should (equal (string-pad "foo" 5) "foo "))
(should (equal (string-pad "foo" 5 ?-) "foo--"))
(should (equal (string-pad "foo" -5 ?-) "--foo"))
(should (equal (string-pad "foo" 5 ?- t) "--foo"))
(should (equal (string-pad "foo" 2 ?-) "foo")))
(ert-deftest subr-string-chop-newline ()