Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Viewport may not scroll down to the end of large text inputs #479

Open
SineMah opened this issue Feb 9, 2024 · 7 comments
Open

Viewport may not scroll down to the end of large text inputs #479

SineMah opened this issue Feb 9, 2024 · 7 comments

Comments

@SineMah
Copy link

SineMah commented Feb 9, 2024

Viewport may not scroll down to the end of large text inputs. It will work if you reduce viewport height to e.g. 5.
m.contentView = viewport.New(msg.Width, 5)

Use up and down arrows in the example.
The text is cropped after a you reach the end with arrow down. m.conetntView.ScrollPercent results in 100.

Setup

  • OS macOS Sonoma 14.3
  • zsh
  • item2

Example Code

package main

import (
	"encoding/json"
	"fmt"
	"github.com/charmbracelet/bubbles/viewport"
	tea "github.com/charmbracelet/bubbletea"
	"os"
)

type mdModel struct {
	ready         bool
	contentView   viewport.Model
	formatContent string
}

var loremContent = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc turpis massa, lacinia quis volutpat vitae, auctor vitae massa. Nulla eu scelerisque erat. Mauris egestas condimentum erat, sed maximus nunc vestibulum scelerisque. Ut scelerisque venenatis diam nec ultrices. Phasellus tellus justo, vestibulum ut odio ut, luctus lobortis mi. Vivamus sit amet elit leo. Pellentesque ornare nisi mauris, vestibulum elementum sapien convallis sit amet. In faucibus pulvinar rutrum. Quisque dictum lorem in dui tempus, eget porta lectus tincidunt. Donec ut vestibulum ipsum, vitae mollis erat. Aenean lacinia neque mauris, a faucibus nisi feugiat et. Maecenas dignissim in massa vel pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a tellus dapibus, suscipit tortor id, finibus felis. Curabitur sed euismod nisi, ac finibus ex. Etiam mollis nisl pellentesque nulla venenatis, at ultricies neque porta.\n\nSuspendisse quis mattis ligula. Phasellus suscipit vel ante ut congue. Cras arcu diam, placerat ut augue suscipit, mollis commodo ligula. Mauris efficitur enim at metus sodales fringilla. Nunc varius urna quis lobortis ornare. Aenean a mi et ex cursus commodo vel id lorem. Maecenas consequat, mauris a lacinia varius, eros velit bibendum purus, quis semper orci ipsum non arcu. Etiam ut urna a augue auctor congue non vitae sem. Sed scelerisque consequat enim ac fermentum.\n\nUt lobortis congue nibh, sed porta leo pellentesque at. Pellentesque bibendum dolor nisi, quis bibendum augue iaculis sed. Suspendisse congue mauris sapien, a sagittis eros imperdiet eu. Proin eget fringilla odio. Integer rutrum, ligula in vehicula consequat, ipsum ligula laoreet orci, quis congue odio nisl in velit. Mauris dolor magna, tempor a tortor vitae, porta bibendum augue. Etiam rutrum mollis lacus posuere varius. Integer eleifend urna facilisis risus tempus rutrum. Aliquam erat volutpat. Nam finibus tincidunt ligula dictum elementum. Vestibulum ultricies nisl risus, at viverra ligula varius sit amet. Donec in est id tortor varius pulvinar.\n\nAenean erat nibh, egestas a eros ut, faucibus vulputate diam. Aenean vel sodales nunc, ut gravida justo. Sed et viverra dui. Donec libero metus, luctus quis tristique vestibulum, ultricies vitae turpis. Pellentesque posuere sapien vitae ex consectetur dictum. Praesent finibus vehicula tincidunt. Morbi vel felis mollis, efficitur lorem id, viverra odio. Mauris commodo odio nec tortor tempor, at euismod nunc venenatis. Vivamus libero urna, feugiat at vulputate id, gravida accumsan felis.\n\nAenean faucibus ut massa vel volutpat. Duis laoreet massa velit, vitae tempus ligula scelerisque sed. Sed id sem eget augue bibendum viverra. Ut iaculis volutpat condimentum. Ut varius id urna a ultricies. Maecenas a fermentum diam. Phasellus varius faucibus lorem, in pharetra elit auctor convallis. Etiam egestas elementum nunc, eu sodales est pharetra id. Proin bibendum justo purus, ut tempus mi aliquet eu. Morbi ac diam ut ex laoreet aliquam. Aenean sit amet arcu sed libero hendrerit tristique. Morbi luctus nisl vel nulla aliquam tincidunt. Vivamus suscipit id urna id faucibus.\n\nAenean elementum nibh posuere arcu mattis, quis condimentum ex commodo. Praesent condimentum nisl ex, ac consequat ipsum pretium sit amet. Mauris non ligula volutpat, dictum augue eget, cursus purus. Aliquam erat volutpat. Proin vulputate feugiat erat, et convallis neque. Praesent quis justo nisi. Proin id massa et mauris molestie sollicitudin. Proin sagittis aliquet porttitor. Fusce hendrerit magna felis, ut sodales justo lacinia vel. Nulla vitae luctus elit. Nulla vestibulum vestibulum turpis, quis egestas lacus cursus at. Sed nec massa vitae quam convallis venenatis.\n\nDuis in ex non dui venenatis gravida eu quis nisl. Phasellus bibendum, massa placerat auctor imperdiet, sapien tortor malesuada ante, a fringilla orci metus ut risus. Vestibulum ullamcorper nisl et tellus fringilla bibendum non in nunc. Nunc placerat faucibus justo ac maximus. Maecenas ornare faucibus nibh sed sagittis. Pellentesque mollis diam eget nibh luctus elementum. Phasellus est ex, venenatis non metus vitae, molestie condimentum ipsum. Quisque at nibh vitae dolor consectetur euismod. Nulla cursus neque nisl, non accumsan arcu finibus non. Phasellus mattis convallis nisl sed iaculis. Nunc congue interdum lorem, pharetra accumsan sem laoreet non. Mauris maximus elit in ante elementum elementum. Vestibulum vitae placerat libero. Maecenas nec massa suscipit, imperdiet eros eu, ultricies felis.\n\nNunc posuere metus eu tempus maximus. Aliquam luctus lacinia orci, vel convallis dolor. Nullam dictum enim vitae tortor congue, ac mattis tellus faucibus. Sed ac quam non dui mattis feugiat. Proin tincidunt, arcu non accumsan auctor, mi lectus cursus erat, porta pretium tellus ligula id lectus. Donec gravida mattis iaculis. Integer at orci urna. Morbi at placerat mauris. Etiam in sem sit amet erat congue condimentum. Donec quis ultrices felis. Etiam vulputate elit a consectetur cursus. Cras accumsan nulla ac diam scelerisque, in tincidunt justo mollis. Ut sollicitudin mi justo, condimentum finibus odio tempor quis.\n\nDuis euismod pulvinar malesuada. Vestibulum eget tempor lorem, sed egestas lorem. Mauris a libero nunc. Aliquam nec ipsum est. Suspendisse non mi non nibh eleifend pretium. Duis condimentum magna scelerisque porttitor rhoncus. Quisque iaculis nisi eu orci fermentum semper. Ut eget magna non dolor posuere efficitur. Nunc vel ultrices diam. Duis fringilla accumsan nisl non elementum. Vivamus molestie imperdiet ligula, id malesuada urna maximus ac. Morbi eros ante, volutpat et vehicula et, cursus vitae tellus. Quisque eget arcu massa.\n\nQuisque varius rutrum tincidunt. Aliquam erat volutpat. Morbi metus urna, lacinia vitae urna eu, suscipit lacinia est. Phasellus sed tortor viverra, tempus ante vitae, placerat quam. Vestibulum tellus odio, fringilla eu dolor sed, condimentum blandit arcu. Pellentesque feugiat ornare enim, at consequat ipsum mattis et. Integer in vestibulum elit, tempus rutrum felis. Duis at eros vel lectus condimentum malesuada ut ut tortor. Sed sit amet sollicitudin arcu. Nunc in leo viverra, lacinia sapien quis, tempor sapien. Duis at orci massa.\n\nDonec tincidunt lacus sed sodales pellentesque. Proin ut lectus fringilla ex fringilla auctor id non quam. Nam ac nibh vel massa efficitur tristique. Suspendisse hendrerit leo eget tempor sollicitudin. Mauris auctor risus at metus tristique dapibus. Mauris congue convallis commodo. Etiam efficitur orci diam. Etiam ac velit fermentum, faucibus libero sed, imperdiet nisl. Proin pharetra mattis volutpat. Aliquam ultrices eu erat id maximus. Donec sit amet nunc aliquet, venenatis arcu porta, ultrices odio. Donec rhoncus sit amet sapien ac accumsan. Cras euismod lorem in mi porttitor, eget malesuada lorem pulvinar. Aenean sollicitudin leo ac ex viverra laoreet. Donec hendrerit eleifend est. Fusce laoreet libero ipsum, vel convallis ex bibendum sit amet.\n\nNulla interdum sollicitudin tempor. Donec elit augue, congue at ex nec, accumsan dapibus purus. Proin auctor feugiat turpis a egestas. Quisque fringilla accumsan sapien at egestas. Mauris nec justo in erat luctus gravida ut nec dolor. Phasellus vulputate turpis in felis elementum, ac fermentum nisi venenatis. Pellentesque gravida imperdiet lectus pharetra lobortis. Nulla euismod neque quam, ut aliquet leo maximus tempor. Nulla facilisi. Morbi suscipit cursus rhoncus. Suspendisse dapibus convallis sem, id tristique justo laoreet vel. Nulla et consequat enim. Aliquam vehicula venenatis velit, a aliquam est laoreet et. Sed eget sapien vel risus malesuada imperdiet. Vivamus in ex id mi efficitur faucibus vel sed erat.\n\nProin vulputate eget justo sed eleifend. Quisque rutrum quam felis, vulputate euismod dolor interdum venenatis. Donec molestie arcu in dui tincidunt, vitae convallis purus tempor. Mauris ipsum odio, ultricies ut purus quis, fermentum suscipit nunc. Vestibulum nec eleifend urna, id imperdiet ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam laoreet commodo nisl, in porttitor metus porta ac. Mauris maximus dui quis nisi faucibus tempus. Pellentesque euismod ultrices urna, vel cursus metus lacinia in. Etiam rhoncus varius elit, vel vestibulum urna ornare molestie. Proin vel nibh ut arcu eleifend aliquam quis id metus. Suspendisse sit amet erat hendrerit, sodales lectus eget, scelerisque lectus.\n\nMorbi at facilisis nibh. Sed condimentum iaculis nibh et mattis. Integer bibendum, nisl eget tristique laoreet, eros elit blandit magna, eget semper orci ex a sem. Fusce auctor, nunc finibus posuere dignissim, ipsum sem accumsan lorem, et faucibus mauris nunc et eros. Ut tristique consectetur nisi in rhoncus. Ut sagittis ante a malesuada posuere. Vivamus id rhoncus lectus. Donec arcu orci, semper vitae mattis et, ullamcorper eu nibh. Donec et vestibulum lorem, ut tempus nunc. Nunc gravida ullamcorper posuere. Aenean laoreet arcu vel commodo consectetur. Phasellus auctor, purus sed cursus pulvinar, odio quam ultrices urna, ac ullamcorper risus ante sit amet lacus.\n\nQuisque ligula lectus, sodales accumsan est in, convallis posuere est. Sed ultrices risus nunc, sed dapibus enim hendrerit id. Aliquam interdum vulputate orci eu tempus. Suspendisse vulputate, nisl vel vehicula malesuada, mauris justo pellentesque leo, id placerat urna risus id urna. Sed erat tellus, condimentum quis varius id, tempor quis risus. Vivamus eu consequat lectus. Quisque interdum elit eget magna interdum, quis commodo enim vestibulum. In eleifend justo vitae urna tincidunt laoreet.\n\nNam placerat, nulla sed ornare gravida, enim urna dapibus nisi, vel viverra velit magna sit amet lectus. Pellentesque non fermentum massa, in viverra sem. Pellentesque accumsan sodales lorem nec vestibulum. Aliquam sapien dui, consequat a pharetra euismod, ullamcorper ac elit. Sed rutrum vel risus non pellentesque. Nulla facilisi. Curabitur fermentum eros eget accumsan accumsan. Nulla facilisi. Vestibulum et quam gravida, mattis felis consequat, viverra justo. Proin metus purus, pulvinar ac quam at, convallis malesuada nunc. Vivamus mollis viverra euismod. Aliquam ac varius est. Maecenas purus erat, eleifend sit amet pharetra eget, aliquam ac lectus. Mauris ornare nunc eu turpis lobortis gravida. Aenean consequat lectus eget lacus interdum placerat.\n\nAenean dapibus ex justo, ac viverra quam vulputate non. In in tincidunt nulla. Nulla in turpis sit amet tellus feugiat feugiat at a lacus. Mauris varius placerat viverra. Suspendisse mollis sodales aliquam. Cras ornare, neque id scelerisque imperdiet, dolor arcu venenatis augue, eu euismod diam elit eget enim. Morbi eros nisl, bibendum non quam in, dictum luctus odio. Fusce blandit consequat arcu vitae iaculis.\n\nCurabitur vel ligula consectetur, scelerisque mi in, bibendum velit. Morbi ullamcorper, odio quis laoreet dictum, lorem lacus tempor erat, vel commodo nibh metus non quam. Donec sed molestie ligula, nec pharetra libero. Cras interdum mauris vel sapien volutpat pellentesque. Nullam elementum enim ac risus tincidunt, quis tincidunt ex semper. Donec id ante ligula. Proin pharetra lacinia nunc, a luctus mi posuere quis. Sed elementum nibh lectus, ut lobortis elit pretium in.\n\nMorbi porttitor felis sed consequat vulputate. Duis tincidunt risus a fringilla eleifend. Fusce sit amet semper mauris. Integer efficitur eros quis metus tincidunt, sit amet ultricies odio ultrices. Suspendisse gravida, sem quis auctor gravida, erat nibh maximus enim, sed molestie risus mi non ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed commodo dapibus purus non auctor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla auctor dolor quis tristique posuere. Duis sit amet cursus lectus. Vestibulum volutpat feugiat metus a molestie. Vestibulum quis fermentum turpis.\n\nEtiam a imperdiet est. Vestibulum eu dui aliquet lorem posuere luctus nec et sem. Phasellus volutpat ut libero vel tempus. Sed rhoncus mi eros, luctus ultricies nisi dapibus quis. Cras euismod ligula libero, non pharetra tellus facilisis eget. Fusce non lacus nunc. Aenean vitae neque in massa egestas aliquam. Duis mollis felis sit amet leo posuere, at fermentum neque vulputate. Sed sit amet facilisis mi. In posuere laoreet justo, ac placerat diam euismod ut.\n\nMauris convallis dapibus mauris eu dignissim. In tempor, magna vel tincidunt consequat, ligula lacus dignissim nisi, at rhoncus est metus vitae ligula. Vivamus id est eget elit varius pretium pharetra at lectus. Vestibulum pellentesque eros sed dui imperdiet, eu imperdiet lorem sodales. Nam egestas enim eget arcu sollicitudin consectetur. Nam rhoncus volutpat ex, a bibendum arcu tempor eu. Maecenas condimentum dapibus arcu, sed sollicitudin eros porta in. Nam interdum auctor venenatis. Sed gravida, nisi varius accumsan ullamcorper, quam arcu iaculis nibh, eget mattis sapien erat quis sem. Nullam eget venenatis enim. Nulla facilisi. Fusce blandit lacus eget sem auctor porta. Cras ultricies pulvinar mattis. In sit amet ullamcorper leo. Donec molestie ante lacus, non accumsan tellus pharetra vehicula. Curabitur vel tellus velit.\n\nNam aliquet massa ut enim aliquet mollis. Proin vitae convallis enim. Vivamus non dui consectetur, feugiat nisi id, vestibulum velit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus eget nisi erat. Sed hendrerit vel lacus sit amet fringilla. Pellentesque convallis, urna ut suscipit feugiat, tellus ipsum aliquet urna, vel mollis risus enim vel augue. Quisque eu egestas nisi. Pellentesque condimentum mauris quis tristique porttitor. Donec rhoncus, sapien nec aliquet semper, odio orci venenatis libero, nec imperdiet nulla massa nec velit. Nullam porta sem et pulvinar tincidunt. Vivamus vestibulum ligula eros, in ultrices est feugiat vel. Duis laoreet dui eget nisi semper, vel vulputate magna laoreet.\n\nFusce molestie tortor est, sit amet bibendum dui tincidunt quis. Donec quis tellus sit amet ligula cursus scelerisque eu ut elit. Ut eget ornare nunc, sed feugiat augue. In quis imperdiet ligula, et euismod diam. Pellentesque auctor libero auctor, laoreet diam sed, bibendum nunc. Aenean sollicitudin, justo consectetur pharetra egestas, lacus orci faucibus dolor, et sagittis nisl turpis id purus. Pellentesque at faucibus nisi, in vestibulum est. Proin vitae arcu ex.\n\nAliquam a leo et nulla ornare dignissim at a arcu. Ut luctus, arcu at pretium pretium, est velit porttitor tellus, sit amet pharetra orci augue in justo. Nunc sit amet nunc aliquam, bibendum dui quis, condimentum arcu. Pellentesque sed dolor maximus, finibus mauris at, volutpat diam. Sed quis dictum nunc. Vestibulum sapien erat, accumsan sed nisl eget, dignissim pellentesque metus. Duis lacinia ultricies faucibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus vulputate massa eget ipsum maximus, vitae sollicitudin orci elementum. Sed sit amet nisi congue, vulputate neque quis, scelerisque orci. Integer nisi sem, scelerisque at ex nec, rhoncus lacinia arcu. Aliquam dictum ultrices justo nec rutrum. Donec vel lacus fringilla, condimentum odio ac, pharetra nunc.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla tristique risus eu cursus porta. Integer dignissim justo eget ipsum tincidunt varius. Maecenas dolor nibh, interdum et dolor quis, viverra dapibus ante. Proin sit amet lacus tortor. Etiam tortor purus, convallis non velit vel, rhoncus ultrices magna. Etiam eget ipsum ut libero tempus molestie sed non eros. Aenean pretium lorem enim, sit amet dictum nibh pretium sed. Fusce at massa lobortis, ullamcorper sapien eu, tincidunt felis. Donec ultricies, quam vel porttitor iaculis, neque arcu faucibus est, ac ullamcorper risus nunc in arcu. Aliquam augue magna, laoreet quis consectetur ornare, luctus ac justo.\n\nSed consequat eros et risus commodo, consectetur rutrum quam tempor. Fusce nunc turpis, placerat in tincidunt ac, mattis ac nisl. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean suscipit tristique accumsan. Donec rhoncus tincidunt odio. Curabitur quis est fringilla, tempus nisl non, semper ex. Morbi rhoncus in nibh tincidunt porta. Morbi sed ligula in quam ornare bibendum. Aliquam egestas sapien magna, molestie efficitur turpis viverra sed. In ut blandit dui. Curabitur bibendum, erat sit amet semper porttitor, nisl dui maximus arcu, et mollis purus tellus ac sapien. Praesent mattis risus a tortor blandit sodales ac vel erat. Donec nec cursus sapien. Mauris lacinia massa quis ligula vehicula accumsan. Aenean malesuada ut dui vitae hendrerit. Sed ac suscipit nisl.\n\nInteger eget tincidunt ex. Praesent bibendum, augue vitae dignissim tristique, leo tortor luctus sem, eu porta tellus lorem in lorem. Mauris rhoncus libero viverra, lacinia dolor quis, faucibus purus. In quis enim a ex congue maximus. In tellus metus, fringilla a lacinia non, dignissim et urna. Morbi ornare dignissim lacinia. Morbi pharetra, augue sit amet cursus mattis, quam nisi maximus eros, a mollis velit elit quis dolor. Fusce turpis est, porta non varius tempor, gravida ut enim. Fusce feugiat lorem justo, a auctor ligula feugiat sit amet. Aliquam pharetra sem vel ante mollis, et rhoncus felis fringilla. Phasellus id placerat urna. Phasellus vel lorem id leo ultrices ultricies sed vel mi. Aliquam sed laoreet ante, non porttitor mi. Nullam imperdiet, purus sed finibus dapibus, massa erat sodales ante, euismod efficitur mi metus sit amet quam. Duis at hendrerit diam. Quisque tincidunt, est sed tincidunt feugiat, diam justo tristique metus, ac bibendum sem dui sed velit.\n\nCurabitur ultrices sagittis elit sit amet lacinia. Donec consectetur id tellus eu mollis. Duis eget viverra sapien. Curabitur nec augue auctor, rhoncus dolor nec, maximus nisi. Mauris vestibulum quam et eros eleifend, vitae dignissim lectus pulvinar. Nulla eu est at magna scelerisque tempus nec a enim. Vivamus consequat quam turpis, id blandit leo congue eget. Donec in eleifend ex, malesuada lacinia tellus.\n\nDonec suscipit sollicitudin efficitur. Sed ultrices quam ex, ut feugiat augue convallis eu. In vel est dui. Proin libero elit, blandit non enim eget, dictum placerat felis. Donec ac congue urna. Fusce congue lorem libero, nec varius ipsum viverra non. Morbi ac felis dui. Sed augue turpis, blandit lacinia lorem at, sagittis lobortis nisl. Suspendisse molestie arcu at arcu sagittis, auctor pellentesque enim aliquet. Nullam in neque iaculis, posuere nisi vitae, congue nisi. Donec commodo ultricies lorem vitae cursus. Suspendisse mauris velit, accumsan in ligula eu, pellentesque dapibus arcu. Phasellus dignissim ante nec elementum hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.\n\nUt ante tellus, interdum a lobortis at, ornare aliquet erat. Nam lacinia elit sit amet blandit tincidunt. Proin nec malesuada quam. Vivamus velit diam, facilisis at consequat ac, dapibus at tellus. Ut sem arcu, tristique lacinia augue et, vulputate varius nulla. Curabitur vel neque ut lectus aliquet interdum. Nullam sit amet elit placerat nulla bibendum egestas sit amet id nibh. Integer ultrices ex in risus tincidunt, sit amet lobortis est gravida. Nullam malesuada leo at viverra interdum. Aliquam eget mattis libero. Vivamus in nisi quis est suscipit tincidunt vel at mauris.\n\nDonec id elit eget mi suscipit vestibulum. Integer eu sem felis. Suspendisse iaculis turpis ut libero viverra, auctor posuere velit laoreet. Fusce a magna malesuada eros porttitor auctor quis ac sem. Quisque ut maximus nisl. Vivamus vel ex mollis, ultricies purus porta, scelerisque odio. Nulla facilisi. Aenean ut urna ac ex commodo facilisis. Duis sed quam aliquet mauris pretium pulvinar. Praesent in facilisis leo. Nam convallis porttitor blandit. In diam justo, pharetra in congue ac, imperdiet nec lorem. Cras porttitor vitae nunc vel egestas.\n\nNam nec bibendum elit, id feugiat leo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In nibh ipsum, fermentum a bibendum vitae, tempus in diam. Vivamus tellus augue, gravida vel rhoncus sed, tincidunt quis arcu. Proin ultricies molestie arcu eu facilisis. Nam interdum nibh vitae diam semper tincidunt. Proin accumsan dictum mi id scelerisque. Nunc tincidunt, sem ut auctor finibus, dolor massa ultricies ligula, nec mattis nibh est ac tortor. Maecenas posuere enim nulla, et dapibus ex suscipit in. Quisque eu tristique magna. Cras est nisl, feugiat vitae sem vel, condimentum pulvinar nulla. Duis mattis finibus porta.\n\nVestibulum accumsan turpis augue, sed vulputate erat consequat ac. Etiam rhoncus diam eget scelerisque varius. Fusce lacinia, augue vel congue suscipit, tortor libero scelerisque nibh, tempus pretium justo lorem id enim. Quisque mollis dignissim massa, ut ultrices risus hendrerit nec. Cras faucibus egestas diam et dignissim. Nullam id mi magna. Vivamus interdum lacus eget rutrum malesuada. Nullam elementum, nunc et lobortis efficitur, justo leo sollicitudin erat, elementum scelerisque ipsum erat a ipsum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam eget lorem elit. Ut nec gravida ligula. Etiam placerat nisi vel urna condimentum commodo.\n\nDonec feugiat libero eu leo euismod, ut mollis nibh tempus. Integer semper condimentum enim, a congue nisi feugiat eu. Aliquam erat volutpat. Nulla fringilla erat id mi feugiat ultrices. Etiam vitae finibus eros. Sed suscipit metus non ligula porta, sit amet congue enim imperdiet. Ut arcu mi, molestie eu rutrum non, fermentum id est. Donec commodo eros auctor arcu ornare, nec aliquam ex lacinia. Pellentesque eleifend in massa eu dapibus. Nam non molestie nisi. Donec sollicitudin tempor auctor. Integer ipsum ipsum, mattis quis pulvinar in, sollicitudin nec orci. Nunc placerat odio tortor, id pretium nulla maximus id. Cras lacinia hendrerit magna, nec convallis nibh volutpat vel.\n\nDonec non orci odio. Praesent ligula urna, finibus eget ex vitae, rhoncus vehicula ipsum. Donec tristique, turpis a sodales pulvinar, mauris sem vestibulum tellus, nec malesuada odio lectus vitae dolor. Integer eget fermentum lacus, ac tincidunt nisl. Maecenas nunc magna, pellentesque nec aliquet in, viverra sit amet nibh. Sed pretium purus eget nunc sagittis sollicitudin quis fermentum nunc. Donec scelerisque est ultrices enim porta, sed elementum nisi eleifend. Aenean ac orci neque. Sed vel ipsum leo. Cras gravida ligula ac sapien fringilla, eget auctor enim sollicitudin. Mauris nibh neque, dapibus nec sollicitudin ullamcorper, molestie a leo. Nunc pellentesque consequat consequat. Nulla at neque faucibus, varius sem vel, tincidunt nulla. Quisque mi libero, egestas at erat sed, accumsan volutpat arcu.\n\nCras vehicula urna ut sem elementum mattis. Vivamus auctor non elit eget posuere. Mauris non justo in dolor finibus mattis nec sit amet augue. Aliquam faucibus accumsan sapien, vitae eleifend lectus egestas eu. Ut at ante id erat molestie semper vitae quis lacus. Nullam in nulla pharetra, hendrerit risus eu, dignissim velit. Phasellus neque tortor, elementum ac diam et, fermentum efficitur nisi. Duis imperdiet rhoncus nisl, in fringilla leo placerat non. Sed quis massa turpis. Mauris semper est ut ligula ullamcorper placerat. Nam vestibulum vestibulum justo nec sagittis. Etiam bibendum turpis vitae mollis luctus. Proin placerat orci posuere, blandit arcu ut, condimentum tortor.\n\nIn pretium diam nec metus hendrerit, sit amet porta ex varius. Integer sollicitudin vestibulum euismod. Donec nibh dui, pellentesque ac augue porta, molestie lacinia dui. Nulla tempor erat eu tellus dictum aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque volutpat volutpat eros, quis suscipit magna imperdiet at. Cras sagittis lectus vitae mauris vestibulum, ac iaculis nisi ultrices. Cras vel pellentesque diam. Vivamus eu pretium dui, et eleifend libero. Aliquam efficitur turpis maximus mauris gravida, at gravida turpis congue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.\n\nAenean tristique dolor ut porta imperdiet. In at mauris at mauris porta condimentum non ut turpis. Maecenas at dapibus arcu, et vestibulum odio. Nunc eget gravida metus. Sed fermentum nisi et sapien interdum auctor. Aliquam iaculis pulvinar lectus sed pharetra. Curabitur ut mauris nec nibh sagittis luctus vel et enim. Vivamus et pharetra arcu. Proin enim dui, blandit at sapien vitae, vestibulum mollis risus. Duis bibendum, libero eget vestibulum scelerisque, odio lectus tincidunt sem, a bibendum quam erat sed arcu. Pellentesque a diam sit amet est viverra tristique.\n\nCurabitur pharetra tortor purus, vitae hendrerit leo laoreet a. Proin iaculis sit amet diam at blandit. Donec auctor velit vel rhoncus facilisis. Curabitur sollicitudin elit tellus, ac lobortis orci commodo in. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur mollis sapien et dictum auctor. Nullam mollis bibendum volutpat. Phasellus laoreet quam in ligula ultricies malesuada sit amet sit amet quam. Vestibulum mi nisi, euismod id dui eu, luctus scelerisque metus. Donec nibh purus, tincidunt nec est in, maximus fermentum dolor. Suspendisse consequat lacus sit amet quam eleifend mollis. Pellentesque rutrum vitae tellus et ullamcorper. Nam ut blandit velit, eget fermentum enim.\n\nPhasellus in luctus augue. Nulla facilisi. Proin hendrerit vehicula eros ac blandit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In cursus posuere erat. Praesent dapibus tortor vitae fringilla hendrerit. Morbi at neque quis elit pretium porttitor. Curabitur at fermentum dui, et commodo purus. Donec a venenatis arcu. Integer ornare ultricies suscipit. Curabitur a libero in neque tempor convallis. Vestibulum sapien massa, posuere in dolor eu, maximus vestibulum nunc. Integer consequat, orci eu porttitor dignissim, erat est placerat odio, ut suscipit augue massa eget odio.\n\nAliquam rhoncus odio ut feugiat consequat. Duis gravida, augue vel faucibus blandit, mi tortor malesuada nibh, nec volutpat lectus sapien in ante. Fusce vehicula neque quis tempus venenatis. In pulvinar pellentesque libero, ut blandit nulla semper ac. Pellentesque ac diam ullamcorper, facilisis sem at, iaculis nunc. Mauris in eros nec urna lacinia lacinia ut et urna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam mattis tincidunt massa ac sagittis. Aenean eros mi, ultricies eu dictum vitae, mattis a ex.\n\nEtiam sit amet nisi ut neque tincidunt ornare ultrices eu libero. Mauris condimentum, augue vel vehicula tincidunt, tortor turpis imperdiet magna, nec sodales orci dolor id quam. Praesent eu felis pharetra, vehicula erat a, venenatis dolor. Aliquam et venenatis est. Phasellus ultrices ante ligula, sit amet fermentum ante consectetur at. Donec suscipit nulla arcu, non rutrum turpis gravida nec. Suspendisse eget erat ante. Vestibulum cursus purus semper libero fermentum, in fermentum mi eleifend. Duis eleifend fringilla ultrices. Vivamus tempus tellus ut commodo consectetur. Nullam pulvinar nunc at accumsan interdum. Cras urna mi, consequat nec rutrum iaculis, tempus ut felis. Donec a condimentum nibh, in elementum tellus.\n\nMorbi dictum justo id est pellentesque cursus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc aliquam faucibus nisi, nec viverra ante ullamcorper dapibus. Quisque faucibus libero eget neque imperdiet, sit amet mattis dolor blandit. Nam bibendum ullamcorper ultricies. Sed feugiat sit amet eros vitae mollis. Mauris at tellus purus. Nullam tempus est ultrices ornare bibendum. Cras ac lacinia diam. Mauris urna magna, accumsan sit amet congue nec, dictum vitae velit. Morbi vel lacinia turpis. Aliquam ut risus mollis, accumsan orci et, auctor velit. Praesent in fermentum quam. Pellentesque vel augue tellus.\n\nPhasellus at cursus erat. Integer in nunc pretium metus semper facilisis at eu ligula. Cras sodales, ante fringilla convallis suscipit, nunc mauris mollis tortor, sit amet consectetur massa urna vel metus. Vestibulum luctus pretium convallis. Pellentesque urna ante, dictum non felis nec, blandit ultricies mauris. Quisque id quam mollis, varius dolor id, vestibulum magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut aliquam metus vitae ligula commodo, id mattis arcu rutrum. Curabitur bibendum est justo, ac mattis turpis gravida ac. Aenean ullamcorper est in enim luctus congue. Vestibulum ut lacus metus.\n\nNam vel orci auctor, mattis mauris quis, porta dolor. Phasellus ex elit, viverra vitae elit nec, sodales tincidunt neque. Aliquam quis libero sed nibh aliquet lacinia. Ut eu velit felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In interdum lacus eget imperdiet commodo. Aenean ut lectus hendrerit, sodales nisl sit amet, dapibus eros.\n\nQuisque auctor augue lorem, sit amet aliquam risus egestas ac. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse porta consectetur dolor, at mollis tortor euismod pretium. Etiam eleifend tortor ut pulvinar accumsan. Vestibulum lacinia maximus sagittis. Nullam at suscipit nisl, nec sollicitudin dolor. Nullam ornare sagittis est, at lacinia nibh sagittis vitae. Sed convallis tincidunt tempus. Aliquam vel pulvinar mi. Duis hendrerit urna in orci interdum tincidunt. Quisque id accumsan neque, eu lacinia leo. Vivamus accumsan fringilla sodales. In ultrices magna justo, ac blandit arcu gravida eget. Vivamus iaculis vestibulum metus ut commodo. In risus nunc, auctor id orci eu, ornare sagittis nunc.\n\nInteger purus magna, tincidunt ultricies ligula id, viverra ultricies quam. Sed maximus enim quis consequat elementum. Donec eu lacus quis felis vulputate dignissim non sit amet enim. Phasellus condimentum dui efficitur condimentum tristique. Ut pellentesque lacus id lacus commodo efficitur. Etiam purus odio, aliquet ut arcu in, mollis fringilla magna. Sed in massa at dui lacinia iaculis a et nulla. Cras molestie vulputate erat, a faucibus tellus egestas non.\n\nNullam molestie dui elit, nec sodales felis dapibus nec. Vestibulum vulputate urna sed eros sollicitudin, quis ornare nulla venenatis. Vestibulum tincidunt leo a elit elementum, vitae accumsan mi sollicitudin. Nunc vel turpis fermentum, pharetra ante non, tempor mi. Nulla mauris diam, aliquet et orci a, aliquam malesuada ligula. Ut egestas pretium erat, eget maximus justo euismod et. Mauris fermentum volutpat leo, vehicula vulputate ex sagittis in. Nam ut mollis purus. In tempus mattis enim, non rutrum felis venenatis ut.\n\nEtiam nec nulla ac tortor vestibulum auctor. Duis consequat erat dui, at ullamcorper metus fermentum eu. Pellentesque nec orci mauris. Curabitur tempus rutrum congue. Suspendisse aliquet molestie bibendum. Morbi pharetra lectus at risus pulvinar, at faucibus felis maximus. Duis lobortis ipsum nulla, nec auctor leo pharetra sit amet. Duis tempus ut eros at facilisis. Nullam ac sem sit amet orci commodo eleifend. Donec sapien lectus, consectetur sit amet dignissim nec, luctus quis metus. Nam pretium lacinia elit, ac iaculis quam ornare non. Nam eget justo porta, convallis tellus in, volutpat ipsum. Aenean vel ex augue. Phasellus vitae augue sit amet nunc consectetur ullamcorper. Vestibulum nec augue mollis, finibus erat suscipit, congue lectus. Mauris mollis massa sit amet enim maximus facilisis.\n\nPraesent dictum egestas arcu vitae dictum. Suspendisse volutpat blandit tellus ac sodales. Nunc elementum semper tortor, nec bibendum lacus. Nullam tristique nec est sed ornare. Proin vitae est nibh. Donec sit amet posuere urna, vel auctor est. Curabitur eget malesuada sem. Aliquam sit amet dolor nec diam gravida cursus eget in ligula. Curabitur ac risus nisl. Mauris lobortis, arcu vulputate congue convallis, sem mauris maximus lorem, vel tempus felis ligula at libero. Duis cursus cursus leo a finibus. Cras posuere, augue nec mollis hendrerit, orci arcu pellentesque nibh, sit amet efficitur urna eros quis purus. Suspendisse dignissim lacus dolor, et mattis est porttitor sit amet. Proin in metus et neque imperdiet finibus at non tortor. Cras non massa risus. Quisque sed turpis consectetur, finibus ligula eu, bibendum metus.\n\nMauris ac elementum augue. In eget quam in nisi feugiat finibus at in sem. Quisque gravida congue pretium. Vestibulum enim purus, hendrerit a commodo vitae, tempus in diam. Curabitur mattis justo vel blandit pulvinar. Integer quis gravida tellus. In tincidunt cursus elit vitae molestie.\n\nQuisque fringilla ligula eget ante laoreet ultricies eget sed nisl. Aliquam consequat mauris non orci dictum gravida. Curabitur aliquet mauris quis libero malesuada consequat. Maecenas finibus, dolor ut auctor mattis, turpis mi venenatis ex, ac vulputate orci augue sit amet lorem. Morbi ornare mi sapien, at euismod neque elementum vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam massa lacus, cursus quis orci vitae, accumsan luctus mauris.\n\nSuspendisse in sagittis quam. Suspendisse eleifend, leo eu ultrices dictum, justo elit dapibus metus, vel tincidunt lacus ipsum vehicula urna. Sed in ex mi. Vestibulum ultricies metus eros, et ultricies risus ultrices ut. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque pulvinar mauris risus, vitae pharetra sem vestibulum id. Nulla maximus elit ipsum, vel ornare lorem efficitur quis. Etiam."

