diff options
Diffstat (limited to 'Cancer')
| l--------- | Cancer/bridge/README.md | 1 | ||||
| -rwxr-xr-x | Cancer/bridge/bin/bridge | 12 | ||||
| -rw-r--r-- | Cancer/bridge/etc/bash_completion.d/bridge | 18 | ||||
| -rwxr-xr-x | Cancer/bridge/lib/bridge/bin/attach | 10 | ||||
| -rwxr-xr-x | Cancer/bridge/lib/bridge/bin/create | 15 | ||||
| -rwxr-xr-x | Cancer/bridge/lib/bridge/bin/destroy | 12 | ||||
| -rwxr-xr-x | Cancer/bridge/lib/bridge/bin/list | 10 | ||||
| -rwxr-xr-x | Cancer/bridge/lib/bridge/bin/paste | 30 | ||||
| -rw-r--r-- | Cancer/bridge/share/doc/bridge/README.md | 59 | ||||
| -rw-r--r-- | Cancer/bridge/share/vim/vimfiles/plugin/bridge.vim | 113 | 
10 files changed, 280 insertions, 0 deletions
| diff --git a/Cancer/bridge/README.md b/Cancer/bridge/README.md new file mode 120000 index 00000000..7c994fe2 --- /dev/null +++ b/Cancer/bridge/README.md @@ -0,0 +1 @@ +share/doc/bridge/README.md
\ No newline at end of file diff --git a/Cancer/bridge/bin/bridge b/Cancer/bridge/bin/bridge new file mode 100755 index 00000000..33cf4577 --- /dev/null +++ b/Cancer/bridge/bin/bridge @@ -0,0 +1,12 @@ +#! /bin/sh +# +# Interface to the bridge commands. +# +# See commands below $bindir +# +set -euf + +bindir="$(dirname $(readlink -f "$0"))/../lib/bridge/bin" +cmd="$bindir/$1"; shift + +exec "$cmd" "$@" diff --git a/Cancer/bridge/etc/bash_completion.d/bridge b/Cancer/bridge/etc/bash_completion.d/bridge new file mode 100644 index 00000000..86d8a4e2 --- /dev/null +++ b/Cancer/bridge/etc/bash_completion.d/bridge @@ -0,0 +1,18 @@ +#! /bin/bash +function comp_bridge() { +  local cword="${COMP_WORDS[$COMP_CWORD]}" +  local bindir="$(dirname $(readlink -f "$BASH_SOURCE"))/../../lib/bridge/bin" +  case $COMP_CWORD in +    (1) +      COMPREPLY=( $(cd "$bindir" && ls | grep "^$cword.*") ) +    ;; +    (2) +      case "${COMP_WORDS[1]}" in +        (attach|destroy|paste)  +          COMPREPLY=( $(bridge list 2>/dev/null | grep "^$cword.*") ) +        ;; +      esac +    ;;        +  esac +} +complete -F comp_bridge bridge diff --git a/Cancer/bridge/lib/bridge/bin/attach b/Cancer/bridge/lib/bridge/bin/attach new file mode 100755 index 00000000..f456f8a6 --- /dev/null +++ b/Cancer/bridge/lib/bridge/bin/attach @@ -0,0 +1,10 @@ +#! /bin/sh +# +# Attach current tty to a session. +# +## SYNOPSIS +# +#     bridge attach SESSION +# +set -euf +exec tmux -L bridge attach-session -t "$1" diff --git a/Cancer/bridge/lib/bridge/bin/create b/Cancer/bridge/lib/bridge/bin/create new file mode 100755 index 00000000..2df8b214 --- /dev/null +++ b/Cancer/bridge/lib/bridge/bin/create @@ -0,0 +1,15 @@ +#! /bin/sh +# +# Create a new session. +# +## SYNOPSIS +# +#     bridge create SESSION [COMMAND [ARGS ...]] +# +# COMMAND defaults to $SHELL (by implication / tmux) +# +set -euf +target="$1"; shift +tmux -L bridge new-session -d -s "$target" "$@" +tmux -L bridge set-buffer READY. +exec "$(dirname $0)/attach" "$target" diff --git a/Cancer/bridge/lib/bridge/bin/destroy b/Cancer/bridge/lib/bridge/bin/destroy new file mode 100755 index 00000000..dffdbd8a --- /dev/null +++ b/Cancer/bridge/lib/bridge/bin/destroy @@ -0,0 +1,12 @@ +#! /bin/sh +# +# Destroy a session. +# +## SYNOPSIS +# +#     bridge destroy SESSION +# +# Note that this may destroy similar named sessions (by implication / tmux) +# +set -euf +tmux -L bridge kill-session -t "$1" diff --git a/Cancer/bridge/lib/bridge/bin/list b/Cancer/bridge/lib/bridge/bin/list new file mode 100755 index 00000000..0b767a9b --- /dev/null +++ b/Cancer/bridge/lib/bridge/bin/list @@ -0,0 +1,10 @@ +#! /bin/sh +# +# Write a list of all session names to stdout. +# +## SYNOPSIS +# +#     bridge list +# +set -euf +exec tmux -L bridge list-sessions | cut -d: -f1 diff --git a/Cancer/bridge/lib/bridge/bin/paste b/Cancer/bridge/lib/bridge/bin/paste new file mode 100755 index 00000000..d3ed1fc5 --- /dev/null +++ b/Cancer/bridge/lib/bridge/bin/paste @@ -0,0 +1,30 @@ +#! /bin/sh +# +# Paste some data to a session. +# +## SYNOPSIS +# +#     bridge paste SESSION DATA... +#     bridge paste SESSION < DATA +# +set -euf + +target="$1"; shift + +# paste args or stdin +if test $# -gt 0; then +  tmux -L bridge set-buffer -b 0 "$*" +else +  # use aux file instead of direct stdin for Vim and when used from $SHELL +  if test -n "${VIMRUNTIME-}" || tty >/dev/null; then +    path=`mktemp` +    trap "rm -f $path" EXIT INT TERM +    cat>$path +  else +    path=- +  fi +  tmux -L bridge load-buffer -b 0 $path +fi + +tmux -L bridge paste-buffer -b 0 -t "$target" +tmux -L bridge   set-buffer -b 0 READY. diff --git a/Cancer/bridge/share/doc/bridge/README.md b/Cancer/bridge/share/doc/bridge/README.md new file mode 100644 index 00000000..77c62374 --- /dev/null +++ b/Cancer/bridge/share/doc/bridge/README.md @@ -0,0 +1,59 @@ +Bridge is a tool to connect your favourite editor and interpreter (or +similar) for maximum profit. + + +## usage by example + +    # start your favourite interpreter, e.g. bc, in a new session +    bridge create my_fancy_interpreter bc + +    # attach a terminal to the session +    bridge attach my_fancy_interpreter + +    # fire up your favourite editor (in another terminal) +    vim +    # press <F12> to connect to the session +    # press return +    # write interpreter stuff, e.g. 42^23 +    # mark that stuff +    # press return + +    # paste some stuff into the session +    bridge paste my_fancy_interpreter '1 + 2 + 4^M' +    # (note that ^M is carriage return obtained by pressing ^V^M AKA C-V C-M) + +    # or use bridge as a sink in your pipeline +    echo 2^20 | bridge paste my_fancy_interpreter + +    # you can use tab-completion everywhere (if installed) + + +## install bridge (bourne) shell integration + +Hint #1: reboot your system or similar for this to take full effect +Hint #2: you could also use ~/.profile or similar + +    echo 'PATH="${PATH+$PATH:}//bridge/bin"' >> /etc/profile + + +## install bridge Vim integration + +Hint: your vim-setup probably differs + +    ln -s //bridge/share/vim/plugin/bridge.vim ~/.vim/plugin/ + + +## install bridge bash completion + +Hint #1: reboot your system or similar for this to take full effect +Hint #2: this could differ on your system, of course +Hint #3: you could also use ~/.profile or similar + +    ln -s //bridge/etc/bash_completion.d/bridge /etc/bash_completion.d/ + + +## install bridge into some usr-like hierarchy [advanced] + +    tar -C //bridge -c . | +        tar --exclude=./README.md -C ~/opt -v --keep-newer-files -x + diff --git a/Cancer/bridge/share/vim/vimfiles/plugin/bridge.vim b/Cancer/bridge/share/vim/vimfiles/plugin/bridge.vim new file mode 100644 index 00000000..91f072d1 --- /dev/null +++ b/Cancer/bridge/share/vim/vimfiles/plugin/bridge.vim @@ -0,0 +1,113 @@ +" /vim/bridge.vim + +if ! exists('s:bridge_name') +  let s:bridge_name = "" +endif + +fun! Bridge_complete(A,L,P) +    let a = strpart(a:A,0,a:P) +    return split(system("bridge list \"".a.".*\""), "\n") +endfun + +fun! Bridge_status() +  if s:bridge_name == "" +    return "Disconnected" +  else +    return "Connected to " . s:bridge_name +  else +  endif +endfun + +setlocal statusline=%<%f\ \(%{Bridge_status()}\)\ %h%m%r%=%-14.(%l,%c%V%)\ %P\ of\ %L\ \(%.45{getcwd()}\) + +fun! Bridge_display() +  if s:bridge_name == "" +    echo "Not connected!" +    return +  endif +  let cmd = "bridge attach ".s:bridge_name +  silent exe "!" . cmd +  redraw! +endfun + +fun! Bridge_connect() +  if s:bridge_name == "" +    let m = "boot new" +  else +    let m = s:bridge_name +  endif +  let name = input("Connect to [".m."]: ", "", "customlist,Bridge_complete") +  if name == "" +    if s:bridge_name != '' +      " stay connected +      echo +      return +    endif +    let system = input("Command: ", "") +    if system == "" +        echo "Aborted!" +	return +    endif +    let name = input("Session name: ", "") +    if name == "" +        echo "Aborted!" +	return +    endif +    TODO_boot_new +  endif +  if system("bridge list ".name) == "" +    echo "No such session: ".name +    return +  endif +  let s:bridge_name = name +  let s:laststatus = &laststatus +  let &laststatus = 2 +  echo "Connected to " . s:bridge_name +endfun + +fun! Bridge_disconnect(m) +  if s:bridge_name == "" +    echo "Not connected!" +  else +    let &laststatus = s:laststatus +    let m = "Disconnected from ".s:bridge_name +    if a:m != "" +      let m .= ": ".a:m +    endif +    echo m."!" +    let s:bridge_name = "" +  endif +endfun + +function! Bridge_paste( data ) +  if a:data == '' +    echo "Nothing to send!" +  else +    let l:data = a:data +    if exists("g:bridge_prologue") | let l:data = g:bridge_prologue . l:data | endif +    if exists("g:bridge_epilogue") | let l:data = l:data . g:bridge_epilogue | endif +    call system("bridge paste " . s:bridge_name, l:data . "\<cr>") +  endif +endfunction + +nmap <C-F12> :call Bridge_display()<cr> +nmap [24^ <C-F12> +nmap <F12> :call Bridge_connect()<cr> +nmap <S-F12> :call Bridge_disconnect("")<cr> +nmap [24$ <S-F12> + +nmap <leader>el :call Bridge_paste(getline("."))<cr> +nmap <leader>ec m'ya(:call Bridge_paste(getreg('"'))<cr>`' +nmap <leader>et m'(y%:call Bridge_paste(getreg('"'))<cr>`' + +nmap <leader>ee :call Bridge_paste(input("paste: ", ""))<cr> + +" sugar +nmap <Return> <leader>ec + +"" visual shell +vmap <return> m'y:call Bridge_paste(getreg('"'))<cr>v`' +vmap <leader>ee :call Bridge_paste(input("paste: ", ""))<cr> +vmap <leader>et <return> + + | 
