SlideShare a Scribd company logo
How to write patches for Vim
– Be a patch meister –

VimConf 2013
2013-11-16 K.Takata

1
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
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
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
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
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
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
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
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
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
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
My favorite patches
●

Part 1: Merged patches
–
–

symlinkfix

–
●

Cygwin clipboard
spelllang-cjk

Part 2: Undergoing patches
–

DirectWrite

–

breakindent

12
Cygwin clipboard (7.3.836)

https://groups.google.com/d/topic/vim_dev/UpMljHBa77w/discussio
Authors: Frodak Baksik, Anton Sharonov and K.Takata
Platform: Cygwin
The first version backs to 2007.
Cygwin Vim didn't support Win32 clipboard. You had to install
the fakeclip plugin by Kana Natsuno.
Now you can use Win32 clipboard without any plugins.

13
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
7.4.088 (spelllang-cjk)
https://github.com/vim-jp/issues/issues/476
Author: K.Takata
Platform: All
This patch was merged this week!
When :set spelllang=en,cjk, CJK
characters are excluded from spell checking.

15
7.4.088 (spelllang-cjk)
:set spelllang=en

:set spelllang=en,cjk

16
DirectWrite
https://github.com/vim-jp/issues/issues/262
https://github.com/vim-jp/issues/issues/337
Authors: MURAOKA Taro and K.Takata
Platform: Windows
Better text rendering using DirectWrite.
:set renderoptions=type:directx
17
breakindent
https://github.com/vim-jp/issues/issues/114
https://retracile.net/wiki/VimBreakIndent
Authors: Many authors
Platform: All
When :set breakindent, every wrapped line will continue
visually indented.
The first patch was written by Václav Šmilauer in 2004.
I updated the patch for 7.4, and also fixed one FIXME.
TODO:
–

There are still some FIXMEs in screen.c.

–

No test case.
18
breakindent

Off

On

19
Conclusions
●

Build your own Vim.

●

Any kind of patch is welcome. Don't be afraid.

●

Find your favorite patch and improve it.

20
Enjoy Vimming!

21

More Related Content

What's hot

PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Tools
rjsmelo
 
Docker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo DublinDocker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo Dublin
rjsmelo
 
Pharo 7.0 and 8.0 alpha
Pharo 7.0 and 8.0 alphaPharo 7.0 and 8.0 alpha
Pharo 7.0 and 8.0 alpha
Pharo
 
Install Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devicesInstall Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devices
Paolo Sereno
 
Vim
VimVim
about Debian "squeeze" @201002 OSC Tokyospring
about Debian "squeeze" @201002 OSC Tokyospringabout Debian "squeeze" @201002 OSC Tokyospring
about Debian "squeeze" @201002 OSC Tokyospring
Hideki Yamane
 
Comparing C and Go
Comparing C and GoComparing C and Go
Comparing C and Go
Marcin Pasinski
 
KDE Plasma Develop Intro
KDE Plasma Develop IntroKDE Plasma Develop Intro
KDE Plasma Develop Intro
csslayer
 
EuroBSDCon 2021 - (auto)Installing BSD Systems
EuroBSDCon 2021 - (auto)Installing BSD SystemsEuroBSDCon 2021 - (auto)Installing BSD Systems
EuroBSDCon 2021 - (auto)Installing BSD Systems
Vinícius Zavam
 
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois TigeotPorting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
eurobsdcon
 
GIT_GITHUB_2016_06_17
GIT_GITHUB_2016_06_17GIT_GITHUB_2016_06_17
GIT_GITHUB_2016_06_17
siva ram
 
SCM Boot Camp
SCM Boot CampSCM Boot Camp
SCM Boot Camp
bleis tift
 
Python_Session
Python_SessionPython_Session
Python_Session
siva ram
 
第32回PHP勉強会 LT 極めてない! Git
第32回PHP勉強会 LT 極めてない! Git第32回PHP勉強会 LT 極めてない! Git
第32回PHP勉強会 LT 極めてない! Git
kunit
 
openSUSE tools on Debian
openSUSE tools on DebianopenSUSE tools on Debian
openSUSE tools on Debian
Hideki Yamane
 
FFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkitFFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkit
Stefano Sabatini
 
