awesome 3.1 rc3, When Doves Cry

Enviado por arctica el 21 Noviembre, 2008 - 21:28.

Como viene siendo habitual cada siete días, hoy se ha lanzado la tercera versión release candidate de la próxima versión estable de awesome, 3.1
Os dejo el historial de cambios

- solucionado el fix urgent.jumpto en awful.client
- configuración del icono tag en awful.widget
- solucionados varios problemas en naughty
- documentación actualizada
- wiboxes se sitúan sobre las ventanas del escritorio
- corregido problemas relacionados con el systray hiding
- mejorada la maximización en el caso de un único client
- nuevo campo field para los argumentos de run() en awful.prompt
- corregida la disposición de la barra de título en los client
- nuevo argumento selectall para add() en awful.prompt
- añadido soporte montage en awsetbg
- añadido soporte habak en awsetbg
- mejorado el fair layout

Imagen de nethomass
Enviado por nethomass el 21 Noviembre, 2008 - 21:42.

O_o! No es muy complicado configurar este wm, quiero decir, laborioso?

Cuando me enteré de la existencia de awsemoe, fue por un post tuyo y le dí una mirada al sitio y a la documentación pero, al ver el wiki... hay tantos archivitos qu se deben configurar... al final dije "No, esto me va a hacer perder mucho tiempo." .

Te pregunto:
¿Porqué usar este window manager? A tí, personalmente... ¿Porqué te gusto y que cosas hace que otros wm no puedan?

Un saludo.
PD: Me gusta tu blog =).

Imagen de arctica
Enviado por arctica el 21 Noviembre, 2008 - 22:41.

hola nethomass :)

realmente sólo son dos archivos. el, digamos, "básico" y el de tema (algo como en blackbox, pero con menos opciones)

el básico está escrito en lua, pero no es necesario saber programar en lua. mirando ejemplos de archivos de otros usuarios puedes hacerte un awesome como te guste.
a lo mejor al principio parece algo confuso, pero yo pensé lo mismo de los *box xDD

a mí lo que más me gusta es su característica de "tiling". ya sabes, lo de que todo se distribuya como un mosaico, ocupando toda la pantalla. me resulta tremendamente útil a la hora de, por ejemplo, programar. en busca de esta característica miré varios (wmii, dwm), pero a mi juicio awesome es más flexible y permite otras disposiciones aparte del "tiling". xmonad también me gusta mucho pero lo veo más complicado de configurar (haskell). echinus es otro "tiling wm", con un fichero de configuración muy sencillo, pero lo considero menos flexible que awesome.

otra cosa que me gusta es que se parte de no tener "nada" (ni siquiera reloj), y ya tú lo puedes modelar tanto como quieras. pero bueno, esto lo comparten muchos wm

¡gracias!

saludos :)

Imagen de nethomass
Enviado por nethomass el 21 Noviembre, 2008 - 22:54.

Que interesante, tan solo 2 archivos son necesarios he!!!

Por ejemplo yo uso fluxbox y para configurarlo a mi gusto debo editar unos 3 o 4 archivitos bastante sencillos y fáciles de entender.

Este fin de semana tendré mucho rato libre (no tengo trabajo pendiente wiii!!!), y si no es mucho pedir, podrías compartir esos 2 archivos de tu awesome para instalarlo en mi pc de escritorio?

Es un Pentium III a 866Mhz y siempre le instalo algo ligerito, en estos momentos lo tengo con OpenBSD 4.4 y ya revise que el paquete awesome esta disponible ^_^.

Un saludo.

Imagen de arctica
Enviado por arctica el 21 Noviembre, 2008 - 23:14.

por supuesto. en un rato los pego por aquí

una vez instalé OpenBSD, pero no llegué más allá del sistema base. lo abandoné xD a lo mejor lo pongo otra vez en mi partición para pruebas

Imagen de arctica
Enviado por arctica el 21 Noviembre, 2008 - 23:27.

siento que sea tan largo, es que con el fondo negro-gris del blog al usar etiquetas code se ve todo blanco :S si alguien sabe como arreglarlo...

/home/arctica/.config/awesome/rc.lua


-- arctica awesome 3 configuration file

-- Define if we want to use titlebar on all applications.
use_titlebar = false
-- Include awesome library, with lots of useful function!
require("awful")
require("tabulous")
require("beautiful")

-- This is a file path to a theme file which will defines colors.
theme_path = "/home/arctica/.config/awesome/arctica.theme"

-- This is used later as the default terminal to run.
terminal = "urxvt"

-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"

-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
"tile",
"tileleft",
"tilebottom",
"tiletop",
"fairh",
"fairv",
"magnifier",
"max",
"spiral",
"dwindle",
"floating"
}

-- Table of clients that should be set floating. The index may be either
-- the application class or instance. The instance is useful when running
-- a console app in a terminal like (Music on Console)
-- xterm -name mocp -e mocp
floatapps =
{
-- by class
["MPlayer"] = true,
["gimp"] = true,
["VirtualBox"] = true,
["dia"] = true,
-- by instance
}

-- Applications to be moved to a pre-defined tag by class or instance.
-- Use the screen and tags indices.
apptags =
{
["Navigator"] = { screen = 1, tag = 8 },
["gschem"] = { screen = 1, tag = 4},
}

-- {{{ Initialization
-- Initialize theme (colors).
beautiful.init(theme_path)

-- Register theme in awful.
-- This allows to not pass plenty of arguments to each function
-- to inform it about colors we want it to draw.
awful.beautiful.register(beautiful)

-- Uncomment this to activate autotabbing
-- tabulous.autotab_start()
-- }}}

-- {{{ Tags
-- Define tags table.
tags_names = { "laTEX", "urxvt", "mpd", "electronic", "pdf", "code", "seven", "www", "im" }
tags_layout = { "tile", "tile", "tile", "max", "tile", "tile", "tile", "max", "tile" }
tags = {}
for s = 1, screen.count() do
-- Each screen has its own tag table.
tags[s] = {}
-- Create 9 tags per screen.
for tagnumber = 1, 9 do
--tags[s][tagnumber] = tag({ name = tagnumber, layout = layouts[1] })
tags[s][tagnumber] = tag({ name = tags_names[tagnumber], layout = tags_layout[tagnumber] })
-- Add tags to screen one by one
tags[s][tagnumber].screen = s
end
-- I'm sure you want to see at least one tag.
tags[s][1].selected = true
end
-- }}}

-- {{{ Statusbar
-- Create a taglist widget
mytaglist = widget({ type = "taglist", name = "mytaglist" })
mytaglist:mouse_add(mouse({}, 1, function (object, tag) awful.tag.viewonly(tag) end))
mytaglist:mouse_add(mouse({ modkey }, 1, function (object, tag) awful.client.movetotag(tag) end))
mytaglist:mouse_add(mouse({}, 3, function (object, tag) tag.selected = not tag.selected end))
mytaglist:mouse_add(mouse({ modkey }, 3, function (object, tag) awful.client.toggletag(tag) end))
mytaglist:mouse_add(mouse({ }, 4, awful.tag.viewnext))
mytaglist:mouse_add(mouse({ }, 5, awful.tag.viewprev))
mytaglist.label = awful.widget.taglist.label.all

-- Create a tasklist widget
mytasklist = widget({ type = "tasklist", name = "mytasklist" })
mytasklist:mouse_add(mouse({ }, 1, function (object, c) client.focus = c; c:raise() end))
mytasklist:mouse_add(mouse({ }, 4, function () awful.client.focusbyidx(1) end))
mytasklist:mouse_add(mouse({ }, 5, function () awful.client.focusbyidx(-1) end))
mytasklist.label = awful.widget.tasklist.label.currenttags

-- Create a textbox widget
mytextbox = widget({ type = "textbox", name = "mytextbox", align = "right" })
-- Set the default text in textbox
mytextbox.text = " awesome " .. AWESOME_VERSION .. " "
mypromptbox = widget({ type = "textbox", name = "mypromptbox", align = "left" })

-- Create an iconbox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox = {}
for s = 1, screen.count() do
mylayoutbox[s] = widget({ type = "textbox", name = "mylayoutbox", align = "right" })
mylayoutbox[s]:mouse_add(mouse({ }, 1, function () awful.layout.inc(layouts, 1) end))
mylayoutbox[s]:mouse_add(mouse({ }, 3, function () awful.layout.inc(layouts, -1) end))
mylayoutbox[s]:mouse_add(mouse({ }, 4, function () awful.layout.inc(layouts, 1) end))
mylayoutbox[s]:mouse_add(mouse({ }, 5, function () awful.layout.inc(layouts, -1) end))
mylayoutbox[s].text = ""
end

-- Create a statusbar for each screen and add it
mystatusbar = {}
for s = 1, screen.count() do
mystatusbar[s] = statusbar({ position = "top", name = "mystatusbar" .. s,
fg = beautiful.fg_normal, bg = beautiful.bg_normal })
-- Add widgets to the statusbar - order matters
mystatusbar[s]:widgets ({
mytaglist,
mytasklist,
myiconbox,
mypromptbox,
mytextbox,
mylayoutbox[s],
s == 1 and mysystray or nil
})
mystatusbar[s].screen = s
end
-- }}}

