]> git.eshelyaron.com Git - emacs.git/commitdiff
Make string-pad take an optional START parameter
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 22 Dec 2020 05:59:25 +0000 (06:59 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 22 Dec 2020 05:59:25 +0000 (06:59 +0100)
* lisp/emacs-lisp/subr-x.el (string-pad): Alter the calling
convention.

doc/lispref/strings.texi
lisp/emacs-lisp/shortdoc.el
lisp/emacs-lisp/subr-x.el
test/lisp/emacs-lisp/subr-x-tests.el

index 80e936e97433669afdf95686a7865933d933088a..ef848ac51076ffc280d675c21e703e1eb970ecc0 100644 (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
index eb57e706608fa78872a045fcb5e2d6ebd0371bfc..e9e1be1d55055b63f3865199664e0927128a5ec4 100644 (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
index b79482fd4b3d6b04cf60aaa9be694edf113c6bfe..dc046c3d76aea271aaaa325b1f57a96ceb6678c3 100644 (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)
index 52b480951499ac40e6d96afd1bc31ab4b96dd767..854d61ed28e86c3a16eb00d4f09ad09183251e7b 100644 (file)
 (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 ()