mirror of https://github.com/sayanarijit/xplr
Update docs
parent
6b054cbc01
commit
5e20eea349
@ -0,0 +1,321 @@
|
||||
# Awesome Hacks
|
||||
|
||||
Here's a list of cool xplr hacks, i.e. snippets of code that you can just copy
|
||||
and paste into your [configuration file][1], that are too small or niche for a
|
||||
full fledge [plugins][2].
|
||||
|
||||
Do you have something cool to share?
|
||||
|
||||
[Edit this file][3] or [share them here][4] or [let us know][5].
|
||||
|
||||
### Spawn multiple sessions in different tabs (iTerm2)
|
||||
|
||||
Creating a new session that starts with iTerm2.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
- Author: [@lmburns][9]
|
||||
- Requires: iTerm2
|
||||
- Tested on: MacOS
|
||||
|
||||
```lua
|
||||
xplr.config.modes.builtin.default.key_bindings.on_key["ctrl-n"] = {
|
||||
help = "new session",
|
||||
messages = {
|
||||
{ BashExecSilently = [[
|
||||
osascript <<EOF
|
||||
tell application "iTerm2"
|
||||
tell current window
|
||||
create tab with default profile
|
||||
tell current session to write text "xplr"
|
||||
end tell
|
||||
end tell
|
||||
]]
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Bookmark
|
||||
|
||||
Bookmark files using `m` and fuzzy search bookmarks using backtick.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
[![xplr-bookmark.gif][7]][6]
|
||||
|
||||
- Author: [@sayanarijit][8]
|
||||
- Requires: fzf
|
||||
- Tested on: Linux
|
||||
|
||||
```lua
|
||||
xplr.config.modes.builtin.default.key_bindings.on_key.m = {
|
||||
help = "bookmark",
|
||||
messages = {
|
||||
{
|
||||
BashExecSilently = [===[
|
||||
PTH="${XPLR_FOCUS_PATH:?}"
|
||||
if echo "${PTH:?}" >> "${XPLR_SESSION_PATH:?}/bookmarks"; then
|
||||
echo "LogSuccess: ${PTH:?} added to bookmarks" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
else
|
||||
echo "LogError: Failed to bookmark ${PTH:?}" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]===],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
xplr.config.modes.builtin.default.key_bindings.on_key["`"] = {
|
||||
help = "go to bookmark",
|
||||
messages = {
|
||||
{
|
||||
BashExec = [===[
|
||||
PTH=$(cat "${XPLR_SESSION_PATH:?}/bookmarks" | fzf --no-sort)
|
||||
if [ "$PTH" ]; then
|
||||
echo FocusPath: "'"${PTH:?}"'" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]===],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Persistent, multi-session bookmark
|
||||
|
||||
A bookmark mode that allows for a bookmark file to be used throughout multiples
|
||||
sessions. It is set to the environment variable `$XPLR_BOOKMARK_FILE`. A
|
||||
bookmark can be added, deleted, or jumped to.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
- Author: [@lmburns][9]
|
||||
- Requires: fzf, sd
|
||||
- Tested on: MacOS
|
||||
|
||||
```lua
|
||||
-- Bookmark: mode binding
|
||||
xplr.config.modes.custom.bookmark = {
|
||||
name = "bookmark",
|
||||
key_bindings = {
|
||||
on_key = {
|
||||
m = {
|
||||
help = "bookmark dir",
|
||||
messages = {
|
||||
{ BashExecSilently = [[
|
||||
PTH="${XPLR_FOCUS_PATH:?}"
|
||||
if [ -d "${PTH}" ]; then
|
||||
PTH="${PTH}"
|
||||
elif [ -f "${PTH}" ]; then
|
||||
PTH="$(dirname "${PTH}")"
|
||||
fi
|
||||
if echo "${PTH:?}" >> "${XPLR_BOOKMARK_FILE:?}"; then
|
||||
echo "LogSuccess: ${PTH:?} added to bookmarks" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
else
|
||||
echo "LogError: Failed to bookmark ${PTH:?}" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]]
|
||||
},
|
||||
},
|
||||
},
|
||||
g = {
|
||||
help = "go to bookmark",
|
||||
messages = {
|
||||
{
|
||||
BashExec = [===[
|
||||
PTH=$(cat "${XPLR_BOOKMARK_FILE:?}" | fzf --no-sort)
|
||||
if [ "$PTH" ]; then
|
||||
echo FocusPath: "'"${PTH:?}"'" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]===]
|
||||
},
|
||||
},
|
||||
},
|
||||
d = {
|
||||
help = "delete bookmark",
|
||||
messages = {
|
||||
{ BashExec = [[
|
||||
PTH=$(cat "${XPLR_BOOKMARK_FILE:?}" | fzf --no-sort)
|
||||
sd "$PTH\n" "" "${XPLR_BOOKMARK_FILE:?}"
|
||||
]]
|
||||
},
|
||||
},
|
||||
},
|
||||
esc = {
|
||||
help = "cancel",
|
||||
messages = {
|
||||
"PopMode",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Another bookmark manager type thing, taken from [wfxr's zsh plugin][13].
|
||||
|
||||
Another bookmark manager type thing, taken from [wfxr's zsh plugin][13] which has colored output with fzf.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
- Author: [@lmburns][9]
|
||||
- Requires: fzf, exa
|
||||
- Tested on: MacOS
|
||||
|
||||
```lua
|
||||
xplr.config.modes.builtin.go_to.key_bindings.on_key.b = {
|
||||
help = "bookmark jump",
|
||||
messages = {
|
||||
"PopMode",
|
||||
{ BashExec = [===[
|
||||
field='\(\S\+\s*\)'
|
||||
esc=$(printf '\033')
|
||||
N="${esc}[0m"
|
||||
R="${esc}[31m"
|
||||
G="${esc}[32m"
|
||||
Y="${esc}[33m"
|
||||
B="${esc}[34m"
|
||||
pattern="s#^${field}${field}${field}${field}#$Y\1$R\2$N\3$B\4$N#"
|
||||
PTH=$(sed 's#: # -> #' "$PATHMARKS_FILE"| nl| column -t \
|
||||
| gsed "${pattern}" \
|
||||
| fzf --ansi \
|
||||
--height '40%' \
|
||||
--preview="echo {}|sed 's#.*-> ##'| xargs exa --color=always" \
|
||||
--preview-window="right:50%" \
|
||||
| sed 's#.*-> ##')
|
||||
if [ "$PTH" ]; then
|
||||
echo ChangeDirectory: "'"${PTH:?}"'" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]===]
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Fuzzy search history
|
||||
|
||||
Fuzzy search the last visited directories.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
- Author: [@sayanarijit][8]
|
||||
- Requires: fzf
|
||||
- Tested on: Linux
|
||||
|
||||
```lua
|
||||
xplr.config.modes.builtin.go_to.key_bindings.on_key.h = {
|
||||
help = "history",
|
||||
messages = {
|
||||
"PopMode",
|
||||
{
|
||||
BashExec = [===[
|
||||
PTH=$(cat "${XPLR_PIPE_HISTORY_OUT:?}" | sort -u | fzf --no-sort)
|
||||
if [ "$PTH" ]; then
|
||||
echo ChangeDirectory: "'"${PTH:?}"'" >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]===],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Batch rename
|
||||
|
||||
Batch rename the selected or visible files and directories in $PWD.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
[![xplr-rename.gif][11]][10]
|
||||
|
||||
- Author: [@sayanarijit][8]
|
||||
- Requires: [pipe-rename][12]
|
||||
- Tested on: Linux
|
||||
|
||||
```lua
|
||||
xplr.config.modes.builtin.default.key_bindings.on_key.R = {
|
||||
help = "batch rename",
|
||||
messages = {
|
||||
{
|
||||
BashExec = [===[
|
||||
SELECTION=$(cat "${XPLR_PIPE_SELECTION_OUT:?}")
|
||||
NODES=${SELECTION:-$(cat "${XPLR_PIPE_DIRECTORY_NODES_OUT:?}")}
|
||||
if [ "$NODES" ]; then
|
||||
echo -e "$NODES" | renamer
|
||||
echo ExplorePwdAsync >> "${XPLR_PIPE_MSG_IN:?}"
|
||||
fi
|
||||
]===],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Serve $PWD
|
||||
|
||||
Serve $PWD using a static web server via LAN.
|
||||
|
||||
<details>
|
||||
<summary>Expand for details</summary>
|
||||
|
||||
- Author: [@sayanarijit][8]
|
||||
- Requires: [sfz][14], fzf
|
||||
- Tested on: Linux
|
||||
|
||||
```lua
|
||||
xplr.config.modes.builtin.default.key_bindings.on_key.S = {
|
||||
help = "serve $PWD",
|
||||
messages = {
|
||||
{
|
||||
BashExec = [===[
|
||||
IP=$(ip addr | grep -w inet | cut -d/ -f1 | grep -Eo '[0-9]{1,3}\.[0-9]{ 1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | fzf --prompt 'Select IP > ')
|
||||
echo "IP: ${IP:?}"
|
||||
read -p "Port (default 5000): " PORT
|
||||
echo
|
||||
sfz --all --cors --no-ignore --bind ${IP:?} --port ${PORT:-5000} . &
|
||||
sleep 1 && read -p '[press enter to exit]'
|
||||
kill -9 %1
|
||||
]===],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Also See:
|
||||
|
||||
- [Awesome Plugins][15]
|
||||
- [Awesome Integrations][16]
|
||||
|
||||
[1]: configuration.md
|
||||
[2]: plugin.md
|
||||
[3]: https://github.com/sayanarijit/xplr/edit/main/docs/en/src/awesome-hacks.md
|
||||
[4]: https://github.com/sayanarijit/xplr/discussions/categories/show-and-tell
|
||||
[5]: community.md
|
||||
[6]: https://gifyu.com/image/rGSR
|
||||
[7]: https://s4.gifyu.com/images/xplr-bookmark.gif
|
||||
[8]: https://github.com/sayanarijit
|
||||
[9]: https://github.com/lmburns
|
||||
[10]: https://gifyu.com/image/rGbo
|
||||
[11]: https://s4.gifyu.com/images/xplr-rename.gif
|
||||
[12]: https://github.com/marcusbuffett/pipe-rename
|
||||
[13]: https://github.com/wfxr/formarks
|
||||
[14]: https://github.com/weihanglo/sfz
|
||||
[15]: awesome-plugins.md
|
||||
[16]: awesome-integrations.md
|
Loading…
Reference in New Issue