Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

nvim-ghost.nvim

This is a neovim plugin for GhostText

Installation

Install it using your favourite plugin manager, e.g. for vim-plug -

Plug 'subnut/nvim-ghost.nvim'

Usage

  • Open neovim
  • Use GhostText

Really, it's that simple!

Features

  • Zero dependencies! Does not even need python installed!
  • Supports neovim running inside WSL (Windows Subsystem for Linux)
  • Supports Linux, macOS, Windows out-of-the-box (for other OSes, please see below)

Customization

Specifying a different port

The default is 4001, which corresponds to the default value set in the browser extension. If you want to use a different value, simply add the following line to your init.vim -

letg:nvim_ghost_server_port=4001

Replace 4001 with the port number you have set in the browser extension

Custom settings according to website

When you trigger GhostText, nvim-ghost triggers an User autocommand. You can listen for that autocommand and run your own commands (e.g. setting filetype)

NOTE: All the autocommands should be in the nvim_ghost_user_autocommands augroup

Some examples -

" Autocommand for a single website (i.e. stackoverflow.com)au nvim_ghost_user_autocommands User www.stackoverflow.comsetfiletypemarkdown" Autocommand for a multiple websitesau nvim_ghost_user_autocommands User www.reddit.com,www.github.comsetfiletypemarkdown" Autocommand for a domain (i.e. github.com)au nvim_ghost_user_autocommands User*github.comsetfiletypemarkdown" Multiple autocommands can be specified like so -augroupnvim_ghost_user_autocommandsauUserwww.reddit.com,www.stackoverflow.comsetfiletypemarkdownauUserwww.reddit.com,www.github.comsetfiletypemarkdownauUser*github.comsetfiletypemarkdownaugroupEND

Suppressing all messages

If you want to suppress all messages from nvim-ghost, then add the following to your init.vim -

letg:nvim_ghost_super_quiet=1

Start manually

⚠️EXPERIMENTAL: hasn't been tested thoroughly
Add this line to your init.vim -

letg:nvim_ghost_autostart=0

and then, when you need the plugin, run :GhostTextStart to enable the plugin for that specific neovim instance.

Disable the plugin

If, for any reason, you want to disable the plugin completely, add this to your init.vim -

letg:nvim_ghost_disabled=1

Other Operating Systems

This plugin uses a binary with its own packaged version of python3 and comes with the required packages pre-installed, but the binary itself needs to be made on a machine running the same OS as the target machine. (i.e. the Linux binary needs to be built on a Linux machine, macOS binary on macOS, etc.)

The binaries are made using GitHub Actions, which only provides Linux, Windows and macOS containers. So, it is impossible for me to distribute binaries for other OSes.

So, to use this plugin, you shall need to install python3 (with pip) in your system. Then, go to the directory where this plugin is installed and run -

python -m pip install -r requirements.txt

This needs to be done only once. This command installs the required packages from pip.

Next, add the following two lines to your init.vim -

letg:nvim_ghost_use_script=1letg:nvim_ghost_python_executable='/usr/bin/python'

Replace /usr/bin/python with the absolute path of the python executable installed in your system. Now, restart neovim, and the plugin should work.

If you face any problems, please open an issue. I will try my best to work out a solution for you.

About

👻 GhostText plugin for Neovim with zero dependencies 🎉 Supports neovim running inside WSL too! 🥳 Windows/Linux/macOS supported out-of-the-box! 😄 (Other OSes need python3.6+ installed)

Topics

Resources

Stars

200 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages