Calculadora en gnome shell

danigm's picture

Con la llegada de gnome-shell, hackear el escritorio gnome es más fácil que nunca. Al estar escrito en su mayor parte en javascript, y al ser interpretado, la nueva interfaz de gnome se presta muchísimo a la modificación/prueba y error, con lo que se pueden hacer cosas interesantes en un rato de aburrimiento.

Por otra parte, en kde hay una funcionalidad, que es una tontería, pero que me parece bastante útil. Esta funcionalidad es la calculadora en el alt+f2. Al pulsar Atl+f2 en kde sale el campo de entrada de texto para lanzar aplicaciones o comandos de forma rápida, pero si escribres "=3+2" te pone el resultado de la suma, en este caso "5". Por lo tanto, hay una calculadora accesible de manera rápida en el escritorio.

Hoy estaba aburrido y he pensado añadir esta funcionalidad al lanzador de aplicaciones de gnome-shell.

Ha sido bastante fácil. Primero me fui a buscar los ficheros javascript de gnome-shell, que en mi distribución (archlinux) están en /usr/share/gnome-shell, ahí de un vistazo pude ver js/ui/runDialog.js

Mirando un poco los ficheros js que hay por ahí, y conociendo un poco de javascript he hecho las siguientes modificaciones:

[java]
--- /usr/share/gnome-shell/js/ui/runDialog.js 2011-04-26 01:27:01.000000000 +0200
+++ runDialog.js 2011-04-28 22:18:03.000000000 +0200
@@ -309,6 +309,15 @@
f = null;
if (f) {
f();
+ } else if (input.charAt(0) == '=') {
+ try {
+ value = String(eval(input.substr(1)));
+ } catch (e) {
+ value = "error: " + String(e.message);
+ }
+ this._entryText.set_text(value);
+ this._commandError = true;
+ Main.notifyError(value, '');
} else if (input) {
try {
if (inTerminal)
[/java]

Y ya que estoy, pongo aquí una captura de pantalla:



gshell

Y el resultado:



gshell-2

Comments

2
alfem's picture

Funciona estupendamente.

Acaba de ver una extensión que hace algo así, pero con el input de la búsqueda de GnomeShell, pero esta me gusta más.

danigm's picture

Mejor con una extensión

https://github.com/danigm/gnome-shell-calculator

Acabo de coger este código y como ahora controlo un poco más el tema de las extensiones no ha sido difícil crear una extensión que añada esta funcionalidad.