unexist.dev: Newshttp://subtle.de/http://subtle.de/favicon.ico?15154402992024-03-15T11:30:18Zunexist.dev
Redmine subtle - Long hibernationhttp://subtle.de/news/552024-03-15T11:30:18ZChristoph Kappelchristoph@unexist.dev
<p>This project had a rather long hibernation, due to the fact that I was kind of forced to switch to mac work-wise and hadn't had any other personal machine.</p>
<p>This changed recently and behold - I am back on subtle and enjoy every second on it!</p>
<p>Since a lot has changed when I started this project there are going to some changes of the code-style and some overdues fixes for e.g. compatibility to upstream Ruby versions. I already fixed sur/surserver and sublets can be fetched again.</p>
<p>So stay tuned!</p> subtle - Server and redminehttp://subtle.de/news/542018-01-20T15:20:27ZChristoph Kappelchristoph@unexist.dev
<p>It was about time to update all the stuff here and while doing that I also moved it to a different server.</p>
<p>The overall process was a bit bothersome, since most of the software used including redmine was fairly outdated and migration of database entries is usually a mess and after a bit of a struggle I manually copied the data.</p>
<p>So far everything is looking good, just some minor notes:</p>
<ul>
<li>Password hashing changed and you have to reset your password in order to log in</li>
<li>FAQ is missing and will probably be replaced by a simple wiki page</li>
<li>Layout is a bit weird - porting changes is always fun</li>
</ul>
<p>If there are any problems just let me know.</p> subtle - Necromancyhttp://subtle.de/news/532017-12-19T09:41:46ZChristoph Kappelchristoph@unexist.dev
<p>Well, looks like I couldn't keep the promise of the last news, but I recently found some time and joy to tinker with subtle again. There are still some things I'd like to change, but never nagged me enough to get my hands dirty again.</p>
<p>Apart from that, there are some uncommited changes like the virtual screen handling code and a bit overhaul of the panel configuration.</p>
<p>I've already added a new hook (<a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Hooks#client_rename">client_rename</a>) to make tagging of clients easier: <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">Tagging</a> is mostly based on client WM_NAME / WM_CLASS properties and some clients like Spotify tend to set or change them after the first mapping. Hooks to the rescue: This hook fires, when the WM_NAME property changes and can be used to trigger a re-tagging.</p> subtle - subtle isn't dead yet!http://subtle.de/news/522013-08-28T12:37:52ZChristoph Kappelchristoph@unexist.dev
<p>Hey,</p>
<p>if anyone noticed, I couldn't make it to this year's FrOSCon, I rather spent the time sick in bed, so I hope you enjoyed it even without a <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Subtle">subtle</a> booth.</p>
<p>I took quite a long break from development, toying around with some Android ideas and dealing with some nasty project deadlines. Nevertheless, the project <strong>isn't</strong> dead yet, I actively use it daily and I am still very pleased and still want to go on.</p>
<p>There are some features that currently aren't pushed like virtual screen splitting, but I am eager to make them available once I finished the styling thing I have in my mind.</p>
<p>So be patient with me.</p> subtle - Spawn now belongs to Subtlext::Clienthttp://subtle.de/news/512012-11-14T15:21:56ZChristoph Kappelchristoph@unexist.dev
<p><strong>TL;DR</strong>: I moved the .spawn method to the <a href="http://rdoc.subforge.org/subtle/classes/Subtlext/Client.html" class="external">clients module</a> so update <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Subtle">subtle</a> <strong>AND</strong> <a class="wiki-page" href="http://subtle.de/projects/subtle-contrib/wiki/Wiki">subtle-contrib</a></p>
<p>Previously the .spawn method belonged to <a href="http://rdoc.subforge.org/subtle/classes/Subtlext/Subtle.html" class="external">Subtlext::Subtle</a>, which was fine until I changed it to return a valid <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Clients">client</a> object that is backed with some light event caching to make it useful for e.g. the <a class="wiki-page" href="http://subtle.de/projects/subtle-contrib/wiki/Launcher">launcher</a>. Since it returns a real object I think it should belong to Subtlext::Client, end of story.</p>
<p><strong>Edit</strong>: This change also breaks the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Snippets#Scratchpad">scratchpad</a> snippet, so make sure to change <em>Subtlext::Subtle.spawn</em> to <em>Subtlext::Client.spawn</em> in your config.</p> subtle - Tags with logichttp://subtle.de/news/502012-05-23T00:42:37ZChristoph Kappelchristoph@unexist.dev
<p>Sometimes it can be pretty nasty to add <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">tags</a>, when you just need something stupid to move a certain window to a <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Views">view</a>. That can be done with a loop, but that also adds lots of <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">tags</a> and there cannot be more than 32 of them.</p>
<p>An easy way to bypass this is to add logic to <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">tags</a> and act differently for certain <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Clients">clients</a>. The latest version of <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Subtle">subtle</a> extends the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging#Properties">properties</a> with <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging#On_match">on_match</a>. This can be used to add a <a href="http://ruby-lang.org" class="external">Ruby</a> proc to a <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">tag</a> that is called whenever the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">tag</a> is applied.</p>
<p>The <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging#On_match">tagging page</a> already contains a simple example, here is a more complex one that I use in my config to <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Tagging">tag</a> <a href="http://gimp.org" class="external">GIMP</a> windows:</p>
<p><table class="column" cellspacing="0" cellpadding="0"></tr><td style="vertical-align: top;"><br />Old way:</p>
<pre><code class="ruby syntaxhl"><span class="CodeRay">tag <span class="string"><span class="delimiter">"</span><span class="content">gimp_image</span><span class="delimiter">"</span></span> <span class="keyword">do</span>
match <span class="key">role</span>: <span class="string"><span class="delimiter">"</span><span class="content">gimp-image-window</span><span class="delimiter">"</span></span>
gravity <span class="symbol">:gimp_image</span>
<span class="keyword">end</span>
tag <span class="string"><span class="delimiter">"</span><span class="content">gimp_toolbox</span><span class="delimiter">"</span></span> <span class="keyword">do</span>
match <span class="key">role</span>: <span class="string"><span class="delimiter">"</span><span class="content">gimp-toolbox$</span><span class="delimiter">"</span></span>
gravity <span class="symbol">:gimp_toolbox</span>
<span class="keyword">end</span>
tag <span class="string"><span class="delimiter">"</span><span class="content">gimp_dock</span><span class="delimiter">"</span></span> <span class="keyword">do</span>
match <span class="key">role</span>: <span class="string"><span class="delimiter">"</span><span class="content">gimp-dock</span><span class="delimiter">"</span></span>
gravity <span class="symbol">:gimp_dock</span>
<span class="keyword">end</span>
tag <span class="string"><span class="delimiter">"</span><span class="content">gimp_scum</span><span class="delimiter">"</span></span> <span class="keyword">do</span>
match <span class="key">role</span>: <span class="string"><span class="delimiter">"</span><span class="content">gimp-.*|screenshot</span><span class="delimiter">"</span></span>
<span class="keyword">end</span></span></code></pre>
<p></td><td style="vertical-align: top;"><br />New way:</p>
<pre><code class="ruby syntaxhl"><span class="CodeRay">tag <span class="string"><span class="delimiter">"</span><span class="content">gimp</span><span class="delimiter">"</span></span> <span class="keyword">do</span>
match <span class="key">role</span>: <span class="string"><span class="delimiter">"</span><span class="content">gimp-.*</span><span class="delimiter">"</span></span>
on_match <span class="keyword">do</span> |c|
c.gravity = (<span class="string"><span class="delimiter">"</span><span class="content">gimp_</span><span class="delimiter">"</span></span> + c.role.split(<span class="string"><span class="delimiter">"</span><span class="content">-</span><span class="delimiter">"</span></span>)[<span class="integer">1</span>]).to_sym
<span class="keyword">end</span>
<span class="keyword">end</span></span></code></pre>
<p></td></tr></table></p>
<p>Both basically just sets the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Gravity">gravity</a> of the matching <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Clients">client</a>.</p> subtle - Visit us at the OpenRheinRuhrhttp://subtle.de/news/492011-11-06T19:09:20ZChristoph Kappelchristoph@unexist.dev
<p>When you are located in Germany, live close to Oberhausen and have some spare time this weekend (12/13.11) visit us at our booth at the <a href="http://openrheinruhr.de/" class="external">OpenRheinRuhr</a>.</p> subtle - Finder in subtlexthttp://subtle.de/news/482011-11-06T19:02:03ZChristoph Kappelchristoph@unexist.dev
<p>Finder in <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Subtlext">subtlext</a> are used to select different kind of objects like one <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Clients">client</a> or more <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Clients">clients</a> based on different matching options. With the changes in <a class="changeset" title="Closed #262: Updated due to changes of #find" href="http://subtle.de/projects/subtle/repository/revisions/3104">r3104</a>, #find and #[] <strong>always</strong> return an <a href="http://ruby-doc.org/core-1.9.3/Array.html" class="external">array</a> <em>regardless</em> whether an object was found or not. If you need just one result use #first instead.</p>
<p>{{info(The changes require an update of <a class="wiki-page" href="http://subtle.de/projects/subtle-contrib/wiki/Wiki">subtle-contrib</a> and the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Snippets#Scratchpad">scratchpad snippet</a>)}}</p> subtle - Separator and styles revampedhttp://subtle.de/news/472011-11-04T22:08:31ZChristoph Kappelchristoph@unexist.dev
<p>According to my plan, to combine styling options ultimately in the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles">styles</a> it is now time to move the separator. A nice side effect, is that this allows different separators for <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles#Views">views</a>, <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles#Sublets">sublets</a> and the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Panel">panel</a> in case you ever wanted to do that.</p>
<p>Another change is the removal of the unoccupied style, it made no sense at all, TBH. Unoccupied <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Views">views</a> are just <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Views">views</a> and this is probably not worth a special state. Just make sure to think twice what values are inherited now and which one you need to overwrite. (Joy of inheritance)</p>
<p><strong>TL;DR</strong>: You need to update your config, again. Move the separator config option to the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles#Separator">separator style</a> like this:</p>
<p>{{column(:start)}}</p>
<pre><code class="ruby syntaxhl"><span class="CodeRay"><span class="comment"># Separator between sublets</span>
set <span class="symbol">:separator</span>, <span class="string"><span class="delimiter">"</span><span class="content">|</span><span class="delimiter">"</span></span>
<span class="comment"># Style for separator</span>
style <span class="symbol">:separator</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#757575</span><span class="delimiter">"</span></span>
<span class="keyword">end</span></span></code></pre>
<p>{{column(:mid)}}</p>
<pre><code class="ruby syntaxhl"><span class="CodeRay"><span class="comment"># Style for separator</span>
style <span class="symbol">:separator</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#757575</span><span class="delimiter">"</span></span>
separator <span class="string"><span class="delimiter">"</span><span class="content">|</span><span class="delimiter">"</span></span>
<span class="keyword">end</span></span></code></pre>
<p>{{column(:end)}}</p>
<p>Move the properties from the unoccupied <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles">style</a> to the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles#Views">views style</a>:</p>
<p>{{column(:start)}}</p>
<pre><code class="ruby syntaxhl"><span class="CodeRay"><span class="comment"># Style for the views</span>
style <span class="symbol">:views</span> <span class="keyword">do</span>
<span class="comment"># Style for the active views</span>
style <span class="symbol">:focus</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#fecf35</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="comment"># Style for urgent window titles and views</span>
style <span class="symbol">:urgent</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#ff9800</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="comment"># Style for occupied views (views with clients)</span>
style <span class="symbol">:occupied</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#b8b8b8</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="comment"># Style for unoccupied views (views without clients)</span>
style <span class="symbol">:unoccupied</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#757575</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="keyword">end</span></span></code></pre>
<p>{{column(:mid)}}</p>
<pre><code class="ruby syntaxhl"><span class="CodeRay"><span class="comment"># Style for the views</span>
style <span class="symbol">:views</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#757575</span><span class="delimiter">"</span></span>
<span class="comment"># Style for the active views</span>
style <span class="symbol">:focus</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#fecf35</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="comment"># Style for urgent window titles and views</span>
style <span class="symbol">:urgent</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#ff9800</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="comment"># Style for occupied views (views with clients)</span>
style <span class="symbol">:occupied</span> <span class="keyword">do</span>
foreground <span class="string"><span class="delimiter">"</span><span class="content">#b8b8b8</span><span class="delimiter">"</span></span>
<span class="keyword">end</span>
<span class="keyword">end</span></span></code></pre>
<p>{{column(:end)}}</p>
<p>{{warn(The separator option and the unoccupied style have been removed, check for deprecation warnings)}}</p> subtle - Visible viewshttp://subtle.de/news/462011-08-30T20:49:54ZChristoph Kappelchristoph@unexist.dev
<p>During my time at the <a href="http://froscon.org" class="external">FrOSCon</a> I had problems with <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Multihead">multihead</a> and <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Views">views</a>, because I couldn't see both <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Multihead">screens</a> at the same time.</p>
<p>Therefore, <a class="changeset" title="Closed #247: Refactored view style selection and added visible style" href="http://subtle.de/projects/subtle/repository/revisions/3023">r3023</a> adds a new <strong>optional</strong> style to highlight visible <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Views">views</a>. This <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles">style</a> defines additional values, that are assigned on top of the current <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles">style</a> values like <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles#Occupied">:occupied</a>. I also changed the <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles#Urgent">:urgent</a> <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles">style</a> to behave similar.</p>
<p>{{warn(I removed the deprecated <a class="wiki-page" href="http://subtle.de/projects/subtle/wiki/Styles">style</a> syntax so check your config!)}}</p>