Ion2

Aus Linupedia.org
Wechseln zu: Navigation, Suche
Ion2
Ion-Fenstermanager.png.png
Ion2 Screenshot
Basisdaten
Entwickler: Tuomo Valkonen
Aktuelle Version: Ion-2-20040729
letzte Veröffentlichung: 27. September 2007
Betriebssystem: Linux, BSD, Unix
Kategorie: Windowmanager
Lizenz: LGPL
Deutschsprachig:
Webseite: Ion Webseite
Diese Beschreibung wurde mit folgenden Distributionen getestet:


Info

Der Ion Fenster.- oder Windowsmanager ist der Nachvolger vom PWM Fenstermanager. Er läuft unter dem X11 System, ist extrem klein, schlank und schnell (Ressourcenschonend). Das besondere an Ion ist das sich alle geöffneten Fenster niemals überlappen. Dies heisst das alle geöffneten Fenster zu jeder Zeit sichtbar sind. Funktionieren tut die ganze Sache mit Hilfe eines Areals in welchem ein Fenster oder auch mehrere geöffnet werden können. Der gesamte Bildschirm wird unter den Areals oder auch Frames genannt aufgeteilt. Sind in einem Areal mehrere Fenster geöffnet, so bekommt hier jedes seine eigene Registerreiter ueber welche es angewählt werden kann. Im Screenshot neben an sind derzeit 4 Areals (Frames) zu sehen, in jedem ist die Konsole-Eterm und in ihr ein Programm gestartet. Diese gestartete Anwendung (Eterm/Programm) sind in einem Fenster untergebracht welches einen Registerreiter hat.


Alternativen

Als Alternative zu Ion gibt es vollgende andere Fenstermanager:

  • LarsWM
  • Ratpoison
  • StumpWM
  • WMI
  • WMII
  • TrsWM
  • DWM


Funktionstasten

In der Regel sind die Funktionstasten bei Ion vollgendermaßen bestückt:

  • F1 - Die Manpages anzeigen
  • F2 - Ein eues Terminal
  • F3 - Ein Programme starten
  • F4 - Eine SSH-Verbindung herstellen
  • F5 - Datei editieren
  • F6 - Datei anzeigen
  • F9 - Erstellen einer neuen Arbeitsfläche (Areal/Frame)
  • F12 - Das Hauptmenü


  • ALT + S - Eine Area oder Frame vertikal splitten
  • ALT + KS - Eine Area oder Frame horizontal splitten


Installation

Debian

Wie immer gestaltet sich die Installation unter Debian recht einfach mit Hilfe von APT.

apt-get update
apt-get install ion2

Konfigurationsdateien

Sämtliche Konfigurationsdateien welche Systemweit für alle Benutzer gelten sind in der Regel unter /etc/X11/ion2 zu finden. Wer seinen Ion nicht Systemweit für alle gleich sondern für jeden Benutzer anderst konfigurieren möchte kann hierzu die entsprechenden Konfigurationsdateien im /home/ ~ /.ion2 Verzeichniss anlegen.

Die wohl wichtigsten zwei der Konfigurationsdateien sind:

  • ion-bindings.lua
  • ion-menus.lua

Mit Hilfe der ersten ist es uns möglich die F--Tasten 1-12 entsprechend anderst zu belegen und unseren Wünschen anzupassen. In der hier zweitgenannten wird zum Beispiel das Menü welches wir mit F12 erhalten konfiguriert.


F-Tasten

Die Funktion der F-Tasten ist eigentlich gar nicht mal so schlecht, doch leider bei manchen Anwendungen welche selbst die F-Tasten benötigen extrem störend. zum Beispiel wird beim Arbeiten im MC das Betätigen der F-Tasten die Funktion vom Ion und nicht vom MC selbst ausführen. Drücke ich z.B. F-5 so wird die Option von Ion für das Editieren geöffnet anstelle die Option im MC für das Kopieren einer Datei. Wie können wir das Problem am einfachsten lösen. Ganz einfach, wir entfernen die Funktionen aus der entsprechenden Konfigurationsdatet so, das die F--Tasten von F1--10 keine Funktion mehr in Ion beim drücken haben. Das aufrufen des Menüs lassen wir weiterhin auf der F12 Taste liegen, zudem belegen wir die Taste F11 mit dem öffnen einer neuen Konsole. In dem von mir hier gezeigten Beispiel ist es allerdings das Eterm Terminal in Transparenter Form mit einem dafür gewählten Wallpaper. Die also bitte entsprechend anpassen.


Konfiguration


F-Tasten

Die vollgende Datei entsprechend editieren: /etc/X11/ion2/ion-bindings.lua Fuer eine nicht Systemweite Konfiguration muss die Datei in /home/< user >/.ion2 konfiguriert werden.


-- Nicht aktieve Zeilen werden so geschrieben
-- anstelle der Rauten # wie man es heufig findet. 

-- 
-- Ion bindings configuration file. Global bindings and bindings common 
-- to screens and all types of frames only. See modules' configuration 
-- files for other bindings.
--

-- Load a library to create common queries.
include("querylib")
-- Load a library to create menu display callbacks.
include("menulib")


