@ -0,0 +1,22 @@
|
||||
name: Lint Website
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- ".github/workflows/lint.yml"
|
||||
- "website/**/*.md"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Lint Website
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Lint Markdown
|
||||
uses: nosborn/github-action-markdown-cli@v3.1.0
|
||||
with:
|
||||
files: ./website
|
||||
config_file: ./website/.markdownlintrc
|
@ -1,38 +1,132 @@
|
||||
name: Website
|
||||
name: Build-Publish-Website
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
paths:
|
||||
- ".github/workflows/website.yml"
|
||||
- "website/**"
|
||||
- "!website/README.md"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build Website
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref != 'refs/heads/main'
|
||||
env:
|
||||
MDBOOK-VERSION: v0.4.21
|
||||
MDBOOK-PAGETOC-VERSION: v0.1.4
|
||||
MDBOOK-LINKCHECK-VERSION: v0.7.6
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@master
|
||||
- name: 'Content update'
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Restore mdBook Cache
|
||||
id: cache-mdbook
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ./mdbook
|
||||
key: mdbook-${{ env.MDBOOK-VERSION }}
|
||||
|
||||
- name: Install mdbook
|
||||
if: steps.cache-mdbook.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
mkdir mdbook
|
||||
curl -sSL https://github.com/rust-lang/mdBook/releases/download/${{ env.MDBOOK-VERSION }}/mdbook-${{ env.MDBOOK-VERSION }}-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook
|
||||
|
||||
- name: Restore mdbook-pagetoc Cache
|
||||
id: cache-mdbook-pagetoc
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ./mdbook-pagetoc
|
||||
key: mdbook-pagetoc-${{ env.MDBOOK-PAGETOC-VERSION }}
|
||||
|
||||
- name: Install mdbook-pagetoc
|
||||
if: steps.cache-mdbook-pagetoc.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
mkdir mdbook-pagetoc
|
||||
curl -sSL https://github.com/slowsage/mdbook-pagetoc/releases/download/${{ env.MDBOOK-PAGETOC-VERSION }}/mdbook-pagetoc-${{ env.MDBOOK-PAGETOC-VERSION }}-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook-pagetoc
|
||||
|
||||
- name: Restore mdbook-linkcheck Cache
|
||||
id: cache-mdbook-linkcheck
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ./mdbook-linkcheck
|
||||
key: mdbook-linkcheck-${{ env.MDBOOK-LINKCHECK-VERSION }}
|
||||
|
||||
- name: Install mdbook-linkcheck
|
||||
if: steps.cache-mdbook-linkcheck.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
mkdir mdbook-linkcheck && cd "$_"
|
||||
curl -sSL https://github.com/Michael-F-Bryan/mdbook-linkcheck/releases/download/${{ env.MDBOOK-LINKCHECK-VERSION }}/mdbook-linkcheck.x86_64-unknown-linux-gnu.zip -o mdbook-linkcheck.zip
|
||||
unzip mdbook-linkcheck.zip
|
||||
chmod +x mdbook-linkcheck
|
||||
|
||||
- name: Update PATH
|
||||
run: |
|
||||
make -C website content_update
|
||||
- name: 'Build only'
|
||||
uses: shalzz/zola-deploy-action@master
|
||||
env:
|
||||
BUILD_DIR: website
|
||||
BUILD_ONLY: true
|
||||
build_and_deploy:
|
||||
echo `pwd`/mdbook >> $GITHUB_PATH
|
||||
echo `pwd`/mdbook-pagetoc >> $GITHUB_PATH
|
||||
echo `pwd`/mdbook-linkcheck >> $GITHUB_PATH
|
||||
|
||||
- name: Build Book
|
||||
run: mdbook build
|
||||
working-directory: ./website
|
||||
|
||||
- name: Store HTML
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: book
|
||||
path: ./website/book
|
||||
|
||||
sitemap:
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
name: Generate Sitemap
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref == 'refs/heads/main'
|
||||
env:
|
||||
STATIC-SITEMAP-CLI-VERSION: 2.1.2
|
||||
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@master
|
||||
- name: 'Content update'
|
||||
- name: Download HTML
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: book
|
||||
path: ./book
|
||||
|
||||
# Unsure how to cache NPM
|
||||
- name: Install Static Sitemap CLI
|
||||
run: |
|
||||
make -C website content_update
|
||||
- name: 'Build and deploy'
|
||||
uses: shalzz/zola-deploy-action@master
|
||||
env:
|
||||
PAGES_BRANCH: gh-pages
|
||||
BUILD_DIR: website
|
||||
# See https://github.com/marketplace/actions/zola-deploy-to-pages#secrets for details
|
||||
TOKEN: ${{ secrets.TOKEN }}
|
||||
npm install npx
|
||||
npm install static-sitemap-cli@${{ env.STATIC-SITEMAP-CLI-VERSION }}
|
||||
|
||||
- name: Generate Sitemap
|
||||
run: |
|
||||
cd ./book/html
|
||||
npx sscli --base https://neovide.dev
|
||||
|
||||
- name: Store Sitemap
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: sitemap
|
||||
path: ./book/html/sitemap.xml
|
||||
|
||||
|
||||
publish:
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
name: Publish Website
|
||||
needs: sitemap
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Download HTML & Sitemap
|
||||
uses: actions/download-artifact@v3
|
||||
|
||||
- name: Move Sitemap Into HTML
|
||||
run: mv ./sitemap/sitemap.xml ./book/html
|
||||
|
||||
- name: Publish to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./book/html
|
||||
|
@ -1,3 +0,0 @@
|
||||
[submodule "website/themes/juice"]
|
||||
path = website/themes/juice
|
||||
url = https://github.com/huhu/juice
|
@ -1 +0,0 @@
|
||||
install: cargo build --release; rm c:/dev/tools/neovide.* -ErrorAction SilentlyContinue; cp ./target/release/neovide.exe c:/dev/tools/neovide.exe
|
@ -1,244 +1,32 @@
|
||||
<!-- insert
|
||||
---
|
||||
title: Neovide
|
||||
date: 2021-12-23T22:13:46
|
||||
---
|
||||
end_insert -->
|
||||
<!-- remove -->
|
||||
# Neovide [![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.gg/SjFpZdQys6) [![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#neovide_community:gitter.im) [![Discussions](https://img.shields.io/badge/GitHub-Discussions-green?logo=github)](https://github.com/neovide/neovide/discussions)
|
||||
<!-- end_remove -->
|
||||
<!-- Powered by https://cj.rs/riss -->
|
||||
|
||||
This is a simple graphical user interface for [Neovim](https://github.com/neovim/neovim) (an aggressively refactored and updated
|
||||
Vim editor). Where possible there are some graphical improvements, but functionally it should act like the terminal UI.
|
||||
<img align="left" src="website/docs/assets/neovide-128x128.png">
|
||||
|
||||
![Basic Screen Cap](./assets/BasicScreenCap.png)
|
||||
This is a simple graphical user interface for [Neovim](https://github.com/neovim/neovim) (an
|
||||
aggressively refactored and updated Vim editor). Where possible there are some graphical
|
||||
improvements, but functionally it should act like the terminal UI.
|
||||
|
||||
I've been using this as my daily driver since November 2019. It should be relatively stable, but I'm still working out some kinks
|
||||
and ironing out some cross platform issues. In general it should be usable at this point, and if it isn't I consider that a bug and
|
||||
appreciate a report in the issues! Any help and ideas are also greatly appreciated.
|
||||
To checkout all the **cool features**, **installation instructions**, **configuration settings** and
|
||||
much more, head on over to [neovide.dev](https://neovide.dev).
|
||||
|
||||
I'm also very interested in suggestions code quality/style wise when it comes to Rust. I'm pretty new to the language and appreciate
|
||||
any critiques that you might have to offer. I won't take all of them, but I promise to consider anything you might have to offer.
|
||||
<br>
|
||||
|
||||
## Features
|
||||
<div align="center">
|
||||
<img src="website/docs/assets/BasicScreenCap.png" alt="Screenshot of Neovide">
|
||||
<em>Screenshot of Neovide running on Windows</em>
|
||||
</div>
|
||||
|
||||
Should be a standard fully featured Neovim GUI. Beyond that there are some visual niceties:
|
||||
## Author Notes
|
||||
|
||||
### Ligatures
|
||||
I've been using this as my daily driver since November 2019. It should be relatively stable, but I'm
|
||||
still working out some kinks and ironing out some cross platform issues. In general it should be
|
||||
usable at this point, and if it isn't I consider that a bug and appreciate a report in the issues!
|
||||
Any help and ideas are also greatly appreciated.
|
||||
|
||||
Supports ligatures and font shaping.
|
||||
I'm also very interested in suggestions code quality/style wise when it comes to Rust. I'm pretty
|
||||
new to the language and appreciate any critiques that you might have to offer. I won't take all of
|
||||
them, but I promise to consider anything you might have to offer.
|
||||
|
||||
![Ligatures](./assets/Ligatures.png)
|
||||
## License
|
||||
|
||||
### Animated Cursor
|
||||
|
||||
Cursor animates into position with a smear effect to improve tracking of cursor position.
|
||||
|
||||
![Animated Cursor](./assets/AnimatedCursor.gif)
|
||||
|
||||
### Smooth Scrolling
|
||||
|
||||
Scroll operations on buffers in neovim will be animated smoothly pixel wise rather than line by line at a time. Note, multigrid must be
|
||||
enabled for this to work.
|
||||
https://github.com/neovide/neovide/wiki/Configuration#multigrid
|
||||
|
||||
![Smooth Scrolling](./assets/SmoothScrolling.gif)
|
||||
|
||||
### Animated Windows
|
||||
|
||||
Windows animate into position when they are moved making it easier to see how layout changes happen. Note, multigrid must be enabled for
|
||||
this to work.
|
||||
https://github.com/neovide/neovide/wiki/Configuration#multigrid
|
||||
|
||||
![Animated Windows](./assets/AnimatedWindows.gif)
|
||||
|
||||
### Blurred Floating Windows
|
||||
|
||||
The backgrounds of floating windows are blurred improving the visual separation between foreground and background from
|
||||
built in window transparency. Note, multigrid must be enabled for this to work.
|
||||
https://github.com/neovide/neovide/wiki/Configuration#multigrid
|
||||
|
||||
![Blurred Floating Windows](./assets/BlurredFloatingWindows.png)
|
||||
|
||||
### Emoji Support
|
||||
|
||||
Font fallback supports rendering of emoji not contained in the configured font.
|
||||
|
||||
![Emoji](./assets/Emoji.png)
|
||||
|
||||
### WSL Support
|
||||
|
||||
Neovide supports displaying a full gui window from inside wsl via the `--wsl` command argument. Communication is passed via standard io into the wsl copy of neovim providing identical experience similar to visual studio code's remote editing https://code.visualstudio.com/docs/remote/remote-overview.
|
||||
|
||||
### Remote TCP Support
|
||||
|
||||
Neovide supports connecting to a remote instance of Neovim over a TCP socket via the `--remote-tcp` command argument. This would allow you to run Neovim on a remote machine and use the GUI on your local machine, connecting over the network.
|
||||
|
||||
Launch Neovim as a TCP server (on port 6666) by running:
|
||||
|
||||
```sh
|
||||
nvim --headless --listen localhost:6666
|
||||
```
|
||||
|
||||
And then connect to it using:
|
||||
|
||||
```sh
|
||||
/path/to/neovide --remote-tcp=localhost:6666
|
||||
```
|
||||
|
||||
By specifying to listen on localhost, you only allow connections from your local computer. If you are actually doing this over a network you will want to use SSH port forwarding for security, and then connect as before.
|
||||
|
||||
```sh
|
||||
ssh -L 6666:localhost:6666 ip.of.other.machine nvim --headless --listen localhost:6666
|
||||
```
|
||||
|
||||
Finally, if you would like to leave the neovim server running, close the neovide application window instead of issuing a `:q` command.
|
||||
|
||||
### Some Nonsense ;)
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "railgun"
|
||||
```
|
||||
|
||||
![Railgun](./assets/Railgun.gif)
|
||||
|
||||
### More to Come
|
||||
|
||||
I've got more ideas for simple unobtrusive improvements. More to come.
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration is done almost completely via global neovide variables in your vim config and can be manipulated live at runtime. Details can be found [here](https://github.com/neovide/neovide/wiki/Configuration).
|
||||
|
||||
Note: Neovide requires that a font be set in `init.vim` otherwise errors might be encountered.
|
||||
See [#527](https://github.com/neovide/neovide/issues/527)
|
||||
|
||||
## Install
|
||||
|
||||
**Note**: Building instructions are somewhat limited at the moment. All the libraries I use are cross platform and should have
|
||||
support for Windows, Mac, and Linux. On Windows this should be enabled by default if you have a relatively recent system.
|
||||
|
||||
**Note**: Neovide requires neovim version 0.6 or greater. See previous releases such as `0.5.0` if your distro is too slow with updating.
|
||||
|
||||
### From binary
|
||||
|
||||
Building instructions are somewhat limited at the moment. All the libraries I use are cross platform and should have support for Windows, Mac, and Linux. The rendering is based on opengl, so a good gpu driver will be
|
||||
necessary. On Windows this should be enabled by default if you have a relatively recent system.
|
||||
|
||||
Installing should be as simple as downloading the binary, making sure `nvim.exe` with version 0.4 or greater is on your path, and running it. Everything should be self contained.
|
||||
|
||||
### Windows
|
||||
|
||||
#### Package manager
|
||||
|
||||
[Scoop](https://scoop.sh/) has Neovide in the `extras` bucket. Ensure you have the `extras` bucket, and install:
|
||||
|
||||
```
|
||||
$ scoop bucket list
|
||||
main
|
||||
extras
|
||||
$ scoop install neovide
|
||||
```
|
||||
|
||||
#### From source
|
||||
|
||||
1. Install the latest version of Rust. I recommend <https://rustup.rs/>
|
||||
2. Install CMake. I use chocolatey: `choco install cmake --installargs '"ADD_CMAKE_TO_PATH=System"' -y`
|
||||
3. Install LLVM. I use chocolatey: `choco install llvm -y`
|
||||
4. Ensure graphics libraries are up to date.
|
||||
5. Build and install Neovide:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/neovide/neovide
|
||||
cd neovide
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
6. Copy `./target/release/neovide.exe` to a known location and enjoy.
|
||||
|
||||
### Mac
|
||||
|
||||
#### Package manager
|
||||
|
||||
Neovide is available as Cask in [Homebrew](https://brew.sh). It can be installed from the command line:
|
||||
```sh
|
||||
brew install --cask neovide
|
||||
```
|
||||
|
||||
#### From source
|
||||
|
||||
1. Install the latest version of Rust. Using homebrew: `brew install rustup-init`
|
||||
2. Configure rust by running `rustup-init`
|
||||
3. Install CMake. Using homebrew: `brew install cmake`
|
||||
4. `git clone https://github.com/neovide/neovide`
|
||||
5. `cd neovide`
|
||||
6. `cargo build --release`
|
||||
7. Copy `./target/release/neovide` to a known location and enjoy.
|
||||
8. `cargo install cargo-bundle`
|
||||
9. `cargo bundle --release`
|
||||
10. Copy `./target/release/bundle/osx/neovide.app` to `~/Applications` and enjoy.
|
||||
|
||||
### Linux
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
Stable releases are [packaged in the community repository](https://archlinux.org/packages/community/x86_64/neovide).
|
||||
|
||||
```sh
|
||||
pacman -S neovide
|
||||
```
|
||||
|
||||
To run a development version you can build from [the VCS package in the AUR](https://aur.archlinux.org/packages/neovide-git).
|
||||
This can be built and installed using an AUR helper or [by hand in the usual way](https://wiki.archlinux.org/title/Arch_User_Repository#Installing_and_upgrading_packages).
|
||||
To build from a non-default branch you can edit the PKGBUILD and add `#branch-name` to the end of the source URL.
|
||||
|
||||
#### With Snap
|
||||
|
||||
Neovide is also available in the Snap Store. You can install it
|
||||
using the command below.
|
||||
|
||||
```
|
||||
snap install neovide
|
||||
```
|
||||
[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-white.svg)](https://snapcraft.io/neovide)
|
||||
|
||||
|
||||
#### From source
|
||||
|
||||
1. Install necessary dependencies (adjust for your preferred package manager)
|
||||
|
||||
```sh
|
||||
sudo apt install -y curl \
|
||||
gnupg ca-certificates git \
|
||||
gcc-multilib g++-multilib cmake libssl-dev pkg-config \
|
||||
libfreetype6-dev libasound2-dev libexpat1-dev libxcb-composite0-dev \
|
||||
libbz2-dev libsndio-dev freeglut3-dev libxmu-dev libxi-dev libfontconfig1-dev
|
||||
```
|
||||
|
||||
2. Install Rust
|
||||
|
||||
```sh
|
||||
curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
|
||||
```
|
||||
|
||||
3. Clone the repository
|
||||
|
||||
```sh
|
||||
git clone "https://github.com/neovide/neovide"
|
||||
```
|
||||
|
||||
4. Build
|
||||
|
||||
```sh
|
||||
cd neovide && ~/.cargo/bin/cargo build --release
|
||||
```
|
||||
|
||||
5. Copy `./target/release/neovide` to a known location and enjoy.
|
||||
|
||||
## Troubleshooting
|
||||
- Neovide requires that a font be set in `init.vim` otherwise errors might be encountered. This can be fixed by adding `set guifont=Your\ Font\ Name:h15` in init.vim file. Reference issue [#527](https://github.com/neovide/neovide/issues/527).
|
||||
- If you installed `neovim` via Apple Silicon (M1)-based `brew`, you have to add the `brew prefix` to `$PATH` to run `Neovide.app` in GUI. Please see the [homebrew documentation](https://docs.brew.sh/FAQ#my-mac-apps-dont-find-homebrew-utilities). Reference issue [#1242](https://github.com/neovide/neovide/pull/1242)
|
||||
|
||||
### Linux-specific
|
||||
- If you recieve errors complaining about DRI3 settings, please reference issue [#44](https://github.com/neovide/neovide/issues/44#issuecomment-578618052).
|
||||
Licensed under [MIT](./LICENSE).
|
||||
|
@ -1,6 +0,0 @@
|
||||
# Zola output
|
||||
public
|
||||
# Will be copied during the build process
|
||||
static/assets
|
||||
# Most md files are created by RISS on the fly, updated during the build process
|
||||
content/*.md
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
/* Wrap lines at 100 chars */
|
||||
"MD013": {
|
||||
"line_length": 100
|
||||
},
|
||||
|
||||
/* Allow inline-html */
|
||||
"MD033": false,
|
||||
|
||||
/* Allow non-headings at the top of files */
|
||||
"MD041": false
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
.PHONY: md_update
|
||||
md_update:
|
||||
@awk -f ./riss.awk < ../README.md >content/_index.md
|
||||
|
||||
.PHONY: content_update
|
||||
content_update: md_update
|
||||
@mkdir -p static/assets
|
||||
@cp -r ../assets static/
|
||||
|
||||
.PHONY: all
|
||||
all: content_update
|
||||
@zola build
|
||||
|
||||
.PHONY: serve
|
||||
serve: content_update
|
||||
@zola serve
|
After Width: | Height: | Size: 231 KiB |
@ -0,0 +1,28 @@
|
||||
[book]
|
||||
title = "Neovide"
|
||||
description = "A Simple, No Nonsense, Cross-Platform, Graphical User Interface for Neovim"
|
||||
authors = ["sgoudham"]
|
||||
language = "en"
|
||||
multilingual = false
|
||||
src = "docs"
|
||||
|
||||
[output.html]
|
||||
additional-css = [
|
||||
"theme/pagetoc.css",
|
||||
"theme/custom.css",
|
||||
"theme/breakpoints.css"
|
||||
]
|
||||
additional-js = [
|
||||
"theme/pagetoc.js",
|
||||
"theme/custom.js"
|
||||
]
|
||||
default-theme = "ayu"
|
||||
preferred-dark-theme = "ayu"
|
||||
git-repository-url = "https://github.com/neovide/neovide"
|
||||
git-repository-icon = "fa-github"
|
||||
edit-url-template = "https://github.com/neovide/neovide/edit/main/website/{path}"
|
||||
cname = "neovide.dev"
|
||||
|
||||
[output.linkcheck]
|
||||
|
||||
[preprocessor.pagetoc]
|
@ -1,23 +0,0 @@
|
||||
# The URL the site will be built for
|
||||
base_url = "https://neovide.dev"
|
||||
theme = "juice"
|
||||
|
||||
# Whether to automatically compile all Sass files in the sass directory
|
||||
compile_sass = true
|
||||
|
||||
# Whether to build a search index to be used later on by a JavaScript library
|
||||
build_search_index = false
|
||||
|
||||
[markdown]
|
||||
# Whether to do syntax highlighting
|
||||
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
|
||||
highlight_code = true
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
||||
juice_logo_name = "Neovide"
|
||||
juice_logo_path = "assets/neovide.svg"
|
||||
juice_extra_menu = [
|
||||
{ title = "Github", link = "https://github.com/neovide/neovide"}
|
||||
]
|
||||
repository_url = "https://github.com/neovide/neovide"
|
@ -0,0 +1,13 @@
|
||||
# Summary
|
||||
|
||||
[Neovide](./index.md)
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
- [Features](features.md)
|
||||
- [Installation](installation.md)
|
||||
- [Configuration](configuration.md)
|
||||
- [Command Line Reference](command-line-reference.md)
|
||||
- [Editing w/ External Tools](editing-with-external-tools.md)
|
||||
- [Troubleshooting](troubleshooting.md)
|
||||
- [FAQ](faq.md)
|
Before Width: | Height: | Size: 727 KiB After Width: | Height: | Size: 727 KiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 346 KiB After Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 2.8 MiB After Width: | Height: | Size: 2.8 MiB |
Before Width: | Height: | Size: 672 KiB After Width: | Height: | Size: 672 KiB |
Before Width: | Height: | Size: 512 KiB After Width: | Height: | Size: 512 KiB |
Before Width: | Height: | Size: 562 KiB After Width: | Height: | Size: 562 KiB |
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 3.5 MiB |
Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 12 MiB After Width: | Height: | Size: 12 MiB |
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 303 KiB |
Before Width: | Height: | Size: 724 KiB After Width: | Height: | Size: 724 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 426 KiB After Width: | Height: | Size: 426 KiB |
After Width: | Height: | Size: 8.8 KiB |
@ -0,0 +1,111 @@
|
||||
# Command Line Reference
|
||||
|
||||
Neovide supports a few command line arguments for effecting things which couldn't be set using
|
||||
normal vim variables.
|
||||
|
||||
## Information
|
||||
|
||||
### Version
|
||||
|
||||
```sh
|
||||
--version or -V
|
||||
```
|
||||
|
||||
Prints the current version of neovide.
|
||||
|
||||
### Help
|
||||
|
||||
```sh
|
||||
--help or -h
|
||||
```
|
||||
|
||||
Prints details about neovide. This will be a help page eventually.
|
||||
|
||||
## Functionality
|
||||
|
||||
### Multigrid
|
||||
|
||||
```sh
|
||||
--multigrid or an environment variable declared named "NEOVIDE_MULTIGRID"
|
||||
```
|
||||
|
||||
This enables neovim's multigrid functionality which will also enable floating window blurred
|
||||
backgrounds and window animations. For now this is disabled due to some mouse input bugs upstream
|
||||
([neovim/neovim/pull/12667](https://github.com/neovim/neovim/pull/12667),
|
||||
[neovim/neovim/issues/15075](https://github.com/neovim/neovim/issues/15075)) and some
|
||||
[floating window transparency issues](https://github.com/neovide/neovide/issues/720).
|
||||
|
||||
### Frameless
|
||||
|
||||
```sh
|
||||
--frameless or an environment variable named NEOVIDE_FRAMELESS
|
||||
```
|
||||
|
||||
Neovide without decorations. NOTE: Window cannot be moved nor resized after this.
|
||||
|
||||
### Geometry
|
||||
|
||||
```sh
|
||||
--geometry=<width>x<height>
|
||||
```
|
||||
|
||||
Sets the initial neovide window size in characters.
|
||||
|
||||
### No Fork
|
||||
|
||||
```sh
|
||||
--nofork
|
||||
```
|
||||
|
||||
By default, neovide detaches itself from the terminal. Instead of spawning a child process and
|
||||
leaking it, be "blocking" and have the shell directly as parent process.
|
||||
|
||||
### No Tabs
|
||||
|
||||
```sh
|
||||
--notabs
|
||||
```
|
||||
|
||||
By default, Neovide opens files given directly to Neovide (not NeoVim through `--`!) in multiple
|
||||
tabs to avoid confusing new users. The option disables that and makes multiple given files to normal
|
||||
buffers.
|
||||
|
||||
Note: Even if files are opened in tabs, they're buffers anyways. It's just about them being visible
|
||||
or not.
|
||||
|
||||
### WSL
|
||||
|
||||
```sh
|
||||
--wsl
|
||||
```
|
||||
|
||||
Runs neovim from inside wsl rather than as a normal executable.
|
||||
|
||||
### Neovim Binary
|
||||
|
||||
```sh
|
||||
--neovim-bin
|
||||
```
|
||||
|
||||
Sets where to find neovim's executable. If unset, neovide will try to find `nvim` on the `PATH`
|
||||
environment variable instead. If you're running a Unix-alike, be sure that binary has the executable
|
||||
permission bit set.
|
||||
|
||||
### Log File
|
||||
|
||||
```sh
|
||||
--log
|
||||
```
|
||||
|
||||
Enables the log file for debugging purposes. This will write a file next to the executable
|
||||
containing trace events which may help debug an issue.
|
||||
|
||||
### Wayland / X11
|
||||
|
||||
```sh
|
||||
--wayland-app-id <wayland_app_id> or an environment variable called NEOVIDE_APP_ID
|
||||
--x11-wm-class <x11_wm_class> or an environment variable called NEOVIDE_WM_CLASS
|
||||
```
|
||||
|
||||
On Linux/Unix, this alters the identification of the window to either X11 or the more modern
|
||||
Wayland, depending on what you are running on.
|
@ -0,0 +1,320 @@
|
||||
# Configuration
|
||||
|
||||
## Global Vim Settings
|
||||
|
||||
Neovide supports settings via global variables with a neovide prefix. They enable configuring many
|
||||
parts of the editor and support dynamically changing them at runtime.
|
||||
|
||||
### Functionality
|
||||
|
||||
#### Hello, is this Neovide?
|
||||
|
||||
Not really a configuration option, but `g:neovide` only exists and is set to `v:true` if this Neovim
|
||||
is in Neovide. It's not set else. Useful for configuring things only for Neovide in your `init.vim`:
|
||||
|
||||
```lua
|
||||
if exists("g:neovide")
|
||||
" Put anything you want to happen only in Neovide here
|
||||
endif
|
||||
```
|
||||
|
||||
#### Refresh Rate
|
||||
|
||||
```vim
|
||||
let g:neovide_refresh_rate=140
|
||||
```
|
||||
|
||||
Setting `g:neovide_refresh_rate` to a positive integer will set the refresh rate of the app. This is
|
||||
limited by the refresh rate of your physical hardware, but can be lowered to increase battery life.
|
||||
|
||||
#### Transparency
|
||||
|
||||
```vim
|
||||
let g:neovide_transparency=0.8
|
||||
```
|
||||
|
||||
![Transparency](assets/Transparency.png)
|
||||
|
||||
Setting `g:neovide_transparency` to a value between 0.0 and 1.0 will set the opacity of the window
|
||||
to that value.
|
||||
|
||||
#### Floating Blur Amount
|
||||
|
||||
```vim
|
||||
let g:neovide_floating_blur_amount_x = 2.0
|
||||
let g:neovide_floating_blur_amount_y = 2.0
|
||||
```
|
||||
|
||||
**Available since 0.9.**
|
||||
|
||||
Setting `g:neovide_floating_blur_amount_x` and `g:neovide_floating_blur_amount_y` controls the blur
|
||||
radius on the respective axis for floating windows.
|
||||
|
||||
#### Scroll Animation Length
|
||||
|
||||
```vim
|
||||
let g:neovide_scroll_animation_length = 0.3
|
||||
```
|
||||
|
||||
Sets how long the scroll animation takes to complete, measured in seconds.
|
||||
|
||||
#### No Idle
|
||||
|
||||
```vim
|
||||
let g:neovide_no_idle=v:true
|
||||
```
|
||||
|
||||
Setting `g:neovide_no_idle` to a boolean value will force neovide to redraw all the time. This can
|
||||
be a quick hack if animations appear to stop too early.
|
||||
|
||||
#### Fullscreen
|
||||
|
||||
```vim
|
||||
let g:neovide_fullscreen=v:true
|
||||
```
|
||||
|
||||
Setting `g:neovide_fullscreen` to a boolean value will set whether the app should take up the entire
|
||||
screen. This uses the so called "windowed fullscreen" mode that is sometimes used in games which
|
||||
want quick window switching.
|
||||
|
||||
#### Remember Previous Window Size
|
||||
|
||||
```vim
|
||||
let g:neovide_remember_window_size = v:true
|
||||
```
|
||||
|
||||
Setting `g:neovide_remember_window_size` to a boolean value will determine whether the window size
|
||||
from the previous session or the default size will be used on startup. The commandline option
|
||||
`--geometry` will take priority over this value.
|
||||
|
||||
#### Profiler
|
||||
|
||||
```vim
|
||||
let g:neovide_profiler = v:false
|
||||
```
|
||||
|
||||
Setting this to `v:true` enables the profiler, which shows a frametime graph in the upper left
|
||||
corner.
|
||||
|
||||
### Input Settings
|
||||
|
||||
#### Use Logo Key
|
||||
|
||||
```vim
|
||||
let g:neovide_input_use_logo=v:true
|
||||
```
|
||||
|
||||
Setting `g:neovide_input_use_logo` to a boolean value will change how logo key (also known as
|
||||
[super key](<https://en.wikipedia.org/wiki/Super_key_(keyboard_button)>),
|
||||
[command key](https://en.wikipedia.org/wiki/Command_key) or
|
||||
[windows key](https://en.wikipedia.org/wiki/Windows_key)) is handled, allowing all key combinations
|
||||
containing logo to be forwarded to neovim.
|
||||
|
||||
#### macOS Alt is Meta
|
||||
|
||||
```vim
|
||||
let g:neovide_input_macos_alt_is_meta=v:false
|
||||
```
|
||||
|
||||
**Unreleased yet.**
|
||||
|
||||
Interprets <kbd>Alt</kbd> + <kbd>whatever</kbd> actually as `<M-whatever>`, instead of sending the
|
||||
actual special character to Neovim.
|
||||
|
||||
#### Touch Deadzone
|
||||
|
||||
```vim
|
||||
let g:neovide_touch_deadzone=6.0
|
||||
```
|
||||
|
||||
Setting `g:neovide_touch_deadzone` to a value equal or higher than 0.0 will set how many pixels the
|
||||
finger must move away from the start position when tapping on the screen for the touch to be
|
||||
interpreted as a scroll gesture.
|
||||
|
||||
If the finger stayed in that area once lifted or the drag timeout happened, however, the touch will
|
||||
be interpreted as tap gesture and the cursor will move there.
|
||||
|
||||
A value lower than 0.0 will cause this feature to be disabled and _all_ touch events will be
|
||||
interpreted as scroll gesture.
|
||||
|
||||
#### Touch Drag Timeout
|
||||
|
||||
```vim
|
||||
let g:neovide_touch_drag_timeout=0.17
|
||||
```
|
||||
|
||||
Setting `g:neovide_touch_drag_timeout` will affect how many seconds the cursor has to stay inside
|
||||
`g:neovide_touch_deadzone` in order to begin "dragging"
|
||||
|
||||
Once started, the finger can be moved to another position in order to form a visual selection. If
|
||||
this happens too often accidentally to you, set this to a higher value like `0.3` or `0.7`.
|
||||
|
||||
### Cursor Settings
|
||||
|
||||
#### Animation Length
|
||||
|
||||
<p align="center">
|
||||
<img alt="Short Cursor Animation Length", src="./assets/ShortCursorAnimationLength.gif" width="47%">
|
||||
|
||||
<img alt="Long Cursor Animation Length", src="./assets/LongCursorAnimationLength.gif" width="47%">
|
||||
</p>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_animation_length=0.13
|
||||
```
|
||||
|
||||
Setting `g:neovide_cursor_animation_length` determines the time it takes for the cursor to complete
|
||||
it's animation in seconds. Set to `0` to disable.
|
||||
|
||||
#### Animation Trail Length
|
||||
|
||||
<p align="center">
|
||||
<img alt="Short Cursor Trail Length", src="./assets/ShortCursorTrailLength.gif" width="47%">
|
||||
|
||||
<img alt="Long Cursor Trail Length", src="./assets/LongCursorTrailLength.gif" width="47%">
|
||||
</p>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_trail_length=0.8
|
||||
```
|
||||
|
||||
Setting `g:neovide_cursor_trail_length` determines how much the trail of the cursor lags behind the
|
||||
front edge.
|
||||
|
||||
#### Antialiasing
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_antialiasing=v:true
|
||||
```
|
||||
|
||||
Enables or disables antialiasing of the cursor quad. Disabling may fix some cursor visual issues.
|
||||
|
||||
#### Unfocused Outline Width
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_unfocused_outline_width=0.125
|
||||
```
|
||||
|
||||
Specify cursor outline width in `em`s. You probably want this to be a positive value less than 0.5.
|
||||
If the value is \<=0 then the cursor will be invisible. This setting takes effect when the editor
|
||||
window is unfocused, at which time a block cursor will be rendered as an outline instead of as a
|
||||
full rectangle.
|
||||
|
||||
### Cursor Particles
|
||||
|
||||
There are a number of vfx modes you can enable which produce particles behind the cursor. These are
|
||||
enabled by setting `g:neovide_cursor_vfx_mode` to one of the following constants.
|
||||
|
||||
#### None at all
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = ""
|
||||
```
|
||||
|
||||
The default, no particles at all.
|
||||
|
||||
#### Railgun
|
||||
|
||||
<img src="./assets/Railgun.gif" alt="Railgun" width=550>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "railgun"
|
||||
```
|
||||
|
||||
#### Torpedo
|
||||
|
||||
<img src="./assets/Torpedo.gif" alt="Torpedo" width=550>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "torpedo"
|
||||
```
|
||||
|
||||
#### Pixiedust
|
||||
|
||||
<img src="./assets/Pixiedust.gif" alt="Pixiedust" width=550>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "pixiedust"
|
||||
```
|
||||
|
||||
#### Sonic Boom
|
||||
|
||||
<img src="./assets/Sonicboom.gif" alt="Sonicboom" width=550>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "sonicboom"
|
||||
```
|
||||
|
||||
#### Ripple
|
||||
|
||||
<img src="./assets/Ripple.gif" alt="Ripple" width=550>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "ripple"
|
||||
```
|
||||
|
||||
#### Wireframe
|
||||
|
||||
<img src="./assets/Wireframe.gif" alt="Wireframe" width=550>
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_mode = "wireframe"
|
||||
```
|
||||
|
||||
### Particle Settings
|
||||
|
||||
Options for configuring the particle generation and behavior.
|
||||
|
||||
#### Particle Opacity
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_opacity=200.0
|
||||
```
|
||||
|
||||
Sets the transparency of the generated particles.
|
||||
|
||||
#### Particle Lifetime
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_particle_lifetime=1.2
|
||||
```
|
||||
|
||||
Sets the amount of time the generated particles should survive.
|
||||
|
||||
#### Particle Density
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_particle_density=7.0
|
||||
```
|
||||
|
||||
Sets the number of generated particles.
|
||||
|
||||
#### Particle Speed
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_particle_speed=10.0
|
||||
```
|
||||
|
||||
Sets the speed of particle movement.
|
||||
|
||||
#### Particle Phase
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_particle_phase=1.5
|
||||
```
|
||||
|
||||
Only for the `railgun` vfx mode.
|
||||
|
||||
Sets the mass movement of particles, or how individual each one acts. The higher the value, the less
|
||||
particles rotate in accordance to each other, the lower, the more line-wise all particles become.
|
||||
|
||||
#### Particle Curl
|
||||
|
||||
```vim
|
||||
let g:neovide_cursor_vfx_particle_curl=1.0
|
||||
```
|
||||
|
||||
Only for the `railgun` vfx mode.
|
||||
|
||||
Sets the velocity rotation speed of particles. The higher, the less particles actually move and look
|
||||
more "nervous", the lower, the more it looks like a collapsing sine wave.
|
@ -0,0 +1,18 @@
|
||||
# Editing w/ External Tools
|
||||
|
||||
You can use Neovide in other programs as editor, this page aims to document some quirks. Support for
|
||||
that, however, is only possible as far as reasonably debuggable.
|
||||
|
||||
_Note: We do not endorse nor disrecommend usage of all programs listed here. All usage happens on
|
||||
your own responsibility._
|
||||
|
||||
## [jrnl](https://github.com/jrnl-org/jrnl)
|
||||
|
||||
In your configuration file:
|
||||
|
||||
```yaml
|
||||
editor: "neovide --nofork"
|
||||
```
|
||||
|
||||
...as `jrnl` saves & removes the temporary file as soon as the main process exits, which happens
|
||||
before startup by [forking](<https://en.wikipedia.org/wiki/Fork_(system_call)>).
|
@ -0,0 +1,61 @@
|
||||
# Frequently Asked Questions
|
||||
|
||||
Commonly asked questions, or just explanations/elaborations on stuff.
|
||||
|
||||
## How Can I Set The Font/Scale The UI Size?
|
||||
|
||||
This is handled through the `guifont` option, settable through Neovim. It's technically documented
|
||||
in `:h guifont` (type this in Neovim), though some things are misleading there, so here we do what's
|
||||
discouraged and try to document it ourselves:
|
||||
|
||||
- The basic format is `IBM_Plex_Mono,Hack,Noto_Color_Emoji:option1:option2`. You can use arbitrarily
|
||||
many "font fallbacks" (`Hack` and `Noto_Color_Emoji` "help out" if `IBM_Plex_Mono` doesn't define
|
||||
a character), and arbitrarily many options. Though please note that _first_ all fonts are defined,
|
||||
_then_ all options, the options apply "globally".
|
||||
- Use `:set guifont=*` to open up a window showing what fonts are accessible by Neovide, hit `Enter`
|
||||
on one to apply it **temporarily**.
|
||||
- Spaces in the font name are a bit difficult to write, either use underscores (`_`) or escape them
|
||||
(`\`).
|
||||
- The font options Neovide supports at the moment are:
|
||||
- `hXX` — Set the font size to `XX`, can be any (even non-two-digit) number or even a floating
|
||||
point number.
|
||||
- `b` — Sets the font **bold**.
|
||||
- `i` — Sets the font _italic_.
|
||||
|
||||
By the way, the default font used is Fira Code at size 14.
|
||||
|
||||
## How Can I Dynamically Change The Font Size At Runtime?
|
||||
|
||||
Not directly in Neovide, but configurable if you want so. A way to accomplish that in Lua would be:
|
||||
|
||||
```lua
|
||||
vim.g.gui_font_default_size = 12
|
||||
vim.g.gui_font_size = vim.g.gui_font_default_size
|
||||
vim.g.gui_font_face = "Fira Code Retina"
|
||||
|
||||
RefreshGuiFont = function()
|
||||
vim.opt.guifont = string.format("%s:h%s",vim.g.gui_font_face, vim.g.gui_font_size)
|
||||
end
|
||||
|
||||
ResizeGuiFont = function(delta)
|
||||
vim.g.gui_font_size = vim.g.gui_font_size + delta
|
||||
RefreshGuiFont()
|
||||
end
|
||||
|
||||
ResetGuiFont = function()
|
||||
vim.g.gui_font_size = vim.g.gui_font_default_size
|
||||
RefreshGuiFont()
|
||||
end
|
||||
|
||||
-- Call function on startup to set default value
|
||||
ResetGuiFont()
|
||||
|
||||
-- Keymaps
|
||||
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.keymap.set({'n', 'i'}, "<C-+>", function() ResizeGuiFont(1) end, opts)
|
||||
vim.keymap.set({'n', 'i'}, "<C-->", function() ResizeGuiFont(-1) end, opts)
|
||||
```
|
||||
|
||||
Credits to [0x0013 here](https://github.com/neovide/neovide/issues/1301#issuecomment-1119370546).
|
@ -0,0 +1,113 @@
|
||||
# Features
|
||||
|
||||
This should be a standard, fully-featured Neovim GUI. Beyond that there are some visual niceties
|
||||
listed below :)
|
||||
|
||||
## Ligatures
|
||||
|
||||
Supports ligatures and font shaping.
|
||||
|
||||
<img src="./assets/Ligatures.png" alt="Ligatures" width=550>
|
||||
|
||||
## Animated Cursor
|
||||
|
||||
Cursor animates into position with a smear effect to improve tracking of cursor position.
|
||||
|
||||
<img src="./assets/AnimatedCursor.gif" alt="Animated Cursor" width=550>
|
||||
|
||||
## Smooth Scrolling
|
||||
|
||||
Scroll operations on buffers in neovim will be animated smoothly pixel wise rather than line by line
|
||||
at a time.
|
||||
|
||||
Note: [multigrid](command-line-reference.md#multigrid) must be enabled for this to work.
|
||||
|
||||
<img src="./assets/SmoothScrolling.gif" alt="Smooth Scrolling" width=550>
|
||||
|
||||
## Animated Windows
|
||||
|
||||
Windows animate into position when they are moved making it easier to see how layout changes happen.
|
||||
|
||||
Note: [multigrid](command-line-reference.md#multigrid) must be enabled for this to work.
|
||||
|
||||
<img src="./assets/AnimatedWindows.gif" alt="Animated Windows" width=550>
|
||||
|
||||
## Blurred Floating Windows
|
||||
|
||||
The backgrounds of floating windows are blurred improving the visual separation between foreground
|
||||
and background from built in window transparency.
|
||||
|
||||
Note: [multigrid](command-line-reference.md#multigrid) must be enabled for this to work.
|
||||
|
||||
<img src="./assets/BlurredFloatingWindows.png" alt="Blurred Floating Windows" width=550>
|
||||
|
||||
## Emoji Support
|
||||
|
||||
Font fallback supports rendering of emoji not contained in the configured font.
|
||||
|
||||
<img src="./assets/Emoji.png" alt="Emojis" width=550>
|
||||
|
||||
## WSL Support
|
||||
|
||||
Neovide supports displaying a full gui window from inside wsl via the `--wsl` command argument.
|
||||
Communication is passed via standard io into the wsl copy of neovim providing identical experience
|
||||
similar to Visual Studio Code's
|
||||
[Remote Editing](https://code.visualstudio.com/docs/remote/remote-overview).
|
||||
|
||||
## Remote TCP Support
|
||||
|
||||
Neovide supports connecting to a remote instance of Neovim over a TCP socket via the `--remote-tcp`
|
||||
command argument. This would allow you to run Neovim on a remote machine and use the GUI on your
|
||||
local machine, connecting over the network.
|
||||
|
||||
Launch Neovim as a TCP server (on port 6666) by running:
|
||||
|
||||
```sh
|
||||
nvim --headless --listen localhost:6666
|
||||
```
|
||||
|
||||
And then connect to it using:
|
||||
|
||||
```sh
|
||||
/path/to/neovide --remote-tcp=localhost:6666
|
||||
```
|
||||
|
||||
By specifying to listen on localhost, you only allow connections from your local computer. If you
|
||||
are actually doing this over a network you will want to use SSH port forwarding for security, and
|
||||
then connect as before.
|
||||
|
||||
```sh
|
||||
ssh -L 6666:localhost:6666 ip.of.other.machine nvim --headless --listen localhost:6666
|
||||
```
|
||||
|
||||
Finally, if you would like to leave the neovim server running, close the neovide application window
|
||||
instead of issuing a `:q` command.
|
||||
|
||||
## Some Nonsense ;)
|
||||
|
||||
To learn how to configure the following, head on over to the
|
||||
[configuration](./configuration.md#cursor-particles) section!
|
||||
|
||||
### Railgun
|
||||
|
||||
<img src="./assets/Railgun.gif" alt="Railgun" width=550>
|
||||
|
||||
### Torpedo
|
||||
|
||||
<img src="./assets/Torpedo.gif" alt="Torpedo" width=550>
|
||||
|
||||
### Pixiedust
|
||||
|
||||
<img src="./assets/Pixiedust.gif" alt="Pixiedust" width=550>
|
||||
|
||||
### Sonic Boom
|
||||
|
||||
<img src="./assets/Sonicboom.gif" alt="Sonicboom" width=550>
|
||||
|
||||
### Ripple
|
||||
|
||||
<img src="./assets/Ripple.gif" alt="Ripple" width=550>
|
||||
|
||||
### Wireframe
|
||||
|
||||
<img src="./assets/Wireframe.gif" alt="Wireframe" width=550>
|
@ -0,0 +1,65 @@
|
||||
<div class="show-mobile">
|
||||
<h1>
|
||||
<img class="logo" src="assets/neovide-128x128.png" alt="Neovide Logo">
|
||||
Neovide
|
||||
</h1>
|
||||
<a href="https://discord.gg/SjFpZdQys6">
|
||||
<img src="https://badgen.net/badge/icon/discord?icon=discord&label" alt="Discord">
|
||||
</a>
|
||||
<a href="https://matrix.to/#/#neovide_community:gitter.im">
|
||||
<img src="https://matrix.to/img/matrix-badge.svg" alt="Chat On Matrix">
|
||||
</a>
|
||||
<a href="https://github.com/neovide/neovide/discussions">
|
||||
<img src="https://img.shields.io/badge/GitHub-Discussions-green?logo=github" alt="Discussions">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="hide-mobile">
|
||||
<h1>Neovide
|
||||
<a href="https://discord.gg/SjFpZdQys6">
|
||||
<img src="https://badgen.net/badge/icon/discord?icon=discord&label" alt="Discord">
|
||||
</a>
|
||||
<a href="https://matrix.to/#/#neovide_community:gitter.im">
|
||||
<img src="https://matrix.to/img/matrix-badge.svg" alt="Chat On Matrix">
|
||||
</a>
|
||||
<a href="https://github.com/neovide/neovide/discussions">
|
||||
<img src="https://img.shields.io/badge/GitHub-Discussions-green?logo=github" alt="Discussions">
|
||||
</a>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="hide-mobile">
|
||||
<img class="logo" src="assets/neovide-128x128.png" alt="Neovide Logo">
|
||||
</div>
|
||||
|
||||
This is a simple, no-nonsense, cross-platform graphical user interface for
|
||||
[Neovim](https://github.com/neovim/neovim) (an aggressively refactored and updated Vim editor).
|
||||
Where possible there are some graphical improvements, but functionally it should act like the
|
||||
terminal UI.
|
||||
|
||||
<div class="hide-mobile">
|
||||
<a href="https://github.com/neovide/neovide/releases/latest/download/Neovide.dmg.zip">
|
||||
<button class="button-hover color">Download for macOS</button>
|
||||
</a>
|
||||
<a href="https://github.com/neovide/neovide/releases/latest/download/neovide-windows.zip">
|
||||
<button class="button-hover color">Download for Windows</button>
|
||||
</a>
|
||||
<a href="https://github.com/neovide/neovide/releases/latest/download/neovide.tar.gz">
|
||||
<button class="button-hover color">Download for Linux</button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
If you're looking for the Neovide source code, that can be found
|
||||
[here](https://github.com/neovide/neovide). To search within the docs, you can simply press `s` or
|
||||
click the magnifying glass icon in the top left to bring up the search bar.
|
||||
|
||||
Installing through a package manager or building from source? [no problem!](installation.md)
|
||||
|
||||
Want to see a list of all the available features? [here you go!](features.md)
|
||||
|
||||
Looking to configure your neovide? [we've got you covered!](configuration.md)
|
||||
|
||||
<div class="center">
|
||||
<img class="screenshot" src="assets/BasicScreenCap.png" alt="Screenshot of Neovide">
|
||||
<p class="text" ><em>Screenshot of Neovide running on Windows<em></p>
|
||||
</div>
|
@ -0,0 +1,142 @@
|
||||
# Installation
|
||||
|
||||
**Note**: Neovide requires neovim version `0.6` _or greater_. See previous releases such as `0.5.0`
|
||||
if your distro is too slow with updating or you need to rely on older neovim versions.
|
||||
|
||||
Building instructions are somewhat limited at the moment. All the libraries Neovide uses are cross
|
||||
platform and should have support for Windows, Mac, and Linux. The rendering is based on OpenGL, so a
|
||||
good GPU driver will be necessary, the default drivers provided by virtual machines might not be
|
||||
enough. On Windows this should be enabled by default if you have a relatively recent system.
|
||||
|
||||
## Binaries
|
||||
|
||||
Installing should be as simple as downloading the binary, making sure the `nvim` executable with
|
||||
version 0.6 or greater is on your `PATH` environment variable, and running it. Everything should be
|
||||
self contained.
|
||||
|
||||
The binaries are to be found on
|
||||
[the release page](https://github.com/neovide/neovide/releases/latest).
|
||||
|
||||
## Windows
|
||||
|
||||
### Scoop
|
||||
|
||||
[Scoop](https://scoop.sh/) has Neovide in the `extras` bucket. Ensure you have the `extras` bucket,
|
||||
and install:
|
||||
|
||||
```sh
|
||||
$ scoop bucket list
|
||||
main
|
||||
extras
|
||||
|
||||
$ scoop install neovide
|
||||
```
|
||||
|
||||
### Windows Source
|
||||
|
||||
1. Install the latest version of Rust. I recommend <https://rustup.rs/>
|
||||
|
||||
2. Install CMake. I use chocolatey:
|
||||
`choco install cmake --installargs '"ADD_CMAKE_TO_PATH=System"' -y`
|
||||
|
||||
3. Install LLVM. I use chocolatey: `choco install llvm -y`
|
||||
|
||||
4. Ensure graphics libraries are up to date.
|
||||
|
||||
5. Build and install Neovide:
|
||||
|
||||
```sh
|
||||
cargo install --git https://github.com/neovide/neovide.git
|
||||
```
|
||||
|
||||
The resulting binary can be found inside of `~/.cargo/bin` afterwards (99% of the time).
|
||||
|
||||
## Mac
|
||||
|
||||
### Homebrew
|
||||
|
||||
Neovide is available as Cask in [Homebrew](https://brew.sh). It can be installed from the command
|
||||
line:
|
||||
|
||||
```sh
|
||||
brew install --cask neovide
|
||||
```
|
||||
|
||||
### Mac Source
|
||||
|
||||
1. Install the latest version of Rust. Using homebrew: `brew install rustup-init`
|
||||
|
||||
2. Configure rust by running `rustup-init`
|
||||
|
||||
3. Install CMake. Using homebrew: `brew install cmake`
|
||||
|
||||
4. `git clone https://github.com/neovide/neovide`
|
||||
|
||||
5. `cd neovide`
|
||||
|
||||
6. `cargo install --path .`
|
||||
|
||||
The resulting binary is to be found under `~/.cargo/bin`. In case you want a nice application
|
||||
bundle:
|
||||
|
||||
7. `cargo install cargo-bundle`
|
||||
|
||||
8. `cargo bundle --release`
|
||||
|
||||
9. Copy `./target/release/bundle/osx/neovide.app` to `~/Applications` and enjoy.
|
||||
|
||||
## Linux
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Stable releases are
|
||||
[packaged in the community repository](https://archlinux.org/packages/community/x86_64/neovide).
|
||||
|
||||
```sh
|
||||
pacman -S neovide
|
||||
```
|
||||
|
||||
To run a development version you can build from
|
||||
[the VCS package in the AUR](https://aur.archlinux.org/packages/neovide-git). This can be built and
|
||||
installed using an AUR helper or
|
||||
[by hand in the usual way](https://wiki.archlinux.org/title/Arch_User_Repository#Installing_and_upgrading_packages).
|
||||
To build from a non-default branch you can edit the PKGBUILD and add `#branch-name` to the end of
|
||||
the source URL.
|
||||
|
||||
### Snap
|
||||
|
||||
Neovide is also available in the Snap Store. You can install it using the command below.
|
||||
|
||||
```sh
|
||||
snap install neovide
|
||||
```
|
||||
|
||||
[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-white.svg)](https://snapcraft.io/neovide)
|
||||
|
||||
### Linux Source
|
||||
|
||||
1. Install necessary dependencies (adjust for your preferred package manager, probably most of this
|
||||
stuff is already installed, just try building and see)
|
||||
|
||||
```sh
|
||||
sudo apt install -y curl \
|
||||
gnupg ca-certificates git \
|
||||
gcc-multilib g++-multilib cmake libssl-dev pkg-config \
|
||||
libfreetype6-dev libasound2-dev libexpat1-dev libxcb-composite0-dev \
|
||||
libbz2-dev libsndio-dev freeglut3-dev libxmu-dev libxi-dev libfontconfig1-dev
|
||||
```
|
||||
|
||||
2. Install Rust
|
||||
|
||||
```sh
|
||||
curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
|
||||
```
|
||||
|
||||
3. Fetch and build
|
||||
|
||||
```sh
|
||||
cargo install --git https://github.com/neovide/neovide
|
||||
```
|
||||
|
||||
The resulting binary can be found inside of `~/.cargo/bin` afterwards, you might want to add this
|
||||
to your `PATH` environment variable.
|
@ -0,0 +1,14 @@
|
||||
# Troubleshooting
|
||||
|
||||
- Neovide requires that a font be set in `init.vim` otherwise errors might be encountered. This can
|
||||
be fixed by adding `set guifont=Your\ Font\ Name:h15` in init.vim file. Reference issue
|
||||
[#527](https://github.com/neovide/neovide/issues/527).
|
||||
- If you installed `neovim` via Apple Silicon (M1)-based `brew`, you have to add the `brew prefix`
|
||||
to `$PATH` to run `Neovide.app` in GUI. Please see the
|
||||
[homebrew documentation](https://docs.brew.sh/FAQ#my-mac-apps-dont-find-homebrew-utilities).
|
||||
Reference issue [#1242](https://github.com/neovide/neovide/pull/1242)
|
||||
|
||||
## Linux
|
||||
|
||||
- If you recieve errors complaining about DRI3 settings, please reference issue
|
||||
[#44](https://github.com/neovide/neovide/issues/44#issuecomment-578618052).
|
@ -1,41 +0,0 @@
|
||||
#!/usr/bin/awk -f
|
||||
#
|
||||
# Copyright 2021 Clément Joly
|
||||
# https://cj.rs/riss
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Divide the input file into these types of sections:
|
||||
# * inserting: the current line is copied to the output, verbatim
|
||||
# * removing: the line is not copied to the output
|
||||
# To distinguish between these sections, the script interprets special
|
||||
# comments. These comments are removed from the output.
|
||||
BEGIN {
|
||||
# Section identifier
|
||||
removing = 0
|
||||
}
|
||||
|
||||
/^<!--+ remove -+->$/ {
|
||||
removing = 1
|
||||
next
|
||||
}
|
||||
|
||||
/^<!--+ end_remove -+->$|^<!--+ insert$|^end_insert -+->$/ {
|
||||
removing = 0
|
||||
next
|
||||
}
|
||||
|
||||
! removing {
|
||||
print $0
|
||||
}
|
||||
|
@ -1 +0,0 @@
|
||||
neovide.dev
|
@ -1,15 +0,0 @@
|
||||
<style>
|
||||
:root {
|
||||
/* Primary theme color */
|
||||
--primary-color: #FED43F;
|
||||
/* Primary theme text color */
|
||||
--primary-text-color: #543631;
|
||||
/* Primary theme link color */
|
||||
--primary-link-color: #F9BB2D;
|
||||
/* Secondary color: the background body color */
|
||||
--secondary-color: #fcfaf6;
|
||||
--secondary-text-color: #303030;
|
||||
/* Highlight text color of table of content */
|
||||
--toc-highlight-text-color: #d46e13;
|
||||
}
|
||||
</style>
|
@ -1,32 +0,0 @@
|
||||
{% extends "juice/templates/index.html" %}
|
||||
{% block hero %}
|
||||
<section class="text-center">
|
||||
<h1 class="heading-text" style="font-size: 50px">
|
||||
No Nonsense Neovim Client in Rust
|
||||
</h1>
|
||||
<div>
|
||||
<img src="https://badgen.net/badge/icon/discord?icon=discord&label" alt="Discord"></a> <a href="https://matrix.to/#/#neovide_community:gitter.im"><img src="https://matrix.to/img/matrix-badge.svg" alt="Chat on Matrix"></a> <a href="https://github.com/neovide/neovide/discussions"><img src="https://img.shields.io/badge/GitHub-Discussions-green?logo=github" alt="Discussions"></a>
|
||||
</div>
|
||||
</section>
|
||||
<img class="hero-image" style="width: 50%" src="{{ get_url(path="assets/neovide.svg") }}">
|
||||
|
||||
<div class="explore-more text"
|
||||
onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})">
|
||||
Explore More ⇩
|
||||
</div>
|
||||
<style>
|
||||
.hero section {
|
||||
padding: 0 5rem;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.hero section {
|
||||
padding: 0 2rem;
|
||||
}
|
||||
|
||||
.hero-image {
|
||||
display: none
|
||||
}
|
||||
}
|
||||
</style>
|
||||
{% endblock hero %}
|
||||
|
@ -0,0 +1,67 @@
|
||||
/* Mobile Devices: Extremely Small Screen Devices (480px & Below) */
|
||||
@media only screen and (max-width: 480px) {
|
||||
.show-mobile {
|
||||
display: block;
|
||||
}
|
||||
.show-mobile .logo {
|
||||
width: 23px;
|
||||
}
|
||||
.hide-mobile {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* iPads, Tablets: Small Screen Devices (Between 481px & 768px) */
|
||||
@media only screen and (min-width: 480px) and (max-width: 768px) {
|
||||
.show-mobile {
|
||||
display: block;
|
||||
}
|
||||
.show-mobile .logo {
|
||||
width: 23px;
|
||||
}
|
||||
.hide-mobile {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Laptops: Medium Screens (Between 769px & 1024px) */
|
||||
@media only screen and (min-width: 769px) and (max-width: 1024px) {
|
||||
.show-mobile {
|
||||
display: none;
|
||||
}
|
||||
.hide-mobile {
|
||||
display: block;
|
||||
}
|
||||
.hide-mobile .logo {
|
||||
float: left;
|
||||
padding-right: 15px
|
||||
}
|
||||
}
|
||||
|
||||
/* Desktops: Large Screens (Between 1025px & 1200px) */
|
||||
@media only screen and (min-width: 1025px) and (max-width: 1200px) {
|
||||
.show-mobile {
|
||||
display: none;
|
||||
}
|
||||
.hide-mobile {
|
||||
display: block;
|
||||
}
|
||||
.hide-mobile .logo {
|
||||
float: left;
|
||||
padding-right: 15px
|
||||
}
|
||||
}
|
||||
|
||||
/* Extra big screen devices (1201px & Above) */
|
||||
@media only screen and (min-width: 1201px) {
|
||||
.show-mobile {
|
||||
display: none;
|
||||
}
|
||||
.hide-mobile {
|
||||
display: block;
|
||||
}
|
||||
.hide-mobile .logo {
|
||||
float: left;
|
||||
padding-right: 15px
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
/* Center Elements */
|
||||
div.center .screenshot {
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-bottom: 5px;
|
||||
width: 90%;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
div.center .text {
|
||||
text-align: center
|
||||
}
|
||||
|
||||
/* https://codepen.io/JavaScriptJunkie/pen/pPRooV */
|
||||
* {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.button-hover {
|
||||
width: 190px;
|
||||
font-size: 13px;
|
||||
font-family: inherit;
|
||||
font-weight: 650;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
margin: 2px 2px;
|
||||
height: 30px;
|
||||
text-align:center;
|
||||
border: none;
|
||||
background-size: 300% 100%;
|
||||
|
||||
border-radius: 20px;
|
||||
moz-transition: all .4s ease-in-out;
|
||||
-o-transition: all .4s ease-in-out;
|
||||
-webkit-transition: all .4s ease-in-out;
|
||||
transition: all .4s ease-in-out;
|
||||
}
|
||||
|
||||
.button-hover:hover {
|
||||
background-position: 100% 0;
|
||||
moz-transition: all .4s ease-in-out;
|
||||
-o-transition: all .4s ease-in-out;
|
||||
-webkit-transition: all .4s ease-in-out;
|
||||
transition: all .4s ease-in-out;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.button-hover:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.button-hover.color {
|
||||
background-image: linear-gradient(to right, #fc6076, #ff9a44, #ef9d43, #e75516);
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
// Open all external links in new tabs
|
||||
Array.prototype.forEach.call(document.links, function(link) {
|
||||
if (link.hostname != window.location.hostname) {
|
||||
link.target = '_blank';
|
||||
}
|
||||
})
|
||||
|
After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 256 256.00001"
|
||||
version="1.1"
|
||||
id="svg436">
|
||||
<metadata
|
||||
id="metadata442">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs440">
|
||||
<linearGradient
|
||||
x1="49.021549"
|
||||
y1="-0.079835393"
|
||||
x2="49.021549"
|
||||
y2="97.845657"
|
||||
id="linearGradient-1"
|
||||
gradientTransform="matrix(0.49500848,0,0,2.3234666,34.367657,9.4880553)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="#16B0ED"
|
||||
stop-opacity="0.800235524"
|
||||
offset="0%"
|
||||
id="stop197" />
|
||||
<stop
|
||||
stop-color="#0F59B2"
|
||||
stop-opacity="0.83700023"
|
||||
offset="100%"
|
||||
id="stop199" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="326.17365"
|
||||
y1="-0.069164939"
|
||||
x2="326.17365"
|
||||
y2="98.851547"
|
||||
id="linearGradient-2"
|
||||
gradientTransform="matrix(-0.50009738,0,0,2.2998234,360.41234,9.4880553)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="#7DB643"
|
||||
offset="0%"
|
||||
id="stop202" />
|
||||
<stop
|
||||
stop-color="#367533"
|
||||
offset="100%"
|
||||
id="stop204" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="103.88479"
|
||||
y1="-0.11508822"
|
||||
x2="103.88479"
|
||||
y2="178.55785"
|
||||
id="linearGradient-3"
|
||||
gradientTransform="matrix(0.90309898,0,0,1.2735433,34.367657,9.4880553)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="#88C649"
|
||||
stop-opacity="0.8"
|
||||
offset="0%"
|
||||
id="stop207" />
|
||||
<stop
|
||||
stop-color="#439240"
|
||||
stop-opacity="0.84"
|
||||
offset="100%"
|
||||
id="stop209" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
id="path434"
|
||||
style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke-width:2.44834"
|
||||
d="m 128.00953,0 c -1.23772,0 -2.47582,0.5458718 -3.14671,1.6353058 l -6.66166,10.7585922 -3.13714,0.306022 -8.62716,-9.2523891 C 104.68863,1.5771234 101.15915,2.2721764 100.263,4.6811826 L 95.844214,16.501288 92.79793,17.424136 82.5496,10.050915 C 80.468371,8.5477344 77.140969,9.9343306 76.72962,12.46084 l -2.032449,12.465622 -2.797608,1.501421 -11.491712,-5.240629 c -2.335875,-1.067406 -5.334488,0.939333 -5.236548,3.500127 L 55.61127,37.334704 53.181894,39.328629 40.867638,36.4262 c -2.502369,-0.582666 -5.044685,1.954419 -4.457042,4.456449 l 2.902817,12.317392 -1.994191,2.424268 -12.649013,-0.439908 c -2.551342,-0.07344 -4.563244,2.895391 -3.500596,5.235848 l 5.241331,11.494959 -1.501624,2.797234 -12.462504,2.027396 c -2.5317515,0.411294 -3.9038394,3.738252 -2.410247,5.819203 l 7.374206,10.237398 -0.927753,3.050659 -11.8216851,4.422972 c -2.3995342,0.89604 -3.0998065,4.42015 -1.2242521,6.17304 l 9.2488422,8.626 -0.306063,3.13195 -10.7600286,6.66076 c -1.43423441,0.88621 -1.90746247,2.74036 -1.45379942,4.29388 H 34.320759 c -0.08286,-4.01467 0.09103,-8.03393 0.526046,-12.04006 l 16.388721,-7.28237 c 3.501359,-1.5546 5.084092,-5.65809 3.529289,-9.16632 l -1.133391,-2.562941 h 0.01445 L 46.199935,81.349296 c 3.674449,-6.542835 8.114221,-12.639009 13.256354,-18.136594 l 0.06694,0.06216 C 73.117902,48.700827 91.008237,38.81379 110.62619,35.106478 l 11.71648,12.293483 c 2.64928,2.773785 7.03665,2.876089 9.80836,0.224743 l 13.11289,-12.537346 c 27.05125,5.066539 50.5064,21.769043 64.13934,45.673807 L 200.427,101.03035 c -1.5499,3.50824 0.0304,7.61173 3.52929,9.16632 l 17.283,7.67446 c 0.30792,3.09848 0.46112,6.21038 0.45909,9.32412 h 0.0956 c 2e-5,0.65521 -0.0294,1.30658 -0.043,1.96045 h 34.08298 c 0.45368,-1.55351 -0.0196,-3.40767 -1.4538,-4.29387 l -10.75523,-6.66077 -0.30606,-3.13194 9.24406,-8.626 c 1.88045,-1.7529 1.17538,-5.27701 -1.22905,-6.17304 l -11.8121,-4.422977 -0.93254,-3.050659 7.37419,-10.237398 c 1.50338,-2.080951 0.12144,-5.403013 -2.41024,-5.819203 l -12.45772,-2.027397 -1.50163,-2.797233 5.23655,-11.494959 c 1.07245,-2.340457 -0.9152,-5.333773 -3.49103,-5.235848 l -12.6538,0.439908 -1.99419,-2.424268 2.9076,-12.317392 c 0.58764,-2.502035 -1.95467,-5.044012 -4.45704,-4.456449 l -12.31904,2.902429 -2.42937,-1.993925 0.44474,-12.647323 c 0.0979,-2.560794 -2.90067,-4.562636 -5.23654,-3.500127 l -11.49171,5.240629 -2.79761,-1.501421 -2.03245,-12.465622 C 178.8686,9.9343208 175.5412,8.552643 173.45997,10.05092 l -10.24363,7.373216 -3.04628,-0.922848 -4.41879,-11.8201054 C 154.85512,2.2721764 151.32086,1.5771234 149.57262,3.4475309 L 140.95025,12.69992 137.81789,12.393898 131.15624,1.6353058 C 130.4829,0.54586691 129.24724,0 128.00953,0 Z m -0.38258,22.554791 c 4.19241,0.01395 7.58386,3.41564 7.58462,7.607517 0,10.146542 -15.22185,10.146542 -15.22185,0 7.6e-4,-4.212419 3.42427,-7.622615 7.63723,-7.607517 z M 36.840997,91.443246 c 4.196149,0.01126 7.591277,3.416698 7.589408,7.612301 0,10.146543 -15.221854,10.146543 -15.221854,0 -0.0019,-4.212412 3.419488,-7.624752 7.632446,-7.612301 z m 181.567113,0.358621 c 4.19243,0.01395 7.58387,3.415641 7.58463,7.60752 0,10.146553 -15.22185,10.146553 -15.22185,0 7.5e-4,-4.212419 3.42428,-7.622618 7.63722,-7.60752 z" />
|
||||
<path
|
||||
d="M 34.39677,58.236531 82.870719,9.302562 V 236.88696 L 34.39677,188.51815 Z"
|
||||
id="Left---green"
|
||||
fill="url(#linearGradient-1)"
|
||||
sketch:type="MSShapeGroup"
|
||||
style="fill:url(#linearGradient-1);stroke-width:1.07244" />
|
||||
<path
|
||||
d="M 221.69673,58.610128 172.55877,9.2405879 173.5548,236.82916 222.02875,188.46037 Z"
|
||||
id="Right---blue"
|
||||
fill="url(#linearGradient-2)"
|
||||
sketch:type="MSShapeGroup"
|
||||
style="fill:url(#linearGradient-2);stroke-width:1.07244" />
|
||||
<path
|
||||
d="M 82.838401,9.3414878 208.86559,201.62861 173.59939,236.88922 47.506234,45.027731 Z"
|
||||
id="Cross---blue"
|
||||
fill="url(#linearGradient-3)"
|
||||
sketch:type="MSShapeGroup"
|
||||
style="fill:url(#linearGradient-3);stroke-width:1.07244" />
|
||||
<path
|
||||
d="m 82.881769,98.529378 -0.06706,7.573632 -38.911476,-57.438942 3.602976,-3.669847 z"
|
||||
id="Shadow"
|
||||
fill-opacity="0.13"
|
||||
fill="#000000"
|
||||
sketch:type="MSShapeGroup"
|
||||
style="stroke-width:1.07244" />
|
||||
<path
|
||||
id="path849"
|
||||
style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke-width:2.44834"
|
||||
d="m 0.00822228,128.23763 c 0.06381047,1.15772 0.5900871,2.28788 1.61161312,2.91677 l 10.7600286,6.66077 0.306063,3.13194 -9.2488422,8.626 c -1.8755544,1.748 -1.1752821,5.27211 1.2242521,6.17304 l 11.8216851,4.4182 0.927753,3.05066 -7.374206,10.24218 c -1.4984845,2.08584 -0.1215167,5.40802 2.410247,5.81442 l 12.462504,2.02739 1.501624,2.80202 -5.241331,11.49018 c -1.067543,2.33556 0.949256,5.33867 3.500596,5.23584 l 12.644231,-0.4399 1.998973,2.42905 -2.902817,12.32217 c -0.587641,2.49714 1.954671,5.02967 4.457042,4.4421 l 12.314256,-2.89764 2.429376,1.98914 -0.439967,12.6521 c -0.09794,2.56082 2.900675,4.56277 5.236548,3.49535 l 11.491712,-5.23585 2.797608,1.50142 2.032449,12.45606 c 0.411349,2.5363 3.738751,3.90809 5.81998,2.4147 l 10.243548,-7.37799 3.051066,0.92764 4.418786,11.81531 c 0.89615,2.39921 4.42563,3.10429 6.17386,1.22409 l 8.62716,-9.24282 3.13714,0.3108 6.65687,10.75858 c 1.34179,2.16908 4.95153,2.17398 6.29821,0 l 6.65687,-10.75858 3.13714,-0.3108 8.62237,9.24282 c 1.74824,1.8802 5.27772,1.17512 6.17387,-1.22409 l 4.41878,-11.81531 3.05107,-0.92764 10.24355,7.37799 c 2.08122,1.49339 5.40384,0.11678 5.81519,-2.4147 l 2.03245,-12.45606 2.8024,-1.50142 11.49171,5.23585 c 2.33587,1.06742 5.32959,-0.92958 5.23654,-3.49535 l -0.44475,-12.6521 2.42938,-1.98914 12.31904,2.89764 c 2.50237,0.58757 5.03988,-1.94496 4.45226,-4.4421 l -2.90282,-12.32217 1.99419,-2.42905 12.64902,0.4399 c 2.55134,0.10283 4.56826,-2.90028 3.49581,-5.23584 l -5.23655,-11.49018 1.49684,-2.80202 12.45773,-2.02739 c 2.53666,-0.4064 3.9184,-3.72858 2.41502,-5.81442 l -7.37419,-10.24218 0.92296,-3.05066 11.82168,-4.4182 c 2.40443,-0.90093 3.10471,-4.42504 1.22426,-6.17304 l -9.23927,-8.626 0.30606,-3.13194 10.75524,-6.66077 c 1.02154,-0.62889 1.54782,-1.75905 1.61163,-2.91677 h -34.22169 c -0.23905,21.49027 -7.84793,42.2603 -21.60136,58.81364 l -0.0335,-0.0287 c -1.69183,2.01195 -3.46762,3.95181 -5.32263,5.81442 l -16.097,-3.46187 c -3.74866,-0.80301 -7.43669,1.58076 -8.2398,5.33626 l -3.81622,17.82579 c -24.85712,11.25919 -53.38847,11.12301 -78.136936,-0.37296 l -3.816225,-17.8258 c -0.803109,-3.7506 -4.488796,-6.13693 -8.235008,-5.33147 l -15.738304,3.3758 c -2.418569,-2.49028 -4.696831,-5.11304 -6.824254,-7.85616 l -0.07652,0.0574 C 45.774957,174.19336 39.995633,162.22571 36.869691,149.45836 l 0.09564,-0.024 c -1.696247,-6.95139 -2.567307,-14.06598 -2.644577,-21.19682 z M 71.244395,198.66576 h 0.0049 c 4.194281,0.014 7.586507,3.41855 7.584624,7.6123 0,10.14655 -15.221854,10.14655 -15.221854,0 -0.0019,-4.21241 3.419483,-7.62475 7.632446,-7.6123 z m 112.760325,0.35862 c 4.19241,0.0147 7.58386,3.41566 7.58462,7.60752 0,10.14655 -15.22185,10.14655 -15.22185,0 7.5e-4,-4.21241 3.42427,-7.62262 7.63723,-7.60752 z" />
|
||||
</svg>
|
After Width: | Height: | Size: 9.2 KiB |
@ -0,0 +1,314 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="{{ language }}" class="sidebar-visible no-js {{ default_theme }}">
|
||||
<head>
|
||||
<!-- Book generated using mdBook -->
|
||||
<meta charset="UTF-8">
|
||||
<title>{{ title }}</title>
|
||||
{{#if is_print }}
|
||||
<meta name="robots" content="noindex" />
|
||||
{{/if}}
|
||||
{{#if base_url}}
|
||||
<base href="{{ base_url }}">
|
||||
{{/if}}
|
||||
|
||||
|
||||
<!-- Custom HTML head -->
|
||||
{{> head}}
|
||||
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||
<meta name="description" content="{{ description }}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
|
||||
{{#if favicon_svg}}
|
||||
<link rel="icon" href="{{ path_to_root }}favicon.svg">
|
||||
{{/if}}
|
||||
{{#if favicon_png}}
|
||||
<link rel="shortcut icon" href="{{ path_to_root }}favicon.png">
|
||||
{{/if}}
|
||||
<link rel="stylesheet" href="{{ path_to_root }}css/variables.css">
|
||||
<link rel="stylesheet" href="{{ path_to_root }}css/general.css">
|
||||
<link rel="stylesheet" href="{{ path_to_root }}css/chrome.css">
|
||||
{{#if print_enable}}
|
||||
<link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
|
||||
{{/if}}
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
|
||||
{{#if copy_fonts}}
|
||||
<link rel="stylesheet" href="{{ path_to_root }}fonts/fonts.css">
|
||||
{{/if}}
|
||||
|
||||
<!-- Highlight.js Stylesheets -->
|
||||
<link rel="stylesheet" href="{{ path_to_root }}highlight.css">
|
||||
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
|
||||
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
|
||||
|
||||
<!-- Custom theme stylesheets -->
|
||||
{{#each additional_css}}
|
||||
<link rel="stylesheet" href="{{ ../path_to_root }}{{ this }}">
|
||||
{{/each}}
|
||||
|
||||
{{#if mathjax_support}}
|
||||
<!-- MathJax -->
|
||||
<script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
{{/if}}
|
||||
</head>
|
||||
<body>
|
||||
<!-- Provide site root to javascript -->
|
||||
<script type="text/javascript">
|
||||
var path_to_root = "{{ path_to_root }}";
|
||||
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
|
||||
</script>
|
||||
|
||||
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
||||
<script type="text/javascript">
|
||||
try {
|
||||
var theme = localStorage.getItem('mdbook-theme');
|
||||
var sidebar = localStorage.getItem('mdbook-sidebar');
|
||||
|
||||
if (theme.startsWith('"') && theme.endsWith('"')) {
|
||||
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
||||
}
|
||||
|
||||
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
||||
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
||||
}
|
||||
} catch (e) { }
|
||||
</script>
|
||||
|
||||
<!-- Set the theme before any content is loaded, prevents flash -->
|
||||
<script type="text/javascript">
|
||||
var theme;
|
||||
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
||||
if (theme === null || theme === undefined) { theme = default_theme; }
|
||||
var html = document.querySelector('html');
|
||||
html.classList.remove('no-js')
|
||||
html.classList.remove('{{ default_theme }}')
|
||||
html.classList.add(theme);
|
||||
html.classList.add('js');
|
||||
</script>
|
||||
|
||||
<!-- Hide / unhide sidebar before it is displayed -->
|
||||
<script type="text/javascript">
|
||||
var html = document.querySelector('html');
|
||||
var sidebar = 'hidden';
|
||||
if (document.body.clientWidth >= 1080) {
|
||||
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
||||
sidebar = sidebar || 'visible';
|
||||
}
|
||||
html.classList.remove('sidebar-visible');
|
||||
html.classList.add("sidebar-" + sidebar);
|
||||
</script>
|
||||
|
||||
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
||||
<div class="sidebar-scrollbox">
|
||||
{{#toc}}{{/toc}}
|
||||
</div>
|
||||
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper" class="page-wrapper">
|
||||
|
||||
<div class="page">
|
||||
{{> header}}
|
||||
<div id="menu-bar-hover-placeholder"></div>
|
||||
<div id="menu-bar" class="menu-bar sticky bordered">
|
||||
<div class="left-buttons">
|
||||
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
||||
<i class="fa fa-bars"></i>
|
||||
</button>
|
||||
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
||||
<i class="fa fa-paint-brush"></i>
|
||||
</button>
|
||||
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
||||
<li role="none"><button role="menuitem" class="theme" id="light">{{ theme_option "Light" }}</button></li>
|
||||
<li role="none"><button role="menuitem" class="theme" id="rust">{{ theme_option "Rust" }}</button></li>
|
||||
<li role="none"><button role="menuitem" class="theme" id="coal">{{ theme_option "Coal" }}</button></li>
|
||||
<li role="none"><button role="menuitem" class="theme" id="navy">{{ theme_option "Navy" }}</button></li>
|
||||
<li role="none"><button role="menuitem" class="theme" id="ayu">{{ theme_option "Ayu" }}</button></li>
|
||||
</ul>
|
||||
{{#if search_enabled}}
|
||||
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
||||
<i class="fa fa-search"></i>
|
||||
</button>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<h1 class="menu-title">{{ book_title }}</h1>
|
||||
|
||||
<div class="right-buttons">
|
||||
{{#if print_enable}}
|
||||
<a href="{{ path_to_root }}print.html" title="Print this book" aria-label="Print this book">
|
||||
<i id="print-button" class="fa fa-print"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if git_repository_url}}
|
||||
<a href="{{git_repository_url}}" title="Git repository" aria-label="Git repository">
|
||||
<i id="git-repository-button" class="fa {{git_repository_icon}}"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if git_repository_edit_url}}
|
||||
<a href="{{git_repository_edit_url}}" title="Suggest an edit" aria-label="Suggest an edit">
|
||||
<i id="git-edit-button" class="fa fa-edit"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if search_enabled}}
|
||||
<div id="search-wrapper" class="hidden">
|
||||
<form id="searchbar-outer" class="searchbar-outer">
|
||||
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
||||
</form>
|
||||
<div id="searchresults-outer" class="searchresults-outer hidden">
|
||||
<div id="searchresults-header" class="searchresults-header"></div>
|
||||
<ul id="searchresults">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
||||
<script type="text/javascript">
|
||||
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
||||
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
||||
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
||||
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="content" class="content">
|
||||
<main><div class="sidetoc"><nav class="pagetoc"></nav></div>
|
||||
{{{ content }}}
|
||||
</main>
|
||||
|
||||
<nav class="nav-wrapper" aria-label="Page navigation">
|
||||
<!-- Mobile navigation buttons -->
|
||||
{{#previous}}
|
||||
<a rel="prev" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
||||
<i class="fa fa-angle-left"></i>
|
||||
</a>
|
||||
{{/previous}}
|
||||
|
||||
{{#next}}
|
||||
<a rel="next" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
||||
<i class="fa fa-angle-right"></i>
|
||||
</a>
|
||||
{{/next}}
|
||||
|
||||
<div style="clear: both"></div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
||||
{{#previous}}
|
||||
<a rel="prev" href="{{ path_to_root }}{{link}}" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
||||
<i class="fa fa-angle-left"></i>
|
||||
</a>
|
||||
{{/previous}}
|
||||
|
||||
{{#next}}
|
||||
<a rel="next" href="{{ path_to_root }}{{link}}" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
||||
<i class="fa fa-angle-right"></i>
|
||||
</a>
|
||||
{{/next}}
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
{{#if live_reload_endpoint}}
|
||||
<!-- Livereload script (if served using the cli tool) -->
|
||||
<script type="text/javascript">
|
||||
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
|
||||
const wsAddress = wsProtocol + "//" + location.host + "/" + "{{{live_reload_endpoint}}}";
|
||||
const socket = new WebSocket(wsAddress);
|
||||
socket.onmessage = function (event) {
|
||||
if (event.data === "reload") {
|
||||
socket.close();
|
||||
location.reload();
|
||||
}
|
||||
};
|
||||
|
||||
window.onbeforeunload = function() {
|
||||
socket.close();
|
||||
}
|
||||
</script>
|
||||
{{/if}}
|
||||
|
||||
{{#if google_analytics}}
|
||||
<!-- Google Analytics Tag -->
|
||||
<script type="text/javascript">
|
||||
var localAddrs = ["localhost", "127.0.0.1", ""];
|
||||
|
||||
// make sure we don't activate google analytics if the developer is
|
||||
// inspecting the book locally...
|
||||
if (localAddrs.indexOf(document.location.hostname) === -1) {
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', '{{google_analytics}}', 'auto');
|
||||
ga('send', 'pageview');
|
||||
}
|
||||
</script>
|
||||
{{/if}}
|
||||
|
||||
{{#if playground_line_numbers}}
|
||||
<script type="text/javascript">
|
||||
window.playground_line_numbers = true;
|
||||
</script>
|
||||
{{/if}}
|
||||
|
||||
{{#if playground_copyable}}
|
||||
<script type="text/javascript">
|
||||
window.playground_copyable = true;
|
||||
</script>
|
||||
{{/if}}
|
||||
|
||||
{{#if playground_js}}
|
||||
<script src="{{ path_to_root }}ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}editor.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}mode-rust.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}theme-dawn.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
|
||||
{{/if}}
|
||||
|
||||
{{#if search_js}}
|
||||
<script src="{{ path_to_root }}elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}mark.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}searcher.js" type="text/javascript" charset="utf-8"></script>
|
||||
{{/if}}
|
||||
|
||||
<script src="{{ path_to_root }}clipboard.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}highlight.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ path_to_root }}book.js" type="text/javascript" charset="utf-8"></script>
|
||||
|
||||
<!-- Custom JS scripts -->
|
||||
{{#each additional_js}}
|
||||
<script type="text/javascript" src="{{ ../path_to_root }}{{this}}"></script>
|
||||
{{/each}}
|
||||
|
||||
{{#if is_print}}
|
||||
{{#if mathjax_support}}
|
||||
<script type="text/javascript">
|
||||
window.addEventListener('load', function() {
|
||||
MathJax.Hub.Register.StartupHook('End', function() {
|
||||
window.setTimeout(window.print, 100);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{{else}}
|
||||
<script type="text/javascript">
|
||||
window.addEventListener('load', function() {
|
||||
window.setTimeout(window.print, 100);
|
||||
});
|
||||
</script>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,62 @@
|
||||
@media only screen and (max-width:1439px) {
|
||||
.sidetoc {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width:1440px) {
|
||||
main {
|
||||
position: relative;
|
||||
}
|
||||
.sidetoc {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
left: calc(100% + (var(--content-max-width))/4 - 140px);
|
||||
position: absolute;
|
||||
}
|
||||
.pagetoc {
|
||||
position: fixed;
|
||||
width: 200px;
|
||||
height: calc(100vh - var(--menu-bar-height) - 0.67em * 4);
|
||||
overflow: auto;
|
||||
}
|
||||
.pagetoc a {
|
||||
border-left: 1px solid var(--sidebar-bg);
|
||||
color: var(--fg) !important;
|
||||
display: block;
|
||||
padding-bottom: 5px;
|
||||
padding-top: 5px;
|
||||
padding-left: 10px;
|
||||
text-align: left;
|
||||
text-decoration: none;
|
||||
}
|
||||
.pagetoc a:hover,
|
||||
.pagetoc a.active {
|
||||
background: var(--sidebar-bg);
|
||||
color: var(--sidebar-fg) !important;
|
||||
}
|
||||
.pagetoc .active {
|
||||
background: var(--sidebar-bg);
|
||||
color: var(--sidebar-fg);
|
||||
}
|
||||
.pagetoc .pagetoc-H2 {
|
||||
padding-left: 20px;
|
||||
}
|
||||
.pagetoc .pagetoc-H3 {
|
||||
padding-left: 40px;
|
||||
}
|
||||
.pagetoc .pagetoc-H4 {
|
||||
padding-left: 60px;
|
||||
}
|
||||
.pagetoc .pagetoc-H5 {
|
||||
display: none;
|
||||
}
|
||||
.pagetoc .pagetoc-H6 {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Hide TOC where there is only one heading */
|
||||
a[class^='pagetoc-H']:only-child {
|
||||
display: none;
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
// Un-active everything when you click it
|
||||
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
|
||||
el.addEventHandler("click", function() {
|
||||
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
|
||||
el.classList.remove("active");
|
||||
});
|
||||
el.classList.add("active");
|
||||
});
|
||||
});
|
||||
|
||||
var updateFunction = function() {
|
||||
|
||||
var id;
|
||||
var elements = document.getElementsByClassName("header");
|
||||
Array.prototype.forEach.call(elements, function(el) {
|
||||
if (window.pageYOffset >= el.offsetTop) {
|
||||
id = el;
|
||||
}
|
||||
});
|
||||
|
||||
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
|
||||
el.classList.remove("active");
|
||||
});
|
||||
if (!id) return;
|
||||
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
|
||||
if (id.href.localeCompare(el.href) == 0) {
|
||||
el.classList.add("active");
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Populate sidebar on load
|
||||
window.addEventListener('load', function() {
|
||||
var pagetoc = document.getElementsByClassName("pagetoc")[0];
|
||||
var elements = document.getElementsByClassName("header");
|
||||
|
||||
Array.prototype.forEach.call(elements, function (el) {
|
||||
var link = document.createElement("a");
|
||||
link.appendChild(document.createTextNode(el.parentElement.innerText));
|
||||
link.href = el.href;
|
||||
link.classList.add("pagetoc-" + el.parentElement.tagName);
|
||||
pagetoc.appendChild(link);
|
||||
});
|
||||
updateFunction.call();
|
||||
});
|
||||
|
||||
|
||||
|
||||
// Handle active elements on scroll
|
||||
window.addEventListener("scroll", updateFunction);
|
@ -1 +0,0 @@
|
||||
Subproject commit a5eb57d2781eed43301215e27679c0bb7b4cbedf
|