mirror of https://codeberg.org/cage/tinmop/
- trucated long lines in message window and allowed horizontal scrolling.
This commit is contained in:
parent
05a06d1dad
commit
5e3c19811b
|
@ -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*)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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*))
|
||||
|
||||
|
|
Loading…
Reference in New Issue