mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-26 14:30:12 +08:00
feat(zsh-navigation-tools)!: update to zdharma-continuum fork (#10402)
BREAKING CHANGE: the `zsh-navigation-tools` plugin now bundles the version from the zdharma-continuum project, which republished the projects that psprint deleted (we don't yet know yet why). In theory this change doesn't break anything, but be aware of the change and that the upstream repository now lives somewhere else. Source: https://github.com/zdharma-continuum/zsh-navigation-tools/commit/67b24e1
This commit is contained in:
parent
4f90849425
commit
068feca15d
@ -1 +0,0 @@
|
||||
These are skeletons, configuration is read from ~/.config/znt/*
|
@ -1,15 +1,14 @@
|
||||
[![License (GPL version 3)](https://img.shields.io/badge/license-GNU%20GPL%20version%203-blue.svg?style=flat-square)](./LICENSE)
|
||||
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](./LICENSE)
|
||||
![ZSH 5.0.0](https://img.shields.io/badge/zsh-v5.0.0-orange.svg?style=flat-square)
|
||||
[![Gitter][gitter-image]][gitter-link]
|
||||
|
||||
![znt logo](http://imageshack.com/a/img905/2629/WK9qjN.png)
|
||||
|
||||
[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=D6XDCHDSBDSDG)
|
||||
|
||||
# Zsh Navigation Tools
|
||||
|
||||
Also check out [![ZCA](http://imageshack.com/a/img911/8084/qSpO8a.png) Zsh Command Architect](https://github.com/psprint/zsh-cmd-architect)
|
||||
and [Zconvey](https://github.com/psprint/zconvey)
|
||||
Also check out [![ZCA](http://imageshack.com/a/img911/8084/qSpO8a.png) Zsh Command Architect](https://github.com/zdharma-continuum/zsh-cmd-architect)
|
||||
and [Zconvey](https://github.com/zdharma-continuum/zconvey)
|
||||
|
||||
|
||||
|
||||
@ -107,10 +106,10 @@ history management and various integrations with `Zsh`.
|
||||
|
||||
* 30-04-2016
|
||||
- New feature: color themes. Use `Ctrl-T` and `Ctrl-G` to browse predefined
|
||||
themes. They are listed in [~/.config/znt/n-list.conf](https://github.com/psprint/zsh-navigation-tools/blob/master/.config/znt/n-list.conf).
|
||||
themes. They are listed in [~/.config/znt/n-list.conf](https://github.com/zdharma-continuum/zsh-navigation-tools/blob/master/.config/znt/n-list.conf).
|
||||
Use the file to permanently set a color scheme. Also, I sent a patch to Zsh developers
|
||||
and starting from Zsh > 5.2 (not yet released) supported will be 256 colors.
|
||||
The file [~/.config/znt/n-list.conf](https://github.com/psprint/zsh-navigation-tools/blob/master/.config/znt/n-list.conf)
|
||||
The file [~/.config/znt/n-list.conf](https://github.com/zdharma-continuum/zsh-navigation-tools/blob/master/.config/znt/n-list.conf)
|
||||
already has set of 256-color themes prepared :)
|
||||
|
||||
![themes](http://imageshack.com/a/img924/4310/EbRh30.gif)
|
||||
@ -130,7 +129,7 @@ history management and various integrations with `Zsh`.
|
||||
## Installation
|
||||
|
||||
```
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/psprint/zsh-navigation-tools/master/doc/install.sh)"
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma-continuum/zsh-navigation-tools/master/doc/install.sh)"
|
||||
```
|
||||
|
||||
To update run the command again.
|
||||
@ -140,16 +139,16 @@ will be updated with only `8` lines of code, which will be added at the bottom.
|
||||
|
||||
After installing and reloading shell give `ZNT` a quick try with `Ctrl-R` – this keyboard shortcut will open `n-history`.
|
||||
|
||||
## Installation With [Zplugin](https://github.com/psprint/zplugin)
|
||||
Add `zplugin load psprint/zsh-navigation-tools` to `.zshrc`. The config files will be in `~/.config/znt`.
|
||||
## Installation With [Zinit](https://github.com/zdharma-continuum/zinit)
|
||||
Add `zinit load zdharma-continuum/zsh-navigation-tools` to `.zshrc`. The config files will be in `~/.config/znt`.
|
||||
|
||||
## Installation With Zgen
|
||||
## Installation With Zgenom/Zgen
|
||||
|
||||
Add `zgen load psprint/zsh-navigation-tools` to `.zshrc` and issue a `zgen reset` (this assumes that there is a proper `zgen save` construct in `.zshrc`).
|
||||
Add `zgen load zdharma-continuum/zsh-navigation-tools` to `.zshrc` and issue a `zgen reset` (this assumes that there is a proper `zgen save` construct in `.zshrc`).
|
||||
The config files will be available in `~/.config/znt`.
|
||||
|
||||
## Installation With Antigen
|
||||
Add `antigen bundle psprint/zsh-navigation-tools` to `.zshrc`. There also
|
||||
Add `antigen bundle zdharma-continuum/zsh-navigation-tools` to `.zshrc`. There also
|
||||
should be `antigen apply`. The config files will be in `~/.config/znt`.
|
||||
|
||||
## Single File Manual Installation
|
||||
@ -194,7 +193,7 @@ alias naliases=n-aliases ncd=n-cd nenv=n-env nfunctions=n-functions nhistory=n-h
|
||||
alias nkill=n-kill noptions=n-options npanelize=n-panelize nhelp=n-help
|
||||
```
|
||||
|
||||
Don't forget to copy [configuration files](https://github.com/psprint/zsh-navigation-tools/tree/master/.config/znt). They should go to `~/.config/znt`. Moreover, `n-cd` works together with option `AUTO_PUSHD` and you should have:
|
||||
Don't forget to copy [configuration files](https://github.com/zdharma-continuum/zsh-navigation-tools/tree/master/.config/znt). They should go to `~/.config/znt`. Moreover, `n-cd` works together with option `AUTO_PUSHD` and you should have:
|
||||
|
||||
```zsh
|
||||
setopt AUTO_PUSHD
|
||||
@ -397,15 +396,7 @@ The same with doing any non-typical Zsh Navigation Tools installation.
|
||||
|
||||
## More
|
||||
|
||||
- be aware of [this](https://github.com/psprint/zsh-navigation-tools/blob/f49f910d239ae5bc6e1a5bb34930307b4f4e3ffe/zsh-navigation-tools.plugin.zsh#L35-L49)
|
||||
|
||||
## IRC Channel
|
||||
|
||||
Channel `#zplugin@freenode` is a support place for all author's projects. Connect to:
|
||||
[chat.freenode.net:6697](ircs://chat.freenode.net:6697/%23zplugin) (SSL) or [chat.freenode.net:6667](irc://chat.freenode.net:6667/%23zplugin)
|
||||
and join #zplugin.
|
||||
|
||||
Following is a quick access via Webchat [![IRC](https://kiwiirc.com/buttons/chat.freenode.net/zplugin.png)](https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin)
|
||||
- be aware of [this](https://github.com/zdharma-continuum/zsh-navigation-tools/blob/f49f910d239ae5bc6e1a5bb34930307b4f4e3ffe/zsh-navigation-tools.plugin.zsh#L35-L49)
|
||||
|
||||
# Fixing tmux, screen and linux vt
|
||||
|
||||
@ -429,3 +420,5 @@ It will not display underline properly, but will instead highlight by a color,
|
||||
which is quite nice. The same will not work for FreeBSD's vt, `ZNT` will detect
|
||||
if that vt is used and will revert to highlighting elements via `reverse` mode.
|
||||
|
||||
[gitter-image]: https://badges.gitter.im/zdharma-continuum/community.svg
|
||||
[gitter-link]: https://gitter.im/zdharma-continuum/community
|
||||
|
35
plugins/zsh-navigation-tools/doc/generate_single_file
Executable file
35
plugins/zsh-navigation-tools/doc/generate_single_file
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/zsh
|
||||
|
||||
local PLUGIN_FILE="doc/zshnavigationtools.plugin.zsh"
|
||||
|
||||
[ -d doc ] || cd ..
|
||||
|
||||
rm -vf "$PLUGIN_FILE"
|
||||
echo "# The preamble comments apply when using ZNT as autoload functions" >>"$PLUGIN_FILE"
|
||||
echo "# https://github.com/psprint/zsh-navigation-tools" >>"$PLUGIN_FILE"
|
||||
echo "# License is GPLv3 and MIT" >>"$PLUGIN_FILE"
|
||||
echo -n "# " >>"$PLUGIN_FILE"
|
||||
git show-ref master | head -1 >>"$PLUGIN_FILE"
|
||||
echo >>"$PLUGIN_FILE"
|
||||
|
||||
for i in n-*(on); do
|
||||
echo "$i() {" >>"$PLUGIN_FILE"
|
||||
cat "$i" >>"$PLUGIN_FILE"
|
||||
echo "}" >>"$PLUGIN_FILE"
|
||||
echo "alias n${i#n-}=$i" >>"$PLUGIN_FILE"
|
||||
echo >>"$PLUGIN_FILE"
|
||||
done
|
||||
|
||||
# Append znt-* files
|
||||
for i in znt-*(on); do
|
||||
echo "$i() {" >>"$PLUGIN_FILE"
|
||||
cat "$i" >>"$PLUGIN_FILE"
|
||||
echo "}" >>"$PLUGIN_FILE"
|
||||
echo >>"$PLUGIN_FILE"
|
||||
done
|
||||
|
||||
# Append ^R bind
|
||||
echo "zle -N znt-history-widget" >>"$PLUGIN_FILE"
|
||||
echo "bindkey '^R' znt-history-widget" >>"$PLUGIN_FILE"
|
||||
echo "setopt AUTO_PUSHD HIST_IGNORE_DUPS PUSHD_IGNORE_DUPS" >>"$PLUGIN_FILE"
|
||||
|
BIN
plugins/zsh-navigation-tools/doc/img/n-history2.png
Normal file
BIN
plugins/zsh-navigation-tools/doc/img/n-history2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 106 KiB |
70
plugins/zsh-navigation-tools/doc/install.sh
Executable file
70
plugins/zsh-navigation-tools/doc/install.sh
Executable file
@ -0,0 +1,70 @@
|
||||
#!/bin/sh
|
||||
|
||||
if ! type git 2>/dev/null 1>&2; then
|
||||
echo "Please install GIT first"
|
||||
echo "Exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#
|
||||
# Clone or pull
|
||||
#
|
||||
|
||||
if ! test -d "$HOME/.config"; then
|
||||
mkdir "$HOME/.config"
|
||||
fi
|
||||
|
||||
if ! test -d "$HOME/.config/znt"; then
|
||||
mkdir "$HOME/.config/znt"
|
||||
fi
|
||||
|
||||
echo ">>> Downloading zsh-navigation-tools to ~/.config/znt"
|
||||
if test -d ~/.config/znt/zsh-navigation-tools; then
|
||||
cd ~/.config/znt/zsh-navigation-tools
|
||||
git pull origin master
|
||||
else
|
||||
cd ~/.config/znt
|
||||
git clone https://github.com/psprint/zsh-navigation-tools.git zsh-navigation-tools
|
||||
fi
|
||||
echo ">>> Done"
|
||||
|
||||
#
|
||||
# Copy configs
|
||||
#
|
||||
|
||||
echo ">>> Copying config files"
|
||||
|
||||
cd ~/.config/znt
|
||||
|
||||
set n-aliases.conf n-env.conf n-history.conf n-list.conf n-panelize.conf n-cd.conf n-functions.conf n-kill.conf n-options.conf
|
||||
|
||||
for i; do
|
||||
if ! test -f "$i"; then
|
||||
cp -v zsh-navigation-tools/.config/znt/$i .
|
||||
fi
|
||||
done
|
||||
|
||||
echo ">>> Done"
|
||||
|
||||
#
|
||||
# Modify .zshrc
|
||||
#
|
||||
|
||||
echo ">>> Updating .zshrc"
|
||||
if ! grep zsh-navigation-tools ~/.zshrc >/dev/null 2>&1; then
|
||||
echo >> ~/.zshrc
|
||||
echo "### ZNT's installer added snippet ###" >> ~/.zshrc
|
||||
echo "fpath=( \"\$fpath[@]\" \"\$HOME/.config/znt/zsh-navigation-tools\" )" >> ~/.zshrc
|
||||
echo "autoload n-aliases n-cd n-env n-functions n-history n-kill n-list n-list-draw n-list-input n-options n-panelize n-help" >> ~/.zshrc
|
||||
echo "autoload znt-usetty-wrapper znt-history-widget znt-cd-widget znt-kill-widget" >> ~/.zshrc
|
||||
echo "alias naliases=n-aliases ncd=n-cd nenv=n-env nfunctions=n-functions nhistory=n-history" >> ~/.zshrc
|
||||
echo "alias nkill=n-kill noptions=n-options npanelize=n-panelize nhelp=n-help" >> ~/.zshrc
|
||||
echo "zle -N znt-history-widget" >> ~/.zshrc
|
||||
echo "bindkey '^R' znt-history-widget" >> ~/.zshrc
|
||||
echo "setopt AUTO_PUSHD HIST_IGNORE_DUPS PUSHD_IGNORE_DUPS" >> ~/.zshrc
|
||||
echo "zstyle ':completion::complete:n-kill::bits' matcher 'r:|=** l:|=*'" >> ~/.zshrc
|
||||
echo "### END ###" >> ~/.zshrc
|
||||
echo ">>> Done"
|
||||
else
|
||||
echo ">>> .zshrc already updated, not making changes"
|
||||
fi
|
224
plugins/zsh-navigation-tools/doc/n-preview
Normal file
224
plugins/zsh-navigation-tools/doc/n-preview
Normal file
@ -0,0 +1,224 @@
|
||||
# Copy this file into /usr/share/zsh/site-functions/
|
||||
# and add 'autoload n-preview` to .zshrc
|
||||
#
|
||||
# This is partially a test if n-list-draw and n-list-input can be
|
||||
# used multiple times to create multiple lists. It might become
|
||||
# more usable if someone adds more features like previewing of
|
||||
# archive contents.
|
||||
|
||||
emulate -L zsh
|
||||
|
||||
zmodload zsh/curses
|
||||
|
||||
setopt typesetsilent extendedglob
|
||||
trap "return" TERM INT QUIT
|
||||
trap "_vpreview_exit" EXIT
|
||||
|
||||
local IFS="
|
||||
"
|
||||
|
||||
[ -f ~/.config/znt/n-list.conf ] && . ~/.config/znt/n-list.conf
|
||||
|
||||
[[ "$colorpair" = "" ]] && colorpair="white/black"
|
||||
local background="${colorpair#*/}"
|
||||
|
||||
# Drawing and input
|
||||
autoload n-list-draw n-list-input
|
||||
|
||||
# Cleanup before any exit
|
||||
_vpreview_exit() {
|
||||
zcurses 2>/dev/null delwin files
|
||||
zcurses 2>/dev/null delwin body
|
||||
zcurses 2>/dev/null delwin status
|
||||
zcurses 2>/dev/null refresh
|
||||
zcurses end
|
||||
}
|
||||
|
||||
# Outputs a message in the bottom of the screen
|
||||
_vpreview_status_msg() {
|
||||
zcurses move status 1 2
|
||||
zcurses clear status eol
|
||||
zcurses string status "$1"
|
||||
}
|
||||
|
||||
# Prefer tput, then module terminfo
|
||||
_nlist_cursor_visibility() {
|
||||
if type tput 2>/dev/null 1>&2; then
|
||||
[ "$1" = "1" ] && tput cvvis
|
||||
[ "$1" = "0" ] && tput civis
|
||||
elif [ "$has_termcap" = "1" ]; then
|
||||
[ "$1" = "1" ] && [ -n $terminfo[cvvis] ] && echo -n $terminfo[cvvis]
|
||||
[ "$1" = "0" ] && [ -n $terminfo[civis] ] && echo -n $terminfo[civis]
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Main code
|
||||
#
|
||||
|
||||
integer term_height="$LINES"
|
||||
integer term_width="$COLUMNS"
|
||||
if [[ "$term_height" -lt 1 || "$term_width" -lt 1 ]]; then
|
||||
local stty_out=$( stty size )
|
||||
term_height="${stty_out% *}"
|
||||
term_width="${stty_out#* }"
|
||||
fi
|
||||
|
||||
integer status_height=3
|
||||
integer status_width=term_width
|
||||
integer status_page_height=1
|
||||
integer status_page_width=term_width-2
|
||||
|
||||
integer files_height=term_height-status_height
|
||||
integer files_width=term_width/5
|
||||
integer files_page_height=files_height-2
|
||||
integer files_page_width=files_width-2
|
||||
|
||||
integer body_height=term_height-status_height
|
||||
integer body_width=term_width-files_width
|
||||
integer body_page_height=body_height-2
|
||||
integer body_page_width=body_width
|
||||
|
||||
integer _from_what_idx_list_is_shown_1=1
|
||||
integer current_1=1
|
||||
|
||||
integer _from_what_idx_list_is_shown_2=1
|
||||
integer current_2=1
|
||||
integer hscroll_2=0
|
||||
|
||||
integer active_window=0
|
||||
|
||||
local ansi_mode="ansi"
|
||||
[ -f ~/.config/znt/n-preview.conf ] && . ~/.config/znt/n-preview.conf
|
||||
typeset -a hcmd
|
||||
#if type pygmentize 2>/dev/null 1>&2; then
|
||||
# hcmd=( pygmentize -g )
|
||||
if type highlight 2>/dev/null 1>&2; then
|
||||
hcmd=( highlight -q --force -O ansi )
|
||||
elif type source-highlight 2>/dev/null 1>&2; then
|
||||
# Warning: source-highlight can have problems
|
||||
hcmd=( source-highlight --failsafe -fesc -o STDOUT -i )
|
||||
else
|
||||
ansi_mode="noansi"
|
||||
fi
|
||||
|
||||
zcurses init
|
||||
zcurses addwin status "$status_height" "$status_width" $(( term_height - status_height )) 0
|
||||
zcurses addwin files "$files_height" "$files_width" 0 0
|
||||
zcurses addwin body "$body_height" "$body_width" 0 "$files_width"
|
||||
zcurses bg status white/black
|
||||
zcurses bg files white/black
|
||||
zcurses bg body white/black
|
||||
|
||||
#
|
||||
# Listening for input
|
||||
#
|
||||
|
||||
local key keypad
|
||||
|
||||
# Clear input buffer
|
||||
zcurses timeout status 0
|
||||
zcurses input status key keypad
|
||||
zcurses timeout status -1
|
||||
key=""
|
||||
keypad=""
|
||||
|
||||
typeset -a filenames
|
||||
integer last_element_1
|
||||
|
||||
typeset -a body
|
||||
integer last_element_2
|
||||
|
||||
filenames=( *(N) )
|
||||
filenames=( "${(@M)filenames:#(#i)*$1*}" )
|
||||
|
||||
local NLIST_GREP_STRING="$1"
|
||||
|
||||
integer last_element_1="$#filenames"
|
||||
integer last_element_2=0
|
||||
|
||||
local selection action final_key
|
||||
|
||||
while (( 1 )); do
|
||||
# Output the lists
|
||||
integer end_idx=$(( _from_what_idx_list_is_shown_1 + files_page_height - 1 ))
|
||||
[ "$end_idx" -gt "$last_element_1" ] && end_idx=last_element_1
|
||||
|
||||
n-list-draw "$(( (current_1 -1) % files_page_height + 1 ))" \
|
||||
"$files_page_height" "$files_page_width" 1 2 0 files \
|
||||
"${(@)filenames[_from_what_idx_list_is_shown_1, end_idx]}"
|
||||
|
||||
if [ "$#body" -ge 1 ]; then
|
||||
end_idx=$(( _from_what_idx_list_is_shown_2 + body_page_height - 1 ))
|
||||
[ "$end_idx" -gt "$last_element_2" ] && end_idx=last_element_2
|
||||
|
||||
n-list-draw "$(( (current_2 -1) % body_page_height + 1 ))" \
|
||||
"$body_page_height" "$body_page_width" 1 0 "$hscroll_2" body \
|
||||
"${(@)body[_from_what_idx_list_is_shown_2, end_idx]}"
|
||||
fi
|
||||
|
||||
[[ "$active_window" -eq 0 ]] && zcurses border files
|
||||
zcurses border status
|
||||
zcurses refresh files body status
|
||||
|
||||
# Wait for input
|
||||
zcurses input status key keypad
|
||||
|
||||
# Get the special (i.e. "keypad") key or regular key
|
||||
if [ -n "$key" ]; then
|
||||
final_key="$key"
|
||||
elif [ -n "$keypad" ]; then
|
||||
final_key="$keypad"
|
||||
else
|
||||
_vpreview_status_msg "Inproper input detected"
|
||||
zcurses refresh status
|
||||
fi
|
||||
|
||||
if [ "$active_window" -eq 0 ]; then
|
||||
zcurses clear files
|
||||
n-list-input "$current_1" "$_from_what_idx_list_is_shown_1" "$files_page_height" \
|
||||
"$files_page_width" "$last_element_1" 0 "$final_key"
|
||||
|
||||
selection="$reply[1]"
|
||||
action="$reply[2]"
|
||||
current_1="$reply[3]"
|
||||
_from_what_idx_list_is_shown_1="$reply[4]"
|
||||
|
||||
if [ "$action" = "SELECT" ]; then
|
||||
# Load new file and refresh the displaying window
|
||||
local filename="$filenames[$selection]"
|
||||
if [ "$ansi_mode" = "ansi" ]; then
|
||||
body=( "${(@f)"$( "$hcmd[@]" "$filename" )"}" )
|
||||
else
|
||||
body=( "${(@f)"$(<$filename)"}" )
|
||||
fi
|
||||
last_element_2="$#body"
|
||||
current_2=1
|
||||
_from_what_idx_list_is_shown_2=1
|
||||
zcurses clear body
|
||||
fi
|
||||
elif [ "$active_window" -eq 1 ]; then
|
||||
zcurses clear body
|
||||
n-list-input "$current_2" "$_from_what_idx_list_is_shown_2" "$body_page_height" \
|
||||
"$body_page_width" "$last_element_2" "$hscroll_2" "$final_key"
|
||||
|
||||
selection="$reply[1]"
|
||||
action="$reply[2]"
|
||||
current_2="$reply[3]"
|
||||
_from_what_idx_list_is_shown_2="$reply[4]"
|
||||
hscroll_2="$reply[5]"
|
||||
|
||||
fi
|
||||
|
||||
if [ "$action" = "LEAVE" ]; then
|
||||
active_window=1-active_window
|
||||
elif [ "$action" = "QUIT" ]; then
|
||||
break
|
||||
elif [ "$action" = "REDRAW" ]; then
|
||||
zcurses clear files redraw
|
||||
zcurses clear body redraw
|
||||
zcurses clear status redraw
|
||||
fi
|
||||
done
|
||||
|
||||
# vim: set filetype=zsh:
|
@ -12,7 +12,7 @@
|
||||
# To use, put this line to your ~/.tmux.conf. The tool is invoked with:
|
||||
# Ctrl+b h
|
||||
#
|
||||
# bind h run-shell -b "$ZNT_REPO_DIR/znt-tmux.zsh"
|
||||
# bind h run-shell -b "$ZNT_REPO_DIR/doc/znt-tmux.zsh"
|
||||
#
|
||||
|
||||
# get and save the current active tmux pane id
|
@ -8,7 +8,7 @@
|
||||
#
|
||||
|
||||
# According to the standard:
|
||||
# http://zdharma.org/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
|
||||
# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
|
||||
0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
|
||||
0="${${(M)0:#/*}:-$PWD/$0}"
|
||||
export ZNT_REPO_DIR="${0:h}"
|
||||
|
Loading…
Reference in New Issue
Block a user