What's missing from upstream kernel containers?
What's missing from upstream kernel containers?What's missing from upstream kernel containers?
What's missing from upstream kernel containers?
Kirill Kolyshkin
 
Not so brief history of Linux Containers
Not so brief history of Linux ContainersNot so brief history of Linux Containers
Not so brief history of Linux Containers
Kirill Kolyshkin
 
tDiary開発環境!VMWarePlayer編
tDiary開発環境!VMWarePlayer編tDiary開発環境!VMWarePlayer編
tDiary開発環境!VMWarePlayer編
freedomcat
 

What's hot (19)

PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Tools
 
Docker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo DublinDocker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo Dublin
 
Pharo 7.0 and 8.0 alpha
Pharo 7.0 and 8.0 alphaPharo 7.0 and 8.0 alpha
Pharo 7.0 and 8.0 alpha
 
Install Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devicesInstall Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devices
 
Vim
VimVim
Vim
 
about Debian "squeeze" @201002 OSC Tokyospring
about Debian "squeeze" @201002 OSC Tokyospringabout Debian "squeeze" @201002 OSC Tokyospring
about Debian "squeeze" @201002 OSC Tokyospring
 
Comparing C and Go
Comparing C and GoComparing C and Go
Comparing C and Go
 
KDE Plasma Develop Intro
KDE Plasma Develop IntroKDE Plasma Develop Intro
KDE Plasma Develop Intro
 
EuroBSDCon 2021 - (auto)Installing BSD Systems
EuroBSDCon 2021 - (auto)Installing BSD SystemsEuroBSDCon 2021 - (auto)Installing BSD Systems
EuroBSDCon 2021 - (auto)Installing BSD Systems
 
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois TigeotPorting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
 
GIT_GITHUB_2016_06_17
GIT_GITHUB_2016_06_17GIT_GITHUB_2016_06_17
GIT_GITHUB_2016_06_17
 
SCM Boot Camp
SCM Boot CampSCM Boot Camp
SCM Boot Camp
 
Python_Session
Python_SessionPython_Session
Python_Session
 
第32回PHP勉強会 LT 極めてない! Git
第32回PHP勉強会 LT 極めてない! Git第32回PHP勉強会 LT 極めてない! Git
第32回PHP勉強会 LT 極めてない! Git
 
openSUSE tools on Debian
openSUSE tools on DebianopenSUSE tools on Debian
openSUSE tools on Debian
 
FFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkitFFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkit
 
What's missing from upstream kernel containers?
What's missing from upstream kernel containers?What's missing from upstream kernel containers?
What's missing from upstream kernel containers?
 
Not so brief history of Linux Containers
Not so brief history of Linux ContainersNot so brief history of Linux Containers
Not so brief history of Linux Containers
 
tDiary開発環境!VMWarePlayer編
tDiary開発環境!VMWarePlayer編tDiary開発環境!VMWarePlayer編
tDiary開発環境!VMWarePlayer編
 

Similar to How to write patches for Vim

OpenStack Contribution Process
OpenStack Contribution ProcessOpenStack Contribution Process
OpenStack Contribution Process
openstackindia
 
Openstack contribution process
Openstack contribution processOpenstack contribution process
Openstack contribution process
Syed Armani
 
IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)
IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)
IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)
Alexandre Gouaillard
 
Git Basics
Git BasicsGit Basics
Git Basics
Ryan Condron
 
Intro to Kernel Debugging - Just make the crashing stop!
Intro to Kernel Debugging - Just make the crashing stop!Intro to Kernel Debugging - Just make the crashing stop!
Intro to Kernel Debugging - Just make the crashing stop!
All Things Open
 
Helpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and DjangoHelpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and Django
roskakori
 
Life of a Chromium Developer
Life of a Chromium DeveloperLife of a Chromium Developer
Life of a Chromium Developer
mpaproductions
 
Embedding Qt
Embedding QtEmbedding Qt
Embedding Qt
FSCONS
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
Eugene Yokota
 
Os dev tool box
Os dev tool boxOs dev tool box
Os dev tool box
bpowell29a
 
Module 4_WorkinUnixLinuxCommandAndKeepDoing
Module 4_WorkinUnixLinuxCommandAndKeepDoingModule 4_WorkinUnixLinuxCommandAndKeepDoing
Module 4_WorkinUnixLinuxCommandAndKeepDoing
alhassanjawad1
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
Shingo Omura
 
LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205
Linaro
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
Shougo
 
Rejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainRejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform Gain
Łukasz Piątkowski
 
.NET Applications & Cloud Meetup at 7 Peaks
.NET Applications & Cloud Meetup at 7 Peaks.NET Applications & Cloud Meetup at 7 Peaks
.NET Applications & Cloud Meetup at 7 Peaks
Seven Peaks Speaks
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
Henry Schreiner
 
3DC Intro to Git Workshop
3DC Intro to Git Workshop3DC Intro to Git Workshop
3DC Intro to Git Workshop
BeckhamWee
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
OpenShift Origin
 
LinuxKit Deep Dive
LinuxKit Deep DiveLinuxKit Deep Dive
LinuxKit Deep Dive
Docker, Inc.
 

Similar to How to write patches for Vim (20)

OpenStack Contribution Process
OpenStack Contribution ProcessOpenStack Contribution Process
OpenStack Contribution Process
 
Openstack contribution process
Openstack contribution processOpenstack contribution process
Openstack contribution process
 
IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)
IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)
IIT-RTC 2017 Qt WebRTC Tutorial (Qt Janus Client)
 
Git Basics
Git BasicsGit Basics
Git Basics
 
Intro to Kernel Debugging - Just make the crashing stop!
Intro to Kernel Debugging - Just make the crashing stop!Intro to Kernel Debugging - Just make the crashing stop!
Intro to Kernel Debugging - Just make the crashing stop!
 
Helpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and DjangoHelpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and Django
 
Life of a Chromium Developer
Life of a Chromium DeveloperLife of a Chromium Developer
Life of a Chromium Developer
 
Embedding Qt
Embedding QtEmbedding Qt
Embedding Qt
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
Os dev tool box
Os dev tool boxOs dev tool box
Os dev tool box
 
Module 4_WorkinUnixLinuxCommandAndKeepDoing
Module 4_WorkinUnixLinuxCommandAndKeepDoingModule 4_WorkinUnixLinuxCommandAndKeepDoing
Module 4_WorkinUnixLinuxCommandAndKeepDoing
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
 
LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
 
Rejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainRejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform Gain
 
.NET Applications & Cloud Meetup at 7 Peaks
.NET Applications & Cloud Meetup at 7 Peaks.NET Applications & Cloud Meetup at 7 Peaks
.NET Applications & Cloud Meetup at 7 Peaks
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
 
3DC Intro to Git Workshop
3DC Intro to Git Workshop3DC Intro to Git Workshop
3DC Intro to Git Workshop
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
 
LinuxKit Deep Dive
LinuxKit Deep DiveLinuxKit Deep Dive
LinuxKit Deep Dive
 

Recently uploaded

RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Zilliz
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 

Recently uploaded (20)

RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 

How to write patches for Vim

  • 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
  • 13. Cygwin clipboard (7.3.836) https://groups.google.com/d/topic/vim_dev/UpMljHBa77w/discussio Authors: Frodak Baksik, Anton Sharonov and K.Takata Platform: Cygwin The first version backs to 2007. Cygwin Vim didn't support Win32 clipboard. You had to install the fakeclip plugin by Kana Natsuno. Now you can use Win32 clipboard without any plugins. 13
  • 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
  • 15. 7.4.088 (spelllang-cjk) https://github.com/vim-jp/issues/issues/476 Author: K.Takata Platform: All This patch was merged this week! When :set spelllang=en,cjk, CJK characters are excluded from spell checking. 15
  • 17. DirectWrite https://github.com/vim-jp/issues/issues/262 https://github.com/vim-jp/issues/issues/337 Authors: MURAOKA Taro and K.Takata Platform: Windows Better text rendering using DirectWrite. :set renderoptions=type:directx 17
  • 18. breakindent https://github.com/vim-jp/issues/issues/114 https://retracile.net/wiki/VimBreakIndent Authors: Many authors Platform: All When :set breakindent, every wrapped line will continue visually indented. The first patch was written by Václav Šmilauer in 2004. I updated the patch for 7.4, and also fixed one FIXME. TODO: – There are still some FIXMEs in screen.c. – No test case. 18
  • 20. Conclusions ● Build your own Vim. ● Any kind of patch is welcome. Don't be afraid. ● Find your favorite patch and improve it. 20