{"id":2205,"date":"2019-05-24T22:45:57","date_gmt":"2019-05-24T22:45:57","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=2205"},"modified":"2019-05-24T22:45:57","modified_gmt":"2019-05-24T22:45:57","slug":"multiples-archivos-en-aplicaciones-gtk-con-javascript","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=2205","title":{"rendered":"M\u00faltiples archivos en aplicaciones Gtk con Javascript"},"content":{"rendered":"\n<p>Desde hace unos meses estoy colaborando como desarrollador con <a href=\"https:\/\/wiki.gnome.org\/CarlosSoriano\">Carlos Soriano<\/a>, ech\u00e1ndole una mano con <a href=\"https:\/\/extensions.gnome.org\/extension\/1465\/desktop-icons\/\">Desktop Icons<\/a>, la extensi\u00f3n para <a href=\"https:\/\/wiki.gnome.org\/Projects\/GnomeShell\">Gnome Shell<\/a> que <a href=\"https:\/\/gitlab.gnome.org\/GNOME\/nautilus\/issues\/158#problems-with-the-current-implementation\">escribi\u00f3 para devolver los iconos al escritorio tras retirar dicho soporte de Nautilus<\/a>.<\/p>\n\n\n\n<p>Como muchos sabr\u00e1n ya, las extensiones, al igual que el resto de Gnome Shell, est\u00e1n escritas en <a href=\"https:\/\/en.wikipedia.org\/wiki\/JavaScript\">Javascript<\/a>, y adem\u00e1s no utilizan <a href=\"https:\/\/en.wikipedia.org\/wiki\/GTK\">Gtk<\/a> sino <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clutter_(software)\">Clutter<\/a>\/<a href=\"https:\/\/developer.gnome.org\/st\/stable\/\">St<\/a>. Sin embargo, Javascript tambi\u00e9n se puede utilizar para escribir aplicaciones <em>normales<\/em>, de escritorio, con Gtk de toda la vida. Para ello basta con utilizar el <a href=\"https:\/\/en.wikipedia.org\/wiki\/Shebang_(Unix)\">shebang<\/a> <em>#!\/usr\/bin\/gjs<\/em> al principio del archivo. Personalmente sigo prefiriendo Python, pero obviamente para gustos hay colores.<\/p>\n\n\n\n<p>Y precisamente aqu\u00ed me encontr\u00e9 con el primer gran problema: estoy intentando portar parte de una extensi\u00f3n a espacio de usuario, y dado que el c\u00f3digo de la extensi\u00f3n est\u00e1 repartido en varios archivos, quer\u00eda mantenerlo as\u00ed tambi\u00e9n en la aplicaci\u00f3n. Por desgracia, por m\u00e1s que buscaba no encontraba como resolver el problema, pues aunque existen algunas aplicaciones Gtk en Javascript que ocupaban varios archivos, no ten\u00eda muy claro c\u00f3mo hac\u00edan para que, al llamar a <em>imports<\/em>, la m\u00e1quina virtual encontrase el fichero. Pero por fin, despu\u00e9s de buscar y rebuscar, encontr\u00e9 la clave:<\/p>\n\n\n\n<p><div class=\"mycode\"> <pre class=\"mycode\">imports.searchPath.unshift(ruta_donde_buscar_ficheros);<\/pre><\/div><\/p>\n\n\n\n<p>Esa llamada recibe como par\u00e1metro un string donde podemos a\u00f1adir una ruta extra donde debe buscar ficheros. Basta con que pongamos la carpeta donde se encuentran el resto de ficheros <em>.js<\/em> de nuestro proyecto, y el comando <em>imports<\/em> los encontrar\u00e1 igual que encuentra los ficheros del sistema. Por supuesto es necesario a\u00f1adirla antes de hacer ning\u00fan <em>imports<\/em>.<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desde hace unos meses estoy colaborando como desarrollador con Carlos Soriano, ech\u00e1ndole una mano con Desktop Icons, la extensi\u00f3n para Gnome Shell que escribi\u00f3 para devolver los iconos al escritorio tras retirar dicho soporte de Nautilus. Como muchos sabr\u00e1n ya, las extensiones, al igual que el resto de Gnome Shell, est\u00e1n escritas en Javascript, y &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=2205\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">M\u00faltiples archivos en aplicaciones Gtk con Javascript<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,6],"tags":[],"class_list":["post-2205","post","type-post","status-publish","format-standard","hentry","category-programacion","category-trucos"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2205"}],"version-history":[{"count":2,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2205\/revisions"}],"predecessor-version":[{"id":2207,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2205\/revisions\/2207"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}