-- {{{ Mouse bindings
awesome.mouse_add(mouse({ }, 3, function () awful.spawn(terminal) end))
awesome.mouse_add(mouse({ }, 4, awful.tag.viewnext))
awesome.mouse_add(mouse({ }, 5, awful.tag.viewprev))
-- }}}
-- {{{ Key bindings

-- Bind keyboard digits
-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screen.count() do
keynumber = math.min(9, math.max(#tags[s], keynumber));
end

for i = 1, keynumber do
keybinding({ modkey }, i,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end):add()
keybinding({ modkey, "Control" }, i,
function ()
local screen = mouse.screen
if tags[screen][i] then
tags[screen][i].selected = not tags[screen][i].selected
end
end):add()
keybinding({ modkey, "Shift" }, i,
function ()
local sel = client.focus
if sel then
if tags[sel.screen][i] then
awful.client.movetotag(tags[sel.screen][i])
end
end
end):add()
keybinding({ modkey, "Control", "Shift" }, i,
function ()
local sel = client.focus
if sel then
if tags[sel.screen][i] then
awful.client.toggletag(tags[sel.screen][i])
end
end
end):add()
end

keybinding({ modkey }, "Left", awful.tag.viewprev):add()
keybinding({ modkey }, "Right", awful.tag.viewnext):add()
keybinding({ modkey }, "Escape", awful.tag.history.restore):add()
--}}}

--{{{ Standard program
keybinding({ modkey }, "Return", function () awful.spawn(terminal) end):add()

keybinding({ modkey, "Control" }, "r", awesome.restart):add()
keybinding({ modkey, "Shift" }, "q", awesome.quit):add()

-- Client manipulation
keybinding({ modkey }, "m", awful.client.maximize):add()
keybinding({ modkey, "Shift" }, "c", function () client.focus:kill() end):add()
keybinding({ modkey }, "j", function () awful.client.focusbyidx(1); client.focus:raise() end):add()
keybinding({ modkey }, "k", function () awful.client.focusbyidx(-1); client.focus:raise() end):add()
keybinding({ modkey, "Shift" }, "j", function () awful.client.swap(1) end):add()
keybinding({ modkey, "Shift" }, "k", function () awful.client.swap(-1) end):add()
keybinding({ modkey, "Control" }, "j", function () awful.screen.focus(1) end):add()
keybinding({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end):add()
keybinding({ modkey, "Control" }, "space", awful.client.togglefloating):add()
keybinding({ modkey, "Control" }, "Return", function () client.focus:swap(awful.client.master()) end):add()
keybinding({ modkey }, "o", awful.client.movetoscreen):add()
keybinding({ modkey }, "Tab", awful.client.focus.history.previous):add()
keybinding({ modkey }, "u", awful.client.urgent.jumpto):add()
keybinding({ modkey, "Shift" }, "r", function () client.focus:redraw() end):add()

-- Layout manipulation
keybinding({ modkey }, "l", function () awful.tag.incmwfact(0.05) end):add()
keybinding({ modkey }, "h", function () awful.tag.incmwfact(-0.05) end):add()
keybinding({ modkey, "Shift" }, "h", function () awful.tag.incnmaster(1) end):add()
keybinding({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end):add()
keybinding({ modkey, "Control" }, "h", function () awful.tag.incncol(1) end):add()
keybinding({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end):add()
keybinding({ modkey }, "space", function () awful.layout.inc(layouts, 1) end):add()
keybinding({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end):add()

-- Prompt

keybinding({ modkey }, "F1", function ()
awful.prompt.run({ prompt = "Run: " }, mypromptbox, awful.spawn, awful.completion.bash,
os.getenv("HOME") .. "/.cache/awesome_history") end):add()
keybinding({ modkey }, "F4", function ()
awful.prompt.run({ prompt = "Run Lua code: " }, mypromptbox, awful.eval, awful.prompt.bash,
os.getenv("HOME") .. "/.cache/awesome_history_eval") end):add()
keybinding({ modkey, "Ctrl" }, "i", function ()
if mypromptbox.text then
mypromptbox.text = nil
else
mypromptbox.text = nil
if client.focus.class then
mypromptbox.text = "Class: " .. client.focus.class .. " "
end
if client.focus.instance then
mypromptbox.text = mypromptbox.text .. "Instance: ".. client.focus.instance .. " "
end
if client.focus.role then
mypromptbox.text = mypromptbox.text .. "Role: ".. client.focus.role
end
end
end):add()

-- Tabulous, tab manipulation
keybinding({ modkey, "Control" }, "y", function ()
local tabbedview = tabulous.tabindex_get()
local nextclient = awful.client.next(1)

if not tabbedview then
tabbedview = tabulous.tabindex_get(nextclient)

if not tabbedview then
tabbedview = tabulous.tab_create()
tabulous.tab(tabbedview, nextclient)
else
tabulous.tab(tabbedview, client.focus)
end
else
tabulous.tab(tabbedview, nextclient)
end
end):add()

keybinding({ modkey, "Shift" }, "y", tabulous.untab):add()

keybinding({ modkey }, "y", function ()
local tabbedview = tabulous.tabindex_get()

if tabbedview then
local n = tabulous.next(tabbedview)
tabulous.display(tabbedview, n)
end
end):add()

-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
keybinding({ modkey }, "t", awful.client.togglemarked):add()
keybinding({ modkey, 'Shift' }, "t", function ()
local tabbedview = tabulous.tabindex_get()
local clients = awful.client.getmarked()

if not tabbedview then
tabbedview = tabulous.tab_create(clients[1])
table.remove(clients, 1)

end

for k,c in pairs(clients) do
tabulous.tab(tabbedview, c)
end

end):add()

for i = 1, keynumber do
keybinding({ modkey, "Shift" }, "F" .. i,
function ()
local screen = mouse.screen
if tags[screen][i] then
for k, c in pairs(awful.client.getmarked()) do
awful.client.movetotag(tags[screen][i], c)
end
end
end):add()
end
-- }}}

-- {{{ Hooks
-- Hook function to execute when focusing a client.
function hook_focus(c)
if not awful.client.ismarked(c) then
c.border_color = beautiful.border_focus
end
end

-- Hook function to execute when unfocusing a client.
function hook_unfocus(c)
if not awful.client.ismarked(c) then
c.border_color = beautiful.border_normal
end
end

-- Hook function to execute when marking a client
function hook_marked(c)
c.border_color = beautiful.border_marked
end

-- Hook function to execute when unmarking a client
function hook_unmarked(c)
c.border_color = beautiful.border_focus
end

-- Hook function to execute when the mouse is over a client.
function hook_mouseover(c)
-- Sloppy focus, but disabled for magnifier layout
if awful.layout.get(c.screen) ~= "magnifier" then
client.focus = c
end
end

-- Hook function to execute when a new client appears.
function hook_manage(c)
-- Set floating placement to be smart!
c.floating_placement = "smart"
if use_titlebar then
-- Add a titlebar
awful.titlebar.add(c, { modkey = modkey })
end
-- Add mouse bindings
c:mouse_add(mouse({ }, 1, function (c) client.focus = c; c:raise() end))
c:mouse_add(mouse({ modkey }, 1, function (c) c:mouse_move() end))
c:mouse_add(mouse({ modkey }, 3, function (c) c:mouse_resize() end))
-- New client may not receive focus
-- if they're not focusable, so set border anyway.
c.border_width = beautiful.border_width
c.border_color = beautiful.border_normal
client.focus = c

-- Check if the application should be floating.
local cls = c.class
local inst = c.instance
if floatapps[cls] then
c.floating = floatapps[cls]
elseif floatapps[inst] then
c.floating = floatapps[inst]
end

-- Check application->screen/tag mappings.
local target
if apptags[cls] then
target = apptags[cls]
elseif apptags[inst] then
target = apptags[inst]
end
if target then
c.screen = target.screen
awful.client.movetotag(tags[target.screen][target.tag], c)
end

-- Honor size hints
c.honorsizehints = true
end

-- Hook function to execute when arranging the screen
-- (tag switch, new client, etc)
function hook_arrange(screen)
local layout = awful.layout.get(screen)
if layout then
mylayoutbox[screen].text =
""
else
mylayoutbox[screen].text = "No layout."
end

-- If no window has focus, give focus to the latest in history
if not client.focus then
local c = awful.client.focus.history.get(screen, 0)
if c then client.focus = c end
end

-- Uncomment if you want mouse warping
--[[
local sel = client.focus
if sel then
local c_c = sel:coords()
local m_c = mouse:coords()

if m_c.x < c_c.x or m_c.x >= c_c.x + c_c.width or
m_c.y < c_c.y or m_c.y >= c_c.y + c_c.height then
if table.maxn(m_c.buttons) == 0 then
mouse.coords ({ x = c_c.x + 5, y = c_c.y + 5})
end
end
end]]
end

-- Set up some hooks
awful.hooks.focus.register(hook_focus)
awful.hooks.unfocus.register(hook_unfocus)
awful.hooks.marked.register(hook_marked)
awful.hooks.unmarked.register(hook_unmarked)
awful.hooks.manage.register(hook_manage)
awful.hooks.mouseover.register(hook_mouseover)
awful.hooks.arrange.register(hook_arrange)

-- }}}
-- vim: set filetype=lua fdm=marker tabstop=4 shiftwidth=4 expandtab smarttab autoindent smartindent nu:

/home/arctica/.config/awesome/arctica.theme


---------------------------
-- arctica awesome theme --
---------------------------

font = sans 8

bg_normal = #111111
bg_focus = #228b22
bg_urgent = #000000

fg_normal = #ffffff
fg_focus = #000000
fg_urgent = #228b22

border_width = 1
border_normal = #111111
border_focus = #228b22
border_marked = #228b22

# There are another variables sets
# overriding the default one when
# defined, the sets are:
# [taglist|tasklist]_[bg|fg]_[focus|urgent]
# titlebar_[bg|fg]_[normal|focus]
# Example:
# taglist_bg_focus = #ff0000

# Display the taglist squares
taglist_squares = true

# You can add as many variables as
# you wish and access them by using
# beautiful.variable in your rc.lua
# bg_widget = #cc0000

# Display close button inside titlebar
titlebar_close_button = true

# Define the image to load
@ (if titlebar_close_button_[normal|focus] these values are ignored)
#titlebar_close_button_img_normal = /titlebar/closea.png
#titlebar_close_button_img_focus = /titlebar/closera.png
# Or create your own close button
#titlebar_close_button_normal = ...
#titlebar_close_button_focus = ...

# You can use your own command to set your wallpaper
#wallpaper_cmd = awsetbg /usr/local/share/awesome/themes/default-background.png
wallpaper_cmd = feh --bg-scale /home/arctica/fondos/gato.jpg

aquí mi .Xdefaults (no forma parte de la configuración de awesome, pero siempre lo pongo a juego con el tema que tenga mi awesome en ese momento xD)


xft.antialias: true
!URxvt - setting
URxvt*background: #000000
URxvt*foreground: #ffffff
URxvt*scrollBar: false
URxvt*font: xft:Bitstream Vera Sans Mono:size=8
!URxvt*boldFont: xft:Terminus:size=10
!URxvt*font: xft:Terminus:size=10
URxvt*inheritPixmap: true
URxvt*termName: rxvt
!URxvt*transparent: true
URxvt*tintColor: #6b8e23
URxvt*shading: 100
URxvt*urlLauncher: firefox

Imagen de aBuSiViTo
Enviado por aBuSiViTo el 9 Junio, 2009 - 03:59.

Y nunca probaste, por ejemplo, ion3??

Desde hace mucho tiempo he querido probarlo, incluso antes de registrarme en esDebian.

Pero entre la campanha de migracion y el estudio no me da para eso ahora... tal vez luego...

No te llama la atencion ion3? o ya lo has probado? y si es asi: cual es tu impresion?

En un principio yo intente utilizar tan solo Bash + Screen... perooo me perdi xD!!

Saludos

Imagen de arctica
Enviado por arctica el 9 Junio, 2009 - 12:38.

Pues sí, al principio. Cuando estuve leyendo acerca de todo esto de los gestores tiling. Pero me echó para atrás el hecho de que tuviese una licencia un poco, digamos, "especial". Ahora no sé si la seguirá teniendo, ya le perdí la pista xD
Pero el que sabe de ion3 aquí es sebas xDD

edito: aquí lo de la licencia http://bbs.archlinux.org/viewtopic.php?id=43864

No es que yo sea una talibana del software libre ni muchísimo menos, pero no sé... desde que leí eso ya dejó de atraerme xD

Imagen de arctica
Enviado por arctica el 9 Junio, 2009 - 13:28.

http://packages.debian.org/search?suite=lenny&searchon=names&keywords=io...

Tampoco hacía falta remitirnos a fuentes externas, Debian lo tienen en non-free xDD

Imagen de minaya
Enviado por minaya el 9 Junio, 2009 - 14:40.
arctica escribió:

Pues sí, al principio. Cuando estuve leyendo acerca de todo esto de los gestores tiling. Pero me echó para atrás el hecho de que tuviese una licencia un poco, digamos, "especial". Ahora no sé si la seguirá teniendo, ya le perdí la pista xD
Pero el que sabe de ion3 aquí es sebas xDD

edito: aquí lo de la licencia http://bbs.archlinux.org/viewtopic.php?id=43864

A mí me lo comentó Sebas, y entonces fue cuando me leí esto: http://modeemi.fi/~tuomov/ion/news/Down_with_the_distros.html y http://www.gwolf.org/blog/awesome . Tenía noticias sobre que el desarrollador estaba un poco mosca con como se distribuía, pero no sabía que llegase a ese punto.

Quizás es que sí que sea algo talibán después de todo, o que simplemente, teniendo soluciones excelentes y totalmente libres, buena gana de usar un producto poco dado a evolucionar (por el tipo de licencia) y que goza de una reputación tan mala entre distribuidores.

Imagen de aBuSiViTo
Enviado por aBuSiViTo el 9 Junio, 2009 - 16:08.
minaya escribió:
arctica escribió:

Pues sí, al principio. Cuando estuve leyendo acerca de todo esto de los gestores tiling. Pero me echó para atrás el hecho de que tuviese una licencia un poco, digamos, "especial". Ahora no sé si la seguirá teniendo, ya le perdí la pista xD
Pero el que sabe de ion3 aquí es sebas xDD

edito: aquí lo de la licencia http://bbs.archlinux.org/viewtopic.php?id=43864

A mí me lo comentó Sebas, y entonces fue cuando me leí esto: http://modeemi.fi/~tuomov/ion/news/Down_with_the_distros.html y http://www.gwolf.org/blog/awesome . Tenía noticias sobre que el desarrollador estaba un poco mosca con como se distribuía, pero no sabía que llegase a ese punto.

Quizás es que sí que sea algo talibán después de todo, o que simplemente, teniendo soluciones excelentes y totalmente libres, buena gana de usar un producto poco dado a evolucionar (por el tipo de licencia) y que goza de una reputación tan mala entre distribuidores.

No se si se podra... alguno me pudiese alcanzar la informacion acerca del desarrollador de ion3?? es decir, no puedo entrar a esas paginas... ya saben... shamed shamed shamed shamed

Si se puede, claro esta :D

Saludos!