123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176 |
- local helpers = require('test.functional.helpers')(after_each)
- local Screen = require('test.functional.ui.screen')
- local global_helpers = require('test.helpers')
- local os = require('os')
- local clear, feed = helpers.clear, helpers.feed
- local assert_alive = helpers.assert_alive
- local command, feed_command = helpers.command, helpers.feed_command
- local eval = helpers.eval
- local eq = helpers.eq
- local neq = helpers.neq
- local expect = helpers.expect
- local exec = helpers.exec
- local exec_lua = helpers.exec_lua
- local insert = helpers.insert
- local meths = helpers.meths
- local curbufmeths = helpers.curbufmeths
- local funcs = helpers.funcs
- local run = helpers.run
- local pcall_err = helpers.pcall_err
- local tbl_contains = global_helpers.tbl_contains
- local curbuf, curwin, curtab = helpers.curbuf, helpers.curwin, helpers.curtab
- local NIL = helpers.NIL
- describe('float window', function()
- before_each(function()
- clear()
- command('hi VertSplit gui=reverse')
- end)
- it('behavior', function()
- -- Create three windows and test that ":wincmd <direction>" changes to the
- -- first window, if the previous window is invalid.
- command('split')
- meths.open_win(0, true, {width=10, height=10, relative='editor', row=0, col=0})
- eq(1002, funcs.win_getid())
- eq('editor', meths.win_get_config(1002).relative)
- command([[
- call nvim_win_close(1001, v:false)
- wincmd j
- ]])
- eq(1000, funcs.win_getid())
- end)
- it('win_execute() should work' , function()
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {'the floatwin', 'abc', 'def'})
- local win = meths.open_win(buf, false, {relative='win', width=16, height=1, row=0, col=10})
- local line = funcs.win_execute(win, 'echo getline(1)')
- eq('\nthe floatwin', line)
- eq('\n1', funcs.win_execute(win, 'echo line(".",'..win.id..')'))
- eq('\n3', funcs.win_execute(win, 'echo line("$",'..win.id..')'))
- eq('\n0', funcs.win_execute(win, 'echo line("$", 123456)'))
- funcs.win_execute(win, 'bwipe!')
- end)
- it("win_execute() call commands that are not allowed when 'hidden' is not set" , function()
- command('set nohidden')
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {'the floatwin'})
- local win = meths.open_win(buf, true, {relative='win', width=16, height=1, row=0, col=10})
- eq('Vim(close):E37: No write since last change (add ! to override)', pcall_err(funcs.win_execute, win, 'close'))
- eq('Vim(bdelete):E89: No write since last change for buffer 2 (add ! to override)', pcall_err(funcs.win_execute, win, 'bdelete'))
- funcs.win_execute(win, 'bwipe!')
- end)
- it('closed immediately by autocmd #11383', function()
- eq('Window was closed immediately',
- pcall_err(exec_lua, [[
- local api = vim.api
- local function crashes(contents)
- local buf = api.nvim_create_buf(false, true)
- local floatwin = api.nvim_open_win(buf, true, {
- relative = 'cursor';
- style = 'minimal';
- row = 0; col = 0;
- height = #contents;
- width = 10;
- })
- api.nvim_buf_set_lines(buf, 0, -1, true, contents)
- local winnr = vim.fn.win_id2win(floatwin)
- api.nvim_command('wincmd p')
- api.nvim_command('autocmd CursorMoved * ++once '..winnr..'wincmd c')
- return buf, floatwin
- end
- crashes{'foo'}
- crashes{'bar'}
- ]]))
- assert_alive()
- end)
- it('closed immediately by autocmd after win_enter #15548', function()
- eq('Window was closed immediately',
- pcall_err(exec_lua, [[
- vim.cmd "autocmd BufLeave * ++once quit!"
- local buf = vim.api.nvim_create_buf(true, true)
- vim.api.nvim_open_win(buf, true, {
- relative = "win",
- row = 0, col = 0,
- width = 1, height = 1,
- noautocmd = false,
- })
- ]]))
- assert_alive()
- end)
- it('opened with correct height', function()
- local height = exec_lua([[
- vim.api.nvim_set_option("winheight", 20)
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- height = 10,
- col = 5,
- row = 1,
- relative = 'editor',
- style = 'minimal',
- width = 15
- }
- local win_id = vim.api.nvim_open_win(bufnr, true, opts)
- return vim.api.nvim_win_get_height(win_id)
- ]])
- eq(10, height)
- end)
- it('opened with correct width', function()
- local width = exec_lua([[
- vim.api.nvim_set_option("winwidth", 20)
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- height = 10,
- col = 5,
- row = 1,
- relative = 'editor',
- style = 'minimal',
- width = 10
- }
- local win_id = vim.api.nvim_open_win(bufnr, true, opts)
- return vim.api.nvim_win_get_width(win_id)
- ]])
- eq(10, width)
- end)
- it('opened with correct position', function()
- local pos = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- width = 10,
- height = 10,
- col = 7,
- row = 9,
- relative = 'editor',
- style = 'minimal'
- }
- local win_id = vim.api.nvim_open_win(bufnr, false, opts)
- return vim.api.nvim_win_get_position(win_id)
- ]])
- eq(9, pos[1])
- eq(7, pos[2])
- end)
- it('opened with correct position relative to the mouse', function()
- meths.input_mouse('left', 'press', '', 0, 10, 10)
- local pos = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- width = 10,
- height = 10,
- col = 1,
- row = 2,
- relative = 'mouse',
- style = 'minimal'
- }
- local win_id = vim.api.nvim_open_win(bufnr, false, opts)
- return vim.api.nvim_win_get_position(win_id)
- ]])
- eq(12, pos[1])
- eq(11, pos[2])
- end)
- it('opened with correct position relative to the cursor', function()
- local pos = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- width = 10,
- height = 10,
- col = 7,
- row = 9,
- relative = 'cursor',
- style = 'minimal'
- }
- local win_id = vim.api.nvim_open_win(bufnr, false, opts)
- return vim.api.nvim_win_get_position(win_id)
- ]])
- eq(9, pos[1])
- eq(7, pos[2])
- end)
- it('opened with correct position relative to another window', function()
- local pos = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local par_opts = {
- width = 50,
- height = 50,
- col = 7,
- row = 9,
- relative = 'editor',
- style = 'minimal'
- }
- local par_win_id = vim.api.nvim_open_win(bufnr, false, par_opts)
- local opts = {
- width = 10,
- height = 10,
- col = 7,
- row = 9,
- relative = 'win',
- style = 'minimal',
- win = par_win_id
- }
- local win_id = vim.api.nvim_open_win(bufnr, false, opts)
- return vim.api.nvim_win_get_position(win_id)
- ]])
- eq(18, pos[1])
- eq(14, pos[2])
- end)
- it('opened with correct position relative to another relative window', function()
- local pos = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local root_opts = {
- width = 50,
- height = 50,
- col = 7,
- row = 9,
- relative = 'editor',
- style = 'minimal'
- }
- local root_win_id = vim.api.nvim_open_win(bufnr, false, root_opts)
- local par_opts = {
- width = 20,
- height = 20,
- col = 2,
- row = 3,
- relative = 'win',
- win = root_win_id,
- style = 'minimal'
- }
- local par_win_id = vim.api.nvim_open_win(bufnr, false, par_opts)
- local opts = {
- width = 10,
- height = 10,
- col = 3,
- row = 2,
- relative = 'win',
- win = par_win_id,
- style = 'minimal'
- }
- local win_id = vim.api.nvim_open_win(bufnr, false, opts)
- return vim.api.nvim_win_get_position(win_id)
- ]])
- eq(14, pos[1])
- eq(12, pos[2])
- end)
- it('is not operated on by windo when non-focusable #15374', function()
- command([[
- let winids = []
- windo call add(winids, win_getid())
- ]])
- local windo_count_before = eval('len(winids)')
- local winid = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- relative = 'editor',
- focusable = false,
- height = 5,
- width = 5,
- col = 5,
- row = 5,
- }
- return vim.api.nvim_open_win(bufnr, false, opts)
- ]])
- command([[
- let winids = []
- windo call add(winids, win_getid())
- ]])
- local windo_count_after = eval('len(winids)')
- eq(windo_count_before, windo_count_after)
- eq(false, tbl_contains(eval('winids'), winid))
- end)
- it('is operated on by windo when focusable', function()
- command([[
- let winids = []
- windo call add(winids, win_getid())
- ]])
- local windo_count_before = eval('len(winids)')
- local winid = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- relative = 'editor',
- focusable = true,
- height = 5,
- width = 5,
- col = 5,
- row = 5,
- }
- return vim.api.nvim_open_win(bufnr, false, opts)
- ]])
- command([[
- let winids = []
- windo call add(winids, win_getid())
- ]])
- local windo_count_after = eval('len(winids)')
- eq(windo_count_before + 1, windo_count_after)
- eq(true, tbl_contains(eval('winids'), winid))
- end)
- it('is not active after windo when non-focusable #15374', function()
- local winid = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- relative = 'editor',
- focusable = false,
- height = 5,
- width = 5,
- col = 5,
- row = 5,
- }
- return vim.api.nvim_open_win(bufnr, false, opts)
- ]])
- command('windo echo')
- neq(winid, eval('win_getid()'))
- end)
- it('is active after windo when focusable', function()
- local winid = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- relative = 'editor',
- focusable = true,
- height = 5,
- width = 5,
- col = 5,
- row = 5,
- }
- return vim.api.nvim_open_win(bufnr, false, opts)
- ]])
- command('windo echo')
- eq(winid, eval('win_getid()'))
- end)
- it('supports windo with focusable and non-focusable floats', function()
- local winids = exec_lua([[
- local result = {vim.api.nvim_get_current_win()}
- local bufnr = vim.api.nvim_create_buf(false, true)
- local opts = {
- relative = 'editor',
- focusable = false,
- height = 5,
- width = 5,
- col = 5,
- row = 5,
- }
- vim.api.nvim_open_win(bufnr, false, opts)
- opts.focusable = true
- table.insert(result, vim.api.nvim_open_win(bufnr, false, opts))
- opts.focusable = false
- vim.api.nvim_open_win(bufnr, false, opts)
- opts.focusable = true
- table.insert(result, vim.api.nvim_open_win(bufnr, false, opts))
- opts.focusable = false
- vim.api.nvim_open_win(bufnr, false, opts)
- return result
- ]])
- table.sort(winids)
- command([[
- let winids = []
- windo call add(winids, win_getid())
- call sort(winids)
- ]])
- eq(winids, eval('winids'))
- end)
- it('no crash with bufpos and non-existent window', function()
- command('new')
- local closed_win = meths.get_current_win().id
- command('close')
- local buf = meths.create_buf(false,false)
- meths.open_win(buf, true, {relative='win', win=closed_win, width=1, height=1, bufpos={0,0}})
- assert_alive()
- end)
- it("no segfault when setting minimal style after clearing local 'fillchars' #19510", function()
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1}
- local float_win = meths.open_win(0, true, float_opts)
- meths.win_set_option(float_win, 'fillchars', NIL)
- float_opts.style = 'minimal'
- meths.win_set_config(float_win, float_opts)
- assert_alive()
- end)
- it("'scroll' is computed correctly when opening float with splitkeep=screen #20684", function()
- meths.set_option('splitkeep', 'screen')
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 10, height = 10}
- local float_win = meths.open_win(0, true, float_opts)
- eq(5, meths.win_get_option(float_win, 'scroll'))
- end)
- it(':unhide works when there are floating windows', function()
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 5, height = 5}
- local w0 = curwin()
- meths.open_win(0, false, float_opts)
- meths.open_win(0, false, float_opts)
- eq(3, #meths.list_wins())
- command('unhide')
- eq({ w0 }, meths.list_wins())
- end)
- it(':all works when there are floating windows', function()
- command('args Xa.txt')
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 5, height = 5}
- local w0 = curwin()
- meths.open_win(0, false, float_opts)
- meths.open_win(0, false, float_opts)
- eq(3, #meths.list_wins())
- command('all')
- eq({ w0 }, meths.list_wins())
- end)
- describe('with only one tabpage,', function()
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1}
- local old_buf, old_win
- before_each(function()
- insert('foo')
- old_buf = curbuf().id
- old_win = curwin().id
- end)
- describe('closing the last non-floating window gives E444', function()
- before_each(function()
- meths.open_win(old_buf, true, float_opts)
- end)
- it('if called from non-floating window', function()
- meths.set_current_win(old_win)
- eq('Vim:E444: Cannot close last window',
- pcall_err(meths.win_close, old_win, false))
- end)
- it('if called from floating window', function()
- eq('Vim:E444: Cannot close last window',
- pcall_err(meths.win_close, old_win, false))
- end)
- end)
- describe("deleting the last non-floating window's buffer", function()
- describe('leaves one window with an empty buffer when there is only one buffer', function()
- local same_buf_float
- before_each(function()
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- end)
- after_each(function()
- eq(old_win, curwin().id)
- expect('')
- eq(1, #meths.list_wins())
- end)
- it('if called from non-floating window', function()
- meths.buf_delete(old_buf, {force = true})
- end)
- it('if called from floating window', function()
- meths.set_current_win(same_buf_float)
- command('autocmd WinLeave * let g:win_leave = nvim_get_current_win()')
- command('autocmd WinEnter * let g:win_enter = nvim_get_current_win()')
- meths.buf_delete(old_buf, {force = true})
- eq(same_buf_float, eval('g:win_leave'))
- eq(old_win, eval('g:win_enter'))
- end)
- end)
- describe('closes other windows with that buffer when there are other buffers', function()
- local same_buf_float, other_buf, other_buf_float
- before_each(function()
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- other_buf = meths.create_buf(true, false).id
- other_buf_float = meths.open_win(other_buf, true, float_opts).id
- insert('bar')
- meths.set_current_win(old_win)
- end)
- after_each(function()
- eq(other_buf, curbuf().id)
- expect('bar')
- eq(2, #meths.list_wins())
- end)
- it('if called from non-floating window', function()
- meths.buf_delete(old_buf, {force = true})
- eq(old_win, curwin().id)
- end)
- it('if called from floating window with the same buffer', function()
- meths.set_current_win(same_buf_float)
- command('autocmd WinLeave * let g:win_leave = nvim_get_current_win()')
- command('autocmd WinEnter * let g:win_enter = nvim_get_current_win()')
- meths.buf_delete(old_buf, {force = true})
- eq(same_buf_float, eval('g:win_leave'))
- eq(old_win, eval('g:win_enter'))
- eq(old_win, curwin().id)
- end)
- -- TODO: this case is too hard to deal with
- pending('if called from floating window with another buffer', function()
- meths.set_current_win(other_buf_float)
- meths.buf_delete(old_buf, {force = true})
- end)
- end)
- describe('creates an empty buffer when there is only one listed buffer', function()
- local same_buf_float, unlisted_buf_float
- before_each(function()
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- local unlisted_buf = meths.create_buf(true, false).id
- unlisted_buf_float = meths.open_win(unlisted_buf, true, float_opts).id
- insert('unlisted')
- command('set nobuflisted')
- meths.set_current_win(old_win)
- end)
- after_each(function()
- expect('')
- eq(2, #meths.list_wins())
- end)
- it('if called from non-floating window', function()
- meths.buf_delete(old_buf, {force = true})
- eq(old_win, curwin().id)
- end)
- it('if called from floating window with the same buffer', function()
- meths.set_current_win(same_buf_float)
- command('autocmd WinLeave * let g:win_leave = nvim_get_current_win()')
- command('autocmd WinEnter * let g:win_enter = nvim_get_current_win()')
- meths.buf_delete(old_buf, {force = true})
- eq(same_buf_float, eval('g:win_leave'))
- eq(old_win, eval('g:win_enter'))
- eq(old_win, curwin().id)
- end)
- -- TODO: this case is too hard to deal with
- pending('if called from floating window with an unlisted buffer', function()
- meths.set_current_win(unlisted_buf_float)
- meths.buf_delete(old_buf, {force = true})
- end)
- end)
- end)
- describe('with splits, deleting the last listed buffer creates an empty buffer', function()
- describe('when a non-floating window has an unlisted buffer', function()
- local same_buf_float
- before_each(function()
- command('botright vnew')
- insert('unlisted')
- command('set nobuflisted')
- meths.set_current_win(old_win)
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- end)
- after_each(function()
- expect('')
- eq(2, #meths.list_wins())
- end)
- it('if called from non-floating window with the deleted buffer', function()
- meths.buf_delete(old_buf, {force = true})
- eq(old_win, curwin().id)
- end)
- it('if called from floating window with the deleted buffer', function()
- meths.set_current_win(same_buf_float)
- meths.buf_delete(old_buf, {force = true})
- eq(same_buf_float, curwin().id)
- end)
- end)
- end)
- end)
- describe('with multiple tabpages but only one listed buffer,', function()
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1}
- local unlisted_buf, old_buf, old_win
- before_each(function()
- insert('unlisted')
- command('set nobuflisted')
- unlisted_buf = curbuf().id
- command('tabnew')
- insert('foo')
- old_buf = curbuf().id
- old_win = curwin().id
- end)
- describe('without splits, deleting the last listed buffer creates an empty buffer', function()
- local same_buf_float
- before_each(function()
- meths.set_current_win(old_win)
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- end)
- after_each(function()
- expect('')
- eq(2, #meths.list_wins())
- eq(2, #meths.list_tabpages())
- end)
- it('if called from non-floating window', function()
- meths.buf_delete(old_buf, {force = true})
- eq(old_win, curwin().id)
- end)
- it('if called from non-floating window in another tabpage', function()
- command('tab split')
- eq(3, #meths.list_tabpages())
- meths.buf_delete(old_buf, {force = true})
- end)
- it('if called from floating window with the same buffer', function()
- meths.set_current_win(same_buf_float)
- command('autocmd WinLeave * let g:win_leave = nvim_get_current_win()')
- command('autocmd WinEnter * let g:win_enter = nvim_get_current_win()')
- meths.buf_delete(old_buf, {force = true})
- eq(same_buf_float, eval('g:win_leave'))
- eq(old_win, eval('g:win_enter'))
- eq(old_win, curwin().id)
- end)
- end)
- describe('with splits, deleting the last listed buffer creates an empty buffer', function()
- local same_buf_float
- before_each(function()
- command('botright vsplit')
- meths.set_current_buf(unlisted_buf)
- meths.set_current_win(old_win)
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- end)
- after_each(function()
- expect('')
- eq(3, #meths.list_wins())
- eq(2, #meths.list_tabpages())
- end)
- it('if called from non-floating window with the deleted buffer', function()
- meths.buf_delete(old_buf, {force = true})
- eq(old_win, curwin().id)
- end)
- it('if called from floating window with the deleted buffer', function()
- meths.set_current_win(same_buf_float)
- meths.buf_delete(old_buf, {force = true})
- eq(same_buf_float, curwin().id)
- end)
- end)
- end)
- describe('with multiple tabpages and multiple listed buffers,', function()
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1}
- local old_tabpage, old_buf, old_win
- before_each(function()
- old_tabpage = curtab().id
- insert('oldtab')
- command('tabnew')
- old_buf = curbuf().id
- old_win = curwin().id
- end)
- describe('closing the last non-floating window', function()
- describe('closes the tabpage when all floating windows are closeable', function()
- local same_buf_float
- before_each(function()
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- end)
- after_each(function()
- eq(old_tabpage, curtab().id)
- expect('oldtab')
- eq(1, #meths.list_tabpages())
- end)
- it('if called from non-floating window', function()
- meths.win_close(old_win, false)
- end)
- it('if called from floating window', function()
- meths.set_current_win(same_buf_float)
- meths.win_close(old_win, false)
- end)
- end)
- describe('gives E5601 when there are non-closeable floating windows', function()
- local other_buf_float
- before_each(function()
- command('set nohidden')
- local other_buf = meths.create_buf(true, false).id
- other_buf_float = meths.open_win(other_buf, true, float_opts).id
- insert('foo')
- meths.set_current_win(old_win)
- end)
- it('if called from non-floating window', function()
- eq('Vim:E5601: Cannot close window, only floating window would remain',
- pcall_err(meths.win_close, old_win, false))
- end)
- it('if called from floating window', function()
- meths.set_current_win(other_buf_float)
- eq('Vim:E5601: Cannot close window, only floating window would remain',
- pcall_err(meths.win_close, old_win, false))
- end)
- end)
- end)
- describe("deleting the last non-floating window's buffer", function()
- describe('closes the tabpage when all floating windows are closeable', function()
- local same_buf_float, other_buf, other_buf_float
- before_each(function()
- same_buf_float = meths.open_win(old_buf, false, float_opts).id
- other_buf = meths.create_buf(true, false).id
- other_buf_float = meths.open_win(other_buf, true, float_opts).id
- meths.set_current_win(old_win)
- end)
- after_each(function()
- eq(old_tabpage, curtab().id)
- expect('oldtab')
- eq(1, #meths.list_tabpages())
- end)
- it('if called from non-floating window', function()
- meths.buf_delete(old_buf, {force = false})
- end)
- it('if called from floating window with the same buffer', function()
- meths.set_current_win(same_buf_float)
- meths.buf_delete(old_buf, {force = false})
- end)
- -- TODO: this case is too hard to deal with
- pending('if called from floating window with another buffer', function()
- meths.set_current_win(other_buf_float)
- meths.buf_delete(old_buf, {force = false})
- end)
- end)
- -- TODO: what to do when there are non-closeable floating windows?
- end)
- end)
- local function with_ext_multigrid(multigrid)
- local screen, attrs
- before_each(function()
- screen = Screen.new(40,7)
- screen:attach {ext_multigrid=multigrid}
- attrs = {
- [0] = {bold=true, foreground=Screen.colors.Blue},
- [1] = {background = Screen.colors.LightMagenta},
- [2] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue1},
- [3] = {bold = true},
- [4] = {bold = true, reverse = true},
- [5] = {reverse = true},
- [6] = {background = Screen.colors.LightMagenta, bold = true, reverse = true},
- [7] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [8] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [9] = {background = Screen.colors.LightGrey, underline = true},
- [10] = {background = Screen.colors.LightGrey, underline = true, bold = true, foreground = Screen.colors.Magenta},
- [11] = {bold = true, foreground = Screen.colors.Magenta},
- [12] = {background = Screen.colors.Red, bold = true, foreground = Screen.colors.Blue1},
- [13] = {background = Screen.colors.WebGray},
- [14] = {foreground = Screen.colors.Brown},
- [15] = {background = Screen.colors.Grey20},
- [16] = {background = Screen.colors.Grey20, bold = true, foreground = Screen.colors.Blue1},
- [17] = {background = Screen.colors.Yellow},
- [18] = {foreground = Screen.colors.Brown, background = Screen.colors.Grey20},
- [19] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.WebGray},
- [20] = {bold = true, foreground = Screen.colors.Brown},
- [21] = {background = Screen.colors.Gray90},
- [22] = {background = Screen.colors.LightRed},
- [23] = {foreground = Screen.colors.Black, background = Screen.colors.White};
- [24] = {foreground = Screen.colors.Black, background = Screen.colors.Grey80};
- [25] = {blend = 100, background = Screen.colors.Gray0};
- [26] = {blend = 80, background = Screen.colors.Gray0};
- [27] = {background = Screen.colors.LightGray};
- [28] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGray};
- }
- screen:set_default_attr_ids(attrs)
- end)
- it('can be created and reconfigured', function()
- local buf = meths.create_buf(false,false)
- local win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- local expected_pos = {
- [4]={{id=1001}, 'NW', 1, 2, 5, true},
- }
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1: }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {0:~ }{1: }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='editor', row=0, col=10})
- expected_pos[4][4] = 0
- expected_pos[4][5] = 10
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1: }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {1: } |
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_close(win, false)
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]])
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it('draws correctly with redrawdebug=compositor', function()
- -- NB: we do not test that it produces the "correct" debug info
- -- (as it is intermediate only, and is allowed to change by internal
- -- refactors). Only check that it doesn't cause permanent glitches,
- -- or something.
- command("set redrawdebug=compositor")
- command("set wd=1")
- local buf = meths.create_buf(false,false)
- local win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- local expected_pos = {
- [4]={{id=1001}, 'NW', 1, 2, 5, true},
- }
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1: }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {0:~ }{1: }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='editor', row=0, col=10})
- expected_pos[4][4] = 0
- expected_pos[4][5] = 10
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1: }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {1: } |
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_close(win, false)
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]])
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it('return their configuration', function()
- local buf = meths.create_buf(false, false)
- local win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=3, col=5, zindex=60})
- local expected = {anchor='NW', col=5, external=false, focusable=true, height=2, relative='editor', row=3, width=20, zindex=60}
- eq(expected, meths.win_get_config(win))
- eq({relative='', external=false, focusable=true}, meths.win_get_config(0))
- if multigrid then
- meths.win_set_config(win, {external=true, width=10, height=1})
- eq({external=true,focusable=true,width=10,height=1,relative=''}, meths.win_get_config(win))
- end
- end)
- it('defaults to NormalFloat highlight and inherited options', function()
- command('set number')
- command('hi NormalFloat guibg=#333333')
- feed('ix<cr>y<cr><esc>gg')
- local win = meths.open_win(0, false, {relative='editor', width=20, height=4, row=4, col=10})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {14: 1 }^x |
- {14: 2 }y |
- {14: 3 } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {18: 1 }{15:x }|
- {18: 2 }{15:y }|
- {18: 3 }{15: }|
- {16:~ }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect([[
- {14: 1 }^x |
- {14: 2 }y |
- {14: 3 } {18: 1 }{15:x } |
- {0:~ }{18: 2 }{15:y }{0: }|
- {0:~ }{18: 3 }{15: }{0: }|
- {0:~ }{16:~ }{0: }|
- |
- ]])
- end
- local buf = meths.create_buf(false, true)
- meths.win_set_buf(win, buf)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {14: 1 }^x |
- {14: 2 }y |
- {14: 3 } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {18: 1 }{15: }|
- {16:~ }|
- {16:~ }|
- {16:~ }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect([[
- {14: 1 }^x |
- {14: 2 }y |
- {14: 3 } {18: 1 }{15: } |
- {0:~ }{16:~ }{0: }|
- {0:~ }{16:~ }{0: }|
- {0:~ }{16:~ }{0: }|
- |
- ]])
- end
- end)
- it("can use 'minimal' style", function()
- command('set number')
- command('set signcolumn=yes')
- command('set colorcolumn=1')
- command('set cursorline')
- command('set foldcolumn=1')
- command('hi NormalFloat guibg=#333333')
- feed('ix<cr>y<cr><esc>gg')
- local win = meths.open_win(0, false, {relative='editor', width=20, height=4, row=4, col=10, style='minimal'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {15:x }|
- {15:y }|
- {15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect{grid=[[
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } {15:x } |
- {0:~ }{15:y }{0: }|
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]]}
- end
- -- signcolumn=yes still works if there actually are signs
- command('sign define piet1 text=𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄ texthl=Search')
- command('sign place 1 line=1 name=piet1 buffer=1')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {19: }{17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{15:x }|
- {19: }{15:y }|
- {19: }{15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect([[
- {19: }{17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } {17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{15:x } |
- {0:~ }{19: }{15:y }{0: }|
- {0:~ }{19: }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]])
- end
- command('sign unplace 1 buffer=1')
- local buf = meths.create_buf(false, true)
- meths.win_set_buf(win, buf)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {15: }|
- {15: }|
- {15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect([[
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } {15: } |
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]])
- end
- end)
- it("would not break 'minimal' style with signcolumn=auto:[min]-[max]", function()
- command('set number')
- command('set signcolumn=auto:1-3')
- command('set colorcolumn=1')
- command('set cursorline')
- command('set foldcolumn=1')
- command('hi NormalFloat guibg=#333333')
- feed('ix<cr>y<cr><esc>gg')
- local win = meths.open_win(0, false, {relative='editor', width=20, height=4, row=4, col=10, style='minimal'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {15:x }|
- {15:y }|
- {15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect{grid=[[
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } {15:x } |
- {0:~ }{15:y }{0: }|
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]]}
- end
- command('sign define piet1 text=𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄ texthl=Search')
- command('sign place 1 line=1 name=piet1 buffer=1')
- -- signcolumn=auto:1-3 still works if there actually are signs
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {19: }{17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{15:x }|
- {19: }{15:y }|
- {19: }{15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect([[
- {19: }{17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } {17:𐌢̀́̂̃̅̄𐌢̀́̂̃̅̄}{15:x } |
- {0:~ }{19: }{15:y }{0: }|
- {0:~ }{19: }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]])
- end
- command('sign unplace 1 buffer=1')
- local buf = meths.create_buf(false, true)
- meths.win_set_buf(win, buf)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {15: }|
- {15: }|
- {15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect([[
- {19: }{20: 1 }{22:^x}{21: }|
- {19: }{14: 2 }{22:y} |
- {19: }{14: 3 }{22: } {15: } |
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]])
- end
- end)
- it("would not break 'minimal' style with statuscolumn set", function()
- command('set number')
- command('set signcolumn=yes')
- command('set colorcolumn=1')
- command('set cursorline')
- command('set foldcolumn=1')
- command('set statuscolumn=%l%s%C')
- command('hi NormalFloat guibg=#333333')
- feed('ix<cr>y<cr><esc>gg')
- meths.open_win(0, false, {relative='editor', width=20, height=4, row=4, col=10, style='minimal'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- {20:1}{19: }{20: }{22:^x}{21: }|
- {14:2}{19: }{14: }{22:y} |
- {14:3}{19: }{14: }{22: } |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {15:x }|
- {15:y }|
- {15: }|
- {15: }|
- ]], float_pos={[4] = {{id = 1001}, "NW", 1, 4, 10, true}}}
- else
- screen:expect{grid=[[
- {20:1}{19: }{20: }{22:^x}{21: }|
- {14:2}{19: }{14: }{22:y} |
- {14:3}{19: }{14: }{22: } {15:x } |
- {0:~ }{15:y }{0: }|
- {0:~ }{15: }{0: }|
- {0:~ }{15: }{0: }|
- |
- ]]}
- end
- end)
- it('can have border', function()
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {' halloj! ',
- ' BORDAA '})
- local win = meths.open_win(buf, false, {relative='editor', width=9, height=2, row=2, col=5, border="double"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔═════════╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:╔═════════╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {border="single"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:┌─────────┐}|
- {5:│}{1: halloj! }{5:│}|
- {5:│}{1: BORDAA }{5:│}|
- {5:└─────────┘}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:┌─────────┐}{0: }|
- {0:~ }{5:│}{1: halloj! }{5:│}{0: }|
- {0:~ }{5:│}{1: BORDAA }{5:│}{0: }|
- {0:~ }{5:└─────────┘}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {border="rounded"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╭─────────╮}|
- {5:│}{1: halloj! }{5:│}|
- {5:│}{1: BORDAA }{5:│}|
- {5:╰─────────╯}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:╭─────────╮}{0: }|
- {0:~ }{5:│}{1: halloj! }{5:│}{0: }|
- {0:~ }{5:│}{1: BORDAA }{5:│}{0: }|
- {0:~ }{5:╰─────────╯}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {border="solid"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5: }|
- {5: }{1: halloj! }{5: }|
- {5: }{1: BORDAA }{5: }|
- {5: }|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5: }{0: }|
- {0:~ }{5: }{1: halloj! }{5: }{0: }|
- {0:~ }{5: }{1: BORDAA }{5: }{0: }|
- {0:~ }{5: }{0: }|
- |
- ]]}
- end
- -- support: ascii char, UTF-8 char, composed char, highlight per char
- meths.win_set_config(win, {border={"x", {"å", "ErrorMsg"}, {"\\"}, {"n̈̊", "Search"}}})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:x}{7:ååååååååå}{5:\}|
- {17:n̈̊}{1: halloj! }{17:n̈̊}|
- {17:n̈̊}{1: BORDAA }{17:n̈̊}|
- {5:\}{7:ååååååååå}{5:x}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:x}{7:ååååååååå}{5:\}{0: }|
- {0:~ }{17:n̈̊}{1: halloj! }{17:n̈̊}{0: }|
- {0:~ }{17:n̈̊}{1: BORDAA }{17:n̈̊}{0: }|
- {0:~ }{5:\}{7:ååååååååå}{5:x}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {border="none"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1: halloj! }|
- {1: BORDAA }|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{1: halloj! }{0: }|
- {0:~ }{1: BORDAA }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- meths.win_set_config(win, {border={"", "", "", ">", "", "", "", "<"}})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:<}{1: halloj! }{5:>}|
- {5:<}{1: BORDAA }{5:>}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:<}{1: halloj! }{5:>}{0: }|
- {0:~ }{5:<}{1: BORDAA }{5:>}{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- meths.win_set_config(win, {border={"", "_", "", "", "", "-", "", ""}})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:_________}|
- {1: halloj! }|
- {1: BORDAA }|
- {5:---------}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:_________}{0: }|
- {0:~ }{1: halloj! }{0: }|
- {0:~ }{1: BORDAA }{0: }|
- {0:~ }{5:---------}{0: }|
- |
- ]]}
- end
- insert [[
- neeed some dummy
- background text
- to show the effect
- of color blending
- of border shadow
- ]]
- meths.win_set_config(win, {border="shadow"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- neeed some dummy |
- background text |
- to show the effect |
- of color blending |
- of border shadow |
- ^ |
- ## grid 3
- |
- ## grid 5
- {1: halloj! }{25: }|
- {1: BORDAA }{26: }|
- {25: }{26: }|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 6, curline = 5, curcol = 0, linecount = 6, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- neeed some dummy |
- background text |
- to {1: halloj! }{23:e}ffect |
- of {1: BORDAA }{24:n}ding |
- of {23:b}{24:order sha}dow |
- ^ |
- |
- ]]}
- end
- end)
- it('validates title title_pos', function()
- local buf = meths.create_buf(false,false)
- eq("title requires border to be set",
- pcall_err(meths.open_win,buf, false, {
- relative='editor', width=9, height=2, row=2, col=5, title='Title',
- }))
- eq("title_pos requires title to be set",
- pcall_err(meths.open_win,buf, false, {
- relative='editor', width=9, height=2, row=2, col=5,
- border='single', title_pos='left',
- }))
- end)
- it('validate title_pos in nvim_win_get_config', function()
- local title_pos = exec_lua([[
- local bufnr = vim.api.nvim_create_buf(false, false)
- local opts = {
- relative = 'editor',
- col = 2,
- row = 5,
- height = 2,
- width = 9,
- border = 'double',
- title = 'Test',
- title_pos = 'center'
- }
- local win_id = vim.api.nvim_open_win(bufnr, true, opts)
- return vim.api.nvim_win_get_config(win_id).title_pos
- ]])
- eq('center', title_pos)
- end)
- it('border with title', function()
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {' halloj! ',
- ' BORDAA '})
- local win = meths.open_win(buf, false, {
- relative='editor', width=9, height=2, row=2, col=5, border="double",
- title = "Left",title_pos = "left",
- })
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔}{11:Left}{5:═════╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:╔}{11:Left}{5:═════╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {title= "Center",title_pos="center"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔═}{11:Center}{5:══╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:╔═}{11:Center}{5:══╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {title= "Right",title_pos="right"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔════}{11:Right}{5:╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:╔════}{11:Right}{5:╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- |
- ]]}
- end
- meths.win_set_config(win, {title= { {"🦄"},{"BB"}},title_pos="right"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔═════}🦄BB{5:╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 2, 5, true }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{5:╔═════}🦄BB{5:╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- |
- ]]}
- end
- end)
- it('terminates border on edge of viewport when window extends past viewport', function()
- local buf = meths.create_buf(false, false)
- meths.open_win(buf, false, {relative='editor', width=40, height=7, row=0, col=0, border="single", zindex=201})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {5:┌────────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:└────────────────────────────────────────┘}|
- ]], float_pos={
- [4] = { { id = 1001 }, "NW", 1, 0, 0, true, 201 }
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {5:^┌──────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:└──────────────────────────────────────┘}|
- ]]}
- end
- end)
- it('with border show popupmenu', function()
- screen:try_resize(40,10)
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {'aaa aab ',
- 'abb acc ', ''})
- meths.open_win(buf, true, {relative='editor', width=9, height=3, row=0, col=5, border="double"})
- feed 'G'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔═════════╗}|
- {5:║}{1:aaa aab }{5:║}|
- {5:║}{1:abb acc }{5:║}|
- {5:║}{1:^ }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 0, 5, true };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {5:╔═════════╗} |
- {0:~ }{5:║}{1:aaa aab }{5:║}{0: }|
- {0:~ }{5:║}{1:abb acc }{5:║}{0: }|
- {0:~ }{5:║}{1:^ }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- feed 'i<c-x><c-p>'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- }{8:match 1 of 4} |
- ## grid 5
- {5:╔═════════╗}|
- {5:║}{1:aaa aab }{5:║}|
- {5:║}{1:abb acc }{5:║}|
- {5:║}{1:acc^ }{5:║}|
- {5:╚═════════╝}|
- ## grid 6
- {1: aaa }|
- {1: aab }|
- {1: abb }|
- {13: acc }|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 0, 5, true, 50 };
- [6] = { { id = -1 }, "NW", 5, 4, 0, false, 100 };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount=1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 3, linecount=3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {5:╔═════════╗} |
- {0:~ }{5:║}{1:aaa aab }{5:║}{0: }|
- {0:~ }{5:║}{1:abb acc }{5:║}{0: }|
- {0:~ }{5:║}{1:acc^ }{5:║}{0: }|
- {0:~ }{1: aaa }{0: }|
- {0:~ }{1: aab }{0: }|
- {0:~ }{1: abb }{0: }|
- {0:~ }{13: acc }{0: }|
- {0:~ }|
- {3:-- }{8:match 1 of 4} |
- ]]}
- end
- feed '<esc>'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:╔═════════╗}|
- {5:║}{1:aaa aab }{5:║}|
- {5:║}{1:abb acc }{5:║}|
- {5:║}{1:ac^c }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 0, 5, true };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 2, linecount = 3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {5:╔═════════╗} |
- {0:~ }{5:║}{1:aaa aab }{5:║}{0: }|
- {0:~ }{5:║}{1:abb acc }{5:║}{0: }|
- {0:~ }{5:║}{1:ac^c }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- exec([[
- nnoremenu Test.foo :
- nnoremenu Test.bar :
- nnoremenu Test.baz :
- ]])
- feed ':popup Test<CR>'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :popup Test |
- ## grid 5
- {5:╔═════════╗}|
- {5:║}{1:aaa aab }{5:║}|
- {5:║}{1:abb acc }{5:║}|
- {5:║}{1:ac^c }{5:║}|
- {5:╚═════════╝}|
- ## grid 6
- {1: foo }|
- {1: bar }|
- {1: baz }|
- ]], float_pos={
- [5] = { { id = 1002 }, "NW", 1, 0, 5, true };
- [6] = { { id = -1 }, "NW", 5, 4, 2, false, 250 };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 2, linecount = 3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {5:╔═════════╗} |
- {0:~ }{5:║}{1:aaa aab }{5:║}{0: }|
- {0:~ }{5:║}{1:abb acc }{5:║}{0: }|
- {0:~ }{5:║}{1:ac^c }{5:║}{0: }|
- {0:~ }{5:╚═}{1: foo }{5:═══╝}{0: }|
- {0:~ }{1: bar }{0: }|
- {0:~ }{1: baz }{0: }|
- {0:~ }|
- {0:~ }|
- :popup Test |
- ]]}
- end
- end)
- it('show ruler of current floating window', function()
- command 'set ruler'
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {'aaa aab ',
- 'abb acc '})
- meths.open_win(buf, true, {relative='editor', width=9, height=3, row=0, col=5})
- feed 'gg'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- 1,1 All |
- ## grid 5
- {1:^aaa aab }|
- {1:abb acc }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {1:^aaa aab } |
- {0:~ }{1:abb acc }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- 1,1 All |
- ]]}
- end
- feed 'w'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- 1,5 All |
- ## grid 5
- {1:aaa ^aab }|
- {1:abb acc }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 4, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {1:aaa ^aab } |
- {0:~ }{1:abb acc }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- 1,5 All |
- ]]}
- end
- end)
- it("correct ruler position in current float with 'rulerformat' set", function()
- command 'set ruler rulerformat=fish:<><'
- meths.open_win(0, true, {relative='editor', width=9, height=3, row=0, col=5})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- fish:<>< |
- ## grid 4
- {1:^ }|
- {2:~ }|
- {2:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 0, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {1:^ } |
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- fish:<>< |
- ]]}
- end
- end)
- it('does not show ruler of not-last current float during ins-completion', function()
- screen:try_resize(50,9)
- command 'set ruler showmode'
- meths.open_win(0, false, {relative='editor', width=3, height=3, row=0, col=0})
- meths.open_win(0, false, {relative='editor', width=3, height=3, row=0, col=5})
- feed '<c-w>w'
- neq('', meths.win_get_config(0).relative)
- neq(funcs.winnr '$', funcs.winnr())
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- 0,0-1 All |
- ## grid 4
- {1: }|
- {2:~ }|
- {2:~ }|
- ## grid 5
- {1:^ }|
- {2:~ }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- [4] = {{id = 1001}, "NW", 1, 0, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {1: } {1:^ } |
- {2:~ }{0: }{2:~ }{0: }|
- {2:~ }{0: }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- 0,0-1 All |
- ]]}
- end
- feed 'i<c-x>'
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)} |
- ## grid 4
- {1: }|
- {2:~ }|
- {2:~ }|
- ## grid 5
- {1:^ }|
- {2:~ }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- [4] = {{id = 1001}, "NW", 1, 0, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- {1: } {1:^ } |
- {2:~ }{0: }{2:~ }{0: }|
- {2:~ }{0: }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {3:-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)} |
- ]]}
- end
- end)
- it('can have minimum size', function()
- insert("the background text")
- local buf = meths.create_buf(false, true)
- meths.buf_set_lines(buf, 0, -1, true, {'x'})
- local win = meths.open_win(buf, false, {relative='win', width=1, height=1, row=0, col=4, focusable=false})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- the background tex^t |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:x}|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 2, 0, 4, false}
- }}
- else
- screen:expect([[
- the {1:x}ackground tex^t |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='win', row=0, col=15})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- the background tex^t |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:x}|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 2, 0, 15, false}
- }}
- else
- screen:expect([[
- the background {1:x}ex^t |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_close(win,false)
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- the background tex^t |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]])
- else
- screen:expect([[
- the background tex^t |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- describe('no crash when rearranging windows', function()
- local function test_rearrange_windows(cmd)
- command('set laststatus=2')
- screen:try_resize(40, 13)
- command('args X1 X2 X3 X4 X5 X6')
- command('sargument 2')
- command('sargument 3')
- local w3 = curwin()
- command('sargument 4')
- local w4 = curwin()
- command('sargument 5')
- command('sargument 6')
- local float_opts = { relative = 'editor', row = 6, col = 0, width = 40, height = 1 }
- meths.win_set_config(w3, float_opts)
- meths.win_set_config(w4, float_opts)
- command('wincmd =')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [8:----------------------------------------]|
- [8:----------------------------------------]|
- {4:X6 }|
- [7:----------------------------------------]|
- [7:----------------------------------------]|
- {5:X5 }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {5:X2 }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:X1 }|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- |
- {0:~ }|
- ## grid 5
- {1: }|
- ## grid 6
- {1: }|
- ## grid 7
- |
- {0:~ }|
- ## grid 8
- ^ |
- {0:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 6, 0, true, 50};
- [6] = {{id = 1003}, "NW", 1, 6, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [6] = {win = {id = 1003}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [7] = {win = {id = 1004}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [8] = {win = {id = 1005}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {4:X6 }|
- |
- {0:~ }|
- {5:X5 }|
- {1: }|
- {0:~ }|
- {5:X2 }|
- |
- {0:~ }|
- {5:X1 }|
- |
- ]]}
- end
- command(cmd)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- {4:X1 }|
- [4:----------------------------------------]|
- {5:X2 }|
- [9:----------------------------------------]|
- {5:X3 }|
- [10:----------------------------------------]|
- {5:X4 }|
- [7:----------------------------------------]|
- {5:X5 }|
- [8:----------------------------------------]|
- {5:X6 }|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- ## grid 3
- |
- ## grid 4
- |
- ## grid 7
- |
- ## grid 8
- |
- ## grid 9
- |
- ## grid 10
- |
- ]], win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [7] = {win = {id = 1004}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [8] = {win = {id = 1005}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [9] = {win = {id = 1006}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [10] = {win = {id = 1007}, topline = 0, botline = 1, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {4:X1 }|
- |
- {5:X2 }|
- |
- {5:X3 }|
- |
- {5:X4 }|
- |
- {5:X5 }|
- |
- {5:X6 }|
- |
- ]]}
- end
- end
- it('using :unhide', function()
- test_rearrange_windows('unhide')
- end)
- it('using :all', function()
- test_rearrange_windows('all')
- end)
- end)
- it('API has proper error messages', function()
- local buf = meths.create_buf(false,false)
- eq("Invalid key: 'bork'",
- pcall_err(meths.open_win,buf, false, {width=20,height=2,bork=true}))
- eq("'win' key is only valid with relative='win'",
- pcall_err(meths.open_win,buf, false, {width=20,height=2,relative='editor',row=0,col=0,win=0}))
- eq("Only one of 'relative' and 'external' must be used",
- pcall_err(meths.open_win,buf, false, {width=20,height=2,relative='editor',row=0,col=0,external=true}))
- eq("Invalid value of 'relative' key",
- pcall_err(meths.open_win,buf, false, {width=20,height=2,relative='shell',row=0,col=0}))
- eq("Invalid value of 'anchor' key",
- pcall_err(meths.open_win,buf, false, {width=20,height=2,relative='editor',row=0,col=0,anchor='bottom'}))
- eq("'relative' requires 'row'/'col' or 'bufpos'",
- pcall_err(meths.open_win,buf, false, {width=20,height=2,relative='editor'}))
- eq("'width' key must be a positive Integer",
- pcall_err(meths.open_win,buf, false, {width=-1,height=2,relative='editor', row=0, col=0}))
- eq("'height' key must be a positive Integer",
- pcall_err(meths.open_win,buf, false, {width=20,height=-1,relative='editor', row=0, col=0}))
- eq("'height' key must be a positive Integer",
- pcall_err(meths.open_win,buf, false, {width=20,height=0,relative='editor', row=0, col=0}))
- eq("Must specify 'width'",
- pcall_err(meths.open_win,buf, false, {relative='editor', row=0, col=0}))
- eq("Must specify 'height'",
- pcall_err(meths.open_win,buf, false, {relative='editor', row=0, col=0, width=2}))
- end)
- it('can be placed relative window or cursor', function()
- screen:try_resize(40,9)
- meths.buf_set_lines(0, 0, -1, true, {'just some', 'example text'})
- feed('gge')
- local oldwin = meths.get_current_win()
- command('below split')
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ]])
- else
- screen:expect([[
- just some |
- example text |
- {0:~ }|
- {5:[No Name] [+] }|
- jus^t some |
- example text |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- local buf = meths.create_buf(false,false)
- -- no 'win' arg, relative default window
- local win = meths.open_win(buf, false, {relative='win', width=20, height=2, row=0, col=10})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ## grid 5
- {1: }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 4, 0, 10, true}
- }}
- else
- screen:expect([[
- just some |
- example text |
- {0:~ }|
- {5:[No Name] [+] }|
- jus^t some {1: } |
- example te{2:~ } |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='cursor', row=1, col=-2})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ## grid 5
- {1: }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 4, 1, 1, true}
- }}
- else
- screen:expect([[
- just some |
- example text |
- {0:~ }|
- {5:[No Name] [+] }|
- jus^t some |
- e{1: } |
- {0:~}{2:~ }{0: }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='cursor', row=0, col=0, anchor='SW'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ## grid 5
- {1: }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "SW", 4, 0, 3, true}
- }}
- else
- screen:expect([[
- just some |
- example text |
- {0:~ }{1: }{0: }|
- {5:[No}{2:~ }{5: }|
- jus^t some |
- example text |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='win', win=oldwin, row=1, col=10, anchor='NW'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ## grid 5
- {1: }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 2, 1, 10, true}
- }}
- else
- screen:expect([[
- just some |
- example te{1: } |
- {0:~ }{2:~ }{0: }|
- {5:[No Name] [+] }|
- jus^t some |
- example text |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='win', win=oldwin, row=3, col=39, anchor='SE'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ## grid 5
- {1: }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "SE", 2, 3, 39, true}
- }}
- else
- screen:expect([[
- just some |
- example text {1: } |
- {0:~ }{2:~ }{0: }|
- {5:[No Name] [+] }|
- jus^t some |
- example text |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='win', win=0, row=0, col=50, anchor='NE'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some |
- example text |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- jus^t some |
- example text |
- {0:~ }|
- ## grid 5
- {1: }|
- {2:~ }|
- ]], float_pos={
- [5] = {{id = 1002}, "NE", 4, 0, 50, true}
- }, win_viewport = {
- [2] = {
- topline = 0,
- botline = 3,
- curline = 0,
- curcol = 3,
- linecount = 2,
- sum_scroll_delta = 0,
- win = { id = 1000 },
- },
- [4] = {
- topline = 0,
- botline = 3,
- curline = 0,
- curcol = 3,
- linecount = 2,
- sum_scroll_delta = 0,
- win = { id = 1001 }
- },
- [5] = {
- topline = 0,
- botline = 2,
- curline = 0,
- curcol = 0,
- linecount = 1,
- sum_scroll_delta = 0,
- win = { id = 1002 }
- }
- }}
- else
- screen:expect([[
- just some |
- example text |
- {0:~ }|
- {5:[No Name] [+] }|
- jus^t some {1: }|
- example text {2:~ }|
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- end)
- it('always anchor to corner including border', function()
- screen:try_resize(40,13)
- meths.buf_set_lines(0, 0, -1, true, {'just some example text', 'some more example text'})
- feed('ggeee')
- command('below split')
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]])
- else
- screen:expect([[
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {5:[No Name] [+] }|
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- local buf = meths.create_buf(false, false)
- meths.buf_set_lines(buf, 0, -1, true, {' halloj! ',
- ' BORDAA '})
- local win = meths.open_win(buf, false, {relative='cursor', width=9, height=2, row=1, col=-2, border="double"})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 6
- {5:╔═════════╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [6] = {{id = 1003}, "NW", 4, 1, 14, true}
- }}
- else
- screen:expect([[
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {5:[No Name] [+] }|
- just some exampl^e text |
- some more exam{5:╔═════════╗} |
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='cursor', row=0, col=-2, anchor='NE'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 6
- {5:╔═════════╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [6] = {{id = 1003}, "NE", 4, 0, 14, true}
- }}
- else
- screen:expect([[
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {5:[No Name] [+] }|
- jus{5:╔═════════╗}pl^e text |
- som{5:║}{1: halloj! }{5:║}ple text |
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {0:~ }{5:╚═════════╝}{0: }|
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='cursor', row=1, col=-2, anchor='SE'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 6
- {5:╔═════════╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [6] = {{id = 1003}, "SE", 4, 1, 14, true}
- }}
- else
- screen:expect([[
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }{5:╔═════════╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {5:[No║}{1: BORDAA }{5:║ }|
- jus{5:╚═════════╝}pl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='cursor', row=0, col=-2, anchor='SW'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- just some example text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 6
- {5:╔═════════╗}|
- {5:║}{1: halloj! }{5:║}|
- {5:║}{1: BORDAA }{5:║}|
- {5:╚═════════╝}|
- ]], float_pos={
- [6] = {{id = 1003}, "SW", 4, 0, 14, true}
- }}
- else
- screen:expect([[
- just some example text |
- some more example text |
- {0:~ }{5:╔═════════╗}{0: }|
- {0:~ }{5:║}{1: halloj! }{5:║}{0: }|
- {0:~ }{5:║}{1: BORDAA }{5:║}{0: }|
- {5:[No Name] [+] ╚═════════╝ }|
- just some exampl^e text |
- some more example text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- end)
- it('anchored to another floating window updated in the same call #14735', function()
- feed('i<CR><CR><CR><Esc>')
- exec([[
- let b1 = nvim_create_buf(v:true, v:false)
- let b2 = nvim_create_buf(v:true, v:false)
- let b3 = nvim_create_buf(v:true, v:false)
- let b4 = nvim_create_buf(v:true, v:false)
- let b5 = nvim_create_buf(v:true, v:false)
- let b6 = nvim_create_buf(v:true, v:false)
- let b7 = nvim_create_buf(v:true, v:false)
- let b8 = nvim_create_buf(v:true, v:false)
- call setbufline(b1, 1, '1')
- call setbufline(b2, 1, '2')
- call setbufline(b3, 1, '3')
- call setbufline(b4, 1, '4')
- call setbufline(b5, 1, '5')
- call setbufline(b6, 1, '6')
- call setbufline(b7, 1, '7')
- call setbufline(b8, 1, '8')
- let o1 = #{relative: 'editor', row: 1, col: 10, width: 5, height: 1}
- let w1 = nvim_open_win(b1, v:false, o1)
- let o2 = extendnew(o1, #{col: 30})
- let w2 = nvim_open_win(b2, v:false, o2)
- let o3 = extendnew(o1, #{relative: 'win', win: w1, anchor: 'NE', col: 0})
- let w3 = nvim_open_win(b3, v:false, o3)
- let o4 = extendnew(o3, #{win: w2})
- let w4 = nvim_open_win(b4, v:false, o4)
- let o5 = extendnew(o3, #{win: w3, anchor: 'SE', row: 0})
- let w5 = nvim_open_win(b5, v:false, o5)
- let o6 = extendnew(o5, #{win: w4})
- let w6 = nvim_open_win(b6, v:false, o6)
- let o7 = extendnew(o5, #{win: w5, anchor: 'SW', col: 5})
- let w7 = nvim_open_win(b7, v:false, o7)
- let o8 = extendnew(o7, #{win: w6})
- let w8 = nvim_open_win(b8, v:false, o8)
- ]])
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- |
- |
- ^ |
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:1 }|
- ## grid 6
- {1:2 }|
- ## grid 7
- {1:3 }|
- ## grid 8
- {1:4 }|
- ## grid 9
- {1:5 }|
- ## grid 10
- {1:6 }|
- ## grid 11
- {1:7 }|
- ## grid 12
- {1:8 }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 1, 10, true, 50};
- [6] = {{id = 1003}, "NW", 1, 1, 30, true, 50};
- [7] = {{id = 1004}, "NE", 5, 1, 0, true, 50};
- [8] = {{id = 1005}, "NE", 6, 1, 0, true, 50};
- [9] = {{id = 1006}, "SE", 7, 0, 0, true, 50};
- [10] = {{id = 1007}, "SE", 8, 0, 0, true, 50};
- [11] = {{id = 1008}, "SW", 9, 0, 5, true, 50};
- [12] = {{id = 1009}, "SW", 10, 0, 5, true, 50};
- }}
- else
- screen:expect([[
- {1:7 } {1:8 } |
- {1:5 } {1:1 } {1:6 } {1:2 } |
- {1:3 } {1:4 } |
- ^ |
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- -- Reconfigure in different directions
- exec([[
- let o1 = extendnew(o1, #{anchor: 'NW'})
- call nvim_win_set_config(w8, o1)
- let o2 = extendnew(o2, #{anchor: 'NW'})
- call nvim_win_set_config(w4, o2)
- let o3 = extendnew(o3, #{win: w8})
- call nvim_win_set_config(w2, o3)
- let o4 = extendnew(o4, #{win: w4})
- call nvim_win_set_config(w1, o4)
- let o5 = extendnew(o5, #{win: w2})
- call nvim_win_set_config(w6, o5)
- let o6 = extendnew(o6, #{win: w1})
- call nvim_win_set_config(w3, o6)
- let o7 = extendnew(o7, #{win: w6})
- call nvim_win_set_config(w5, o7)
- let o8 = extendnew(o8, #{win: w3})
- call nvim_win_set_config(w7, o8)
- ]])
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- |
- |
- ^ |
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:1 }|
- ## grid 6
- {1:2 }|
- ## grid 7
- {1:3 }|
- ## grid 8
- {1:4 }|
- ## grid 9
- {1:5 }|
- ## grid 10
- {1:6 }|
- ## grid 11
- {1:7 }|
- ## grid 12
- {1:8 }|
- ]], float_pos={
- [5] = {{id = 1002}, "NE", 8, 1, 0, true, 50};
- [6] = {{id = 1003}, "NE", 12, 1, 0, true, 50};
- [7] = {{id = 1004}, "SE", 5, 0, 0, true, 50};
- [8] = {{id = 1005}, "NW", 1, 1, 30, true, 50};
- [9] = {{id = 1006}, "SW", 10, 0, 5, true, 50};
- [10] = {{id = 1007}, "SE", 6, 0, 0, true, 50};
- [11] = {{id = 1008}, "SW", 7, 0, 5, true, 50};
- [12] = {{id = 1009}, "NW", 1, 1, 10, true, 50};
- }}
- else
- screen:expect([[
- {1:5 } {1:7 } |
- {1:6 } {1:8 } {1:3 } {1:4 } |
- {1:2 } {1:1 } |
- ^ |
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- -- Not clear how cycles should behave, but they should not hang or crash
- exec([[
- let o1 = extendnew(o1, #{relative: 'win', win: w7})
- call nvim_win_set_config(w1, o1)
- let o2 = extendnew(o2, #{relative: 'win', win: w8})
- call nvim_win_set_config(w2, o2)
- let o3 = extendnew(o3, #{win: w1})
- call nvim_win_set_config(w3, o3)
- let o4 = extendnew(o4, #{win: w2})
- call nvim_win_set_config(w4, o4)
- let o5 = extendnew(o5, #{win: w3})
- call nvim_win_set_config(w5, o5)
- let o6 = extendnew(o6, #{win: w4})
- call nvim_win_set_config(w6, o6)
- let o7 = extendnew(o7, #{win: w5})
- call nvim_win_set_config(w7, o7)
- let o8 = extendnew(o8, #{win: w6})
- call nvim_win_set_config(w8, o8)
- redraw
- ]])
- end)
- it('can be placed relative text in a window', function()
- screen:try_resize(30,5)
- local firstwin = meths.get_current_win().id
- meths.buf_set_lines(0, 0, -1, true, {'just some', 'example text that is wider than the window', '', '', 'more text'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [3:------------------------------]|
- ## grid 2
- ^just some |
- example text that is wider tha|
- n the window |
- |
- ## grid 3
- |
- ]]}
- else
- screen:expect{grid=[[
- ^just some |
- example text that is wider tha|
- n the window |
- |
- |
- ]]}
- end
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'some info!'})
- local win = meths.open_win(buf, false, {relative='win', width=12, height=1, bufpos={1,32}})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [3:------------------------------]|
- ## grid 2
- ^just some |
- example text that is wider tha|
- n the window |
- |
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 3, 2, true }
- }}
- else
- screen:expect{grid=[[
- ^just some |
- example text that is wider tha|
- n the window |
- {1:some info! } |
- |
- ]]}
- end
- eq({relative='win', width=12, height=1, bufpos={1,32}, anchor='NW',
- external=false, col=0, row=1, win=firstwin, focusable=true, zindex=50}, meths.win_get_config(win))
- feed('<c-e>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [3:------------------------------]|
- ## grid 2
- ^example text that is wider tha|
- n the window |
- |
- |
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 2, 2, true }
- }}
- else
- screen:expect{grid=[[
- ^example text that is wider tha|
- n the window |
- {1:some info! } |
- |
- |
- ]]}
- end
- screen:try_resize(45,5)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:---------------------------------------------]|
- [2:---------------------------------------------]|
- [2:---------------------------------------------]|
- [2:---------------------------------------------]|
- [3:---------------------------------------------]|
- ## grid 2
- ^example text that is wider than the window |
- |
- |
- more text |
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 1, 32, true }
- }}
- else
- -- note: appears misaligned due to cursor
- screen:expect{grid=[[
- ^example text that is wider than the window |
- {1:some info! } |
- |
- more text |
- |
- ]]}
- end
- screen:try_resize(25,10)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [3:-------------------------]|
- ## grid 2
- ^example text that is wide|
- r than the window |
- |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 2, 7, true }
- }}
- else
- screen:expect{grid=[[
- ^example text that is wide|
- r than the window |
- {1:some info! } |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- meths.win_set_config(win, {relative='win', bufpos={1,32}, anchor='SW'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [3:-------------------------]|
- ## grid 2
- ^example text that is wide|
- r than the window |
- |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "SW", 2, 1, 7, true }
- }}
- else
- screen:expect{grid=[[
- ^example{1:some info! }s wide|
- r than the window |
- |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- command('set laststatus=0')
- command('botright vnew')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [2:----]{5:│}[6:--------------------]|
- [3:-------------------------]|
- ## grid 2
- exam|
- ple |
- text|
- tha|
- t is|
- wid|
- er t|
- han |
- the |
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ## grid 6
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "SW", 2, 8, 0, true }
- }}
- else
- screen:expect{grid=[[
- exam{5:│}^ |
- ple {5:│}{0:~ }|
- text{5:│}{0:~ }|
- tha{5:│}{0:~ }|
- t is{5:│}{0:~ }|
- wid{5:│}{0:~ }|
- er t{5:│}{0:~ }|
- {1:some info! }{0: }|
- the {5:│}{0:~ }|
- |
- ]]}
- end
- command('close')
- meths.win_set_config(win, {relative='win', bufpos={1,32}, anchor='NW', col=-2})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [3:-------------------------]|
- ## grid 2
- ^example text that is wide|
- r than the window |
- |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 2, 5, true }
- }}
- else
- screen:expect{grid=[[
- ^example text that is wide|
- r than the window |
- {1:some info! } |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- meths.win_set_config(win, {relative='win', bufpos={1,32}, row=2})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [3:-------------------------]|
- ## grid 2
- ^example text that is wide|
- r than the window |
- |
- |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 3, 7, true }
- }}
- else
- screen:expect{grid=[[
- ^example text that is wide|
- r than the window |
- |
- {1:some info! } |
- more text |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- command('%fold')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [3:-------------------------]|
- ## grid 2
- {28:^+-- 5 lines: just some··}|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:some info! }|
- ]], float_pos={
- [5] = { {
- id = 1002
- }, "NW", 2, 2, 0, true }
- }}
- else
- screen:expect{grid=[[
- {28:^+-- 5 lines: just some··}|
- {0:~ }|
- {1:some info! }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- end)
- it('validates cursor even when window is not entered', function()
- screen:try_resize(30,5)
- command("set nowrap")
- insert([[some text that is wider than the window]])
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [3:------------------------------]|
- ## grid 2
- that is wider than the windo^w |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]])
- else
- screen:expect([[
- that is wider than the windo^w |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- local buf = meths.create_buf(false,true)
- meths.buf_set_lines(buf, 0, -1, true, {'some floaty text'})
- meths.open_win(buf, false, {relative='editor', width=20, height=1, row=3, col=1})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [2:------------------------------]|
- [3:------------------------------]|
- ## grid 2
- that is wider than the windo^w |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:some floaty text }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 3, 1, true}
- }}
- else
- screen:expect([[
- that is wider than the windo^w |
- {0:~ }|
- {0:~ }|
- {0:~}{1:some floaty text }{0: }|
- |
- ]])
- end
- end)
- if multigrid then
- pending("supports second UI without multigrid", function()
- local session2 = helpers.connect(eval('v:servername'))
- print(session2:request("nvim_eval", "2+2"))
- local screen2 = Screen.new(40,7)
- screen2:attach(nil, session2)
- screen2:set_default_attr_ids(attrs)
- local buf = meths.create_buf(false,false)
- meths.open_win(buf, true, {relative='editor', width=20, height=2, row=2, col=5})
- local expected_pos = {
- [2]={{id=1001}, 'NW', 1, 2, 5}
- }
- screen:expect{grid=[[
- ## grid 1
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ## grid 2
- {1:^ }|
- {2:~ }|
- ]], float_pos=expected_pos}
- screen2:expect([[
- |
- {0:~ }|
- {0:~ }{1:^ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end)
- end
- it('handles resized screen', function()
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'such', 'very', 'float'})
- local win = meths.open_win(buf, false, {relative='editor', width=15, height=4, row=2, col=10})
- local expected_pos = {
- [5]={{id=1002}, 'NW', 1, 2, 10, true},
- }
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:such }|
- {1:very }|
- {1:float }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {0:~ }{1:such }{0: }|
- {0:~ }{1:very }{0: }|
- {0:~ }{1:float }{0: }|
- {0:~ }{2:~ }{0: }|
- |
- ]])
- end
- screen:try_resize(40,5)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:such }|
- {1:very }|
- {1:float }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {1:such } |
- {0:~ }{1:very }{0: }|
- {0:~ }{1:float }{0: }|
- {0:~ }{2:~ }{0: }|
- |
- ]])
- end
- screen:try_resize(40,4)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:such }|
- {1:very }|
- {1:float }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {1:such } |
- {0:~ }{1:very }{0: }|
- {0:~ }{1:float }{0: }|
- |
- ]])
- end
- screen:try_resize(40,3)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:such }|
- {1:very }|
- {1:float }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {1:such } |
- {0:~ }{1:very }{0: }|
- |
- ]])
- end
- feed('<c-w>wjj')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:such }|
- {1:very }|
- {1:^float }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- {1:such } |
- {0:~ }{1:very }{0: }|
- ^ |
- ]])
- end
- screen:try_resize(40,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:such }|
- {1:very }|
- {1:^float }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{1:such }{0: }|
- {0:~ }{1:very }{0: }|
- {0:~ }{1:^float }{0: }|
- {0:~ }{2:~ }{0: }|
- |
- ]])
- end
- meths.win_set_config(win, {height=3})
- feed('gg')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{1:^such }{0: }|
- {0:~ }{1:very }{0: }|
- {0:~ }{1:float }{0: }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(26,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------]|
- [2:--------------------------]|
- [2:--------------------------]|
- [2:--------------------------]|
- [2:--------------------------]|
- [2:--------------------------]|
- [3:--------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{1:^such }{0: }|
- {0:~ }{1:very }{0: }|
- {0:~ }{1:float }{0: }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(25,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [2:-------------------------]|
- [3:-------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{1:^such }|
- {0:~ }{1:very }|
- {0:~ }{1:float }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(24,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------------------]|
- [2:------------------------]|
- [2:------------------------]|
- [2:------------------------]|
- [2:------------------------]|
- [2:------------------------]|
- [3:------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{1:^such }|
- {0:~ }{1:very }|
- {0:~ }{1:float }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(16,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------]|
- [2:----------------]|
- [2:----------------]|
- [2:----------------]|
- [2:----------------]|
- [2:----------------]|
- [3:----------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~}{1:^such }|
- {0:~}{1:very }|
- {0:~}{1:float }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(15,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:---------------]|
- [2:---------------]|
- [2:---------------]|
- [2:---------------]|
- [2:---------------]|
- [2:---------------]|
- [3:---------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {1:^such }|
- {1:very }|
- {1:float }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(14,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------]|
- [2:--------------]|
- [2:--------------]|
- [2:--------------]|
- [2:--------------]|
- [2:--------------]|
- [3:--------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {1:^such }|
- {1:very }|
- {1:float }|
- {0:~ }|
- |
- ]])
- end
- screen:try_resize(12,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------]|
- [2:------------]|
- [2:------------]|
- [2:------------]|
- [2:------------]|
- [2:------------]|
- [3:------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {1:^such }|
- {1:very }|
- {1:float }|
- {0:~ }|
- |
- ]])
- end
- -- Doesn't make much sense, but check nvim doesn't crash
- screen:try_resize(1,1)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:------------]|
- [3:------------]|
- ## grid 2
- |
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- {1:^such }|
- |
- ]])
- end
- screen:try_resize(40,7)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^such }|
- {1:very }|
- {1:float }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{1:^such }{0: }|
- {0:~ }{1:very }{0: }|
- {0:~ }{1:float }{0: }|
- {0:~ }|
- |
- ]])
- end
- end)
- it('does not crash with inccommand #9379', function()
- local expected_pos = {
- [4]={{id=1001}, 'NW', 1, 2, 0, true},
- }
- command("set inccommand=split")
- command("set laststatus=2")
- local buf = meths.create_buf(false,false)
- meths.open_win(buf, true, {relative='editor', width=30, height=3, row=2, col=0})
- insert([[
- foo
- bar
- ]])
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] }|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:foo }|
- {1:bar }|
- {1:^ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {1:foo }{0: }|
- {1:bar }{0: }|
- {1:^ }{0: }|
- {5:[No Name] }|
- |
- ]])
- end
- feed(':%s/.')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[Preview] }|
- [3:----------------------------------------]|
- ## grid 2
- |
- ## grid 3
- :%s/.^ |
- ## grid 4
- {17:f}{1:oo }|
- {17:b}{1:ar }|
- {1: }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {5:[No Name] }|
- {17:f}{1:oo } |
- {17:b}{1:ar } |
- {1: }{0: }|
- {5:[Preview] }|
- :%s/.^ |
- ]])
- end
- feed('<Esc>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] }|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:foo }|
- {1:bar }|
- {1:^ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- |
- {0:~ }|
- {1:foo }{0: }|
- {1:bar }{0: }|
- {1:^ }{0: }|
- {5:[No Name] }|
- |
- ]])
- end
- end)
- it('does not crash when set cmdheight #9680', function()
- local buf = meths.create_buf(false,false)
- meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- command("set cmdheight=2")
- eq(1, meths.eval('1'))
- end)
- describe('and completion', function()
- before_each(function()
- local buf = meths.create_buf(false,false)
- local win = meths.open_win(buf, true, {relative='editor', width=12, height=4, row=2, col=5})
- meths.win_set_option(win , 'winhl', 'Normal:ErrorMsg')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7:^ }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{7:^ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- |
- ]])
- end
- end)
- it('with builtin popupmenu', function()
- feed('ix ')
- funcs.complete(3, {'aa', 'word', 'longtext'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {7:x aa^ }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ## grid 5
- {13: aa }|
- {1: word }|
- {1: longtext }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true, 50},
- [5] = {{ id = -1 }, "NW", 4, 1, 1, false, 100}
- }}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{7:x aa^ }{0: }|
- {0:~ }{12:~}{13: aa }{0: }|
- {0:~ }{12:~}{1: word }{0: }|
- {0:~ }{12:~}{1: longtext }{0: }|
- {3:-- INSERT --} |
- ]])
- end
- feed('<esc>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7:x a^a }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{7:x a^a }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- |
- ]])
- end
- feed('<c-w>wi')
- funcs.complete(1, {'xx', 'yy', 'zz'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- xx^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {7:x aa }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ## grid 5
- {13:xx }|
- {1:yy }|
- {1:zz }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true, 50},
- [5] = {{ id = -1 }, "NW", 2, 1, 0, false, 100}
- }}
- else
- screen:expect([[
- xx^ |
- {13:xx }{0: }|
- {1:yy }{7: }{0: }|
- {1:zz }{12: }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {3:-- INSERT --} |
- ]])
- end
- feed('<c-y>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- xx^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {7:x aa }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }}
- else
- screen:expect([[
- xx^ |
- {0:~ }|
- {0:~ }{7:x aa }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {3:-- INSERT --} |
- ]])
- end
- end)
- it('command menu rendered above cursor (pum_above)', function()
- command('set wildmenu wildmode=longest:full wildoptions=pum')
- feed(':sign u<tab>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sign un^ |
- ## grid 4
- {7: }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ## grid 5
- {1: undefine }|
- {1: unplace }|
- ]], float_pos={
- [5] = {{id = -1}, "SW", 1, 6, 5, false, 250};
- [4] = {{id = 1001}, "NW", 1, 2, 5, true, 50};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }{7: }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{1: undefine }{0: }|
- {0:~ }{1: unplace }{0: }|
- :sign un^ |
- ]]}
- end
- end)
- it('with ext_popupmenu', function()
- screen:set_option('ext_popupmenu', true)
- feed('ix ')
- funcs.complete(3, {'aa', 'word', 'longtext'})
- local items = {{"aa", "", "", ""}, {"word", "", "", ""}, {"longtext", "", "", ""}}
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {7:x aa^ }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }, popupmenu={
- anchor = {4, 0, 2}, items = items, pos = 0
- }}
- else
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }{7:x aa^ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {3:-- INSERT --} |
- ]], popupmenu={
- anchor = {1, 2, 7}, items = items, pos = 0
- }}
- end
- feed('<esc>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7:x a^a }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }}
- else
- screen:expect([[
- |
- {0:~ }|
- {0:~ }{7:x a^a }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- |
- ]])
- end
- feed('<c-w>wi')
- funcs.complete(1, {'xx', 'yy', 'zz'})
- items = {{"xx", "", "", ""}, {"yy", "", "", ""}, {"zz", "", "", ""}}
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- xx^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {7:x aa }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }, popupmenu={
- anchor = {2, 0, 0}, items = items, pos = 0
- }}
- else
- screen:expect{grid=[[
- xx^ |
- {0:~ }|
- {0:~ }{7:x aa }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {3:-- INSERT --} |
- ]], popupmenu={
- anchor = {1, 0, 0}, items = items, pos = 0
- }}
- end
- feed('<c-y>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- xx^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {7:x aa }|
- {12:~ }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={
- [4] = {{ id = 1001 }, "NW", 1, 2, 5, true},
- }}
- else
- screen:expect([[
- xx^ |
- {0:~ }|
- {0:~ }{7:x aa }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {0:~ }{12:~ }{0: }|
- {3:-- INSERT --} |
- ]])
- end
- end)
- end)
- describe('float shown after pum', function()
- local win
- before_each(function()
- command('hi NormalFloat guibg=#333333')
- feed('i')
- funcs.complete(1, {'aa', 'word', 'longtext'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {13:aa }|
- {1:word }|
- {1:longtext }|
- ]], float_pos={
- [4] = {{id = -1}, "NW", 2, 1, 0, false, 100}}
- }
- else
- screen:expect([[
- aa^ |
- {13:aa }{0: }|
- {1:word }{0: }|
- {1:longtext }{0: }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- local buf = meths.create_buf(false,true)
- meths.buf_set_lines(buf,0,-1,true,{"some info", "about item"})
- win = meths.open_win(buf, false, {relative='cursor', width=12, height=2, row=1, col=10})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {13:aa }|
- {1:word }|
- {1:longtext }|
- ## grid 6
- {15:some info }|
- {15:about item }|
- ]], float_pos={
- [4] = {{id = -1}, "NW", 2, 1, 0, false, 100},
- [6] = {{id = 1002}, "NW", 2, 1, 12, true, 50},
- }}
- else
- screen:expect([[
- aa^ |
- {13:aa }{15:e info }{0: }|
- {1:word }{15:ut item }{0: }|
- {1:longtext }{0: }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- end)
- it('and close pum first', function()
- feed('<c-y>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 6
- {15:some info }|
- {15:about item }|
- ]], float_pos={
- [6] = {{id = 1002}, "NW", 2, 1, 12, true},
- }}
- else
- screen:expect([[
- aa^ |
- {0:~ }{15:some info }{0: }|
- {0:~ }{15:about item }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- meths.win_close(win, false)
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ]])
- else
- screen:expect([[
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- end)
- it('and close float first', function()
- meths.win_close(win, false)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {13:aa }|
- {1:word }|
- {1:longtext }|
- ]], float_pos={
- [4] = {{id = -1}, "NW", 2, 1, 0, false, 100},
- }}
- else
- screen:expect([[
- aa^ |
- {13:aa }{0: }|
- {1:word }{0: }|
- {1:longtext }{0: }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- feed('<c-y>')
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ]])
- else
- screen:expect([[
- aa^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- end)
- end)
- it("can use Normal as background", function()
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf,0,-1,true,{"here", "float"})
- local win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- meths.set_option_value('winhl', 'Normal:Normal', {win=win})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- here |
- float |
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 2, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }here {0: }|
- {0:~ }float {0: }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- end)
- describe("handles :wincmd", function()
- local win
- local expected_pos
- before_each(function()
- -- the default, but be explicit:
- command("set laststatus=1")
- command("set hidden")
- meths.buf_set_lines(0,0,-1,true,{"x"})
- local buf = meths.create_buf(false,false)
- win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- meths.buf_set_lines(buf,0,-1,true,{"y"})
- expected_pos = {
- [4]={{id=1001}, 'NW', 1, 2, 5, true}
- }
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("w", function()
- feed("<c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed("<c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("w with focusable=false", function()
- meths.win_set_config(win, {focusable=false})
- expected_pos[4][6] = false
- feed("<c-w>wi") -- i to provoke redraw
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- feed("<esc><c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("W", function()
- feed("<c-w>W")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed("<c-w>W")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("focus by mouse", function()
- if multigrid then
- meths.input_mouse('left', 'press', '', 4, 0, 0)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- meths.input_mouse('left', 'press', '', 0, 2, 5)
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- if multigrid then
- meths.input_mouse('left', 'press', '', 1, 0, 0)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- meths.input_mouse('left', 'press', '', 0, 0, 0)
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("focus by mouse (focusable=false)", function()
- meths.win_set_config(win, {focusable=false})
- meths.buf_set_lines(0, -1, -1, true, {"a"})
- expected_pos[4][6] = false
- if multigrid then
- meths.input_mouse('left', 'press', '', 4, 0, 0)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- a |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- meths.input_mouse('left', 'press', '', 0, 2, 5)
- screen:expect([[
- x |
- ^a |
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- if multigrid then
- meths.input_mouse('left', 'press', '', 1, 0, 0)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- a |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos, unchanged=true}
- else
- meths.input_mouse('left', 'press', '', 0, 0, 0)
- screen:expect([[
- ^x |
- a |
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("j", function()
- feed("<c-w>ji") -- INSERT to trigger screen change
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- {3:-- INSERT --} |
- ]])
- end
- feed("<esc><c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed("<c-w>j")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("vertical resize + - _", function()
- feed('<c-w>w')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>+')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>2-')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>4_')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- {2:~ }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- |
- ]])
- end
- feed('<c-w>_')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- {2:~ }|
- {2:~ }|
- {2:~ }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x {1:^y } |
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{2:~ }{0: }|
- |
- ]])
- end
- end)
- it("horizontal resize > < |", function()
- feed('<c-w>w')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>10<lt>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>15|')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- feed('<c-w>|')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {1:^y }|
- {2:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("s :split (non-float)", function()
- feed("<c-w>s")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {4:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {4:[No N}{1:y }{4: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {5:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {5:[No N}{1:y }{5: }|
- ^x {2:~ } |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {5:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ## grid 5
- x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {5:[No N}{1:^y }{5: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>w")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {4:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {4:[No N}{1:y }{4: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- |
- ]])
- end
- end)
- it("s :split (float)", function()
- feed("<c-w>w<c-w>s")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {4:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^y |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^y |
- {0:~ }|
- {4:[No N}{1:y }{4: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>j")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {5:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- y |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- y |
- {0:~ }|
- {5:[No N}{1:y }{5: }|
- ^x {2:~ } |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>ji")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {5:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- ## grid 3
- {3:-- INSERT --} |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- y |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- y |
- {0:~ }|
- {5:[No N}{1:y }{5: }|
- ^x {2:~ } |
- {0:~ }|
- {4:[No Name] [+] }|
- {3:-- INSERT --} |
- ]])
- end
- end)
- it(":new (non-float)", function()
- feed(":new<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {4:[No Name] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- :new |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {4:[No N}{1:y }{4: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- :new |
- ]])
- end
- end)
- it(":new (float)", function()
- feed("<c-w>w:new<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {4:[No Name] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- :new |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ |
- {0:~ }|
- {4:[No N}{1:y }{4: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- :new |
- ]])
- end
- end)
- it("v :vsplit (non-float)", function()
- feed("<c-w>v")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- {4:[No Name] [+] }{5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x {5:│}x |
- {0:~ }{5:│}{0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{5:│}{0:~ }|
- {4:[No Name] [+] }{5:[No Name] [+] }|
- |
- ]])
- end
- end)
- it(":vnew (non-float)", function()
- feed(":vnew<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- {4:[No Name] }{5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :vnew |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {5:│}x |
- {0:~ }{5:│}{0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{5:│}{0:~ }|
- {4:[No Name] }{5:[No Name] [+] }|
- :vnew |
- ]])
- end
- end)
- it(":vnew (float)", function()
- feed("<c-w>w:vnew<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- [5:--------------------]{5:│}[2:-------------------]|
- {4:[No Name] }{5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :vnew |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^ {5:│}x |
- {0:~ }{5:│}{0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{5:│}{0:~ }|
- {4:[No Name] }{5:[No Name] [+] }|
- :vnew |
- ]])
- end
- end)
- it("q (:quit) last non-float exits nvim", function()
- command('autocmd VimLeave * call rpcrequest(1, "exit")')
- -- avoid unsaved change in other buffer
- feed("<c-w><c-w>:w Xtest_written2<cr><c-w><c-w>")
- -- quit in last non-float
- feed(":wq Xtest_written<cr>")
- local exited = false
- local function on_request(name, args)
- eq("exit", name)
- eq({}, args)
- exited = true
- return 0
- end
- local function on_setup()
- feed(":wq Xtest_written<cr>")
- end
- run(on_request, nil, on_setup)
- os.remove('Xtest_written')
- os.remove('Xtest_written2')
- eq(exited, true)
- end)
- it(':quit two floats in a row', function()
- -- enter first float
- feed('<c-w><c-w>')
- -- enter second float
- meths.open_win(0, true, {relative='editor', width=20, height=2, row=4, col=8})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- {1:^y }|
- {2:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 2, 5, true},
- [5] = {{id = 1002}, "NW", 1, 4, 8, true}
- }}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- |
- ]])
- end
- feed(':quit<cr>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :quit |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 2, 5, true},
- }}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- :quit |
- ]])
- end
- feed(':quit<cr>')
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :quit |
- ]])
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- :quit |
- ]])
- end
- assert_alive()
- end)
- it("o (:only) non-float", function()
- feed("<c-w>o")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]]}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("o (:only) float fails", function()
- feed("<c-w>w<c-w>o")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- [3:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {7:E5601: Cannot close window, only floatin}|
- {7:g window would remain} |
- {8:Press ENTER or type command to continue}^ |
- ## grid 4
- {1:y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:y }{0: }|
- {4: }|
- {7:E5601: Cannot close window, only floatin}|
- {7:g window would remain} |
- {8:Press ENTER or type command to continue}^ |
- ]])
- end
- -- test message clear
- feed('<cr>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {0:~ }{1:^y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("o (:only) non-float with split", function()
- feed("<c-w>s")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {4:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- ^x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {4:[No N}{1:y }{4: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>o")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 3
- |
- ## grid 5
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]]}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("o (:only) float with split", function()
- feed("<c-w>s<c-w>W")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {5:[No Name] [+] }|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:^y }|
- {2:~ }|
- ## grid 5
- x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {5:[No N}{1:^y }{5: }|
- x {2:~ } |
- {0:~ }|
- {5:[No Name] [+] }|
- |
- ]])
- end
- feed("<c-w>o")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- {5:[No Name] [+] }|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- [3:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- {7:E5601: Cannot close window, only floatin}|
- {7:g window would remain} |
- {8:Press ENTER or type command to continue}^ |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x |
- {0:~ }|
- {5:[No N}{1:y }{5: }|
- {4: }|
- {7:E5601: Cannot close window, only floatin}|
- {7:g window would remain} |
- {8:Press ENTER or type command to continue}^ |
- ]])
- end
- end)
- it("J (float)", function()
- feed("<c-w>w<c-w>J")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- ^y |
- {0:~ }|
- ]]}
- else
- screen:expect([[
- x |
- {0:~ }|
- {5:[No Name] [+] }|
- ^y |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- if multigrid then
- meths.win_set_config(0, {external=true, width=30, height=2})
- expected_pos = {[4]={external=true}}
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- ^y |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- eq("UI doesn't support external windows",
- pcall_err(meths.win_set_config, 0, {external=true, width=30, height=2}))
- return
- end
- feed("<c-w>J")
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- ^y |
- {0:~ }|
- ]])
- end
- end)
- it('J (float with border)', function()
- meths.win_set_config(win, {relative='editor', width=20, height=2, row=2, col=5, border='single'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {5:┌────────────────────┐}|
- {5:│}{1:y }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:└────────────────────┘}|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- ^x |
- {0:~ }|
- {0:~ }{5:┌────────────────────┐}{0: }|
- {0:~ }{5:│}{1:y }{5:│}{0: }|
- {0:~ }{5:│}{2:~ }{5:│}{0: }|
- {0:~ }{5:└────────────────────┘}{0: }|
- |
- ]])
- end
- feed("<c-w>w<c-w>J")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- {5:[No Name] [+] }|
- [4:----------------------------------------]|
- [4:----------------------------------------]|
- {4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- ^y |
- {0:~ }|
- ]]}
- else
- screen:expect([[
- x |
- {0:~ }|
- {5:[No Name] [+] }|
- ^y |
- {0:~ }|
- {4:[No Name] [+] }|
- |
- ]])
- end
- end)
- it('movements with nested split layout', function()
- command("set hidden")
- feed("<c-w>s<c-w>v<c-w>b<c-w>v")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [6:--------------------]{5:│}[5:-------------------]|
- [6:--------------------]{5:│}[5:-------------------]|
- {5:[No Name] [+] [No Name] [+] }|
- [7:--------------------]{5:│}[2:-------------------]|
- [7:--------------------]{5:│}[2:-------------------]|
- {4:[No Name] [+] }{5:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- x |
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5
- x |
- {0:~ }|
- ## grid 6
- x |
- {0:~ }|
- ## grid 7
- ^x |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- x {5:│}x |
- {0:~ }{5:│}{0:~ }|
- {5:[No N}{1:y }{5:Name] [+] }|
- ^x {2:~ } |
- {0:~ }{5:│}{0:~ }|
- {4:[No Name] [+] }{5:[No Name] [+] }|
- |
- ]])
- end
- -- verify that N<c-w>w works
- for i = 1,5 do
- feed(i.."<c-w>w")
- feed_command("enew")
- curbufmeths.set_lines(0,-1,true,{tostring(i)})
- end
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [6:-------------------]{5:│}[5:--------------------]|
- [6:-------------------]{5:│}[5:--------------------]|
- {5:[No Name] [+] [No Name] [+] }|
- [7:-------------------]{5:│}[2:--------------------]|
- [7:-------------------]{5:│}[2:--------------------]|
- {5:[No Name] [+] [No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- 4 |
- {0:~ }|
- ## grid 3
- :enew |
- ## grid 4
- {1:^5 }|
- {2:~ }|
- ## grid 5
- 2 |
- {0:~ }|
- ## grid 6
- 1 |
- {0:~ }|
- ## grid 7
- 3 |
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- 1 {5:│}2 |
- {0:~ }{5:│}{0:~ }|
- {5:[No N}{1:^5 }{5:ame] [+] }|
- 3 {2:~ } |
- {0:~ }{5:│}{0:~ }|
- {5:[No Name] [+] [No Name] [+] }|
- :enew |
- ]])
- end
- local movements = {
- w={2,3,4,5,1},
- W={5,1,2,3,4},
- h={1,1,3,3,3},
- j={3,3,3,4,4},
- k={1,2,1,1,1},
- l={2,2,4,4,4},
- t={1,1,1,1,1},
- b={4,4,4,4,4},
- }
- for k,v in pairs(movements) do
- for i = 1,5 do
- feed(i.."<c-w>w")
- feed('<c-w>'..k)
- local nr = funcs.winnr()
- eq(v[i],nr, "when using <c-w>"..k.." from window "..i)
- end
- end
- for i = 1,5 do
- feed(i.."<c-w>w")
- for j = 1,5 do
- if j ~= i then
- feed(j.."<c-w>w")
- feed('<c-w>p')
- local nr = funcs.winnr()
- eq(i,nr, "when using <c-w>p to window "..i.." from window "..j)
- end
- end
- end
- end)
- it(":tabnew and :tabnext", function()
- feed(":tabnew<cr>")
- if multigrid then
- -- grid is not freed, but float is marked as closed (should it rather be "invisible"?)
- screen:expect{grid=[[
- ## grid 1
- {9: }{10:2}{9:+ [No Name] }{3: [No Name] }{5: }{9:X}|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2 (hidden)
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :tabnew |
- ## grid 4 (hidden)
- {1:y }|
- {2:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]]}
- else
- screen:expect([[
- {9: }{10:2}{9:+ [No Name] }{3: [No Name] }{5: }{9:X}|
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- :tabnew |
- ]])
- end
- feed(":tabnext<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- {3: }{11:2}{3:+ [No Name] }{9: [No Name] }{5: }{9:X}|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :tabnext |
- ## grid 4
- {1:y }|
- {2:~ }|
- ## grid 5 (hidden)
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- screen:expect([[
- {3: }{11:2}{3:+ [No Name] }{9: [No Name] }{5: }{9:X}|
- ^x |
- {0:~ }{1:y }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- :tabnext |
- ]])
- end
- feed(":tabnext<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- {9: }{10:2}{9:+ [No Name] }{3: [No Name] }{5: }{9:X}|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2 (hidden)
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :tabnext |
- ## grid 4 (hidden)
- {1:y }|
- {2:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]]}
- else
- screen:expect([[
- {9: }{10:2}{9:+ [No Name] }{3: [No Name] }{5: }{9:X}|
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- :tabnext |
- ]])
- end
- end)
- it(":tabnew and :tabnext (external)", function()
- if multigrid then
- -- also test external window wider than main screen
- meths.win_set_config(win, {external=true, width=65, height=4})
- expected_pos = {[4]={external=true}}
- feed(":tabnew<cr>")
- screen:expect{grid=[[
- ## grid 1
- {9: + [No Name] }{3: }{11:2}{3:+ [No Name] }{5: }{9:X}|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2 (hidden)
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :tabnew |
- ## grid 4
- y |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- else
- eq("UI doesn't support external windows",
- pcall_err(meths.win_set_config, 0, {external=true, width=65, height=4}))
- end
- feed(":tabnext<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- {3: }{11:2}{3:+ [No Name] }{9: [No Name] }{5: }{9:X}|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :tabnext |
- ## grid 4
- y |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 5 (hidden)
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- end
- feed(":tabnext<cr>")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- {9: + [No Name] }{3: }{11:2}{3:+ [No Name] }{5: }{9:X}|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [5:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2 (hidden)
- x |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :tabnext |
- ## grid 4
- y |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 5
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]], float_pos=expected_pos}
- end
- end)
- end)
- it("left drag changes visual selection in float window", function()
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'foo', 'bar', 'baz'})
- meths.open_win(buf, false, {relative='editor', width=20, height=3, row=2, col=5})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:foo }|
- {1:bar }|
- {1:baz }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 2, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- meths.input_mouse('left', 'press', '', 5, 0, 0)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:^foo }|
- {1:bar }|
- {1:baz }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 2, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- meths.input_mouse('left', 'drag', '', 5, 1, 2)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- VISUAL --} |
- ## grid 5
- {27:foo}{1: }|
- {27:ba}{1:^r }|
- {1:baz }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 2, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 1, curcol = 2, linecount = 3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{1:foo }{0: }|
- {0:~ }{1:bar }{0: }|
- {0:~ }{1:baz }{0: }|
- {0:~ }|
- |
- ]]}
- meths.input_mouse('left', 'press', '', 0, 2, 5)
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }{1:^foo }{0: }|
- {0:~ }{1:bar }{0: }|
- {0:~ }{1:baz }{0: }|
- {0:~ }|
- |
- ]]}
- meths.input_mouse('left', 'drag', '', 0, 3, 7)
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }{27:foo}{1: }{0: }|
- {0:~ }{27:ba}{1:^r }{0: }|
- {0:~ }{1:baz }{0: }|
- {0:~ }|
- {3:-- VISUAL --} |
- ]]}
- end
- end)
- it("left drag changes visual selection in float window with border", function()
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'foo', 'bar', 'baz'})
- meths.open_win(buf, false, {relative='editor', width=20, height=3, row=0, col=5, border='single'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:┌────────────────────┐}|
- {5:│}{1:foo }{5:│}|
- {5:│}{1:bar }{5:│}|
- {5:│}{1:baz }{5:│}|
- {5:└────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- meths.input_mouse('left', 'press', '', 5, 1, 1)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:┌────────────────────┐}|
- {5:│}{1:^foo }{5:│}|
- {5:│}{1:bar }{5:│}|
- {5:│}{1:baz }{5:│}|
- {5:└────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- meths.input_mouse('left', 'drag', '', 5, 2, 3)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- VISUAL --} |
- ## grid 5
- {5:┌────────────────────┐}|
- {5:│}{27:foo}{1: }{5:│}|
- {5:│}{27:ba}{1:^r }{5:│}|
- {5:│}{1:baz }{5:│}|
- {5:└────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 1, curcol = 2, linecount = 3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ {5:┌────────────────────┐} |
- {0:~ }{5:│}{1:foo }{5:│}{0: }|
- {0:~ }{5:│}{1:bar }{5:│}{0: }|
- {0:~ }{5:│}{1:baz }{5:│}{0: }|
- {0:~ }{5:└────────────────────┘}{0: }|
- {0:~ }|
- |
- ]]}
- meths.input_mouse('left', 'press', '', 0, 1, 6)
- screen:expect{grid=[[
- {5:┌────────────────────┐} |
- {0:~ }{5:│}{1:^foo }{5:│}{0: }|
- {0:~ }{5:│}{1:bar }{5:│}{0: }|
- {0:~ }{5:│}{1:baz }{5:│}{0: }|
- {0:~ }{5:└────────────────────┘}{0: }|
- {0:~ }|
- |
- ]]}
- meths.input_mouse('left', 'drag', '', 0, 2, 8)
- screen:expect{grid=[[
- {5:┌────────────────────┐} |
- {0:~ }{5:│}{27:foo}{1: }{5:│}{0: }|
- {0:~ }{5:│}{27:ba}{1:^r }{5:│}{0: }|
- {0:~ }{5:│}{1:baz }{5:│}{0: }|
- {0:~ }{5:└────────────────────┘}{0: }|
- {0:~ }|
- {3:-- VISUAL --} |
- ]]}
- end
- end)
- it("left drag changes visual selection in float window with winbar", function()
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'foo', 'bar', 'baz'})
- local float_win = meths.open_win(buf, false, {relative='editor', width=20, height=4, row=1, col=5})
- meths.win_set_option(float_win, 'winbar', 'floaty bar')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {3:floaty bar }|
- {1:foo }|
- {1:bar }|
- {1:baz }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 1, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- meths.input_mouse('left', 'press', '', 5, 1, 0)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {3:floaty bar }|
- {1:^foo }|
- {1:bar }|
- {1:baz }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 1, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 0, curcol = 0, linecount = 3, sum_scroll_delta = 0};
- }}
- meths.input_mouse('left', 'drag', '', 5, 2, 2)
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- VISUAL --} |
- ## grid 5
- {3:floaty bar }|
- {27:foo}{1: }|
- {27:ba}{1:^r }|
- {1:baz }|
- ]], float_pos={
- [5] = {{id = 1002}, "NW", 1, 1, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 1, curcol = 2, linecount = 3, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }{3:floaty bar }{0: }|
- {0:~ }{1:foo }{0: }|
- {0:~ }{1:bar }{0: }|
- {0:~ }{1:baz }{0: }|
- {0:~ }|
- |
- ]]}
- meths.input_mouse('left', 'press', '', 0, 2, 5)
- screen:expect{grid=[[
- |
- {0:~ }{3:floaty bar }{0: }|
- {0:~ }{1:^foo }{0: }|
- {0:~ }{1:bar }{0: }|
- {0:~ }{1:baz }{0: }|
- {0:~ }|
- |
- ]]}
- meths.input_mouse('left', 'drag', '', 0, 3, 7)
- screen:expect{grid=[[
- |
- {0:~ }{3:floaty bar }{0: }|
- {0:~ }{27:foo}{1: }{0: }|
- {0:~ }{27:ba}{1:^r }{0: }|
- {0:~ }{1:baz }{0: }|
- {0:~ }|
- {3:-- VISUAL --} |
- ]]}
- end
- end)
- it('left drag changes visual selection if float window is turned into a split', function()
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'foo', 'bar', 'baz'})
- meths.open_win(buf, true, {relative='editor', width=20, height=3, row=2, col=5})
- command('wincmd L')
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- {5:[No Name] }{4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- ^foo |
- bar |
- baz |
- {0:~ }|
- {0:~ }|
- ]])
- meths.input_mouse('left', 'press', '', 5, 2, 2)
- screen:expect([[
- ## grid 1
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- {5:[No Name] }{4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- foo |
- bar |
- ba^z |
- {0:~ }|
- {0:~ }|
- ]])
- meths.input_mouse('left', 'drag', '', 5, 1, 1)
- screen:expect([[
- ## grid 1
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- [2:-------------------]{5:│}[5:--------------------]|
- {5:[No Name] }{4:[No Name] [+] }|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- {3:-- VISUAL --} |
- ## grid 5
- foo |
- b^a{27:r} |
- {27:baz} |
- {0:~ }|
- {0:~ }|
- ]])
- else
- screen:expect([[
- {5:│}^foo |
- {0:~ }{5:│}bar |
- {0:~ }{5:│}baz |
- {0:~ }{5:│}{0:~ }|
- {0:~ }{5:│}{0:~ }|
- {5:[No Name] }{4:[No Name] [+] }|
- |
- ]])
- meths.input_mouse('left', 'press', '', 0, 2, 22)
- screen:expect([[
- {5:│}foo |
- {0:~ }{5:│}bar |
- {0:~ }{5:│}ba^z |
- {0:~ }{5:│}{0:~ }|
- {0:~ }{5:│}{0:~ }|
- {5:[No Name] }{4:[No Name] [+] }|
- |
- ]])
- meths.input_mouse('left', 'drag', '', 0, 1, 21)
- screen:expect([[
- {5:│}foo |
- {0:~ }{5:│}b^a{27:r} |
- {0:~ }{5:│}{27:baz} |
- {0:~ }{5:│}{0:~ }|
- {0:~ }{5:│}{0:~ }|
- {5:[No Name] }{4:[No Name] [+] }|
- {3:-- VISUAL --} |
- ]])
- end
- end)
- it("'winblend' option", function()
- screen:try_resize(50,9)
- screen:set_default_attr_ids({
- [1] = {background = Screen.colors.LightMagenta},
- [2] = {foreground = Screen.colors.Grey0, background = tonumber('0xffcfff')},
- [3] = {foreground = tonumber('0xb282b2'), background = tonumber('0xffcfff')},
- [4] = {foreground = Screen.colors.Red, background = Screen.colors.LightMagenta},
- [5] = {foreground = tonumber('0x990000'), background = tonumber('0xfff1ff')},
- [6] = {foreground = tonumber('0x332533'), background = tonumber('0xfff1ff')},
- [7] = {background = tonumber('0xffcfff'), bold = true, foreground = tonumber('0x0000d8')},
- [8] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue1},
- [9] = {background = Screen.colors.LightMagenta, blend = 30},
- [10] = {foreground = Screen.colors.Red, background = Screen.colors.LightMagenta, blend = 0},
- [11] = {foreground = Screen.colors.Red, background = Screen.colors.LightMagenta, blend = 80},
- [12] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue1, blend = 30},
- [13] = {background = Screen.colors.LightGray, blend = 30},
- [14] = {foreground = Screen.colors.Grey0, background = Screen.colors.Grey88},
- [15] = {foreground = tonumber('0x939393'), background = Screen.colors.Grey88},
- [16] = {background = Screen.colors.Grey90};
- [17] = {blend = 100};
- [18] = {background = Screen.colors.LightMagenta, blend = 100};
- [19] = {background = Screen.colors.LightMagenta, bold = true, blend = 100, foreground = Screen.colors.Blue1};
- [20] = {background = Screen.colors.White, foreground = Screen.colors.Gray0};
- [21] = {background = Screen.colors.White, bold = true, foreground = tonumber('0x00007f')};
- [22] = {background = Screen.colors.Gray90, foreground = Screen.colors.Gray0};
- })
- insert([[
- Lorem ipsum dolor sit amet, consectetur
- adipisicing elit, sed do eiusmod tempor
- incididunt ut labore et dolore magna aliqua.
- Ut enim ad minim veniam, quis nostrud
- exercitation ullamco laboris nisi ut aliquip ex
- ea commodo consequat. Duis aute irure dolor in
- reprehenderit in voluptate velit esse cillum
- dolore eu fugiat nulla pariatur. Excepteur sint
- occaecat cupidatat non proident, sunt in culpa
- qui officia deserunt mollit anim id est
- laborum.]])
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {"test", "", "popup text"})
- local win = meths.open_win(buf, false, {relative='editor', width=15, height=3, row=2, col=5})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- ## grid 3
- |
- ## grid 5
- {1:test }|
- {1: }|
- {1:popup text }|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}}
- else
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{1:test }. Duis aute irure dolor in |
- repre{1: }uptate velit esse cillum |
- dolor{1:popup text }la pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- |
- ]])
- end
- meths.win_set_option(win, "winblend", 30)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- ## grid 3
- |
- ## grid 5
- {9:test }|
- {9: }|
- {9:popup text }|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}, unchanged=true}
- else
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{2:test}{3:o consequat}. Duis aute irure dolor in |
- repre{3:henderit in vol}uptate velit esse cillum |
- dolor{2:popup}{3:fugi}{2:text}{3:ul}la pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- |
- ]])
- end
- -- Check that 'winblend' works with NormalNC highlight
- meths.set_option_value('winhighlight', 'NormalNC:Visual', {win = win})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- ## grid 3
- |
- ## grid 5
- {13:test }|
- {13: }|
- {13:popup text }|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}}
- else
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{14:test}{15:o consequat}. Duis aute irure dolor in |
- repre{15:henderit in vol}uptate velit esse cillum |
- dolor{14:popup}{15:fugi}{14:text}{15:ul}la pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- |
- ]])
- end
- -- Also test with global NormalNC highlight
- meths.set_option_value('winhighlight', '', {win = win})
- command('hi link NormalNC Visual')
- screen:expect_unchanged(true)
- command('hi clear NormalNC')
- command('hi SpecialRegion guifg=Red blend=0')
- meths.buf_add_highlight(buf, -1, "SpecialRegion", 2, 0, -1)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- ## grid 3
- |
- ## grid 5
- {9:test }|
- {9: }|
- {10:popup text}{9: }|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}}
- else
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{2:test}{3:o consequat}. Duis aute irure dolor in |
- repre{3:henderit in vol}uptate velit esse cillum |
- dolor{10:popup text}{3:ul}la pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- |
- ]])
- end
- command('hi SpecialRegion guifg=Red blend=80')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- ## grid 3
- |
- ## grid 5
- {9:test }|
- {9: }|
- {11:popup text}{9: }|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}, unchanged=true}
- else
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{2:test}{3:o consequat}. Duis aute irure dolor in |
- repre{3:henderit in vol}uptate velit esse cillum |
- dolor{5:popup}{6:fugi}{5:text}{3:ul}la pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- |
- ]])
- end
- -- Test scrolling by mouse
- if multigrid then
- meths.input_mouse('wheel', 'down', '', 5, 2, 2)
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- ## grid 3
- |
- ## grid 5
- {11:popup text}{9: }|
- {12:~ }|
- {12:~ }|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}}
- else
- meths.input_mouse('wheel', 'down', '', 0, 4, 7)
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{5:popup}{6: con}{5:text}{3:at}. Duis aute irure dolor in |
- repre{7:~}{3:enderit in vol}uptate velit esse cillum |
- dolor{7:~}{3: eu fugiat nul}la pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- qui officia deserunt mollit anim id est |
- laborum^. |
- |
- ]])
- end
- -- Check that 'winblend' applies to border
- meths.win_set_config(win, {border='single'})
- meths.set_option_value('winblend', 100, {win=win.id})
- meths.set_option_value("cursorline", true, {win=0})
- command('hi clear VertSplit')
- feed('k0')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [2:--------------------------------------------------]|
- [3:--------------------------------------------------]|
- ## grid 2
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea commodo consequat. Duis aute irure dolor in |
- reprehenderit in voluptate velit esse cillum |
- dolore eu fugiat nulla pariatur. Excepteur sint |
- occaecat cupidatat non proident, sunt in culpa |
- {16:^qui officia deserunt mollit anim id est }|
- laborum. |
- ## grid 3
- |
- ## grid 5
- {17:┌───────────────┐}|
- {17:│}{11:popup text}{18: }{17:│}|
- {17:│}{19:~ }{17:│}|
- {17:│}{19:~ }{17:│}|
- {17:└───────────────┘}|
- ]], float_pos={[5] = {{id = 1002}, "NW", 1, 2, 5, true}}}
- else
- screen:expect([[
- Ut enim ad minim veniam, quis nostrud |
- exercitation ullamco laboris nisi ut aliquip ex |
- ea co{20:┌───────────────┐}Duis aute irure dolor in |
- repre{20:│}{5:popup}{6:it i}{5:text}{20:lu│}tate velit esse cillum |
- dolor{20:│}{21:~}{20:eu fugiat null│} pariatur. Excepteur sint |
- occae{20:│}{21:~}{20:t cupidatat no│} proident, sunt in culpa |
- {16:^qui o}{22:└───────────────┘}{16:ollit anim id est }|
- laborum. |
- |
- ]])
- end
- end)
- it('can overlap doublewidth chars', function()
- insert([[
- # TODO: 测试字典信息的准确性
- # FIXME: 测试字典信息的准确性]])
- local buf = meths.create_buf(false,false)
- meths.buf_set_lines(buf, 0, -1, true, {'口', '口'})
- local win = meths.open_win(buf, false, {relative='editor', width=5, height=3, row=0, col=11, style='minimal'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- # TODO: 测试字典信息的准确性 |
- # FIXME: 测试字典信息的准确^性 |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {1:口 }|
- {1:口 }|
- {1: }|
- ]], float_pos={ [5] = { { id = 1002 }, "NW", 1, 0, 11, true } }}
- else
- screen:expect([[
- # TODO: 测 {1:口 }信息的准确性 |
- # FIXME: 测{1:口 } 信息的准确^性 |
- {0:~ }{1: }{0: }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- meths.win_close(win, false)
- if multigrid then
- screen:expect([[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- # TODO: 测试字典信息的准确性 |
- # FIXME: 测试字典信息的准确^性 |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]])
- else
- screen:expect([[
- # TODO: 测试字典信息的准确性 |
- # FIXME: 测试字典信息的准确^性 |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]])
- end
- -- The interaction between 'winblend' and doublewidth chars in the background
- -- does not look very good. But check no chars get incorrectly placed
- -- at least. Also check invisible EndOfBuffer region blends correctly.
- meths.buf_set_lines(buf, 0, -1, true, {" x x x xx", " x x x x"})
- win = meths.open_win(buf, false, {relative='editor', width=12, height=3, row=0, col=11, style='minimal'})
- meths.win_set_option(win, 'winblend', 30)
- screen:set_default_attr_ids({
- [1] = {foreground = tonumber('0xb282b2'), background = tonumber('0xffcfff')},
- [2] = {foreground = Screen.colors.Grey0, background = tonumber('0xffcfff')},
- [3] = {bold = true, foreground = Screen.colors.Blue1},
- [4] = {background = tonumber('0xffcfff'), bold = true, foreground = tonumber('0xb282ff')},
- [5] = {background = Screen.colors.LightMagenta, blend=30},
- })
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- # TODO: 测试字典信息的准确性 |
- # FIXME: 测试字典信息的准确^性 |
- {3:~ }|
- {3:~ }|
- {3:~ }|
- {3:~ }|
- ## grid 3
- |
- ## grid 6
- {5: x x x xx}|
- {5: x x x x}|
- {5: }|
- ]], float_pos={
- [6] = { {
- id = 1003
- }, "NW", 1, 0, 11, true }
- }}
- else
- screen:expect([[
- # TODO: 测 {2: x x x}{1:息}{2: xx} 确性 |
- # FIXME: 测{1:试}{2:x x x}{1:息}{2: x}准确^性 |
- {3:~ }{4: }{3: }|
- {3:~ }|
- {3:~ }|
- {3:~ }|
- |
- ]])
- end
- meths.win_set_config(win, {relative='editor', row=0, col=12})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- # TODO: 测试字典信息的准确性 |
- # FIXME: 测试字典信息的准确^性 |
- {3:~ }|
- {3:~ }|
- {3:~ }|
- {3:~ }|
- ## grid 3
- |
- ## grid 6
- {5: x x x xx}|
- {5: x x x x}|
- {5: }|
- ]], float_pos={
- [6] = { {
- id = 1003
- }, "NW", 1, 0, 12, true }
- }}
- else
- screen:expect([[
- # TODO: 测试{2: x x}{1:信}{2:x }{1:的}{2:xx}确性 |
- # FIXME: 测 {2: x x}{1:信}{2:x }{1:的}{2:x} 确^性 |
- {3:~ }{4: }{3: }|
- {3:~ }|
- {3:~ }|
- {3:~ }|
- |
- ]])
- end
- end)
- it("correctly redraws when overlaid windows are resized #13991", function()
- helpers.source([[
- let popup_config = {"relative" : "editor",
- \ "width" : 7,
- \ "height" : 3,
- \ "row" : 1,
- \ "col" : 1,
- \ "style" : "minimal"}
- let border_config = {"relative" : "editor",
- \ "width" : 9,
- \ "height" : 5,
- \ "row" : 0,
- \ "col" : 0,
- \ "style" : "minimal"}
- let popup_buffer = nvim_create_buf(v:false, v:true)
- let border_buffer = nvim_create_buf(v:false, v:true)
- let popup_win = nvim_open_win(popup_buffer, v:true, popup_config)
- let border_win = nvim_open_win(border_buffer, v:false, border_config)
- call nvim_buf_set_lines(popup_buffer, 0, -1, v:true,
- \ ["long", "longer", "longest"])
- call nvim_buf_set_lines(border_buffer, 0, -1, v:true,
- \ ["---------", "- -", "- -"])
- ]])
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ## grid 3
- |
- ## grid 5
- {2:^long }|
- {2:longer }|
- {2:longest}|
- ## grid 6
- {2:---------}|
- {2:- -}|
- {2:- -}|
- {2: }|
- {2: }|
- ]], attr_ids={
- [1] = {foreground = Screen.colors.Blue1, bold = true};
- [2] = {background = Screen.colors.LightMagenta};
- }, float_pos={
- [5] = { {
- id = 1002
- }, "NW", 1, 1, 1, true },
- [6] = { {
- id = 1003
- }, "NW", 1, 0, 0, true }
- }}
- else
- screen:expect([[
- {1:---------} |
- {1:-^long -}{0: }|
- {1:-longer -}{0: }|
- {1: longest }{0: }|
- {1: }{0: }|
- {0:~ }|
- |
- ]])
- end
- helpers.source([[
- let new_popup_config = {"width" : 1, "height" : 3}
- let new_border_config = {"width" : 3, "height" : 5}
- function! Resize()
- call nvim_win_set_config(g:popup_win, g:new_popup_config)
- call nvim_win_set_config(g:border_win, g:new_border_config)
- call nvim_buf_set_lines(g:border_buffer, 0, -1, v:true,
- \ ["---", "- -", "- -"])
- endfunction
- nnoremap zz <cmd>call Resize()<cr>
- ]])
- helpers.feed("zz")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ## grid 3
- |
- ## grid 5
- {2:^l}|
- {2:o}|
- {2:n}|
- ## grid 6
- {2:---}|
- {2:- -}|
- {2:- -}|
- {2: }|
- {2: }|
- ]], attr_ids={
- [1] = {foreground = Screen.colors.Blue1, bold = true};
- [2] = {background = Screen.colors.LightMagenta};
- }, float_pos={
- [5] = { {
- id = 1002
- }, "NW", 1, 1, 1, true },
- [6] = { {
- id = 1003
- }, "NW", 1, 0, 0, true }
- }}
- else
- screen:expect([[
- {1:---} |
- {1:-^l-}{0: }|
- {1:-o-}{0: }|
- {1: n }{0: }|
- {1: }{0: }|
- {0:~ }|
- |
- ]])
- end
- end)
- it("correctly orders multiple opened floats (current last)", function()
- local buf = meths.create_buf(false,false)
- local win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- meths.win_set_option(win, "winhl", "Normal:ErrorMsg,EndOfBuffer:ErrorMsg")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7: }|
- {7:~ }|
- ]], float_pos={
- [4] = { { id = 1001 }, "NW", 1, 2, 5, true };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{7: }{0: }|
- {0:~ }{7:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- exec_lua [[
- local buf = vim.api.nvim_create_buf(false,false)
- local win = vim.api.nvim_open_win(buf, false, {relative='editor', width=16, height=2, row=3, col=8})
- vim.api.nvim_win_set_option(win, "winhl", "EndOfBuffer:Normal")
- buf = vim.api.nvim_create_buf(false,false)
- win = vim.api.nvim_open_win(buf, true, {relative='editor', width=12, height=2, row=4, col=10})
- vim.api.nvim_win_set_option(win, "winhl", "Normal:Search,EndOfBuffer:Search")
- ]]
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7: }|
- {7:~ }|
- ## grid 5
- {1: }|
- {1:~ }|
- ## grid 6
- {17:^ }|
- {17:~ }|
- ]], float_pos={
- [4] = { { id = 1001 }, "NW", 1, 2, 5, true };
- [5] = { { id = 1002 }, "NW", 1, 3, 8, true };
- [6] = { { id = 1003 }, "NW", 1, 4, 10, true };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount=1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount=1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount=1, sum_scroll_delta = 0};
- [6] = {win = {id = 1003}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount=1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }{7: }{0: }|
- {0:~ }{7:~ }{1: }{7: }{0: }|
- {0:~ }{1:~ }{17:^ }{1: }{0: }|
- {0:~ }{17:~ }{0: }|
- |
- ]]}
- end
- end)
- it("correctly orders multiple opened floats (non-current last)", function()
- local buf = meths.create_buf(false,false)
- local win = meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
- meths.win_set_option(win, "winhl", "Normal:ErrorMsg,EndOfBuffer:ErrorMsg")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7: }|
- {7:~ }|
- ]], float_pos={
- [4] = { { id = 1001 }, "NW", 1, 2, 5, true };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }{7: }{0: }|
- {0:~ }{7:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- exec_lua [[
- local buf = vim.api.nvim_create_buf(false,false)
- local win = vim.api.nvim_open_win(buf, true, {relative='editor', width=12, height=2, row=4, col=10})
- vim.api.nvim_win_set_option(win, "winhl", "Normal:Search,EndOfBuffer:Search")
- buf = vim.api.nvim_create_buf(false,false)
- win = vim.api.nvim_open_win(buf, false, {relative='editor', width=16, height=2, row=3, col=8})
- vim.api.nvim_win_set_option(win, "winhl", "EndOfBuffer:Normal")
- ]]
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7: }|
- {7:~ }|
- ## grid 5
- {17:^ }|
- {17:~ }|
- ## grid 6
- {1: }|
- {1:~ }|
- ]], float_pos={
- [4] = { { id = 1001 }, "NW", 1, 2, 5, true };
- [5] = { { id = 1002 }, "NW", 1, 4, 10, true };
- [6] = { { id = 1003 }, "NW", 1, 3, 8, true };
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [6] = {win = {id = 1003}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }{7: }{0: }|
- {0:~ }{7:~ }{1: }{7: }{0: }|
- {0:~ }{1:~ }{17:^ }{1: }{0: }|
- {0:~ }{17:~ }{0: }|
- |
- ]]}
- end
- end)
- it('can use z-index', function()
- local buf = meths.create_buf(false,false)
- local win1 = meths.open_win(buf, false, {relative='editor', width=20, height=3, row=1, col=5, zindex=30})
- meths.win_set_option(win1, "winhl", "Normal:ErrorMsg,EndOfBuffer:ErrorMsg")
- local win2 = meths.open_win(buf, false, {relative='editor', width=20, height=3, row=2, col=6, zindex=50})
- meths.win_set_option(win2, "winhl", "Normal:Search,EndOfBuffer:Search")
- local win3 = meths.open_win(buf, false, {relative='editor', width=20, height=3, row=3, col=7, zindex=40})
- meths.win_set_option(win3, "winhl", "Normal:Question,EndOfBuffer:Question")
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {7: }|
- {7:~ }|
- {7:~ }|
- ## grid 5
- {17: }|
- {17:~ }|
- {17:~ }|
- ## grid 6
- {8: }|
- {8:~ }|
- {8:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 5, true, 30};
- [5] = {{id = 1002}, "NW", 1, 2, 6, true, 50};
- [6] = {{id = 1003}, "NW", 1, 3, 7, true, 40};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [6] = {win = {id = 1003}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }{7: }{0: }|
- {0:~ }{7:~}{17: }{0: }|
- {0:~ }{7:~}{17:~ }{8: }{0: }|
- {0:~ }{17:~ }{8: }{0: }|
- {0:~ }{8:~ }{0: }|
- |
- ]]}
- end
- end)
- it('can use winbar', function()
- local buf = meths.create_buf(false,false)
- local win1 = meths.open_win(buf, false, {relative='editor', width=15, height=3, row=1, col=5})
- meths.win_set_option(win1, 'winbar', 'floaty bar')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {3:floaty bar }|
- {1: }|
- {2:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 5, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }{3:floaty bar }{0: }|
- {0:~ }{1: }{0: }|
- {0:~ }{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- -- resize and add a border
- meths.win_set_config(win1, {relative='editor', width=15, height=4, row=0, col=4, border = 'single'})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {5:┌───────────────┐}|
- {5:│}{3:floaty bar }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:└───────────────┘}|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 0, 4, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ {5:┌───────────────┐} |
- {0:~ }{5:│}{3:floaty bar }{5:│}{0: }|
- {0:~ }{5:│}{1: }{5:│}{0: }|
- {0:~ }{5:│}{2:~ }{5:│}{0: }|
- {0:~ }{5:│}{2:~ }{5:│}{0: }|
- {0:~ }{5:└───────────────┘}{0: }|
- |
- ]]}
- end
- end)
- it('it can be resized with messages and cmdheight=0 #20106', function()
- screen:try_resize(40,9)
- command 'set cmdheight=0'
- local buf = meths.create_buf(false,true)
- local win = meths.open_win(buf, false, {relative='editor', width=40, height=4, anchor='SW', row=9, col=0, style='minimal', border="single", noautocmd=true})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- ## grid 5
- {5:┌────────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└────────────────────────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "SW", 1, 9, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }|
- {5:┌──────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└──────────────────────────────────────┘}|
- ]]}
- end
- exec_lua([[
- local win = ...
- vim.api.nvim_win_set_height(win, 2)
- vim.api.nvim_echo({ { "" } }, false, {})
- ]], win)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- ## grid 5
- {5:┌────────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└────────────────────────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "SW", 1, 9, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {5:┌──────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└──────────────────────────────────────┘}|
- ]]}
- end
- meths.win_close(win, true)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- ]], win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ]]}
- end
- end)
- it('it can be resized with messages and cmdheight=1', function()
- screen:try_resize(40,9)
- local buf = meths.create_buf(false,true)
- local win = meths.open_win(buf, false, {relative='editor', width=40, height=4, anchor='SW', row=8, col=0, style='minimal', border="single", noautocmd=true})
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:┌────────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└────────────────────────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "SW", 1, 8, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {5:┌──────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└──────────────────────────────────────┘}|
- |
- ]]}
- end
- exec_lua([[
- -- echo prompt is blocking, so schedule
- local win = ...
- vim.schedule(function()
- vim.api.nvim_win_set_height(win, 2)
- vim.api.nvim_echo({ { "\n" } }, false, {})
- end)
- ]], win)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- {8:Press ENTER or type command to continue}^ |
- ## grid 5
- {5:┌────────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└────────────────────────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "SW", 1, 8, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~ }|
- {5:┌──────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {4: }|
- |
- {8:Press ENTER or type command to continue}^ |
- ]]}
- end
- feed('<cr>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 5
- {5:┌────────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└────────────────────────────────────────┘}|
- ]], float_pos={
- [5] = {{id = 1002}, "SW", 1, 8, 0, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {5:┌──────────────────────────────────────┐}|
- {5:│}{1: }{5:│}|
- {5:│}{1: }{5:│}|
- {5:└──────────────────────────────────────┘}|
- |
- ]]}
- end
- meths.win_close(win, true)
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ]], win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- ^ |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- |
- ]]}
- end
- end)
- describe('no crash after moving and closing float window #21547', function()
- local function test_float_move_close(cmd)
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 10, height = 10}
- meths.open_win(meths.create_buf(false, false), true, float_opts)
- if multigrid then
- screen:expect({float_pos = {[4] = {{id = 1001}, 'NW', 1, 1, 1, true}}})
- end
- command(cmd)
- exec_lua([[
- vim.api.nvim_win_set_config(0, {relative = 'editor', row = 2, col = 2})
- vim.api.nvim_win_close(0, {})
- vim.api.nvim_echo({{''}}, false, {})
- ]])
- if multigrid then
- screen:expect({float_pos = {}})
- end
- assert_alive()
- end
- it('if WinClosed autocommand flushes UI', function()
- test_float_move_close('autocmd WinClosed * ++once redraw')
- end)
- it('if closing buffer flushes UI', function()
- test_float_move_close('autocmd BufWinLeave * ++once redraw')
- end)
- end)
- it(':sleep cursor placement #22639', function()
- local float_opts = {relative = 'editor', row = 1, col = 1, width = 4, height = 3}
- local win = meths.open_win(meths.create_buf(false, false), true, float_opts)
- feed('iab<CR>cd<Esc>')
- feed(':sleep 100')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sleep 100^ |
- ## grid 4
- {1:ab }|
- {1:cd }|
- {2:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 3, curline = 1, curcol = 1, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{1:ab }{0: }|
- {0:~}{1:cd }{0: }|
- {0:~}{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- :sleep 100^ |
- ]]}
- end
- feed('<CR>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sleep 100 |
- ## grid 4
- {1:ab }|
- {1:c^d }|
- {2:~ }|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 3, curline = 1, curcol = 1, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{1:ab }{0: }|
- {0:~}{1:c^d }{0: }|
- {0:~}{2:~ }{0: }|
- {0:~ }|
- {0:~ }|
- :sleep 100 |
- ]]}
- end
- feed('<C-C>')
- screen:expect_unchanged()
- meths.win_set_config(win, {border = 'single'})
- feed(':sleep 100')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sleep 100^ |
- ## grid 4
- {5:┌────┐}|
- {5:│}{1:ab }{5:│}|
- {5:│}{1:cd }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:└────┘}|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 3, curline = 1, curcol = 1, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{5:┌────┐}{0: }|
- {0:~}{5:│}{1:ab }{5:│}{0: }|
- {0:~}{5:│}{1:cd }{5:│}{0: }|
- {0:~}{5:│}{2:~ }{5:│}{0: }|
- {0:~}{5:└────┘}{0: }|
- :sleep 100^ |
- ]]}
- end
- feed('<CR>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sleep 100 |
- ## grid 4
- {5:┌────┐}|
- {5:│}{1:ab }{5:│}|
- {5:│}{1:c^d }{5:│}|
- {5:│}{2:~ }{5:│}|
- {5:└────┘}|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 3, curline = 1, curcol = 1, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{5:┌────┐}{0: }|
- {0:~}{5:│}{1:ab }{5:│}{0: }|
- {0:~}{5:│}{1:c^d }{5:│}{0: }|
- {0:~}{5:│}{2:~ }{5:│}{0: }|
- {0:~}{5:└────┘}{0: }|
- :sleep 100 |
- ]]}
- end
- feed('<C-C>')
- screen:expect_unchanged()
- command('setlocal winbar=foo')
- feed(':sleep 100')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sleep 100^ |
- ## grid 4
- {5:┌────┐}|
- {5:│}{3:foo }{5:│}|
- {5:│}{1:ab }{5:│}|
- {5:│}{1:cd }{5:│}|
- {5:└────┘}|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 1, curcol = 1, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{5:┌────┐}{0: }|
- {0:~}{5:│}{3:foo }{5:│}{0: }|
- {0:~}{5:│}{1:ab }{5:│}{0: }|
- {0:~}{5:│}{1:cd }{5:│}{0: }|
- {0:~}{5:└────┘}{0: }|
- :sleep 100^ |
- ]]}
- end
- feed('<CR>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- :sleep 100 |
- ## grid 4
- {5:┌────┐}|
- {5:│}{3:foo }{5:│}|
- {5:│}{1:ab }{5:│}|
- {5:│}{1:c^d }{5:│}|
- {5:└────┘}|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 1, curcol = 1, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{5:┌────┐}{0: }|
- {0:~}{5:│}{3:foo }{5:│}{0: }|
- {0:~}{5:│}{1:ab }{5:│}{0: }|
- {0:~}{5:│}{1:c^d }{5:│}{0: }|
- {0:~}{5:└────┘}{0: }|
- :sleep 100 |
- ]]}
- end
- feed('<C-C>')
- screen:expect_unchanged()
- end)
- it('with rightleft and border #22640', function()
- local float_opts = {relative='editor', width=5, height=3, row=1, col=1, border='single'}
- meths.open_win(meths.create_buf(false, false), true, float_opts)
- command('setlocal rightleft')
- feed('iabc<CR>def<Esc>')
- if multigrid then
- screen:expect{grid=[[
- ## grid 1
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [2:----------------------------------------]|
- [3:----------------------------------------]|
- ## grid 2
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- ## grid 3
- |
- ## grid 4
- {5:┌─────┐}|
- {5:│}{1: cba}{5:│}|
- {5:│}{1: ^fed}{5:│}|
- {5:│}{2: ~}{5:│}|
- {5:└─────┘}|
- ]], float_pos={
- [4] = {{id = 1001}, "NW", 1, 1, 1, true, 50};
- }, win_viewport={
- [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
- [4] = {win = {id = 1001}, topline = 0, botline = 3, curline = 1, curcol = 2, linecount = 2, sum_scroll_delta = 0};
- }}
- else
- screen:expect{grid=[[
- |
- {0:~}{5:┌─────┐}{0: }|
- {0:~}{5:│}{1: cba}{5:│}{0: }|
- {0:~}{5:│}{1: ^fed}{5:│}{0: }|
- {0:~}{5:│}{2: ~}{5:│}{0: }|
- {0:~}{5:└─────┘}{0: }|
- |
- ]]}
- end
- end)
- end
- describe('with ext_multigrid', function()
- with_ext_multigrid(true)
- end)
- describe('without ext_multigrid', function()
- with_ext_multigrid(false)
- end)
- end)
|