├── .gitignore ├── _config.yml ├── site └── static-hands-docs │ ├── static │ ├── .nojekyll │ └── img │ │ ├── favicon.ico │ │ ├── docusaurus.png │ │ ├── icons │ │ ├── icon.png │ │ ├── all-keyboard.png │ │ └── moving-keys.png │ │ ├── logo copy 2.png │ │ ├── tutorial │ │ ├── localeDropdown.png │ │ └── docsVersionDropdown.png │ │ ├── logo.svg │ │ ├── undraw_docusaurus_mountain.svg │ │ └── icon.svg │ ├── docs │ ├── tutorial-basics │ │ ├── _category_.json │ │ ├── link-to-github.md │ │ ├── more-features.md │ │ ├── static-hands-vs-vim.md │ │ └── getting-started.md │ └── intro.mdx │ ├── babel.config.js │ ├── src │ ├── pages │ │ ├── markdown-page.md │ │ ├── index.module.css │ │ └── index.js │ ├── components │ │ ├── HomepageFeatures.module.css │ │ └── HomepageFeatures.js │ └── css │ │ └── custom.css │ ├── .gitignore │ ├── sidebars.js │ ├── README.md │ ├── package.json │ └── docusaurus.config.js ├── .gitattributes ├── install.exe ├── install.bat ├── LICENSE ├── windows ├── run_v2.ahk └── run_v1.ahk ├── README.md └── icon.svg /.gitignore: -------------------------------------------------------------------------------- 1 | .history -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /site/static-hands-docs/static/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto -------------------------------------------------------------------------------- /install.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/install.exe -------------------------------------------------------------------------------- /site/static-hands-docs/docs/tutorial-basics/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Tutorial - Basics", 3 | "position": 2 4 | } 5 | -------------------------------------------------------------------------------- /site/static-hands-docs/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/favicon.ico -------------------------------------------------------------------------------- /install.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | copy %~dp0windows\run.ahk "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp" 3 | start %~dp0windows\run.ahk 4 | PAUSE -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/docusaurus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/docusaurus.png -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/icons/icon.png -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/logo copy 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/logo copy 2.png -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/icons/all-keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/icons/all-keyboard.png -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/icons/moving-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/icons/moving-keys.png -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/tutorial/localeDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/tutorial/localeDropdown.png -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/tutorial/docsVersionDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/almogtavor/static-hands/HEAD/site/static-hands-docs/static/img/tutorial/docsVersionDropdown.png -------------------------------------------------------------------------------- /site/static-hands-docs/src/pages/markdown-page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown page example 3 | --- 4 | 5 | # Markdown page example 6 | 7 | You don't need React to write simple standalone pages. 8 | -------------------------------------------------------------------------------- /site/static-hands-docs/src/components/HomepageFeatures.module.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable docusaurus/copyright-header */ 2 | 3 | .features { 4 | display: flex; 5 | align-items: center; 6 | padding: 2rem 0; 7 | width: 100%; 8 | } 9 | 10 | .featureSvg { 11 | height: 200px; 12 | width: 200px; 13 | } 14 | -------------------------------------------------------------------------------- /site/static-hands-docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /site/static-hands-docs/src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable docusaurus/copyright-header */ 2 | 3 | /** 4 | * CSS files with the .module.css suffix will be treated as CSS modules 5 | * and scoped locally. 6 | */ 7 | 8 | .heroBanner { 9 | padding: 4rem 0; 10 | text-align: center; 11 | position: relative; 12 | overflow: hidden; 13 | } 14 | 15 | @media screen and (max-width: 966px) { 16 | .heroBanner { 17 | padding: 2rem; 18 | } 19 | } 20 | 21 | .buttons { 22 | display: flex; 23 | align-items: center; 24 | justify-content: center; 25 | } 26 | -------------------------------------------------------------------------------- /site/static-hands-docs/docs/tutorial-basics/link-to-github.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 4 3 | --- 4 | 5 | # Star Static Hands on Github! 6 | 7 | If you liked Static Hands we would be glad if you'd star us on [Github](https://github.com/almogtavor/static-hands). 8 | 9 | You have just learned the **basics of Static Hands**. 10 | Anything **unclear** or **buggy** in this tutorial or in Static Hands? [Please report it!](https://github.com/almogtavor/static-hands/issues) 11 | 12 | ## What's next? 13 | 14 | - Explore the [official project](https://github.com/almogtavor/static-hands). 15 | - Get involved in the [Static Hands Development](https://github.com/almogtavor/static-hands) 16 | -------------------------------------------------------------------------------- /site/static-hands-docs/docs/tutorial-basics/more-features.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 2 3 | --- 4 | 5 | # More Features! 6 | 7 | ### Speed ⚡️ 8 | 9 | |Key/Commands|Function| 10 | |:----------:|:-------| 11 | |CapsLock+m| Left X 6| 12 | |CapsLock+,| Down X 5 | 13 | |CapsLock+8| Up X 5 | 14 | |CapsLock+.| Right X 6| 15 | 16 | 17 | The intention of the speed bindings is to enable the user to move real fast: 18 | logo 19 | 20 | ### Case Changing 21 | 22 | |Key/Commands|Function| 23 | |:----------:|:-------| 24 | |CapsLock+9|Upper Case| 25 | |CapsLock+0|Lower Case| 26 | |CapsLock+-|Title Case| 27 | -------------------------------------------------------------------------------- /site/static-hands-docs/sidebars.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Creating a sidebar enables you to: 3 | - create an ordered group of docs 4 | - render a sidebar for each doc of that group 5 | - provide next/previous navigation 6 | 7 | The sidebars can be generated from the filesystem, or explicitly defined here. 8 | 9 | Create as many sidebars as you want. 10 | */ 11 | 12 | module.exports = { 13 | // By default, Docusaurus generates a sidebar from the docs folder structure 14 | tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], 15 | 16 | // But you can create a sidebar manually 17 | /* 18 | tutorialSidebar: [ 19 | { 20 | type: 'category', 21 | label: 'Tutorial', 22 | items: ['hello'], 23 | }, 24 | ], 25 | */ 26 | }; 27 | -------------------------------------------------------------------------------- /site/static-hands-docs/docs/tutorial-basics/static-hands-vs-vim.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 3 3 | --- 4 | 5 | # Static Hands vs Vim 6 | 7 | Vim shortcuts are great, but they have a learning curve. And not a short one. Static Hands' shortcuts are super simple and quick. If you are already a vim user, you do not need this repo. And for us non-Vim users. 8 | 9 | logo 10 | 11 | The feature Vim users praise the most is the ability to move the cursor without changing hand position (HJKL keys). They actually like it so much they write plugins for every other program in the world to support the same shortcuts via “Vim modes”. The thing is that Vim mode is less intuitive (HJKL for arrows is much inconvenient than IJKL), and it forces more adaptation time. -------------------------------------------------------------------------------- /site/static-hands-docs/README.md: -------------------------------------------------------------------------------- 1 | # Website 2 | 3 | This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. 4 | 5 | ## Installation 6 | 7 | ```console 8 | yarn install 9 | ``` 10 | 11 | ## Local Development 12 | 13 | ```console 14 | yarn start 15 | ``` 16 | 17 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 18 | 19 | ## Build 20 | 21 | ```console 22 | yarn build 23 | ``` 24 | 25 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 26 | 27 | ## Deployment 28 | 29 | ```console 30 | GIT_USER= USE_SSH=true yarn deploy 31 | ``` 32 | 33 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 34 | -------------------------------------------------------------------------------- /site/static-hands-docs/src/css/custom.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable docusaurus/copyright-header */ 2 | /** 3 | * Any CSS included here will be global. The classic template 4 | * bundles Infima by default. Infima is a CSS framework designed to 5 | * work well for content-centric websites. 6 | */ 7 | 8 | /* You can override the default Infima variables here. */ 9 | :root { 10 | --ifm-color-primary: #25c2a0; 11 | --ifm-color-primary-dark: rgb(33, 175, 144); 12 | --ifm-color-primary-darker: rgb(31, 165, 136); 13 | --ifm-color-primary-darkest: rgb(26, 136, 112); 14 | --ifm-color-primary-light: rgb(70, 203, 174); 15 | --ifm-color-primary-lighter: rgb(102, 212, 189); 16 | --ifm-color-primary-lightest: rgb(146, 224, 208); 17 | --ifm-code-font-size: 95%; 18 | } 19 | 20 | .docusaurus-highlight-code-line { 21 | background-color: rgba(0, 0, 0, 0.1); 22 | display: block; 23 | margin: 0 calc(-1 * var(--ifm-pre-padding)); 24 | padding: 0 var(--ifm-pre-padding); 25 | } 26 | 27 | html[data-theme='dark'] .docusaurus-highlight-code-line { 28 | background-color: rgba(0, 0, 0, 0.3); 29 | } 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Almog Tavor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /site/static-hands-docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "static-hands-docs", 3 | "version": "1.0.0", 4 | "private": false, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "clear": "docusaurus clear", 12 | "serve": "docusaurus serve", 13 | "write-translations": "docusaurus write-translations", 14 | "write-heading-ids": "docusaurus write-heading-ids" 15 | }, 16 | "dependencies": { 17 | "@docusaurus/core": "2.0.0-beta.3", 18 | "@docusaurus/preset-classic": "2.0.0-beta.3", 19 | "@mdx-js/react": "^1.6.21", 20 | "@svgr/webpack": "^5.5.0", 21 | "clsx": "^1.1.1", 22 | "file-loader": "^6.2.0", 23 | "prism-react-renderer": "^1.2.1", 24 | "react": "^17.0.1", 25 | "react-dom": "^17.0.1", 26 | "url-loader": "^4.1.1" 27 | }, 28 | "browserslist": { 29 | "production": [ 30 | ">0.5%", 31 | "not dead", 32 | "not op_mini all" 33 | ], 34 | "development": [ 35 | "last 1 chrome version", 36 | "last 1 firefox version", 37 | "last 1 safari version" 38 | ] 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /site/static-hands-docs/src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import clsx from "clsx"; 3 | import Layout from "@theme/Layout"; 4 | import Link from "@docusaurus/Link"; 5 | import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; 6 | import styles from "./index.module.css"; 7 | import HomepageFeatures from "../components/HomepageFeatures"; 8 | 9 | function HomepageHeader() { 10 | const { siteConfig } = useDocusaurusContext(); 11 | return ( 12 |
13 |
14 |

