xdg-settings / xdg-mime - öppna terminal och starta vim

Permalänk
Medlem

xdg-settings / xdg-mime - öppna terminal och starta vim

Hej! Tänkte börja använda fil hanteraren i rofi. Har lyckats ställa in så att bilder öppnas med feh men inte för text filer. Testade att ställa in xdg för vim.desktop men den öppnar endast filerna i en webbläsare. Hur får jag den att öppna en terminal och starta vim när jag väljer en text fil?

Permalänk
Medlem

Du kan lägga en fil(mimeapps.list) i XDG_CONFIG_DIR(vanligtvis $HOME/.config/) med default applikationer men det finns en mängd olika mime-typer associerade med text/kodfiler..

Ett snabbt test ger detta på min maskin.

% file --mime-type output.txt output.txt: text/csv % file --mime-type src/main.rs src/main.rs: text/x-c % file --mime-type main_sup.erl main_sup.erl: text/plain % file --mime-type configure.ac configure.ac: text/x-m4 % file --mime-type mv.c mv.c: text/x-c % file --mime-type app.html app.html: text/html % file --mime-type playwright.config.ts playwright.config.ts: text/x-java % file --mime-type package.json package.json: application/json % file --mime-type ./src/routes/styles.css ./src/routes/styles.css: text/x-asm

Oavsett så kan du läsa mer här https://wiki.archlinux.org/title/XDG_MIME_Applications

Permalänk
Medlem
Skrivet av orp:

Du kan lägga en fil(mimeapps.list) i XDG_CONFIG_DIR(vanligtvis $HOME/.config/) med default applikationer men det finns en mängd olika mime-typer associerade med text/kodfiler..

Ett snabbt test ger detta på min maskin.

% file --mime-type output.txt output.txt: text/csv % file --mime-type src/main.rs src/main.rs: text/x-c % file --mime-type main_sup.erl main_sup.erl: text/plain % file --mime-type configure.ac configure.ac: text/x-m4 % file --mime-type mv.c mv.c: text/x-c % file --mime-type app.html app.html: text/html % file --mime-type playwright.config.ts playwright.config.ts: text/x-java % file --mime-type package.json package.json: application/json % file --mime-type ./src/routes/styles.css ./src/routes/styles.css: text/x-asm

Oavsett så kan du läsa mer här https://wiki.archlinux.org/title/XDG_MIME_Applications

Hm, kan inte riktigt tyda vad det där gör/betyder. Jag använde detta kommando för att sätta feh till default:

xdg-mime default feh.desktop image/jpeg

Hur kan jag omvandla detta till att starta vim i en terminal? Skriver jag ...

xdg-mime query default text/plain

... so säger den 'vim.dekstop'. Men den öppnar inte vim? Måste jag säga åt den att öppna en terminal först på något vis för att sedan starta vim?

edit: Kollar jag i loggen när jag försöker öppna en text fil (från rofi) så får jag :

$ Vim: Warning: Input is not from a terminal Vim: Error reading input, exiting...

Samtidigt öppnar den filen i webläsaren. Någon form a fall-back?

Permalänk
Medlem
Skrivet av llxt:

Hm, kan inte riktigt tyda vad det där gör/betyder. Jag använde detta kommando för att sätta feh till default:

Om jag inte är helt vilse så löser xdg enbart associationen mellan media och vilket program som ska användas för att hantera mediet. xdg kollar på en rad olika ställen efter filer som beskriver sådana associationer några ställen är listade i länken som jag skickade i tidigare inlägg. När du kör "xdg-mime default ..." så har jag starka misstankar om att xdg-mime skriver denna informationen i en av mimeapps.list-filerna.

Personligen så tycker om att ha kontroll på sådant så jag har valt att skapa en egen fil som jag installerar i min hemkatalog i `~/.config/mimeapps.list`.

[Default Applications] x-scheme-handler/https=firefox.desktop x-scheme-handler/http=firefox.desktop

När man väljer att öppna ett media med xdg så misstänker jag att den enbart använder desktop-filen och då måste desktop-filen stödja att få mediet som input. I min nvim.desktop så har jag raden `Exec=nvim %F` där jag misstänker att %F kommer vara en sökväg till filen som man väljer att öppna med.

Skrivet av llxt:

Hur kan jag omvandla detta till att starta vim i en terminal? Skriver jag ...

Detta har jag ingen koll på. Jag använder varken desktop eller filhanterare.

Jag skulle gissa att du får skapa(förslagsvis kopiera den nuvarande till vim-term.desktop) en egen desktop-fil som startar vim i en terminalemulator. Jag kör alacritty som terminalemulator så jag kan köra `alacritty -e nvim`. Du borde kunna göra något liknande.

Permalänk
Medlem
Skrivet av orp:

Jag skulle gissa att du får skapa(förslagsvis kopiera den nuvarande till vim-term.desktop) en egen desktop-fil som startar vim i en terminalemulator. Jag kör alacritty som terminalemulator så jag kan köra `alacritty -e nvim`. Du borde kunna göra något liknande.

I den nya .desktop filen, ska jag enbart ändra "Exec"? Eller något mer?

Testade med :

Exec=terminator -e vim %F

Men ingen terminal öppnas desvärre när jag valde en fil i rofi. Bara en webbläsare som vanligt.
Den nya desktop filen har dock registrerats.

$ xdg-mime query default text/plain vim-term.desktop

$ cat .config/mimeapps.list [Default Applications] image/jpeg=feh.desktop text/html=firefox.desktop x-scheme-handler/http=firefox.desktop x-scheme-handler/https=firefox.desktop x-scheme-handler/about=firefox.desktop x-scheme-handler/unknown=firefox.desktop image/png=feh.desktop image/jpg=feh.desktop text/plain=vim-term.desktop video/mp4=vlc.desktop

Edit:

NEJ nu jäklar. Testade med alacritty istället för terminator och nu fungerade det. Verkar som att man inte kan skriva 'terminator -e vim [path]? Bara 'terminator -e vim'. Vad skriver jag för att ge en sökväg? Äsch, jag går över till alacritty

-

Nu förstår jag vad du menar med 'file --mime-type'. Tack för all hjälp!

Permalänk
Avstängd
Citat:

$ Vim: Warning: Input is not from a terminal Vim: Error reading input, exiting...

Samtidigt öppnar den filen i webläsaren. Någon form a fall-back?

$ Vim: Warning: Input is not from a terminal Vim: Error reading input, exiting...

Samtidigt öppnar den filen i webläsaren. Någon form a fall-back?
[/code]

vim gillar inte när stdin omdirigeras om du inte anropar input
från tty, du hade löst det genom att lägga till "-" bakom vim i det som ville starta vim i det scenariot

Ett annat altenativ hade varit att använda input via tty på detta
viset för att få vim att veta att input är från tty och inte standard input

vim $tmpFile </dev/tty

Detta är samma scenario du råka ut för

echo /etc/hosts | vim Vim: Warning: Input is not from a terminal

Detta löser det.

echo /etc/hosts | vim - Vim: Reading from stdin...

Permalänk
Medlem
Skrivet av wuseman:

vim gillar inte när stdin omdirigeras om du inte anropar input
från tty, du hade löst det genom att lägga till "-" bakom vim i det som ville starta vim i det scenariot

Ett annat altenativ hade varit att använda input via tty på detta
viset för att få vim att veta att input är från tty och inte standard input

vim $tmpFile </dev/tty

Detta är samma scenario du råka ut för

echo /etc/hosts | vim Vim: Warning: Input is not from a terminal

Detta löser det.

echo /etc/hosts | vim - Vim: Reading from stdin...

Ok. Tack för din input Löste det med en extra .desktop fil och alacritty. Får rulla så till vidare

Permalänk
Avstängd
Skrivet av llxt:

Ok. Tack för din input Löste det med en extra .desktop fil och alacritty. Får rulla så till vidare

Yes, jag ville bara visa varför vim skrev att den inte kunde läsa input men jag tror inte det skulle göra skillnad i det ni löst redan, du hittar direkt till rätt del med nedan om du vill läsa om det i manualen till vim. Det blir bara ett delay på 2 sekunder pga av den varningen.

vim -c ' :help ---' vim -c ' :help --not-a-term'

Här är också lite info om det:
https://askubuntu.com/a/1255008/977085