Driving Behavioral Change for Information Management through Data-Driven Gree...
How to Write Patches for Vim and Become a Patch Meister
1. How to write patches for Vim
– Be a patch meister –
VimConf 2013
2013-11-16 K.Takata
1
2. Profile
●
Name: K.Takata
●
Twitter: @k_takata
●
GitHub: k-takata
●
Bitbucket: k_takata
●
Web: http://homepage3.nifty.com/k-takata/
●
Maintainer of Onigmo (The regex engine of Ruby 2.0)
●
Author of bregonig.dll (Regex DLL used by Sakura Editor, etc.)
●
Vimmer level: Beginner
K.T
I sometimes use cursor keys :-)
●
Merged patches: About 75 patches (since 7.3.668)
2
3. Contents
●
How to write patches
–
–
Join the communities
–
Get the latest source code
–
Explore the Vim's source code
–
Write patches
–
Share your patches
–
●
Tools
Categories of my patches
My favorite patches
–
Merged patches
–
Undergoing patches
3
4. Tools
●
Version Control System (VCS):
–
●
Mercurial (hg) and Mercurial Queues (MQ)
Compiler:
–
Windows:
●
–
MSVC, MinGW (BCC doesn't seem to work)
Linux, MacOS X and other OS:
●
GCC, Clang
●
Editor: Vim, of cause ;-)
●
Other utilities: ctags, etc.
4
5. Join the communities
●
vim_dev: Vim developers maillist
https://groups.google.com/forum/#!forum/vim_dev
●
vim-jp: Japanese Vim community
Top page: http://vim-jp.org/
Issue tracker: https://github.com/vim-jp/issues/issues
–
If you post an issue, you will be automatically added as a
member in a few days.
–
For Japanese people, maybe it's better to discuss
with vim-jp members before sending your patch to
vim_dev.
5
6. Get the latest source code
●
Vim from Mercurial:
http://www.vim.org/mercurial.php
$ hg clone https://vim.googlecode.com/hg/ vim
●
Build on Windows and Linux (Japanese):
http://vim-jp.org/docs/build_windows_msvc.html
http://vim-jp.org/docs/build_windows_mingw.html
http://vim-jp.org/docs/build_linux.html
(Please someone write a page for MacOS X.)
6
7. Explore the Vim's source code
●
Read src/README.txt first:
buffer.c
manipulating buffers (loaded files)
eval.c
expression evaluation (Vim script)
fileio.c
reading and writing files
mbyte.c
multi-byte character handling
option.c options
screen.c
updating the windows
gui*.c
GUI
if_*.c
interface to other languages (python, etc.) and tools
os_*.c
OS depended codes
proto/*.pro
prototypes generated by cproto
7
8. Explore the Vim's source code
●
Use tag jump with Exuberant Ctags:
$ cd src
$ ctags -R
Open a source file with Vim and move the cursor to a symbol, then
type Ctrl-].
For detail:
:help tag
:help window-tag
:help -t
●
If you install Emacs on Ubuntu, ctags may become a symlink to
etags. To fix this, use the following command:
$ sudo update-alternatives --config ctags
A menu will be shown, then select ctags-exuberant.
8
9. Write patches
You should see:
:help coding-style
:help development
After writing comments or documents, use spell checker:
:set spell
For detail:
:help spell
●
Japanese translation of spell.txt is undergoing.
Please join: https://github.com/vim-jp/vimdoc-ja
●
Please also check: How to write patches (Japanese):
http://vim-jp.org/docs/how_to_write_patches.html
9
10. Share your patches
●
●
If you want to share your series of patches with other
people, use Bitbucket.
K.Takata's patch queue for Vim:
https://bitbucket.org/k_takata/vim-ktakata-mq
?
$ hg qclone https://vim.googlecode.com/hg/
-p https://bitbucket.org/k_takata/vim-ktakata-mq vim
$ cd vim
$ hg qpush -a
$ make
●
To get the latest source code and patches when they are
updated:
$ hg qpop -a && hg pull -u && hg pull -u --mq
&& hg qpush -a
10
11. Categories of my patches
●
OS: Windows, Linux, All Platforms
●
Mutlibyte support
●
Build system
●
Fix typos in comments or documents
●
Language interface (Python, Perl, Ruby, etc.)
●
Tests
●
Runtime files (e.g. less.vim)
> Any kind of patch is welcome! <
11
12. My favorite patches
●
Part 1: Merged patches
–
–
symlinkfix
–
●
Cygwin clipboard
spelllang-cjk
Part 2: Undergoing patches
–
DirectWrite
–
breakindent
12
14. symlinkfix (7.3.1182)
https://github.com/vim-jp/issues/issues/241
Authors: David Pope and K.Takata
Platform: Windows
Windows Vista and later support symlinks but Vim didn't support
them when :set backup backupcopy=auto. (Symlinks became
normal files after editing.)
The original patch didn't support multibyte filenames, so I fixed it.
This was my first patch for the main part of Vim. (I already sent some
patches for runtime files.) It took about a year to be merged.
This patch had a bug and the fix was merged as 7.3.1210.
It took only 15 minutes!!!
14