<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[List of free keyboard shortcuts]]></title><description><![CDATA[<p dir="auto">When I create a command using the <em>Run menu,</em> the ideal is to save it by assigning a shortcut key. The problem is that you no longer know what the <code>available</code> Free shorcuts combinations are.</p>
<p dir="auto"><strong>Ideally,</strong> in the <em>Settings &gt;Shorcuts Mapper…</em> option, the lists <strong>will</strong> present all the assigned and <strong>unassigned keys,</strong> and that like the windows explorer these lists would be sorted by the column whose header is clicked.</p>
<p dir="auto">As this <strong>is not a requirement!</strong>, only is another idea…, "Such a list in one of the entries of the User manual, organized by function and by shortcut combination,  <em>including free combinations!..</em></p>
<p dir="auto">Do the Notepad++ have any <code>.xml</code> file where you can find out something about that availability?.</p>
<p dir="auto">For what?<br />
Suppose I need 5 contiguous key combinations to assign each one a Web browser.</p>
]]></description><link>https://community.notepad-plus-plus.org/topic/23749/list-of-free-keyboard-shortcuts</link><generator>RSS for Node</generator><lastBuildDate>Fri, 12 Jun 2026 05:20:41 GMT</lastBuildDate><atom:link href="https://community.notepad-plus-plus.org/topic/23749.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Nov 2022 20:07:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to List of free keyboard shortcuts on Fri, 15 Mar 2024 13:19:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/alan-kilborn" aria-label="Profile: Alan-Kilborn">@<bdi>Alan-Kilborn</bdi></a> said in <a href="/post/93582">List of free keyboard shortcuts</a>:</p>
<blockquote>
<p dir="auto">Interesting; I’ve never noticed that “key” before.<br />
And I still don’t know what it is. :-P</p>
</blockquote>
<p dir="auto">VK_OEM_102.  It’s a key on some international keyboards, not on standard US keyboards.</p>
<p dir="auto">The <a href="/post/56067">third post</a> of the <a href="/topic/19734">shortcuts FAQ</a> has the <code>&lt;&gt;</code> listed, and you’ll see it has a description in the French column but not US column.  And <a class="plugin-mentions-user plugin-mentions-a" href="/user/dinkumoil" aria-label="Profile: dinkumoil">@<bdi>dinkumoil</bdi></a>’s <a href="/post/91374">German description</a> and <a class="plugin-mentions-user plugin-mentions-a" href="/user/notdodgeball" aria-label="Profile: notdodgeball">@<bdi>notdodgeball</bdi></a>’s <a href="/post/93262">Portuguese description</a> show what the key maps to on those keyboards</p>
]]></description><link>https://community.notepad-plus-plus.org/post/93583</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/93583</guid><dc:creator><![CDATA[PeterJones]]></dc:creator><pubDate>Fri, 15 Mar 2024 13:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Fri, 15 Mar 2024 13:08:59 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/notdodgeball" aria-label="Profile: notdodgeball">@<bdi>notdodgeball</bdi></a></p>
<p dir="auto">Interesting; I’ve never noticed that “key” before.<br />
And I still don’t know what it is. :-P</p>
]]></description><link>https://community.notepad-plus-plus.org/post/93582</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/93582</guid><dc:creator><![CDATA[Alan Kilborn]]></dc:creator><pubDate>Fri, 15 Mar 2024 13:08:59 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Fri, 15 Mar 2024 13:11:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/alan-kilborn" aria-label="Profile: Alan-Kilborn">@<bdi>Alan-Kilborn</bdi></a>, this one:</p>
<p dir="auto"><img src="/assets/uploads/files/1710507904863-4a94f874-9c6b-4c37-ac56-dd38d52eba54-image.png" alt="4a94f874-9c6b-4c37-ac56-dd38d52eba54-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">It’s not really a key per se, unless you are using <a href="https://en.wikipedia.org/wiki/German_keyboard_layout" rel="nofollow ugc">the German layout</a>, not sure how it’s handled in the US layout though.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/93581</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/93581</guid><dc:creator><![CDATA[notdodgeball]]></dc:creator><pubDate>Fri, 15 Mar 2024 13:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Fri, 15 Mar 2024 12:54:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/notdodgeball" aria-label="Profile: notdodgeball">@<bdi>notdodgeball</bdi></a> said in <a href="/post/93578">List of free keyboard shortcuts</a>:</p>
<blockquote>
<p dir="auto">and also added the &lt;&gt; “key”, which was missing</p>
</blockquote>
<p dir="auto">What’s the “&lt;&gt; key” ?</p>
]]></description><link>https://community.notepad-plus-plus.org/post/93579</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/93579</guid><dc:creator><![CDATA[Alan Kilborn]]></dc:creator><pubDate>Fri, 15 Mar 2024 12:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Fri, 15 Mar 2024 12:51:33 GMT]]></title><description><![CDATA[<p dir="auto">I can’t thank <a class="plugin-mentions-user plugin-mentions-a" href="/user/alan-kilborn" aria-label="Profile: Alan-Kilborn">@<bdi>Alan-Kilborn</bdi></a> enough for his script, it really helped me. It’s anxiety inducing setting a custom shortcut not knowing if there is a better and more ergonomic one out there going to waste, for me at least.</p>
<p dir="auto">With the new mutli-select shortcuts the script may fail because of the colon char in some of it’s descriptions. So I fixed that and also added the <strong>&lt;&gt;</strong> “key”, which was missing.</p>
<p dir="auto">I also joined them as one, hope that’s ok:</p>
<pre><code># -*- coding: utf-8 -*-
# Authors: Ekopalypse and Alan Kilborn
# https://community.notepad-plus-plus.org/topic/23749/list-of-free-keyboard-shortcuts

from threading import Thread
import re
import ctypes
import ctypes.wintypes as wintypes
import time

def ek():
    user32 = ctypes.WinDLL('user32', use_last_error=True)

    def start_sk_dialog():
        notepad.menuCommand(MENUCOMMAND.SETTING_SHORTCUT_MAPPER)

    sk_mapper = Thread(target=start_sk_dialog)
    sk_mapper.start()
    time.sleep(0.5)

    WM_USER = 1024
    WM_CLOSE = 16

    TCM_FIRST = 4864
    TCM_GETITEMCOUNT = (TCM_FIRST + 4)
    TCM_SETCURSEL = (TCM_FIRST + 12)

    BABYGRID_USER = (WM_USER + 7000)
    BGM_GETCELLDATA = BABYGRID_USER + 4
    BGM_GETROWS = BABYGRID_USER + 23

    class BGCELL(ctypes.Structure):
        _fields_ = [('row', wintypes.INT),
                    ('col', wintypes.INT)]

    cell_buffer = ctypes.create_unicode_buffer(1000)
    bgcell = BGCELL()

    sk_mapper_hwnd = user32.FindWindowW(None, u'Shortcut mapper')
    if not sk_mapper_hwnd:
        print('Shortcut mapper was not found')
        return

    sys_tab_hwnd = user32.FindWindowExW(sk_mapper_hwnd, None, u'SysTabControl32', None)
    if not sys_tab_hwnd:
        print('SysTabControl32 was not found')
        return

    item_count = user32.SendMessageW(sys_tab_hwnd, TCM_GETITEMCOUNT, 0, 0)
    if not item_count:
        print('TCM_GETITEMCOUNT returned 0')
        return

    babygrid = user32.FindWindowExW(sk_mapper_hwnd, None, u'BABYGRID', None)
    if not babygrid:
        print('BABYGRID was not found')
        return


    shortcuts = []
    for tab in range(item_count):
        rows = user32.SendMessageW(babygrid, BGM_GETROWS, 0, 0)

        for i in range(1, rows + 1):
            shortcut = []

            for j in range(1, 3):
                bgcell.row = i
                bgcell.col = j
                user32.SendMessageW(babygrid,
                                    BGM_GETCELLDATA,
                                    ctypes.byref(bgcell),
                                    cell_buffer)
                shortcut.append(cell_buffer.value)

            if shortcut[1]:
                shortcuts.append(shortcut)

        user32.SetForegroundWindow(sk_mapper_hwnd)
        user32.SendMessageW(sys_tab_hwnd, TCM_SETCURSEL, tab, 0)
        user32.keybd_event(0x27, 0, 0, 0)
        user32.keybd_event(0x27, 0, 2, 0)
        time.sleep(.1)

    user32.SendMessageW(sk_mapper_hwnd, WM_CLOSE, 0, 0)

    _max_length = len(max([x[0] for x in shortcuts], key=len))

    editor.appendText('\r\n'.join(['{0:&lt;{2}} : {1}'.format(x[0],
                                                        x[1],
                                                        _max_length) for x in shortcuts]))

