[Workaround] Make cursor shape changable in vi mode
ruslanSorokin opened this issue · 2 comments
Environment
fish version: fish, version 3.6.1
wezterm version: wezterm 20230712-072601-f4abf8fd
tide version: tide, version 5.6.0
OS version: macOS 11.6.4
Question
I'm encountering an issue with the cursor - its shape does not change either in vanilla fish or with the tide plugin.
Vanilla mode
![image](https://private-user-images.githubusercontent.com/88016602/270128972-d97bafc1-13b5-48d8-a7c1-4b742efa3640.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMjg5NzItZDk3YmFmYzEtMTNiNS00OGQ4LWE3YzEtNGI3NDJlZmEzNjQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkNTI0Y2Y4ZjYwYzQ5Nzg4Njg3ZmVkOGI0YTAwNzdlZjc0MmJmNzM2OTA1NWY4Y2YzYjJjMzUxYTg3OWRmMDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.QYT627ZCpnr6NXZ10SXbwFKUjjklSSP0Bae5xESvTVI)
![image](https://private-user-images.githubusercontent.com/88016602/270128980-cbea2d7b-94f3-42fb-ad3d-adfb0e52383f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMjg5ODAtY2JlYTJkN2ItOTRmMy00MmZiLWFkM2QtYWRmYjBlNTIzODNmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU0ZWZmOGJiZmMyMjQ0OTRhNmJiNzM0MTY3MzBhNzNlZGNkMTU2NjVjMTMwNGEwYTk4ZmJkMGMzZjZmOTcwNzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.useHX1V1AG2lzn53IoishNL_RR2WQuSytTTGprxm2tw)
_
is the default shape of the wezterm terminal.
I've found a workaround that works for me in the vanilla mode:
Vanila mode with custom fish_mode_prompt
![image](https://private-user-images.githubusercontent.com/88016602/270129260-5a9ebcdb-9c20-4547-a185-e7ad83dcbf80.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMjkyNjAtNWE5ZWJjZGItOWMyMC00NTQ3LWExODUtZTdhZDgzZGNiZjgwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM1YjY4ZDI4YTFjOGZjYjhjNTQyZGYzYzI1YjE4MDA1ODA4M2FiZDBjNzI0YjI2ZGViZDU5ODdhM2ZhNjY0OGMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.MZgOI56bwvgw-8ZpV0nKpPIpNg8QOzAm-VzXPxXedOQ)
![image](https://private-user-images.githubusercontent.com/88016602/270129266-2cd17fdb-2b09-4ed8-8574-2bab65689bbe.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMjkyNjYtMmNkMTdmZGItMmIwOS00ZWQ4LTg1NzQtMmJhYjY1Njg5YmJlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU4MmJkMGMyYTg1ODJlMzMzOGM0Yjg1MTY2MTliNGIxOTYyMzBjMmVkYTUwZDg5MzgxMmRkZDQ0MzBkYTVjZTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.V7hGfUp7XRbjSifYze1w6PD7t3fC5NIyRWwrpb468B4)
![image](https://private-user-images.githubusercontent.com/88016602/270129270-73e34712-9eeb-4a93-b9b7-dd942973d79a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMjkyNzAtNzNlMzQ3MTItOWVlYi00YTkzLWI5YjctZGQ5NDI5NzNkNzlhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVmM2IwYzE4OTlhMWE2ZTA2ZDYwYWFkZmFiYTMyY2MzZDRhMzJmOWZmMjFiNDdjMzQ1NzllZTE2NDY2YzIyY2QmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.yOU70KXSnC-eObIXC98bODXkQolJBoTlBCEASaeq9NM)
![image](https://private-user-images.githubusercontent.com/88016602/270129428-6bda3a48-2afc-40c3-97bc-1ffcdf494e05.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMjk0MjgtNmJkYTNhNDgtMmFmYy00MGMzLTk3YmMtMWZmY2RmNDk0ZTA1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU0NmVmNTU1YTdkMjJjMTA5MWJjOTEwMDg0MGEwZGMyMDBiNDk0OWFjMGRiNDUyNmE0ZTQyODc3NzgxM2E1YjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.hwW6XfyrQYrfV_l2OnCWphOM7kIEnMcmBn92If9EMf4)
But this workaround seems to be not suitable for the tide - it doesn't update the builtin tide's vi mode indicator and in visual mode cursor gets broken:
Tide with custom fish_mode_prompt
![image](https://private-user-images.githubusercontent.com/88016602/270130947-9eab169e-0ace-4513-9c7a-bfe7f8b9f835.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMzA5NDctOWVhYjE2OWUtMGFjZS00NTEzLTljN2EtYmZlN2Y4YjlmODM1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdlNDQxYzhmNjZmNjA3MjQwNWFkMTc3OGUzNzA5NjQ3NWM0MTRlZmQyZTgwZGQzYWQ3NzYzYjlmMmVkODEyMzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.L7WkplI1NLc0xHerbbSoVPpBYrkbkxfPixY_k0MhokA)
![image](https://private-user-images.githubusercontent.com/88016602/270130953-c34cb116-04b6-4384-b193-24e9bee37266.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMzA5NTMtYzM0Y2IxMTYtMDRiNi00Mzg0LWIxOTMtMjRlOWJlZTM3MjY2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTllMzE5NTc5ODA5ZGU4ZTZjOTExNjgxNmM4YmZkNTdkYWUzYzljYzI3M2FjMjEwOWMzZmJhOTJmODU2NDMyOTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.-R0jJmSria5IQkheXJ0noqPu2YIh83Torrqx-qGsi98)
![image](https://private-user-images.githubusercontent.com/88016602/270130962-b2c51373-08c1-49b3-81fc-e03ce4e672b3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMzA5NjItYjJjNTEzNzMtMDhjMS00OWIzLTgxZmMtZTAzY2U0ZTY3MmIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkwMmRiMjdlNGEzYzJlOGQwMGEyMmM5OTliMzI4ZjkxOGFhOGViN2ZmMzI5ZWVlMDUwMjY2Mzk1NTMxOWExZTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.swss2ipONgBTUt--Wx81GySCLnsO2GMeB5JT4Zmp1SA)
![image](https://private-user-images.githubusercontent.com/88016602/270130982-da4c2bdf-c1a3-40c5-89b8-ad8437839584.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTE3OTc1NTQsIm5iZiI6MTcxMTc5NzI1NCwicGF0aCI6Ii84ODAxNjYwMi8yNzAxMzA5ODItZGE0YzJiZGYtYzFhMy00MGM1LTg5YjgtYWQ4NDM3ODM5NTg0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzMwVDExMTQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM4MWNkNjg0ZGY1Yjc0ODA3M2M4ODJjNWZkY2M2MTAyYjY2NjRlMjE1MDZlNGFmMmE4NTg1Zjg5MjZkMDkxZTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.5YKjG9SCfwhADtG8YKC0OIh-6HN_GIXu-R2IHCGF-To)
So, I've tried to inject this logic that changes the cursor into the tide's logic for the indicator:
# ~/.config/fish/functions/_tide_item_vi_mode
function _tide_item_vi_mode
test "$fish_key_bindings" != fish_default_key_bindings && switch $fish_bind_mode
case default
echo -en "\e[2 q"
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_default tide_vi_mode_color=$tide_vi_mode_color_default \
_tide_print_item vi_mode $tide_vi_mode_icon_default
case insert
echo -en "\e[6 q"
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_insert tide_vi_mode_color=$tide_vi_mode_color_insert \
_tide_print_item vi_mode $tide_vi_mode_icon_insert
case replace replace_one
echo -en "\e[4 q"
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_replace tide_vi_mode_color=$tide_vi_mode_color_replace \
_tide_print_item vi_mode $tide_vi_mode_icon_replace
case visual
echo -en "\e[2 q"
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_visual tide_vi_mode_color=$tide_vi_mode_color_visual \
_tide_print_item vi_mode $tide_vi_mode_icon_visual
end
end
It works properly, but I don't think it's the best solution. I believe, that there are better ways to implement this, but I have 0 experience with debuging shell rendering. So, If someone who also uses vi mode with tide and has more experience in debuging shell stuff can look at this and share their thoughts, solutions - I would appreciate it.
Afaict this would be the proper way of doing the workaround in Tide. The VI mode item is the perfect place to run those escape codes that change the cursor shape.
Is it possible to have this included in tide? I don't know how to both keep tide up to date and having this feature.