Registrarse
Home
Foros
Miembros
Calendario
Normas
Ayuda

Foros de usuarios de openSUSE
Retroceder   ForoSUSE > Zona Técnica > Programación y Scripts > Scripts


Síguenos en Twitter Suscríbete a nuestras noticias Acompáñanos en Facebook

Respuesta
 
Herramientas Desplegado

Generador de menú con iconos para IceWM
  #1  
Antiguo 02-mar-2012, 13:45
jcsl jcsl está desconectado
Miembro FOROSuSE
 
Fecha de Ingreso: 18-mayo-2008
Versión: Tumbleweed
Mensajes: 2.104
Agradecimientos: 0
Agradecido 973 Veces en 587 Mensajes
Poder de Credibilidad: 12
jcsl llegará a ser famoso muy pronto
Generador de menú con iconos para IceWM

Hola.

Ya hice uno en su momento en Java, pero ahora lo he hecho en Python. En esta ocasión funciona mejor y he usado un método muy simple para hacerlo:
  • xdg_menu, el comando que se usa para generar el menú, admite varios formatos de salida: icewm, xfce4, openbox, etc.
  • La salida para IceWM no tiene iconos. Bueno, en realidad añade el icono de carpeta para las categorías, pero solo eso.
  • La salida para xfce4 sí incluye los nombres de los iconos. Lo que hace el script es tomar dicha salida y generar el menú en formato para IceWM con los iconos.
Las dependencias son:
  • python-xdg
  • xdg-menu (suele estar instalado por defecto)
Las opciones disponibles son:

Código:
usage: icemeico.py [-h] [-a fichero] [-d fichero] [-t tema] [-m medida] [-r]

Generador de menú con iconos para IceWM.

optional arguments:
  -h, --help  show this help message and exit
  -a fichero  Fichero a insertar antes del menú
  -d fichero  Fichero a insertar después del menú
  -t tema     Nombre del tema de iconos (mirarlo en /usr/share/icons)
  -m medida   Tamaño del icono
  -r          Hacer una copia de respaldo del menú original
Todos los argumentos son opcionales y por defecto son:
  • Para -a y -d nada
  • Tema de iconos: hicolor
  • Tamaño de los iconos: 16
  • Respaldar el original: no
Los valores por defecto se puede modificar fácilmente editando el script.

Un saludo.
Archivos Adjuntos
Tipo de Archivo: gz menu_con_iconos_para_IceWM.tar.gz (13,8 KB (Kilobytes), 9 visitas)
Responder Citando
Los Siguientes 5 Usuarios Han Dado las Gracias a jcsl Por Este Mensaje:
DiabloRojo (03-mar-2012), manolobarea (14-mar-2012), manumart1 (03-abr-2017), psycho (15-feb-2013), tavomazzei (05-mar-2012)
  #2  
Antiguo 16-abr-2017, 13:44
manumart1 manumart1 está desconectado
Aforado
 
Fecha de Ingreso: 20-septiembre-2016
Versión: LEAP 42.2
Mensajes: 4
Agradecimientos: 4
Agradecido 0 Veces en 0 Mensajes
Poder de Credibilidad: 0
manumart1 está en el buen camino
Gracias a jcsl por su script icemeico.py.
Me ha servido para regenerar el menu IceWM porque de repente lo había perdido (eso creía yo).

En mi caso para poder ejecutar correctamente el script icemeico.py y que funcionase aún cuando el menú tuviese opciones con acentos (por ejemplo "Educación"), tuve que:
- Añadir al principio "import stat" y "import codecs".
- En la función crear_menu añadir estos cambios en rojo:
Código:
def crear_menu ():
	...
	for linea in menu_xfce:
	...
		if not menu is None:
			...
			if icono is None:
				icono = "none"
				
			archivo.write ((" " * indentacion) + "menu \"" + menu.group (1).decode('utf-8') + "\" " + icono + " {\n")
			indentacion += 3
			
		elif not menu_fin is None:
			...
		elif not app is None:

			icono = getIconPath (app.group (3), medida, tema, extensions = ["png", "xpm"])

			if icono is None:
				icono = "none"

			archivo.write ((" " * indentacion) + "prog \"" + app.group (1).decode('utf-8') + "\" " + icono + " " + app.group (2).replace(""", "\"") + "\n")

	...
- Al final del script:
Código:
archivo = codecs.open(ARCHIVO_DESTINO, 'w+', 'utf-8')
# Ojo, no poner BOM: archivo.write(u'\ufeff')
crear_menu ()
archivo.close ()
Digo que pensé que había perdido el menú porque no sabía que el fichero menu está en dos carpetas: /etc/icewm/ y ~/.icewm/. Cuando entré por primera vez en IceWM me aparecía un menú con varios programas, sacado de /etc/icewm/menu. Pero luego instalé IceWM Control Panel (luego tuve que crear entrada ad hoc para el comando iceWMCP) para personalizar el menú y me extrañó ver que el menú aparecía casi vacío en el programa... El caso es que salvé y así es como perdí el menú. Lo que creo que me pasó es que al salvar, se creó el fichero ~/.icewm/menu que hasta entonces no existía. Fue entonces cuando recurrí al script icemeico.py de jcsl.

El caso es que si quito el fichero ~/.icewm/menu (o lo renombro), entonces vuelve a aparecer el menú inicial con opciones que yo creía haber perdido, el de /etc/icewm/menu. Lo interesante de todo esto es que el fichero /etc/icewm/menu es muy pequeño y por eso yo pensé que había perdido todas las opciones del menú. ¿De dónde salen entonces todas las opciones de menú de /etc/icewm/menu? Pues parece que ese menú no es estático, sino que se recrea a partir de comandos como "icewm-menu-fdo" y "xdg_menu --format icewm".

Otra manera de generar un menú para IceWM es MenuMaker de http://menumaker.sourceforge.net. No hace falta instalar nada. Basta con ejecutar:
./mmaker -ci icewm > nuevo_menu
Pero el menú creado vía MenuMaker no me gusta porque no aparecen submenús de varios niveles. Prefiero sin duda el menú creado vía el script icemeico.py de jcsl.

De todas maneras algunos programas no se abren bien. Por ejemplo para abrir Dolphin para root tuve que poner en el fichero menu:
prog "File Manager - Super User Mode" "/usr/share/icons/hicolor/64x64/apps/msg_error.png" kdesu -c "/usr/bin/dbus-launch dolphin -qwindowtitle 'File Manager - Super User Mode' -icon '/usr/share/icons/hicolor/64x64/apps/msg_error.png'"
Por otra parte, para poder abrir bien programas como Dolphin o Kate, de manera que se vean todos sus iconos, tuve que poner al final del fichero ~/.profile esta línea:
export QT_QPA_PLATFORMTHEME="kde"
Por otra parte, para poder tener en la parte derecha de la barra de tareas unos applets para wifi y portapapeles, me instalé nm-applet y parcellite, porque no supe arrancar el applet wifi de KDE, y klipper no arrancaba bien con QT_QPA_PLATFORMTHEME="kde". Este es mi fichero ~/.icewm/startup (debe tener permisos de ejecución):
Código:
#!/bin/bash

# Poner el brillo de pantalla al 10%
xbacklight -set 10

# Activar el teclado numérico
numlockx on

# Arrancamos el applet para el Network Manager de GNOME, que es el que vale para iceWM
(sleep 1) && nm-applet &

# Arrancamos el applet del Cortapapeles Parcellite, que es el que vale para iceWM (Klipper no sirve...)
(sleep 1) && parcellite &

# Arrancamos el proceso que permitirá buscar programas y  ejecutar. Luego se invocará via ALt+F2 o Alt+Space
(sleep 1) && krunner &

# Arrancar el daemon del salvapantallas
xscreensaver &
Además para que en mi portátil me funcionasen las teclas de subir y bajar volumen y brillo, añadí unas líneas al fichero ~/.icewm/keys:
Código:
key "Alt+Ctrl+t"			konsole

# Audio system: Pulse Audio
key "XF86AudioLowerVolume"		/bin/sh -c "pactl set-sink-mute 0 0 && pactl set-sink-volume 0 -5% && kdialog --passivepopup \"Volumen: $(pactl list sinks | grep -i 'volume: front-left' | cut -d'/' -f2 | xargs)\" 1"
# Antes se subir el volumen, comprobamos que no sea superior al 200%. Por eso pongo el IF.
key "XF86AudioRaiseVolume"		/bin/sh -c "pactl set-sink-mute 0 0 && if [[ $(pactl list sinks | grep -i 'volume: front-left' | cut -d'/' -f2 | xargs | cut -d'%' -f1) -lt 200 ]] ; then pactl set-sink-volume 0 +5% ; fi && kdialog --passivepopup \"Volumen: $(pactl list sinks | grep -i 'volume: front-left' | cut -d'/' -f2 | xargs)\" 1"
key "XF86AudioMute"			/bin/sh -c "pactl set-sink-mute 0 toggle && kdialog --passivepopup \"Volumen $(pactl list sinks | grep -i 'mute:' | xargs)\" 1"

# Para imprimir pantalla: spectacle, ksnapshot, gnome-screenshot
key "Print"				spectacle
key "Alt+Print"				spectacle -a

# Para cambiar el brillo del monitor
key "XF86MonBrightnessDown"		/bin/sh -c "xbacklight - 10 && kdialog --passivepopup \"Brillo: $(xbacklight -get | cut -d'.' -f1)%\" 1"
key "XF86MonBrightnessUp"		/bin/sh -c "xbacklight + 15 && kdialog --passivepopup \"Brillo: $(xbacklight -get | cut -d'.' -f1)%\" 1"
Por otra parte, como no conseguía hacer que el portátil hibernase si la batería estaba baja, hice este script:
Código:
#!/bin/bash
#
# Hibernar ordenador si la carga de la bateria es baja.
# Este script se puede ejecutar desde cron cada 5 minutos:   */5 * * * * ~/bin/bateria_baja_hibernar.sh.
# Ojo, el usuario debera tener permiso para ejecutar "systemctl hibernate".

# Esto es necesario para que al ejecutar el comando xmessage desde el cron, el mensaje que muestre en pantalla.
# Ojo, tener en cuenta que el cron se ejecuta en el home del usuario.
# Por otra parte en el cron no podemos fiarnos de tener variables de entorno (por ejemplo PATH), y por eso a veces se pone el path completo a un comando.
export DISPLAY=:0.0

# Porcentaje de carga umbral, por debajo del cual se hibernara.
# Nota: A veces aunque el applet de la barra de tareas muestra que la carga es 15%, el valor leido desde este script resulta ser 35%
PCT_CARGA_UMBRAL=15

# Porcentaje de carga actual.
# PCT_CARGA=$(acpi -b | cut -d',' -f2 | xargs | sed s/%//) ---Comando muy lento
# PCT_CARGA=$(qdbus --system org.freedesktop.UPower /org/freedesktop/UPower/devices/battery_BAT1 org.freedesktop.UPower.Device.Percentage)
PCT_CARGA=$(upower -i $(upower -e | grep BAT) | grep --color=never -E percentage | xargs | cut -d' ' -f2 | sed s/%//)

# echo "La carga de la bateria es $PCT_CARGA %"

if (( $PCT_CARGA <= $PCT_CARGA_UMBRAL )); then
	# Aunque kdialog es mas elegante que xmessage, no me sirve porque quiero que el mensaje se cierre si no se responde a el dentro de un minuto, y la unica opcion que ofrece kdialog para eso es "--passivepopoup" pero sin botones. Por eso uso xmessage.
	#kdialog --yesno "Primera linea del mensaje\nSegunda linea" --yes-label "Hibernar ahora" --no-label "Cancelar hibernacion" --title "Bateria baja"
	xmessage -center -timeout 60 -buttons "Hibernar ahora":0,"Cancelar hibernacion":1 "La carga de la bateria es baja ($PCT_CARGA %). El ordenador va a hibernar dentro de 1 minuto."
	if (( $? != 1 )); then
		systemctl hibernate
	fi
fi
Algunas opciones que considero muy interesantes para tener en el fichero prefoverride o preferences (carpeta ~/.icewm):
Código:
# Menus track mouse even with no mouse buttons held
MenuMouseTracking=1 # 0 / 1

# Botón a la derecha de la barra de tareas, para ocultar/mostrarla.
# (Esta opción es válida, aunque «IceWM Control Panel» diga que no cada vez que lo abro)
TaskBarShowCollapseButton=1

# Opaque window move
OpaqueMove=0 # 0 / 1

# Opaque window resize
OpaqueResize=0 # 0 / 1

# En iceWM la tecla F2 sirve para que la ventana activa aparezca en todos los escritorios. No me interesa porque anula la tecla F2 de Dolphin que sirve para renombrar ficheros.
# "Occupy all" shortcut
KeyWinOccupyAll=""

Última edición por manumart1; 19-abr-2017 a las 21:17 Razón: Corregir erratas. Cambios UTF-8 en script. Liberar tecla F2 para Dolphin.
Responder Citando
Respuesta

Marcadores


(0 miembros y 1 visitantes)
 
Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado

Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Reinstalar el cargador de arranque GRUB sanjui Instalación y Actualizaciones 42 08-feb-2016 23:25
Instalar jDownloader con Java. tranzorx FAQs, Manuales y Tutoriales 66 23-ago-2011 01:04
Opinion de OpenSuse 11.1 mukenio Encuestas 48 22-oct-2009 13:59
Samba. un buen manual para SuSE keops FAQs, Manuales y Tutoriales 26 02-ago-2009 20:03
Vocabulario Básico en GNU/Linux karlggest FAQs, Manuales y Tutoriales 2 17-ene-2008 21:33



Síguenos en Twitter Suscríbete a nuestras noticias Acompáñanos en Facebook


La franja horaria es GMT +2. Ahora son las 22:59.
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.

Esta página está bajo una licencia de Creative Commons, salvo que no se indique lo contrario.
Creative Commons License

Valid CSS!

Diseño por:Designed by: vbdesigns.devbdesigns.de 
Contáctenos - ForoSUSE - Archivo - Declaración de Privacidad - Arriba