Lux-Vacuos / Voxel

Sandbox survival game created with Light Engine (Development halted due to other projects)
https://luxvacuos.net/projects
GNU General Public License v3.0
21 stars 6 forks source link

Voxel descarga su contenido en ~ (/home/«usuario») #48

Closed matiuri closed 8 years ago

matiuri commented 8 years ago

En vez de usar la carpeta en donde se encuentre el Launcher, se crea una carpeta ~/voxel, en donde se colocan todos los archivos. OS: Ubuntu 14.04.3 LTS

matiuri commented 8 years ago

Verificaste si no ocurre en MacOS X?

Guerra24 commented 8 years ago

Pues no le he preguntado a dani, pero si recuerdo bien no pasaba.

Guerra24 commented 8 years ago

Confirmó que pasa en Ubuntu 15.10, No lo puedo probar en Debian por que no se ejecuta.

danirod commented 8 years ago

MacOS X: la carpeta voxel se crea donde tengas el Launcher. He probado en varias carpetas y funciona como debería.

danirod commented 8 years ago

Ubuntu MATE 15.10: Puedo replicar el bug. He estado investigando y parece que Java utiliza como directorio inicial $HOME cuando se abre un JAR haciendo doble clic sobre él (pero no cuando se abre desde la consola): captura captura2

El código está aquí, son estos dos archivos: https://gist.github.com/danirod/a676dbf86c5d3ac3badb Se puede compilar el JAR con:

javac Test.java
jar cfm Test.jar Manifest Test.class

PS: ¿Esto no debería ser un issue para https://github.com/guerra24/voxel-launcher? xD

danirod commented 8 years ago

Windows 10: al hacer la prueba el directorio inicial se pone correctamente tanto desde terminal como desde Explorer.

Explicación más lógica: en UNIX el CWD inicial de un proceso es el directorio desde el que se invoque el comando. Por ejemplo, si hago lo siguiente en Ubuntu:

~/Downloads $ cd /tmp
/tmp $ java -jar /home/danirod/Downloads/Launcher.jar

se crea una carpeta llamada /tmp/voxel. El comportamiento del CWD inicial en una terminal está claro, pero en un entorno gráfico es indefinido y no se sabe muy bien lo que puede pasar. Parece que en este caso es una cosa propia de Java porque he creado el siguiente shellscript:

#!/bin/sh
notify-send $PWD

Y al hacer doble clic sobre él en la notificación sí veo /tmp en la notificación.

Antecedente relacionado: en MacOS X si hago doble clic en un shell-script desde el explorador se abre una terminal en la que se ejecuta el comando desde el directorio home invocado de forma absoluta, así que el CWD inicial de ese shell-script es /Users/[usuario]/ cuando se hace doble clic.

Last login: Thu Jan 21 9:00:00 on ttyp1
Welcome to Darwin!
danirod@box:~$ /Users/danirod/Test/script_en_el_que_hago_doble_click.sh
Hola, mi PWD es /Users/danirod

Posible solución: si la intención del launcher es abstraer el inicio de la aplicación y el usuario no debe tocar el directorio voxel por su cuenta, lo mejor será usar un directorio interno como AppData en Windows, ~/Library/Application Support en Mac y ~ en Linux y renombrar el directorio voxel por .voxel para hacerlo oculto en los últimos dos: http://stackoverflow.com/questions/11113974/what-is-the-cross-platform-way-of-obtaining-the-path-to-the-local-application-da