diff --git a/src/tests/fixtures/ncmpcpp-wide-chars b/src/tests/fixtures/ncmpcpp-wide-chars new file mode 100644 index 0000000000..c28481d2be --- /dev/null +++ b/src/tests/fixtures/ncmpcpp-wide-chars @@ -0,0 +1,5 @@ +[?2004h]7;file://self/home/origincode]0;fish /home/origincode(B  +~ +>  n n (Beofetch (Bc(B nc (Bmpcpp (Bmpcpp (Bncmpcpp (Bpcpp (Bcpp (Bpp (Bp (Bncmpcpp (B  +(B[?2004l]0;ncmpcpp /home/origincode(B Reading configuration from /home/origincode/.config/ncmpcpp/config... +[?1049h(B[?7h[?25l[?1001s[?1000h[?1015h(B(0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq(B(B(0(BPlaylist (0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq(B(B(0(B(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島 (B[playing](B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B0:05/1:59(0qqu(B 新宝島 (0tqq(B(B(0(BRemixed by BEMANI Sound Team 'TAG feat. PON'(B - beatmania IIDX 28 BISTROVER Original Soundtrack (Disc2)(B (2021(B)(B[------](B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島Vol: 39%(B=========>(0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq[?7lq[?7h(B(B(0(B(B (BArtistTrack TitleAlbumTime (0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq(B(B(0(B(B(Bjam master '73 01 Jam Jam Reggae beatmania IIDX Original Soundtracks 1:17 (BQUADRA02 Beginning of lifebeatmania IIDX Original Soundtracks1:23 reo nagumo03 Do you love me?beatmania IIDX Original Soundtracks1:19 MIRAK04 OVERDOSERbeatmania IIDX Original Soundtracks1:18 dj nagureo05 5.1.1.beatmania IIDX Original Soundtracks1:17 SLAKE06 GAMBOLbeatmania IIDX Original Soundtracks1:21 JJ COMPANY07 Be in my paradisebeatmania IIDX Original Soundtracks1:36 e.o.s.08 e-motionbeatmania IIDX Original Soundtracks1:14 LOVEMINTS09 LOVE SO GROOVYbeatmania IIDX Original Soundtracks1:19 nite system10 Salamander Beat Crush mixbeatmania IIDX Original Soundtracks1:22 DJ nagureo11 20,novemberbeatmania IIDX Original Soundtracks1:20 baby weapon feat.Asuka.M12 Dr. LOVEbeatmania IIDX Original Soundtracks1:41 DJ mazinger featuring Muhammad13 g.m.d.beatmania IIDX Original Soundtracks1:23 Honey P feat.Asuka.M14 Melt in my armsbeatmania IIDX Original Soundtracks1:33 QUADRA15 diving moneybeatmania IIDX Original Soundtracks1:20 nite system16 perfect freebeatmania IIDX Original Soundtracks1:22 tiger YAMATO17 R3beatmania IIDX Original Soundtracks1:23 SLAKE18 22DUNKbeatmania IIDX Original Soundtracks1:16 QUADRA19 Deep clear eyesbeatmania IIDX Original Soundtracks1:21 THE BALD HEADS20 ska a go gobeatmania IIDX Original Soundtracks1:22 DJ FX21 special energybeatmania IIDX Original Soundtracks1:20 SPIRITUAL RIDE22 Prince on a starbeatmania IIDX Original Soundtracks1:34 JJ COMPANY23 celebratebeatmania IIDX Original Soundtracks1:40 TAKA24 GRADIUSIC CYBERbeatmania IIDX Original Soundtracks1:47 tiger YAMATO25 LUV TO ME (disco mix)beatmania IIDX Original Soundtracks1:37 JJ COMPANY26 celebrate (LONG MIX)beatmania IIDX Original Soundtracks3:19 JJ COMPANY27 Be in my paradise (LONG MIX)beatmania IIDX Original Soundtracks3:55 dj nagureo01 g.m.d. 〜beginning from bm-mtbeatmania*maniac-tracks0:26 DJ Swan02 Gentle stressbeatmania*maniac-tracks1:43 ANAL SPYDER03 Macho Gangbeatmania*maniac-tracks1:38 L.E.D.LIGHT04 THE EARTH LIGHTbeatmania*maniac-tracks1:35 good-cool05 Headachebeatmania*maniac-tracks1:31 dj TAKA06 I'm In Love Againbeatmania*maniac-tracks1:49 dj nagureo07 dong-tepo no.1beatmania*maniac-tracks1:24 dj TAKA feat.UZI-LAY08 PUT YOUR FAITH IN ME (for beatmania II)beatmania*maniac-tracks1:57(B さよひめぼう24 Mars beachbeatmania IIDX 28 BISTROVER Original Soundtrack (Disc1) 2:04 callasoiled25 rommmo 28 BISTROVER Original Soundtrack (Disc1) 2:02 PARKGOLF 26 Overslept 28 BISTROVER Original Soundtrack (Disc1) 2:02 BEMANI Sound Team 'DARK TRAIN'27 S-Bahn 28 BISTROVER Original Soundtrack (Disc1) 1:5 AJURIKA 28 LAST DAY28 BISTROVER Original Soundtrack (Disc1) 2:03 Masayoshi Iimori29 Ah Hah Yeah28 BISTROVER Original Soundtrack (Disc1) 1:50 Yuta Imai 30 HIGH VOLTAGE 28 BISTROVER Original Soundtrack (Disc1) 2:07 BEMANI Sound Team 'Sota Fujimori'31 Breakin' Rules28 BISTROVER Original Soundtrack (Disc1) 2:09 Snail's House32 魔法のかくれんぼ28 BISTROVER Original Soundtrack (Disc1) 2:03 らっぷびと Prod. by uno33 Midnight Drive 28 BISTROVER Original Soundtrack (Disc1) 2:03 TORIENA 34 Chewingood!!!28 BISTROVER Original Soundtrack (Disc1) 2:02 BEMANI Sound Team 'HuΣeR' respect for D.J.Amur 01 ∀ 28 BISTROVER Original Soundtrack (Disc2) 2:02 BEMANI Sound Team 'Yvya' 02 Vitrum28 BISTROVER Original Soundtrack (Disc2) 2:04 BEMANI Sound Team 'Trance Liquid'03 of the first magnitude28 BISTROVER Original Soundtrack (Disc2) 2:12 Remixed by Ryu☆04 IIDX RED Ending (Ryu☆Remix)28 BISTROVER Original Soundtrack (Disc2) 1:58 The 4th feat.ここなつ05 Here We Are 28 BISTROVER Original Soundtrack (Disc2) 2:10 LADY'S ONLY 06 When I Met U28 BISTROVER Original Soundtrack (Disc2) 1:54 (BRemixed by BEMANI Sound Team 'TAG feat. PON' 07 新宝島 beatmania IIDX 28 BISTROVER Original Soundtrack (Disc2) 1:59 (BRemixed by まろん feat. ricono08 TOMORROW 28 BISTROVER Original Soundtrack (Disc2) 2:00 Remixed by BEMANI Sound Team 'L.E.D.' & IOSYS 09 Romanticが止まらない28 BISTROVER Original Soundtrack (Disc2) 1:54 BEMANI Sound Team 'Sota F.'10 BEMANI PRO LEAGUE Theme28 BISTROVER Original Soundtrack (Disc2) 2:03 BEMANI Sound Team 'Trance Liquid'11 of the first magnitude (Extended Mix)28 BISTROVER Original Soundtrack (Disc2) 6:08 BEMANI Sound Team 'TAG'12 Euphoric Lagoon (Extended Mix)28 BISTROVER Original Soundtrack (Disc2) 3:26 BEMANI Sound Team 'Coyaan'13 水鏡の異界 (Extended Mix)28 BISTROVER Original Soundtrack (Disc2) 4:15 BEMANI Sound Team 'Yvya'14 Vitrum (Extended M28 BISTROVER Original Soundtrack (Disc2) 4:08 Maozon feat. Chica15 WAKE UP NOW (Long Version)28 BISTROVER Original Soundtrack (Disc2) 3:36 C-Show 16 Swarm Of Scarabs (Extended Mix)28 BISTROVER Original Soundtrack (Disc2) 3:14 Dazsta 17 Rowdy (Extended Mix)  IIDX 28 BISTROVER Original Soundtrack (Disc2) 4:03 The 4th feat.ここなつ18 Here We Are  IIDX 28 BISTROVER Original Soundtrack (Disc2) 3:52 LADY'S ONLY19 When I Met U IIDX 28 BISTROVER Original Soundtrack (Disc2) 3:32 Masayoshi Iimori20 Ah Hah Yeah (Extended Mix) IIDX 28 BISTROVER Original Soundtrack (Disc2) 3:09 TORIENA 21 Chewingood!!! (Long Version) IIDX 28 BISTROVER Original Soundtrack (Disc2) 3:33 BEMANI Sound Team 'HuΣeR' respect for D.J.Amur 22 ∀ (Extended Mix)  IIDX 28 BISTROVER Original Soundtrack (Disc2) 3:47 かめりあ 1 SCREW // owo // SCREW IIDX 28 BISTROVER Original Soundtrack (Disc3) 2:03 三代目 'dj TAKA & DAYBREAKERS'2 27th style IIDX 28 BISTROVER Original Soundtrack (Disc3) 2:05(B Connected to localhost]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島  (BRemixed by BEMANI Sound Team 'TAG feat. PON' 07 新宝島beatmania IIDX 28 BISTROVER Original Soundtrack (Disc2) 1:59(B(BPlaylist (2035 items, length: 3 days, 4 hours, 4 minutes, 28 seconds)(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B6 (B Ryu☆ 03 Like+it! 3) 1:41 Masqed Pierrot04 THE F∀UST38 SOUND HOLIC Vs. ZYTOKINE feat. CALEN05 Voo Doo Bamboleo310 Eagle06 Rave Patroller3) 2:09 Xceon 07 Bow shock!!39 Relect 08 Shiva 34 Remo-con 09 Matt Silver 34PIRITUAL RIDE'10 Horizons of Promise34 DJ Mass MAD Izm* feat.REO11 Lords Of The Roundtable36 BEMANI Sound Team 'SYUNN'12 Lost Souls 3) 1:5 猫叉Master13 The Sky of Sadness3) 1:54 lapix14 Double Dribble37 Yamato15 Level 237 AJURIKA16 BEAT PRISONER 300 BEMANI Sound Team 'setup VS 謎の勢力'17 rough percussionythm 3) 2:10 Pa's Lam System 18 If 3) 1:53 Feryquitous19 Friction[!]Function3) 2:07 (BCANVAS feat. Quimär 20 Artist beatmania IIDX 28 BISTROVER Original Soundtrack (Disc3) 2:02 (BBlacklolita21 Advent Infamous33 Hommarju22 GHOST3) 2:00 nora2r23 Smashing Wedge 34HERO' 24 EROICA3) 2:06setup'01 Ypsilon4) 2:05 Nhato Vs. MK02 VIBRΛ4) 2:0 librarians of Rootage (Ripnte, Stampa and Clee 03 開きたまえ!Next stAge!4) 2:06 banvox 04 Sellout4) 1:5 Masayoshi Iimori05 Punching Down (IIDX Mix) 4) 2:03 Wiktoria06 華麗なる大犬円舞曲 4) 2:12 DJ SHARPNEL feat. ¥Cuスタ平07 錬成人間トリコロイダー4) 2:03 fallen shepherd ft. ricono08 Inferno of Fomalhaut4) 2:05 噂の怪盗少女ぷらずま★彡Prim@休業中~( _ _ ).。 09 がっつり陰キャ!? 怪盗いいんちょの億劫^^;4) 2:01 BEMANI Sound Team 'Expander'10 STOIC HYPOTHESIS 4) 2:07TATSUYA'11 魅惑のYUMMYスイーツ4) 2:06 BEMANI Sound Team 'レ・度胸兄弟'12 Dans la nuit de l'éternité410 BEMANI Sound Team 'HuΣeR' 13 Rejection Girl44(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B7 (B BEMANI Sound Team 'Expander'14 STOIC HYPOTHESIS (Extended Mix)4) 5:2215(The 'Masqed Storyteller')4) 4:41 AJURIKA16 BEAT PRISONER -Extended Mix-4) 3:59 Remo-con17 Matt Silver -Extended Mix-4) 4:54 nora2r18 Smashing Wedge (Extended Mix)4) 4:20 Wiktoria19 華麗なる大犬円舞曲 (Long ver.)4) 4:16 BEMANI Sound Team 'HuΣeR'20 Rejection Girl (Extended Mix)4) 3:4 kors k vs MAD CHILD21 Neo Heritage(Extended Mix)4) 4:00 Cream puff01 Mermaid girl 18 Resort Anthem ORIGINAL SOUNDTRACK 2 Risk Junk02 Tropical April18 Resort Anthem ORIGINAL SOUNDTRACK 2:08 Sota Fujimori feat. dj MAX STEROID03 Never Fade Away 18 Resort Anthem ORIGINAL SOUNDTRACK 2:05 L.E.D.04 THE DOOR INTO RAINBOW18 Resort Anthem ORIGINAL SOUNDTRACK 6 seiya-murai feat. David Solanes Venzala0a Mar 18 Resort Anthem ORIGINAL SOUNDTRACK 3nemo=Aspel by MLREC.0LUST OF WIND18 Resort Anthem ORIGINAL SOUNDTRACK 猫叉Master feat.Sana07 おおきなこえで 18 Resort Anthem ORIGINAL SOUNDTRACK 2:04 kors k feat.Kanata Okajima&楽天斎08 Bounce Bounce Bounce18 Resort Anthem ORIGINAL SOUNDTRACK 2:10 CULTVOICE by S.S.D.PRODUCTS09 かげぬい ~ Ver.BENIBOTAN ~18 Resort Anthem ORIGINAL SOUNDTRACK 2 (Bgood-cool ft. Brenda Vaughn10 You Were The One18 Resort Anthem ORIGINAL SOUNDTRACK (BDirty Androids11 Golden Palms 18 Resort Anthem ORIGINAL SOUNDTRACK 1 PRASTIK DANCEFLOOR12 Cansei de S NIK18 Resort Anthem ORIGINAL SOUNDTRACK 1:49 壱岐尾彩花13 Get Out 18 Resort Anthem ORIGINAL SOUNDTRACK 1 Sota Fujimori feat.Sachi14 Take Me Higher18 Resort Anthem ORIGINAL SOUNDTRACK 2 Dirty Androids 15 New Castle Legions -Stage 1 mix-18 Resort Anthem ORIGINAL SOUNDTRACK 3:22 CAPACITY GATE16 Destiny Sword18 Resort Anthem ORIGINAL SOUNDTRACK 1:48 MYTHOLOGIA by MLREC.17 BROKEN EDEN 18 Resort Anthem ORIGINAL SOUNDTRACK 1:55 PRASTIK DANCEFLOOR18ssion 9 -Chronicles-18 Resort Anthem ORIGINAL SOUNDTRACK 2:03 Tatsh 19 reunion18 Resort Anthem ORIGINAL SOUNDTRACK Zektbach20 ZETA~素数の世界と超越者~18 Resort Anthem ORIGINAL SOUNDTRACK 4 JAKAZiD21 夕焼け ~Fading Day~ 18 Resort Anthem ORIGINAL SOUNDTRACK 1:56 Uraken feat. Calyn Tsukishima22 Believe In Me 18 Resort Anthem ORIGINAL SOUNDTRACK 7 M-Project fw. GUHROOVY23 Rock Da House18 Resort Anthem ORIGINAL SOUNDTRACK 1:49 Remixed by JAKAZiD 24 ラクエン Feat.Chiharu Chonan -JAKA respect for K.S.K. Remix18 Resort Anthem ORIGINAL SOUNDTRACK kevin energy25 Energy Drive 18 Resort Anthem ORIGINAL SOUNDTRACK 5 kors k26 Programmed Life 18 Resort Anthem ORIGINAL SOUNDTRACK 1:5 Mystic Moon27 Vermillion 18 Resort Anthem ORIGINAL SOUNDTRACK 1:31(B NISH28 Space Time18 Resort Anthem ORIGINAL SOUNDTRACK 2:1 xac 29 Programmed Sun (xac Antarctic Ocean mix)18 Resort Anthem ORIGINAL SOUNDTRACK 2:07 Remo-con30 EXTREMA PT. 218 Resort Anthem ORIGINAL SOUNDTRACK 2:02 IT medalion31 Aegis18 Resort Anthem ORIGINAL SOUNDTRACK 1:48 DJ Mass MAD Izm* VS.DJ Yoshitaka32 Watch Out Pt.218 Resort Anthem ORIGINAL SOUNDTRACK 1:5 DJムラサメ33 ANTHEM LANDING -original extended -18 Resort Anthem ORIGINAL SOUNDTRACK 6:02 DJ Mass MAD Izm* 34 灼熱Beach Side Bunny 18 Resort Anthem ORIGINAL SOUNDTRACK 2:02 Ryu☆01 passionate fate 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:58 T.Kakuta With Starving Trancer + 森永真由美 02 XANADU OF TWO18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:11 kobo feat. Marsha3 I FIGHT ME 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:04 DJ Command feat. うさ&ともみん 4 恋愛レボリューション21 -秋葉工房mix-18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:00 木之下慶行 feat. 星野奏子5 WISE UP! 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:45 ピンクターボ6 DAYDREAMER18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:09 DJ Yoshitaka feat.RINA7 Stay my side 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:42 星野奏子 8 Answer 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:07 Keiichi Ueno feat. RIISA 9 Raise your hands 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:59 Studio Bongo Mango feat. Likkle Mai10 WE LOVE SHONAN18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:47 (BNAOKI 1 DM STAR ~関西 eneagy style~18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:04 (BL.E.D.-G 2 ELECTRIC MASSIVE DIVER18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:20 Dr. Honda 3 Dances with Snow Fairies18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:07 XOGO BRYKK4 旅人リラン18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:03 Art of Fighters 5 Breaking the ground18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:21 HIROSHI WATANABE6 LIFE SCROLLING18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:07 DJ Weaver 7 Hardcore Mania18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:52 kors k8 Kailua 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc L.E.D. 9 THE BLACK KNIGHT 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:08 Brisk & Ham20 Let The Track Flow18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:57 Ryu☆ Vs. L.E.D.-G1 PARADISE LOST 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:13 iconoclasm2 perditus†paradisus 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:27 SUPER STAR 満 -MITSURU- 3 Everlasting Resort18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:53 TЁЯRA4 Fantasia 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:46 TAG5 SABER WING18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:48 Ryu☆ 6 sakura storm18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:33 DJ YOSHITAKA7 ALBIDA 18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:55 村正クオリア8 黒髪乱れし修羅となりて18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:05(B NAOKI11 DM STAR ~関西 eneagy style~beatmania IIDX18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:04 ツガル29 Eternal Tearsbeatmania IIDX18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 2:00 イロハ&リリナ30 Medicine of lovebeatmania IIDX18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 1:40 DJ Command feat. うさ&ともみん31 恋愛レボリューション21 -秋葉工房mix- Long Versionbeatmania IIDX18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 4:57 T.Kakuta With Starving Trancer + 森永真由美 32 XANADU OF TWO - BEYOND THE ETERNAL XANADU MIX -beatmania IIDX18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 3:58 (BCream puff 33 Mermaid girl (Extended ver.) beatmania IIDX18 Resort Anthem ORIGINAL SOUNDTRACK [Disc 3:01 (B ]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B8 (B        Wiktoria 19 華麗なる大犬円舞曲 (Long ver.) 28 BISTROVER Original Soundtrack (Disc4) 4:16 BEMANI Sound Team 'HuΣeR'20 Rejection Girl (Extended Mix)28 BISTROVER Original Soundtrack (Disc4) 3:44 kors k vs MAD CHILD21 Neo Heritage(Extended Mix) 28 BISTROVER Original Soundtrack (Disc4) 4:00 Cream puff01 Mermaid girl  18 Resort Anthem ORIGINAL SOUNDTRACK 2:02 Risk Junk 2 Tropical April 18 Resort Anthem ORIGINAL SOUNDTRACK 2:08 Sota Fujimori feat. dj MAX STEROID3 Never Fade Away 18 Resort Anthem ORIGINAL SOUNDTRACK 2:05 L.E.D.4 THE DOOR INTO RAINBOW 18 Resort Anthem ORIGINAL SOUNDTRACK 2:06 seiya-murai feat. David Solanes Venzala5 La Mar  18 Resort Anthem ORIGINAL SOUNDTRACK 2:03 Anemo=Aspel by MLREC. 6 BLUST OF WIND 18 Resort Anthem ORIGINAL SOUNDTRACK 2:00 猫叉Master feat.Sana7 おおきなこえで 18 Resort Anthem ORIGINAL SOUNDTRACK 2:04 kors k feat.Kanata Okajima&楽天斎8 Bounce Bounce Bounce 18 Resort Anthem ORIGINAL SOUNDTRACK 2:10 CULTVOICE by S.S.D.PRODUCTS 09 かげぬい ~ Ver.BENIBOTAN ~ 18 Resort Anthem ORIGINAL SOUNDTRACK 2:02 good-cool ft. Brenda Vaughn0 You Were The One  18 Resort Anthem ORIGINAL SOUNDTRACK 2:02 Dirty Androids1 Golden Palms  18 Resort Anthem ORIGINAL SOUNDTRACK 2:01 PRASTIK DANCEFLOOR2 Cansei de S NIK  18 Resort Anthem ORIGINAL SOUNDTRACK 1:49 壱岐尾彩花3 Get Out  18 Resort Anthem ORIGINAL SOUNDTRACK 2:01 Sota Fujimori feat.Sachi4 Take Me Higher  18 Resort Anthem ORIGINAL SOUNDTRACK 2:02 Dirty Androids 5 New Castle Legions -Stage 1 mix- 18 Resort Anthem ORIGINAL SOUNDTRACK 3:22 CAPACITY GATE6 Destiny Sword  18 Resort Anthem ORIGINAL SOUNDTRACK 1:48 MYTHOLOGIA by MLREC.7 BROKEN EDEN 18 Resort Anthem ORIGINAL SOUNDTRACK PRASTIK DANCEFLOOR8 Session 9 -Chronicles- 18 Resort Anthem ORIGINAL SOUNDTRACK 2:03 Tatsh 19 reunion  18 Resort Anthem ORIGINAL SOUNDTRACK 2:03 Zektbach 0 ZETA~素数の世界と超越者~ 18 Resort Anthem ORIGINAL SOUNDTRACK 2:14 JAKAZiD 1 夕焼け ~Fading Day~ 18 Resort Anthem ORIGINAL SOUNDTRACK 1:56 Uraken feat. Calyn Tsukishima2 Believe In Me  18 Resort Anthem ORIGINAL SOUNDTRACK 2:07 M-Project fw. GUHROOVY3 Rock Da House 18 Resort Anthem ORIGINAL SOUNDTRACK 1:49 Remixed by JAKAZiD4 ラクエン Feat.Chiharu Chonan -JAKA respect for K.S.K. Remix 18 Resort Anthem ORIGINAL SOUNDTRACK 2:07 kevin energy5 Energy Drive 18 Resort Anthem ORIGINAL SOUNDTRACK 2:05 kors k 6 Programmed Life 18 Resort Anthem ORIGINAL SOUNDTRACK 1:50 Mystic Moon 7 Vermillion  18 Resort Anthem ORIGINAL SOUNDTRACK 1:31 NISH 8 Space Time  18 Resort Anthem ORIGINAL SOUNDTRACK 2:12 xac 29 Programmed Sun (xac Antarctic Ocean mix) 18 Resort Anthem ORIGINAL SOUNDTRACK 2:07 Remo-con0 EXTREMA PT. 2 18 Resort Anthem ORIGINAL SOUNDTRACK 2:02 IT medalion31 Aegis 18 Resort Anthem ORIGINAL SOUNDTRACK 1:4 (BDJ Mass MAD Izm* VS.DJ Yoshitaka2 Watch Out Pt.2  18 Resort Anthem ORIGINAL SOUNDTRACK 1:50(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B9 (B Relect 08 Shiva3) 1:54 Remo-con09 Matt Silver3) 2:0 BEMANI Sound Team 'SPIRITUAL RIDE'10 Horizons of Promise 3) 2:04 DJ Mass MAD Izm* feat.REO11 Lords Of The Roundtable28 BISTROVER Original Soundtrack (Disc3)6 BEMANI Sound Team 'SYUNN'12 Lost Souls 28 BISTROVER Original Soundtrack (Disc3) 1:53 猫叉Master13 The Sky of Sadness28 BISTROVER Original Soundtrack (Disc3) 1:54 lapix 14 Double Dribble 28 BISTROVER Original Soundtrack (Disc3)7 Yamato1evel 228 BISTROVER Original Soundtrack (Disc3)7JURIKA1EAT PRISONER28 BISTROVER Original Soundtrack (Disc3) BEMANI Sound Team 'setup VS 謎の勢力'17 rough percussionythm28 BISTROVER Original Soundtrack (Disc3) 2:10 Pa's Lam System18 If28 BISTROVER Original Soundtrack (Disc3) 1:53 Feryquitous19 Friction[!]Function 28 BISTROVER Original Soundtrack (Disc3)7 CANVAS feat. Quimär 20 Artist 28 BISTROVER Original Soundtrack (Disc3) Blacklolita 21 Advent Infamous28 BISTROVER Original Soundtrack (Disc3)3 Hommarju 22 GHOST 28 BISTROVER Original Soundtrack (Disc3) 2:00 nora2r 23 Smashing Wedge28 BISTROVER Original Soundtrack (Disc3)4 BEMANI Sound Team 'HERO'24 EROICA 28 BISTROVER Original Soundtrack (Disc3)6 BEMANI Sound Team 'setup'01 Ypsilon28 BISTROVER Original Soundtrack (Disc4) 2:05 Nhato Vs. MK 02 VIBRΛ 28 BISTROVER Original Soundtrack (Disc4) 2:05 librarians of Rootage (Ripnte, Stampa and Clee 03 開きたまえ!Next stAge!28 BISTROVER Original Soundtrack (Disc4) 2:06 banvox 04llout28 BISTROVER Original Soundtrack (Disc4) 1:56 Masayoshi Iimori05 Punching Down (IIDX Mix)28 BISTROVER Original Soundtrack (Disc4) Wiktoria06 華麗なる大犬円舞曲 28 BISTROVER Original Soundtrack (Disc4)2 DJ SHARPNEL feat. ¥Cuスタ平07 錬成人間トリコロイダー28 BISTROVER Original Soundtrack (Disc4) 2:03 fallen shepherd ft. ricono 08 Inferno of Fomalhaut28 BISTROVER Original Soundtrack (Disc4)5 噂の怪盗少女ぷらずま★彡Prim@休業中~( _ _ ).。 09 がっつり陰キャ!? 怪盗いいんちょの億劫^^;28 BISTROVER Original Soundtrack (Disc4) 2:01 BEMANI Sound Team 'Expander'10 STOIC HYPOTHESIS28 BISTROVER Original Soundtrack (Disc4) BEMANI Sound Team 'TATSUYA'11 魅惑のYUMMYスイーツ28 BISTROVER Original Soundtrack (Disc4)6 BEMANI Sound Team 'レ・度胸兄弟'12 Dans la nuit de l'éternité28 BISTROVER Original Soundtrack (Disc4) 2:1 BEMANI Sound Team 'HuΣeR'13 Rejection Girl28 BISTROVER Original Soundtrack (Disc4) 2:04 BEMANI Sound Team 'Expander'14 STOIC HYPOTHESIS (Extended Mix)28 BISTROVER Original Soundtrack (Disc4) 5:2 Masqed Pierrot15 THE F∀UST (The 'Masqed Storyteller') 28 BISTROVER Original Soundtrack (Disc4) 4:41 AJURIKA 16 BEAT PRISONER -Extended Mix-28 BISTROVER Original Soundtrack (Disc4) 3:59 Remo-con 17 Matt Silver -Extended Mix-28 BISTROVER Original Soundtrack (Disc4) 4:54 (Bnora2r 18 Smashing Wedge (Extended Mix)28 BISTROVER Original Soundtrack (Disc4) 4:20(B Masayoshi Iimori29 Ah Hah Yeah10 Yuta Imai30 HIGH VOLTAGE17ota Fujimori' 31 Breakin' Rules 19 Snail's House 32 魔法のかくれんぼ 13 らっぷびと Prod. by uno 33 Midnight Drive1) 2:0 TORIENA 34 Chewingood!!! 1) 2:02 BEMANI Sound Team 'HuΣeR' respect for D.J.Amur 01 ∀ 22 BEMANI Sound Team 'Yvya'02 Vitrum 24 BEMANI Sound Team 'Trance Liquid'03 of the first magnitude212 Remixed by Ryu☆04 IIDX RED Ending (Ryu☆Remix)2) 1:58 The 4th feat.ここなつ05 Here We Are2) 2:10 LADY'S ONLY06 When I Met U 2) 1:54 (BRemixed by BEMANI Sound Team 'TAG feat. PON' 07 新宝島beatmania IIDX 28 BISTROVER Original Soundtrack (Disc2) 1:59 (BRemixed by まろん feat. ricono08 TOMORROW 20 Remixed by BEMANI Sound Team 'L.E.D.' & IOSYS 09 Romanticが止まらない2) 1:54 BEMANI Sound Team 'Sota F.'10 BEMANI PRO LEAGUE Theme23Trance Liquid'11 of the first magnitude (Extended Mix)2) 6:08TAG' 12 Euphoric Lagoon (Extended Mix)2) 3:26 BEMANI Sound Team 'Coyaan'13 水鏡の異界 (Extended Mix)2) 4:1 BEMANI Sound Team 'Yvya'14 Vitrum (Extended Mix) 2) 4:08 Maozon feat. Chica15 WAKE UP NOW (Long Version)2) 3:3 C-Show 16 Swarm Of Scarabs (Extended Mix)2) 3:14 Dazsta 17 Rowdy (Extended Mix)2) 4:03 The 4th feat.ここなつ 18 Here We Are 2) 3:52 LADY'S ONLY19 When I Met U 2) 3:32 Masayoshi Iimori20 Ah Hah Yeah (Extended Mix)2) 3:09 TORIENA21 Chewingood!!! (Long Version)2) 3:33HuΣeR' respect for D.J.Amur 22 ∀ (Extended Mix) 2) 3:47 かめりあ01 SCREW // owo // SCREW 303 三代目 'dj TAKA & DAYBREAKERS'02 27th style 35 Ryu☆03 Like+it!3) 1:41043) 2:08 SOUND HOLIC Vs. ZYTOKINE feat. CALEN05 Voo Doo Bamboleo 3) 2:10 Eagle 06 Rave Patroller 3) 2:09 (BXceon 07 Bow shock!! 3) 2:09(B BEMANI Sound Team 'HuΣeR'18 Lethal Weapon7 HEROIC VERSE Original Soundtrack 2:05 Maozon 19 Geirskögul (Extended Mix)7 HEROIC VERSE Original Soundtrack 4:22 C-Show20 Please Welcome Mr.C (20,000 POWER Extended)7 HEROIC VERSE Original Soundtrack 3:22 Hommarju 21 Next Tales 2 Oath (IIDX 20th Anniv. 'Ring' Theme) (Original Mix)7 HEROIC VERSE Original Soundtrack 5:45 m1dy22 ONIGOROSHI (LONG EDIT)7 HEROIC VERSE Original Soundtrack 3:12 AJURIK23 HARD BRAIN -ARENA EDIT-7 HEROIC VERSE Original Soundtrack 4:55 librarians of Rootage (Ripnte, Stampa and Clee 24 開きたまえ!Next stAge!(Full Length Version)7 HEROIC VERSE Original Soundtrack 4:29HuΣeR'1 BISTROVER -Travel & Gourmet!-1) 0:36AG' 2 Euphoric Lagoon 108 kors k 3 Rub-a Dub-a1) 2:01 かめりあ feat. ななひら4 POLꞰAMAИIA 102 BEMANI Sound Team '劇団レコード' feat.Risa Yuz 05 霧幻メモリア19 BEMANI Sound Team 'Coyaan'06 水鏡の異界beatmania IIDX 28 BISTROVER Original Soundtrack (Disc1) 2:00 LA BAILARINA☆Prim 7 涙のテ・エストラーニョ・ムーチョ16 削除 feat. 削除08 Para siempre 1) 2:10 lapix09 Ocean Blue feat. Luschel17 Dirty Androids0 Farewell to Marrakech1) 2:09 AJURIKA1 BIGソムタム1) 2:05 kors k2 Empire of Fury 1) 2:03 C-Show3 Swarm Of Scarabs 1) 1:51 SOUND HOLIC feat. Nana Takahashi4 AMRITA -不滅ノ花- 1) 2:0 Nhato 5 Don't Stop The Music feat. Kanae Asaba1) 2:03 Xceon 6 水無月の雫 ft. 小林まな1) 2:05 OSTER project feat. そらこ7 犬に雨傘 1) 2:1 まろん feat. キャサリン8 Lovely Howdy Cowboy!!1) 2:01 ARM (IOSYS) × cotowari ft. anporin19 Party Starter 1) 2:05 Dazsta 0 Rowdy1) 2:02 Maozon feat. Chica21 WAKE UP NOW 1) 2:05 Blacklolita22 GIGA RAID 15 Y&Co. feat. 大山愛未 23 So Punky 1 さよひめぼう24 Mars beach1) 2:04 callasoiled 25 rommmo 12 PARKGOLF26 Overslept 102 BEMANI Sound Team 'DARK TRAIN'27 S-Bahn 1) 1:58 (BAJURIKA28 LAST DAY 13(B TAG' 2 BLO§OM 8 BEMANI Sound Team 'Anonymous'3 Unbelief2:09 SOUND HOLIC feat. Nana Takahashi14 EVANESCENT2:05 BEMANI Sound Team 'HuΣeR'15croxis Girl2:03 sanodg16 Sidechained Threats 2:07 kors k 17 Mächö Mönky 2:04 CANVAS feat. Quimär18 Carmina2:11Sota Fujimori'19 Lift Us High7 HEROIC VERSE Original Soundtrack 2:13 ARM × BEMANI Sound Team 'U1 overground'20 ZENDEGI DANCE 7 HEROIC VERSE Original Soundtrack 5 Hommarju21 Next Tales 2 Oath (IIDX 20th Anniv. 'Ring' Theme)7 HEROIC VERSE Original Soundtrack 3 Xceon feat. Mayumi Morinaga22 深愛のリグレット7 HEROIC VERSE Original Soundtrack 2:1 kors k23 Garuda 7 HEROIC VERSE Original Soundtrack 1:46 AJURIKA24 HARD BRAIN7 HEROIC VERSE Original Soundtrack 2:12 Maozon 25 Geirskögul7 HEROIC VERSE Original Soundtrack 8 BEMANI Sound Team 'HEXA'26 CODE:Ø 7 HEROIC VERSE Original Soundtrack 2:05 上ノ瀬つかさ27 ruin of opals 7 HEROIC VERSE Original Soundtrack 4 SLAKE 28 REPLAY7 HEROIC VERSE Original Soundtrack 2:16 Feryquitous29 Visterhv 7 HEROIC VERSE Original Soundtrack 6 MM 01 Night! Night! Night!7 HEROIC VERSE Original Soundtrack 602 Please Welcome Mr.C7 HEROIC VERSE Original Soundtrack 8 bermei.inazawa/feat.霜月はるか 03 泰東ノ翠霞 7 HEROIC VERSE Original Soundtrack 2:17 Zektbach04 The Sealer 〜ア・ミリアとミリアの民〜 7 HEROIC VERSE Original Soundtrack 2:1 Snail's House05 お菓子の王国 7 HEROIC VERSE Original Soundtrack 2:12 DUNE & M-Project & GUHROOVY06 Technicolour Dreams7 HEROIC VERSE Original Soundtrack 1:50 ももいろクローバーZ 07 Re:Story 7 HEROIC VERSE Original Soundtrack 1:48 Mr.T08 XENON II ~TOMOYUKIの野望~7 HEROIC VERSE Original Soundtrack 1:57J TECHNORCH feat. 宇宙★海月09 金野火織の金色提言7 HEROIC VERSE Original Soundtrack 4 DJ Mass MAD Izm* 10 Red. by Jack Trance7 HEROIC VERSE Original Soundtrack 6 冬色AMOUR☆Prim11 抱きしめてモナムール7 HEROIC VERSE Original Soundtrack 2:17 lapix12 & Intelligence7 HEROIC VERSE Original Soundtrack 7 m1dy 13 ONIGOROSHI7 HEROIC VERSE Original Soundtrack BEMANI Sound Team 'Captain Sonic'14 COSMIC CYBER7 HEROIC VERSE Original Soundtrack 1:5 VINCENT GANATCH15 GENE 7 HEROIC VERSE Original Soundtrack 6:07L.E.D.-G' 16 GO OVER WITH GLARE -ROOTAGE 26-7 HEROIC VERSE Original Soundtrack 2:0 (BT.Σ.Generation17 X-DEN 7 HEROIC VERSE Original Soundtrack 8(B Xceon02 セピアの軌跡 ft. 天宮みや(少女フラクタル)10 OSTER project feat. かなたん 03 Calvados Queen12 ゴールデンボンバー arranged by DJ Mass(VIVID N 04 令和(1991RAVE REMIX)1:56 上坂すみれ arranged by kors k05 POP TEAM EPIC(kors k Remix)4 Remixed by すわひでお & uno(IOSYS)06 俺ら東京さ行ぐだ 0 Remixed by BEMANI Sound Team 'HuΣeR feat.PON' 07 EXCITE 1:50 BEMANI Sound Team 'L.E.D.'08 PHASE SHIFT MANEUVER09HuΣeR' 0IGHTNING STRIKES00 kors k10 Sugar Drippin'3 Blacklolita11 GIGA VIOLATE1 YUTO12 Theory 08 Fujishiro feat. KNA13 And-RoiD51 Nhato 14 Override 07 Crayvxn15 Crank It 4TAG' 16 AKASHIC BREAK2 TAKU INOUE 17 Backyard Stars1:59 Maozon feat. Chica1ainstorm (Original Mix)6:05ujishiro feat. KNA19 And-RoiD -LONG VERSION-4:30 Dazsta20 Drop It (Extended Mix)3:33 DJ Shimamura21 Volcanic Dragon (Extended Mix)4:06 BEMANI Sound Team 'SETUP from Berlin'22 TECHNO Style Essentials (original extended)4:49 DÉ DÉ MOUSE23 Silly Love (Original Mix) 3:56 ARM × kradness24 Change Yourself (long edit)3:49 Nhato Vs. MK25 VIBRΛ (Extended Mix)3:3 かめりあ 1 LOST TECHNOLOGIE2:0 ARM×狐夢想 feat. ななひら2 爆ゼニ☆がってんワーカー 2:0 BEMANI Sound Team 'Mutsuhiko Izumi'3 SIGMA 8 SOUND HOLIC Vs. T.Kakuta feat. Nana Takahashi 04 ROZA DE ANDALUCIA 5 高田雅史 05 ToyCube Pf.(RX-Ver.S.P.L.)06 KING & Princess06 Drastic Dramatic2 Xceon07 Wolf 1061 7 YUC'e08 LADYBIRD BEMANI Sound Team 'L.E.D.' feat. KOTOKO09 UNDERWORLD HOLOGRAPHY2:12 kors k0 Playing With Fire1:4 (BBEMANI Sound Team '猫叉Master'1 Painful Fate11(B BEMANI Sound Team "謎の勢力"17 Initiation -aggressive solicitation mix- 6 Rootage ORIGINAL SOUNDTRACK 5:03 BEMANI Sound Team "TAKA on the circuit"18 Road to Cannon Ballers6 Rootage ORIGINAL SOUNDTRACK 1:31 BEMANI Sound Team 'HuΣeR' feat.Fernweh 01 VALKYRIAS -英雄誕生-2:12 BEMANI Sound Team 'L.E.D.-G' 2 THE BRAVE MUST DIE 1 DJ Shimamura3 Volcanic Dragon 9oughSketch & TARACHINE04 T-REX vs Velociraptor (In the Far east euphoria)2:02 Sampling Masters MEGA 5 Rave lithosphere 1 AJURIKA6 TRIUMPH 3 BEMANI Sound Team 'U1 overground'07 Queen Kaguya 9EMANI Sound Team 'SYUNN'08 Do What You Want1:47 Masayoshi Iimori09 NEWALONE2 Dazsta 0 Drop It 2:02 lapix1 Primitive Vibes5 KSUKE 2 Ohayo! (Short Version)6 Maozon feat. Chica 3 Rainstorm 8 AJURIKA feat. 矢吹真央4 Moving on 2:04 Y&Co. 5 NRG STAR '86 feat. 大山愛未2 Ryu☆6 Beautiful Harmony (IIDX Mix)2:13 Bemani Sound Team 'Sota Fujimori'17 Hold My Hand 2:07 BEMANI Sound Team 'Akhuta Works' feat. Nana Ta 18 曼荼羅恋々2:08劇団レコード' 19 OUTER PLANETS2:06 OSTER project0 深淵に捧ぐレクイエム 2:02 Nhato 1 Virus Funk2:06 Dirty Androids2 Infinity Mirror 2:12 佐野電磁23 Duration 3 × kradness 24 Change Yourself 4 kors k25 Nasty Techniques11 BEMANI Sound Team 'SETUP from Berlin' 26 TECHNO Style Essentials1:58 かめりあ feat. ななひら27 Ska-sh All Neurons!! 8 ビートまりお 28 beatAffection 19 パソコン音楽クラブ29 Hyper Drive feat. ぷにぷに電機3 Tomggg30 fairy cocktail2:01 Applekid31 Mel05 DÉ DÉ MOUSE32 Silly Love 2:04(BT.Kakuta' feat. 709sec. / 01 UNITE THE HEART6(B Saori Watanabe"1 バスルーム ロマンス2:05 Eagle2 Boomy and The Boost 2:13 志方あきこ13 命の標本 6 Rootage ORIGINAL SOUNDTRACK 08 RAM14 SHOX6 Rootage ORIGINAL SOUNDTRACK 1:2 猫叉Master+ 15 encounter 6 Rootage ORIGINAL SOUNDTRACK 7 BEMANI Sound Team "DJ TOTTO" feat.rionos16 シムルグの目醒め6 Rootage ORIGINAL SOUNDTRACK 9 YUC'e17 n'pa pa BBQ 6 Rootage ORIGINAL SOUNDTRACK 0 COSIO 18 Rise Circuit6 Rootage ORIGINAL SOUNDTRACK 1 USAO19 Rampage 6 Rootage ORIGINAL SOUNDTRACK 20 Scott Brown & M-Project 20 The Revolution (VIP Mix)6 Rootage ORIGINAL SOUNDTRACK 2:00 DJ CHUCKY 21 HYPE THE CORE6 Rootage ORIGINAL SOUNDTRACK 1:56irty Androids22 City Never Sleeps (IIDX Edition)6 Rootage ORIGINAL SOUNDTRACK 11 BEMANI Sound Team "謎の勢力"23 Initiation 6 Rootage ORIGINAL SOUNDTRACK 11 RoughSketch24 Life Is A Game ft.DD"ナカタ"Metal6 Rootage ORIGINAL SOUNDTRACK 9 25525 255 6 Rootage ORIGINAL SOUNDTRACK 1:55 C-Show26 ANAGMA 6 Rootage ORIGINAL SOUNDTRACK 8 Feryquitous27 Fervidex6 Rootage ORIGINAL SOUNDTRACK 1 sanodg28 From Time To Time 6 Rootage ORIGINAL SOUNDTRACK 0 AIKO OI29 Eine Haube ~聖地の果てにあるもの~6 Rootage ORIGINAL SOUNDTRACK 1:55 Massive New Krew01 Persephone6 Rootage ORIGINAL SOUNDTRACK 6 Maozon vs. C-Show02 Around the Future6 Rootage ORIGINAL SOUNDTRACK 1203 Raspberry Railgun 6 Rootage ORIGINAL SOUNDTRACK 0 DJ Noriken04 Illusionary Waterlily6 Rootage ORIGINAL SOUNDTRACK 7 lapix 05 Slipstream 6 Rootage ORIGINAL SOUNDTRACK 5 t+pazolite06 Antigravity6 Rootage ORIGINAL SOUNDTRACK 1:57 BEMANI Sound Team "SYUNN"07 Papilio ulysses6 Rootage ORIGINAL SOUNDTRACK 8 BEMANI Sound Team "HuΣeR vs dj Hellix"08 EMERALDAS 6 Rootage ORIGINAL SOUNDTRACK 1:58"HuΣeR Vs. SYUNN" 09 ANCHOR6 Rootage ORIGINAL SOUNDTRACK 2:07 BEMANI Sound Team "HuΣeR vs dj Hellix"10 EMERALDAS (EXTENDED MIX)6 Rootage ORIGINAL SOUNDTRACK 3:30 C-Show 11 ANAGMA (EXTENDED MIX)6 Rootage ORIGINAL SOUNDTRACK 4:4 DJ TECHNORCH feat.宇宙★海月 vs BEMANI Sound Te 12 真説・東京神話6 Rootage ORIGINAL SOUNDTRACK 3:27 RoughSketch13 Life Is A Game ft.DD"ナカタ"Metal (Extended Mix)6 Rootage ORIGINAL SOUNDTRACK 5:2 lapix 14 Slipstream (Extended Mix)6 Rootage ORIGINAL SOUNDTRACK 4:09 sanodg 15 From Time To Time (To Time Mix)6 Rootage ORIGINAL SOUNDTRACK 5:52 (B志方あきこ 16 命の標本- Extended Mix6 Rootage ORIGINAL SOUNDTRACK 3:55(B Pizuya's Cell30 Let me be your cure17 BEMANI Sound Team "黒猫ダンジョン"31 龍王の霊廟(Mausoleum Of The Primal Dragon)1 BEMANI Sound Team "person09"32 A Tale Hidden In The Abyss6 soejima takuma feat.BEMANI Sound Team "猫叉Mas 33 ミストレス・アンに花束を51 BEMANI Sound Team "L.E.D. VS. L.E.D.-G"01 KILL EACH OTHER15 AJURIKA02 SPEED ROCKER 1 Blacklolita03 GIGA THRASH4 BEMANI Sound Team "SYUNN"04 Psycho Sheep Riddim3 Yamato05 Level One11 DJ Myosuke 06bellion of Sequencer1:57 BEMANI Sound Team "Expander"07 Digital Skipper2:02 Ryu☆ 08 CoMAAAAAAA04 KSUKE09 Serious? (Short ver.)1:56 lapix 10 Cranberry City ft. Luschel YUC'e11 Yum Yum Jelly7 Nhato 12 Ember Lights2 kradness 13 Glory 06 Maozon feat. Kyte14 Twilight Warp (Full Version)3:14 RINA 15 IDOL syndrome. - extend version 5:28 Pizuya's Cell 16 Let me be your cure -long version-4:30 Nhato 17 Ember Lights (Extended Mix)4:4 かめりあ feat. ななひら18 ハードベース・フェスタ (Длинная версия)5:03 Blacklolita19 GIGA THRASH (Extended Mix)4:1 AJURIKA20 SPEED ROCKER -EXTRA SPIKE EDIT-4:58 DUNE & M-Project & GUHROOVY21 Technicolour Dreams (Extended Version)3:04 maras k/marasy×kors k 1 2 Player 7 lapix2 LIGHTS ft. EVO+2:09 日龍3 SUNLiGHT (IIDX Mix)1:54 L.E.D.ALiCE(DJ NAGAI Vs. BEMANI Sound Team "L. 04 DEATH†ZIGOQ ~怒りの高速爆走野郎~2:04 BEMANI Sound Team "Expander"05 Expanded !! 2:16 BEMANI Sound Team "TAG"06 Beast mode 2:15 BEMANI Sound Team "RACER-X"07 FIRE BALL1:48 Y&Co.08 Son, not gabba now 1:54 ota2 09 Usual Days-remix1:56 (BDJ TECHNORCH feat.宇宙★海月 vs BEMANI Sound Te 10 東京神話 1:59(B HuΣeR 18 ECHIDNA(EXTENDED MIX)5 CANNON BALLERS ORIGINAL SOUNDTRACK3:5 Maozon19 Steel Edge (Extended Mix)5 CANNON BALLERS ORIGINAL SOUNDTRACK4:07 Expander20 Honey Trap(EXTENDED MIX) 5 CANNON BALLERS ORIGINAL SOUNDTRACK5:03 RoughSketch Vs. L.E.D.-G21 焔極OVERKILL(EXTENDED MIX)5 CANNON BALLERS ORIGINAL SOUNDTRACK5:33 罠師 VS 安室22 津軽雪 long ver. feat.岩崎愛子5 CANNON BALLERS ORIGINAL SOUNDTRACK5:19 Gram 23 GuNGNiR(The Requiem’s EXTENDED MIX)5 CANNON BALLERS ORIGINAL SOUNDTRACK3:47EMANI Sound Team "HuΣeR+"1 R∞tAge 12dj TAKA"2 HEISEI 6 BEMANI Sound Team "S-C-U vs L.E.D."3 THE DAY OF JUBILATIONS1:58 kors k 4 Wonderland2:06 DJ Noriken5 dAuntl3ss 6 USAO & DJ Nanashi6 Wing of Hearts16 aran 7 L.F.O2:08 DJ NAGAI08 AGAiN1:57 Massive New Krew feat.松平なな09 Starry Night 2:14 Hommarju0 Dr. Chemical & Killing Machine0 Remixed by BEMANI Sound Team "HuΣeR feat.PON" 11 HOT LIMIT Remixed by BEMANI Sound Team "PHQUASE feat.TRA 12 U.S.A.2:08emixed by BEMANI Sound Team "TAG" feat. 柊木 13 サクラあっぱれ-しょん 1:59 Remixed by BEMANI Sound Team "L.E.D." & IOSYS 14 Won(*3*)Chu KissMe!2:0 Xceon5 夏の匂い。キミの残像。 ft. Kanae Asaba2:162:05 OSTER project feat. echo7 セカンドピアス 2:08 Y&Co. 18 ROCK女 feat. 大山愛未, Ken 2:04 ☆Taku Takahashi (m-flo, block.fm)19 The Best of Both Worlds2:06 RINA20 IDOL syndrome. RoughSkreamZ21 花冠 feat.Aikapin7 空中分解feat.アンテナガール22 OVER TIME 5 BEMANI Sound Team "劇団レコード"23 グラナダの風1:53 Maozon feat. Kyte 24 Twilight Warp07 DJ Mass MAD Izm* 25 IDC feat.REVERBEE (Mo'Cuts Ver)02 Masayoshi Iimori 26 Hurry Hurry59 sasakure.UK27 Xlø2:03 Dirty Androids28 Urban Constellations2:01 (B月代 彩 29 Angels & Demons2:11(B ExpanderHoney Trap 2:08 ARM×狐夢想 feat. 山本椛ディッシュウォッシャー◎彡おいわちゃん1:5 Gram GuNGNiR2:11 maras k(marasy+kors k) Piano Samurai 2:09 P*Light HAPPY★RUSH2:05 猫叉Master月雪に舞う華のように2:19 DJ TOTTO24 DORNWALD ~Junge~5 CANNON BALLERS ORIGINAL SOUNDTRACK4 USAO25 BroGamer5 CANNON BALLERS ORIGINAL SOUNDTRACK12 SOUND HOLIC feat. Nana Takahashi & 709sec. 26 FUZIN RIZIN 5 CANNON BALLERS ORIGINAL SOUNDTRACK2:0 青龍 27 AO-∞ 5 CANNON BALLERS ORIGINAL SOUNDTRACK8 Manabu Namiki28 Shoot'Em All5 CANNON BALLERS ORIGINAL SOUNDTRACK21 Eagle 29 Caterpillar 5 CANNON BALLERS ORIGINAL SOUNDTRACK0 Dirty Androids30 Egret and Willow5 CANNON BALLERS ORIGINAL SOUNDTRACK14CHUCKY feat. Jonjo31 Warrior5 CANNON BALLERS ORIGINAL SOUNDTRACK2:0 DJ Noriken32 Summerlights(IIDX Edition)5 CANNON BALLERS ORIGINAL SOUNDTRACK05 TOMOSUKE33 Macuilxochitl5 CANNON BALLERS ORIGINAL SOUNDTRACK1:5 dj Hellix34 Quakes 5 CANNON BALLERS ORIGINAL SOUNDTRACK1:59 神楽35 Mare Nectaris5 CANNON BALLERS ORIGINAL SOUNDTRACK11 beatnation Records01 crew5 CANNON BALLERS ORIGINAL SOUNDTRACK2:23 kors k vs L.E.D.-G02 Venom5 CANNON BALLERS ORIGINAL SOUNDTRACK1 kors k vs Sota Fujimori03 Cyber True Color5 CANNON BALLERS ORIGINAL SOUNDTRACK06 あべにゅうぷろじぇくと feat. 佐倉紗織 produced 04 恋はどう?モロ◎波動OK☆方程式!!5 CANNON BALLERS ORIGINAL SOUNDTRACK1:5 Remo-con05 Vermilion 5 CANNON BALLERS ORIGINAL SOUNDTRACK1:3 猫叉Master+06 Lost wing at.0 5 CANNON BALLERS ORIGINAL SOUNDTRACK8 DJ TOTTO07 童話回廊5 CANNON BALLERS ORIGINAL SOUNDTRACK1:55 Morrigan feat. リリィ08 Apocalypse 5 CANNON BALLERS ORIGINAL SOUNDTRACK28 kors k 09 Rave Cannon 5 CANNON BALLERS ORIGINAL SOUNDTRACK9 かめりあ10 yamabiko (SINOBUZ Edition)5 CANNON BALLERS ORIGINAL SOUNDTRACK2:09 HuΣeR11 ECHIDNA 5 CANNON BALLERS ORIGINAL SOUNDTRACK2:0 Hommarju 12 Beat Juggling Mix5 CANNON BALLERS ORIGINAL SOUNDTRACK2 dj TAKA 13 RAIN5 CANNON BALLERS ORIGINAL SOUNDTRACK1:59 L.E.D. 14 INVISIBLE STRIX5 CANNON BALLERS ORIGINAL SOUNDTRACK2:11 金獅子 vs 麒麟 feat. 獏15 Snakey Kung-fu5 CANNON BALLERS ORIGINAL SOUNDTRACK15 猫叉Master vs HuΣeR16 刃図羅5 CANNON BALLERS ORIGINAL SOUNDTRACK15 (BDJ TOTTO17 DORNWALD ~Der Junge im Käfig~5 CANNON BALLERS ORIGINAL SOUNDTRACK5:19(B (B=================>(0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq[?7lq[?7h(B(B(0(B(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B10 (B(B==>(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B1 (B(B==>(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B2 (B(B==>(B]0;Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島(B4 (B(B====>(B \ No newline at end of file diff --git a/src/tests/fixtures/replace_multiple_wide_characters b/src/tests/fixtures/replace_multiple_wide_characters new file mode 100644 index 0000000000..52b52bbb6f --- /dev/null +++ b/src/tests/fixtures/replace_multiple_wide_characters @@ -0,0 +1 @@ +👨🔭👨🔭xy diff --git a/src/tests/fixtures/replace_non_wide_characters_with_wide_characters b/src/tests/fixtures/replace_non_wide_characters_with_wide_characters new file mode 100644 index 0000000000..c77ce2f50c --- /dev/null +++ b/src/tests/fixtures/replace_non_wide_characters_with_wide_characters @@ -0,0 +1 @@ +👨x🔭🔭👨 diff --git a/src/tests/fixtures/vttest3-0 b/src/tests/fixtures/vttest3-0 index 33f3324f45..8022e1a73b 100644 --- a/src/tests/fixtures/vttest3-0 +++ b/src/tests/fixtures/vttest3-0 @@ -17,4 +17,4 @@ 12. Modify test-parameters Enter choice number (0 - 12): 3 -[?42l(B)B*B+BSelected as G0 (with SI)Selected as G1 (with SO))B(BCharacter set B (US ASCII)(B)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set A (British)(A)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)A(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set 0 (DEC Special graphics and line drawing)(0)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)0(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set 1 (DEC Alternate character ROM standard characters)(1)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)1(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set 2 (DEC Alternate character ROM special graphics)(2)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)2(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(B)BThese are the installed character sets. Push \ No newline at end of file +[?42l(B)B*B+BSelected as G0 (with SI)Selected as G1 (with SO))B(BCharacter set B (US ASCII)(B)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set A (British)(A)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)A(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set 0 (DEC Special graphics and line drawing)(0)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)0(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set 1 (DEC Alternate character ROM standard characters)(1)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)1(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)B(BCharacter set 2 (DEC Alternate character ROM special graphics)(2)B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)2(B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(B)BThese are the installed character sets. Push diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs index 6810890f8e..7ba179fb8d 100644 --- a/zellij-server/src/panes/grid.rs +++ b/zellij-server/src/panes/grid.rs @@ -947,6 +947,7 @@ impl Grid { row.insert_character_at(terminal_character, self.cursor.x); } else { row.add_character_at(terminal_character, self.cursor.x); + // self.move_cursor_forward_until_edge(count_to_move_cursor); } self.output_buffer.update_line(self.cursor.y); } @@ -967,6 +968,9 @@ impl Grid { pub fn add_character(&mut self, terminal_character: TerminalCharacter) { // TODO: try to separate adding characters from moving the cursors in this function let character_width = terminal_character.width; + if character_width == 0 { + return; + } if self.cursor.x + character_width > self.width { if self.disable_linewrap { return; @@ -1060,7 +1064,7 @@ impl Grid { fn pad_current_line_until(&mut self, position: usize) { let current_row = self.viewport.get_mut(self.cursor.y).unwrap(); - for _ in current_row.len()..position { + for _ in current_row.width()..position { current_row.push(EMPTY_TERMINAL_CHARACTER); } self.output_buffer.update_line(self.cursor.y); @@ -2173,14 +2177,34 @@ impl Row { } absolute_index } + pub fn absolute_character_index_and_position_in_char(&self, x: usize) -> (usize, usize) { + // returns x's width aware index as well as its position inside the wide char (eg. 1 if + // it's in the middle of a 2-char wide character) + let mut accumulated_width = 0; + let mut absolute_index = x; + let mut position_inside_character = 0; + for (i, terminal_character) in self.columns.iter().enumerate() { + accumulated_width += terminal_character.width; + absolute_index = i; + if accumulated_width > x { + let character_start_position = accumulated_width - terminal_character.width; + position_inside_character = x - character_start_position; + break; + } + } + (absolute_index, position_inside_character) + } pub fn add_character_at(&mut self, terminal_character: TerminalCharacter, x: usize) { match self.width_cached().cmp(&x) { Ordering::Equal => { + // adding the character at the end of the current line self.columns.push_back(terminal_character); // this is unwrapped because this always happens after self.width_cached() *self.width.as_mut().unwrap() += terminal_character.width; } Ordering::Less => { + // adding the character after the end of the current line + // we pad the line up to the character and then add it let width_offset = self.excess_width_until(x); self.columns .resize(x.saturating_sub(width_offset), EMPTY_TERMINAL_CHARACTER); @@ -2188,25 +2212,38 @@ impl Row { self.width = None; } Ordering::Greater => { - // wide-character-aware index, where each character is counted once - let absolute_x_index = self.absolute_character_index(x); + // adding the character in the middle of the line + // we replace the character at its position + let (absolute_x_index, position_inside_character) = + self.absolute_character_index_and_position_in_char(x); let character_width = terminal_character.width; let replaced_character = std::mem::replace(&mut self.columns[absolute_x_index], terminal_character); match character_width.cmp(&replaced_character.width) { Ordering::Greater => { - // this is done in a verbose manner because of performance - let width_difference = character_width - replaced_character.width; - for _ in 0..width_difference { - let position_to_remove = absolute_x_index + 1; - if self.columns.get(position_to_remove).is_some() { - self.columns.remove(position_to_remove); + // the replaced character is narrower than the current character + // (eg. we added a wide emoji in place of an English character) + // we remove the character after it to make room + let position_to_remove = absolute_x_index + 1; + if let Some(removed) = self.columns.remove(position_to_remove) { + if removed.width > 1 { + // the character we removed is a wide character itself, so we add + // padding + self.columns + .insert(position_to_remove, EMPTY_TERMINAL_CHARACTER); } } } Ordering::Less => { - let width_difference = replaced_character.width - character_width; - for _ in 0..width_difference { + // the replaced character is wider than the current character + // (eg. we added an English character in place of a wide emoji) + // we must make sure to add padding either before the character we added + // or after it, depending on our position inside said removed wide character + // TODO: support characters wider than 2 + if position_inside_character > 0 { + self.columns + .insert(absolute_x_index, EMPTY_TERMINAL_CHARACTER); + } else { self.columns .insert(absolute_x_index + 1, EMPTY_TERMINAL_CHARACTER); } @@ -2233,14 +2270,14 @@ impl Row { self.width = None; } pub fn replace_character_at(&mut self, terminal_character: TerminalCharacter, x: usize) { - // this is much more performant than remove/insert - if x < self.columns.len() { + let absolute_x_index = self.absolute_character_index(x); + if absolute_x_index < self.columns.len() { self.columns.push_back(terminal_character); - // let character = self.columns.swap_remove_back(x); - let character = self.columns.swap_remove_back(x).unwrap(); // TODO: if let? + // this is much more performant than remove/insert + let character = self.columns.swap_remove_back(absolute_x_index).unwrap(); let excess_width = character.width.saturating_sub(1); for _ in 0..excess_width { - self.columns.insert(x, terminal_character); + self.columns.insert(absolute_x_index, terminal_character); } } self.width = None; diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs index 72b1f55784..81e6229cc2 100644 --- a/zellij-server/src/panes/unit/grid_tests.rs +++ b/zellij-server/src/panes/unit/grid_tests.rs @@ -1560,3 +1560,45 @@ pub fn fzf_fullscreen() { } assert_snapshot!(format!("{:?}", grid)); } + +#[test] +pub fn replace_multiple_wide_characters_under_cursor() { + // this test makes sure that if we replace a wide character with a non-wide character, it + // properly pads the excess width in the proper place (either before the replaced non-wide + // character if the cursor was "in the middle" of the wide character, or after the character if + // it was "in the beginning" of the wide character) + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new( + 51, + 112, + Palette::default(), + Rc::new(RefCell::new(LinkHandler::new())), + ); + let fixture_name = "replace_multiple_wide_characters"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} + +#[test] +pub fn replace_non_wide_characters_with_wide_characters() { + // this test makes sure that if we replace a wide character with a non-wide character, it + // properly pads the excess width in the proper place (either before the replaced non-wide + // character if the cursor was "in the middle" of the wide character, or after the character if + // it was "in the beginning" of the wide character) + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new( + 51, + 112, + Palette::default(), + Rc::new(RefCell::new(LinkHandler::new())), + ); + let fixture_name = "replace_non_wide_characters_with_wide_characters"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} diff --git a/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__replace_multiple_wide_characters_under_cursor.snap b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__replace_multiple_wide_characters_under_cursor.snap new file mode 100644 index 0000000000..ca1a76d45d --- /dev/null +++ b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__replace_multiple_wide_characters_under_cursor.snap @@ -0,0 +1,8 @@ +--- +source: zellij-server/src/panes/./unit/grid_tests.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): 👨y x🔭 +01 (C): + diff --git a/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__replace_non_wide_characters_with_wide_characters.snap b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__replace_non_wide_characters_with_wide_characters.snap new file mode 100644 index 0000000000..60ea74c8cd --- /dev/null +++ b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__replace_non_wide_characters_with_wide_characters.snap @@ -0,0 +1,8 @@ +--- +source: zellij-server/src/panes/./unit/grid_tests.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): 👨👨 🔭 +01 (C): + diff --git a/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__vttest3_0.snap b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__vttest3_0.snap index 588185699b..5b11dd9b49 100644 --- a/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__vttest3_0.snap +++ b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__vttest3_0.snap @@ -8,23 +8,23 @@ expression: "format!(\"{:?}\", grid)" 02 (C): Character set B (US ASCII) 03 (C): !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*+,-./0123456789:;<=>? 04 (C): @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -05 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ +05 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ 06 (C): Character set A (British) 07 (C): !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*+,-./0123456789:;<=>? 08 (C): @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -09 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ +09 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ 10 (C): Character set 0 (DEC Special graphics and line drawing) 11 (C): !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*+,-./0123456789:;<=>? 12 (C): @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -13 (C): ◆▒␉␌␍␊°±␤␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π≠£· ◆▒␉␌␍␊°±␤␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π≠£· +13 (C): ◆▒␉␌␍␊°±␤␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π≠£· ◆▒␉␌␍␊°±␤␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π≠£· 14 (C): Character set 1 (DEC Alternate character ROM standard characters) 15 (C): !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*+,-./0123456789:;<=>? 16 (C): @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -17 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ +17 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ 18 (C): Character set 2 (DEC Alternate character ROM special graphics) 19 (C): !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*+,-./0123456789:;<=>? 20 (C): @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -21 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ +21 (C): `abcdefghijklmnopqrstuvwxyz{|}~ `abcdefghijklmnopqrstuvwxyz{|}~ 22 (C): 23 (C): These are the installed character sets. Push 24 (C): diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__replacing_existing_wide_characters.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__replacing_existing_wide_characters.snap new file mode 100644 index 0000000000..bce2c60419 --- /dev/null +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__replacing_existing_wide_characters.snap @@ -0,0 +1,54 @@ +--- +source: zellij-server/src/tab/./unit/tab_integration_tests.rs +expression: snapshot + +--- +00 (C): ┌ Remixed by BEMANI Sound Team 'TAG feat. PON' - 新宝島 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── +01 (C): │0:14/1:59 ──┤ 新宝島 ├── Vol: 39%│ +02 (C): │[playing] Remixed by BEMANI Sound Team 'TAG feat. PON' - beatmania IIDX 28 BISTROVER Original Soundtrack (Disc2) (2021) [------]│ +03 (C): │────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ +04 (C): │ Playlist (2035 items, length: 3 days, 4 hours, 4 minutes, 28 seconds) │ +05 (C): │────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ +06 (C): │Artist Track Title Album Time │ +07 (C): │────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ +08 (C): │Expander 18 Honey Trap beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:08 │ +09 (C): │ARM×狐夢想 feat. 山本椛 19 ディッシュウォッシャー◎彡おいわちゃん beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:57 │ +10 (C): │Gram 20 GuNGNiR beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:11 │ +11 (C): │maras k(marasy+kors k) 21 Piano Samurai beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:09 │ +12 (C): │P*Light 22 HAPPY★RUSH beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:05 │ +13 (C): │猫叉Master 23 月雪に舞う華のように beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:19 │ +14 (C): │DJ TOTTO 24 DORNWALD ~Junge~ beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:14 │ +15 (C): │USAO 25 BroGamer beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:12 │ +16 (C): │SOUND HOLIC feat. Nana Takahashi & 709sec. 26 FUZIN RIZIN beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:08 │ +17 (C): │青龍 27 AO-∞ beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:08 │ +18 (C): │Manabu Namiki 28 Shoot'Em All beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:21 │ +19 (C): │Eagle 29 Caterpillar beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:06 │ +20 (C): │Dirty Androids 30 Egret and Willow beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:14 │ +21 (C): │DJ CHUCKY feat. Jonjo 31 Warrior beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:07 │ +22 (C): │DJ Noriken 32 Summerlights(IIDX Edition) beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:05 │ +23 (C): │TOMOSUKE 33 Macuilxochitl beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:50 │ +24 (C): │dj Hellix 34 Quakes beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:59 │ +25 (C): │神楽 35 Mare Nectaris beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:11 │ +26 (C): │beatnation Records 01 crew beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:23 │ +27 (C): │kors k vs L.E.D.-G 02 Venom beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:10 │ +28 (C): │kors k vs Sota Fujimori 03 Cyber True Color beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:06 │ +29 (C): │あべにゅうぷろじぇくと feat. 佐倉紗織 produced 04 恋はどう?モロ◎波動OK☆方程式!! beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:55 │ +30 (C): │Remo-con 05 Vermilion beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:38 │ +31 (C): │猫叉Master+ 06 Lost wing at.0 beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:08 │ +32 (C): │DJ TOTTO 07 童話回廊 beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:55 │ +33 (C): │Morrigan feat. リリィ 08 Apocalypse beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:28 │ +34 (C): │kors k 09 Rave Cannon beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:09 │ +35 (C): │かめりあ 10 yamabiko (SINOBUZ Edition) beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:09 │ +36 (C): │HuΣeR 11 ECHIDNA beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:03 │ +37 (C): │Hommarju 12 Beat Juggling Mix beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:02 │ +38 (C): │dj TAKA 13 RAIN beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 1:59 │ +39 (C): │L.E.D. 14 INVISIBLE STRIX beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:11 │ +40 (C): │金獅子 vs 麒麟 feat. 獏 15 Snakey Kung-fu beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:15 │ +41 (C): │猫叉Master vs HuΣeR 16 刃図羅 beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 2:15 │ +42 (C): │DJ TOTTO 17 DORNWALD ~Der Junge im Käfig~ beatmania IIDX 25 CANNON BALLERS ORIGINAL SOUNDTRACK 5:19 │ +43 (C): │===========================>────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ +44 (C): │ │ +45 (C): │ │ +46 (C): │ │ +47 (C): └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + diff --git a/zellij-server/src/tab/unit/tab_integration_tests.rs b/zellij-server/src/tab/unit/tab_integration_tests.rs index 2ebcc48d1e..1026685489 100644 --- a/zellij-server/src/tab/unit/tab_integration_tests.rs +++ b/zellij-server/src/tab/unit/tab_integration_tests.rs @@ -129,6 +129,16 @@ fn create_new_tab(size: Size) -> Tab { tab } +fn read_fixture(fixture_name: &str) -> Vec { + let mut path_to_file = std::path::PathBuf::new(); + path_to_file.push("../src"); + path_to_file.push("tests"); + path_to_file.push("fixtures"); + path_to_file.push(fixture_name); + std::fs::read(path_to_file) + .unwrap_or_else(|_| panic!("could not read fixture {:?}", &fixture_name)) +} + use crate::panes::grid::Grid; use crate::panes::link_handler::LinkHandler; use ::insta::assert_snapshot; @@ -1056,3 +1066,27 @@ fn cannot_float_only_embedded_pane() { ); assert_snapshot!(snapshot); } + +#[test] +fn replacing_existing_wide_characters() { + // this is a real world use case using ncmpcpp with wide characters and scrolling + // the reason we don't break it down is that it exposes quite a few edge cases with wide + // characters that we should handle properly + let size = Size { + cols: 238, + rows: 48, + }; + let client_id = 1; + let mut tab = create_new_tab(size); + let mut output = Output::default(); + let pane_content = read_fixture("ncmpcpp-wide-chars"); + tab.handle_pty_bytes(1, pane_content); + tab.render(&mut output, None); + let snapshot = take_snapshot( + output.serialize().get(&client_id).unwrap(), + size.rows, + size.cols, + Palette::default(), + ); + assert_snapshot!(snapshot); +}