def ak():
        basekey_list = [
            'Num *',
            'Num +',
            'Num -',
            'Num .',
            'Num /',
            'Backspace',
            'Tab',
            'Enter',
            'Esc',
            'Spacebar',
            'Page up',
            'Page down',
            'End',
            'Home',
            'Left',
            'Up',
            'Right',
            'Down',
            'INS',
            'DEL',
            '~',
            '-',
            '=',
            '[',
            ']',
            ';',
            "'",
            '\\',
            ',',
            '.',
            '/',
            '&lt;&gt;',
        ]
        basekeys_that_require_modifier_list = [
            'Spacebar',
            '~',
            '-',
            '=',
            '[',
            ']',
            ';',
            "'",
            '\\',
            ',',
            '.',
            '/',
            '&lt;&gt;',
        ]
        for ch in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789':
            basekey_list.append(ch)
            basekeys_that_require_modifier_list.append(ch)
        for f in range(12): basekey_list.append('F{}'.format(f + 1))  # function keys
        if 1:  # numeric keypad keys
            for np_numbers in range(10): basekey_list.append('Numpad {}'.format(np_numbers))
            for np_other in '*+-./': basekey_list.append('Num {}'.format(np_other))
        modifier_list_by_basekey_dict = {}
        ctrl_bitweight = 0b0100; alt_bitweight = 0b0010; shift_bitweight = 0b0001; no_modifier_bitweight = 0b1000
        for bk in basekey_list:
            modifier_list_by_basekey_dict[bk] = []
            if bk in basekeys_that_require_modifier_list:
                modifier_list_by_basekey_dict[bk].extend([ no_modifier_bitweight, shift_bitweight ])
        input_text = editor.getText()
        for input_line in input_text.splitlines():
            (command, shortcut_s) = input_line.rsplit(':',1)
            shortcut_s = shortcut_s.strip()
            for sc in shortcut_s.split(' or '):
                m = re.match(r'^(?:(?P&lt;ctrl&gt;Ctrl)\+)?(?:(?P&lt;alt&gt;Alt)\+)?(?:(?P&lt;shift&gt;Shift)\+)?(?P&lt;basekey&gt;.+)', sc)
                assert(m)
                ncas_bitweights = 0b0000
                if m.group(1): ncas_bitweights |= ctrl_bitweight
                if m.group(2): ncas_bitweights |= alt_bitweight
                if m.group(3): ncas_bitweights |= shift_bitweight
                if not m.group(1) and not m.group(2) and not m.group(3): ncas_bitweights |= no_modifier_bitweight
                basekey = m.group(4)
                if not basekey in modifier_list_by_basekey_dict:
                    print('encountered basekey not in the list in the code:', basekey)
                    assert 0
                modifier_list_by_basekey_dict[basekey].append(ncas_bitweights)
        basekey_max_length = len(max([x for x in modifier_list_by_basekey_dict], key=len))
        possible_modifiers_list = [ 'Unmodified', 'Shift', 'Alt', 'Alt+Shift', 'Ctrl', 'Ctrl+Shift', 'Ctrl+Alt', 'Ctrl+Alt+Shift' ]
        output_line_list = []
        for bk in modifier_list_by_basekey_dict:
            unassigned_modifiers_set_str = ''
            for mod_index in range(len(possible_modifiers_list)):
                hacked_mod_index = no_modifier_bitweight if mod_index == 0 else mod_index  # really bad hack :-(
                if hacked_mod_index not in modifier_list_by_basekey_dict[bk]:
                    unassigned_modifiers_set_str += possible_modifiers_list[mod_index] + ', '
            unassigned_modifiers_set_str = unassigned_modifiers_set_str[:-2]  # remove trailing , and space
            if len(unassigned_modifiers_set_str) == 0: unassigned_modifiers_set_str = 'All-combos-are-assigned!'
            out_line = '{bk:&lt;{bkml}} {ums}'.format(bk=bk, bkml=basekey_max_length, ums=unassigned_modifiers_set_str)
            output_line_list.append(out_line)
        output_line_list.sort()
        output_line_list.insert(0, '\n\nBASE KEY AND UNASSIGNED MODIFIER SHORTCUTS:\n')
        editor.appendText('\n'.join(output_line_list))

def main():
    notepad.new()
    ek()
    ak()
    editor.addText('ASSIGNED SHORTCUTS\n\n')
    # editor.setSavePoint()

main()

</code></pre>
]]></description><link>https://community.notepad-plus-plus.org/post/93578</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/93578</guid><dc:creator><![CDATA[notdodgeball]]></dc:creator><pubDate>Fri, 15 Mar 2024 12:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Mon, 21 Nov 2022 22:45:02 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/alan-kilborn" aria-label="Profile: Alan-Kilborn">@<bdi>Alan-Kilborn</bdi></a><br />
Hello:<br />
I am speechless, there are still quite a few unassigned keyboard shortcuts.<br />
I’m going to make a copy and save it in the same Notepad++ folder to keep it handy. Also the script.<br />
I thank you for your kind contribution, which I hope everyone can take advantage of and benefit from.<br />
<em>I think I have a way to attach it to the offline “user manual”</em> :)</p>
<p dir="auto"><strong>Success in your work!</strong></p>
]]></description><link>https://community.notepad-plus-plus.org/post/81830</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/81830</guid><dc:creator><![CDATA[José Luis Montero Castellanos]]></dc:creator><pubDate>Mon, 21 Nov 2022 22:45:02 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Tue, 22 Nov 2022 00:12:47 GMT]]></title><description><![CDATA[<p dir="auto">I took the output from that script, and attempted a script to produce the list of <em><strong>unassigned</strong></em> (or “free”) keycombos.</p>
<p dir="auto">I don’t know that I feel good that this script gets it 100% right (trying to “eyeball validate” it is painful), but here is its listing and output:</p>
<p dir="auto"><code>ShortcutMapperUnassignedKeyCombos.py</code> :</p>
<pre><code class="language-py"># -*- coding: utf-8 -*-
from __future__ import print_function

