1
0
Fork 0

- trucated long lines in message window and allowed horizontal scrolling.

This commit is contained in:
cage 2021-06-27 13:13:28 +02:00
parent 05a06d1dad
commit 5e3c19811b
4 changed files with 65 additions and 7 deletions

View File

@ -301,6 +301,10 @@
(define-key "down" #'message-scroll-down *message-keymap*)
(define-key "left" #'message-scroll-left *message-keymap*)
(define-key "right" #'message-scroll-right *message-keymap*)
(define-key "C-J" #'message-scroll-down *message-keymap*)
(define-key "home" #'message-scroll-begin *message-keymap*)
@ -323,6 +327,10 @@
(define-key "down" #'message-scroll-down *gemini-message-keymap*)
(define-key "left" #'message-scroll-left *gemini-message-keymap*)
(define-key "right" #'message-scroll-right *gemini-message-keymap*)
(define-key "C-J" #'message-scroll-down *gemini-message-keymap*)
(define-key "home" #'message-scroll-begin *gemini-message-keymap*)

View File

@ -35,7 +35,11 @@
(adjust-rows-strategy
:initform #'adjust-rows-select-first
:initarg :adjust-rows-strategy
:accessor adjust-rows-strategy)))
:accessor adjust-rows-strategy)
(text-starting-column
:initform 0
:initarg :text-starting-column
:accessor text-starting-column)))
(defgeneric prepare-for-rendering (object text-data &key jump-to-first-row))
@ -43,6 +47,10 @@
(defgeneric scroll-up (object &optional amount))
(defgeneric scroll-left (object &optional amount))
(defgeneric scroll-right (object &optional amount))
(defgeneric scroll-end (object))
(defgeneric scroll-begin (object))
@ -126,20 +134,41 @@
(defun draw-text (window)
(when hooks:*before-rendering-message-text*
(hooks:run-hook 'hooks:*before-rendering-message-text* window))
(with-accessors ((row-selected-index row-selected-index)) window
(let ((visible-rows (visible-rows window)))
(with-accessors ((row-selected-index row-selected-index)
(text-starting-column text-starting-column)) window
(let ((visible-rows (visible-rows window))
(window-width (win-width-no-border window)))
(loop for line in visible-rows
for y from 1
do
(cond
;; testing invisibility should never returns true as
;; the method `row' is specialized on message-window
;; and always removes from the rows the invible ones.
;; the method `row' is specialized on message-window
;; and always removes from the rows the invisible
;; ones.
((row-invisible-p line)
(decf y))
((not (row-vertical-space-p line))
(let ((text-line (remove-corrupting-utf8-chars (normal-text line))))
(print-text window text-line 1 y))))))))
(let* ((text-line (remove-corrupting-utf8-chars (normal-text line)))
(text-length (text-length text-line))
(truncate-at (- window-width
text-length
text-starting-column))
(truncatep (< truncate-at 0))
(actual-text-line (cond
((>= text-starting-column text-length)
"")
(truncatep
(tui-string-subseq text-line
text-starting-column
(min text-length
(+ window-width
text-starting-column))))
(t
(tui-string-subseq text-line
text-starting-column
nil)))))
(print-text window actual-text-line 1 y))))))))
(defun draw-buffer-line-mark (window)
(with-accessors ((rows rows)
@ -441,6 +470,17 @@
0)
(draw object)))
(defmethod scroll-left ((object message-window) &optional (amount 1))
(with-accessors ((text-starting-column text-starting-column)) object
(when (> text-starting-column 0)
(decf text-starting-column amount)
(draw object))))
(defmethod scroll-right ((object message-window) &optional (amount 1))
(with-accessors ((text-starting-column text-starting-column)) object
(incf text-starting-column amount)
(draw object)))
(defmethod scroll-end ((object message-window))
(with-accessors ((rows rows)
(row-selected-index row-selected-index)) object

View File

@ -2005,6 +2005,8 @@
:scroll-down
:scroll-up
:scroll-end
:scroll-left
:scroll-right
:scroll-begin
:scroll-next-page
:scroll-previous-page
@ -2429,6 +2431,8 @@
:unsubscribe-to-hash
:message-scroll-up
:message-scroll-down
:message-scroll-left
:message-scroll-right
:message-scroll-begin
:message-scroll-end
:message-scroll-next-page

View File

@ -339,6 +339,12 @@ Metadata includes:
(defun message-scroll-down ()
(message-window:scroll-down *message-window*))
(defun message-scroll-left ()
(message-window:scroll-left *message-window*))
(defun message-scroll-right ()
(message-window:scroll-right *message-window*))
(defun message-scroll-begin ()
(message-window:scroll-begin *message-window*))