func (m mdModel) Init() tea.Cmd { return nil }

func (m mdModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
	switch msg := msg.(type) {
	case tea.KeyMsg:
		k := msg.String()
		switch k {
		case "ctrl+q":
			return m, tea.Quit
		case "up":
			m.contentView.LineUp(1)
		case "down":
			m.contentView.LineDown(1)
		}

		m.contentView.SetContent(m.renderContent())

		return m, nil

	case tea.WindowSizeMsg:
		if !m.ready {
			m.contentView = viewport.New(msg.Width, msg.Height)

			m.ready = true
		} else {
			m.contentView.Width = msg.Width
			m.contentView.Height = msg.Height
		}

		m.contentView.SetContent(m.renderContent())
		m.contentView.ScrollPercent()
	}

	return m, nil
}

func beautifyInput(input string) string {
	var jsonData map[string]interface{}

	errUnmarshal := json.Unmarshal([]byte(input), &jsonData)

	if errUnmarshal != nil {
		return input
	}

	b, errMarshal := json.MarshalIndent(jsonData, "", "    ")

	if errMarshal != nil {
		return input
	}

	return string(b)
}

func (m mdModel) renderContent() string {
	//width, _, _ := term.GetSize(int(os.Stdout.Fd()))
	//renderer, err := glamour.NewTermRenderer(
	//	glamour.WithAutoStyle(),
	//	glamour.WithWordWrap(width),
	//	//glamour.WithPreservedNewLines(),
	//)

	if len(m.formatContent) == 0 {
		return "Paste something to beautify"
	}

	//if err != nil {
	//	return ""
	//}

	//str, err := renderer.Render("```json\n" + beautifyInput(input) + "\n```")
	//
	//if err != nil {
	//	return ""
	//}

	return beautifyInput(m.formatContent)

	//return str
}

