configuración de tmux condicional al sistema operativo

41

Hay algunas líneas de mi tmux.conf que me gustaría ejecutar solo si mi sistema operativo es Mac. Sin embargo, me gustaría usar mi tmux.conf en múltiples sistemas operativos diferentes. ¿Cómo puedo hacer un comando condicional al sistema operativo en el que tmux se está ejecutando actualmente?

perder el tiempo
fuente
1
version detect stackoverflow.com/questions/35016458/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

51

Usa el if-shellcomando:

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

Es posible que desee colocar comandos específicos del sistema operativo en archivos separados y ejecutarlos mediante el comando "archivo fuente".

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"
chepner
fuente
8
Los comandos if-shelly run-shell tmux son actualmente asíncronos (a partir de tmux 1.7); efectivamente ejecutan su comando de shell en segundo plano, y cualquier comando tmux que ejecuten solo se ejecutará después de cualquier comando que venga después del comando if-shellor run-shell( tmux es de subproceso único). Efectivamente, si usa if-shello run-shellen ~/.tmux.conf, la sesión inicial (y las sesiones, ventanas o paneles creados explícitamente creados a través de ~/tmux.conf) carecerá de cualquier configuración tmux organizada a través de if-shello run-shellcomandos.
Chris Johnsen
1
@ChrisJohnsen if-shellfunciona como se esperaba para mí con tmux 1.8. Lo estoy usando para establecer set- title
azulado
2
Esto debe ser aceptado; Es la forma correcta de hacerlo.
Chev
11

Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 tiene la respuesta. También Chris Johnsen merece mucho crédito por ayudar a las personas en el tema de GitHub aquí: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

Básicamente, configura un script de shell llamado safe-reattach-to-user-namespaceque verifica la existencia del comando real volver a conectar ...

#! /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
fuente