Este comando funciona como esperado se eu executá-lo na tmux
linha de comando:
list-panes -a -F "pane ID: #{p3:pane_id} TTY: #{p11:pane_tty}"
Saída:
pane ID: %1 TTY: /dev/pts/35
pane ID: %2 TTY: /dev/pts/36
pane ID: %3 TTY: /dev/pts/37
pane ID: %4 TTY: /dev/pts/38
Mas falho em fazê-los funcionar dentro de display-menu
. O problema parece óbvio (pelo menos da minha perspectiva de shell): Um nível adicional de aspas é necessário para que list-panes
veja a string de formato e não seu valor resolvido. Mas obviamente estou fazendo errado:
bind-key C-t display-menu -T 'Test' \
'List panes with tty' '' "list-panes -a -F 'pane ID: \#\{p3:pane_id\} TTY: \#{p11:pane_tty}"
bind-key C-t display-menu -T 'Test' \
'List panes with tty' '' {
list-panes -a -F 'pane ID: #{p3:pane_id} TTY: #{p11:pane_tty}'
}
Saída:
pane ID: %1 TTY: /dev/pts/35
pane ID: %1 TTY: /dev/pts/35
pane ID: %1 TTY: /dev/pts/35
pane ID: %1 TTY: /dev/pts/35
O problema é que a string é analisada duas vezes. Sem escapar
#{p3:pane_id}
e#{p11:pane_tty}
são expandidas muito cedo. Use##
em vez de#
; a primeira análise irá substituir##
por#
sem expandir{…}
que segue; a segunda análise irá ver#{p3:pane_id}
e#{p11:pane_tty}
não expandido ainda, irá expandi-los.