-- global_bindings
--
-- Global bindings are available all the time. The functions given here 
-- should accept WScreens as parameter. 
--
-- The variable DEFAULT_MOD should contain a string of the form 'Mod1+'
-- where Mod1 maybe replaced with the modifier you want to use for most
-- of the bindings. Similarly SECOND_MOD may be redefined to add a 
-- modifier to some of the F-key bindings.

global_bindings{
    kpress(DEFAULT_MOD.."1", function(s) s:switch_nth(0) end),
    kpress(DEFAULT_MOD.."2", function(s) s:switch_nth(1) end),
    kpress(DEFAULT_MOD.."3", function(s) s:switch_nth(2) end),
    kpress(DEFAULT_MOD.."4", function(s) s:switch_nth(3) end),
    kpress(DEFAULT_MOD.."5", function(s) s:switch_nth(4) end),
    kpress(DEFAULT_MOD.."6", function(s) s:switch_nth(5) end),
    kpress(DEFAULT_MOD.."7", function(s) s:switch_nth(6) end),
    kpress(DEFAULT_MOD.."8", function(s) s:switch_nth(7) end),
    kpress(DEFAULT_MOD.."9", function(s) s:switch_nth(8) end),
    kpress(DEFAULT_MOD.."0", function(s) s:switch_nth(9) end),
    kpress(DEFAULT_MOD.."Left", WScreen.switch_prev),
    kpress(DEFAULT_MOD.."Right", WScreen.switch_next),
    
    submap(DEFAULT_MOD.."K", {
        kpress("AnyModifier+K", goto_previous),
        kpress("AnyModifier+T", clear_tags),
    }),
    
    kpress(DEFAULT_MOD.."Shift+1", function() goto_nth_screen(0) end),
    kpress(DEFAULT_MOD.."Shift+2", function() goto_nth_screen(1) end),
    kpress(DEFAULT_MOD.."Shift+Left", goto_next_screen),
    kpress(DEFAULT_MOD.."Shift+Right", goto_prev_screen),
    
--    kpress(DEFAULT_MOD.."F1", function(scr)
--                                 -- Display Ion's manual page
--                                  local m=lookup_script("ion-man")
--                                  if m then
--                                      exec_in(scr, m.." ion2")
--                                  end
--                              end),
    kpress(SECOND_MOD.."F11", make_exec_fn("Eterm --trans=true --scrollbar=false --buttonbar=false -f white --cmod 257 -c white | Esetroot /home/tobi/wallpaper/bild.jpg")),

--    kpress(SECOND_MOD.."F11", make_exec_fn("konsole")),

    
    -- Create a new workspace with a default name.
--    kpress(DEFAULT_MOD.."F9", 
--           function(scr)
--               scr:attach_new({ type=default_ws_type, switchto=true })
--           end),

    -- Menus/queries

    -- KEYF11 and KEYF12 are normally defined to be the strings "F11" 
    -- and "F12", respectively, but on SunOS, they're something  else 
    -- (although the keys on the keyboard are the same).
    kpress(SECOND_MOD..KEYF12, make_bigmenu_fn("mainmenu")),
    mpress("Button2", make_pmenu_fn("windowlist")),
    mpress("Button3", make_pmenu_fn("mainmenu")),
    
    --kpress(DEFAULT_MOD.."Menu", make_bigmenu_fn("mainmenu")),
    --kpress(SECOND_MOD..KEYF11, querylib.query_restart),
    --kpress(SECOND_MOD..KEYF12, querylib.query_exit),
}


-- mplex_bindings
--
-- These bindings work in frames and on screens. The innermost of such
-- objects always gets to handle the key press. Essentially these bindings
-- are used to define actions on client windows. (Remember that client
-- windows can be put in fullscreen mode and therefore may not have a
-- frame.)
-- 
-- The make_*_fn functions are used to call functions on the object currently 
-- managed by the screen or frame or the frame itself. Essentially e.g.
-- make_mplex_clientwin_fn(fn) expands to
-- 
-- function(mplex, sub)
--     local reg=(sub or mplex:current())
--     if obj_is(reg, "WClientWin") then 
--         fn(reg)
--     end
-- end
-- 
-- For details see the document "Ion: Configuring and extending with Lua".

mplex_bindings{
    kpress_waitrel(DEFAULT_MOD.."C", WMPlex.close_sub_or_self),
    kpress_waitrel(DEFAULT_MOD.."L", 
                   make_mplex_clientwin_fn(WClientWin.broken_app_resize_kludge)),
    kpress_waitrel(DEFAULT_MOD.."Return", 
                   make_mplex_clientwin_fn(WClientWin.toggle_fullscreen)),

    submap(DEFAULT_MOD.."K", {
        kpress("AnyModifier+C",
               make_mplex_clientwin_fn(WClientWin.kill)),
        kpress("AnyModifier+Q", 
               make_mplex_clientwin_fn(WClientWin.quote_next)),
    }),
}


-- genframe_bindings
--
-- These bindings are common to all types of frames. The rest of frame
-- bindings that differ between frame types are defined in the modules' 
-- configuration files.

genframe_bindings{
    -- Tag viewed object
    kpress(DEFAULT_MOD.."T", make_mplex_sub_fn(WRegion.toggle_tag)),

    submap(DEFAULT_MOD.."K", {
        -- Selected object/tab switching
        kpress("AnyModifier+N", WGenFrame.switch_next),
        kpress("AnyModifier+P", WGenFrame.switch_prev),
        kpress("AnyModifier+1", function(f) f:switch_nth(0) end),
        kpress("AnyModifier+2", function(f) f:switch_nth(1) end),
        kpress("AnyModifier+3", function(f) f:switch_nth(2) end),
        kpress("AnyModifier+4", function(f) f:switch_nth(3) end),
        kpress("AnyModifier+5", function(f) f:switch_nth(4) end),
        kpress("AnyModifier+6", function(f) f:switch_nth(5) end),
        kpress("AnyModifier+7", function(f) f:switch_nth(6) end),
        kpress("AnyModifier+8", function(f) f:switch_nth(7) end),
        kpress("AnyModifier+9", function(f) f:switch_nth(8) end),
        kpress("AnyModifier+0", function(f) f:switch_nth(9) end),
        -- Maximize
        kpress("AnyModifier+H", WGenFrame.maximize_horiz),
        kpress("AnyModifier+V", WGenFrame.maximize_vert),
        -- Attach tagged objects
        kpress("AnyModifier+A", WGenFrame.attach_tagged),
    }),
    
    -- Queries
--    kpress(DEFAULT_MOD.."A", querylib.query_attachclient),
--    kpress(DEFAULT_MOD.."G", querylib.query_gotoclient),
--    kpress(SECOND_MOD.."F1", querylib.query_man),
--    kpress(SECOND_MOD.."F3", querylib.query_exec),
--    kpress(DEFAULT_MOD.."F3", querylib.query_lua),
--    kpress(SECOND_MOD.."F4", querylib.query_ssh),
--    kpress(SECOND_MOD.."F5", querylib.query_editfile),
--    kpress(SECOND_MOD.."F6", querylib.query_runfile),
--    kpress(SECOND_MOD.."F9", querylib.query_workspace),
    -- Menus
    kpress(DEFAULT_MOD.."M", make_menu_fn("ctxmenu")),
    mpress("Button3", make_pmenu_fn("ctxmenu"), "tab"),
}


Menü

In der Konfigurationsdatei für das Menü habe ich in diesem Beispiel wie auch schon im oberen Xterm durch das von mir verwendete transparente Eterm mit Wallpaper ersezt. /etc/X11/ion2/ion-menus.lua Fuer eine nicht Systemweite Konfiguration muss die Datei in /home/< user >/.ion2 konfiguriert werden.


-- Nicht aktieve Zeilen werden so geschrieben
-- anstelle der Rauten # wie man es heufig findet. 

include("menulib")
include("querylib")

defmenu("mainmenu", {
    submenu("Programs", "appmenu"),
    menuentry("Lock screen", function(reg)
                                 exec_in(reg, lookup_script("ion-lock"))
                             end),
    menuentry("Help", querylib.query_man),
    menuentry("About Ion", querylib.show_aboutmsg),
    submenu("Styles", "stylemenu"),
    submenu("Debian", "Debian"),
    submenu("Exit", "exitmenu"),
})

defmenu("appmenu", {
    menuentry("Terminal", make_exec_fn("Eterm --trans=true --scrollbar=false --buttonbar=false -f white --cmod 257 -c white | Esetroot /home/tobi/wallpaper/bild.jpg")),
    menuentry("Browser", make_exec_fn("firefox")),
    -- The query module must also be loaded for this binding to work.
    menuentry("Run...", querylib.query_exec),
})

defmenu("exitmenu", {
    menuentry("Restart", restart_wm),
    menuentry("Restart PWM2", function() restart_other_wm("pwm2") end),
    menuentry("Restart TWM", function() restart_other_wm("twm") end),
    menuentry("Exit", exit_wm),
})


defmenu("ctxmenu", {
    menuentry("Close", WMPlex.close_sub_or_self),
    menuentry("Kill", make_mplex_clientwin_fn(WClientWin.kill)),
    menuentry("(Un)tag", make_mplex_sub_fn(WRegion.toggle_tag)),
    menuentry("Attach tagged", WGenFrame.attach_tagged),
    menuentry("Clear tags", clear_tags),
})


defmenu("ctxmenu-floatframe", {
    menuentry("Close", WMPlex.close_sub_or_self),
    menuentry("Kill", make_mplex_clientwin_fn(WClientWin.kill)),
    menuentry("(Un)tag", make_mplex_sub_fn(WRegion.toggle_tag)),
    menuentry("Attach tagged", WGenFrame.attach_tagged),
    menuentry("Clear tags", clear_tags),
    menuentry("(Un)stick", function(f) f:toggle_sticky() end),
})

if os.execute("test -x /usr/bin/update-menus") == 0 then
    if ioncore_is_i18n() then
        include("debian-menu-i18n")
    else
        include("debian-menu")
    end
end


Links




zurück zum Desktop