]> git.sur5r.net Git - i3/i3/log
i3/i3
13 years agoBugfix: make i3bar depend on libi3
Michael Stapelberg [Sun, 9 Oct 2011 12:05:29 +0000 (13:05 +0100)]
Bugfix: make i3bar depend on libi3

13 years agoMerge remote-tracking branch 'mxf/merge' into next
Michael Stapelberg [Sat, 8 Oct 2011 21:01:41 +0000 (22:01 +0100)]
Merge remote-tracking branch 'mxf/merge' into next

13 years agotestcases: add Makefile.PL to automatically install deps via CPAN
Maik Fischer [Sat, 8 Oct 2011 19:58:37 +0000 (20:58 +0100)]
testcases: add Makefile.PL to automatically install deps via CPAN

13 years agoFix 'make dist'
Michael Stapelberg [Sat, 8 Oct 2011 18:12:28 +0000 (19:12 +0100)]
Fix 'make dist'

13 years agoremove obsolete CMDMODE and TODO files, update LICENSE
Michael Stapelberg [Sat, 8 Oct 2011 14:18:04 +0000 (15:18 +0100)]
remove obsolete CMDMODE and TODO files, update LICENSE

13 years agotests: rename files (00x-*.t is basic stuff, >=100-*.t are tests using IPC)
Michael Stapelberg [Sat, 8 Oct 2011 13:38:50 +0000 (14:38 +0100)]
tests: rename files (00x-*.t is basic stuff, >=100-*.t are tests using IPC)

13 years agotestsuite: delete obsolete makefile
Michael Stapelberg [Sat, 8 Oct 2011 13:30:31 +0000 (14:30 +0100)]
testsuite: delete obsolete makefile

13 years agodebian: add testsuite.html to i3-wm.docs
Michael Stapelberg [Sat, 8 Oct 2011 12:01:43 +0000 (13:01 +0100)]
debian: add testsuite.html to i3-wm.docs

13 years agodocs/testsuite: s/more ugly/uglier (Thanks fernandotcl)
Michael Stapelberg [Thu, 6 Oct 2011 06:58:39 +0000 (07:58 +0100)]
docs/testsuite: s/more ugly/uglier (Thanks fernandotcl)

13 years agoMerge branch 'testsuite' into next
Michael Stapelberg [Wed, 5 Oct 2011 23:08:06 +0000 (00:08 +0100)]
Merge branch 'testsuite' into next

13 years agocomplete-run: eliminate dependency on EV
Michael Stapelberg [Wed, 5 Oct 2011 22:52:19 +0000 (23:52 +0100)]
complete-run: eliminate dependency on EV

13 years agocomplete-run: explicitly state why we need to overwrite SIGCHLD
Michael Stapelberg [Wed, 5 Oct 2011 22:29:58 +0000 (23:29 +0100)]
complete-run: explicitly state why we need to overwrite SIGCHLD

13 years agotests: eliminate List::MoreUtils
Michael Stapelberg [Wed, 5 Oct 2011 22:21:36 +0000 (23:21 +0100)]
tests: eliminate List::MoreUtils

13 years agotests: eliminate Try::Tiny
Michael Stapelberg [Wed, 5 Oct 2011 22:21:23 +0000 (23:21 +0100)]
tests: eliminate Try::Tiny

13 years agotests: Eliminate IO::Scalar
Michael Stapelberg [Wed, 5 Oct 2011 22:17:09 +0000 (23:17 +0100)]
tests: Eliminate IO::Scalar

13 years agotests: remove unused Proc::Background
Michael Stapelberg [Wed, 5 Oct 2011 19:48:34 +0000 (20:48 +0100)]
tests: remove unused Proc::Background

13 years agodocs/testsuite: explain how socket activation works in i3
Michael Stapelberg [Wed, 5 Oct 2011 19:46:47 +0000 (20:46 +0100)]
docs/testsuite: explain how socket activation works in i3

13 years agoMerge branch 'testsuite' into next
Michael Stapelberg [Tue, 4 Oct 2011 22:39:59 +0000 (23:39 +0100)]
Merge branch 'testsuite' into next

