Думаю, что это не удастся реализовать, потому что сервер иксов выдает (а программы получают от него) скан-коды нажатых клавиш именно в момент нажатия.
Вот именно! Баг багом, а если xneur научить анализировать последовательность нажатия клавиш, то он поможет решить эту проблему. Т.е. примерно таким образом:
Если нажата клавиша-модификатор, на которой висит переключалка / выбор раскладки, то
1.1. смотрим, какая клавиша была нажата последней перед этим, и, если эта клавиша - модификатор, то раскладку не переключать (например, при переключалке по CTRL пользователь нажал сперва SHIFT, а потом CTRL), иначе - далее.
1.2. смотрим, какая клавиша была нажата после этого, и, если эта клавиша - модификатор, то раскладку не переключать (или вернуть в предыдущее состояние?), иначе - далее.
1.3. Если нажатая клавиша была нажата без зажатой клавиши-модификатора-переключалки, то раскладку переключаем перед вводом символа, иначе - не переключаем.
На самом деле тут вопрос такой - можно ли отследить, нажата ли в момент нажатия любой клавиши также и клавиша модификатор или нет? Если не ошибаюсь, некогда за это отвечал байт по адресу 0:0417h.
Если такая возможность имеется (почему-то я не очень представляю себе возможность её отсутствия), то алгоритм будет звучать так:
1.1. смотрим, нажата ли клавиша-модификатор-переключалка одна или вместе с другой клавишей (любой), если не одна, то раскладку не переключать, иначе - далее.
1.2. смотрим, какая клавиша была нажата после нажатия клавиши-модификатора-переключалки, и, если она была нажата вместе с клавишей-переключалкой, то раскладку не переключаем.
Хотя, п.1.3 подразумевает какую-то возможность отслеживания состояния модификаторов в момент нажатия произвольной клавиши. Если этого нет, то ОПА
