Configuration tmux conditionnelle au système d'exploitation

41

Il y a quelques lignes de mon tmux.conf que je voudrais exécuter uniquement si mon système d'exploitation est Mac. Cependant, j'aimerais utiliser mon tmux.conf sur plusieurs systèmes d'exploitation différents. Comment puis-je rendre une commande conditionnelle au système d'exploitation sur lequel tmux est en cours d'exécution?

perdre son temps
la source
1
version
detect

Réponses:

51

Utilisez la if-shellcommande:

if-shell "uname | grep -q Darwin" "tmux-cmd1; tmux-cmd2;" "tmux-cmd3; tmux-cmd4"

Vous voudrez peut-être placer les commandes spécifiques au système d'exploitation dans des fichiers séparés et les exécuter via la commande "fichier-source".

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"
Chepner
la source
8
Les commandes if-shellet run-shell tmux sont actuellement asynchrones (à partir de tmux 1.7); ils exécutent effectivement leur commande shell en arrière-plan et toute commande tmux qu'ils exécutent ne sera exécutée qu'après toutes les commandes venant après la commande if-shellor run-shellelle-même ( tmux est à thread unique). En effet, si vous utilisez if-shellou run-shelldans ~/.tmux.conf, la première session (et toutes les séances, les fenêtres ou volets créés explicitement créé par ~/tmux.conf) manquera une tmux configuration organisées par if-shellou run-shellcommandes.
Chris Johnsen
1
@ChrisJohnsen if-shellfonctionne comme prévu avec tmux 1.8. Je l'utilise pour définir set-titres-string uniquement pour SSH: github.com/blueyed/dotfiles/commit/…
blueyed
2
Cela devrait être accepté. c'est la bonne façon de le faire.
Chev
11

Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 a la réponse. Chris Johnsen mérite également beaucoup de mérite pour aider les gens sur la question GitHub ici: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

Fondamentalement, vous configurez un script shell appelé safe-reattach-to-user-namespacequi vérifie l’existence de la vraie commande Reattach ....

#! /usr/bin/env bash

# If reattach-to-user-namespace is not available, just run the command.
if [ -n "$(command -v reattach-to-user-namespace)" ]; then
  reattach-to-user-namespace $@
else
  exec "$@"
fi
Ivan
la source