{siteConfig.title}

15 |

{siteConfig.tagline}

16 |
17 | 21 | Static Hands Tutorial - 3min ⏱️ 22 | 23 |
24 |
25 |
26 | ); 27 | } 28 | 29 | export default function Home() { 30 | const { siteConfig } = useDocusaurusContext(); 31 | return ( 32 | 36 | 37 |
38 | 39 |
40 |
41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /site/static-hands-docs/docs/tutorial-basics/getting-started.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 1 3 | --- 4 | 5 | # Getting Started 6 | 7 | ## Basic Features 8 | 9 | The Strength of these key bindings is in the shortcuts. 10 | 11 | For example the shortcut Ctrl+Left Arrow is a great shortcut, but in reality that forces us, developers, to move our hands to the sides. We can now use CapsLock+f+j and get the same results without any effort! It'll take some time to fully get used to it, but it will pay off. 12 | 13 | Let's dive in! 14 | 15 | 16 | ### Available commands 17 | 18 | #### Left and Right Hand Key Bindings 19 | |Key/Commands|Function💥| 20 | |:----------:|:-------| 21 | |CapsLock+j|Left| 22 | |CapsLock+k|Down| 23 | |CapsLock+i|Up| 24 | |CapsLock+l|Right| 25 | |CapsLock+u| To the start of the line (Home)| 26 | |CapsLock+o| To the end of the line (End)| 27 | |CapsLock+h| Delete| 28 | |CapsLock+;| Backspace| 29 | |CapsLock+'| Enter| 30 | |CapsLock+p| Insert| 31 | |CapsLock+y| PageUp| 32 | |CapsLock+n| PageDown| 33 | |CapsLock++| Window always on top (toggle to turn off)| 34 | 35 | 36 | A demonstration of how these bindings really look: 37 | logo 38 | 39 | #### Left Hand Key Bindings 40 | |Key/Commands|Function| 41 | |:----------:|:-------| 42 | |CapsLock+f|Ctrl| 43 | |CapsLock+d|Shift| 44 | |CapsLock+s|Alt| 45 | |CapsLock+w|Win Key| 46 | 47 | * Notice one-click CapsLock still functions the same -------------------------------------------------------------------------------- /windows/run_v2.ahk: -------------------------------------------------------------------------------- 1 | #Requires AutoHotkey v2.0 2 | SendMode "Input" ; Superior speed and reliability 3 | SetWorkingDir A_ScriptDir ; Ensures a consistent starting directory 4 | SetCapsLockState "AlwaysOff" 5 | 6 | ; Remap keys using CapsLock as a modifier 7 | CapsLock & i::Send "{Blind}{Up}" 8 | CapsLock & j::Send "{Blind}{Left}" 9 | CapsLock & l::Send "{Blind}{Right}" 10 | CapsLock & k::Send "{Blind}{Down}" 11 | CapsLock & u::Send "{Blind}{Home}" 12 | CapsLock & o::Send "{Blind}{End}" 13 | CapsLock & h::Send "{Blind}{Delete}" 14 | CapsLock & y::Send "{Blind}{PgUp}" 15 | CapsLock & n::Send "{Blind}{PgDn}" 16 | CapsLock & `;::Send "{Blind}{Backspace}" 17 | CapsLock & p::Send "{Blind}{Insert}" 18 | CapsLock & 4::Send "{Blind}{$ 2}" ; LaTeX conversion 19 | 20 | ; Modifier keys 21 | ; Modifier keys with CapsLock 22 | CapsLock & f::Send "{Ctrl down}" ; Press and hold Ctrl 23 | CapsLock & f up::Send "{Ctrl up}" ; Release Ctrl 24 | 25 | CapsLock & d::Send "{Shift down}" ; Press and hold Shift 26 | CapsLock & d up::Send "{Shift up}" ; Release Shift 27 | 28 | CapsLock & s::Send "{Alt down}" ; Press and hold Alt 29 | CapsLock & s up::Send "{Alt up}" ; Release Alt 30 | 31 | CapsLock & w::Send "{LWin down}" ; Press and hold Windows 32 | CapsLock & w up::Send "{LWin up}" ; Release Windows 33 | 34 | 35 | ; Speed up navigation 36 | CapsLock & 8::Send "{Blind}{Up 5}" 37 | CapsLock & m::Send "{Blind}{Left 6}" 38 | CapsLock & .::Send "{Blind}{Right 6}" 39 | CapsLock & ,::Send "{Blind}{Down 5}" 40 | 41 | ; Keep window always on top 42 | CapsLock & +::WinSetAlwaysOnTop "A" 43 | -------------------------------------------------------------------------------- /windows/run_v1.ahk: -------------------------------------------------------------------------------- 1 | #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 2 | ; #Warn ; Enable warnings to assist with detecting common errors. 3 | SendMode Input ; Recommended for new scripts due to its superior speed and reliability. 4 | SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 5 | 6 | ; SetCapsLockState, AlwaysOff 7 | 8 | CapsLock & i::Send, {blind}{Up} 9 | CapsLock & j::Send, {blind}{Left} 10 | CapsLock & l::Send, {blind}{Right} 11 | CapsLock & k::Send, {blind}{Down} 12 | CapsLock & u::Send, {blind}{home} 13 | CapsLock & o::Send, {blind}{end} 14 | CapsLock & h::Send, {blind}{delete} 15 | CapsLock & y::Send, {blind}{PgUp} 16 | CapsLock & n::Send, {blind}{PgDn} 17 | CapsLock & `;::Send, {blind}{Backspace} 18 | CapsLock & p::Send, {blind}{Insert} 19 | 20 | CapsLock & f::Ctrl 21 | CapsLock & d::Shift 22 | CapsLock & s::Alt 23 | CAPSLOCK & w::LWin 24 | 25 | ; Speed 26 | CapsLock & 8::Send, {Up 5} 27 | CapsLock & m::Send, {blind}^{Left 6} 28 | CapsLock & .::Send, {blind}^{Right 6} 29 | CapsLock & ,::Send, {Down 5} 30 | 31 | ; Keep window open 32 | CapsLock & +::Winset, Alwaysontop, , A 33 | 34 | ; Change Case 35 | CapsLock & 9::goSub, set_upper_case 36 | CapsLock & 0::goSub, set_lower_case 37 | CapsLock & -::goSub, set_title_case 38 | 39 | set_upper_case: 40 | set_lower_case: 41 | set_title_case: 42 | revert_clipboard := clipboardAll 43 | clipboard = 44 | send ^{c} 45 | clipWait, 0.3 46 | 47 | if (a_thisLabel = "set_upper_case") 48 | stringUpper, clipboard, clipboard 49 | else if (a_thisLabel = "set_lower_case") 50 | stringLower, clipboard, clipboard 51 | else if (a_thisLabel = "set_title_case") 52 | stringLower, clipboard, clipboard, T 53 | 54 | send ^{v} 55 | sleep 50 56 | clipboard := revert_clipboard 57 | return 58 | -------------------------------------------------------------------------------- /site/static-hands-docs/docs/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 1 3 | --- 4 | 5 | # Installation 6 | 7 | Let's discover **Static Hands in less than 5 minutes**. 8 | 9 | export const Highlight = ({ children, color }) => ( 10 | { 19 | window.location.assign( 20 | "https://github.com/almogtavor/static-hands/releases/download/1.2.0/install.exe" 21 | ); 22 | }} 23 | > 24 | {children} 25 | 26 | ); 27 | 28 | ## Download Static Hands 29 | 30 | - **Option one**: Click the following button and install the "install.exe" file. 31 | 32 | **Click to Immediately Install !** 33 | 34 |
35 | 36 | :::caution 37 | Notice that the exe has been compiled without certificates. 38 | Anti-Virus softwares might warn about it and you should ignore. 39 | If you prefer not to install an exe, you can go with **option two**. 40 | 41 | ::: 42 | 43 | - **Option two**: Download [**AutoHotKey**](https://www.autohotkey.com/). 44 | Clone project 45 | 46 | $ git clone https://github.com/almogtavor/static-hands.git 47 | 48 | go to static-hands --> Windows --> `run_v2.ahk` with AutoHotkey. 49 | 50 | $ cd static-hands\windows 51 | $ run_v2.ahk 52 | 53 | To put `ahk` into effect automatically every time PC start: 54 | 55 | - Select `run_v2.ahk`, and press `Ctrl+C`. 56 | - Press `Win+R` to open the Run dialog, then enter `shell:startup` and click OK or Enter. 57 | 58 | This will open the Startup folder for the current user. 59 | 60 | - Right-click inside the window, and click "Paste Shortcut". The shortcut to the script should now be in the Startup folder. 61 | -------------------------------------------------------------------------------- /site/static-hands-docs/src/components/HomepageFeatures.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import clsx from "clsx"; 3 | import styles from "./HomepageFeatures.module.css"; 4 | 5 | const FeatureList = [ 6 | { 7 | title: "Easy to Use", 8 | Svg: require("../../static/img/undraw_docusaurus_mountain.svg").default, 9 | description: ( 10 | <> 11 | Static Hands was designed from the ground up to be easily installed and 12 | used to let you speed up your developing time. 13 | 14 | ), 15 | }, 16 | { 17 | title: "Speed Yourself Up", 18 | Svg: require("../../static/img/undraw_docusaurus_tree.svg").default, 19 | description: ( 20 | <> 21 | Minimal shortcuts using the CapsLock key that doesn't require moving 22 | hands. Lets you get to every key in your keyboard, like it in the middle 23 | of it. 24 | 25 | ), 26 | }, 27 | { 28 | title: "New Typing Features", 29 | Svg: require("../../static/img/undraw_docusaurus_react.svg").default, 30 | description: ( 31 | <> 32 | Keep windows on top, move 6 words on each tap, turn a string upper or 33 | lower and more. 34 | 35 | ), 36 | }, 37 | ]; 38 | 39 | function Feature({ Svg, title, description }) { 40 | return ( 41 |
42 |
43 | 44 |
45 |
46 |

{title}

47 |

{description}

48 |
49 |
50 | ); 51 | } 52 | 53 | export default function HomepageFeatures() { 54 | return ( 55 |
56 |
57 |
58 | {FeatureList.map((props, idx) => ( 59 | 60 | ))} 61 |
62 |
63 |
64 | ); 65 | } 66 | -------------------------------------------------------------------------------- /site/static-hands-docs/docusaurus.config.js: -------------------------------------------------------------------------------- 1 | const lightCodeTheme = require("prism-react-renderer/themes/github"); 2 | const darkCodeTheme = require("prism-react-renderer/themes/dracula"); 3 | 4 | /** @type {import('@docusaurus/types').DocusaurusConfig} */ 5 | module.exports = { 6 | title: "Static Hands", 7 | tagline: "Turn your Unused CapsLock Key a Superhero 🦸‍♂️🚀", 8 | url: "https://almogtavor.github.io/static-hands/", 9 | baseUrl: "/static-hands/", 10 | trailingSlash: false, 11 | onBrokenLinks: "throw", 12 | onBrokenMarkdownLinks: "warn", 13 | favicon: "img/favicon.ico", 14 | organizationName: "almogtavor", // Usually your GitHub org/user name. 15 | projectName: "static-hands", // Usually your repo name. 16 | themeConfig: { 17 | navbar: { 18 | title: "Static Hands", 19 | logo: { 20 | alt: "Static Hands Logo", 21 | src: "img/icon.svg", 22 | }, 23 | items: [ 24 | { 25 | type: "doc", 26 | docId: "intro", 27 | position: "left", 28 | label: "Tutorial", 29 | }, 30 | { 31 | href: "https://github.com/almogtavor/static-hands", 32 | label: "GitHub", 33 | position: "right", 34 | }, 35 | ], 36 | }, 37 | footer: { 38 | style: "dark", 39 | links: [ 40 | { 41 | title: "Docs", 42 | items: [ 43 | { 44 | label: "Tutorial", 45 | to: "/docs/intro", 46 | }, 47 | ], 48 | }, 49 | { 50 | title: "More", 51 | items: [ 52 | { 53 | label: "GitHub", 54 | href: "https://github.com/almogtavor/static-hands", 55 | }, 56 | ], 57 | }, 58 | ], 59 | copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, 60 | }, 61 | prism: { 62 | theme: lightCodeTheme, 63 | darkTheme: darkCodeTheme, 64 | }, 65 | }, 66 | presets: [ 67 | [ 68 | "@docusaurus/preset-classic", 69 | { 70 | docs: { 71 | sidebarPath: require.resolve("./sidebars.js"), 72 | // Please change this to your repo. 73 | editUrl: 74 | "https://github.com/facebook/docusaurus/edit/master/website/", 75 | }, 76 | blog: { 77 | showReadingTime: true, 78 | // Please change this to your repo. 79 | editUrl: 80 | "https://github.com/facebook/docusaurus/edit/master/website/blog/", 81 | }, 82 | theme: { 83 | customCss: require.resolve("./src/css/custom.css"), 84 | }, 85 | }, 86 | ], 87 | ], 88 | }; 89 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | Click to see the source 5 | 6 |
7 |
8 | 9 | # [Static Hands](https://almogtavor.github.io/static-hands/) - Turn your Unused CapsLock Key a Superhero 🦸‍♂️🚀 10 | 11 | ⌨️ Super useful shortcuts with the CapsLock key that spare the need to move hands while typing. Super simple. No learning curve. 12 | 13 | All of the shortcuts use the CapsLock key, which 99% of programmers don't use 99% of their time. With static hands, you can let CapsLock turn your keyboard into a magical hands position fixed keyboard. 14 | 15 | *Irrelevant for Vim users. 16 | 17 | Click here for the [documentation](https://almogtavor.github.io/static-hands/). 18 | 19 | ## 10 Seconds Tutorial 20 | 21 | 22 | The goal of `static-hands` is to enable the following features: 23 | 24 | 25 | 26 | Where "Super" means that each press is translated to 5/6 actual presses. 27 | In a more detailed manner, the main key-bindings of `static-hands` are: 28 | 29 | 30 | 31 | 32 | ## Installation 33 | 34 | First of all, install [AutoHotKey](https://www.autohotkey.com/). Then: 35 | * **Option one**: Simply install the file by running the install.bat as an administrator (makes Static Hands load on the computer's startup). 36 | * **Option two**: Install the file by clicking the install.exe (won't move Static Hands to startup folder). 37 | * **Option three**: Clone project, run static-hands --> Windows --> run.ahk with AutoHotkey. To put ahk into effect automatically every time PC start 38 | 39 | * Select `run.ahk`, and press Ctrl+C. 40 | * Press Win+R to open the Run dialog, then enter `shell:startup` and click OK or Enter. This will open the Startup folder for the current user. To instead open the folder for all users, enter shell: common startup (however, in that case, you must be an administrator to proceed). 41 | * Right-click inside the window, and click "Paste Shortcut". The shortcut to the script should now be in the Startup folder. 42 | 43 | ## Static Hands vs Vim 44 | 45 | Vim shortcuts are great, but they have a learning curve. And not a short one. Static Hands' shortcuts are super simple and quick. If you are already a vim user, you do not need this repo. And for us non-Vim users. The feature Vim users praise the most is the ability to move the cursor without changing hand position (HJKL keys). They actually like it so much they write plugins for every other program in the world to support the same shortcuts via “Vim modes”. The thing is that Vim mode is less intuitive (HJKL for arrows is much inconvenient than IJKL), and it forces more adaptation time. 46 | 47 | ## Basic Features 48 | 49 | The Strength of these key bindings is in the shortcuts. 50 | For example, the shortcut Ctrl+Left Arrow is a great shortcut, but in reality that forces us, developers, to move our hands to the sides. We can now use CapsLock+f+j and get the same results without any effort. It'll take some time to fully get used to it, but it will pay off. 51 | 52 | ### Available commands ⏱️ 53 | 54 | #### Left and Right Hand Key Bindings 55 | |Key/Commands|Function 💥| 56 | |:----------:|:-------| 57 | |CapsLock+j|Left| 58 | |CapsLock+k|Down| 59 | |CapsLock+i|Up| 60 | |CapsLock+l|Right| 61 | |CapsLock+u| To the start of the line (Home)| 62 | |CapsLock+o| To the end of the line (End)| 63 | |CapsLock+h| Delete| 64 | |CapsLock+;| Backspace| 65 | |CapsLock+'| Enter| 66 | |CapsLock+p| Insert| 67 | |CapsLock+y| PageUp| 68 | |CapsLock+n| PageDown| 69 | |CapsLock++| Window always on top (toggle to turn off)| 70 | 71 | #### Left Hand Key Bindings 72 | |Key/Commands|Function| 73 | |:----------:|:-------| 74 | |CapsLock+f|Ctrl| 75 | |CapsLock+d|Shift| 76 | |CapsLock+s|Alt| 77 | |CapsLock+w|Win Key| 78 | 79 | 80 | * Notice one-click CapsLock still functions the same 81 | 82 | ### Speed ⚡️ 83 | 84 | |Key/Commands|Function| 85 | |:----------:|:-------| 86 | |CapsLock+m| Left X 6| 87 | |CapsLock+,| Down X 5 | 88 | |CapsLock+8| Up X 5 | 89 | |CapsLock+.| Right X 6| 90 | 91 | 92 | ### Case Changing 93 | 94 | |Key/Commands|Function| 95 | |:----------:|:-------| 96 | |CapsLock+9|Upper Case| 97 | |CapsLock+0|Lower Case| 98 | |CapsLock+-|Title Case| 99 | -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/undraw_docusaurus_mountain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /site/static-hands-docs/static/img/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | --------------------------------------------------------------------------------