<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Uikeys.txt</id>
	<title>Uikeys.txt - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Uikeys.txt"/>
	<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Uikeys.txt&amp;action=history"/>
	<updated>2026-04-21T04:29:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=Uikeys.txt&amp;diff=696&amp;oldid=prev</id>
		<title>Qrow: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Uikeys.txt&amp;diff=696&amp;oldid=prev"/>
		<updated>2025-11-14T05:22:17Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:22, 13 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Qrow</name></author>
	</entry>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=Uikeys.txt&amp;diff=695&amp;oldid=prev</id>
		<title>Interwiki&gt;Tulipe: /* selections */</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Uikeys.txt&amp;diff=695&amp;oldid=prev"/>
		<updated>2018-07-14T05:50:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;selections&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= uikeys.txt =&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
The file has to be placed into the SpringData dir, most common next to [[springsettings.cfg]].&lt;br /&gt;
&lt;br /&gt;
==example==&lt;br /&gt;
&lt;br /&gt;
{{sourcelink|file=doc/uikeys.txt}}&lt;br /&gt;
&lt;br /&gt;
==get key codes==&lt;br /&gt;
to see what keycodes are triggered when a key is pressed, enable keydebug mode with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/keydebug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 97.0 ==&lt;br /&gt;
In 97.0 support was added for &amp;#039;&amp;#039;&amp;#039;KeyChains&amp;#039;&amp;#039;&amp;#039; for example: &lt;br /&gt;
&amp;lt;code&amp;gt;/bind Ctrl+a,Ctrl+b say Hello World!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can double bind a button this way, e.g.:&lt;br /&gt;
&amp;lt;code&amp;gt;/bind e,e say Bar&lt;br /&gt;
/bind e say Foo&amp;lt;/code&amp;gt;&lt;br /&gt;
Results in the 1st press printing Foo, 2nd press printing Bar.&lt;br /&gt;
&lt;br /&gt;
Additionally &amp;#039;&amp;#039;&amp;#039;KeyChains&amp;#039;&amp;#039;&amp;#039; are now used for several defaults:&lt;br /&gt;
* Double hitting drawbutton sets label&lt;br /&gt;
* Switching between ally, spec &amp;amp; all chat is now done by double hitting &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;shift&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ctrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;alt+return&amp;lt;/code&amp;gt; now toggles fullscreen (default shortcut for fullscreen toggle on most OS)&lt;br /&gt;
&lt;br /&gt;
== 104.0 ==&lt;br /&gt;
In 104.0 the default bindings for chat switching changed again;&lt;br /&gt;
* &amp;lt;code&amp;gt;alt+ctrl+(a,a)&amp;lt;/code&amp;gt; now toggles chatswitchally&lt;br /&gt;
* &amp;lt;code&amp;gt;alt+ctrl+(s,s)&amp;lt;/code&amp;gt; now toggles chatswitchspec&lt;br /&gt;
* &amp;lt;code&amp;gt;chatswitchall&amp;lt;/code&amp;gt; now has to be bound manually&lt;br /&gt;
&lt;br /&gt;
==selections==&lt;br /&gt;
For details consult the source: SelectionKeyHandler.cpp. &lt;br /&gt;
&lt;br /&gt;
In the following, &amp;quot;+&amp;quot; and &amp;quot;_&amp;quot; are taken as literal plus and underscore characters, respectively. &amp;quot;|&amp;quot; means &amp;quot;or&amp;quot;, and &amp;quot;[...]&amp;quot; means that ... is optional.&lt;br /&gt;
&lt;br /&gt;
uikeys.txt has the format&lt;br /&gt;
 KEY SOURCE+FILTER+CONCLUSION+&lt;br /&gt;
&amp;quot;SOURCE+FILTER+CONCLUSION+&amp;quot; will be called the &amp;#039;&amp;#039;selector&amp;#039;&amp;#039;.&lt;br /&gt;
Generally, all elements of the selector are separated by _, where the + does not count as a separator on its own. You&amp;#039;ll see what I mean.&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* SOURCE, FILTER and CONCLUSION are case sensitive, at least sometimes&lt;br /&gt;
* Spaces are significant. Do not insert any spaces in the selector string!&lt;br /&gt;
* Do not use a KEY that has already been bound to something else (this holds for SelectionEditor too).&lt;br /&gt;
&lt;br /&gt;
The format for KEY is different from uikeys.txt: Use a combination of &amp;lt;code&amp;gt;Shift&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Control&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Alt&amp;lt;/code&amp;gt; followed by a key A-Z or 0-9, all separated by an underscore _.&lt;br /&gt;
Example:&lt;br /&gt;
 Control_W&lt;br /&gt;
 Alt_Shift_0&lt;br /&gt;
&lt;br /&gt;
SOURCE describes the set of units that you want to filter and pick a selection from.&lt;br /&gt;
It can be one of&lt;br /&gt;
* &amp;lt;code&amp;gt;AllMap&amp;lt;/code&amp;gt;: obvious&lt;br /&gt;
* &amp;lt;code&amp;gt;Visible&amp;lt;/code&amp;gt;: obvious&lt;br /&gt;
* &amp;lt;code&amp;gt;FromMouse_D&amp;lt;/code&amp;gt;, where D is some number: all units that are at most a distance of D away from the mouse cursor&lt;br /&gt;
* &amp;lt;code&amp;gt;PrevSelection&amp;lt;/code&amp;gt;: the previous selection; that is, the one active before you hit the selection key&lt;br /&gt;
&lt;br /&gt;
FILTER is an arbitrarily long list of filters.&lt;br /&gt;
Every filter can be preceded by &amp;lt;code&amp;gt;Not&amp;lt;/code&amp;gt; to negate it.&lt;br /&gt;
You will still have to use a _ to separate the &amp;lt;code&amp;gt;Not&amp;lt;/code&amp;gt; from the filter, as in &amp;lt;code&amp;gt;Not_Commander&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here are the filters. Note that &amp;quot;units&amp;quot; generally means both buildings and units. Typing both got old real quick.&lt;br /&gt;
* &amp;lt;code&amp;gt;AbsoluteHealth_N&amp;lt;/code&amp;gt;: only units that have an absolute health &amp;gt; N&lt;br /&gt;
* &amp;lt;code&amp;gt;Aircraft&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Builder&amp;lt;/code&amp;gt;: only construction units&lt;br /&gt;
* &amp;lt;code&amp;gt;Building&amp;lt;/code&amp;gt;: only buildings&lt;br /&gt;
* &amp;lt;code&amp;gt;Category_C&amp;lt;/code&amp;gt;: only units of category C -- XXX what are the categories?&lt;br /&gt;
* &amp;lt;code&amp;gt;Commander&amp;lt;/code&amp;gt;: do not works since at least version 104&lt;br /&gt;
* &amp;lt;code&amp;gt;Idle&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;InHotkeyGroup&amp;lt;/code&amp;gt;: only units that are in a group&lt;br /&gt;
* &amp;lt;code&amp;gt;InPrevSel&amp;lt;/code&amp;gt;: only units of the same type as a unit in the previous selection&lt;br /&gt;
* &amp;lt;code&amp;gt;NameContain_S&amp;lt;/code&amp;gt;: only units whose name contains the string S&lt;br /&gt;
* &amp;lt;code&amp;gt;Radar&amp;lt;/code&amp;gt;: only units with either radar, sonar, or a jammer&lt;br /&gt;
* &amp;lt;code&amp;gt;RelativeHealth_P&amp;lt;/code&amp;gt;: only units that have health &amp;gt; P percent&lt;br /&gt;
* &amp;lt;code&amp;gt;Transport&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Waiting&amp;lt;/code&amp;gt;: only units that are under a wait command (usually W)&lt;br /&gt;
* &amp;lt;code&amp;gt;WeaponRange_D&amp;lt;/code&amp;gt;: only units that have a weapon range &amp;gt; D&lt;br /&gt;
* &amp;lt;code&amp;gt;Weapons&amp;lt;/code&amp;gt;: only units that have weapons&lt;br /&gt;
&lt;br /&gt;
CONCLUSION is&lt;br /&gt;
 [_ClearSelection]_HOWMANY&lt;br /&gt;
If you specify &amp;lt;code&amp;gt;ClearSelection&amp;lt;/code&amp;gt;, your new selection will replace the old one; otherwise, it will just add to it.&lt;br /&gt;
HOWMANY must be exactly one of &lt;br /&gt;
* &amp;lt;code&amp;gt;SelectAll&amp;lt;/code&amp;gt;: all units&lt;br /&gt;
* &amp;lt;code&amp;gt;SelectOne&amp;lt;/code&amp;gt;: one unit, will also center the camera on that unit&lt;br /&gt;
* &amp;lt;code&amp;gt;SelectNum_N&amp;lt;/code&amp;gt;: at most N units -- XXX I think this includes the previously selected units (without ClearSelection), check!&lt;br /&gt;
* &amp;lt;code&amp;gt;SelectPart_P&amp;lt;/code&amp;gt;: P percent of the units&lt;br /&gt;
&lt;br /&gt;
Recall that between every two tokens, there &amp;#039;&amp;#039;must&amp;#039;&amp;#039; be an underscore _, even if there is also a +. Another way to put it is that before every word in your selector except the SOURCE, there must be an underscore.&lt;br /&gt;
&lt;br /&gt;
Some examples, first the standard bindings. Again, &amp;quot;unit&amp;quot; also includes buildings.&lt;br /&gt;
 Control_A AllMap++_ClearSelection_SelectAll+&lt;br /&gt;
Selects everything on the entire map.&lt;br /&gt;
 Control_B AllMap+_Builder_Idle+_ClearSelection_SelectOne+&lt;br /&gt;
Selects any (one) idle builder on entire map.&lt;br /&gt;
 Control_C AllMap+_Commander+_ClearSelection_SelectOne+&lt;br /&gt;
Selects your commander.&lt;br /&gt;
 Control_R AllMap+_Radar+_ClearSelection_SelectAll+&lt;br /&gt;
Selects all units with radar/sonar/jammer.&lt;br /&gt;
 Control_W AllMap+_Not_Aircraft_Weapons+_ClearSelection_SelectAll+&lt;br /&gt;
Selects all non-aircraft armed units&lt;br /&gt;
 Control_Z AllMap+_InPrevSel+_ClearSelection_SelectAll+&lt;br /&gt;
Selects all units of a type that was in your previous selection.&lt;br /&gt;
&lt;br /&gt;
Note that up to now, all keys said &amp;lt;code&amp;gt;ClearSelection&amp;lt;/code&amp;gt;, hence they replaced your old selection.&lt;br /&gt;
 Control_X AllMap+_InPrevSel_Not_InHotkeyGroup+_SelectAll+&lt;br /&gt;
Selects all units of a type that was in your previous selection, unless they are already in a hotkey group. (Use case: if you have a set of tanks on group 1, and have since produced more of the same type(s), you could hit 1 Ctrl+V Ctrl+1 to include them in the group.)&lt;br /&gt;
 Control_V AllMap+_Not_Builder_Not_Commander_InPrevSel_Not_InHotkeyGroup+_SelectAll+&lt;br /&gt;
Selects all units of a type that was in your previous selection, except builders and commander, unless they are already in a hotkey group.&lt;br /&gt;
&lt;br /&gt;
And finally, an example from the forums:&lt;br /&gt;
 Control_W PrevSelection+_Not_Building_Not_RelativeHealth_30+_ClearSelection_SelectAll+&lt;br /&gt;
From your previous selection, leaves everything that is below 30% health, and not a building. (Use this to quickly retreat damaged units.)&lt;br /&gt;
&lt;br /&gt;
==make uikeys.txt read only for SpringSettings==&lt;br /&gt;
&lt;br /&gt;
If you wish to aviod [[SpringSettings]] parsing and possibly ovewriting your uikeys.txt, add this line to uikeys.txt:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;//SPRINGSETTINGS DO NOT TOUCH&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Help]]&lt;/div&gt;</summary>
		<author><name>Interwiki&gt;Tulipe</name></author>
	</entry>
</feed>