lunes, 15 de diciembre de 2014

Creación plugin menú emergente para eclise 3.6 y superior

Buenas, os dejo aquí una entrada rapidida para un tema que debería ser tratado más a fondo, pero ante la carencia de tiempo y el interés que creo tiene el tema, la pondré lo mejor que pueda.

El caso es que tenía la necesidad de crear un simple plugin para eclipse de forma que al pulsar con el botón derecho sobre el código se incluyera en el menú emergente una entrada que al ser pulsada insertara código en el punto donde hemos hecho click. Encontré documentación y ejemplos, pero ninguno valía pues creo que todos eran aplicables a versiones de eclipse inferiores a la 3.6 (no estoy muy seguro del límite) el caso es que al final lo conseguí (tras muuucas pruebas) y la verdad es que sabiendolo hacer no era dificil.

El caso, me salto tan solo bosquejo los pasos normales para la creación de un plugin de menú emergente pues están documentados en varios sitios. Me centraré en los puntos donde veo mayor dificultar. Al lío.
  • Crear proyecto de plugin de eclipse.
  • Usar el asistentes para la creación del plugin cogiendo la opción de plugin de menú emergente. 
  • Al terminar de ejecutar el asistente se abrirá automáticamente el fichero plugin.xml pero el título mostrado en la pestaña del editor será el nombre que hayamos puesto al plugin.
  • Dentro del editor, seleccionar la pestaña inferior plugin.xml.
  • Sustituir la línea: 
            objectClass="org.eclipse.core.resources.IFile
          por
           objectClass="org.eclipse.ui.IEditorInput"
            nameFilter="*.java"

  • Esto hará que nuestro plugin se muestre como submenú dentro del menu emergente al pulsar sobre un editor de un fichero java.
  • Cada entrada dentro del submenú será un bloque action dentro del fichero plugin.xml, por lo que deberemos completar dicho fichero según nuestras necesidades. Podremos hacerlos a capón, de forma más bonita desde la pestaña inferior Extensions del mismo editor del fichero plugin.xml
  • Dentro de cada bloque action encontramos el campo: id="prueba.newAction"  que se pasará como parámetro al método run de la clase accion del plugin.
  • Abrir el fichero NewAction.java dentro del package prueba.popup.action. Estos son los nombres que yo he usado para este tutorial. En cualquier caso será el fichero dentro del package action.
  • Actualizar el método run(IAction) con el siguiente código:
 public void run(IAction action) {
        try {
            //Obtención del editor
            IEditorPart editorPart = Activator.getDefault().getWorkbench()
                    .getActiveWorkbenchWindow().getActivePage()
                    .getActiveEditor();
          
            //Obtención del proveedor de datos del editor
            TextFileDocumentProvider textFileDocumentProvider = new TextFileDocumentProvider();
            textFileDocumentProvider.connect(editorPart.getEditorInput());

            //Obtención del documento asociado
            IDocument doc = textFileDocumentProvider.getDocument(editorPart.getEditorInput());

            //Posición del cursor
            ITextSelection textSelection = (ITextSelection) editorPart
                    .getSite().getSelectionProvider().getSelection();
            int offset = textSelection.getOffset();

            //Obtener la instrucción que necesitamos en función de la opción seleccionada.
            String texto=obtenerIntrucciones(action.getId());
          
            //Inserción de texto
            doc.replace(offset, 0, texto+"\n");
          
            //Desconexión del proveedor de datos
            textFileDocumentProvider.disconnect(editorPart.getEditorInput());
          
        } catch (CoreException e) {
            e.printStackTrace();
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }

  •  A vosotros os dejo el estudio del código, que bien comentado está.
  • La línea marcada en amarillo es la que obtiene el texto a usar a partir de una llamada a otro método que es:
 /**
     * Devuelve el trozo de código asociado al indentificador que se le indica.
     * @param Identificador del trozo de código fuente que queremos.
     * @return Código fuente asociado al identificador.
     */
    private String obtenerIntrucciones(String id) {

        int posIni=15;
        String cod=id.substring(posIni,id.length());
               
        return (String) identificador.get(cod);
           
    }


  •  Este método lo que hará será usar el identificador que le pasamos (en realidad un trozo de él, a partir del carácter 15 que es la posición que a mi me interesaba) para buscar el texto a devolver dentro de un hashmap que previamente hemos declarado. 
  • Declararemos este hashmap al principio de la clase (marcado en amarillo):
public class NewAction implements IObjectActionDelegate {

    private Shell shell;
    private HashMap identificador = new HashMap();
    private String texto="";


 ....

  •  Añadimos en el constructor la carga de datos en el hasmap:
     /**
     * Constructor for Action1.
     */
    public NewAction() {

        super();
        
       //Primer texto
        texto="Texto 1 a insertar";
        identificador.put("identificador1",texto);
       
        //Texto 2
        texto="Texto 2 a insertar";
        identificador.put("identificador2", texto);
    }


  • El primer valor que se mete en el hashmap ha de corresponderse con el final de cada uno de los  identificadores que hayamos usado en cada bloque action del plugin.xml. El segundo valor será el texto que insertaremos.
  • Probamos y ampliamos debidamente nuestro plugin y cuando estemos ya contentos con el resultado exportamos el proyecto seleccionando la opción export->Plugin development->Deployable plugin and fragments.
  • Para instalar el plugin, el jar obtenido hemos de ponerlo dentro del fichero plugin de la instalación de eclipse y reiniciar el ecplise.
Bueno, se que debería detallar mas cosas, pero tiempo no hay. De verdad que funciona, pero si tenéis problemas, comentadlo y os ayudaré en cantado.

Espero sea útil.

=:)










viernes, 22 de agosto de 2014

Script para recortado de imágenes desde consola

Buenas,

hoy os comento un pequeño script que usando convert nos permitirá recortar una imagen desde línea de comandos en un segundo.

Este sería el cuerpo del script:

################################################################################
# IMV 2014
################################################################################
#Recortado de la imagen indicada como parametro 1 tantos pixeles como se indique
# en el resto de parametros.
# Parametro 1: pixeles a recortar por arriba
# Parametro 2: pixeles a recortar por abajo
# Parametro 3: pixeles a recortar por la derecha
# Parametro 4: pixeles a recortar por la izquierda
# Parametro 5: Nombres de ficheros a tratar, incluyendo comodines
################################################################################
ar=$1
ab=$2
iz=$3
dr=$4

for a in $*; do
echo $a
salida="${a/.jpg/_red.jpg}"
salida="${salida/.png/_red.png}"
convert -crop +$iz+$ar $a $salida
convert -crop -$dr-$ab $salida $salida
done



Este texto lo pegais en un fichero de texto vacío y lo guardáis con un nombre como image_crop_v01.sh , luego le dáis permisos de ejecución y lo ponéis en el mismo directorio donde esté la imagen de interés. Desde línea de comandos ejecutáis lo siguiente:

#./image_crop_v01.sh imagen_a_recortar parriba pabajo pizda pder

donde:
  • imagen_a_recortar: Nombre del fichero de la imagen de tipo jpe o png
  • parriba: número de píxeles a recortar por arriba.
  • pabajo: Número de píxeles a recortar por abajo.
  • pizda: Número de píxeles a recortar por la izquierda.
  • pder: Número de píxeles a recortar por la derecha.
Cuando termine, que será rápido, tendreis un nuevo fichero de imagen que se llamará como el original pero con el sufijo _red antes de la extensión. Haréis cosas como esta, de forma muy precisa y rápida:




Espero que os sea de utilidad.

=:)


