// Actions which control the server's behavior.

partial keypad_keys function_keys
xkb_symbols "xfree86" {
    include "keypad(operators)"
    include "srvr_ctrl(fkey2vt)"
};

partial function_keys
xkb_symbols "fkey2vt" {

    key <FK01> {
	type="CTRL+ALT",
	symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ]
    };

    key <FK02> {
	type="CTRL+ALT",
	symbols[Group1]= [ F2, F2, F2, F2, XF86_Switch_VT_2 ]
    };

    key <FK03> {
	type="CTRL+ALT",
	symbols[Group1]= [ F3, F3, F3, F3, XF86_Switch_VT_3 ]
    };

    key <FK04> {
	type="CTRL+ALT",
	symbols[Group1]= [ F4, F4, F4, F4, XF86_Switch_VT_4 ]
    };

    key <FK05> {
	type="CTRL+ALT",
	symbols[Group1]= [ F5, F5, F5, F5, XF86_Switch_VT_5 ]
    };

    key <FK06> {
	type="CTRL+ALT",
	symbols[Group1]= [ F6, F6, F6, F6, XF86_Switch_VT_6 ]
    };

    key <FK07> {
	type="CTRL+ALT",
	symbols[Group1]= [ F7, F7, F7, F7, XF86_Switch_VT_7 ]
    };

    key <FK08> {
	type="CTRL+ALT",
	symbols[Group1]= [ F8, F8, F8, F8, XF86_Switch_VT_8 ]
    };

    key <FK09> {
	type="CTRL+ALT",
	symbols[Group1]= [ F9, F9, F9, F9, XF86_Switch_VT_9 ]
    };

    key <FK10> {
	type="CTRL+ALT",
	symbols[Group1]= [ F10, F10, F10, F10, XF86_Switch_VT_10 ]
    };

    key <FK11> {
	type="CTRL+ALT",
	symbols[Group1]= [ F11, F11, F11, F11, XF86_Switch_VT_11 ]
    };

    key <FK12> {
	type="CTRL+ALT",
	symbols[Group1]= [ F12, F12, F12, F12, XF86_Switch_VT_12 ]
    };
};

partial function_keys keypad_keys
xkb_symbols "no_srvr_keys" {

    key.type="TWO_LEVEL";

    key <FK01> { [ F1, F1 ]	};
    key <FK02> { [ F2, F2 ]	};
    key <FK03> { [ F3, F3 ]	};
    key <FK04> { [ F4, F4 ]	};
    key <FK05> { [ F5, F5 ]	};
    key <FK06> { [ F6, F6 ]	};
    key <FK07> { [ F7, F7 ]	};
    key <FK08> { [ F8, F8 ]	};
    key <FK09> { [ F9, F9 ]	};
    key <FK10> { [ F10, F10 ]	};
    key <FK11> { [ F11, F11 ]	};
    key <FK12> { [ F12, F12 ]	};

    key <KPDV> { [ KP_Divide,	KP_Divide	] };
    key <KPMU> { [ KP_Multiply,	KP_Multiply	] };
    key <KPSU> { [ KP_Subtract,	KP_Subtract	] };
    key <KPAD> { [ KP_Add,	KP_Add		] };
};

partial function_keys
xkb_symbols "grab_debug" {

    key <FK11> {
	type="CTRL+ALT",
	symbols[Group1]= [ F11, F11, F11, F11, XF86LogGrabInfo ]
    };

    key <FK12> {
	type="CTRL+ALT",
	symbols[Group1]= [ F12, F12, F12, F12, XF86LogWindowTree ]
    };

};
