55 type KeyEvent ,
66 MarkdownRenderable ,
77 RGBA ,
8+ ScrollBoxRenderable ,
89 type SelectOption ,
910 SelectRenderable ,
1011 SelectRenderableEvents ,
@@ -72,6 +73,7 @@ export async function runTui(): Promise<void> {
7273 const listBox = new BoxRenderable ( renderer , {
7374 id : 'openmemo-list' ,
7475 flexGrow : 1 ,
76+ flexBasis : 0 ,
7577 marginRight : 1 ,
7678 border : true ,
7779 borderStyle : 'single' ,
@@ -85,6 +87,8 @@ export async function runTui(): Promise<void> {
8587 const previewBox = new BoxRenderable ( renderer , {
8688 id : 'openmemo-preview' ,
8789 flexGrow : 2 ,
90+ flexBasis : 0 ,
91+ overflow : 'hidden' ,
8892 border : true ,
8993 borderStyle : 'single' ,
9094 borderColor : '#334155' ,
@@ -94,18 +98,26 @@ export async function runTui(): Promise<void> {
9498 shouldFill : true ,
9599 } ) ;
96100
101+ const previewScroll = new ScrollBoxRenderable ( renderer , {
102+ id : 'openmemo-preview-scroll' ,
103+ width : '100%' ,
104+ height : '100%' ,
105+ scrollY : true ,
106+ scrollX : false ,
107+ } ) ;
108+
97109 container . add ( listBox ) ;
98110 container . add ( previewBox ) ;
111+ previewBox . add ( previewScroll ) ;
99112
100113 const previewMarkdown = new MarkdownRenderable ( renderer , {
101114 id : 'openmemo-preview-text' ,
102115 width : '100%' ,
103- height : '100%' ,
104116 content : '' ,
105117 syntaxStyle : markdownStyle ,
106118 conceal : true ,
107119 } ) ;
108- previewBox . add ( previewMarkdown ) ;
120+ previewScroll . add ( previewMarkdown ) ;
109121
110122 if ( memos . length === 0 ) {
111123 previewMarkdown . content = EMPTY_MESSAGE ;
@@ -145,6 +157,7 @@ export async function runTui(): Promise<void> {
145157 return ;
146158 }
147159 previewMarkdown . content = stripFrontmatter ( memo . content ) ;
160+ previewScroll . scrollTo ( 0 ) ;
148161 } ;
149162
150163 updatePreview ( memos [ 0 ] ) ;
@@ -163,6 +176,16 @@ export async function runTui(): Promise<void> {
163176 renderer . keyInput . on ( 'keypress' , ( key : KeyEvent ) => {
164177 if ( key . name === 'q' || key . name === 'escape' ) {
165178 renderer . destroy ( ) ;
179+ } else if ( key . name === 'j' ) {
180+ previewScroll . scrollBy ( 1 ) ;
181+ } else if ( key . name === 'k' ) {
182+ previewScroll . scrollBy ( - 1 ) ;
183+ } else if ( key . name === 'd' ) {
184+ const halfPage = Math . floor ( previewScroll . viewport . height / 2 ) ;
185+ previewScroll . scrollBy ( halfPage ) ;
186+ } else if ( key . name === 'u' ) {
187+ const halfPage = Math . floor ( previewScroll . viewport . height / 2 ) ;
188+ previewScroll . scrollBy ( - halfPage ) ;
166189 }
167190 } ) ;
168191
0 commit comments