Sawfish gerencia seus menus com um programa associado sawfish-menu . Você pode usar esse programa mesmo se não estiver executando o Sawfish como seu gerenciador de janelas. O protocolo entre o peixe-serra e o menu de peixe-serra não parece estar documentado em nenhum lugar; é inspirado no formato de especificação de menu no próprio Sawfish.
echo '(popup-menu (("_toplevel" 0) ("_submenu" ("_foo" 1) () ("_bar" 2))))' |
/usr/lib/sawfish/1.5.3/x86_64-pc-linux-gnu/sawfish-menu
sawfish-menu imprime 0 se o usuário selecionar "toplevel", etc. Você pode especificar sequências (entre aspas duplas ou até mesmo sem aspas se elas forem identificadores Lisp válidos) em vez de números para as entradas. Se o usuário cancelar (por exemplo, pressionando Esc ), a saída será () .
Aqui está um resumo da sintaxe de entrada de sawfish-menu .
- Comece com
(popup-menue termine com). - Para uma entrada de menu clicável, use
("TEXT" OUTPUT)onde TEXT é o texto da entrada e OUTPUT é o que o programa imprime se esta entrada de menu estiver selecionada.- Se houver um sublinhado em TEXT , o próximo caractere será o acelerador dessa entrada.
- Você pode colocar uma marca de verificação na frente de uma entrada no menu, adicionando
(check . t), por exemplo,("Foo" 42 (check . t)). - Você pode colocar um marcador (botão de opção) na frente de uma entrada do menu, adicionando
(group . SOMETHING) (check . t). Apenas uma entrada dentro de um determinado grupo pode ter o botão. - Você pode deixar uma entrada em cinza e não selecionável adicionando
(insensitive . t).
- Para um submenu, use
("TEXT" ENTRY…). - Para um separador, use
().
Obviamente, não espere que as pessoas tenham esse utilitário instalado. Normalmente não é empacotado separadamente do Sawfish, mas na verdade não precisa de nada do próprio Sawfish; é um script de repetição, rep sendo o dialeto Lisp no qual o Sawfish (e basicamente nada mais) está escrito. No Debian, você precisa que o pacote rep-gtk execute sawfish-menu , além do script em si.