Skip to main content
5 of 8
deleted 12 characters in body
mike
  • 281
  • 1
  • 4
  • 10

I've found solution relying heavily on tmux. Since tmux is working independently of the shell and prevails even after closing the windows, one can prepare a tmux session and then attach to it. The thing won't instantly exit, since the attachment command does not return unless you exit it.

This and the fact that you can name and search a session yields the following Nautilus-Script:

#!/bin/bash
# nautilus script to start files in nvim under a tmux session
# place this script into ~/.local/share/nautilus/scripts/nvimOpen.sh
# presented without warranty by mike aka curvi

# nvim running in another session? -
# TODO tmux rename-session -t $whaever nvim

# Tmux session 'nvim' is running neovim always!
if tmux has-session -t nvim ; then
  # test if it is open and split it
  for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do
    tmux send-keys -t nvim Escape # change to normal mode
    tmux send-keys -t nvim ",w" Enter # split pane vertically
    tmux send-keys -t nvim ";e $selected_file" Enter # load new file
  done
else
  # or start it up freshly!
  tmux new-session -d -s nvim ;
  tmux send-keys -t nvim "nvim $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" Enter
  tmux send-keys -t nvim Escape # change to normal mode
fi
# after the tmux session is prepared - attach to it in gnome-terminal!
gnome-terminal -e "tmux attach-session -d -t nvim"

Bonus: since I send the keys, instead of issueing the commands directly they appear in the terminals history, like expected! 2 things are still missing:

  1. If neovim is running in another tmux session, I want to find it and rename that session.

  2. If there is no "nvim" tmux-session running and you want to start multiple files from the script, I need to start nvim with the first argument of $NAUT.._PATHS and loop over the rest to form splits. Somehow like

    nvim ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[0]} numel = ${#NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[*]} for (( i = 1 ; i < ${numel} ; i++ )) do; # split vim and open the file ${NAU.._PATHS[$i]} done

mike
  • 281
  • 1
  • 4
  • 10