13 years agotests: move i3test.pm from t/lib to lib/
Michael Stapelberg [Tue, 4 Oct 2011 22:39:36 +0000 (23:39 +0100)]
tests: move i3test.pm from t/lib to lib/

13 years agotests: use a lot higher timeouts
Michael Stapelberg [Tue, 4 Oct 2011 22:36:57 +0000 (23:36 +0100)]
tests: use a lot higher timeouts

This makes the tests more robust on a machine which is loaded.
Also, it makes the tests run (significantly) longer if anything goes wrong.

13 years agotests: don’t overwrite $timeout, kill timer when done
Michael Stapelberg [Tue, 4 Oct 2011 22:36:43 +0000 (23:36 +0100)]
tests: don’t overwrite $timeout, kill timer when done

13 years agotests: Convert all testcases to use the new launch_with_config API
Michael Stapelberg [Tue, 4 Oct 2011 22:34:23 +0000 (23:34 +0100)]
tests: Convert all testcases to use the new launch_with_config API

It now returns a pid directly, not a Proc::Background object.

13 years agotests: launch_with_config: use socket activation
Michael Stapelberg [Tue, 4 Oct 2011 22:33:38 +0000 (23:33 +0100)]
tests: launch_with_config: use socket activation

13 years agotests: SocketActivation: append to the logfile, more comments
Michael Stapelberg [Tue, 4 Oct 2011 22:31:33 +0000 (23:31 +0100)]
tests: SocketActivation: append to the logfile, more comments

13 years agotests: SocketActivation: only close() and dup2() if fileno(socket) != 3
Michael Stapelberg [Tue, 4 Oct 2011 22:31:06 +0000 (23:31 +0100)]
tests: SocketActivation: only close() and dup2() if fileno(socket) != 3

13 years agotests: Refactor the socket activation into lib/SocketActivation.pm
Michael Stapelberg [Tue, 4 Oct 2011 19:55:29 +0000 (20:55 +0100)]
tests: Refactor the socket activation into lib/SocketActivation.pm

13 years agotests: re-order dependencies in complete-run, make clear which are shipped with Perl
Michael Stapelberg [Tue, 4 Oct 2011 19:10:11 +0000 (20:10 +0100)]
tests: re-order dependencies in complete-run, make clear which are shipped with Perl

13 years agotests: remove unused dependency Proc::Background from complete-run
Michael Stapelberg [Tue, 4 Oct 2011 19:05:12 +0000 (20:05 +0100)]
tests: remove unused dependency Proc::Background from complete-run

13 years agotests: eliminate dependency on the DateTime module by using POSIX::strftime
Michael Stapelberg [Tue, 4 Oct 2011 19:03:08 +0000 (20:03 +0100)]
tests: eliminate dependency on the DateTime module by using POSIX::strftime

13 years agotests: make complete-run use POSIX::close(3) instead of reserving a file descriptor...
Michael Stapelberg [Tue, 4 Oct 2011 18:58:17 +0000 (19:58 +0100)]
tests: make complete-run use POSIX::close(3) instead of reserving a file descriptor when starting

This makes it possible to run complete-run.pl with a "tainted" environment in
which fd 3 (and possibly others) are already present.

13 years agoBugfix: Warp pointer to the correct window when using the 'focus' command
Michael Stapelberg [Mon, 3 Oct 2011 20:54:36 +0000 (21:54 +0100)]
Bugfix: Warp pointer to the correct window when using the 'focus' command

Comment in the code makes the fix clear, I think.

Steps to reproduce the issue:
1) On the right monitor, open two terminals (h-split workspace)
2) 'i3 mark foo' on the right terminal
3) Focus the left terminal
4) Switch to the left monitor
5) i3 '[con_mark="foo"] focus'
6) the left window will contain the pointer (and is focused for a short period
   of time, or even permanently due to race conditions)

