diff --git a/GOALS b/GOALS deleted file mode 100644 index 40d548f8..00000000 --- a/GOALS +++ /dev/null @@ -1,6 +0,0 @@ -GOALS (these have to be fullfilled all the time): - - * Do _NOT_ use autotools or a similar mechanism. Instead, document all - requirements properly so that packagers for every plattform can easily - provide users with a package. Those who build software for themselves - do know how to install requirements, if they are documented. diff --git a/contrib/banner.svg b/contrib/banner.svg new file mode 100644 index 00000000..af82021b --- /dev/null +++ b/contrib/banner.svg @@ -0,0 +1,620 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + yellowiscool, farvardin + + + + + steckdenis + + + Logo for I3, an improved dynamic tiling window manager: http://i3.zekjur.net/ + + + + + + + + + + + + + + + + + + + + + + + + + + i3 + improvedtiling wm + + + + + + + + + + + + + + + + + diff --git a/dump-asy.pl b/contrib/dump-asy.pl similarity index 100% rename from dump-asy.pl rename to contrib/dump-asy.pl diff --git a/gtk-tree-watch.pl b/contrib/gtk-tree-watch.pl similarity index 100% rename from gtk-tree-watch.pl rename to contrib/gtk-tree-watch.pl diff --git a/i3-wsbar b/contrib/i3-wsbar similarity index 100% rename from i3-wsbar rename to contrib/i3-wsbar diff --git a/show-download-count.sh b/contrib/show-download-count.sh similarity index 100% rename from show-download-count.sh rename to contrib/show-download-count.sh diff --git a/contrib/sticker_stickma_black.svg b/contrib/sticker_stickma_black.svg new file mode 100644 index 00000000..fced8dd9 --- /dev/null +++ b/contrib/sticker_stickma_black.svg @@ -0,0 +1,645 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + yellowiscool, farvardin + + + + + steckdenis + + + Logo for I3, an improved dynamic tiling window manager: http://i3.zekjur.net/ + + + + + + + + + + + + + + + + + + + i3 + improvedtiling wm + + + + + + + + + + + + + + + + + + + + + + + i3wm.org + + diff --git a/docs/slides-2012-03-16/TdilE.jpg b/docs/slides-2012-03-16/TdilE.jpg new file mode 100644 index 00000000..9b939ab8 Binary files /dev/null and b/docs/slides-2012-03-16/TdilE.jpg differ diff --git a/docs/slides-2012-03-16/Ubuntu_Linux_Jaunty_screenshot.png b/docs/slides-2012-03-16/Ubuntu_Linux_Jaunty_screenshot.png new file mode 100644 index 00000000..95a2cdb5 Binary files /dev/null and b/docs/slides-2012-03-16/Ubuntu_Linux_Jaunty_screenshot.png differ diff --git a/docs/slides-2012-03-16/i3.tex b/docs/slides-2012-03-16/i3.tex new file mode 100644 index 00000000..673c72c1 --- /dev/null +++ b/docs/slides-2012-03-16/i3.tex @@ -0,0 +1,146 @@ +% vim:ts=4:sw=4:expandtab +% © 2012 Michael Stapelberg +% +% use xelatex %< +% +\documentclass[xetex,serif,compress]{beamer} +\usepackage{fontspec} +\usepackage{xunicode} % Unicode extras! +\usepackage{xltxtra} % Fixes +\usepackage{listings} +\setmainfont{Trebuchet MS} +\setmonofont{Inconsolata} +\usetheme{default} + +\setbeamertemplate{frametitle}{ + \color{black} + \vspace*{0.5cm} + \hspace*{0.25cm} + \textbf{\insertframetitle} + \par +} + +% Hide the navigation icons at the bottom of the page +\setbeamertemplate{navigation symbols}{} + +% No margins on any side +\setbeamersize{text margin left=0cm,text margin right=0cm} + + +\begin{document} + +% slide with bullet points +\newcommand{\mslide}[2]{ + \begin{frame}{#1} + \begin{center} + \begin{list}{$\bullet$}{\itemsep=1em} + #2 + \end{list} + \end{center} + \end{frame} +} + +\frame{ +\begin{center} +\vspace{1.5cm} +{\huge i3}\\ +{\large improved tiling window manager}\\ +\vspace{3cm} +Michael Stapelberg\\ +\vspace{0.5cm} +2012-03-16\\ +\end{center} +} + +\begin{frame}{} +\begin{center} +\huge +„Oh, interessant…“ + +\vspace*{1cm} + +oder + +\vspace*{1cm} + +„Was?! \textbf{Noch ein} window manager?“ +\end{center} +\end{frame} + + +\begin{frame}{} + % talk about the difference between a desktop environment and a window manager: + % a desktop environment (like GNOME, KDE, Xfce) is a collection of + % programs, libraries (including a graphical toolkit) and configuration. + % it usually aims for a coherent look and feel and comes with a number of + % tools (g*, like gedit, geeqie, …) + % One of the programs of a DE is a window manager. + \begin{figure} + \includegraphics[width=0.97\textwidth]{Ubuntu_Linux_Jaunty_screenshot.png} + % source: http://en.wikipedia.org/wiki/File:Ubuntu_Linux_Jaunty_screenshot.png + \end{figure} +\end{frame} + + +\begin{frame}{} +\begin{center} +% compare this to a screenshot of i3: +% notice the little amount of toolbars. +% notice the lack of fancy window decorations +% notice the absence of a desktop. +% instead, you get to use the full screen. + \begin{figure} + \includegraphics[width=0.97\textwidth]{TdilE.jpg} + % source: jrd in #i3 + \end{figure} +\end{center} +\end{frame} + + +\mslide{i3: Geschichte und Merkmale}{ + \item komplett neu geschrieben (Februar 2009) + \item Nachfolger* zu wmii, den wir nicht hacken konnten + \item sauberen, lesbaren, dokumentierten Code. und Dokumentation + \item ordentlichen Multi-Monitor-Unterstützung, UTF-8-Unterstützung + \item schnell und klein, ausgerichtet auf Power-Nutzer +} + +% live demo here, just like at FrOSCon +% include: the docs, with the keyboard layout +% include: the configuration file + +\mslide{Inter-Prozess-Kommunication}{ + \item UNIX-Socket, JSON zur Serialisierung + \item i3-msg (C), AnyEvent::I3 (Perl), i3-ipc (Ruby), i3ipc (Python) + \item beliebige Befehle schicken, wie \texttt{floating enable} + \item Ereignisse empfangen (z.B. Fokusänderung) + \item Zugriff auf die Layout-Datenstruktur (!) +} + +% demo: change a workspace +% demo: testsuite + +\mslide{Workflow-Beispiele}{ + \item Urgency hint + \item Scratchpad + \item Web-Entwicklung (browser, editor, syslog) + \item Programmieren (C): zwei Editoren (Code, Tests), schnell Doku aufmachen +} + +\mslide{i3 in Zahlen}{ + \item 3149 Commits von > 40 verschiedenen Leuten + \item > 600 Tickets (ca. 60 offen) + \item ungefähr 10.000 SLOC (größtenteils C, ein bisschen Perl) + \item Testsuite: > 1000 Tests in 96 Dateien + \item vorsichtige Schätzungen von > 1000 Nutzern +} + +\mslide{Danke für eure Aufmerksamkeit!}{ + \item Auf \url{http://www.i3wm.org/} findet ihr alles + \item Ubuntu: bitte nutze unser Repository: \url{http://i3wm.org/docs/repositories.html} + \item Debian: bitte nutze die Version in testing + \item Fragen? + \item (Bilder: Creative Commons Attribution-Share Alike 3.0 Unported) +} + +\end{document} diff --git a/i3.welcome b/i3.welcome deleted file mode 100644 index 5a267bb9..00000000 --- a/i3.welcome +++ /dev/null @@ -1,44 +0,0 @@ -1.) Welcome to i3! - -This message provides an overview of the default keybindings to use i3. -Please also make sure to have a look at the man page and the user's guide: -http://i3wm.org/docs/userguide.html - - -2.) Configuration Files - -/etc/i3/config is the default configuration. It is recommended to copy it and -afterwards edit it to suit your needs (in particular, you may want to disable -this message): - - cp /etc/i3/config ~/.i3/config - - -3.) Keybindings - -The following explanation is related to the QWERTY layout, but as the default -configuration uses keycodes instead of keysymbols for binding, you still have -to press the same physical keys, regardless of your keyboard layout. - -The Mod1 key is usually bound to the "Alt" key on your keyboard. - -Mod1+Enter opens a terminal emulator -Mod1+v starts dmenu (an application launcher) - -The directional keys are j(left), k(down), l(up) and ;(right). You can also use -the arrow keys on your keyboard, if you prefer them. - -Mod1+ moves the focus to the window in the given direction -Mod1+Shift+ moves the window to the given direction -Mod1+ opens the corresponding workspace -Mod1+Shift+ moves a window to the selected workspace -Mod1+h sets the mode of a container to stacking -Mod1+e sets the mode back to default -Mod1+f toggles fullscreen mode for the current window -Mod1+Shift+Space toggles floating mode for the current window -Mod1+Shift+q closes a window -Mod1+Shift+r restarts i3 in-place (at this time, you will lose your layout) -Mod1+Shift+e exits i3 - -If you have any questions, please don't hesitate to ask! -Have fun using i3 diff --git a/render-tree/Con.pm b/render-tree/Con.pm deleted file mode 100644 index 1830caf8..00000000 --- a/render-tree/Con.pm +++ /dev/null @@ -1,21 +0,0 @@ -# vim:ts=4:sw=4:expandtab -package Con; - -use Moose; -use MooseX::AttributeHelpers; -use v5.10; - -has 'name' => (is => 'ro', isa => 'Str'); -has 'width' => (is => 'rw', isa => 'Int', default => 100); -has '_nodes' => (is => 'ro', metaclass => 'Collection::Array', isa => 'ArrayRef[Con]', - default => sub { [] }, - provides => { - 'push' => 'add_node', - elements => 'nodes', - } -); -has 'parent' => (is => 'rw', isa => 'Con', predicate => 'has_parent'); - -__PACKAGE__->meta->make_immutable; - -1 diff --git a/render-tree/render.pl b/render-tree/render.pl deleted file mode 100755 index bea5811a..00000000 --- a/render-tree/render.pl +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env perl -# vim:ts=4:sw=4:expandtab -# © 2011 Michael Stapelberg, see LICENSE -# -# Needs SVG (libsvg-perl), IO::All (libio-all-perl), JSON::XS (libjson-xs-perl) and Moose (libmoose-perl) -# -# XXX: unfinished proof-of-concept. awaits a json dump in my.tree, renders to test.svg -# XXX: needs more beautifying (in the SVG but also in the code) -# XXX: has some rendering differences between firefox and chromium. maybe inkscape makes the file look the same in both browsers - -use strict; -use warnings; -use SVG; -use Data::Dumper; -use JSON::XS; -use IO::All; -use List::Util qw(sum); -use lib qw(.); -use Con; -use v5.10; - -my $input = io('my.tree')->slurp; -my $tree = decode_json($input); -my $root = parse_tree($tree); -render_tree($root); - -sub parse_tree { - my ($input, $parent) = @_; - my $con = Con->new(name => $input->{name}); - $con->parent($parent) if defined($parent); - for my $node (@{$input->{nodes}}) { - $con->add_node(parse_tree($node, $con)); - } - - return $con; -} - -sub render_tree { - my ($con) = @_; - say 'rendering con ' . $con->name; - my @nodes = $con->nodes; - for my $node (@nodes) { - render_tree($node); - } - - # nothing to calculate when there are no children - return unless @nodes > 0; - - $con->width((@nodes > 1 ? (@nodes - 1) * 20 : 0) + sum map { $_->width } @nodes); - - say $con->name . ' has width ' . $con->width; -} - -# TODO: figure out the height -my $svg = SVG->new(id => "tree", width => $root->width + 5, height => '1052'); - -my $l1 = $svg->group(id => 'layer1'); - -# gaussian blur (for drop shadows) -$svg->defs()->filter(id => 'dropshadow')->fe(-type => 'gaussianblur', stdDeviation => '2.19'); - -my $idcnt = 0; -my $y = 10; -render_svg($root, 0, 0); - -sub render_svg { - my ($con, $level, $x) = @_; - - my $indent = ' ' x $level; - - say $indent . 'svg-rendering con ' . $con->name . ' on level ' . $level; - say $indent . 'width: ' . $con->width; - - # render the dropshadow rect - $l1->rect( - id => 'outer_rect_shadow' . $idcnt, - style => 'opacity:1.0;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-opacity:1;stroke-miterlimit:4;filter:url(#dropshadow)', - width => "96", - height => '50', - #x => $x + ($con->has_parent ? ($con->parent->width - 100) / 2 : 0), - x => $x + ($con->width / 2) - (96 / 2) + 0, - y => 4 + $level * 70 + 0, - ); - $idcnt++; - - # render the main rect - $l1->rect( - id => 'outer_rect' . $idcnt, - style => 'opacity:1.0;fill:#c30000;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-opacity:1;stroke-miterlimit:4', - width => "96", - height => '50', - x => $x + ($con->width / 2) - (96 / 2), - y => 4 + $level * 70, - ); - - $idcnt++; - - # render the text - $l1->text( - style => 'font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:left;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS', - x => $x + ($con->width / 2) - (100/2) + 5, - y => 4 + 15 + $level * 70, - id => 'title_'.$idcnt, - )->tspan(style => 'text-align:start;text-anchor:start')->cdata($con->name); - $idcnt++; - - $y = $y + 50; - my @nodes = $con->nodes; - my $startx = $x + ($con->width / 2); - - for my $node (@nodes) { - render_svg($node, $level + 1, $x); - my $mid = $x + ($node->width / 2); - $l1->path( - d => 'M ' . $startx . ',' . (4 + $level * 70 + 50) . ' ' . $mid . ',' . (4 + ($level+1) * 70), - id => 'path' . $idcnt, - style => 'fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' - ); - $x += $node->width + 20; - $idcnt++; - } - -} - -$svg->render > io('test.svg');