{"id":8898,"date":"2025-12-15T11:45:04","date_gmt":"2025-12-15T11:45:04","guid":{"rendered":"https:\/\/www.dyalog.com\/blog\/?p=8898"},"modified":"2025-12-15T12:24:22","modified_gmt":"2025-12-15T12:24:22","slug":"taking-back-ctrl-keyboard-shortcuts-in-the-dyalog-ides","status":"publish","type":"post","link":"https:\/\/www.dyalog.com\/blog\/2025\/12\/taking-back-ctrl-keyboard-shortcuts-in-the-dyalog-ides\/","title":{"rendered":"Taking Back Ctrl: Keyboard Shortcuts in the Dyalog IDEs"},"content":{"rendered":"<p>In this blog post post I describe:<\/p>\n<ul>\n<li>how to use standard <kbd>Ctrl<\/kbd> keyboard shortcuts when using Dyalog on all platforms.<\/li>\n<li>little-known APL input features for Microsoft Windows.<\/li>\n<li>alternative input methods that do not use the <kbd>Ctrl<\/kbd> key for APL input.<\/li>\n<\/ul>\n<p>I don&#8217;t personally use the official Dyalog IME for Microsoft Windows as my daily APL input method. My only complaints are that it forces me to use the <kbd>Ctrl<\/kbd> key for APL input, which conflicts with conventional shortcuts for most applications, and for some reason it puts an additional item in my input method list because I have a Japanese input enabled, even though that is not a supported layout for the IME!<\/p>\n<p>I am a fan of <a href=\"https:\/\/github.com\/abrudz\/kbd\" target=\"_blank\" rel=\"noopener\">Ad\u00e1m&#8217;s AltGr keyboard for Windows<\/a> for a couple of reasons. It is based on the <a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=102134\" target=\"_blank\" rel=\"noopener\">Microsoft Keyboard Layout Creator (MSKLC)<\/a>, and appears to work in newer Universal Windows Platform (UWP) apps and with the default On-Screen Keyboard on Windows. It also has accents and <a href=\"https:\/\/dfns.dyalog.com\/c_draw.htm\" target=\"_blank\" rel=\"noopener\">box-drawing characters<\/a>. However, support might be unreliable, because Microsoft do not officially support MSKLC on Windows 11, and there are rumoured issues with using it on ARM machines. Its main drawback is the limited choice of shifting keys, which can make it difficult to use with certain keyboard layouts or in certain applications. Personally, I am fond of using <kbd>Caps Lock<\/kbd> as my primary APL shifting key, because it is rare these days that I need to TYPE A BUNCH OF THINGS IN ALL CAPITALS \u2013 it feels like shouting.<\/p>\n<p>I used to do this by mapping <kbd>Caps Lock<\/kbd> to <kbd>Alt Gr<\/kbd> through some registry trickery. However, <a href=\"https:\/\/github.com\/rikedyp\/kanata-apl\" target=\"_blank\" rel=\"noopener\">Kanata<\/a> allows me to use almost any keys I like. I now have <kbd>Caps Lock<\/kbd> and <kbd>Right Ctrl<\/kbd> as APL shifting keys. In addition, I can double-tap <kbd>Caps Lock<\/kbd> to toggle it, so I can SHOUT OVER TEXT if I really need to. It&#8217;s cross-platform, so my single APL Kanata configuration gives me a consistent experience even when using my Linux virtual machine. There are still many features on my wish list for a comprehensive input method editor, but this is quite good for now (I wonder if anybody is able to adapt <a href=\"https:\/\/github.com\/google\/mozc\" target=\"_blank\" rel=\"noopener\">mozc<\/a> for APL?).<\/p>\n<p>Whichever <a href=\"https:\/\/aplwiki.com\/wiki\/Typing_glyphs\" target=\"_blank\" rel=\"noopener\">keyboard input method<\/a> you use, once you are not using <kbd>Ctrl<\/kbd> for APL input you will be very glad to get back your beloved, conventional keyboard shortcuts for use in the Dyalog editor.<\/p>\n<p>In the Dyalog IDE for Microsoft Windows, you can set keyboard shortcuts by selecting <strong>Options<\/strong>\u00a0&gt;\u00a0<strong>Configure<\/strong> in the Session&#8217;s menu bar, then selecting the\u00a0<strong>Keyboard Shortcuts<\/strong> tab. From here, you can click on a code that corresponds to an action for which you want to set a shortcut.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8900\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2025\/12\/shortcuts-win-ide-1.png\" alt=\"Dyalog IME for Microsoft Windows Configuration Dialog\" width=\"684\" height=\"494\" \/><\/p>\n<p>These are keyboard shortcuts recognised by the Dyalog development environment.<\/p>\n<p>I set:<\/p>\n<ul>\n<li>&lt;FX&gt; to <kbd>Ctrl<\/kbd>+<kbd>S<\/kbd> to save changes in the editor without closing it<\/li>\n<li>&lt;SA&gt; to <kbd>Ctrl<\/kbd>+<kbd>A<\/kbd> to select all text in a window<\/li>\n<li>&lt;CP&gt; to <kbd>Ctrl<\/kbd>+<kbd>C<\/kbd> to copy text<\/li>\n<li>&lt;CT&gt; to <kbd>Ctrl<\/kbd>+<kbd>X<\/kbd> to cut text<\/li>\n<li>&lt;PT&gt; to <kbd>Ctrl<\/kbd>+<kbd>V<\/kbd> to paste text<\/li>\n<li>&lt;SC&gt; to <kbd>Ctrl<\/kbd>+<kbd>F<\/kbd> to search and find text in the session log, editor, and debugger<\/li>\n<li>&lt;RP&gt; to <kbd>Ctrl<\/kbd>+<kbd>H<\/kbd> to search and replace text in the session log, editor, and debugger<\/li>\n<\/ul>\n<p>To help find these in the list, click on the <strong>Code<\/strong> column title to put them in alphabetical order.<\/p>\n<p>In Ride, only &lt;FX&gt; needs to be set, as the other shortcuts should default to this behaviour.<\/p>\n<p>Having said all that, the official Dyalog IME still has features that would be invaluable especially if I were a brand new user. You can read about these in the <a href=\"https:\/\/docs.dyalog.com\/20.0\/windows-ui-guide\/apl-keyboards\/#unicode-edition-and-the-dyalog-unicode-ime\" target=\"_blank\" rel=\"noopener\"><em>Dyalog for Microsoft Windows UI guide<\/em><\/a>\u00a0and configure them using the IDE by going to <strong>Options<\/strong>\u00a0&gt;\u00a0<strong>Configure<\/strong>\u00a0&gt;\u00a0<strong>Unicode Input<\/strong>\u00a0&gt;\u00a0<strong>Configure Layout<\/strong>. A little-known tip is that its backtick (also known as <em>introducer<\/em> or <em>prefix<\/em>) input method offers a searchable keyword menu, so that you can find glyphs by name or by the name of the function or operator it represents.<\/p>\n<div id=\"attachment_8903\" style=\"width: 423px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8903\" class=\"size-full wp-image-8903\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2025\/10\/ime-search.png\" alt=\"\" width=\"413\" height=\"146\" srcset=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2025\/10\/ime-search.png 413w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2025\/10\/ime-search-300x106.png 300w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><p id=\"caption-attachment-8903\" class=\"wp-caption-text\">After setting the prefix introducer key to <kbd>#<\/kbd> (octothorpe \/ hash), pressing twice and typing &#8220;rot&#8221; shows suggestions for the glyphs <code class=\"language-apl\">\u233d<\/code> and <code class=\"language-apl\">\u2296<\/code> with the keywords &#8220;rotate&#8221; and &#8220;rotatefirst&#8221;.<\/p><\/div>\n<p>There&#8217;s also the wonderful overstrike feature. Once upon a time, APL was executed on remote machines accessed using the IBM Selectric Teletype typewriter; you can see this in <a href=\"https:\/\/www.youtube.com\/watch?v=_DTpQ4Kk2wA\" target=\"_blank\" rel=\"noopener\">this demonstration from 1975<\/a>. Certain characters would be composed by typing one symbol over another, such as printing a vertical bar (<code class=\"language-apl\">|<\/code>) over a circle (<code class=\"language-apl\">\u25cb<\/code>) to produce the circle-bar glyph for rotate\/reverse (<code class=\"language-apl\">\u233d<\/code>).<\/p>\n<p>Its basic usage is a feature of the IDE for Microsoft Windows; the IME isn&#8217;t required at all. If you press the <kbd>Ins<\/kbd> key on your keyboard, it usually toggles &#8220;insert&#8221; or &#8220;overtype&#8221; mode. This is typically indicated by the vertical bar text cursor changing into an underbar. Typing will then replace existing text indicated by the cursor. With overstrikes enabled, APL glyphs can be created using other glyphs!<\/p>\n<div id=\"attachment_9041\" style=\"width: 522px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9041\" class=\"size-full wp-image-9041\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2025\/10\/overstrike.gif\" alt=\"APL Glyph Overstrike Animation\" width=\"512\" height=\"256\" \/><p id=\"caption-attachment-9041\" class=\"wp-caption-text\"><kbd>Insert<\/kbd>, Slash (<code>\/<\/code>), <kbd>LeftArrow<\/kbd>, Dash (<code>-<\/code>), Circle (<code>\u25cb<\/code>), <kbd>LeftArrow<\/kbd>, Stile (<code>|<\/code>)<\/p><\/div>\n<p>The IME allows you to use this in applications other than Dyalog by ticking <strong>Enable Overstrikes<\/strong> from the IME settings. You can <a href=\"https:\/\/docs.dyalog.com\/20.0\/windows-ui-guide\/ime-configuration\/#overstrikes\" target=\"_blank\" rel=\"noopener\">read the documentation<\/a> to learn more, but the basic mechanism is to use the <em>Overstrike Introducer Key<\/em> (default <kbd>Ctrl<\/kbd>+<kbd>Backspace<\/kbd>) followed by entering the two symbols to overstrike.<\/p>\n<div id=\"attachment_8947\" style=\"width: 482px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8947\" class=\"size-full wp-image-8947\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2025\/12\/ime-config.png\" alt=\"\" width=\"472\" height=\"377\" \/><p id=\"caption-attachment-8947\" class=\"wp-caption-text\">Settings menu for the Dyalog Input Method Editor<\/p><\/div>\n<p>For this post I just wanted to highlight aspects of APL input beyond the simple defaults. For more about using your keyboard with Dyalog, see Ad\u00e1m&#8217;s blog post about <a href=\"https:\/\/www.dyalog.com\/blog\/2020\/12\/enhanced-debugging-with-function-keys-evaluate-selection\/\">enhanced debugging keys<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post post I describe: how to use standard Ctrl keyboard shortcuts when using Dyalog on all platforms. little-known APL input features for Microsoft Windows. alternative input methods that do not use the Ctrl key for APL input. &hellip; <a href=\"https:\/\/www.dyalog.com\/blog\/2025\/12\/taking-back-ctrl-keyboard-shortcuts-in-the-dyalog-ides\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-8898","post","type-post","status-publish","format-standard","hentry","category-tips-tricks"],"_links":{"self":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts\/8898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/comments?post=8898"}],"version-history":[{"count":54,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts\/8898\/revisions"}],"predecessor-version":[{"id":9048,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts\/8898\/revisions\/9048"}],"wp:attachment":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/media?parent=8898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/categories?post=8898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/tags?post=8898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}