func (m mdModel) View() string {
	return m.contentView.View()
}

func main() {
	model := mdModel{
		formatContent: loremContent,
	}

	if _, err := tea.NewProgram(model, tea.WithAltScreen()).Run(); err != nil {
		fmt.Println("Bummer, there's been an error:", err)
		os.Exit(1)
	}
}
@omeiirr
Copy link

omeiirr commented Mar 5, 2024

Had the same problem.
Setting m.viewport.HighPerformanceRendering to true fixed it for me.

Although now the text at the top is cropped if I scroll too fast.

@0xBADDCAFE
Copy link

0xBADDCAFE commented Mar 27, 2024

It seems that this issue occurs when scrolling down to the bottom of the ViewPort and includes lines that have been soft wrapped. It can be easily reproduced by editing the artichoke.md file at https://github.com/charmbracelet/bubbletea/tree/v0.25.0/examples/pager.

  • Adjust the height of the terminal so that it is not too large, aiming for around 50 lines.
  • Place a long line near the beginning of artichoke.md that will be soft wrapped and execute it. In this case, it can be observed that you can scroll to the bottom and see the end of the file, meaning the issue is not reproduced.
  • Place a long line that will be soft wrapped a few lines above the bottom of artichoke.md and execute it. In this case, you can reproduce the inability to scroll to the bottom of the artichoke.md file.

@ogios
Copy link

ogios commented Apr 14, 2024

same issue here

@gamebox
Copy link

gamebox commented Apr 19, 2024

I have the same issue, which started when I switched to using glamour for markdown rendering.

@AndreasHibert
Copy link

Same issue here: if a line is too long and it wraps to the next line, you can't see the bottom line, and the problem multiplies.

@ogios
Copy link

ogios commented Apr 19, 2024

i wrote a component which do not wrap but clips the line if anyone's interested: #509

@gamebox
Copy link

gamebox commented Apr 19, 2024

I was able to solve my problem by diving into Glamour's TermRenderer code and realizing that the WithWordWrap option allows you to specify the overall max width before hard wrapping. I set that to the width of the viewport and everything works as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants