https://github.com/nfour/js-to-ahk
https://github.com/nfour/js-to-ahk
Last synced: 6 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/nfour/js-to-ahk
- Owner: nfour
- Created: 2019-05-23T06:59:51.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-03T22:27:05.000Z (over 3 years ago)
- Last Synced: 2024-10-11T23:14:45.703Z (almost 2 years ago)
- Language: TypeScript
- Size: 391 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# (WIP) Simple AHK - A simple AHK transpiler
> Write Javscript and produce .ahk scripts
This project is limited in scope to:
- Set key bindings
- Set keys to repeat
- Set keys to toggle
- _A composition of the above_
- [Purpose](#purpose)
- [Example](#example)
- [API](#api)
- [Why](#why)
## Purpose
- Gaming. Write macros for games to fine tune bindings and reduce RSI
- Also useful for general simple desktop bindings
- Composition. Compose existing AHK scripts and arbitrary snippets to manage your scripts programmatically.
## Example
> Gaming example
```ts
import { Ahk, repeatWhilePressed, toggleRepeatOnTap, toggleOnTap } from 'simple-ahk
Ahk()
.IfWinActive('ahk_class my_game')
.bind('LShift', 'Space')
.bind( '$~LButton', repeatWhilePressed({ whilePressed: 'LButton', repeatKeys: ['LButton'] }))
.bind('$~RButton', toggleRepeatOnTap({ whenTapped: 'RButton', repeatKeys: ['RButton'] }))
.bind('$x', toggleOnTap({ whenTapped: 'x', toogleKeys: ['z'] }))
.toFile('./myScript.ahk')
const myScript = Ahk()
.SingleInstance('Force')
.bind('LShift', 'Space')
.toString()
Ahk()
.raw(`
#IfWinActive, ahk_class foobar
LShift::Space
`)
.toFile('./myRawScript.ahk')
```
## API
- `Ahk` exposes a fluid interface.
- Each method call pushes lines to the stack, so order matters.
```ts
const ahk = Ahk()
ahk.IfWinActive('ahk_class my_game')
// #IfWinActive, ahk_class my_game
ahk.bind('~LShift', 'Space')
// ~LShift::Space
ahk.raw(`~LButton::RButton`)
// ~LButton::RButton
ahk.toFile('./myScript.ahk')
// Writes the script to the path, which is relative to the initial file, `dirname(require.main.filename)`
ahk.toString() // Returns the script as as string.
/*
#IfWinActive, ahk_class my_game
~LShift::Space
~LButton::RButton
*/
ahk.stack // The current stack, as [[]]
```
## Why
- AHK is seems like the most dominant way of producing bindings in Windows effectively
- AHK is a miserable language to work in
- It's less complex to transpile to AHK than to use AHK libs, as the scope of this project is quite focused. The transpiled code can then be audited or checked out.