Converting to i3

This commit is contained in:
Barak Michener 2015-02-03 14:07:04 -05:00
parent 7eaf1d7069
commit 5d551088ab
3 changed files with 358 additions and 1 deletions

160
.i3/config Normal file
View file

@ -0,0 +1,160 @@
# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
set $mod Mod1
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
font pango:DejaVu Sans Mono 10
# Before i3 v4.8, we used to recommend this one as the default:
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
# The font above is very space-efficient, that is, it looks good, sharp and
# clear in small sizes. However, its unicode glyph coverage is limited, the old
# X core fonts rendering does not support right-to-left and this being a bitmap
# font, it doesnt scale on retina/hidpi displays.
#
new_window pixel 2
#force_focus_wrapping yes
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
bindsym $mod+Shift+Return exec run_terminal
# kill focused window
bindsym $mod+Shift+c kill
# start dmenu (a program launcher)
bindsym $mod+d exec dmenu_run
# There also is the (new) i3-dmenu-desktop which only displays applications
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
# installed.
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
# change focus
bindsym $mod+h focus left
#bindsym $mod+j focus down
#bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+j exec --no-startup-id ~/.i3/i3-focus-next
bindsym $mod+k exec --no-startup-id ~/.i3/i3-focus-next --reverse
# alternatively, you can use the cursor keys:
#bindsym $mod+Left focus left
#bindsym $mod+Down focus down
#bindsym $mod+Up focus up
#bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
# alternatively, you can use the cursor keys:
#bindsym $mod+Shift+Left move left
#bindsym $mod+Shift+Down move down
#bindsym $mod+Shift+Up move up
#bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+i split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
# switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
# reload the configuration file
bindsym $mod+Shift+y reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+q exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym h resize shrink width 5 px or 5 ppt
bindsym j resize grow height 5 px or 5 ppt
bindsym k resize shrink height 5 px or 5 ppt
bindsym l resize grow width 5 px or 5 ppt
# same bindings, but for the arrow keys
#bindsym Left resize shrink width 10 px or 10 ppt
#bindsym Down resize grow height 10 px or 10 ppt
#bindsym Up resize shrink height 10 px or 10 ppt
#bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
status_command i3status
position top
}

196
.i3/i3-focus-next Executable file
View file

@ -0,0 +1,196 @@
#!/usr/bin/env perl
#
# needs package perl-json
#
use IO::Socket::UNIX;
use JSON;
use Encode;
use Getopt::Long;
use constant MAGIC_STRING => 'i3-ipc';
use constant TYPE_COMMAND => 0;
use constant TYPE_GET_WORKSPACES => 1;
use constant TYPE_GET_TREE => 4;
#
# ipc functions
#
sub message {
my ($type, $content) = @_;
my $payload = '';
if ($content) {
$payload = encode_utf8($content);
}
return(MAGIC_STRING . pack('LL', length($payload), $type) . $payload);
}
sub ipc_request {
my ($sock, $type, $content) = @_;
# send request
$sock->write(message($type, $content));
# read response header
my $header = '';
$sock->read($header, length(MAGIC_STRING) + 4 + 4);
# get payload length
my ($len, $type) = unpack('LL', substr($header, length(MAGIC_STRING)));
# read payload
my $payload = '';
$sock->read($payload, $len);
# return decoded json
return decode_json $payload;
}
#
# tree functions
#
sub get_node_by_name {
my ($ref, $name) = @_;
# search for a direct child node by name
foreach my $node (@{${${ref}}{'nodes'}}) {
if (${${node}}{'name'} eq $name) {
return $node;
}
}
}
sub pop_window_array {
my ($ref, $arr) = @_;
my @node_types = qw(nodes floating_nodes);
# iterate through all child nodes
foreach my $node_type (@node_types) {
foreach my $node (@{${${ref}}{$node_type}}) {
# if child node is not a window
if (${${node}}{'window'} eq undef) {
# go one level down
pop_window_array($node, \@{$arr});
} else {
# add window id to array
push(@{$arr}, ${${node}}{'id'});
}
}
}
}
sub get_focused_node {
my $ref = shift;
my $ret = '';
my @node_types = qw(nodes floating_nodes);
# iterate through all child nodes
foreach my $node_type (@node_types) {
foreach my $node (@{${${ref}}{$node_type}}) {
# if child node is not a window
if (${${node}}{'window'} eq undef) {
# go one level down
$ret = get_focused_node($node);
if ($ret != '') {
return $ret;
}
} else {
# return focused window id
if (${${node}}{'focused'}) {
return ${${node}}{'id'};
}
}
}
}
return '';
}
#
# main
#
my $reverse;
GetOptions("reverse" => \$reverse);
# get socket path
chomp(my $path = qx(i3 --get-socketpath));
# open connection
my $sock = IO::Socket::UNIX->new(Peer => $path);
# get current workspaces
my $response = '';
$response = ipc_request($sock, TYPE_GET_WORKSPACES);
# get focused output and workspace
my $i3output = '';
my $i3workspace = '';
foreach my $node (@{$response}) {
if (${$node}{'focused'}) {
$i3output = ${$node}{output};
$i3workspace = ${$node}{num};
}
}
# get layout tree
my $response = '';
$response = ipc_request($sock, TYPE_GET_TREE);
my @windows, $focused, $prev, $next;
if (${$response}{'name'} eq 'root') {
my $output = get_node_by_name($response, $i3output);
my $content = get_node_by_name($output, 'content');
my $workspace = get_node_by_name($content, $i3workspace);
# populate window array
pop_window_array($workspace, \@windows);
# get focused window
$focused = get_focused_node($workspace);
# find window key for focused window
my $focused_key;
while (my ($key, $val) = each @windows) {
if ($val eq $focused) {
# get previous window
if ($key == 0) {
$prev = $windows[$#windows];
} else {
$prev = $windows[$key-1];
}
# get next window
if ($key == $#windows) {
$next = $windows[0];
} else {
$next = $windows[$key+1];
}
}
}
}
#print $prev . "\n" . $focused . "\n" . $next . "\n";
my $response = '';
if ($reverse) {
# set focus to previous window
$response = ipc_request($sock, TYPE_COMMAND, '[con_id="' . $prev . '"] focus');
} else {
# set focus to next window
$response = ipc_request($sock, TYPE_COMMAND, '[con_id="' . $next . '"] focus');
}
close($sock);
# exit with ipc command status
if (${$response}[0]{'success'}) {
exit(0);
} else {
exit(1);
}

View file

@ -11,4 +11,5 @@ gnome-sound-applet &
setxkbmap -option ctrl:nocaps &
synclient PalmDetect=1
exec awesome
#exec awesome
exec i3