{"id":16532677,"url":"https://github.com/hamedfathi/replay","last_synced_at":"2025-10-28T11:31:01.001Z","repository":{"id":41543172,"uuid":"501745516","full_name":"HamedFathi/Replay","owner":"HamedFathi","description":"A Visual Studio Code extension for auto typing.","archived":false,"fork":false,"pushed_at":"2024-03-17T17:59:45.000Z","size":245,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-01T14:51:10.072Z","etag":null,"topics":["auto-typer","auto-typing","extension","typescript","typing","visual-studio-code","vs-code","vs-code-extenstion","vscode","vscode-extension"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HamedFathi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"HamedFathi","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-06-09T17:20:14.000Z","updated_at":"2024-08-28T11:16:32.000Z","dependencies_parsed_at":"2024-10-11T18:13:16.843Z","dependency_job_id":"642d1ce0-d9a1-4f40-a65c-b821fd98d137","html_url":"https://github.com/HamedFathi/Replay","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedFathi%2FReplay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedFathi%2FReplay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedFathi%2FReplay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedFathi%2FReplay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HamedFathi","download_url":"https://codeload.github.com/HamedFathi/Replay/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238638516,"owners_count":19505615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-typer","auto-typing","extension","typescript","typing","visual-studio-code","vs-code","vs-code-extenstion","vscode","vscode-extension"],"created_at":"2024-10-11T18:13:12.102Z","updated_at":"2025-10-28T11:31:00.991Z","avatar_url":"https://github.com/HamedFathi.png","language":"TypeScript","funding_links":["https://github.com/sponsors/HamedFathi"],"categories":[],"sub_categories":[],"readme":"\n![replay](https://github.com/user-attachments/assets/7d0e1059-9f60-4b93-8c0c-cf8effc0c620)\n\n\n# [Replay](https://marketplace.visualstudio.com/items?itemName=hamedfathi.vscode-replay)\n\nLive coding is the best way for teaching and sharing your knowledge with others but as you know this is not easy! The idea behind writing this extension is to have live coding with a hundred percent accuracy and less stressful moments!\n\nYou can achieve the goal in two different ways:\n\n1. Recording everything via macros.\n2. Replay a pre-defined script.\n\nFor the first approach, it is fast but not accurate because you are recording your mistakes too, so, I am using the second one to nail it! \n\n## Features\n\nYou have full control of the script that you want to type:\n\n* Move the cursor in any direction and number you want.\n* Using predefined utility commands to simplify the typing process.\n* Calling commands available in VS Code e.g Format the document by `editor.action.formatDocument`.\n* Present your code perfectly with manual and automatic pause/resume cycle.\n\n## Usage\n\n![usage](https://user-images.githubusercontent.com/8418700/177055779-f487f57d-98a3-463f-adfe-ac110901cf67.png)\n\nFor using this extension, first you should create a `.vscreplay` file. Anything in this file will auto-type exactly as you have like all characters, new lines, spaces, and so on but you can change the way of typing with the operational characters and commands that are provided before.\n\n`replay` and `pause` commands just work when you have a `.vscreplay` file in your active editor.\n\nFor example a file like:\n\n```\n---\nfile: ./folder1/folder2/jest-intro.js\nline: 0\ncol: 0\nspeed: 10\ndelay: 150\nbspeed: 5\nbdelay: 150\nclean: true\nsave: true\n---\n⧉speed:10:100\n//Hi, My name is Hamed Fathi!⭯2⌫29\n⧉delete-all\n⧉speed:5:75\n// What is Jest?\n// Jest is a delightful JavaScript Testing Framework with a focus on simplicity.\n// How should we write a test with Jest?\n⭯\n⧉delete-all\n// (1) Install Jest using your favorite package manager:\n// npm install --save-dev jest\n// or\n// yarn add --dev jest\n⧉waitn:3:Creating functionality\t\n\n// (2) Create a 'sum.js' file:\nfunction sum(a, b) {⮒⮒}⇥\n↑↑  return a + b;↓\nmodule.exports = sum;\n⧉waitn:3:Creating test file\t\n\n// (3) Create a file named 'sum.test.js'. This will contain our actual test:\nconst sum = require('./sum');\ntest('adds 1 + 2 to equal 3', () =\u003e {⮒⮒});⇥\n↑↑  expect(sum(1, 2)).toBe(3);↓\n⧉execute:editor.action.formatDocument\n⧉waitn:3:Configuration\n\n// (4) Add the following section to your 'package.json':\n/*⮒*/↑\n{\n  \"scripts\": {\n    \"test\": \"jest\"\n  }\n}↓↓\n\n⧉waitn:3:Running the test\n// (5) Finally, run 'yarn test' or 'npm test' and Jest will print this message:\n// PASS  ./sum.test.js\n// ✓ adds 1 + 2 to equal 3 (5ms)\n```\n\nThe sample file is also accessible from [here](https://github.com/HamedFathi/Replay/blob/main/sample/sample.vscreplay).\n\n### Operational Characters\n\n|  | Name | Description |\n|:---------:|------|-------------|\n| ↑         | up            | Move the cursor up one line |\n| ↓         | down          | Move the cursor down one line |\n| →         | right         | Move the cursor right one character |\n| ←         | left          | Move the cursor left one character |\n| ⤒         | first         | Move the cursor to the beginning of the first line |\n| ⤓         | last          | Move the cursor to the beginning of the last line |\n| ⇤        | begin         | Move the cursor to the beginning of the line |\n| ⇥        | end           | Move the cursor to the end of the line |\n|⮒         | newline       |  Adding a new line |\n|⟿        |  whitespace     |  Adding a whitespace |\n| ⌫       |  backspace      | Delete the character to the left of the cursor |\n|⭯         | pause         | Pause the running process and ask user to continue via dialog |\n|⧉        |  command        |  Adding some useful functionality to your script     |\n\nYou can use a number after the below operational characters to write less repetitive code:\n\n|  | Name | Description |\n|:---------:|------|-------------|\n| ↑2         | up-more        | Move the cursor up {N} lines |\n| ↓10         | down-more      | Move the cursor down {N} lines |\n| →5         | right-more     | Move the cursor right {N} characters |\n| ←7         | left-more      | Move the cursor left {N} characters |\n| ⮒3       | newline-more      | Adding {N} new lines |\n|⟿4        | whitespace-more     |  Adding {N} whitespace |\n| ⌫8       | backspace-more      | Delete {N} characters to the left of the cursor |\n| ⭯6       | pause-more      | Pause for {N} seconds |\n\nIf you set `0` for the count, the extension automatically considers it as `1`.\n### Commands\n\n|  | Name | Description |\n|:---------|------|------|\n| ⧉ goto:1:5 |goto| go to the specified line and column, you can use `eol` for end of line and `ll` for last line e.g `goto:ll:eol`|\n| ⧉ delete:1 |delete-line|delete whole content of the line and line itself, you can use `ll` for last line|\n| ⧉ empty:1 |empty-line|delete whole content of the line but keep the line empty, move the cursor to the beginning of the line, you can use `ll` for last line|\n| ⧉ delete-area:1:5:2:9|delete-area| delete characters of the specified positions, you can use `eol` for end of line and `ll` for last line |\n| ⧉ delete-all |delete-all|delete whole content|\n| ⧉ execute:editor.action.formatDocument |execute|execute the specified command of VS Code.|\n| ⧉ selectn:10:1:5:2:14 |selectn| select the specified line and column for seconds, you can use `eol` for end of line and `ll` for last line |\n| ⧉ copy:1:5:2:14 |copy| copy the specified line and column, you can use `eol` for end of line and `ll` for last line |\n| ⧉ cut:3:4:6:eol |cut| cut the specified line and column, you can use `eol` for end of line and `ll` for last line  |\n| ⧉ paste:6:5:7:20 |paste| paste the specified line and column, you can use `eol` for end of line and `ll` for last line  |\n| ⧉ waitn:10 \u003cbr/\u003e ⧉ waitn:10:comment |waitn| waiting for {N} seconds with a comment if you set |\n| ⧉ wait \u003cbr/\u003e ⧉ wait:comment |wait| Showing a Yes/No dialog with a comment if you set |\n| ⧉ speed \u003cbr/\u003e ⧉ speed:speed:delay |speed| Control the speed and delay of typing|\n| ⧉ memory:clip1:1:4:6:10|save| save the content of the specified area in memory with the variable name of `clip1`, variable name should start with a letter and contains letters \u0026 numbers, you can use `eol` for end of line and `ll` for last line |\n| ⧉ restore:clip1:0:7:3:22|restore| restore the content of `clip1` variable in the specified area, variable name should start with a letter and contains letters \u0026 numbers, you can use `eol` for end of line and `ll` for last line |\n\n`line` starts from `0` and column starts from `1`.\n\n### Settings\n\nEach `.vscreplay` should have a `setting` on top of the `.vscreplay` file.\n\n```\n---\nfile: ./folder1/sample1.js\nline: 0\ncol: 0\nspeed: 10\ndelay: 150\nbspeed: 5\nbdelay: 150\nclean: true\nnext: ./sample2.vscreplay\nsave: true\n---\n...\n```\n\n| Name| Optional | Default | Description                                               |\n|:----|:--------:|:-------:|-----------------------------------------------------------|    \n|file | No       | -       | The target `file` that you want to type into it.          |\n|line | Yes      | 0       | The starting `line` for typing.                           |\n|col  | Yes      | 0       | The starting `column` for typing.                         | \n|speed| Yes      | 20      | The `speed` of typing. (0 \u003c= speed \u003c= 200)                | \n|delay| Yes      | 250     | The random `delay` between of typing. (0 \u003c= speed \u003c= 400) | \n|bspeed| Yes      | 20      | The `backspace speed` of typing. (0 \u003c= speed \u003c= 200)                | \n|bdelay| Yes      | 250     | The random `backspace delay` between of typing. (0 \u003c= speed \u003c= 400) | \n|clean| Yes      | true    | It `Cleans` the target file's content if it is true     |\n|next | Yes      | -       | The `next` .vscreplay file you want to call after finishing auto typing of this file.|  \n|save | Yes      | true    | `Save` the final result automatically if it is true         |\n\nYou should use the `relative` path for the `file` and `next` settings. The root for the starting point is your VS Code workspace folder.\n\n### Snippets\n\n![snippets](https://user-images.githubusercontent.com/8418700/177030529-5a717407-166e-4916-988c-f5b1b6dc3e50.png)\n\nCopy and paste the characters from this tutorial is not a good way! To work easier you can use the below snippets.\n\n| Name                  | Snippet                      |\n|-----------------------|------------------------------|\n| up                    | replay-up                    |\n| down                  | replay-down                  |\n| right                 | replay-right                 |\n| left                  | replay-left                  |\n| first                 | replay-first                 |\n| last                  | replay-last                  |\n| begin                 | replay-begin                 |\n| end                   | replay-end                   |\n| newline               | replay-newline               |\n| remove-newline        | replay-remove-newline        |\n| whitespace            | replay-whitespace            |\n| backspace             | replay-backspace             |\n| pause                 | replay-pause                 |\n| up-more               | replay-up-more               |\n| down-more             | replay-down-more             |\n| right-more            | replay-right-more            |\n| left-more             | replay-left-more             |\n| newline-more          | replay-newline-more          |\n| whitespace-more       | replay-whitespace-more       |\n| backspace-more        | replay-backspace-more        |\n| pause-more            | replay-pause-more            |\n| command               | replay-cmd\u003cbr/\u003ereplay-cmd-arg1\u003cbr/\u003ereplay-cmd-arg2\u003cbr/\u003ereplay-cmd-arg3\u003cbr/\u003ereplay-cmd-arg4|\n| goto                  | replay-cmd-goto                  |\n| delete-line           | replay-cmd-delete-line           |\n| empty-line            | replay-cmd-empty-line            |\n| delete-area           | replay-cmd-delete-area           |\n| delete-all            | replay-cmd-delete-all            |\n| execute               | replay-cmd-execute               |\n| selectn               | replay-cmd-selectn               |\n| copy                  | replay-cmd-copy                  |\n| cut                   | replay-cmd-cut                   |\n| paste                 | replay-cmd-paste                 |\n| waitn                 | replay-cmd-waitn                 |\n| wait                  | replay-cmd-wait                  |\n| speed                 | replay-cmd-speed                 |\n| memory                | replay-cmd-memory                |\n| restore               | replay-cmd-restore               |\n| setting               | replay-setting                   |\n\n## Shortcuts\n\nFor manual control on auto typing you can use the following shortcuts:\n\n| Action | Window/Linux   | Mac           |\n|:-------|:--------------:|:-------------:|    \n|Pause   |alt+ctrl+shift+p|alt+cmd+shift+p|\n|Resume  |alt+ctrl+shift+r|alt+cmd+shift+r|\n\n## Release Notes\n### 1.0.0\n\n* The first release.\n\n### 1.1.0\n\n* The `boost` operational character is added.\n\n### 1.2.0\n\n* The `double-boost` operational character is added.\n\n### 1.3.0\n\n* The `selectn` command is added.\n* The `speed` command is added.\n* The `esbuild` bundler is added.\n* The `backspace` speed and delay configurations are added.\n\n### 1.4.0\n\n* The `memory` command is added.\n* The `restore` command is added.\n* The `ll` (last line) is added.\n\n### 1.5.0\n\n* some bug fixes.\n\n## Inspiration\n\nHeavily inspired by [auto-type](https://github.com/eee-c/auto-type).\n\n---\n\n\u003ca href=\"https://www.flaticon.com/free-icons/replay\" title=\"replay icons\"\u003eReplay icons created by Andrean Prabowo - Flaticon\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhamedfathi%2Freplay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhamedfathi%2Freplay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhamedfathi%2Freplay/lists"}