terça-feira, 28 de agosto de 2007

Script para um pipe menu no openbox

Fiz um script para colocar qualquer output de um comando de shell num pipe menu do Openbox

#!/usr/bin/python

import os
import sys

# Example
#
# /generic.py "df -h -x tmpfs -x usbfs"
# /generic.py "ps ax"
# /generic.py cal
#
# "cal" output shows up unformated due to non monospaced fonts

# Set the default command
cmd = "ls ~/ -1"
if len(sys.argv) > 1:
  # Replace the default command with the one given on the command line
  cmd = sys.argv[1]

# Execute the command
sf = os.popen(cmd)
# Get the command stdout output
cal = sf.read()
# Generate the menu item
menu = "\n".join(['<item label="' + ln + '"></item>' for ln in cal.split("\n") if ln and not ln.isspace()])
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
print "<openbox_pipe_menu>"
print menu
print "</openbox_pipe_menu>"

O próximo passo será colocar opções para definir um script que faz o handling do click sobre cada item do menu e opção para não cortar as linhas em branco ou só com espaços. Falta também substituir as concatenações por %s e um bug que faz com que não apareça nada nos menus quando o output do comando de shell contém um caractér & porque o XML fica inválido, penso eu.
Tal como está escrito nos comentários, há problemas com a formatação dos outputs porque a fonte que uso nos menus não é monospaced nem tenho intenção que seja, o que faz com que as linhas do output fiquem desalinhadas.

Sem comentários: