diff --git a/.cargo/config b/.cargo/config new file mode 100644 index 0000000..d47f983 --- /dev/null +++ b/.cargo/config @@ -0,0 +1,11 @@ +[target.x86_64-apple-darwin] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] + +[target.aarch64-apple-darwin] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9154198..fe5af2c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,39 +7,67 @@ on: branches: - main +permissions: + contents: write + jobs: - pack: - runs-on: ubuntu-latest + build: + name: ${{ matrix.platform.os_name }} with rust ${{ matrix.toolchain }} + runs-on: ${{ matrix.platform.os }} + strategy: + fail-fast: false + matrix: + platform: + - os_name: linux-x86_64 + os: ubuntu-20.04 + target: x86_64-unknown-linux-gnu + origin_dylib_suffix: so + dest_dylib_suffix: so + + - os_name: mac-x86_64 + os: macOS-latest + target: x86_64-apple-darwin + origin_dylib_suffix: dylib + dest_dylib_suffix: so + + - os_name: mac-aarch64 + os: macOS-latest + target: aarch64-apple-darwin + origin_dylib_suffix: dylib + dest_dylib_suffix: so + + toolchain: + - stable steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v3 - - name: Setup nodejs - uses: actions/setup-node@v4 + - name: Build library + uses: houseabsolute/actions-rust-cross@v0 with: - node-version: 20 - cache: npm - cache-dependency-path: ./snap-client/package-lock.json + command: "build" + working-directory: ./generator + target: ${{ matrix.platform.target }} + toolchain: ${{ matrix.toolchain }} + args: "--release" - - name: Install deps - working-directory: snap-client - run: npm i - - - name: Build package - working-directory: snap-client - run: npm run build - - - name: Move into public folder - run: cp -r snap-client/build snap-server/public + - name: Rename dynamic lib + run: cp generator/target/${{ matrix.platform.target }}/release/libgenerator.${{ matrix.platform.origin_dylib_suffix }} lua/${{ matrix.platform.os_name }}generator.${{ matrix.platform.dest_dylib_suffix }} - name: Commit changes - uses: EndBug/add-and-commit@v9 + uses: EndBug/add-and-commit@v7 with: - message: "[Update] build newest client package" + message: '[Update] files based on generated files by template generator' + pull_strategy: 'NO-PULL' + push: false + + - name: Push changes + run: | + git pull --rebase + git push release: - needs: pack runs-on: ubuntu-latest + needs: build steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index e03423c..83c193d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ node_modules # build output.css +generator.so diff --git a/README.md b/README.md index c524d87..3e7b38e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -![image](https://github.com/mistricky/codesnap.nvim/assets/22574136/c8982b8c-c273-4257-9fef-f0f9134fd9a1) +![image](https://github.com/mistricky/codesnap.nvim/assets/22574136/9c67eb33-a11c-4ce3-935d-3fb59ec5d015) + +
@@ -14,37 +16,80 @@
📸 Snapshot plugin that can make pretty code snapshots with real-time previews for Neovim
-> [!NOTE] -> This plugin is currently in its early stages and may have some bugs, please feel free to submit issues and PRs. +> [!WARNING] +> **v1.0.0** will bring some break changes +> - The `CodeSnapPreviewOn` command is not supported, if you prefer live-preview, you can pin `CodeSnap.nvim` version to `v0.0.11` to continue using this command. +> - The `opacity` and `preview_title` config has been removed from v1.0.0 +> - The `editor_font_family` was renamed to `code_font_family` ## ✨Features -- 🔥 Real-time preview - 🤩 Beautiful code snap template - 😎 Custom watermark and window style -- 💻 Mac style title bar +- 💻 Beautiful Mac-style title bar +- 🤖 Generate snapshots using only a single command - 👏 [WIP] Custom template background -- 🤖 [WIP] Generate snapshot just one command - +- 🔢 [WIP] Column number +- 🍞 [WIP] Breadcrumbs ## Prerequirements -- Rust environment required for compiling codesnap.nvim plugin server source code, visit [Install Rust](https://www.rust-lang.org/tools/install) for more detail. +- Neovim 9.0+ ## Install +Recommend using [Lazy.nvim](https://github.com/folke/lazy.nvim) for installation, but you can still use another plugin manager you prefer. + +**Lazy.nvim** ```lua -{ "mistricky/codesnap.nvim", build = "make" }, +{ "mistricky/codesnap.nvim", build = "make", version = "^1" }, +``` + +### Build manually +Since v0.0.1 was released, the CodeSnap.nvim will cross-compile for the following three targets, then the CodeSnap.nvim will automatically determine which package to use based on your system, you no longer need to have Rust environment if everything goes smoothly. +- x86_64-unknown-linux-gnu +- x86_64-apple-darwin +- aarch64-apple-darwin + +If CodeSnap.nvim on your system still not works fine, there are a lot of reasons depending on your system arch or OS version, well you can try to build CodeSnap manually using the following config: +```lua +{ "mistricky/codesnap.nvim", build = "make build_generator", version = "^1" }, ``` ## Usage -For take a screenshot, the `codesnap.nvim` provides a command named `CodeSnapPreviewOn` to open the preview page, and then you can switch to visual mode and select code you want, and finally just click the copy button on the preview page, that's all :) +`CodeSnap.nvim` provides the following two ways to take snapshots of currently selected code -https://github.com/mistricky/codesnap.nvim/assets/22574136/5e1a023e-142f-49e8-b24f-707da3728fd5 +### Copy into the clipboard +To take a beautiful snapshot use CodeSnap.nvim, you can just use `CodeSnap` command to generate a snapshot of the current selected code, then the `CodeSnap.nvim` will write the snapshot into the clipboard, and you can paste it anywhere you want. + +https://github.com/mistricky/codesnap.nvim/assets/22574136/88d9fe9e-d938-4d82-a1e4-b7170ca47dd9 + + +### Save the snapshot + +Of course, you can use `CodeSnapSave` command to save the snapshot to path where you defined it in `config.save_path` +```lua +require("codesnap").setup({ + -- ... + save_path: ... +}) +``` + + +https://github.com/mistricky/codesnap.nvim/assets/22574136/7b156a89-1e0d-48cd-b062-af5a460973ba + + +## Watermark +Watermark is something that makes screenshots more personalized, but if you don't like watermark just set it as empty string to hide it. +```lua +require("codesnap").setup({ + -- ... + watermark: "" +}) +``` ## Commands ```shell -CodeSnapPreviewOn # Open preview page +CodeSnap # Take a snapshot of the currently selected code and copy the snapshot into the clipboard --- The following commands are planned but not implemented yet. (welcome PR :)) -CodeSnap # Take a code snap and copy it into the clipboard +CodeSnapSave # Save the snapshot of the currently selected code and save it on the disk ``` ## Configuration @@ -56,12 +101,11 @@ require("codesnap").setup({...}) There is a default config: ```lua { - mac_window_bar = true,-- (Optional) MacOS style title bar switch - opacity = true, -- (Optional) The code snap has some opacity by default, set it to false for 100% opacity - watermark = "CodeSnap.nvim", -- (Optional) you can custom your own watermark, but if you don't like it, just set it to "" - preview_title = "CodeSnap.nvim", -- (Optional) preview page title - editor_font_family = "CaskaydiaCove Nerd Font", -- (Optional) preview code font family - watermark_font_family = "Pacifico", -- (Optional) watermark font family + mac_window_bar = true, + title = "CodeSnap.nvim", + code_font_family = "CaskaydiaCove Nerd Font", + watermark_font_family = "Pacifico", + watermark = "CodeSnap.nvim", } ``` diff --git a/assets/fonts/CaskaydiaCoveNerdFont-Regular.ttf b/assets/fonts/CaskaydiaCoveNerdFont-Regular.ttf new file mode 100644 index 0000000..2b3870a Binary files /dev/null and b/assets/fonts/CaskaydiaCoveNerdFont-Regular.ttf differ diff --git a/assets/fonts/Pacifico-Regular.ttf b/assets/fonts/Pacifico-Regular.ttf new file mode 100644 index 0000000..e7def95 Binary files /dev/null and b/assets/fonts/Pacifico-Regular.ttf differ diff --git a/assets/themes/base16-onedark.tmTheme b/assets/themes/base16-onedark.tmTheme new file mode 100644 index 0000000..c81bc8c --- /dev/null +++ b/assets/themes/base16-onedark.tmTheme @@ -0,0 +1,560 @@ + + +