Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Can be set alias for desktop session like it can be set in terminal? In fact I am not sure if desktop sessions work in the same way. Is there some central interpreter which interprets the commands from all GUI applications (some kind of back-end shell) or how does it work?

What I would need to do is to set alias gvim="gvim --remote-tab-silent" for KDE session so in Krusader settings or in any other GUI app when I invoke gvim, gvim with --remote-tab-silent will be invoked.

How to do this (not wrapping in in script)?

share|improve this question

1 Answer 1

up vote 1 down vote accepted

It depends. Graphical programs usually use the same methods as non-graphical ones; that is, one of:

  • Sometimes the program hands a list of parameters directly to the kernel, using something along the lines of:

    if (fork() == 0)
        execlp("vim", "--remote-tab-silent", "/home/LeNoob/somefile.txt", NULL);
    

    The various exec*() functions tell the kernel, "run exactly this thing and pass it this exact list of command-line options into argv[]."

  • Other times, programs will ask the shell – /bin/sh – to interpret a command line:

    system("vim $HOME/.bashrc");
    

    It's practically the same shell as in terminals, but is run in non-interactive mode using the -c option. Also, it's always /bin/sh by convention, regardless of what shell (bash, zsh...) you've chosen to use interactively. So the above is rougly the same as:

    if (fork() == 0)
        execl("/bin/sh", "-c", "vim $HOME/.bashrc");
    

    (The shell itself, of course, will use exec*() directly.)

  • Finally, desktop environments that use D-Bus can use it to start various services by simply sending a message to the desired "bus name" (e.g. org.gnome.gedit). Also known as "bus activation", when dbus-daemon sees a program sending a message to a bus name that nothing currently "owns", it searches its configuration for the program's path, and again uses exec() to start it.

    This is a commonly used D-Bus feature, but mostly just for background services like "dconf". In the future, GNOME is planning to use this to also start regular apps like Nautilus or Gedit as well. However, right now, it uses the same method as all other DEs do, by reading the relevant .desktop file [see below] and exec()'ing the program directly, so I'm only including this for completeness.

(Of course, real programs do not have "vim" and "somefile.txt" hardcoded in them – they use something like getenv("EDITOR") and the desired file name – but you get the point.)

However, none of this actually matters, since the shell never interprets aliases in non-interactive mode, and while it would interpret shell functions, it will never read your ~/.bashrc to see which functions you have defined.


So the next questions are, how do you configure gVim as your text editor; and does your program search for gvim in $PATH directories, or does it take the full path /usr/bin/gvim from its configuration file?

Terminal-based programs use the $EDITOR variable, so instead of EDITOR=gvim you could use EDITOR="gvim --remote-tab-silent" in your ~/.profile or similar.

Desktop environments find gVim according to /usr/share/applications/gvim.desktop – specifically, the line Exec=gvim -f %F, which only tells them to start gvim but doesn't say where it is, so $PATH will be used. This means it can be overridden in two ways:

  • you could make a script that wraps gvim and put it somewhere early in $PATH – for example, call the script ~/bin/gvim then put ~/bin at the beginning of $PATH;

  • or you could copy the .desktop file from /usr to ~/.local/share/applications/gvim.desktop, and change the Exec= line to have the desired options:

    Exec=gvim --remote-tab-silent -f %F
    

    (Normally the changes will be picked up immediately, but if they don't, try running kbuildsycoca4 or kbuildsycoca4 --noincremental from a terminal.)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.