miércoles, 16 de abril de 2014

Script tonto para lanzar git-gui dentro del proyecto a gestionar

Bueno, seguimos con los scripts y trucos tontos que nos facilitan las labores repetitivas.

En este caso, tenemos un proyecto del tipo que sea, del que estamos gestionando su versionado con git. Si nos gustan los entornos gráficos, por muy marabillosa que sea la línea de comando, podemos usar su interface git-gui.

El caso es que lanzarla es un rollo porque hemos de pasar igualmente por un terminal, ir al directorio donde está el proyecto y desde ahí ejecutar la instrucción git gui.

Como siempre tendremos que hacer lo mismo, bueno, hagamos un script que al ejecutarlo vaya directamente al directorio de trabajo y desde ahí lance nuestro programa. Para ello seguimos los siguientes pasos:
  • Abrimos un terminal.
  • Vamos al directorio donde tenemos el proyecto de interés:
cd /home/yo/proyectos/proyectoEjemplo
  • Creamos un fichero de texto en blanco abriéndolo directamente con vi, al que indicamos el nombre que el fichero tendrá:
vi ejecutar_git_gui.sh
  • Pulsamos i para pasar a modo insercción y pegamos el siguiente contenido:
cd /home/yo/proyectos/proyectoEjemplogit gui
  • Pulsamos escape para salir del modo edición.
  • Pulsamos lo siguiente para guardar y salir:
:wq
  • Ya de vuelta en la línea de comandos damos permisos de ejecución al script que acabamos de crear:
chmod +x 
  • Ya está listo para funcionar. Bastará con hacer doble clic sobre el script e indicar que se ejecute o desde un terminal ejecutarlo directamente.
Bueno, espero os sea de utilidad!


Creación de lanzadores para programas en Debia/Gnome3

Buenas,

tiempo ha que no escribo, pero todo llega, aunque sea en forma de breve reseña.

Al lío pués. Para crear un lanzador a un programa, incluso con parámetros, basta con seguir el siguiente ejemplo:
  • Queremos tener un lanzador que ejecute el siguiente comando:
rsynk-backup /home/yo/documentos /media/dd/documentos

  • Abrimos un terminal y nos vamos al directorio donde queremos crear el lanzador:
cd /home/varios/lanzadores
  • ejecutamos la siguiente instrucción:
gnome-desktop-item-edit --create-new backup_documentos.desktop
  • Se abrirá la siguiente ventana, en la que completaremos los distintos apartados, incluyendo la instrucción a asociar al lanzador dentro del apartado Comando. Se podrá incluso seleccionar un icono:

  • Tras completar Acentaremos y tendremos hecho nuestro lanzador.
Eso es todo amigos!

Esto es práctico para lanzar programas de línea de comando con parámetros que siempre usemos de la misma forma, como en el ejemplo, donde siempre realizaremos el mismo backcup al ejecutar el lanzador.

Espero os sea de utilidad!









miércoles, 15 de enero de 2014

Web muy interesante: Manual de Java

Os presento una interesdante web: Manual de Java

Ya sé que hay manuales de 'eso' para aburrir, pero bueno, este tiene un par de cosas que me gustan, a saber:
  1. Sencillo
  2. Usable
Vamos, que si buscas una ayudita para poner al día tus ideas, desde aquí podrás buscar lo que necesitas con facilidad y obtener una base muy buena sobre el tema que sea. Ya habrá tiempo luego, si es necesario, para dirigirnos a manuales y páginas más amplias y completas.

http://www.manual-java.com/

Espero os sea de utilidad!

=:)