shortcut chord keys

by Andy Bulka

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

JavaScript

// Chord key detection
var chordKeyPressed = false;
var chordTimeout = null;

$(document).keydown(function(e) {
    // Cmd/Ctrl + K = Chord prefix
    if ((e.ctrlKey || e.metaKey) && e.which == 75) {
        e.preventDefault();
        chordKeyPressed = true;
        
        // Visual feedback (optional)
        console.log("Chord key pressed - waiting for command...");
        
        // Reset after 2 seconds if no second key
        clearTimeout(chordTimeout);
        chordTimeout = setTimeout(function() {
            chordKeyPressed = false;
        }, 2000);
        return;
    }
    
    // If chord key was pressed, check for second key
    if (chordKeyPressed) {
        chordKeyPressed = false;
        clearTimeout(chordTimeout);
        e.preventDefault();
        
        switch(e.which) {
            case 83: // S - Save
                console.log("Cmd+K, S - Save");
                $('#btn-top-save, #btn-save').first().click();
                break;
            case 78: // N - Name/Description/Tags
                console.log("Cmd+K, N - Metadata panel");
                $('#btn-scroll-to-metadata').click();
                break;
            case 65: // A - AI Config
                console.log("Cmd+K, A - AI Config");
                $('#btn-scroll-to-ai-config').click();
                break;
            case 70: // F - Files/Code/Upload
                console.log("Cmd+K, F - Files panel");
                $('#btn-scroll-to-files, #btn-scroll-to-code, #btn-scroll-to-upload').first().click();
                break;
            case 69: // E - Explanation
                console.log("Cmd+K, E - Explanation panel");
                $('#btn-toggle-markdown').click();
                break;
            case 71: // G - Go to top
                console.log("Cmd+K, G - Scroll to top");
                $('html, body').animate({ scrollTop: 0 }, 300);
                break;
        }
        return;
 ...