Adjust sorting of format help output

This commit is contained in:
2025-10-25 19:27:08 -07:00
parent 22ef933933
commit 10c03d9fc0
2 changed files with 11 additions and 4 deletions

View File

@ -473,7 +473,7 @@ list of trash directories that were present in INFOS."
(clingon:make-option (clingon:make-option
:flag :flag
:key :quiet :key :quiet
:description "suppress print matches (use with -t)" :description "don't print matches (use with -t)"
:short-name #\q :short-name #\q
:long-name "quiet")))) :long-name "quiet"))))

View File

@ -156,7 +156,7 @@ instead."
:type string :type string
:initform "" :initform ""
:documentation "The used-passed format string.")) :documentation "The used-passed format string."))
(:default-initargs :parameter "FORMAT-CONTROL") (:default-initargs :parameter "FORMAT")
(:documentation "Option that takes a format string.")) (:documentation "Option that takes a format string."))
(defmethod clingon:initialize-option ((option option-format-string) &key) (defmethod clingon:initialize-option ((option option-format-string) &key)
@ -231,6 +231,12 @@ parse-format-string)."
when extra-action when extra-action
do (funcall extra-action (aref objs-arr index))))) do (funcall extra-action (aref objs-arr index)))))
(defun format-code-name-less-p (c1 c2)
"Return non-nil if C2 sorts after C1 (both are format code names)."
(if (equalp c1 c2)
(and (not (eql c1 c2)) (upper-case-p c2))
(char-lessp c1 c2)))
(defun print-format-info (stream &rest name-directive-pairs) (defun print-format-info (stream &rest name-directive-pairs)
(format stream "~ (format stream "~
Format strings use C-style and printf-style escape sequences. Each character Format strings use C-style and printf-style escape sequences. Each character
@ -251,8 +257,9 @@ the initial % character)~%")
The recognized printf-style sequences for ~A are: The recognized printf-style sequences for ~A are:
\"%%\" - a literal % \"%%\" - a literal %
*\"%#\" - the index of the current item (used when prompting)~%" name) *\"%#\" - the index of the current item (used when prompting)~%" name)
do (dolist (code (sort (copy-list directive) #'char-lessp do (dolist (code (stable-sort
:key #'format-code-name)) (copy-list directive) #'format-code-name-less-p
:key #'format-code-name))
(with-slots (name doc padder) code (with-slots (name doc padder) code
(format stream " ~:[ ~;*~]\"%~A\"~@[ - ~A~]~%" (format stream " ~:[ ~;*~]\"%~A\"~@[ - ~A~]~%"
padder name doc))) padder name doc)))