# THIS SCRIPT TAKES AS INPUT THE OUTPUT OF ANOTHER SCRIPT, FOR THAT SCRIPT, SEE:
#  https://community.notepad-plus-plus.org/topic/23749/list-of-free-keyboard-shortcuts
#  and look for the "Nov 16, 2022, 5:30 AM" posting

# HAVE THE OUTPUT OF THAT IN THE ACTIVE TAB WHEN RUNNING THIS SCRIPT

from Npp import *
import re

#-------------------------------------------------------------------------------

class SMUKC(object):

    def __init__(self):
        basekey_list = [
            'Num *',
            'Num +',
            'Num -',
            'Num .',
            'Num /',
            'Backspace',
            'Tab',
            'Enter',
            'Esc',
            'Spacebar',
            'Page up',
            'Page down',
            'End',
            'Home',
            'Left',
            'Up',
            'Right',
            'Down',
            'INS',
            'DEL',
            '~',
            '-',
            '=',
            '[',
            ']',
            ';',
            "'",
            '\\',
            ',',
            '.',
            '/',
        ]
        basekeys_that_require_modifier_list = [
            'Spacebar',
            '~',
            '-',
            '=',
            '[',
            ']',
            ';',
            "'",
            '\\',
            ',',
            '.',
            '/',
        ]
        for ch in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789':
            basekey_list.append(ch)
            basekeys_that_require_modifier_list.append(ch)
        for f in range(12): basekey_list.append('F{}'.format(f + 1))  # function keys
        if 1:  # numeric keypad keys
            for np_numbers in range(10): basekey_list.append('Numpad {}'.format(np_numbers))
            for np_other in '*+-./': basekey_list.append('Num {}'.format(np_other))
        modifier_list_by_basekey_dict = {}
        ctrl_bitweight = 0b0100; alt_bitweight = 0b0010; shift_bitweight = 0b0001; no_modifier_bitweight = 0b1000
        for bk in basekey_list:
            modifier_list_by_basekey_dict[bk] = []
            if bk in basekeys_that_require_modifier_list:
                modifier_list_by_basekey_dict[bk].extend([ no_modifier_bitweight, shift_bitweight ])
        input_text = editor.getText()
        for input_line in input_text.splitlines():
            (command, shortcut_s) = input_line.split(':')
            shortcut_s = shortcut_s.strip()
            for sc in shortcut_s.split(' or '):
                m = re.match(r'^(?:(?P&lt;ctrl&gt;Ctrl)\+)?(?:(?P&lt;alt&gt;Alt)\+)?(?:(?P&lt;shift&gt;Shift)\+)?(?P&lt;basekey&gt;.+)', sc)
                assert(m)
                ncas_bitweights = 0b0000
                if m.group(1): ncas_bitweights |= ctrl_bitweight
                if m.group(2): ncas_bitweights |= alt_bitweight
                if m.group(3): ncas_bitweights |= shift_bitweight
                if not m.group(1) and not m.group(2) and not m.group(3): ncas_bitweights |= no_modifier_bitweight
                basekey = m.group(4)
                if not basekey in modifier_list_by_basekey_dict:
                    print('encountered basekey not in the list in the code:', basekey)
                    assert 0
                modifier_list_by_basekey_dict[basekey].append(ncas_bitweights)
        basekey_max_length = len(max([x for x in modifier_list_by_basekey_dict], key=len))
        possible_modifiers_list = [ 'Unmodified', 'Shift', 'Alt', 'Alt+Shift', 'Ctrl', 'Ctrl+Shift', 'Ctrl+Alt', 'Ctrl+Alt+Shift' ]
        output_line_list = []
        for bk in modifier_list_by_basekey_dict:
            unassigned_modifiers_set_str = ''
            for mod_index in range(len(possible_modifiers_list)):
                hacked_mod_index = no_modifier_bitweight if mod_index == 0 else mod_index  # really bad hack :-(
                if hacked_mod_index not in modifier_list_by_basekey_dict[bk]:
                    unassigned_modifiers_set_str += possible_modifiers_list[mod_index] + ', '
            unassigned_modifiers_set_str = unassigned_modifiers_set_str[:-2]  # remove trailing , and space
            if len(unassigned_modifiers_set_str) == 0: unassigned_modifiers_set_str = 'All-combos-are-assigned!'
            out_line = '{bk:&lt;{bkml}} {ums}'.format(bk=bk, bkml=basekey_max_length, ums=unassigned_modifiers_set_str)
            output_line_list.append(out_line)
        output_line_list.sort()
        output_line_list.insert(0, 'BASE KEY AND UNASSIGNED MODIFIER COMBOS:')
        notepad.new()
        editor.setText('\r\n'.join(output_line_list))
        editor.setSavePoint()

