-my @chars = ((map {chr} ord '!' .. ord 'Z'), 'a'..'z');
-splice @chars, $_, 1, () for 2, 3-1, 5-2, 31-3; # remove character exceptions # $ & @
-my @chars2 = (@chars, '_'); # trailing character (extended set)
+my @chars = (
+ [qw{! " % ' ( ) * + , - . /}],
+ ['0'..'9'], [qw{: ; < = > ?}],
+ ['A'..'M'], ['N'..'Z'],
+ ['a'..'m'], ['n'..'z'],
+);
+my @chars2 = (['_'], @chars); # trailing character (extended set)
+my @columns = !exists $get{split} ? \@chars2 :
+ ([@chars2[0, 1, 3, 4, 6]], [@chars2[2, 5, 7]]);
+
+if ($mode eq 'xorg') {
+ #TODO determine character usage from declared keys
+ $chars2[0] = [qw( # ^ _ ` ~ )];
+ @chars = @chars2;
+}