[{"data":1,"prerenderedAt":364},["ShallowReactive",2],{"\u002Ftlt-2025.01.31-visidata-xdg":3},{"id":4,"title":5,"body":6,"createdAt":353,"description":12,"draft":354,"extension":355,"image":35,"mastodonThread":356,"meta":357,"navigation":119,"path":358,"seo":359,"stem":360,"tags":361,"updatedAt":353,"__hash__":363},"content\u002FTLT - 2025.01.31 - VisiData XDG.md","VisiData XDG",{"type":7,"value":8,"toc":349},"minimark",[9,13,18,29,36,52,59,63,66,76,85,98,146,149,342,345],[10,11,12],"p",{},"Figured out how to make opening a CSV in firefox pop open a terminal running VisiData (vd)",[14,15,17],"h2",{"id":16},"visidata","VisiData!",[10,19,20,21,28],{},"I like ",[22,23,27],"a",{"href":24,"rel":25},"https:\u002F\u002Fwww.visidata.org\u002F",[26],"nofollow","VisiData","! If you are working with tabular data, like a CSV file, it is a lovely slicer and dicer. It's a pretty terminal-keyboard-heavy program, like a vim family thing. Like many of these power tools, I find that you can get into it best by finding ONE use-case and then gradually introducing new tricks from there. So the simple use-case for VisiData is simply viewing CSV files.",[10,30,31],{},[32,33],"img",{"alt":34,"src":35},"VisiData a simple CSV","img\u002FVisiData_a_simple_CSV.png",[10,37,38,39,43,44,47,48,51],{},"After that you can learn some new commands, such as selecting rows with ",[40,41,42],"code",{},"|gilbert"," (regex select rows containing \"gilbert\") and then zooming in on them with ",[40,45,46],{},"\""," (view only selected rows). You can press ",[40,49,50],{},"\u003Center>"," on a row to see it vertically.",[10,53,54,55,58],{},"After a while you get addicted to this sort of manipulation and you find yourself downloading CSVs from Firefox and then opening a terminal, navigating over to your downloads folder, and opening it with ",[40,56,57],{},"vd data.csv"," or whatnot. So I wanted to cut out the middle bits.",[14,60,62],{"id":61},"xdg-terminal-wrapping","XDG, Terminal Wrapping",[10,64,65],{},"First make a .desktop file for visidata at ~\u002F.local\u002Fshare\u002Fapplications\u002FVisiData.desktop containing:",[67,68,73],"pre",{"className":69,"code":71,"language":72},[70],"language-text","[Desktop Entry]\nEncoding=UTF-8\nVersion=1.0\nType=Application\nTerminal=true\nExec=vd %U\nMimeType=application\u002Fvnd.oasis.opendocument.spreadsheet;application\u002Fvnd.oasis.opendocument.spreadsheet-template;application\u002Fvnd.sun.xml.calc;application\u002Fvnd.sun.xml.calc.template;application\u002Fmsexcel;application\u002Fvnd.ms-excel;application\u002Fvnd.openxmlformats-officedocument.spreadsheetml.sheet;application\u002Fvnd.ms-excel.sheet.macroEnabled.12;application\u002Fvnd.openxmlformats-officedocument.spreadsheetml.template;application\u002Fvnd.ms-excel.template.macroEnabled.12;application\u002Fvnd.ms-excel.sheet.binary.macroEnabled.12;text\u002Fcsv;application\u002Fx-dbf;text\u002Fspreadsheet;application\u002Fcsv;application\u002Fexcel;application\u002Ftab-separated-values;application\u002Fvnd.lotus-1-2-3;application\u002Fvnd.oasis.opendocument.chart;application\u002Fvnd.oasis.opendocument.chart-template;application\u002Fx-dbase;application\u002Fx-dos_ms_excel;application\u002Fx-excel;application\u002Fx-msexcel;application\u002Fx-ms-excel;application\u002Fx-quattropro;application\u002Fx-123;text\u002Fcomma-separated-values;text\u002Ftab-separated-values;text\u002Fx-comma-separated-values;text\u002Fx-csv;application\u002Fvnd.oasis.opendocument.spreadsheet-flat-xml;application\u002Fvnd.ms-works;application\u002Fclarisworks;application\u002Fx-iwork-numbers-sffnumbers;application\u002Fx-starcalc;\nName=VisiData\n","text",[40,74,71],{"__ignoreMap":75},"",[10,77,78,79,84],{},"which I got from ",[22,80,83],{"href":81,"rel":82},"https:\u002F\u002Fdev.to\u002Fajkerrigan\u002Ftoday-i-learned-opening-csvs-with-visidata-in-tmux-from-the-firefox-flatpak-app-4m07",[26],"this fun page"," with some slight modification.",[10,86,87,88,93,94,97],{},"This worked! But it opens in gnome-terminal instead of alacritty. After some digging I found from ",[22,89,92],{"href":90,"rel":91},"https:\u002F\u002Fgitlab.gnome.org\u002FGNOME\u002Fglib\u002F-\u002Fmerge_requests\u002F2839",[26],"this merge request"," that you can put a wrapper named ",[40,95,96],{},"xdg-terminal-exec"," in your path and it'll use that as the priority terminal app. So I created ~\u002Fbin\u002Fxdg-terminal-exec containing:",[67,99,103],{"className":100,"code":101,"language":102,"meta":75,"style":75},"language-sh shiki shiki-themes github-light github-dark monokai","#!\u002Fbin\u002Fsh\n\nexec ~\u002Fbin\u002Fterminal -e \"$@\"\n","sh",[40,104,105,114,121],{"__ignoreMap":75},[106,107,110],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"s8-w5","#!\u002Fbin\u002Fsh\n",[106,115,117],{"class":108,"line":116},2,[106,118,120],{"emptyLinePlaceholder":119},true,"\n",[106,122,124,128,132,136,139,143],{"class":108,"line":123},3,[106,125,127],{"class":126},"sTrkL","exec",[106,129,131],{"class":130},"sstjo"," ~\u002Fbin\u002Fterminal",[106,133,135],{"class":134},"s7F3e"," -e",[106,137,138],{"class":130}," \"",[106,140,142],{"class":141},"sdpu8","$@",[106,144,145],{"class":130},"\"\n",[10,147,148],{},"And that in turn calls my per-machine terminal script, which contains roughly:",[67,150,152],{"className":100,"code":151,"language":102,"meta":75,"style":75},"#!\u002Fbin\u002Fsh\n\nif [ \"$HOSTNAME\" == \"arcanejill.thelackthereof.org\" ]; then\n  exec aterm -rv -tr -sl 10000 -sh 50 -ls +sb -vb -fn 6x12 -e \"$@\"\nelif [ \"$HOSTNAME\" == \"feline.thelackthereof.org\" ]; then\n  exec aterm -tr -sl 10000 -sh 50 -ls +sb -vb -fn '-b&h-lucidatypewriter-bold-r-normal-*-13-*-*-*-m-*-iso10646-1' -e \"$@\"\n\n# ... and so on for various machines I've had that I wanted different settings on\n\nelse\n  exec ~\u002F.cargo\u002Fbin\u002Falacritty \"$@\"\nfi\n",[40,153,154,158,162,191,241,264,300,305,311,316,322,336],{"__ignoreMap":75},[106,155,156],{"class":108,"line":109},[106,157,113],{"class":112},[106,159,160],{"class":108,"line":116},[106,161,120],{"emptyLinePlaceholder":119},[106,163,164,168,172,174,177,179,182,185,188],{"class":108,"line":123},[106,165,167],{"class":166},"sC2Qs","if",[106,169,171],{"class":170},"sMOD_"," [ ",[106,173,46],{"class":130},[106,175,176],{"class":170},"$HOSTNAME",[106,178,46],{"class":130},[106,180,181],{"class":166}," ==",[106,183,184],{"class":130}," \"arcanejill.thelackthereof.org\"",[106,186,187],{"class":170}," ]; ",[106,189,190],{"class":166},"then\n",[106,192,194,197,200,203,206,209,212,215,218,221,224,227,230,233,235,237,239],{"class":108,"line":193},4,[106,195,196],{"class":126},"  exec",[106,198,199],{"class":130}," aterm",[106,201,202],{"class":134}," -rv",[106,204,205],{"class":134}," -tr",[106,207,208],{"class":134}," -sl",[106,210,211],{"class":134}," 10000",[106,213,214],{"class":134}," -sh",[106,216,217],{"class":134}," 50",[106,219,220],{"class":134}," -ls",[106,222,223],{"class":130}," +sb",[106,225,226],{"class":134}," -vb",[106,228,229],{"class":134}," -fn",[106,231,232],{"class":130}," 6x12",[106,234,135],{"class":134},[106,236,138],{"class":130},[106,238,142],{"class":141},[106,240,145],{"class":130},[106,242,244,247,249,251,253,255,257,260,262],{"class":108,"line":243},5,[106,245,246],{"class":166},"elif",[106,248,171],{"class":170},[106,250,46],{"class":130},[106,252,176],{"class":170},[106,254,46],{"class":130},[106,256,181],{"class":166},[106,258,259],{"class":130}," \"feline.thelackthereof.org\"",[106,261,187],{"class":170},[106,263,190],{"class":166},[106,265,267,269,271,273,275,277,279,281,283,285,287,289,292,294,296,298],{"class":108,"line":266},6,[106,268,196],{"class":126},[106,270,199],{"class":130},[106,272,205],{"class":134},[106,274,208],{"class":134},[106,276,211],{"class":134},[106,278,214],{"class":134},[106,280,217],{"class":134},[106,282,220],{"class":134},[106,284,223],{"class":130},[106,286,226],{"class":134},[106,288,229],{"class":134},[106,290,291],{"class":130}," '-b&h-lucidatypewriter-bold-r-normal-*-13-*-*-*-m-*-iso10646-1'",[106,293,135],{"class":134},[106,295,138],{"class":130},[106,297,142],{"class":141},[106,299,145],{"class":130},[106,301,303],{"class":108,"line":302},7,[106,304,120],{"emptyLinePlaceholder":119},[106,306,308],{"class":108,"line":307},8,[106,309,310],{"class":112},"# ... and so on for various machines I've had that I wanted different settings on\n",[106,312,314],{"class":108,"line":313},9,[106,315,120],{"emptyLinePlaceholder":119},[106,317,319],{"class":108,"line":318},10,[106,320,321],{"class":166},"else\n",[106,323,325,327,330,332,334],{"class":108,"line":324},11,[106,326,196],{"class":126},[106,328,329],{"class":130}," ~\u002F.cargo\u002Fbin\u002Falacritty",[106,331,138],{"class":130},[106,333,142],{"class":141},[106,335,145],{"class":130},[106,337,339],{"class":108,"line":338},12,[106,340,341],{"class":166},"fi\n",[10,343,344],{},"... and now when I click on the CSV from my downloads dropdown in firefox POP goes a terminal running VisiData!",[346,347,348],"style",{},"html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html pre.shiki code .sTrkL, html code.shiki .sTrkL{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sdpu8, html code.shiki .sdpu8{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}",{"title":75,"searchDepth":116,"depth":116,"links":350},[351,352],{"id":16,"depth":116,"text":17},{"id":61,"depth":116,"text":62},"2025-01-31",false,"md",null,{},"\u002Ftlt-2025.01.31-visidata-xdg",{"title":5,"description":12},"TLT - 2025.01.31 - VisiData XDG",[362],"blog","63mA3PbiXGsXyIvI_bMy5hssF82WTQlHj5CR3towEZ0",1778988315028]