#-------------------------------------------------------------------------------

if __name__ == '__main__': SMUKC()
</code></pre>
<p dir="auto">The output:</p>
<pre><code class="language-txt">BASE KEY AND UNASSIGNED MODIFIER COMBOS:
'         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
,         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
-         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
.         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
/         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
0         Ctrl+Alt, Ctrl+Alt+Shift
1         Ctrl+Alt, Ctrl+Alt+Shift
2         Ctrl+Alt, Ctrl+Alt+Shift
3         Ctrl+Alt, Ctrl+Alt+Shift
4         Ctrl+Alt, Ctrl+Alt+Shift
5         Ctrl+Alt, Ctrl+Alt+Shift
6         Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
7         Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
8         Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
9         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
;         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
=         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
A         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
B         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt+Shift
Backspace Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
C         Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
D         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
DEL       Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Down      Ctrl+Alt, Ctrl+Alt+Shift
E         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
End       Ctrl+Alt, Ctrl+Alt+Shift
Enter     Alt, Alt+Shift, Ctrl+Shift
Esc       Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F         Alt, Alt+Shift
F1        Shift, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F10       Unmodified, Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F11       Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F12       Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F2        Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F3        Alt+Shift
F4        Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F5        Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F6        Unmodified, Shift, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F7        Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F8        Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
F9        Unmodified, Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
G         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
H         Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Home      Ctrl+Alt, Ctrl+Alt+Shift
I         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt+Shift
INS       Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
J         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
K         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
L         Alt, Alt+Shift, Ctrl+Alt+Shift
Left      Alt, Ctrl+Alt, Ctrl+Alt+Shift
M         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
N         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Num *     Unmodified, Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Num +     Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Num -     Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Num .     Unmodified, Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Num /     Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 0  Unmodified, Shift, Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 1  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 2  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 3  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 4  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 5  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 6  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 7  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 8  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Numpad 9  Unmodified, Shift, Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
O         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
P         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Page down Alt, Ctrl+Alt, Ctrl+Alt+Shift
Page up   Alt, Ctrl+Alt, Ctrl+Alt+Shift
Q         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
R         Alt, Alt+Shift, Ctrl+Alt+Shift
Right     Alt, Ctrl+Alt, Ctrl+Alt+Shift
S         Alt, Ctrl+Alt+Shift
Spacebar  Alt, Alt+Shift, Ctrl+Alt+Shift
T         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Tab       Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
U         All-combos-are-assigned!
Up        Ctrl+Alt, Ctrl+Alt+Shift
V         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
W         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
X         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Y         Alt, Alt+Shift, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
Z         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
[         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
\         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
]         Alt, Alt+Shift, Ctrl+Alt, Ctrl+Alt+Shift
~         Alt, Alt+Shift, Ctrl, Ctrl+Shift, Ctrl+Alt, Ctrl+Alt+Shift
</code></pre>
<p dir="auto">Something that I didn’t know that came out of this:  All possible combos involving <code>U</code> are assigned by default!</p>
]]></description><link>https://community.notepad-plus-plus.org/post/81827</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/81827</guid><dc:creator><![CDATA[Alan Kilborn]]></dc:creator><pubDate>Tue, 22 Nov 2022 00:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Mon, 21 Nov 2022 21:31:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ekopalypse" aria-label="Profile: Ekopalypse">@<bdi>Ekopalypse</bdi></a> said in <a href="/post/81520">List of free keyboard shortcuts</a>:</p>
<blockquote>
<p dir="auto">apparently I have not brought them up to date</p>
</blockquote>
<p dir="auto">So the script you posted is an updated version of the script that lists the <em><strong>assigned</strong></em> keycombos for shortcuts.</p>
<p dir="auto">And (for those that don’t have the ability to run it), the <em><strong>assigned</strong></em> list for Notepad++ 8.4.7 with only shipped-with plugins, is:</p>
<pre><code>New                                     : Ctrl+N
Open...                                 : Ctrl+O
Reload from Disk                        : Ctrl+R
Save                                    : Ctrl+S
Save As...                              : Ctrl+Alt+S
Save All                                : Ctrl+Shift+S
Close                                   : Ctrl+W
Close All                               : Ctrl+Shift+W
Print...                                : Ctrl+P
Exit                                    : Alt+F4
Restore Recent Closed File              : Ctrl+Shift+T
UPPERCASE                               : Ctrl+Shift+U
lowercase                               : Ctrl+U
Proper Case                             : Alt+U
Proper Case (blend)                     : Alt+Shift+U
Sentence case                           : Ctrl+Alt+U
Sentence case (blend)                   : Ctrl+Alt+Shift+U
Split Lines                             : Ctrl+I
Join Lines                              : Ctrl+J
Move Up Current Line                    : Ctrl+Shift+Up
Move Down Current Line                  : Ctrl+Shift+Down
Insert Blank Line Above Current         : Ctrl+Alt+Enter
Insert Blank Line Below Current         : Ctrl+Alt+Shift+Enter
Toggle Single Line Comment              : Ctrl+Q
Single Line Comment                     : Ctrl+K
Single Line Uncomment                   : Ctrl+Shift+K
Block Comment                           : Ctrl+Shift+Q
Function Completion                     : Ctrl+Spacebar
Path Completion                         : Ctrl+Alt+Spacebar
Word Completion                         : Ctrl+Enter
Function Parameters Hint                : Ctrl+Shift+Spacebar
Function Parameters Previous Hint       : Alt+Up
Function Parameters Next Hint           : Alt+Down
Column Editor...                        : Alt+C
Find...                                 : Ctrl+F
Find in Files...                        : Ctrl+Shift+F
Find Next                               : F3
Find Previous                           : Shift+F3
Select and Find Next                    : Ctrl+F3
Select and Find Previous                : Ctrl+Shift+F3
Find (Volatile) Next                    : Ctrl+Alt+F3
Find (Volatile) Previous                : Ctrl+Alt+Shift+F3
Replace...                              : Ctrl+H
Incremental Search                      : Ctrl+Alt+I
Search Results Window                   : F7
Previous Search Result                  : Shift+F4
Next Search Result                      : F4
Go to...                                : Ctrl+G
Go to Matching Brace                    : Ctrl+B
Select All Between Matching Braces      : Ctrl+Alt+B
Mark...                                 : Ctrl+M
Previous style of 1st style             : Ctrl+Shift+1
Previous style of 2nd style             : Ctrl+Shift+2
Previous style of 3rd style             : Ctrl+Shift+3
Previous style of 4th style             : Ctrl+Shift+4
Previous style of 5th style             : Ctrl+Shift+5
Previous style of Find Mark style       : Ctrl+Shift+0
Next style of 1st style                 : Ctrl+1
Next style of 2nd style                 : Ctrl+2
Next style of 3rd style                 : Ctrl+3
Next style of 4th style                 : Ctrl+4
Next style of 5th style                 : Ctrl+5
Next style of Find Mark style           : Ctrl+0
Toggle Bookmark                         : Ctrl+F2
Next Bookmark                           : F2
Previous Bookmark                       : Shift+F2
Toggle Full Screen Mode                 : F11
Post-It                                 : F12
1st Tab                                 : Ctrl+Numpad 1
2nd Tab                                 : Ctrl+Numpad 2
3rd Tab                                 : Ctrl+Numpad 3
4th Tab                                 : Ctrl+Numpad 4
5th Tab                                 : Ctrl+Numpad 5
6th Tab                                 : Ctrl+Numpad 6
7th Tab                                 : Ctrl+Numpad 7
8th Tab                                 : Ctrl+Numpad 8
9th Tab                                 : Ctrl+Numpad 9
Next Tab                                : Ctrl+Page down
Previous Tab                            : Ctrl+Page up
Move Tab Forward                        : Ctrl+Shift+Page down
Move Tab Backward                       : Ctrl+Shift+Page up
Switch to previous document             : Ctrl+Shift+Tab
Switch to next document                 : Ctrl+Tab
Hide Lines                              : Alt+H
Focus on Another View                   : F8
Fold All                                : Alt+0
Unfold All                              : Alt+Shift+0
Fold Current Level                      : Ctrl+Alt+F
Unfold Current Level                    : Ctrl+Alt+Shift+F
Fold Level 1                            : Alt+1
Fold Level 2                            : Alt+2
Fold Level 3                            : Alt+3
Fold Level 4                            : Alt+4
Fold Level 5                            : Alt+5
Fold Level 6                            : Alt+6
Fold Level 7                            : Alt+7
Fold Level 8                            : Alt+8
Unfold Level 1                          : Alt+Shift+1
Unfold Level 2                          : Alt+Shift+2
Unfold Level 3                          : Alt+Shift+3
Unfold Level 4                          : Alt+Shift+4
Unfold Level 5                          : Alt+Shift+5
Unfold Level 6                          : Alt+Shift+6
Unfold Level 7                          : Alt+Shift+7
Unfold Level 8                          : Alt+Shift+8
Text Direction RTL                      : Ctrl+Alt+R
Text Direction LTR                      : Ctrl+Alt+L
Toggle macro recording                  : Ctrl+Shift+R
Playback                                : Ctrl+Shift+P
Run...                                  : F5
About Notepad++                         : F1
Trim Trailing Space and Save            : Alt+Shift+S
Get PHP help                            : Alt+F1
Wikipedia Search                        : Alt+F3
Open selected file path in new instance : Alt+F6
SCI_CUT                                 : Ctrl+X or Shift+DEL
SCI_COPY                                : Ctrl+C or Ctrl+INS
SCI_PASTE                               : Ctrl+V or Shift+INS
SCI_SELECTALL                           : Ctrl+A
SCI_CLEAR                               : DEL
SCI_UNDO                                : Ctrl+Z or Alt+Backspace
SCI_REDO                                : Ctrl+Y or Ctrl+Shift+Z
SCI_NEWLINE                             : Enter or Shift+Enter
SCI_TAB                                 : Tab
SCI_BACKTAB                             : Shift+Tab
SCI_ZOOMIN                              : Ctrl+Num +
SCI_ZOOMOUT                             : Ctrl+Num -
SCI_SETZOOM                             : Ctrl+Num /
SCI_SELECTIONDUPLICATE                  : Ctrl+D
SCI_EDITTOGGLEOVERTYPE                  : INS
SCI_LINEDOWN                            : Down
SCI_LINEDOWNEXTEND                      : Shift+Down
SCI_LINEDOWNRECTEXTEND                  : Alt+Shift+Down
SCI_LINESCROLLDOWN                      : Ctrl+Down
SCI_LINEUP                              : Up
SCI_LINEUPEXTEND                        : Shift+Up
SCI_LINEUPRECTEXTEND                    : Alt+Shift+Up
SCI_LINESCROLLUP                        : Ctrl+Up
SCI_PARADOWN                            : Ctrl+]
SCI_PARADOWNEXTEND                      : Ctrl+Shift+]
SCI_PARAUP                              : Ctrl+[
SCI_PARAUPEXTEND                        : Ctrl+Shift+[
SCI_CHARLEFT                            : Left
SCI_CHARLEFTEXTEND                      : Shift+Left
SCI_CHARLEFTRECTEXTEND                  : Alt+Shift+Left
SCI_CHARRIGHT                           : Right
SCI_CHARRIGHTEXTEND                     : Shift+Right
SCI_CHARRIGHTRECTEXTEND                 : Alt+Shift+Right
SCI_WORDLEFT                            : Ctrl+Left
SCI_WORDLEFTEXTEND                      : Ctrl+Shift+Left
SCI_WORDRIGHT                           : Ctrl+Right
SCI_WORDRIGHTENDEXTEND                  : Ctrl+Shift+Right
SCI_WORDPARTLEFT                        : Ctrl+/
SCI_WORDPARTLEFTEXTEND                  : Ctrl+Shift+/
SCI_WORDPARTRIGHT                       : Ctrl+\
SCI_WORDPARTRIGHTEXTEND                 : Ctrl+Shift+\
SCI_HOMEDISPLAY                         : Alt+Home
SCI_VCHOMERECTEXTEND                    : Alt+Shift+Home
SCI_VCHOMEWRAP                          : Home
SCI_VCHOMEWRAPEXTEND                    : Shift+Home
SCI_LINEENDWRAPEXTEND                   : Shift+End
SCI_LINEENDRECTEXTEND                   : Alt+Shift+End
SCI_LINEENDDISPLAY                      : Alt+End
SCI_LINEENDWRAP                         : End
SCI_DOCUMENTSTART                       : Ctrl+Home
SCI_DOCUMENTSTARTEXTEND                 : Ctrl+Shift+Home
SCI_DOCUMENTEND                         : Ctrl+End
SCI_DOCUMENTENDEXTEND                   : Ctrl+Shift+End
SCI_PAGEUP                              : Page up
SCI_PAGEUPEXTEND                        : Shift+Page up
SCI_PAGEUPRECTEXTEND                    : Alt+Shift+Page up
SCI_PAGEDOWN                            : Page down
SCI_PAGEDOWNEXTEND                      : Shift+Page down
SCI_PAGEDOWNRECTEXTEND                  : Alt+Shift+Page down
SCI_DELETEBACK                          : Backspace or Shift+Backspace
SCI_DELWORDLEFT                         : Ctrl+Backspace
SCI_DELWORDRIGHT                        : Ctrl+DEL
SCI_DELLINELEFT                         : Ctrl+Shift+Backspace
SCI_DELLINERIGHT                        : Ctrl+Shift+DEL
SCI_LINEDELETE                          : Ctrl+Shift+L
SCI_LINECUT                             : Ctrl+L
SCI_LINECOPY                            : Ctrl+Shift+X
SCI_LINETRANSPOSE                       : Ctrl+T
SCI_CANCEL                              : Esc```</code></pre>
]]></description><link>https://community.notepad-plus-plus.org/post/81826</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/81826</guid><dc:creator><![CDATA[Alan Kilborn]]></dc:creator><pubDate>Mon, 21 Nov 2022 21:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Wed, 16 Nov 2022 10:30:44 GMT]]></title><description><![CDATA[<p dir="auto">apparently I have not brought them up to date</p>
<pre><code class="language-py">from Npp import editor, notepad, MENUCOMMAND
import ctypes
import ctypes.wintypes as wintypes
from threading import Thread
import time

user32 = ctypes.WinDLL('user32', use_last_error=True)


def start_sk_dialog():
    notepad.menuCommand(MENUCOMMAND.SETTING_SHORTCUT_MAPPER)


sk_mapper = Thread(target=start_sk_dialog)
sk_mapper.start()
time.sleep(0.5)

WM_USER = 1024
WM_CLOSE = 16

TCM_FIRST = 4864
TCM_GETITEMCOUNT = (TCM_FIRST + 4)
TCM_SETCURSEL = (TCM_FIRST + 12)

BABYGRID_USER = (WM_USER + 7000)
BGM_GETCELLDATA = BABYGRID_USER + 4
BGM_GETROWS = BABYGRID_USER + 23


class BGCELL(ctypes.Structure):
    _fields_ = [('row', wintypes.INT),
                ('col', wintypes.INT)]


def main():
    cell_buffer = ctypes.create_unicode_buffer(1000)
    bgcell = BGCELL()

    sk_mapper_hwnd = user32.FindWindowW(None, u'Shortcut mapper')
    if not sk_mapper_hwnd:
        print('Shortcut mapper was not found')
        return

    sys_tab_hwnd = user32.FindWindowExW(sk_mapper_hwnd, None, u'SysTabControl32', None)
    if not sys_tab_hwnd:
        print('SysTabControl32 was not found')
        return

    item_count = user32.SendMessageW(sys_tab_hwnd, TCM_GETITEMCOUNT, 0, 0)
    if not item_count:
        print('TCM_GETITEMCOUNT returned 0')
        return

    babygrid = user32.FindWindowExW(sk_mapper_hwnd, None, u'BABYGRID', None)
    if not babygrid:
        print('BABYGRID was not found')
        return


    shortcuts = []
    for tab in range(item_count):
        rows = user32.SendMessageW(babygrid, BGM_GETROWS, 0, 0)

        for i in range(1, rows + 1):
            shortcut = []

            for j in range(1, 3):
                bgcell.row = i
                bgcell.col = j
                user32.SendMessageW(babygrid,
                                    BGM_GETCELLDATA,
                                    ctypes.byref(bgcell),
                                    cell_buffer)
                shortcut.append(cell_buffer.value)

            if shortcut[1]:
                shortcuts.append(shortcut)

        user32.SetForegroundWindow(sk_mapper_hwnd)
        user32.SendMessageW(sys_tab_hwnd, TCM_SETCURSEL, tab, 0)
        user32.keybd_event(0x27, 0, 0, 0)
        user32.keybd_event(0x27, 0, 2, 0)
        time.sleep(.1)

    user32.SendMessageW(sk_mapper_hwnd, WM_CLOSE, 0, 0)

    _max_length = len(max([x[0] for x in shortcuts], key=len))
    notepad.new()
    editor.setText('\r\n'.join(['{0:&lt;{2}} : {1}'.format(x[0],
                                                        x[1],
                                                        _max_length) for x in shortcuts]))


main()
</code></pre>
]]></description><link>https://community.notepad-plus-plus.org/post/81520</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/81520</guid><dc:creator><![CDATA[Ekopalypse]]></dc:creator><pubDate>Wed, 16 Nov 2022 10:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to List of free keyboard shortcuts on Tue, 15 Nov 2022 20:23:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/jos%C3%A9-luis-montero-castellanos" aria-label="Profile: José-Luis-Montero-Castellanos">@<bdi>José-Luis-Montero-Castellanos</bdi></a></p>
<blockquote>
<p dir="auto">Do the Notepad++ have any .xml file where you can find out something about that availability?.</p>
</blockquote>
<p dir="auto">No.  Default shortcuts are compiled into the executable, so aren’t in any config file; modified shortcuts end up in shortcuts.xml.</p>
<p dir="auto">A few years back, someone published a script for the PythonScript plugin that shows all the active shortcuts.  Unfortunately, I haven’t found it yet (I found <a href="https://community.notepad-plus-plus.org/topic/19901/disabling-all-np-keyboard-shortcuts/">this</a>, which deletes all existing shortcuts… but I know there was one one that listed them all; I will search more as I have time.)</p>
<p dir="auto">But not even that lists all the possible shortcuts that haven’t been assigned.</p>
<hr />
<p dir="auto"><em>edit</em>: Found it = <a href="https://community.notepad-plus-plus.org/topic/12576/list-of-all-assigned-keyboard-shortcuts">https://community.notepad-plus-plus.org/topic/12576/list-of-all-assigned-keyboard-shortcuts</a> =&gt; specifically, <a class="plugin-mentions-user plugin-mentions-a" href="/user/ekopalypse" aria-label="Profile: Ekopalypse">@<bdi>Ekopalypse</bdi></a> 's post <a href="https://community.notepad-plus-plus.org/post/46110">here</a> and the discussion below that.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/81503</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/81503</guid><dc:creator><![CDATA[PeterJones]]></dc:creator><pubDate>Tue, 15 Nov 2022 20:23:25 GMT</pubDate></item></channel></rss>