Improve manual landing pages

This commit is contained in:
Marc Froehlich
2026-07-06 03:00:18 +02:00
parent db83d6a9df
commit 248a7c0462
21 changed files with 3897 additions and 0 deletions
@@ -0,0 +1,189 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ manual.title }} | KST4Contest Manual</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="canonical" href="https://kst4contest.hamradioonline.de/manual/en/macros-and-variables/">
<meta property="og:type" content="website">
<meta property="og:title" content="{{ manual.title }} | KST4Contest Manual">
<meta property="og:description" content="KST4Contest manual page: {{ manual.title }}">
<meta property="og:url" content="https://kst4contest.hamradioonline.de/manual/en/macros-and-variables/">
<meta property="og:site_name" content="KST4Contest">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css">
</head>
<body>
<header class="site-header">
<a class="brand" href="/">KST4Contest</a>
<nav>
<a href="/features/">Features</a>
<a href="/download/">Download</a>
<a href="/manual/">Manual</a>
<a href="/screenshots/">Screenshots</a>
<a href="/news/">News</a>
<a href="https://github.com/praktimarc/kst4contest">GitHub</a>
<a href="/faq/">FAQ</a>
</nav>
</header>
<main>
<section class="section">
<div class="card manual-content">
<p><a href="/manual/en/">← Back to manual overview</a></p>
<h1>Macros and Variables</h1>
<h1 id="macros-and-variables" tabindex="-1"><a class="header-anchor" href="#macros-and-variables">Macros and Variables</a></h1>
<blockquote>
<p>🇬🇧 You are reading the English version | 🇩🇪 <a href="de-Makros-und-Variablen">Deutsche Version</a></p>
</blockquote>
<p>KST4Contest offers a flexible system of text snippets, shortcuts and built-in variables that significantly speed up the chat workflow during contests.</p>
<hr>
<h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview">Overview</a></h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Access</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Shortcuts</strong></td>
<td>Button in the toolbar</td>
<td>Quick text insert into the send field</td>
</tr>
<tr>
<td><strong>Snippets</strong></td>
<td>Right-click / Ctrl+1…0</td>
<td>Text building blocks, optional PM sending</td>
</tr>
<tr>
<td><strong>Variables</strong></td>
<td>Usable in all text fields</td>
<td>Dynamic values (QRG, locator, AP data)</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="shortcuts-(quick-access-buttons)" tabindex="-1"><a class="header-anchor" href="#shortcuts-(quick-access-buttons)">Shortcuts (Quick-Access Buttons)</a></h2>
<p>Configurable in Preferences → <strong>Shortcut Settings</strong>.</p>
<ul>
<li>Each configured text creates <strong>one button</strong> in the user interface.</li>
<li>Clicking a button inserts the text into the <strong>send field</strong>.</li>
<li><strong>All variables</strong> can be used in shortcuts and are resolved immediately when inserted.</li>
<li>Longer texts are also possible.</li>
</ul>
<p><strong>Tip</strong>: Set up frequently used abbreviations like “pse”, “rrr”, “tnx”, “73” as shortcuts.</p>
<hr>
<h2 id="snippets-(text-building-blocks)" tabindex="-1"><a class="header-anchor" href="#snippets-(text-building-blocks)">Snippets (Text Building Blocks)</a></h2>
<p>Configurable in Preferences → <strong>Snippet Settings</strong>.</p>
<h3 id="access" tabindex="-1"><a class="header-anchor" href="#access">Access</a></h3>
<ul>
<li><strong>Right-click</strong> on a callsign in the user list</li>
<li><strong>Right-click</strong> in the CQ message table</li>
<li><strong>Right-click</strong> in the PM message table</li>
<li><strong>Keyboard shortcuts</strong>: <code>Ctrl+1</code> to <code>Ctrl+0</code> for the first 10 snippets</li>
</ul>
<h3 id="behaviour-with-a-selected-callsign" tabindex="-1"><a class="header-anchor" href="#behaviour-with-a-selected-callsign">Behaviour with a Selected Callsign</a></h3>
<p>When a callsign is selected in the user list, the snippet is addressed as a <strong>private message</strong>:</p>
<pre><code>/CQ CALLSIGN &lt;snippet text&gt;
</code></pre>
<p>Then <strong>Enter</strong> can be pressed to send directly even if the send field does not have focus.</p>
<h3 id="hardware-macro-keyboard" tabindex="-1"><a class="header-anchor" href="#hardware-macro-keyboard">Hardware Macro Keyboard</a></h3>
<p><em>(Idea by IU3OAR, Gianluca Costantino)</em></p>
<p>The key combinations <code>Ctrl+1</code> to <code>Ctrl+0</code> can be assigned to a programmable macro keyboard. One key press triggers the snippet, another press (mapped to Enter) sends it immediately. In contest operation this saves considerable time.</p>
<h3 id="predefined-default-snippets" tabindex="-1"><a class="header-anchor" href="#predefined-default-snippets">Predefined Default Snippets</a></h3>
<p>On first start, some snippets are pre-configured, e.g.:</p>
<ul>
<li><code>Hi OM, try sked?</code></li>
<li><code>I am calling cq ur dir, pse lsn to me at MYQRG</code></li>
<li><code>pse ur qrg?</code></li>
<li><code>rrr, I move to your qrg nw, pse ant dir me</code></li>
</ul>
<p>These can be customised or deleted in the Preferences.</p>
<hr>
<h2 id="variables" tabindex="-1"><a class="header-anchor" href="#variables">Variables</a></h2>
<p>Variables in written texts (snippets, shortcuts, beacon, send field) are replaced by their current values at runtime. Simply type the variable name in <strong>uppercase</strong> in the text.</p>
<h3 id="myqrg" tabindex="-1"><a class="header-anchor" href="#myqrg">MYQRG</a></h3>
<p>Replaced by the current transceiver frequency.</p>
<ul>
<li>Source: TRX sync via UDP from the logging software (if enabled)</li>
<li>Fallback: Manually entered value in the MYQRG text field to the right of the send button</li>
<li>Format: <code>144.388.03</code></li>
</ul>
<p><strong>Example</strong>: <code>calling cq at MYQRG</code><code>calling cq at 144.388.03</code></p>
<h3 id="myqrgshort" tabindex="-1"><a class="header-anchor" href="#myqrgshort">MYQRGSHORT</a></h3>
<p>Like MYQRG, but only the first 7 characters.</p>
<ul>
<li>Format: <code>144.388</code></li>
</ul>
<p><strong>Example</strong>: <code>qrg: MYQRGSHORT</code><code>qrg: 144.388</code></p>
<h3 id="mylocator" tabindex="-1"><a class="header-anchor" href="#mylocator">MYLOCATOR</a></h3>
<p>Replaced by your own Maidenhead locator (6 characters).</p>
<ul>
<li>Format: <code>JO51IJ</code></li>
</ul>
<p><strong>Example</strong>: <code>my loc: MYLOCATOR</code><code>my loc: JO51IJ</code></p>
<h3 id="mylocatorshort" tabindex="-1"><a class="header-anchor" href="#mylocatorshort">MYLOCATORSHORT</a></h3>
<p>Like MYLOCATOR, but only the first 4 characters.</p>
<ul>
<li>Format: <code>JO51</code></li>
</ul>
<p><strong>Example</strong>: <code>loc: MYLOCATORSHORT</code><code>loc: JO51</code></p>
<h3 id="qrzname" tabindex="-1"><a class="header-anchor" href="#qrzname">QRZNAME</a></h3>
<p>Replaced by the <strong>name</strong> of the currently selected station from the chat name field.</p>
<p><strong>Example</strong>: <code>Hi QRZNAME, sked?</code><code>Hi Gianluca, sked?</code></p>
<h3 id="firstap" tabindex="-1"><a class="header-anchor" href="#firstap">FIRSTAP</a></h3>
<p>Replaced by data of the first reflectable aircraft to the selected station (if available).</p>
<ul>
<li>Condition: AirScout is active and an aircraft is available.</li>
<li>Example format: <code>a very big AP in 1 min</code></li>
</ul>
<p><strong>Example</strong>: <code>AP info: FIRSTAP</code><code>AP info: a very big AP in 1 min</code></p>
<h3 id="secondap" tabindex="-1"><a class="header-anchor" href="#secondap">SECONDAP</a></h3>
<p>Like FIRSTAP, but for the second available aircraft.</p>
<ul>
<li>Example format: <code>Next big AP in 9 min</code></li>
</ul>
<p><strong>Example</strong>: <code>also: SECONDAP</code><code>also: Next big AP in 9 min</code></p>
<h3 id="myqtf-(planned-for-v1.3)" tabindex="-1"><a class="header-anchor" href="#myqtf-(planned-for-v1.3)">MYQTF <em>(planned for v1.3)</em></a></h3>
<p>Replaced by the current antenna direction in words (e.g. <code>north</code>, <code>north east</code>, <code>east</code>, …).</p>
<ul>
<li>Source: Degree value in the MYQTF input field (to the right of the MYQRG field)</li>
</ul>
<hr>
<h2 id="variables-in-the-beacon" tabindex="-1"><a class="header-anchor" href="#variables-in-the-beacon">Variables in the Beacon</a></h2>
<p>All variables can also be used in the <strong>automatic beacon</strong> (interval messages). Recommended beacon configuration:</p>
<pre><code>calling cq at MYQRG, loc MYLOCATOR, GL all!
</code></pre>
<p>Since KST4Contest automatically reads QRG data from chat messages: if other stations also use KST4Contest, they will immediately see your QRG in the QRG column of their user list.</p>
<hr>
<h2 id="example-contest-workflow-with-macros" tabindex="-1"><a class="header-anchor" href="#example-contest-workflow-with-macros">Example Contest Workflow with Macros</a></h2>
<ol>
<li>Select a station in the user list → callsign is now pre-selected.</li>
<li>Press <code>Ctrl+1</code> → Snippet “Hi OM, try sked?” is addressed as a PM.</li>
<li>Press Enter → Message sent.</li>
<li>Station replies with frequency → QRG column is automatically filled.</li>
<li>Press <code>Ctrl+2</code> → Snippet “I am calling cq ur dir, pse lsn to me at 144.388” (MYQRG resolved).</li>
<li>Press Enter → Sent.</li>
</ol>
<p>No manual typing, no errors, no interruption to CQ calling.</p>
</div>
</section>
</main>
<footer class="site-footer">
<p>KST4Contest ON4KST contest workflow for VHF/UHF/SHF operators.</p>
</footer>
</body>
</html>