Skip to content

AlejandroSuero/freeze-code.nvim

Repository files navigation

Stargazers Issues

Freeze Neovim Plugin

Take a "screenshot" of your code by turning it into an image, thanks to freeze by charm.

Report an issue · Suggest a feature

Remember to always follow the code of conduct

Warning

This plugin requires Neovim v0.9.0 or higher

Installation

Using your plugin manager at your disposal, in the example lazy is going to be used.

Note

If you don't have freeze installed, and if you have golang installed, it will go install github.com/charmbracelet/freeze@latest for you 🫡.

In the case that you don't have neither of those, don't you worry 😉, we got you cover. It will install freeze using cURL to the freeze's releases page.

  • Default installation:
return {
    "AlejandroSuero/freeze-code.nvim",
    config = function()
        require("freeze-code").setup()
    end,
}

Note

You can also install it using Rocks.nvim

:Rocks install freeze-code.nvim

Also as luarocks install freeze-code.nvim

  • Customizable installation:
return {
    "AlejandroSuero/freeze-code.nvim",
    config = function()
        require("freeze-code.nvim").setup({
            -- your configuration goes here
        })
    end,
}

Note

See default configuration below.

local opts = {
  freeze_path = vim.fn.exepath("freeze"), -- where is freeze installed
  copy_cmd = "", -- the default copy command is native to your OS (see below)
  copy = false, -- copy after screenshot option
  open = false, -- open after screenshot option
  dir = vim.env.PWD, -- where is the image going to be saved "." as default
  freeze_config = { -- configuration options for `freeze` command
    output = "freeze.png",
    config = "base",
    theme = "default",
  },
}

Note

The commands to copy, as defaults per OS will be, for example, for Windows: Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Clipboard]::SetImage(...), for Linux: xclip -selection clipboard -t image/png ... if is an X11 session, wl-copy < ... if is a Wayland session, and for MacOS: osascript -e 'to set the clipboard to (read (POSIX file "...") as «class PNGf»)'.

If you specify a copy_cmd in the configuration, it will be used instead of the default one. To use the custom command, you need to specify "filename" in the command, where the image will be saved.

Once you have it installed, you can use :checkhealt freeze-code to see if there are any problems with the installation or you need to install additional tools.

Usage

To use this plugin, simply call :Freeze and it will take a screenshot of the current buffer and save it in the dir path you have configured.

If you want to take a screenshot of a specific line, you can use the :Freeze in visual mode, and it will take a screenshot of the selected lines.

Keymaps

local fz_api = require("freeze-code.utils.api")
vim.keymap.set("n", "<leader>fz", fz_api.freeze)
vim.keymap.set("v", "<leader>fz", function()
  fz_api.freeze(vim.fn.line("'<"), vim.fn.line("'>"))
end)
-- or using `<cmd>Freeze<cr>`
vim.keymap.set("n", "<leader>fl", fz.freeze_line)
-- or using `<cmd>FreezeLine<cr>`

Contributing

Thank you to everyone that is contributing and to those who want to contribute. Any contribution is welcomed!

Quick guide:

  1. Fork this project.
  2. Clone your fork (git clone <fork-URL>).
  3. Add main repo as remote (git remote add upstream <main-repo-URL>).
  4. Create a branch for your changes (git switch -c feature/your-feature or git switch -c fix/your-fix).
  5. Commit your changes (git commit -m "feat(...): ...").
  6. Push to your fork (git push origin <branch-name>).
  7. Open a PR.

For more information, check CONTRIBUTING.md.

Contributors

Thanks goes to these wonderful people that have contributed to this project:

contributors