*pi_spec.txt*   For Vim version 7.0aa.  Last change: 2002 Oct 29

by Gustavo Niemeyer ~

This is a filetype plugin to work with rpm spec files.

Currently, this Vim plugin allows you to easily update the %changelog
section in RPM spec files. It will even create a section for you if it
doesn't exist yet. If you've already inserted an entry today, it will
give you the opportunity to just add a new item in today's entry. If you
don't provide a format string (|spec_chglog_format|), it'll ask you an
email address and build a format string by itself.

1. How to use it	|spec-how-to-use-it|
2. Customizing		|spec-customizing|

==============================================================================
1. How to use it				*spec-how-to-use-it*

The spec_chglog plugin provides a map like the following:

	:map <buffer> <LocalLeader>c <Plug>SpecChangelog

It means that you may run the plugin inside a spec file by pressing
your maplocalleader key (default is '\') plus 'c'. If you do not have
|spec_chglog_format| set, the plugin will ask you for an email address
to use in this edit session.

Everytime you run the plugin, it will check to see if the last entry
in the changelog has been written today and by you. If it's the entry
mathes, it will just insert a new changelog item, otherwise it will
create a new changelog entry. If you are running with
|spec_chglog_release_info| enabled, it will also check if the name, version
and release matches. The plugin is smart enough to ask you if it should
update the package release, if you have not done so.

Setting a map					*spec-setting-a-map*
-------------

As you should know, you can easily set a map to access any Vim command (or
anything, for that matter). If you don't like the default map of
<LocalLeader>c, you may just set up your own key. The following line
shows you how you could do this in your .vimrc file, mapping the plugin to
the <F5> key:

	au FileType spec map <buffer> <F5> <Plug>SpecChangelog

Note: the plugin will respect your desire to change the default mapping
      and won't set it.

This command will add a map only in the spec file buffers.


==============================================================================
2. Customizing					*spec-customizing*

The format string				*spec_chglog_format*
-----------------

You can easily customize how your spec file entry will look like. To do
this just set the variable "spec_chglog_format" in your .vimrc file like
this: >

	let spec_chglog_format = "%a %b %d %Y My Name <my@email.com>"

Note that "%a %b %d %Y" is the most used time format. If you don't provide
a format string, when you run the SpecChangelog command for the first
time, it will ask you an email address and build the |spec_chglog_format|
variable for you. This way, you will only need to provide your email
address once.

To discover which format options you can use, take a look at the strftime()
function man page.

Where to insert new items			*spec_chglog_prepend*
-------------------------

The plugin will usually insert new %changelog entry items (note that it's
not the entry itself) after the existing ones. If you set the
spec_chglog_prepend variable >

	let spec_chglog_prepend = 1

it will insert new items before the existing ones.

Inserting release info				*spec_chglog_release_info*
----------------------

If you want, the plugin may automatically insert release information
on each changelog entry. One advantage of turning this feature on is
that it may control if the release has been updated after the last
change in the package or not. If you have not updated the package
version or release, it will ask you if it should update the package
release for you. To turn this feature on, just insert the following
code in your .vimrc: >

	let spec_chglog_release_info = 1

Then, the first item in your changelog entry will be something like: >

	+ name-1.0-1cl

If you don't like the release updating feature and don't want to answer
"No" each time it detects an old release, you may disable it with >

	let spec_chglog_never_increase_release = 1


Good luck!!

vim:tw=78:ts=8:ft=help:norl:
