| # Copyright 1999-2004 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Header: /var/cvsroot/gentoo-x86/eclass/vim-plugin.eclass,v 1.23 2008/08/30 07:59:18 hawking Exp $ |
| # |
| # This eclass simplifies installation of app-vim plugins into |
| # /usr/share/vim/vimfiles. This is a version-independent directory |
| # which is read automatically by vim. The only exception is |
| # documentation, for which we make a special case via vim-doc.eclass |
| |
| inherit vim-doc |
| EXPORT_FUNCTIONS src_install pkg_postinst pkg_postrm |
| |
| VIM_PLUGIN_VIM_VERSION="${VIM_PLUGIN_VIM_VERSION:-7.0}" |
| |
| IUSE="" |
| DEPEND="|| ( >=app-editors/vim-${VIM_PLUGIN_VIM_VERSION} |
| >=app-editors/gvim-${VIM_PLUGIN_VIM_VERSION} )" |
| RDEPEND="${DEPEND}" |
| SRC_URI="mirror://gentoo/${P}.tar.bz2" |
| SLOT="0" |
| |
| vim-plugin_src_install() { |
| local f |
| |
| ebegin "Fixing file permissions" |
| # Make sure perms are good |
| chmod -R a+rX "${S}" || die "chmod failed" |
| find "${S}" -user 'portage' -exec chown root '{}' \; || die "chown failed" |
| if use userland_BSD || use userland_Darwin ; then |
| find "${S}" -group 'portage' -exec chgrp wheel '{}' \; || die "chgrp failed" |
| else |
| find "${S}" -group 'portage' -exec chgrp root '{}' \; || die "chgrp failed" |
| fi |
| eend $? |
| |
| # Install non-vim-help-docs |
| cd "${S}" |
| for f in *; do |
| [[ -f "${f}" ]] || continue |
| if [[ "${f}" = *.html ]]; then |
| dohtml "${f}" |
| else |
| dodoc "${f}" |
| fi |
| rm -f "${f}" |
| done |
| |
| # Install remainder of plugin |
| cd "${WORKDIR}" |
| dodir /usr/share/vim |
| mv "${S}" "${D}"/usr/share/vim/vimfiles |
| |
| # Fix remaining bad permissions |
| chmod -R -x+X "${D}"/usr/share/vim/vimfiles/ || die "chmod failed" |
| } |
| |
| vim-plugin_pkg_postinst() { |
| update_vim_helptags # from vim-doc |
| update_vim_afterscripts # see below |
| display_vim_plugin_help # see below |
| } |
| |
| vim-plugin_pkg_postrm() { |
| update_vim_helptags # from vim-doc |
| update_vim_afterscripts # see below |
| |
| # Remove empty dirs; this allows |
| # /usr/share/vim to be removed if vim-core is unmerged |
| find /usr/share/vim/vimfiles -depth -type d -exec rmdir {} \; 2>/dev/null |
| } |
| |
| # update_vim_afterscripts: create scripts in |
| # /usr/share/vim/vimfiles/after/* comprised of the snippets in |
| # /usr/share/vim/vimfiles/after/*/*.d |
| update_vim_afterscripts() { |
| local d f afterdir="${ROOT}"/usr/share/vim/vimfiles/after |
| |
| # Nothing to do if the dir isn't there |
| [ -d "${afterdir}" ] || return 0 |
| |
| einfo "Updating scripts in /usr/share/vim/vimfiles/after" |
| find "${afterdir}" -type d -name \*.vim.d | \ |
| while read d; do |
| echo '" Generated by update_vim_afterscripts' > "${d%.d}" |
| find "${d}" -name \*.vim -type f -maxdepth 1 -print0 | \ |
| sort -z | xargs -0 cat >> "${d%.d}" |
| done |
| |
| einfo "Removing dead scripts in /usr/share/vim/vimfiles/after" |
| find "${afterdir}" -type f -name \*.vim | \ |
| while read f; do |
| [[ "$(head -n 1 ${f})" == '" Generated by update_vim_afterscripts' ]] \ |
| || continue |
| # This is a generated file, but might be abandoned. Check |
| # if there's no corresponding .d directory, or if the |
| # file's effectively empty |
| if [[ ! -d "${f}.d" || -z "$(grep -v '^"' "${f}")" ]]; then |
| rm -f "${f}" |
| fi |
| done |
| } |
| |
| # Display a message with the plugin's help file if one is available. Uses the |
| # VIM_PLUGIN_HELPFILES env var. If multiple help files are available, they |
| # should be separated by spaces. If no help files are available, but the env |
| # var VIM_PLUGIN_HELPTEXT is set, that is displayed instead. Finally, if we |
| # have nothing else, display a link to VIM_PLUGIN_HELPURI. An extra message |
| # regarding enabling filetype plugins is displayed if VIM_PLUGIN_MESSAGES |
| # includes the word "filetype". |
| display_vim_plugin_help() { |
| local h |
| |
| if [[ -n "${VIM_PLUGIN_HELPFILES}" ]] ; then |
| elog " " |
| elog "This plugin provides documentation via vim's help system. To" |
| elog "view it, use:" |
| for h in ${VIM_PLUGIN_HELPFILES} ; do |
| elog " :help ${h}" |
| done |
| elog " " |
| |
| elif [[ -n "${VIM_PLUGIN_HELPTEXT}" ]] ; then |
| elog " " |
| while read h ; do |
| elog "$h" |
| done <<<"${VIM_PLUGIN_HELPTEXT}" |
| elog " " |
| |
| elif [[ -n "${VIM_PLUGIN_HELPURI}" ]] ; then |
| elog " " |
| elog "Documentation for this plugin is available online at:" |
| elog " ${VIM_PLUGIN_HELPURI}" |
| elog " " |
| fi |
| |
| if has "filetype" "${VIM_PLUGIN_MESSAGES}" ; then |
| elog "This plugin makes use of filetype settings. To enable these," |
| elog "add lines like:" |
| elog " filetype plugin on" |
| elog " filetype indent on" |
| elog "to your ~/.vimrc file." |
| elog " " |
| fi |
| } |
| |