v0.8.1: deduplication cleanup — remove duplicate defpackage/defvar blocks from programming-tools, duplicate plist-keywords-normalize from programming-lisp, duplicate *VAULT-MEMORY* from security-vault; TUI defensive fixes — add word-wrap function, wrap on-key in ignore-errors; daemon startup hardening — optional skill loads with handler-case
This commit is contained in:
@@ -218,7 +218,7 @@ that the TUI actuator attaches to the response plist before transmission.
|
||||
(search-highlight content (st :search-query))
|
||||
content))
|
||||
(line-text (format nil "~a [~a] ~a" prefix time content-show))
|
||||
(wrapped (word-wrap line-text (- w 2)))
|
||||
(wrapped (passepartout::word-wrap line-text (- w 2)))
|
||||
(nlines (length wrapped)))
|
||||
(if (<= nlines lines-remaining)
|
||||
(progn (decf lines-remaining nlines) (incf msg-count))
|
||||
@@ -240,7 +240,7 @@ that the TUI actuator attaches to the response plist before transmission.
|
||||
(search-highlight content (st :search-query))
|
||||
content))
|
||||
(line-text (format nil "~a [~a] ~a" prefix time content-show))
|
||||
(wrapped (word-wrap line-text (- w 2))))
|
||||
(wrapped (passepartout::word-wrap line-text (- w 2))))
|
||||
;; HITL panel: render with colored border
|
||||
(when is-panel
|
||||
(setf color (if is-resolved
|
||||
@@ -313,6 +313,34 @@ ASCII < 128 = 1. CJK, fullwidth, emoji = 2. Combining marks = 0. Tab = 8."
|
||||
((<= #x20D0 code #x20FF) 0)
|
||||
((<= #xFE00 code #xFE0F) 0)
|
||||
(t 1))))
|
||||
|
||||
(defun word-wrap (text max-width)
|
||||
"Split TEXT into lines that fit within MAX-WIDTH columns.
|
||||
Word-breaks at spaces when possible; breaks mid-word if necessary.
|
||||
Respects CJK/emoji char widths via char-width."
|
||||
(let ((lines nil)
|
||||
(start 0)
|
||||
(end (length text)))
|
||||
(loop while (< start end) do
|
||||
(let* ((col 0)
|
||||
(pos start)
|
||||
(last-break start))
|
||||
(loop while (< pos end)
|
||||
for width = (char-width (char text pos)) do
|
||||
(when (char= (char text pos) #\Space)
|
||||
(setf last-break pos))
|
||||
(when (> (+ col width) max-width)
|
||||
(return))
|
||||
(incf col width)
|
||||
(incf pos)
|
||||
(when (>= pos end) (return)))
|
||||
(let ((line-end (if (> pos start) pos (1+ start))))
|
||||
(when (>= line-end end) (setf line-end end))
|
||||
(push (subseq text start line-end) lines)
|
||||
(setf start (if (and (< line-end end) (char= (char text line-end) #\Space))
|
||||
(1+ line-end)
|
||||
line-end)))))
|
||||
(nreverse lines)))
|
||||
#+end_src
|
||||
|
||||
* v0.7.1 — Markdown Rendering
|
||||
|
||||
Reference in New Issue
Block a user