Move drawit to submodule and update
This commit is contained in:
parent
69f5a25a6a
commit
7cd46f4241
6 changed files with 4 additions and 2604 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -49,3 +49,6 @@
|
||||||
[submodule ".vim/bundle/vim-gitgutter"]
|
[submodule ".vim/bundle/vim-gitgutter"]
|
||||||
path = .vim/bundle/vim-gitgutter
|
path = .vim/bundle/vim-gitgutter
|
||||||
url = git://github.com/airblade/vim-gitgutter.git
|
url = git://github.com/airblade/vim-gitgutter.git
|
||||||
|
[submodule ".vim/bundle/DrawIt"]
|
||||||
|
path = .vim/bundle/DrawIt
|
||||||
|
url = https://github.com/vim-scripts/DrawIt.git
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
1
.vim/bundle/DrawIt
Submodule
1
.vim/bundle/DrawIt
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 22ed0633219d2068eb44fb8c9b621b69ad78ee07
|
||||||
|
|
@ -1,397 +0,0 @@
|
||||||
*drawit.txt* The DrawIt Tool Sep 14, 2007
|
|
||||||
|
|
||||||
Authors: Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM> {{{1
|
|
||||||
Sylvain Viart <molo@multimania.com>
|
|
||||||
(remove NOSPAM from Campbell's email first)
|
|
||||||
Copyright: Copyright (C) 2004-2007 Charles E. Campbell, Jr. {{{1
|
|
||||||
Permission is hereby granted to use and distribute this code,
|
|
||||||
with or without modifications, provided that this copyright
|
|
||||||
notice is copied with it. Like anything else that's free,
|
|
||||||
DrawIt.vim is provided *as is* and comes with no warranty
|
|
||||||
of any kind, either expressed or implied. By using this
|
|
||||||
plugin, you agree that in no event will the copyright
|
|
||||||
holder be liable for any damages resulting from the use
|
|
||||||
of this software.
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
1. Contents *drawit-contents* {{{1
|
|
||||||
|
|
||||||
1. Contents......................: |drawit-contents|
|
|
||||||
2. DrawIt Manual.................: |drawit|
|
|
||||||
3. DrawIt Usage..................: |drawit-usage|
|
|
||||||
Starting....................: |drawit-start|
|
|
||||||
Stopping....................: |drawit-stop|
|
|
||||||
User Map Protection.........: |drawit-protect|
|
|
||||||
Drawing.....................: |drawit-drawing|
|
|
||||||
Changing Drawing Characters.: |drawit-setdrawit|
|
|
||||||
Moving......................: |drawit-moving|
|
|
||||||
Erasing.....................: |drawit-erase|
|
|
||||||
Example.....................: |drawit-example|
|
|
||||||
Visual Block Mode...........: |drawit-visblock|
|
|
||||||
Brushes.....................: |drawit-brush|
|
|
||||||
DrawIt Modes................: |drawit-modes|
|
|
||||||
4. DrawIt History................: |drawit-history|
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
2. DrawIt Manual *drawit* {{{1
|
|
||||||
*drawit-manual*
|
|
||||||
/===============+============================================================\
|
|
||||||
|| Starting & | ||
|
|
||||||
|| Stopping | Explanation ||
|
|
||||||
++--------------+-----------------------------------------------------------++
|
|
||||||
|| \di | start DrawIt |drawit-start| ||
|
|
||||||
|| \ds | stop DrawIt |drawit-stop| ||
|
|
||||||
|| :DIstart | start DrawIt |drawit-start| ||
|
|
||||||
|| :DIstop | stop DrawIt |drawit-stop| ||
|
|
||||||
|| | ||
|
|
||||||
++==============+===========================================================++
|
|
||||||
|| Maps | Explanation ||
|
|
||||||
++--------------+-----------------------------------------------------------++
|
|
||||||
|| | The DrawIt routines use a replace, move, and ||
|
|
||||||
|| | replace/insert strategy. The package also lets one insert||
|
|
||||||
|| | spaces, draw arrows by using the following characters or ||
|
|
||||||
|| | keypad characters: ||
|
|
||||||
|| +-----------------------------------------------------------++
|
|
||||||
|| <left> | move and draw left |drawit-drawing| ||
|
|
||||||
|| <right> | move and draw right, inserting lines/space as needed ||
|
|
||||||
|| <up> | move and draw up, inserting lines/space as needed ||
|
|
||||||
|| <down> | move and draw down, inserting lines/space as needed ||
|
|
||||||
|| <s-left> | move cursor left |drawit-move| ||
|
|
||||||
|| <s-right> | move cursor right, inserting lines/space as needed ||
|
|
||||||
|| <s-up> | move cursor up, inserting lines/space as needed ||
|
|
||||||
|| <s-down> | move cursor down, inserting lines/space as needed ||
|
|
||||||
|| <space> | toggle into and out of erase mode ||
|
|
||||||
|| > | insert a > and move right (draw -> arrow) ||
|
|
||||||
|| < | insert a < and move left (draw <- arrow) ||
|
|
||||||
|| ^ | insert a ^ and move up (draw ^ arrow) ||
|
|
||||||
|| v | insert a v and move down (draw v arrow) ||
|
|
||||||
|| <pgdn> | replace with a \, move down and right, and insert a \ ||
|
|
||||||
|| <end> | replace with a /, move down and left, and insert a / ||
|
|
||||||
|| <pgup> | replace with a /, move up and right, and insert a / ||
|
|
||||||
|| <home> | replace with a \, move up and left, and insert a \ ||
|
|
||||||
|| \> | insert a fat > and move right (draw -> arrow) ||
|
|
||||||
|| \< | insert a fat < and move left (draw <- arrow) ||
|
|
||||||
|| \^ | insert a fat ^ and move up (draw ^ arrow) ||
|
|
||||||
|| \v | insert a fat v and move down (draw v arrow) ||
|
|
||||||
||<s-leftmouse> | drag and draw with current brush |drawit-brush| ||
|
|
||||||
||<c-leftmouse> | drag and move current brush |drawit-brush| ||
|
|
||||||
|| | ||
|
|
||||||
||==============+===========================================================++
|
|
||||||
||Visual Cmds | Explanation ||
|
|
||||||
||--------------+-----------------------------------------------------------++
|
|
||||||
|| | The drawing mode routines use visual-block mode to ||
|
|
||||||
|| | select endpoints for lines, arrows, and ellipses. Bresen- ||
|
|
||||||
|| | ham and Bresenham-like algorithms are used for this. ||
|
|
||||||
|| | ||
|
|
||||||
|| | These routines need a block of spaces, and so the canvas ||
|
|
||||||
|| | routine must first be used to create such a block. The ||
|
|
||||||
|| | canvas routine will query the user for the number of ||
|
|
||||||
|| | lines to hold |'textwidth'| spaces. ||
|
|
||||||
|| +-----------------------------------------------------------++
|
|
||||||
|| \a | draw arrow from corners of visual-block selected region ||
|
|
||||||
|| \b | draw box on visual-block selected region ||
|
|
||||||
|| \c | the canvas routine (will query user, see above) ||
|
|
||||||
|| \e | draw an ellipse on visual-block selected region ||
|
|
||||||
|| \f | flood figure with a character (you will be prompted) ||
|
|
||||||
|| \l | draw line from corners of visual-block selected region ||
|
|
||||||
|| \s | spacer: appends spaces up to the textwidth (default: 78) ||
|
|
||||||
|| | ||
|
|
||||||
++==============+===========================================================++
|
|
||||||
|| Function and Explanation ||
|
|
||||||
++--------------+-----------------------------------------------------------++
|
|
||||||
|| :call SetDrawIt('vertical','horizontal','crossing','\','/','X','*') ||
|
|
||||||
|| set drawing characters for motions for moving ||
|
|
||||||
|| and for the ellipse drawing boundary ||
|
|
||||||
|| default motion ||
|
|
||||||
|| | up/down, ||
|
|
||||||
|| - left/right, ||
|
|
||||||
|| + -| crossing, ||
|
|
||||||
|| \ downright, ||
|
|
||||||
|| / downleft, and ||
|
|
||||||
|| X \/ crossing ||
|
|
||||||
++=======================+==================================================++
|
|
||||||
|| Commands | Explanation ||
|
|
||||||
++-----------------------+--------------------------------------------------++
|
|
||||||
|| :SetBrush a-z | sets brush (register) to given register ||
|
|
||||||
|| :'<,'>SetBrush a-z | yanks visual block to brush (register) ||
|
|
||||||
\============================================================================/
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
3. DrawIt Usage *drawit-usage* {{{1
|
|
||||||
|
|
||||||
STARTING *drawit-start* {{{2
|
|
||||||
\di
|
|
||||||
|
|
||||||
Typically one puts <drawit.vim> into the .vim/plugin directory
|
|
||||||
(vimfiles\plugin for Windows) where it becomes always available. It uses a
|
|
||||||
minimal interface (\di: you can think of it as *D*raw*I*t or *D*rawIt
|
|
||||||
*I*nitialize) to start it and (\ds: *D*rawIt *S*top) to stop it. Instead of
|
|
||||||
using "\" you may specify your own preference for a map leader (see
|
|
||||||
|mapleader|).
|
|
||||||
|
|
||||||
A message, "[DrawIt]", will appear on the message line.
|
|
||||||
|
|
||||||
|
|
||||||
STOPPING *drawit-stop* {{{2
|
|
||||||
\ds
|
|
||||||
|
|
||||||
When you are done with DrawIt, use \ds to stop DrawIt mode. Stopping DrawIt
|
|
||||||
will restore your usual options and remove the maps DrawIt set up.
|
|
||||||
|
|
||||||
A message, "[DrawIt off]", will appear on the message line.
|
|
||||||
|
|
||||||
|
|
||||||
USER MAP PROTECTION *drawit-protect* {{{2
|
|
||||||
|
|
||||||
Starting DrawIt causes it to set up a number of maps which facilitate drawing.
|
|
||||||
DrawIt accomodates users with conflicting maps by saving both maps and user
|
|
||||||
options and before setting them to what DrawIt needs. When you stop DrawIt
|
|
||||||
(|drawit-stop|), DrawIt will restore the user's maps and options as they were
|
|
||||||
before DrawIt was started.
|
|
||||||
|
|
||||||
|
|
||||||
OPTIONS *drawit-options* {{{2
|
|
||||||
|
|
||||||
*g:drawit_insertmode*
|
|
||||||
g:drawit_insertmode : if this variable exists and is 1 then maps are
|
|
||||||
made which make cursor-control drawing available
|
|
||||||
while in insert mode, too. Otherwise, DrawIt's
|
|
||||||
maps only affect normal mode.
|
|
||||||
|
|
||||||
DRAWING *drawit-drawing* {{{2
|
|
||||||
|
|
||||||
After DrawIt is started, use the number pad or arrow keys to move the cursor
|
|
||||||
about. As the cursor moves, DrawIt will then leave appropriate "line"
|
|
||||||
characters behind as you move horizontally, vertically, or diagonally, and
|
|
||||||
will transparently enlarge your file to accommodate your drawing as needed.
|
|
||||||
The trail will consist of -, |, \, / characters (depending on which direction
|
|
||||||
and SetDrawIt() changes), and + and X characters where line crossings occur.
|
|
||||||
You may use h-j-k-l to move about your display and generally use editing
|
|
||||||
commands as you wish even while in DrawIt mode.
|
|
||||||
|
|
||||||
|
|
||||||
CHANGING DRAWING CHARACTERS *drawit-setdrawit* {{{2
|
|
||||||
|
|
||||||
The SetDrawIt() function is available for those who wish to change the
|
|
||||||
characters that DrawIt uses. >
|
|
||||||
|
|
||||||
ex. :call SetDrawIt('*','*','*','*','*','*','*')
|
|
||||||
ex. :call SetDrawIt('-','|','-','\','/','/','*')
|
|
||||||
<
|
|
||||||
The first example shows how to change all the DrawIt drawing characters to
|
|
||||||
asterisks, and the second shows how to give crossing priority to - and /.
|
|
||||||
The default setting is equivalent to: >
|
|
||||||
|
|
||||||
:call SetDrawIt('|','-','+','\','/','X','*')
|
|
||||||
<
|
|
||||||
where SetDrawit()'s arguments refer, in order, to the >
|
|
||||||
|
|
||||||
vertical drawing character
|
|
||||||
horizontal drawing character
|
|
||||||
horizontal/vertical crossing drawing character
|
|
||||||
down right drawing character
|
|
||||||
down left drawing character
|
|
||||||
diagonal crossing drawing character
|
|
||||||
ellipse boundary drawing character
|
|
||||||
<
|
|
||||||
|
|
||||||
MOVING *drawit-move* *drawit-moving* {{{2
|
|
||||||
|
|
||||||
DrawIt supports shifting the arrow keys to cause motion of the cursor. The
|
|
||||||
motion of the cursor will not modify what's below the cursor. The cursor
|
|
||||||
will move and lines and/or spaces will be inserted to support the move as
|
|
||||||
required. Your terminal may not support shifted arrow keys, however, or Vim
|
|
||||||
may not catch them as such. For example, on the machine I use, shift-up
|
|
||||||
(<s-up>) produced <Esc>[161q, but vim didn't know that sequence was a <s-up>.
|
|
||||||
I merely made a nmap:
|
|
||||||
|
|
||||||
nmap <Esc>[161q <s-up>
|
|
||||||
|
|
||||||
and vim thereafter recognized the <s-up> command.
|
|
||||||
|
|
||||||
|
|
||||||
ERASING *drawit-erase* {{{2
|
|
||||||
<space>
|
|
||||||
|
|
||||||
The <space> key will toggle DrawIt's erase mode/DrawIt mode. When in [DrawIt
|
|
||||||
erase] mode, a message "[DrawIt erase]" will appear and the number pad will
|
|
||||||
now cause spaces to be drawn instead of the usual drawing characters. The
|
|
||||||
drawing behavior will be restored when the <space> key toggles DrawIt back
|
|
||||||
to regular DrawIt mode.
|
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES *drawit-example* {{{2
|
|
||||||
|
|
||||||
Needless to say, the square spirals which follow were done with DrawIt and
|
|
||||||
a bit of block editing with Vim: >
|
|
||||||
|
|
||||||
+------------ -----------+ +------------ -----------+ +------------
|
|
||||||
|+----------+ +---------+| |+----------+ +---------+| |+----------+
|
|
||||||
||+--------+| |+-------+|| ||+--------+| |+-------+|| ||+--------+|
|
|
||||||
|||-------+|| ||+------||| |||-------+|| ||+------||| |||-------+||
|
|
||||||
||+-------+|| ||+------+|| ||+-------+|| ||+------+|| ||+-------+||
|
|
||||||
|+---------+| |+--------+| |+---------+| |+--------+| |+---------+|
|
|
||||||
+-----------+ +----------+ +-----------+ +----------+ +-----------+
|
|
||||||
|
|
||||||
VISUAL BLOCK MODE FOR ARROWS LINES BOXES AND ELLIPSES *drawit-visblock* {{{2
|
|
||||||
|
|
||||||
\a : draw arrow from corners of visual-block selected region *drawit-a*
|
|
||||||
\b : draw box on visual-block selected region *drawit-b*
|
|
||||||
\c : the canvas routine (will query user, see above) *drawit-c*
|
|
||||||
\e : draw an ellipse on visual-block selected region *drawit-e*
|
|
||||||
\f : flood figure with a character (you will be prompted) *drawit-f*
|
|
||||||
\l : draw line from corners of visual-block selected region *drawit-l*
|
|
||||||
\s : spacer: appends spaces up to the textwidth (default: 78) *drawit-s*
|
|
||||||
|
|
||||||
The DrawIt package has been merged with Sylvain Viart's drawing package (by
|
|
||||||
permission) which provides DrawIt with visual-block selection of
|
|
||||||
starting/ending point drawing of arrows (\a), lines (\l), and boxes (\b).
|
|
||||||
Additionally I wrote an ellipse drawing function using visual block
|
|
||||||
specification (|drawit-e|).
|
|
||||||
|
|
||||||
One may create a block of spaces for these maps to operate in; the "canvas"
|
|
||||||
routine (\c) will help create such blocks. First, the s:Canvas() routine will
|
|
||||||
query the user for the number of lines s/he wishes to have, and will then fill
|
|
||||||
those lines with spaces out to the |'textwidth'| if user has specified it;
|
|
||||||
otherwise, the display width will be used.
|
|
||||||
|
|
||||||
The Sylvain Viart functions and the ellipse drawing function depend
|
|
||||||
upon using visual block mode. As a typical use: >
|
|
||||||
|
|
||||||
Example: * \h
|
|
||||||
DrawIt asks: how many lines under the cursor? 10
|
|
||||||
DrawIt then appends 10 lines filled with blanks
|
|
||||||
out to textwidth (if defined) or 78 columns.
|
|
||||||
* ctrl-v (move) \b
|
|
||||||
DrawIt then draws a box
|
|
||||||
* ctrl-v (move) \e
|
|
||||||
DrawIt then draws an ellipse
|
|
||||||
<
|
|
||||||
Select the first endpoint with ctrl-v and then move to the other endpoint.
|
|
||||||
One may then select \a for arrows, \b for boxes, \e for ellipses, or \l for
|
|
||||||
lines. The internal s:AutoCanvas() will convert tabs to spaces and will
|
|
||||||
extend with spaces as needed to support the visual block. Note that when
|
|
||||||
DrawIt is enabled, virtualedit is also enabled (to "all").
|
|
||||||
>
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
__ _ *************** +-------+
|
|
||||||
\_ _/ **** **** | |
|
|
||||||
\_ _/ ** ---------> ** | |
|
|
||||||
\_ _/ **** **** | |
|
|
||||||
\__/ <------- *************** +-------+
|
|
||||||
|
|
||||||
\l \a \e and \a \b
|
|
||||||
<
|
|
||||||
*drawit-setbrush*
|
|
||||||
BRUSHES *drawit-brush* {{{2
|
|
||||||
>
|
|
||||||
:SetBrush a-z
|
|
||||||
<
|
|
||||||
Set the current brush to the given letter (actually, its
|
|
||||||
a named register). Default brush: a >
|
|
||||||
ex. :SetBrush b
|
|
||||||
|
|
||||||
:'<,'>SetBrush a-z
|
|
||||||
<
|
|
||||||
Set the current brush to the given letter, and yank the visual
|
|
||||||
block to that named register). Default brush: a
|
|
||||||
>
|
|
||||||
<leftmouse>
|
|
||||||
<
|
|
||||||
Select a visual-block region. One may use "ay, for example,
|
|
||||||
to yank selected text to register a.
|
|
||||||
>
|
|
||||||
<shift-leftmouse>
|
|
||||||
<
|
|
||||||
One may drag and draw with the current brush (default brush: a)
|
|
||||||
by holding down the shift key and the leftmouse button and moving
|
|
||||||
the mouse. Blanks in the brush are considered to be transparent.
|
|
||||||
>
|
|
||||||
<ctrl-leftmouse>
|
|
||||||
<
|
|
||||||
One may drag and move a selection with <ctrl-leftmouse>. First,
|
|
||||||
select the region using the <leftmouse>. Release the mouse button,
|
|
||||||
then press ctrl and the <leftmouse> button; while continuing to press
|
|
||||||
the button, move the mouse. The selected block of text will then
|
|
||||||
move along with the cursor.
|
|
||||||
>
|
|
||||||
\ra ... \rz
|
|
||||||
<
|
|
||||||
Replace text with the given register's contents (ie. the brush).
|
|
||||||
>
|
|
||||||
\pa ... \pz
|
|
||||||
<
|
|
||||||
Like \ra ... \rz, except that blanks are considered to be transparent.
|
|
||||||
|
|
||||||
Example: Draw the following >
|
|
||||||
\ \
|
|
||||||
o o
|
|
||||||
*
|
|
||||||
---
|
|
||||||
< Then use ctrl-v, move, "ay to grab a copy into register a.
|
|
||||||
By default, the current brush uses register a (change brush
|
|
||||||
with :SetBrush [reg]). Hold the <shift> and <leftbutton>
|
|
||||||
keys down and move the mouse; as you move, a copy of the
|
|
||||||
brush will be left behind.
|
|
||||||
|
|
||||||
|
|
||||||
DRAWIT MODES *drawit-modes* {{{2
|
|
||||||
|
|
||||||
-[DrawIt] regular DrawIt mode (|drawit-start|)
|
|
||||||
-[DrawIt off] DrawIt is off (|drawit-stop| )
|
|
||||||
-[DrawIt erase] DrawIt will erase using the number pad (|drawit-erase|)
|
|
||||||
|
|
||||||
g:DrChipTopLvlMenu: by default its "DrChip"; you may set this to whatever
|
|
||||||
you like in your <.vimrc>. This variable controls where
|
|
||||||
DrawIt's menu items are placed.
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
4. History *drawit-history* {{{1
|
|
||||||
|
|
||||||
9 Sep 14, 2007 * Johann-Guenter Simon fixed a bug with s:DrawErase();
|
|
||||||
it called SetDrawIt() and that call hadn't been
|
|
||||||
updated to account for the new b:di_ellipse
|
|
||||||
parameter.
|
|
||||||
8 Feb 12, 2007 * fixed a bug which prevented multi-character user
|
|
||||||
maps from being restored properly
|
|
||||||
May 03, 2007 * Extended SetDrawIt() to handle b:di_ellipse, the
|
|
||||||
ellipse boundary drawing character
|
|
||||||
* Changed "Holer" to "Canvas", and wrote AutoCanvas(),
|
|
||||||
which allow one to use the visual-block drawing
|
|
||||||
maps without creating a canvas first.
|
|
||||||
* DrawIt now uses the ctrl-leftmouse to move a visual
|
|
||||||
block selected region.
|
|
||||||
* Floods can now be done inside an ellipse
|
|
||||||
* DrawIt's maps are now all users of <buffer>
|
|
||||||
7 Feb 16, 2005 * now checks that "m" is in &go before attempting to
|
|
||||||
use menus
|
|
||||||
Aug 17, 2005 * report option workaround
|
|
||||||
Nov 01, 2005 * converted DrawIt to use autoload feature of vim 7.0
|
|
||||||
Dec 28, 2005 * now uses cecutil to save/restore user maps
|
|
||||||
Jan 18, 2006 * cecutil now updated to use keepjumps
|
|
||||||
Jan 23, 2006 * :DIstart and :DIstop commands provided; thus users
|
|
||||||
using "set noremap" can still use DrawIt.
|
|
||||||
Jan 26, 2006 * DrawIt menu entry now keeps its place
|
|
||||||
Apr 10, 2006 * Brushes were implemented
|
|
||||||
6 Feb 24, 2003 * The latest DrawIt now provides a fill function.
|
|
||||||
\f will ask for a character to fill the figure
|
|
||||||
surrounding the current cursor location. Plus
|
|
||||||
I suggest reading :he drawit-tip for those whose
|
|
||||||
home/pageup/pagedown/end keys aren't all working
|
|
||||||
properly with DrawIt.
|
|
||||||
08/18/03 : \p[a-z] and \r[a-z] implemented
|
|
||||||
08/04/03 : b:..keep variables renamed to b:di_..keep variables
|
|
||||||
StopDrawIt() now insures that erase mode is off
|
|
||||||
03/11/03 : included g:drawit_insertmode handling
|
|
||||||
02/21/03 : included flood function
|
|
||||||
12/11/02 : deletes trailing whitespace only if holer used
|
|
||||||
8/27/02 : fat arrowheads included
|
|
||||||
: shift-arrow keys move but don't modify
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
vim:tw=78:ts=8:ft=help:fdm=marker
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
" DrawItPlugin.vim: a simple way to draw things in Vim -- just put this file in
|
|
||||||
" your plugin directory, use \di to start (\ds to stop), and
|
|
||||||
" just move about using the cursor keys.
|
|
||||||
"
|
|
||||||
" You may also use visual-block mode to select endpoints and
|
|
||||||
" draw lines, arrows, and ellipses.
|
|
||||||
"
|
|
||||||
" Date: Jul 18, 2006
|
|
||||||
" Maintainer: Charles E. Campbell, Jr. (Charles.E.Campbell.1@gsfc.nasa.gov)
|
|
||||||
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
|
|
||||||
" Permission is hereby granted to use and distribute this code,
|
|
||||||
" with or without modifications, provided that this copyright
|
|
||||||
" notice is copied with it. Like anything else that's free,
|
|
||||||
" DrawIt.vim is provided *as is* and comes with no warranty
|
|
||||||
" of any kind, either expressed or implied. By using this
|
|
||||||
" plugin, you agree that in no event will the copyright
|
|
||||||
" holder be liable for any damages resulting from the use
|
|
||||||
" of this software.
|
|
||||||
"
|
|
||||||
" Required: this script requires Vim 7.0 (or later) {{{1
|
|
||||||
" To Enable: simply put this plugin into your ~/.vim/plugin directory {{{2
|
|
||||||
"
|
|
||||||
" GetLatestVimScripts: 40 1 :AutoInstall: DrawIt.vim
|
|
||||||
"
|
|
||||||
" (Zeph 3:1,2 WEB) Woe to her who is rebellious and polluted, the {{{1
|
|
||||||
" oppressing city! She didn't obey the voice. She didn't receive
|
|
||||||
" correction. She didn't trust in Yahweh. She didn't draw near to her God.
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Load Once: {{{1
|
|
||||||
if &cp || exists("g:loaded_DrawItPlugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_DrawItPlugin = 1
|
|
||||||
let s:keepcpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" DrChip Menu Support: {{{1
|
|
||||||
if has("gui_running") && has("menu") && &go =~ 'm'
|
|
||||||
if !exists("g:DrChipTopLvlMenu")
|
|
||||||
let g:DrChipTopLvlMenu= "DrChip."
|
|
||||||
endif
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'DrawIt.Start\ DrawIt<tab>\\di <Leader>di'
|
|
||||||
endif
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Public Interface: {{{1
|
|
||||||
if !hasmapto('<Plug>StartDrawIt')
|
|
||||||
map <unique> <Leader>di <Plug>StartDrawIt
|
|
||||||
endif
|
|
||||||
map <silent> <Plug>StartDrawIt :set lz<cr>:call DrawIt#StartDrawIt()<cr>:set nolz<cr>
|
|
||||||
com! -nargs=0 DIstart set lz|call DrawIt#StartDrawIt()|set nolz
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>StopDrawIt')
|
|
||||||
map <unique> <Leader>ds <Plug>StopDrawIt
|
|
||||||
endif
|
|
||||||
map <silent> <Plug>StopDrawIt :set lz<cr>:call DrawIt#StopDrawIt()<cr>:set nolz<cr>
|
|
||||||
com! -nargs=0 DIstop set lz|call DrawIt#StopDrawIt()|set nolz
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Cleanup And Modelines:
|
|
||||||
" vim: fdm=marker
|
|
||||||
let &cpo= s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
|
|
@ -1,482 +0,0 @@
|
||||||
" cecutil.vim : save/restore window position
|
|
||||||
" save/restore mark position
|
|
||||||
" save/restore selected user maps
|
|
||||||
" Author: Charles E. Campbell, Jr.
|
|
||||||
" Version: 17
|
|
||||||
" Date: Sep 04, 2007
|
|
||||||
"
|
|
||||||
" Saving Restoring Destroying Marks: {{{1
|
|
||||||
" call SaveMark(markname) let savemark= SaveMark(markname)
|
|
||||||
" call RestoreMark(markname) call RestoreMark(savemark)
|
|
||||||
" call DestroyMark(markname)
|
|
||||||
" commands: SM RM DM
|
|
||||||
"
|
|
||||||
" Saving Restoring Destroying Window Position: {{{1
|
|
||||||
" call SaveWinPosn() let winposn= SaveWinPosn()
|
|
||||||
" call RestoreWinPosn() call RestoreWinPosn(winposn)
|
|
||||||
" \swp : save current window/buffer's position
|
|
||||||
" \rwp : restore current window/buffer's previous position
|
|
||||||
" commands: SWP RWP
|
|
||||||
"
|
|
||||||
" Saving And Restoring User Maps: {{{1
|
|
||||||
" call SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
||||||
" call RestoreUserMaps(suffix)
|
|
||||||
"
|
|
||||||
" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim
|
|
||||||
"
|
|
||||||
" You believe that God is one. You do well. The demons also {{{1
|
|
||||||
" believe, and shudder. But do you want to know, vain man, that
|
|
||||||
" faith apart from works is dead? (James 2:19,20 WEB)
|
|
||||||
|
|
||||||
" Load Once: {{{1
|
|
||||||
if &cp || exists("g:loaded_cecutil")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_cecutil = "v17"
|
|
||||||
let s:keepcpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
"DechoVarOn
|
|
||||||
|
|
||||||
" -----------------------
|
|
||||||
" Public Interface: {{{1
|
|
||||||
" -----------------------
|
|
||||||
|
|
||||||
" Map Interface: {{{2
|
|
||||||
if !hasmapto('<Plug>SaveWinPosn')
|
|
||||||
map <unique> <Leader>swp <Plug>SaveWinPosn
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>RestoreWinPosn')
|
|
||||||
map <unique> <Leader>rwp <Plug>RestoreWinPosn
|
|
||||||
endif
|
|
||||||
nmap <silent> <Plug>SaveWinPosn :call SaveWinPosn()<CR>
|
|
||||||
nmap <silent> <Plug>RestoreWinPosn :call RestoreWinPosn()<CR>
|
|
||||||
|
|
||||||
" Command Interface: {{{2
|
|
||||||
com! -bar -nargs=0 SWP call SaveWinPosn()
|
|
||||||
com! -bar -nargs=0 RWP call RestoreWinPosn()
|
|
||||||
com! -bar -nargs=1 SM call SaveMark(<q-args>)
|
|
||||||
com! -bar -nargs=1 RM call RestoreMark(<q-args>)
|
|
||||||
com! -bar -nargs=1 DM call DestroyMark(<q-args>)
|
|
||||||
|
|
||||||
if v:version < 630
|
|
||||||
let s:modifier= "sil "
|
|
||||||
else
|
|
||||||
let s:modifier= "sil keepj "
|
|
||||||
endif
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" SaveWinPosn: {{{1
|
|
||||||
" let winposn= SaveWinPosn() will save window position in winposn variable
|
|
||||||
" call SaveWinPosn() will save window position in b:cecutil_winposn{b:cecutil_iwinposn}
|
|
||||||
" let winposn= SaveWinPosn(0) will *only* save window position in winposn variable (no stacking done)
|
|
||||||
fun! SaveWinPosn(...)
|
|
||||||
" call Dfunc("SaveWinPosn() a:0=".a:0)
|
|
||||||
if line(".") == 1 && getline(1) == ""
|
|
||||||
" call Dfunc("SaveWinPosn : empty buffer")
|
|
||||||
return ""
|
|
||||||
endif
|
|
||||||
let so_keep = &so
|
|
||||||
let siso_keep = &siso
|
|
||||||
let ss_keep = &ss
|
|
||||||
set so=0 siso=0 ss=0
|
|
||||||
|
|
||||||
let swline = line(".")
|
|
||||||
let swcol = col(".")
|
|
||||||
let swwline = winline() - 1
|
|
||||||
let swwcol = virtcol(".") - wincol()
|
|
||||||
let savedposn = "call GoWinbufnr(".winbufnr(0).")|silent ".swline
|
|
||||||
let savedposn = savedposn."|".s:modifier."norm! 0z\<cr>"
|
|
||||||
if swwline > 0
|
|
||||||
let savedposn= savedposn.":".s:modifier."norm! ".swwline."\<c-y>\<cr>"
|
|
||||||
endif
|
|
||||||
if swwcol > 0
|
|
||||||
let savedposn= savedposn.":".s:modifier."norm! 0".swwcol."zl\<cr>"
|
|
||||||
endif
|
|
||||||
let savedposn = savedposn.":".s:modifier."call cursor(".swline.",".swcol.")\<cr>"
|
|
||||||
|
|
||||||
" save window position in
|
|
||||||
" b:cecutil_winposn_{iwinposn} (stack)
|
|
||||||
" only when SaveWinPosn() is used
|
|
||||||
if a:0 == 0
|
|
||||||
if !exists("b:cecutil_iwinposn")
|
|
||||||
let b:cecutil_iwinposn= 1
|
|
||||||
else
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn + 1
|
|
||||||
endif
|
|
||||||
" call Decho("saving posn to SWP stack")
|
|
||||||
let b:cecutil_winposn{b:cecutil_iwinposn}= savedposn
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &so = so_keep
|
|
||||||
let &siso = siso_keep
|
|
||||||
let &ss = ss_keep
|
|
||||||
|
|
||||||
" if exists("b:cecutil_iwinposn") " Decho
|
|
||||||
" call Decho("b:cecutil_winpos{".b:cecutil_iwinposn."}[".b:cecutil_winposn{b:cecutil_iwinposn}."]")
|
|
||||||
" else " Decho
|
|
||||||
" call Decho("b:cecutil_iwinposn doesn't exist")
|
|
||||||
" endif " Decho
|
|
||||||
" call Dret("SaveWinPosn [".savedposn."]")
|
|
||||||
return savedposn
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" RestoreWinPosn: {{{1
|
|
||||||
fun! RestoreWinPosn(...)
|
|
||||||
" call Dfunc("RestoreWinPosn() a:0=".a:0)
|
|
||||||
" call Decho("getline(1)<".getline(1).">")
|
|
||||||
" call Decho("line(.)=".line("."))
|
|
||||||
if line(".") == 1 && getline(1) == ""
|
|
||||||
" call Dfunc("RestoreWinPosn : empty buffer")
|
|
||||||
return ""
|
|
||||||
endif
|
|
||||||
let so_keep = &so
|
|
||||||
let siso_keep = &siso
|
|
||||||
let ss_keep = &ss
|
|
||||||
set so=0 siso=0 ss=0
|
|
||||||
|
|
||||||
if a:0 == 0 || a:1 == ""
|
|
||||||
" use saved window position in b:cecutil_winposn{b:cecutil_iwinposn} if it exists
|
|
||||||
if exists("b:cecutil_iwinposn") && exists("b:cecutil_winposn{b:cecutil_iwinposn}")
|
|
||||||
" call Decho("using stack b:cecutil_winposn{".b:cecutil_iwinposn."}<".b:cecutil_winposn{b:cecutil_iwinposn}.">")
|
|
||||||
try
|
|
||||||
exe "silent! ".b:cecutil_winposn{b:cecutil_iwinposn}
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E749/
|
|
||||||
" ignore empty buffer error messages
|
|
||||||
endtry
|
|
||||||
" normally drop top-of-stack by one
|
|
||||||
" but while new top-of-stack doesn't exist
|
|
||||||
" drop top-of-stack index by one again
|
|
||||||
if b:cecutil_iwinposn >= 1
|
|
||||||
unlet b:cecutil_winposn{b:cecutil_iwinposn}
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
|
|
||||||
while b:cecutil_iwinposn >= 1 && !exists("b:cecutil_winposn{b:cecutil_iwinposn}")
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
|
|
||||||
endwhile
|
|
||||||
if b:cecutil_iwinposn < 1
|
|
||||||
unlet b:cecutil_iwinposn
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
echohl WarningMsg
|
|
||||||
echomsg "***warning*** need to SaveWinPosn first!"
|
|
||||||
echohl None
|
|
||||||
endif
|
|
||||||
|
|
||||||
else " handle input argument
|
|
||||||
" call Decho("using input a:1<".a:1.">")
|
|
||||||
" use window position passed to this function
|
|
||||||
exe "silent ".a:1
|
|
||||||
" remove a:1 pattern from b:cecutil_winposn{b:cecutil_iwinposn} stack
|
|
||||||
if exists("b:cecutil_iwinposn")
|
|
||||||
let jwinposn= b:cecutil_iwinposn
|
|
||||||
while jwinposn >= 1 " search for a:1 in iwinposn..1
|
|
||||||
if exists("b:cecutil_winposn{jwinposn}") " if it exists
|
|
||||||
if a:1 == b:cecutil_winposn{jwinposn} " and the pattern matches
|
|
||||||
unlet b:cecutil_winposn{jwinposn} " unlet it
|
|
||||||
if jwinposn == b:cecutil_iwinposn " if at top-of-stack
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn - 1 " drop stacktop by one
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let jwinposn= jwinposn - 1
|
|
||||||
endwhile
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" seems to be something odd: vertical motions after RWP
|
|
||||||
" cause jump to first column. Following fixes that
|
|
||||||
if wincol() > 1
|
|
||||||
silent norm! hl
|
|
||||||
elseif virtcol(".") < virtcol("$")
|
|
||||||
silent norm! lh
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &so = so_keep
|
|
||||||
let &siso = siso_keep
|
|
||||||
let &ss = ss_keep
|
|
||||||
|
|
||||||
" call Dret("RestoreWinPosn")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" GoWinbufnr: go to window holding given buffer (by number) {{{1
|
|
||||||
" Prefers current window; if its buffer number doesn't match,
|
|
||||||
" then will try from topleft to bottom right
|
|
||||||
fun! GoWinbufnr(bufnum)
|
|
||||||
" call Dfunc("GoWinbufnr(".a:bufnum.")")
|
|
||||||
if winbufnr(0) == a:bufnum
|
|
||||||
" call Dret("GoWinbufnr : winbufnr(0)==a:bufnum")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
winc t
|
|
||||||
let first=1
|
|
||||||
while winbufnr(0) != a:bufnum && (first || winnr() != 1)
|
|
||||||
winc w
|
|
||||||
let first= 0
|
|
||||||
endwhile
|
|
||||||
" call Dret("GoWinbufnr")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" SaveMark: sets up a string saving a mark position. {{{1
|
|
||||||
" For example, SaveMark("a")
|
|
||||||
" Also sets up a global variable, g:savemark_{markname}
|
|
||||||
fun! SaveMark(markname)
|
|
||||||
" call Dfunc("SaveMark(markname<".a:markname.">)")
|
|
||||||
let markname= a:markname
|
|
||||||
if strpart(markname,0,1) !~ '\a'
|
|
||||||
let markname= strpart(markname,1,1)
|
|
||||||
endif
|
|
||||||
" call Decho("markname=".markname)
|
|
||||||
|
|
||||||
let lzkeep = &lz
|
|
||||||
set lz
|
|
||||||
|
|
||||||
if 1 <= line("'".markname) && line("'".markname) <= line("$")
|
|
||||||
let winposn = SaveWinPosn(0)
|
|
||||||
exe s:modifier."norm! `".markname
|
|
||||||
let savemark = SaveWinPosn(0)
|
|
||||||
let g:savemark_{markname} = savemark
|
|
||||||
let savemark = markname.savemark
|
|
||||||
call RestoreWinPosn(winposn)
|
|
||||||
else
|
|
||||||
let g:savemark_{markname} = ""
|
|
||||||
let savemark = ""
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &lz= lzkeep
|
|
||||||
|
|
||||||
" call Dret("SaveMark : savemark<".savemark.">")
|
|
||||||
return savemark
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" RestoreMark: {{{1
|
|
||||||
" call RestoreMark("a") -or- call RestoreMark(savemark)
|
|
||||||
fun! RestoreMark(markname)
|
|
||||||
" call Dfunc("RestoreMark(markname<".a:markname.">)")
|
|
||||||
|
|
||||||
if strlen(a:markname) <= 0
|
|
||||||
" call Dret("RestoreMark : no such mark")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
let markname= strpart(a:markname,0,1)
|
|
||||||
if markname !~ '\a'
|
|
||||||
" handles 'a -> a styles
|
|
||||||
let markname= strpart(a:markname,1,1)
|
|
||||||
endif
|
|
||||||
" call Decho("markname=".markname." strlen(a:markname)=".strlen(a:markname))
|
|
||||||
|
|
||||||
let lzkeep = &lz
|
|
||||||
set lz
|
|
||||||
let winposn = SaveWinPosn(0)
|
|
||||||
|
|
||||||
if strlen(a:markname) <= 2
|
|
||||||
if exists("g:savemark_{markname}") && strlen(g:savemark_{markname}) != 0
|
|
||||||
" use global variable g:savemark_{markname}
|
|
||||||
" call Decho("use savemark list")
|
|
||||||
call RestoreWinPosn(g:savemark_{markname})
|
|
||||||
exe "norm! m".markname
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" markname is a savemark command (string)
|
|
||||||
" call Decho("use savemark command")
|
|
||||||
let markcmd= strpart(a:markname,1)
|
|
||||||
call RestoreWinPosn(markcmd)
|
|
||||||
exe "norm! m".markname
|
|
||||||
endif
|
|
||||||
|
|
||||||
call RestoreWinPosn(winposn)
|
|
||||||
let &lz = lzkeep
|
|
||||||
|
|
||||||
" call Dret("RestoreMark")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" DestroyMark: {{{1
|
|
||||||
" call DestroyMark("a") -- destroys mark
|
|
||||||
fun! DestroyMark(markname)
|
|
||||||
" call Dfunc("DestroyMark(markname<".a:markname.">)")
|
|
||||||
|
|
||||||
" save options and set to standard values
|
|
||||||
let reportkeep= &report
|
|
||||||
let lzkeep = &lz
|
|
||||||
set lz report=10000
|
|
||||||
|
|
||||||
let markname= strpart(a:markname,0,1)
|
|
||||||
if markname !~ '\a'
|
|
||||||
" handles 'a -> a styles
|
|
||||||
let markname= strpart(a:markname,1,1)
|
|
||||||
endif
|
|
||||||
" call Decho("markname=".markname)
|
|
||||||
|
|
||||||
let curmod = &mod
|
|
||||||
let winposn = SaveWinPosn(0)
|
|
||||||
1
|
|
||||||
let lineone = getline(".")
|
|
||||||
exe "k".markname
|
|
||||||
d
|
|
||||||
put! =lineone
|
|
||||||
let &mod = curmod
|
|
||||||
call RestoreWinPosn(winposn)
|
|
||||||
|
|
||||||
" restore options to user settings
|
|
||||||
let &report = reportkeep
|
|
||||||
let &lz = lzkeep
|
|
||||||
|
|
||||||
" call Dret("DestroyMark")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" QArgSplitter: to avoid \ processing by <f-args>, <q-args> is needed. {{{1
|
|
||||||
" However, <q-args> doesn't split at all, so this one returns a list
|
|
||||||
" with splits at all whitespace (only!), plus a leading length-of-list.
|
|
||||||
" The resulting list: qarglist[0] corresponds to a:0
|
|
||||||
" qarglist[i] corresponds to a:{i}
|
|
||||||
fun! QArgSplitter(qarg)
|
|
||||||
" call Dfunc("QArgSplitter(qarg<".a:qarg.">)")
|
|
||||||
let qarglist = split(a:qarg)
|
|
||||||
let qarglistlen = len(qarglist)
|
|
||||||
let qarglist = insert(qarglist,qarglistlen)
|
|
||||||
" call Dret("QArgSplitter ".string(qarglist))
|
|
||||||
return qarglist
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" ListWinPosn:
|
|
||||||
"fun! ListWinPosn() " Decho
|
|
||||||
" if !exists("b:cecutil_iwinposn") || b:cecutil_iwinposn == 0 " Decho
|
|
||||||
" call Decho("nothing on SWP stack") " Decho
|
|
||||||
" else " Decho
|
|
||||||
" let jwinposn= b:cecutil_iwinposn " Decho
|
|
||||||
" while jwinposn >= 1 " Decho
|
|
||||||
" if exists("b:cecutil_winposn{jwinposn}") " Decho
|
|
||||||
" call Decho("winposn{".jwinposn."}<".b:cecutil_winposn{jwinposn}.">") " Decho
|
|
||||||
" else " Decho
|
|
||||||
" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho
|
|
||||||
" endif " Decho
|
|
||||||
" let jwinposn= jwinposn - 1 " Decho
|
|
||||||
" endwhile " Decho
|
|
||||||
" endif " Decho
|
|
||||||
"endfun " Decho
|
|
||||||
"com! -nargs=0 LWP call ListWinPosn() " Decho
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" SaveUserMaps: this function sets up a script-variable (s:restoremap) {{{1
|
|
||||||
" which can be used to restore user maps later with
|
|
||||||
" call RestoreUserMaps()
|
|
||||||
"
|
|
||||||
" mapmode - see :help maparg for its list
|
|
||||||
" ex. "n" = Normal
|
|
||||||
" If the first letter is u, then unmapping will be done
|
|
||||||
" ex. "un" = Normal + unmapping
|
|
||||||
" maplead - see mapchx
|
|
||||||
" mapchx - "<something>" handled as a single map item.
|
|
||||||
" ex. "<left>"
|
|
||||||
" - "string" a string of single letters which are actually
|
|
||||||
" multiple two-letter maps (using the maplead:
|
|
||||||
" maplead . each_character_in_string)
|
|
||||||
" ex. maplead="\" and mapchx="abc" saves user mappings for
|
|
||||||
" \a, \b, and \c
|
|
||||||
" Of course, if maplead is "", then for mapchx="abc",
|
|
||||||
" mappings for a, b, and c are saved.
|
|
||||||
" - :something handled as a single map item, w/o the ":"
|
|
||||||
" ex. mapchx= ":abc" will save a mapping for "abc"
|
|
||||||
" suffix - a string unique to your plugin
|
|
||||||
" ex. suffix= "DrawIt"
|
|
||||||
fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
||||||
" call Dfunc("SaveUserMaps(mapmode<".a:mapmode."> maplead<".a:maplead."> mapchx<".a:mapchx."> suffix<".a:suffix.">)")
|
|
||||||
|
|
||||||
if !exists("s:restoremap_{a:suffix}")
|
|
||||||
" initialize restoremap_suffix to null string
|
|
||||||
let s:restoremap_{a:suffix}= ""
|
|
||||||
endif
|
|
||||||
|
|
||||||
" set up dounmap: if 1, then save and unmap (a:mapmode leads with a "u")
|
|
||||||
" if 0, save only
|
|
||||||
if a:mapmode =~ '^u'
|
|
||||||
let dounmap= 1
|
|
||||||
let mapmode= strpart(a:mapmode,1)
|
|
||||||
else
|
|
||||||
let dounmap= 0
|
|
||||||
let mapmode= a:mapmode
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save single map :...something...
|
|
||||||
if strpart(a:mapchx,0,1) == ':'
|
|
||||||
let amap= strpart(a:mapchx,1)
|
|
||||||
if amap == "|" || amap == "\<c-v>"
|
|
||||||
let amap= "\<c-v>".amap
|
|
||||||
endif
|
|
||||||
let amap = a:maplead.amap
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:silent! ".mapmode."unmap ".amap
|
|
||||||
if maparg(amap,mapmode) != ""
|
|
||||||
let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:".mapmode."map ".amap." ".maprhs
|
|
||||||
endif
|
|
||||||
if dounmap
|
|
||||||
exe "silent! ".mapmode."unmap ".amap
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save single map <something>
|
|
||||||
elseif strpart(a:mapchx,0,1) == '<'
|
|
||||||
let amap = a:mapchx
|
|
||||||
if amap == "|" || amap == "\<c-v>"
|
|
||||||
let amap= "\<c-v>".amap
|
|
||||||
endif
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|silent! ".mapmode."unmap ".amap
|
|
||||||
if maparg(a:mapchx,mapmode) != ""
|
|
||||||
let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".amap." ".maprhs
|
|
||||||
endif
|
|
||||||
if dounmap
|
|
||||||
exe "silent! ".mapmode."unmap ".amap
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save multiple maps
|
|
||||||
else
|
|
||||||
let i= 1
|
|
||||||
while i <= strlen(a:mapchx)
|
|
||||||
let amap= a:maplead.strpart(a:mapchx,i-1,1)
|
|
||||||
if amap == "|" || amap == "\<c-v>"
|
|
||||||
let amap= "\<c-v>".amap
|
|
||||||
endif
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|silent! ".mapmode."unmap ".amap
|
|
||||||
if maparg(amap,mapmode) != ""
|
|
||||||
let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".amap." ".maprhs
|
|
||||||
endif
|
|
||||||
if dounmap
|
|
||||||
exe "silent! ".mapmode."unmap ".amap
|
|
||||||
endif
|
|
||||||
let i= i + 1
|
|
||||||
endwhile
|
|
||||||
endif
|
|
||||||
" call Dret("SaveUserMaps : restoremap_".a:suffix.": ".s:restoremap_{a:suffix})
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" RestoreUserMaps: {{{1
|
|
||||||
" Used to restore user maps saved by SaveUserMaps()
|
|
||||||
fun! RestoreUserMaps(suffix)
|
|
||||||
" call Dfunc("RestoreUserMaps(suffix<".a:suffix.">)")
|
|
||||||
if exists("s:restoremap_{a:suffix}")
|
|
||||||
let s:restoremap_{a:suffix}= substitute(s:restoremap_{a:suffix},'|\s*$','','e')
|
|
||||||
if s:restoremap_{a:suffix} != ""
|
|
||||||
" call Decho("exe ".s:restoremap_{a:suffix})
|
|
||||||
exe "silent! ".s:restoremap_{a:suffix}
|
|
||||||
endif
|
|
||||||
unlet s:restoremap_{a:suffix}
|
|
||||||
endif
|
|
||||||
" call Dret("RestoreUserMaps")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Restore: {{{1
|
|
||||||
let &cpo= s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Modelines: {{{1
|
|
||||||
" vim: ts=4 fdm=marker
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue