Christian Brabandt:
>On Do, 04 Mär 2010, pansz wrote:
>> Script can use highlight command to change color, however, if a
>> script  meant to change one color temporarily, it has no knowledge
>> about the  previous setting.
>>
>> 1. the :hi Cursor is defined by my color scheme.  2. now in some
>> case a script change the cursor color to indicate a  special mode.
>> 3. when the mode ends, the script want to change the Cursor back
>> but it  has no knowledge about what is the highlight of Cursor
>> defined by user's  color scheme.
> […]
>> Any work around? Thanks for all.
>>
> 
> Try the attached script. I was written quick and dirty fr a similar
> issue on this list. It already queries the font attribute, though
> this only works with a patched vim, currently.
Christian Brabandt kindly donated a function "Hi" to save the
highlighting for a group (included at the very bottom).
   :hi CursorLine
   CursorLine     xxx term=underline cterm=underline guifg=white guibg=#002000
I have groups for which not all keys are defined.  They are saved with
a value of -1, which seems to be interpretted as an error:
   :echo Hi("CursorLine")
   hi CursorLine term=underline ctermbg=-1 ctermfg=-1 guibg=#002000 cterm=underline guifg=white
   :exe Hi("CursorLine")
   E421: Color name or number not recognized: ctermbg=-1 ctermfg=-1 guibg=#002000 cterm=underline guifg=white
I've delved into vim code in years past, and I have an idea of how
long it will take.  Unfortunately, I won't be doing that any time
soon.  Is there a quick way to get around the problem?  My vim version
info is:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Feb 19 2014 10:14:40)
Included patches: 1-182
Compiled by <cygwin-xfree_AT_cygwin.com>
Huge version with GTK2 GUI.  Features included (+) or not (-):
+acl             +dialog_con_gui  +insert_expand   +mouse_sgr       +ruby/dyn        +vertsplit
+arabic          +diff            +jumplist        -mouse_sysmouse  +scrollbind      +virtualedit
+autocmd         +digraphs        +keymap          +mouse_urxvt     +signs           +visual
+balloon_eval    +dnd             +langmap         +mouse_xterm     +smartindent     +visualextra
+browse          -ebcdic          +libcall         +multi_byte      -sniff           +viminfo
++builtin_terms  +emacs_tags      +linebreak       +multi_lang      +startuptime     +vreplace
+byte_offset     +eval            +lispindent      -mzscheme        +statusline      +wildignore
+cindent         +ex_extra        +listcmds        +netbeans_intg   -sun_workshop    +wildmenu
+clientserver    +extra_search    +localmap        +path_extra      +syntax          +windows
+clipboard       +farsi           +lua/dyn         +perl/dyn        +tag_binary      +writebackup
+cmdline_compl   +file_in_path    +menu            +persistent_undo +tag_old_static  +X11
+cmdline_hist    +find_in_path    +mksession       +postscript      -tag_any_white   -xfontset
+cmdline_info    +float           +modify_fname    +printer         -tcl             +xim
+comments        +folding         +mouse           +profile         +terminfo        +xsmp_interact
+conceal         -footer          +mouseshape      +python/dyn      +termresponse    +xterm_clipboard
+cryptv          +fork()          +mouse_dec       +python3/dyn     +textobjects     -xterm_save
+cscope          +gettext         -mouse_gpm       +quickfix        +title           +xpm
+cursorbind      -hangul_input    -mouse_jsbterm   +reltime         +toolbar         
+cursorshape     +iconv           +mouse_netterm   +rightleft       +user_commands   
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/etc"
 f-b for $VIMRUNTIME: "/usr/share/vim/vim74"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/include/harfbuzz   -I/usr/include/ncursesw  -ggdb -O2 -pipe -Wimplicit-function-declaration -fdebug-prefix-map=/usr/src/ports/vim/vim-7.4.182-1.x86_64/build=/usr/src/debug/vim-7.4.182-1 -fdebug-prefix-map=/usr/src/ports/vim/vim-7.4.182-1.x86_64/src/vim74=/usr/src/debug/vim-7.4.182-1 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1      
Linking: gcc   -L.   -L/usr/local/lib -Wl,--as-needed -o vim.exe   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangocairo-1.0 -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lgdk_pixbuf-2.0 -lpangoft2-1.0 -lgio-2.0 -lXfixes -lcairo -lpixman-1 -lxcb-shm -lxcb-render -lXrender -lXext -lX11 -lxcb -lXau -lXdmcp -lpng15 -lharfbuzz -lpango-1.0 -lm -lfontconfig -lexpat -lfreetype -lz -lbz2 -lgmodule-2.0 -lgobject-2.0 -lffi -lglib-2.0 -lintl -liconv -lpcre   -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE  -lm -lelf    -lncursesw -liconv -lintl   -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector  -L/usr/lib/perl5/5.14/x86_64-cygwin-threads/CORE -lperl -ldl -lcrypt       
--------------------------------------------------
fun! Hi(...)
     let s:attr  = {}
     let s:attr1 = {'bold' : 0, 'italic': 0, 'reverse': 0, 'inverse': 0, 'underline': 0, 'undercurl': 0 , 'standout':0}
     let s:query = ['fg', 'bg', 'sp', 'bold', 'italic', 'reverse',  'underline', 'undercurl', 'standout', 'font']
     for key in s:query
	     for mode in ['term', 'cterm', 'gui']
		 if !empty(synIDattr(synIDtrans(hlID(a:1)), key, mode))
		     if key =~ 'fg\|bg' || (key=='sp' && mode=='gui')
			 let s:attr[mode . key]=synIDattr(synIDtrans(hlID(a:1)), key, mode)
		     elseif key=='font' && mode=='gui'
			 let s:attr[key]=synIDattr(synIDtrans(hlID(a:1)), key, mode)
		     else
		         let s:attr1[mode . key] = synIDattr(synIDtrans(hlID(a:1)), key, mode)
		     endif
		 endif
	     endfor
     endfor
     if has("gui_running")
	let cmode='gui'
     else
	let cmode='cterm'
     endif
     for mode in ['term', 'cterm', 'gui']
	 if get(s:attr1, mode . 'italic')    ||
	  \ get(s:attr1, mode . 'bold')      ||
	  \ get(s:attr1, mode . 'reverse')   ||
	  \ get(s:attr1, mode . 'underline') || 
	  \ get(s:attr1, mode . 'standout')  ||
	  \ get(s:attr1, mode . 'undercurl')
	     let s:attr[mode]  = get(s:attr1, mode . 'italic', '') ? 'italic,' : ''
	     let s:attr[mode] .= get(s:attr1, mode . 'bold', '') ? 'bold,' : ''
	     let s:attr[mode] .= get(s:attr1, mode . 'reverse', '') ? 'reverse,' : ''
	     let s:attr[mode] .= get(s:attr1, mode . 'underline', '') ? 'underline,' : ''
	     let s:attr[mode] .= get(s:attr1, mode . 'standout', '') ? 'standout,' : '' 
	     let s:attr[mode] .= get(s:attr1, mode . 'undercurl', '') ? 'undercurl' : ''
	 endif
     endfor
     let out='hi ' . a:1
     for item in items(s:attr) 
	 "if item[1] >=0
	     let out .= printf(" %s=%s", item[0], item[1])
	 "endif
     endfor
     let out=substitute(out, ',\(\s\|$\)', ' ' , 'g')
     if len(split(out, '\s\+')) == 2
        let out=substitute(out, '^hi', '& clear', '')
     endif
"     echo  out
       
     return out
endfun
-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
--- 
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Friday, January 23, 2015
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment