A spec to set default terminal applications?

PCMan pcman.tw at gmail.com
Fri Aug 31 12:54:15 UTC 2018


Hi again,
There is another way to make this xdg terminal exec stuff more
standard compliant by reusing XDG menu spec.
https://specifications.freedesktop.org/menu-spec/latest/apas02.html
We can parse all desktop entry files and collect every one with
Category=TerminalEmulator to generate a list of terminal emulators.
This way we don't have to manually maintain a terminal.list file.
Of course parsing all of the *.desktop files is slow so we will need
something like "update-mime-database" to generate the list.

To provide desktop entry files for those apps which are not shipped
with their own, we can install desktop files for them.
set XDG_DATA_DIRS=/usr/share/terminal-emulators:$XDG_DATA_DIRS

And just add our own desktop entry files in
/usr/share/terminal-emulators/*.desktop for those terminals which do
not have desktop entries.
So we don't need to invent another spec to manage the terminals.

Regards

On Fri, Aug 31, 2018 at 8:46 PM PCMan <pcman.tw at gmail.com> wrote:
>
> Hello,
> Just took a look at xdg-terminal-exec and I liked the idea.
> Actually I figured out something similar previously but did not write any code.
> There is, however, one thing I'd like to propose to make the spec more complete.
> Use the Desktop Entry Actions.
> https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#extra-actions
>
> Then, for each desktop entry file of a terminal emulator, we define
> some standard actions:
> * OpenDirInWindow: a command to open a dir in a new tab
> * OpenDirInTab: a command to open a dir in a new tab
> * ExecInWindow: a command to run a program in a new window
> * ExecInTab: a command to run a program in a new tab
>
> When the "InTab" actions are not defined in the desktop entry file,
> fallback to the "InWindow" version.
> This should cover most of the common operations when we need a terminal window.
>
> For example, we can write xterm.desktop like this
> [Desktop Entry]
> Name=Gnome Terminal
> Exec=gnome-terminal
> Actions=OpenDirInWindow;
>
> [Desktop Action OpenDirInWindow]
> Name=Open Directory in Terminal
> Exec=gnome-terminal --window --working-directory %f
>
> [Desktop Action OpenDirInTab]
> Name=Open Directory in Terminal
> Exec=gnome-terminal --tab --working-directory %f
>
> [Desktop Action ExecInWindow]
> Name=Execute in Terminal
> Exec=gnome-terminal -e %f
>
> In this way, we reuse the existing spec and support various kinds of operations.
> The only drawback is %f means a file name, but what we need to pass to
> the terminal emulator is actually a full command line with args.
>
> Just my two cents.
>
> On Thu, Aug 30, 2018 at 3:36 PM Vladimir Kudrya <vladimir-csp at yandex.ru> wrote:
> >
> > Couple of notes.
> >
> > xdg-terminal-exec in its current form is a minimum intervention
> > solution: you need to place desktop files for some terminals, then use
> > xdg-terminal-exec itself as a command to launch terminal.
> >
> > ArgPrefix has a solid generic use case: there was a bug in Ocrfeeder:
> > https://bugzilla.gnome.org/show_bug.cgi?id=767732 It required an
> > argument to open file, but no argument to just launch the app. Current
> > desktop entry spec can not handle this via single desktop entry.
> >
> >
> > I'll try to sum up, simplify, and build upon Jan's and Ian's proposals.
> >
> > Fields for destop entries:
> > MimeType: what app can open
> > MimeTypeView: what app can open for viewing
> > MimeTypeEdit: what app can open for edit
> > Intent: what actions app represents (analogous to MimeType, like:
> > x-intent/terminal, x-intent/increase-brightness.) Choosing goes
> > alongside mimetypes and schemes into mimeapps.list hierarchy.
> > ArgPrefix: argument(s) to be added to the beginning of command line if
> > there are other arguments provided.
> >
> > With all above:
> > xdg-open some.file: current behavior
> > xdg-open --edit some.file: uses MimeTypeEdit choices.
> > xdg-open --view some.file: uses MimeTypeView choices.
> > xdg-intent terminal: opens terminal.
> > xdg-intent termianl foo --bar: runs foo --bar in chosen terminal, using
> > ArgPrefix if needed. IMHO one of the few intents that would ever require
> > arguments.
> >
> > This strategy is backward-compatible, uses same data and config
> > hierarchies, works without dbus (I don't want to touch it even with ten
> > meter stick), 'xdg-intent terminal' can be used as drop in for terminal
> > emulators. (xdg-terminal as wrapper to get rid of that space?).
> > _______________________________________________
> > xdg mailing list
> > xdg at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/xdg


More information about the xdg mailing list