13 years agoMerge branch 'master' into next
Michael Stapelberg [Mon, 3 Oct 2011 18:31:12 +0000 (19:31 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'fix-i3bar-man'
Michael Stapelberg [Mon, 3 Oct 2011 18:31:09 +0000 (19:31 +0100)]
Merge branch 'fix-i3bar-man'

13 years agoescape font name
Noe Rubinstein [Sun, 2 Oct 2011 22:54:24 +0000 (00:54 +0200)]
escape font name

The double-dash gets scrambled by a2x otherwise

13 years agoMerge branch 'ws_next' into next
Michael Stapelberg [Sun, 2 Oct 2011 21:22:03 +0000 (22:22 +0100)]
Merge branch 'ws_next' into next

13 years agoMention 'move workspace next/prev' in the userguide
Michael Stapelberg [Sun, 2 Oct 2011 21:21:38 +0000 (22:21 +0100)]
Mention 'move workspace next/prev' in the userguide

13 years agoadd a test for the 'move workspace next/prev' command
Michael Stapelberg [Sun, 2 Oct 2011 21:18:21 +0000 (22:18 +0100)]
add a test for the 'move workspace next/prev' command

13 years agoadd "move workspace next" and "move workspace prev"
Noe Rubinstein [Sun, 2 Oct 2011 15:55:19 +0000 (17:55 +0200)]
add "move workspace next" and "move workspace prev"

some factorization would be better here, however I don't really know my
way around bison

13 years agorename the internal function to _workspace_show, add a comment to workspace_show_by_name
Michael Stapelberg [Sun, 2 Oct 2011 21:03:16 +0000 (22:03 +0100)]
rename the internal function to _workspace_show, add a comment to workspace_show_by_name

13 years agorefactor workspace_show and friends
Noe Rubinstein [Sun, 2 Oct 2011 15:54:23 +0000 (17:54 +0200)]
refactor workspace_show and friends

13 years agoMerge branch 'msg' into next
Michael Stapelberg [Sun, 2 Oct 2011 18:21:27 +0000 (19:21 +0100)]
Merge branch 'msg' into next

13 years agoMake i3 send arguments as command to a running i3 instance (like i3-msg)
Michael Stapelberg [Sun, 2 Oct 2011 18:20:43 +0000 (19:20 +0100)]
Make i3 send arguments as command to a running i3 instance (like i3-msg)

From i3 --help:

If you pass plain text arguments, i3 will interpret them as a command
to send to a currently running i3 (like i3-msg). This allows you to
use nice and logical commands, such as:

i3 border none
i3 floating toggle
i3 kill window

13 years agoCleanup i3 --help
Michael Stapelberg [Sun, 2 Oct 2011 17:55:15 +0000 (18:55 +0100)]
Cleanup i3 --help

13 years agoMove ipc_send_message and ipc_recv_message to libi3
Michael Stapelberg [Sun, 2 Oct 2011 17:33:10 +0000 (18:33 +0100)]
Move ipc_send_message and ipc_recv_message to libi3

Make i3-msg and src/ipc.c use it

13 years agoi3-msg: use smalloc, sstrdup from libi3
Michael Stapelberg [Sun, 2 Oct 2011 17:11:01 +0000 (18:11 +0100)]
i3-msg: use smalloc, sstrdup from libi3

13 years agomove sstrdup, scalloc, smalloc, srealloc to libi3, improve error messages
Michael Stapelberg [Sun, 2 Oct 2011 17:08:49 +0000 (18:08 +0100)]
move sstrdup, scalloc, smalloc, srealloc to libi3, improve error messages

13 years agoInclude libi3.h (Thanks fernandotcl)
Michael Stapelberg [Sun, 2 Oct 2011 15:41:26 +0000 (16:41 +0100)]
Include libi3.h (Thanks fernandotcl)

13 years agoMakefile: include libi3/ in 'dist'
Michael Stapelberg [Sun, 2 Oct 2011 15:36:49 +0000 (16:36 +0100)]
Makefile: include libi3/ in 'dist'

13 years agoMerge branch 'get-socketpath' into next
Michael Stapelberg [Sun, 2 Oct 2011 15:13:23 +0000 (16:13 +0100)]
Merge branch 'get-socketpath' into next

13 years agoImplement i3 --get-socketpath, useful for IPC scripts
Michael Stapelberg [Sun, 2 Oct 2011 15:12:10 +0000 (16:12 +0100)]
Implement i3 --get-socketpath, useful for IPC scripts

In order to not depend on X11 just for getting the socket paths, scripts or
other programs can now use i3 --get-socketpath. Since i3 must be present on the
computer anyways, this saves one dependency :).

13 years agoi3-msg: use socket_path_from_x11 from libi3
Michael Stapelberg [Sun, 2 Oct 2011 15:11:55 +0000 (16:11 +0100)]
i3-msg: use socket_path_from_x11 from libi3

13 years agoIntroduce libi3, an *internal* library to eliminate code duplication
Michael Stapelberg [Sun, 2 Oct 2011 15:11:30 +0000 (16:11 +0100)]
Introduce libi3, an *internal* library to eliminate code duplication

13 years agoMakefiles: prefix compilation messages (for parallel builds)
Michael Stapelberg [Sun, 2 Oct 2011 15:04:18 +0000 (16:04 +0100)]
Makefiles: prefix compilation messages (for parallel builds)

13 years agomakefile: make SUBDIRS constant
Michael Stapelberg [Sun, 2 Oct 2011 15:03:09 +0000 (16:03 +0100)]
makefile: make SUBDIRS constant

13 years agoremove obsolete comment
Michael Stapelberg [Sun, 2 Oct 2011 12:18:12 +0000 (13:18 +0100)]
remove obsolete comment

13 years agoMerge branch 'master' into next
Michael Stapelberg [Sun, 2 Oct 2011 11:57:27 +0000 (12:57 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'userguide-mark'
Michael Stapelberg [Sun, 2 Oct 2011 11:57:25 +0000 (12:57 +0100)]
Merge branch 'userguide-mark'

13 years agouserguide: fix typo
Michael Walle [Fri, 30 Sep 2011 18:46:59 +0000 (20:46 +0200)]
userguide: fix typo

Signed-off-by: Michael Walle <michael@walle.cc>
13 years agoMerge branch 'master' into next
Michael Stapelberg [Sat, 1 Oct 2011 16:44:46 +0000 (17:44 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'cloexec-errorlog'
Michael Stapelberg [Sat, 1 Oct 2011 16:44:43 +0000 (17:44 +0100)]
Merge branch 'cloexec-errorlog'

13 years agoset close-on-exec flag on errorlogfile
Michael Walle [Sat, 1 Oct 2011 00:29:30 +0000 (02:29 +0200)]
set close-on-exec flag on errorlogfile

Make sure the file descriptor is closed within the child after forking.

Signed-off-by: Michael Walle <michael@walle.cc>
13 years agoCheck for PCRE version and disable PCRE_UCP for <= 8.10
Michael Stapelberg [Fri, 30 Sep 2011 19:31:32 +0000 (20:31 +0100)]
Check for PCRE version and disable PCRE_UCP for <= 8.10

13 years agoInclude i3-sensible-* in 'make dist'
Michael Stapelberg [Thu, 29 Sep 2011 20:04:39 +0000 (21:04 +0100)]
Include i3-sensible-* in 'make dist'

13 years agoMerge branch 'master' into next
Michael Stapelberg [Mon, 26 Sep 2011 19:12:07 +0000 (20:12 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'fix-focus-ipc'
Michael Stapelberg [Mon, 26 Sep 2011 19:12:03 +0000 (20:12 +0100)]
Merge branch 'fix-focus-ipc'

13 years agoBugfix: IPC: Correctly dump the 'focus' array
Michael Stapelberg [Mon, 26 Sep 2011 19:11:47 +0000 (20:11 +0100)]
Bugfix: IPC: Correctly dump the 'focus' array

13 years agotests: Use AnyEvent::I3’s get_marks (requires AE::I3 >=0.08)
Michael Stapelberg [Mon, 26 Sep 2011 18:36:27 +0000 (19:36 +0100)]
tests: Use AnyEvent::I3’s get_marks (requires AE::I3 >=0.08)

We also don’t bother with timeouts anymore. It’s expected to run the tests with
a sufficiently recent version of i3. The tests will just hang if it doesn’t
work.

13 years agoMerge branch 'nagbar-wrap' into next
Michael Stapelberg [Sun, 25 Sep 2011 17:47:23 +0000 (18:47 +0100)]
Merge branch 'nagbar-wrap' into next

13 years agoIntroduce the i3-sensible-{pager,editor,terminal} scripts
Michael Stapelberg [Sun, 25 Sep 2011 17:45:51 +0000 (18:45 +0100)]
Introduce the i3-sensible-{pager,editor,terminal} scripts

The former two provide fallbacks in case $PAGER or $EDITOR is not set (which
might be more common than you think, because they have to be set in
~/.xsession, not in the shell configuration!) while the latter tries to launch
a terminal emulator. The scripts are most prominently used in i3-nagbar, which
alerts the user when the configuration is broken for some reason. Also,
i3-sensible-terminal is used in the default configuration.

This commit does not rely on the shell supporting ${PAGER:-less} anymore, which
is not the case for 'fish'.

13 years agodocs/testsuite: a few corrections by fernandotcl
Michael Stapelberg [Sun, 25 Sep 2011 13:23:47 +0000 (14:23 +0100)]
docs/testsuite: a few corrections by fernandotcl

13 years agos/This adds up quickly/Delays add up quickly (Thanks mxf)
Michael Stapelberg [Sat, 24 Sep 2011 19:11:23 +0000 (20:11 +0100)]
s/This adds up quickly/Delays add up quickly (Thanks mxf)

13 years agoMerge branch 'testsuite' into next
Michael Stapelberg [Sat, 24 Sep 2011 19:10:21 +0000 (20:10 +0100)]
Merge branch 'testsuite' into next

13 years agoAdd docs/testsuite
Michael Stapelberg [Sat, 24 Sep 2011 16:20:36 +0000 (17:20 +0100)]
Add docs/testsuite

13 years agotests: make sure to leave no tempfiles behind
Michael Stapelberg [Sat, 24 Sep 2011 15:28:21 +0000 (16:28 +0100)]
tests: make sure to leave no tempfiles behind

13 years agotests: Bugfix: 11-goto.t: use mktemp for generating a random mark, not base64
Michael Stapelberg [Sat, 24 Sep 2011 14:56:43 +0000 (15:56 +0100)]
tests: Bugfix: 11-goto.t: use mktemp for generating a random mark, not base64

The base64 string could contain / and + which is treated specially since we
implemented PCRE support :)

13 years agotests: lib/i3test: Use //= instead of unless exists $args{key} (Thanks mxf)
Michael Stapelberg [Sat, 24 Sep 2011 14:44:42 +0000 (15:44 +0100)]
tests: lib/i3test: Use //= instead of unless exists $args{key} (Thanks mxf)

13 years agotests: refactor t/58-wm_take_focus to use wait_for_event
Michael Stapelberg [Sat, 24 Sep 2011 14:38:31 +0000 (15:38 +0100)]
tests: refactor t/58-wm_take_focus to use wait_for_event

13 years agotests: lib/i3test: Remove open_standard_window, introduce open_window
Michael Stapelberg [Sat, 24 Sep 2011 14:11:37 +0000 (15:11 +0100)]
tests: lib/i3test: Remove open_standard_window, introduce open_window

open_window has a better API than open_standard_window. It uses named
parameters and supplies default values for everything you don’t specify. This
way, you can use every feature which X11::XCB::Window supports.

13 years agotests: complete-run: remove debugging messages
Michael Stapelberg [Sat, 24 Sep 2011 12:13:26 +0000 (13:13 +0100)]
tests: complete-run: remove debugging messages

13 years agotests: complete-run: display time i3 took for starting up
Michael Stapelberg [Sat, 24 Sep 2011 12:13:09 +0000 (13:13 +0100)]
tests: complete-run: display time i3 took for starting up

13 years agotests: complete_run: directly use X11::XCB instead of ::Connection
Michael Stapelberg [Sat, 24 Sep 2011 12:09:20 +0000 (13:09 +0100)]
tests: complete_run: directly use X11::XCB instead of ::Connection

This saves about 0.5s wallclock time due to not starting up Moose/Mouse.
This is worthwhile when you develop a new feature and you are often invoking
complete_run for one specific test.

13 years agotests: use wait_for_{map,unmap} to eliminate more sleep()s
Michael Stapelberg [Sat, 24 Sep 2011 12:08:02 +0000 (13:08 +0100)]
tests: use wait_for_{map,unmap} to eliminate more sleep()s

13 years agotests: lib/i3test: provide wait_for_map and wait_for_unmap
Michael Stapelberg [Sat, 24 Sep 2011 12:07:05 +0000 (13:07 +0100)]
tests: lib/i3test: provide wait_for_map and wait_for_unmap

These functions should be used instead of calling wait_for_event directly when
waiting for MAP_NOTIFY or UNMAP_NOTIFY

13 years agotests: implement sync_with_i3 and use it instead of sleep()
Michael Stapelberg [Fri, 23 Sep 2011 19:37:45 +0000 (20:37 +0100)]
tests: implement sync_with_i3 and use it instead of sleep()

Also use open_standard_window() in a few more places where appropriate

13 years agolib/i3test.pm: reformat exports list
Michael Stapelberg [Thu, 22 Sep 2011 21:11:11 +0000 (22:11 +0100)]
lib/i3test.pm: reformat exports list

13 years agoImplement the I3_SYNC client protocol
Michael Stapelberg [Thu, 22 Sep 2011 21:08:42 +0000 (22:08 +0100)]
Implement the I3_SYNC client protocol

This is mainly useful for the testsuite. The tests can wait until i3 processed
all X11 events and then continue. This eliminates sleep() calls which leads to
a more robust and faster testsuite.

13 years agolib/i3test.pm: Don’t sleep(0.25), but wait until the window was mapped
Michael Stapelberg [Thu, 22 Sep 2011 19:30:24 +0000 (20:30 +0100)]
lib/i3test.pm: Don’t sleep(0.25), but wait until the window was mapped

This makes it faster and less racey

13 years agoMerge branch 'master' into next
Michael Stapelberg [Thu, 22 Sep 2011 22:11:14 +0000 (23:11 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'fix-dragging-fullscreen'
Michael Stapelberg [Thu, 22 Sep 2011 22:11:11 +0000 (23:11 +0100)]
Merge branch 'fix-dragging-fullscreen'

13 years agoSkip dragging of floating cons in fullscreen mode
Yves Fischer [Thu, 22 Sep 2011 20:22:37 +0000 (22:22 +0200)]
Skip dragging of floating cons in fullscreen mode

13 years agoMerge branch 'master' into next
Michael Stapelberg [Thu, 22 Sep 2011 19:11:44 +0000 (20:11 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'fix-close-focus'
Michael Stapelberg [Thu, 22 Sep 2011 19:10:59 +0000 (20:10 +0100)]
Merge branch 'fix-close-focus'

13 years agoBugfix: Correctly revert focus to other floating windows when closing a floating...
Michael Stapelberg [Wed, 21 Sep 2011 22:28:01 +0000 (23:28 +0100)]
Bugfix: Correctly revert focus to other floating windows when closing a floating window

Uncovered by the testsuite \o/

13 years agoMerge branch 'master' into next
Michael Stapelberg [Tue, 20 Sep 2011 21:37:08 +0000 (22:37 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'fix-variables-cfg'
Michael Stapelberg [Tue, 20 Sep 2011 21:37:00 +0000 (22:37 +0100)]
Merge branch 'fix-variables-cfg'

13 years agoBugfix: use bufcopy instead of buf when boundary checking (Thanks thomasba)
Michael Stapelberg [Tue, 20 Sep 2011 21:36:23 +0000 (22:36 +0100)]
Bugfix: use bufcopy instead of buf when boundary checking (Thanks thomasba)

Also replace the useless (bufcopy + (next - bufcopy)) with next

13 years agoMerge branch 'master' into next
Michael Stapelberg [Tue, 20 Sep 2011 20:42:51 +0000 (21:42 +0100)]
Merge branch 'master' into next

13 years agoMerge branch 'fix-variables-cfg'
Michael Stapelberg [Tue, 20 Sep 2011 20:42:48 +0000 (21:42 +0100)]
Merge branch 'fix-variables-cfg'

13 years agoA bit more boundary-checking when replacing variables.
Michael Stapelberg [Tue, 20 Sep 2011 20:42:26 +0000 (21:42 +0100)]
A bit more boundary-checking when replacing variables.

Makes valgrind happy

13 years agoBugfix: Correctly split key/value when parsing variables (Thanks xeen)
Michael Stapelberg [Tue, 20 Sep 2011 20:42:09 +0000 (21:42 +0100)]
Bugfix: Correctly split key/value when parsing variables (Thanks xeen)