Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

All the operator mappings please? #171

Open
mangelozzi opened this issue Jul 21, 2024 · 1 comment
Open

All the operator mappings please? #171

mangelozzi opened this issue Jul 21, 2024 · 1 comment
Assignees

Comments

@mangelozzi
Copy link

mangelozzi commented Jul 21, 2024

Loving it,

The wiki here:
text-case
Has these mappings:

Upper case	LOREM IPSUM	textcase.api.to_constant_case	u
Lower case	lorem ipsum	textcase.api.to_lower_case	l
Snake case	lorem_ipsum	textcase.api.to_snake_case	s
Dash case	lorem-ipsum	textcase.api.to_dash_case	d
Constant case	LOREM_IPSUM	textcase.api.to_constant_case	n
Camel case	loremIpsum	textcase.api.to_camel_case	c
Pascal case	LoremIpsum	textcase.api.to_pascal_case	p

But it is missing mapping for these other awesome ones ( I added a proposed char for a starting point):

Dot case	lorem.ipsum	textcase.api.to_dot_case      .
Title case	Lorem Ipsum	textcase.api.to_title_case    t	
Path case	lorem/ipsum	textcase.api.to_path_case     /
Phrase case	Lorem ipsum	textcase.api.to_phrase_case   <space>

Could one add to the readme how to map the missing operator in lua (I've seen this https://github.com/johmsalas/text-case.nvim#example-in-vimscript-using-plug-with-custom-keybindings and am trying to convert it to lua), or even better add them to the default maps? Doesnt have to be what I proposed, but would be great to be able to use them.

For anyone else trying to figure it out, here's how you do it:

    -- Setup for Kebab Case with `k` (so we can use `d` for dot instead of dash case)
    vim.keymap.set('n', 'gak',  function() require('textcase').current_word('to_kebab_case') end, { noremap = true, silent = true, desc = "Convert to kebab-case" })
    vim.keymap.set('n', 'gaK',  function() require('textcase').current_word('to_kebab_case') end, { noremap = true, silent = true, desc = "LSP rename to kebab-case" })
    vim.keymap.set('n', 'gaok', function() require('textcase').operator('to_kebab_case') end, { noremap = true, silent = true, desc = "to-kebab-case" })
    vim.keymap.set('x', 'gak',  function() require('textcase').operator('to_kebab_case') end, { noremap = true, silent = true, desc = "Convert to kebab-case" })

    -- Setup for Dot Case with `d.`
    vim.keymap.set('n', 'gad',  function() require('textcase').current_word('to_dot_case') end, { noremap = true, silent = true, desc = "Convert to dot.case" })
    vim.keymap.set('n', 'gaD',  function() require('textcase').current_word('to_dot_case') end, { noremap = true, silent = true, desc = "LSP rename to dot.case" })
    vim.keymap.set('n', 'gaod', function() require('textcase').operator('to_dot_case') end, { noremap = true, silent = true, desc = "to.dot.case" })
    vim.keymap.set('x', 'gad',  function() require('textcase').operator('to_dot_case') end, { noremap = true, silent = true, desc = "Convert to dot.case" })

    -- Setup for Title Case with `t`
    vim.keymap.set('n', 'gat',  function() require('textcase').current_word('to_title_case') end, { noremap = true, silent = true, desc = "Convert to Title Case" })
    vim.keymap.set('n', 'gaT',  function() require('textcase').current_word('to_title_case') end, { noremap = true, silent = true, desc = "LSP rename to Title Case" })
    vim.keymap.set('n', 'gaot', function() require('textcase').operator('to_title_case') end, { noremap = true, silent = true, desc = "To Title Case" })
    vim.keymap.set('x', 'gat',  function() require('textcase').operator('to_title_case') end, { noremap = true, silent = true, desc = "Convert to Title Case" })

    -- Setup for Path Case with `/`
    vim.keymap.set('n', 'ga/',  function() require('textcase').current_word('to_path_case') end, { noremap = true, silent = true, desc = "Convert to path/case" })
    vim.keymap.set('n', 'ga?',  function() require('textcase').current_word('to_path_case') end, { noremap = true, silent = true, desc = "LSP rename to path/case" })
    vim.keymap.set('n', 'gao/', function() require('textcase').operator('to_path_case') end, { noremap = true, silent = true, desc = "to/path/case" })
    vim.keymap.set('x', 'ga/',  function() require('textcase').operator('to_path_case') end, { noremap = true, silent = true, desc = "Convert to path/case" })

    -- Setup for Phrase Case with `<space>`
    vim.keymap.set('n', 'ga<space>',  function() require('textcase').current_word('to_phrase_case') end, { noremap = true, silent = true, desc = "Convert to phrase case" })
    vim.keymap.set('n', 'ga<space>',  function() require('textcase').current_word('to_phrase_case') end, { noremap = true, silent = true, desc = "LSP rename to phrase case" })
    vim.keymap.set('n', 'gao<space>', function() require('textcase').operator('to_phrase_case') end, { noremap = true, silent = true, desc = "to phrase case" })
    vim.keymap.set('x', 'ga<space>',  function() require('textcase').operator('to_phrase_case') end, { noremap = true, silent = true, desc = "Convert to phrase case" })

Or more succintly:

    -- Common function to set up mappings for each case
    local function setup_textcase_keymaps(key, case, desc, op_desc)
        -- Normal mode: Convert current word
        vim.keymap.set('n', 'ga' .. key, function() require('textcase').current_word(case) end, { noremap = true, silent = true, desc = "Convert to " .. desc })
        -- Normal mode: LSP rename
        vim.keymap.set('n', 'ga' .. key:upper(), function() require('textcase').current_word(case) end, { noremap = true, silent = true, desc = "LSP rename to " .. desc })
        -- Normal mode: Operator
        vim.keymap.set('n', 'gao' .. key, function() require('textcase').operator(case) end, { noremap = true, silent = true, desc = op_desc })
        -- Visual mode: Operator
        vim.keymap.set('x', 'ga' .. key, function() require('textcase').operator(case) end, { noremap = true, silent = true, desc = "Convert to " .. desc })
    end

    -- Define key mappings for various cases
    setup_textcase_keymaps('k', 'to_dash_case', 'kebab-case', 'to-kebab-case')
    setup_textcase_keymaps('d', 'to_dot_case', 'dot.case', 'to.dot.case')
    setup_textcase_keymaps('t', 'to_title_case', 'Title Case', 'To Title Case')
    setup_textcase_keymaps('/', 'to_path_case', 'path/case', 'to/path/case')
    setup_textcase_keymaps('<space>', 'to_phrase_case', 'phrase case', 'to phrase case')
@mangelozzi mangelozzi changed the title All the mapping please? All the operator mappings please? Jul 21, 2024
@johmsalas johmsalas self-assigned this Jul 23, 2024
@johmsalas
Copy link
Owner

Hi!, thanks for being explicit on how to do it. I'm going to keep your issue open until I add those to the readme

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants