{"id":13740722,"url":"https://github.com/artemave/tmux_super_fingers","last_synced_at":"2025-10-06T20:26:20.435Z","repository":{"id":66735940,"uuid":"367986286","full_name":"artemave/tmux_super_fingers","owner":"artemave","description":"A Tmux plugin to open file links from the terminal in vim","archived":false,"fork":false,"pushed_at":"2025-05-25T19:12:50.000Z","size":211,"stargazers_count":93,"open_issues_count":6,"forks_count":17,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-25T21:07:10.528Z","etag":null,"topics":["tmux","tmux-plugin","vim"],"latest_commit_sha":null,"homepage":"","language":"Python","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/artemave.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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,"zenodo":null}},"created_at":"2021-05-16T21:12:44.000Z","updated_at":"2025-05-25T19:12:53.000Z","dependencies_parsed_at":"2024-04-11T21:48:53.820Z","dependency_job_id":"0e70300d-d003-4862-afd1-85a819b50cf2","html_url":"https://github.com/artemave/tmux_super_fingers","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/artemave/tmux_super_fingers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artemave%2Ftmux_super_fingers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artemave%2Ftmux_super_fingers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artemave%2Ftmux_super_fingers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artemave%2Ftmux_super_fingers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artemave","download_url":"https://codeload.github.com/artemave/tmux_super_fingers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artemave%2Ftmux_super_fingers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278673098,"owners_count":26026038,"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","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["tmux","tmux-plugin","vim"],"created_at":"2024-08-03T04:00:51.589Z","updated_at":"2025-10-06T20:26:20.418Z","avatar_url":"https://github.com/artemave.png","language":"Python","funding_links":[],"categories":["Plugins"],"sub_categories":[],"readme":"# Tmux Super Fingers [![Tmux Super Fingers](https://github.com/artemave/tmux_super_fingers/actions/workflows/python-app.yml/badge.svg)](https://github.com/artemave/tmux_super_fingers/actions/workflows/python-app.yml)\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"300\" src=\"https://78.media.tumblr.com/e1712952f6eb24f418a997a8da6ae831/tumblr_ou1znif6LW1w4t58uo1_500.gif\" /\u003e\n\u003c/p\u003e\n\nA tmux \"mode\" that allows you to open file links in an `$EDITOR`, urls in the browser and more.\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eDemo\u003c/summary\u003e\n\nhttps://user-images.githubusercontent.com/23721/127735461-e716cca9-c6e4-46b9-97d1-05bc7f84e00c.mp4\n\n\u003c/details\u003e\n\n## Description\n\nTmux [fingers](https://github.com/morantron/tmux-fingers) plugin introduced the \"fingers\" mode, where particularly looking chunks of text (e.g. file paths) are highlighted and assigned a character \"mark\". When user hits the mark key, the highlighted text gets copied to clipboard.\n\nSuper Fingers builds upon this idea. Notably:\n\n- it opens files in a terminal `$EDITOR`* running elsewhere within the same tmux session**\n- only files paths that actually exist are highlighted\n- it opens files at line number\n- text that isn't a file path, but maps onto one (e.g. `UsersController#show` in rails log or `+++ b/app/models/user.rb` in a diff) is also highlighted\n- different types of marks are actioned differently: text files are sent to editor, urls and image files - to OS open.***\n- works across all panes in a window\n- can be invoked while scrolling up\n- handles multiline marks (wrapping)\n\n\\* _currently this behavior only works for (n)vim - everything else is sent to OS open._\u003c/br\u003e\n\\** _if no running terminal `$EDITOR` is found in the session, plugin attempts to start one in a new window._\u003c/br\u003e\n\\*** _code is designed in such a way that it should be easy to add new types of marks/actions._\u003c/br\u003e\n\n### Secondary action\n\nWhen in fingers mode, pressing \u003ckbd\u003espace\u003c/kbd\u003e toggles \"secondary\" mode. In this mode, mark is copied to clipboard.\n\n## Install\n\nRequires Python \u003e= 3.9.\n\n### Using [TPM](https://github.com/tmux-plugins/tpm):\n\n    set -ga update-environment EDITOR\n    set -g @plugin 'artemave/tmux_super_fingers'\n\nHit \u003ckbd\u003eprefix\u003c/kbd\u003e + \u003ckbd\u003eI\u003c/kbd\u003e to fetch and source the plugin.\n\n### Manual\n\nClone the repo:\n\n    git clone https://github.com/artemave/tmux_super_fingers.git ~/.tmux/plugins/tmux_super_fingers\n\nSource it in your `.tmux.conf`:\n\n    set -ga update-environment EDITOR\n    run-shell ~/.tmux/plugins/tmux_super_fingers/tmux_super_fingers.tmux\n\nReload TMUX conf by running:\n\n    tmux source-file ~/.tmux.conf\n\n## Configuration\n\n#### @super-fingers-key\n\nCustomize how to enter fingers mode. Always preceded by prefix: `prefix + @super-fingers-key`. Defaults to `f`.\n\n```\nset -g @super-fingers-key f\n```\n\n### Custom actions\n\nRequires writing some python code.\n\nThere are different types of mark [targets](./tmux_super_fingers/targets) (e.g. text file target, url target). Each target type has a primary and a secondary action. You can supply a python file that changes default actions for target types.\n\nFor example, the following code changes primary action to open files in vscode and secondary action to send them to vim:\n\n```python3\nimport os\nfrom .targets.file_target import FileTarget\nfrom .actions.send_to_vim_in_tmux_pane_action import SendToVimInTmuxPaneAction\nfrom .actions.action import Action\nfrom .targets.target_payload import EditorOpenable\n\n\nclass SendToVsCodeAction(Action):\n    def __init__(self, target_payload: EditorOpenable):\n        self.target_payload = target_payload\n\n    def perform(self):\n        path = self.target_payload.file_path\n\n        if self.target_payload.line_number:\n            path += f':{self.target_payload.line_number}'\n\n        os.system(f'code -g {path}')\n\n\nFileTarget.primary_action = SendToVsCodeAction\nFileTarget.secondary_action = SendToVimInTmuxPaneAction\n```\n\n_You can also define new action types. See [existing actions](./tmux_super_fingers/actions) for details._\n\nNow let's plug it in:\n\n```\nset -g @super-fingers-extend /path/to/the/above/code.py\n```\n\n## Troubleshooting\n\nCheck `/tmp/tmux_super_fingers_error.txt` for errors:\n```\ntail -F /tmp/tmux_super_fingers_error.txt\n```\n\n### Text files are not opened in vim/nvim but in a different editor\n\nPlease make sure your `EDITOR` env is set, and it's exclusively is set to `vim` or `nvim` (i.e. `EDITOR=/my/custom/path/nvim` will not work) \n\n\n## Development\n\nPrerequisites: python3, pipenv, node, make\n\n```\ngit clone https://github.com/artemave/tmux_super_fingers.git\ncd tmux_super_fingers\npipenv install --dev\nnpm install\n```\n\nRun checks and tests:\n\n```\nmake\n```\n\n## TODO\n\n- [x] generic, configurable/pluggable way to send highlited text to arbitrary action (not just `vim` and `xdg-open`)\n- [ ] search marks\n- [x] secondary action\n- [x] configurable `@super-fingers-key`\n- [x] create vim window if there are none in the session\n- [x] extract untested code into tested packages\n- [x] python stack traces (line numbers)\n- [x] handle image files\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartemave%2Ftmux_super_fingers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartemave%2Ftmux_super_fingers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartemave%2Ftmux_super_fingers/lists"}