]> git.pld-linux.org Git - packages/awesome-plugin-eminent.git/commitdiff
- initial master
authorZsolt Udvari <uzsolt@pld-linux.org>
Thu, 10 Feb 2011 23:26:12 +0000 (23:26 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    README -> 1.1
    awesome-plugin-eminent.spec -> 1.1
    eminent.lua -> 1.1

README [new file with mode: 0644]
awesome-plugin-eminent.spec [new file with mode: 0644]
eminent.lua [new file with mode: 0644]

diff --git a/README b/README
new file mode 100644 (file)
index 0000000..59f38ec
--- /dev/null
+++ b/README
@@ -0,0 +1,25 @@
+Eminent is a small lua library that monkey-patches awful to provide you with 
+effortless and quick wmii-style dynamic tagging. Unlike shifty, eminent does 
+not aim to provide a comprehensive tagging system, but tries to make dynamic 
+tagging as simple as possible. In fact, besides importing the eminent library, 
+you do not have to change your rc.lua at all, eminent does all the work for you.
+
+
+Setting Up Eminent
+
+Setting up eminent is as simple as adding require("eminent") to the top of your 
+rc.lua, after including awful.
+You don't need to change anything else in your rc.lua. If something does go 
+wrong (awesome is so versatile one can't possible test every setup), don't 
+hesitate to send an email to lucas@glacicle.org with your bug report.
+
+
+Using Eminent
+
+Use your awesome installation the same way you always did. You'll notice that 
+any tags that have no clients on them are automatically hidden. Moving to the 
+next tag after the last one will "create" (either re-use an existing but empty 
+tag or actually create a new one dynamically) a new tag for you to use.
+If you have any bindings set up on your number keys you should be able to use 
+those to jump to a specific tag irregardless of what eminent thinks.
+Happy tagging !
diff --git a/awesome-plugin-eminent.spec b/awesome-plugin-eminent.spec
new file mode 100644 (file)
index 0000000..383f4dc
--- /dev/null
@@ -0,0 +1,38 @@
+%define        shortname       eminent
+Summary:       Quick wmii-style dynamic tagging
+Name:          awesome-plugin-%{shortname}
+Version:       20101006
+Release:       1
+License:       GPL v2
+Group:         X11/Window Managers/Tools
+Source0:       eminent.lua
+URL:           https://awesome.naquadah.org/wiki/Eminent
+Requires:      awesome >= 3.4
+Source1:       README
+BuildArch:     noarch
+BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+Eminent is a small lua library that monkey-patches awful to provide
+you with effortless and quick wmii-style dynamic tagging. Unlike
+shifty, eminent does not aim to provide a comprehensive tagging
+system, but tries to make dynamic tagging as simple as possible. In
+fact, besides importing the eminent library, you do not have to change
+your rc.lua at all, eminent does all the work for you.
+
+%prep
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT%{_datadir}/awesome/lib/%{shortname}
+install %{SOURCE0} $RPM_BUILD_ROOT%{_datadir}/awesome/lib/%{shortname}
+install -d $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
+install %{SOURCE1} $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%doc %{_docdir}/%{name}-%{version}
+%{_datadir}/awesome/lib/%{shortname}
diff --git a/eminent.lua b/eminent.lua
new file mode 100644 (file)
index 0000000..3eda195
--- /dev/null
@@ -0,0 +1,125 @@
+----------------------------------------------------------------
+-- Effortless wmii-style dynamic tagging.
+----------------------------------------------------------------
+-- Lucas de Vries <lucas@glacicle.org>
+-- Licensed under the WTFPL version 2
+--   * http://sam.zoy.org/wtfpl/COPYING
+----------------------------------------------------------------
+-- To use this module add:
+--   require("eminent")
+-- to the top of your rc.lua. 
+--
+-- That's it. Through magical monkey-patching, all you need to
+-- do to start dynamic tagging is loading it.
+--
+-- Use awesome like you normally would, you don't need to
+-- change a thing.
+----------------------------------------------------------------
+
+-- Grab environment
+local ipairs = ipairs
+local pairs = pairs
+local awful = require("awful")
+local table = table
+local capi = {
+    tag = tag,
+    mouse = mouse,
+    client = client,
+    screen = screen,
+    wibox = wibox,
+    timer = timer,
+    keygrabber = keygrabber,
+}
+
+-- Eminent: Effortless wmii-style dynamic tagging
+module("eminent")
+
+-- Grab the original functions we're replacing
+local deflayout = nil
+local orig = {
+    new = awful.tag.new,
+    viewidx = awful.tag.viewidx,
+
+    taglist = awful.widget.taglist.new,
+    label = awful.widget.taglist.label.all,
+}
+
+-- Return tags with stuff on them, mark others hidden
+function gettags(screen)
+    local tags = {}
+
+    for k, t in ipairs(capi.screen[screen]:tags()) do
+        if t.selected or #t:clients() > 0 then
+            awful.tag.setproperty(t, "hide", false)
+            table.insert(tags, t)
+        else
+            awful.tag.setproperty(t, "hide", true)
+        end
+    end
+
+    return tags
+end
+
+-- Pre-create tags
+awful.tag.new = function (names, screen, layout)
+    deflayout = layout and layout[1] or layout
+    return orig.new(names, screen, layout)
+end
+
+-- View tag by relative index
+awful.tag.viewidx = function (i, screen)
+    -- Hide tags
+    local s = screen and screen.index or capi.mouse.screen
+    local ctags = capi.screen[s]:tags()
+    local tags = gettags(s)
+    local sel = awful.tag.selected()
+
+    -- Check if we should "create" a new tag
+    local selidx = awful.util.table.hasitem(tags, sel)
+    local tagidx = awful.util.table.hasitem(ctags, sel)
+
+    -- Create a new tag if needed
+    if selidx == #tags and i == 1 and #sel:clients() > 0 then
+        -- Deselect all
+        awful.tag.viewnone(s)
+
+        if #ctags >= tagidx+1 then
+            -- Focus next
+            ctags[tagidx+1].selected = true
+        else
+            -- Create new
+            local tag = capi.tag { name = ""..(tagidx+1) }
+            tag.screen = s
+            tag.selected = true
+            awful.tag.setproperty(tag, "layout", deflayout)
+        end
+    else
+        -- Call original
+        orig.viewidx(i, screen)
+    end
+end
+
+-- Taglist label functions
+awful.widget.taglist.label.all = function (t, args)
+    if t.selected or #t:clients() > 0 then
+        return orig.label(t, args)
+    end
+end
+
+
+-- Update hidden status
+local function uc(c) gettags(c.screen) end
+local function ut(s, t) gettags(s.index) end
+
+capi.client.add_signal("unmanage", uc)
+capi.client.add_signal("new", function(c)
+    c:add_signal("property::screen", uc)
+    c:add_signal("tagged", uc)
+    c:add_signal("untagged", uc)
+end)
+
+for screen=1, capi.screen.count() do
+    awful.tag.attached_add_signal(screen, "property::selected", uc)
+    capi.screen[screen]:add_signal("tag::attach", ut)
+    capi.screen[screen]:add_signal("tag::detach", ut)
+end
This page took 0.100142 seconds and 4 git commands to generate.